VoIPbin MCP Server
OfficialThis MCP server exposes VoIPbin CPaaS APIs as tools for AI assistants to manage cloud communications.
Calls: list, get, create, and hang up calls.
Flows: list, get, create, update, delete flows; list/get active flows and stop them.
Contacts: list, get, create, update, delete contacts; manage addresses and tags.
Messaging: list/get/send SMS messages and emails.
Conferences: list, get, create, delete conferences.
Campaigns: list, get, create, update, update actions, delete campaigns.
Resources: list/get agents, numbers, conversations, queues, routes, billings, AIs, tags, and extensions.
Account & AI: get customer info; create AI voice agents with LLM, TTS, and STT settings.
Note: Routes require superadmin; some tools have known limitations.
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., "@VoIPbin MCP ServerShow me all my active calls"
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.
VoIPbin MCP Server
An MCP (Model Context Protocol) server that enables AI assistants to interact with the VoIPbin CPaaS platform. It exposes VoIPbin's communication APIs -- calls, flows, messaging, conferencing, AI, and more -- as tools that any MCP-compatible client can use to manage and automate cloud communications.
Installation
The client configurations below all launch the server with uvx, which fetches
and runs it without a manual install:
uvx voipbin-mcpTo install it into an environment instead:
pip install voipbin-mcpRequires Python 3.10 or newer.
Related MCP server: Twilio MCP Server
Configuration
Claude Code
Add to ~/.claude.json:
{
"mcpServers": {
"voipbin": {
"command": "uvx",
"args": ["voipbin-mcp"],
"env": {
"VOIPBIN_API_KEY": "your-access-key"
}
}
}
}Cursor
Add to .cursor/mcp.json in your project directory:
{
"mcpServers": {
"voipbin": {
"command": "uvx",
"args": ["voipbin-mcp"],
"env": {
"VOIPBIN_API_KEY": "your-access-key"
}
}
}
}Generic MCP Client
Any MCP-compatible client can connect by running the voipbin-mcp command with the VOIPBIN_API_KEY environment variable set:
VOIPBIN_API_KEY=your-access-key voipbin-mcpAvailable Tools
Resource | Tools |
Calls |
|
Flows |
|
Active Flows |
|
Agents |
|
Numbers |
|
Contacts |
|
Messages |
|
Emails |
|
Conversations |
|
Conferences |
|
Campaigns |
|
Queues |
|
Routes |
|
Billings |
|
AIs |
|
Customer |
|
Tags |
|
Extensions |
|
Phone (live conversation) |
|
Example Usage
Once configured, you can ask your AI assistant to interact with VoIPbin directly:
List active calls:
"Show me all my active calls"
The AI uses list_calls to fetch and display your current calls.
Create a flow:
"Create a flow that answers and plays a greeting"
The AI uses create_flow to build a call flow with answer and play actions.
Check billing:
"What are my recent billing charges?"
The AI uses list_billings to retrieve your billing history.
Manage contacts:
"Add a new contact named John with phone number +1234567890"
The AI uses create_contact, passing the number as an address of type tel.
Live phone conversations
The phone_* tools let the agent itself talk on a phone call: it speaks
through text-to-speech and hears the other party through live speech-to-text.
The MCP server owns the call session (the call, transcription, speech and the
event stream), so every tool call is one conversational turn.
Cost. A live conversation is billed as a call plus speech-to-text plus text-to-speech. Interim speech-recognition events are also delivered to your account's webhook if one is configured, so a long conversation can send a large number of webhook requests.
Outgoing call:
"Call extension 2001 from +15550001234 and ask whether the delivery arrived."
The agent calls phone_call_start (it returns once the call is answered),
then repeats phone_say_and_listen(call_id, text) for each turn, and ends with
phone_hangup.
Incoming calls:
phone_incoming_configure(number_id, enabled=true)once. This replaces the number's call flow with one that keeps callers ringing until the agent answers; the original flow id is stored on the replacement flow.phone_wait_incoming(number_id)answers the next call with a greeting. Call it again to wait for the next one.phone_incoming_configure(number_id, enabled=false)gives the number back its original call flow.
Incoming calls are handled only while an MCP server is running and waiting.
Only one MCP process may wait on a given number. While the server runs, an
incoming call to a number that this server process has already waited on is
rejected if no phone_wait_incoming picks it up within 15 seconds. Calls to
configured numbers the process has not waited on are left ringing.
Safety limits. At most 4 concurrent calls per server process. A call is
hung up after 5 minutes without any phone tool call, at its
max_duration_seconds (1 hour at most), and when the MCP server exits (stdin
closed, SIGTERM or SIGINT).
Claude Code. Allow the phone tools ahead of time (for example with
/permissions or an allowlist in your settings). A permission prompt is not
skipped during a call: the time it waits adds to the pause the other party
hears and counts towards the 5 minute idle hangup.
Configuration reference
Variable | Default | Purpose |
| required | Your VoIPbin access key. |
|
| Full base URL including the |
|
| How the key is transmitted: |
Security Note
Your VoIPbin API key is sent in a Cookie header on every request, over
HTTPS. Earlier releases sent it as a URL query parameter (accesskey=), which
leaves the key in server access logs and proxy logs.
If a proxy or ingress in front of your deployment strips or rewrites cookies,
set VOIPBIN_AUTH_TRANSPORT=query to fall back to the query parameter. Prefer
fixing the proxy: the query form has the logging exposure described above.
Avoid sharing unredacted debug output, and rotate your key if you suspect it
has been exposed. When configuring an AI agent with create_ai, pass an
environment variable reference for engine_key rather than a literal provider
key; that value is stored by the API and can appear in responses.
Known limitations
Around 12% of the VoIPbin REST API is exposed as tools. Coverage expands in later releases.
list_routesandget_routeare platform-level and answer 403 for a normal customer access key.create_conferencedoes not expose thedatafield; it always sends an empty object.Attachments on
send_emailreference existing VoIPbin objects (such as a recording) rather than uploading file contents.Live phone conversations take about 4 seconds per turn: roughly 1 second to finish transcribing, the agent's own thinking time, and about 1 second before synthesized speech is heard.
The platform reports no "speech finished" event, so when the agent stops talking is estimated from the text length. Barge-in (stopping the agent's speech when the other party talks over it) can be slightly early or late.
On a speakerphone the agent's own voice can echo back and be transcribed; such speech is marked
during_agent_speech.An incoming call that starts ringing while the server's event connection to VoIPbin is down is not seen: it is neither answered nor rejected, and the caller keeps ringing until the platform's call timeout. Call
phone_wait_incomingagain once the connection is back to take later calls.Without a running MCP server, an incoming call to a number prepared with
phone_incoming_configurekeeps ringing (up to the platform's one hour call timeout), and the caller may hear no ringback tone.Where the aws speech-to-text provider is not available (some self-hosted setups), transcription silently falls back to a provider that stops after about 5 minutes. This cannot be detected through the API; phone results include
stt_silent_secondswhen nothing has been recognised for 4 minutes.If the MCP server is killed (SIGKILL), it cannot hang up its calls. An outgoing call stays up until its
max_duration_seconds(thesleepplaced on the call ends). An incoming call stays up until the incoming flow's one hoursleepends or the platform's one hour channel timeout hangs it up, whichever comes first, so the longest incoming conversation is one hour minus the time the call spent ringing.PSTN calling on the hosted platform follows the existing account policy.
Getting an API Key
Sign up at voipbin.net and create an access key through the API or the admin console at admin.voipbin.net.
Development
git clone https://github.com/voipbin/mcp.git
cd mcp
uv venv
uv pip install -e ".[dev]"
uv run pytest tests/ -vThe release gate builds the distribution and installs it at both ends of the
declared mcp range, because a package can pass in the lock environment and
still be broken for everyone installing from PyPI. To reproduce that locally:
uv build
uv run python scripts/stdio_smoke.pyTool descriptions are pinned by exact text in tests/golden_docstrings.json,
so any docstring edit fails the suite until the golden file is regenerated.
That is intentional: ten documented behaviours in this package turned out to
contradict the backend, so an edit is the moment to re-read the Go source named
beside the claim in PINNED_CLAIMS and confirm it still holds. Once verified:
# optional but recommended: check every pinned Go reference still resolves
VOIPBIN_MONOREPO=/path/to/monorepo uv run pytest tests/ -k resolve
uv run python scripts/update_golden_docstrings.pyLicense
MIT
Available Tools
66 toolsadd_contact_addressA
Add a way to reach a contact.
Args: contact_id: The UUID of the contact. address_type: Either "tel" or "email". Any other value is rejected with a 400. target: The phone number (E.164) or email address. name: Optional label for this address. detail: Optional free-text detail. is_primary: Whether this becomes the primary address of its type.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | ||
| detail | No | ||
| target | Yes | ||
| contact_id | Yes | ||
| is_primary | No | ||
| address_type | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden, and it does disclose two useful behaviors: address_type is constrained to 'tel'/'email' with a 400 rejection, and is_primary changes the primary address of its type. It says nothing about auth/permissions, duplicate handling, or other error modes, so meaningful gaps remain for a mutation tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Purpose is front-loaded in one line followed by a clean per-argument block with no filler. The 'Args:' enumeration is mechanical but every line documents a distinct parameter, so nothing is wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be described, and all six parameters plus the address_type validation are documented. The remaining gap is mutation-side behavior (permissions, duplicate/conflict handling) that an unannotated write tool should ideally state.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate fully and it does: it gives the UUID nature of contact_id, the string constraint on address_type, the E.164 vs email format of target, and the meaning of the optional name, detail, and is_primary fields. This is richer than the bare schema titles.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The verb 'Add' and the resource are clear once the Args block is read, but the headline sentence 'Add a way to reach a contact' describes the concept obliquely rather than saying 'contact address'. It distinguishes itself from delete_contact_address/update_contact_address only by implication of the verb, not by explicit sibling reference.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this versus update_contact_address or delete_contact_address, no prerequisites, no mention of what happens when the same address already exists. The agent must infer the create-vs-update distinction from the name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
add_contact_tagB
Attach a tag to a contact.
Args: contact_id: The UUID of the contact. tag_id: The UUID of the tag to attach.
| Name | Required | Description | Default |
|---|---|---|---|
| tag_id | Yes | ||
| contact_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It states a mutation ('Attach') but does not describe idempotency, what happens if the tag is already attached, required permissions, or error behavior. For a mutating tool with zero annotation coverage, this is a significant gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences and an Args list, front-loaded with the core action. Every element earns its place, with no redundancy or filler. It is appropriately sized for a simple two-parameter tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be explained. However, the description omits usage guidance and behavioral details for a mutation tool with no annotations. For a simple attach operation the parameter documentation is adequate, but the context is not fully complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It documents both parameters by name and meaning: contact_id as the UUID of the contact and tag_id as the UUID of the tag to attach. This adds clear semantic value beyond the bare schema titles, though it does not provide format examples or validation 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 states a specific verb and resource: 'Attach a tag to a contact.' This clearly distinguishes it from the sibling delete_contact_tag by the verb 'attach'. However, it does not explicitly name any alternative tool or explain the relationship to add_contact_address or update_contact.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this tool versus alternatives such as delete_contact_tag or update_contact. No prerequisites, side effects, or context for invocation are provided. The description only states what the tool does, leaving the agent to infer usage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_aiA
Create a new AI voice agent.
Provider lists change as vendors are added, so the values below are examples rather than the complete set. An unsupported engine_model, tts_type or stt_type comes back as a 500 INTERNAL error with no indication of which field was wrong, so treat a 500 from this tool as a rejected argument rather than a transient fault, and do not retry it unchanged.
Args: name: AI agent name. detail: Description. engine_model: LLM model as ".". The vendor prefix is what the server validates, so new models from a supported vendor work without a release here. Examples: "openai.gpt-4o-mini", "anthropic.claude-3-5-sonnet", "gemini.gemini-pro-latest". engine_key: API key for the LLM provider, stored and transmitted verbatim. Nothing expands environment-variable references, so passing "$OPENAI_API_KEY" sends that literal string to the provider and the agent fails to authenticate. The value is returned in API responses and appears in server logs, so treat it as exposed. init_prompt: System prompt for the AI agent. tts_type: Text-to-speech provider. Examples: google, azure, openai, elevenlabs, cartesia, deepgram. tts_voice_id: Voice ID for TTS (e.g., "en-US-Standard-A" for Google). stt_type: Speech-to-text provider. Examples: google, deepgram, cartesia, elevenlabs. stt_language: Language code in BCP-47 format (default "en-US"). parameter: Required by the API, defaulted here. NOT engine tuning, despite the name: the dict is serialised to JSON and appended to the agent's SYSTEM PROMPT as an extra message, alongside init_prompt. It reaches the model as prose the model reads, not as knobs the engine applies, so no key here changes temperature, sampling or any engine setting. Keys are also carried to the realtime voice runtime, where nothing consumes them. Put instructions in init_prompt and leave this empty unless you deliberately want extra JSON context in the prompt.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| detail | Yes | ||
| stt_type | Yes | ||
| tts_type | Yes | ||
| parameter | No | ||
| engine_key | Yes | ||
| init_prompt | Yes | ||
| engine_model | Yes | ||
| stt_language | No | en-US | |
| tts_voice_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does so well: it warns that unsupported engine_model/tts_type/stt_type values surface as an opaque 500 with no field indication, that engine_key is stored and transmitted verbatim, that environment-variable references are not expanded (so '$OPENAI_API_KEY' is sent literally), and that the key is returned in API responses and server logs. It also clarifies that the 'parameter' field is not engine tuning and reaches the model as prose in the system prompt. This is rich, non-obvious behavioral disclosure.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is long, but it is front-loaded with purpose and safety guidance and every line carries unique information, especially the engine_key and parameter warnings that cannot be inferred. Minor redundancy in the provider example lists, but no filler 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?
For a 10-parameter mutation tool with an output schema, the description covers what is created, the accepted value formats, the failure mode, and the security implications of the credential field. With return values handled by the output schema, nothing an agent needs to call this correctly is 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 description coverage is 0%, so the description must compensate entirely, and it documents all ten parameters: engine_model format '<vendor>.<model>' with the vendor-prefix validation rule, engine_key semantics and exposure, tts_voice_id format example, stt_language BCP-47 default, and an extended explanation correcting the misleading 'parameter' name. This far exceeds what the bare 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 first line states a specific verb and resource: 'Create a new AI voice agent.' This clearly separates it from the read-only siblings list_ais and get_ai. It does not explicitly name alternatives, but the create-vs-list/get distinction is unambiguous from the name and opening sentence.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied (this is the creation counterpart to list_ais/get_ai) but never stated as when-to-use vs alternatives. The description does give operational routing guidance — treat a 500 as a rejected argument rather than a transient fault, and do not retry unchanged — which is useful but sits closer to behavioral handling than tool selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_callA
Create a new outbound call.
Args: source_type: Source address type. The types that make sense for an outbound call are tel, sip, agent and extension. The platform defines more (ai, ai_team, conference, email, line, webchat, web_session, whatsapp), so an unlisted value is not necessarily rejected, it is simply not meaningful here. source_target: Source address (e.g., "+14155551234" for tel, UUID for agent). destination_type: Destination address type. Same set as source_type: tel, sip, agent and extension are the meaningful ones here. destination_target: Destination address (e.g., "+14155555678" for tel). flow_id: Optional flow ID to execute when the call connects.
| Name | Required | Description | Default |
|---|---|---|---|
| flow_id | No | ||
| source_type | Yes | ||
| source_target | Yes | ||
| destination_type | Yes | ||
| destination_target | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden, and it offers genuine behavioral insight: it explains that unlisted type values may still be accepted but are 'not meaningful here,' and that flow_id executes only once the call connects. It omits permissions, billing/side effects, failure behavior, and rate limits, so it is partial rather than complete.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the one-line purpose, then structured per-argument docs with no filler. The destination_type entry just cross-references source_type, which is efficient, though the long parenthetical type list is slightly verbose for the value it adds.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be described, and all five parameters are documented despite zero schema coverage. Missing prerequisites and post-creation behavior are minor gaps given the tool's straightforward scope.
Complex tools with many parameters or behaviors need more documentation. 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 0%, so the description must carry all parameter meaning, and it does: it enumerates meaningful types for source and destination, gives concrete format examples ('+14155551234' for tel, UUID for agent), and clarifies that flow_id is optional and triggered on connect. This significantly exceeds what the bare schema conveys.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('Create a new outbound call') and the direction of the call, which distinguishes it from hangup_call and the read-only call siblings (list_calls, get_call). It does not explicitly name an alternative or state when creating a call is the right choice over, say, reusing an existing flow.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use/when-not guidance, no prerequisites (e.g. a provisioned number or agent must exist as source), and no mention of what to do next after creating the call. The entire body is parameter documentation rather than usage guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_campaignA
Create a new outbound campaign.
A campaign needs an outplan (the dialing schedule) and an outdial (the list of targets) to place calls. Omit either and the campaign is still created and answers success, but it never dials: the server skips validation for an empty reference, then finds no schedule or no targets at execution time. Create or look up those resources first and pass their UUIDs.
queue_id behaves differently, and not the way it reads. It is where answered calls are delivered, and passing it ENABLES a pacing gate: the server then only dials while available_agents * service_level / 100 > calls_already_dialing, using integer division. Omitting queue_id skips that check entirely. So a queued campaign needs available_agents * service_level >= 100 before it dials at all, which the default service_level of 0 never satisfies, and neither does one available agent at service_level 50.
Args: name: Campaign name. detail: Description. campaign_type: Type of campaign. One of: call, flow. actions: Flow actions to execute for each campaign contact. service_level: Target service level percentage, 0-100 (default 0). Only consulted when queue_id is set, and then available_agents * service_level must reach 100; see above. end_handle: What to do when the outdial list is exhausted. One of: stop, continue. outplan_id: UUID of the outplan that defines the dialing schedule. Without it the campaign never dials. outdial_id: UUID of the outdial list holding the targets. Without it the campaign never dials. queue_id: UUID of the queue that answered calls are delivered to. Passing it enables the service_level pacing gate described above; omitting it disables that gate. next_campaign_id: Stored and validated, but NOT acted on. When a campaign runs out of targets the server branches only on end_handle (stop, or re-execute after 5s); nothing starts the campaign named here. Chain campaigns yourself instead of relying on this field.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| detail | Yes | ||
| actions | Yes | ||
| queue_id | No | ||
| end_handle | No | stop | |
| outdial_id | No | ||
| outplan_id | No | ||
| campaign_type | Yes | ||
| service_level | No | ||
| next_campaign_id | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description bears the full burden, and it discloses non-obvious failure modes: omitting outplan_id/outdial_id still returns success but the campaign never dials; queue_id silently enables a pacing gate; next_campaign_id is validated but never acted upon. This is exactly the kind of context that prevents silent misconfiguration.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Purpose is front-loaded and the structure (prose caveats, then an Args block) is easy to scan. It is long for a tool description and repeats the 'never dials' point in both the prose and the Args section, so a little trimming is possible, but the length is largely justified by a 10-param tool with undocumented schema fields.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no annotations, 10 params at 0% schema coverage, and a non-obvious pacing formula, the description supplies everything an agent needs to invoke it correctly. An output schema exists, so return values correctly need not be explained.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage, the description must carry the full load, and it does: every one of the 10 params is documented, including enums absent from the schema (campaign_type: call|flow; end_handle: stop|continue), the 0-100 range and default for service_level, and the integer-division pacing formula tied to queue_id.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Create a new outbound campaign') in the first line, which cleanly separates it from update_campaign, delete_campaign, and create_call in the sibling list. No ambiguity about what the tool produces.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit preconditions ('Create or look up those resources first and pass their UUIDs') and conditional behavior for queue_id vs. omitting it. It even tells the agent how to work around a non-functional field ('Chain campaigns yourself instead of relying on this field'), which is actionable when-to/when-not guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_conferenceA
Create a new conference.
Args: name: Display name for the conference. detail: Description. conference_type: Required by the API, defaulted here. One of: conference, connect, queue. The server does not validate this field: an unrecognised value is stored as given, and the underlying bridge then behaves as connect. timeout: Conference lifetime in SECONDS (default 3600, one hour). 0 means the conference is never auto-deleted. Any other value below 60 is replaced by the server default of 86400. pre_flow_id: Optional flow ID to execute when a participant joins. post_flow_id: Stored but NOT executed. The field is accepted and persisted, and the API answers success, but no code path runs it when a participant leaves. Do not rely on it for cleanup work. (pre_flow_id, by contrast, is genuinely executed on join.)
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| detail | No | ||
| timeout | No | ||
| pre_flow_id | No | ||
| post_flow_id | No | ||
| conference_type | No | conference |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does so richly: conference_type is unvalidated and falls back to connect behavior; timeout is in seconds, 0 disables auto-deletion, and values below 60 are replaced with 86400; post_flow_id is stored but never executed while pre_flow_id is genuinely run. These are exactly the non-obvious behaviors an agent needs.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The summary sentence is front-loaded, then each parameter note is compact and earns its place by disclosing a quirk or default. The Args list is slightly list-heavy but contains almost no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be described. For a six-parameter mutation tool with no annotations, the description gives strong behavioral and parameter coverage. It lacks only usage context and any mention of permissions or name-collision behavior.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description is the only parameter documentation. It defines all six parameters and adds critical semantics for conference_type, timeout, pre_flow_id, and post_flow_id. Only name and detail get terse one-line glosses, but they are self-explanatory.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: 'Create a new conference.' This clearly distinguishes it from the list/get/delete conference siblings and from other create_* tools. It stops short of explicitly contrasting with alternatives, so a 4 rather than 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no statement of when to use this tool versus alternatives or any prerequisite/auth context. The Args section covers parameter behavior, not usage conditions, so an agent gets no guidance on when creating a conference is appropriate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_contactA
Create a new contact.
Addresses are how a contact is reached. Each entry accepts exactly these keys; anything else is ignored by the server:
type Required. Either "tel" or "email". On THIS tool any other value is rejected with a 400 by the API gateway; contact- manager, the layer behind it, would log the address and skip it, leaving the contact created without it. add_contact_address behaves differently: contact-manager validates there itself and also accepts "web_session". target Required. The phone number (E.164) or email address. name Optional label for this address. detail Optional free-text detail. is_primary Optional boolean; marks the primary address of its type.
Addresses and tags given here are written on a best-effort basis: if one fails (for example because the number already belongs to another contact), the API still creates the contact and answers success, with that address missing. To be certain an address was stored, create the contact first and then call add_contact_address, which reports a duplicate as an error.
Example: addresses=[{"type": "tel", "target": "+14155551234", "is_primary": true}]
Args: first_name: Contact's first name. last_name: Contact's last name. display_name: Display name (shown in UI). company: Company name. job_title: Job title. source: Where the contact came from. The values the platform uses are manual, import, api and sync, but no layer validates this field, so an unrecognised string is stored as given. Omit it to get manual. external_id: Your own identifier for this contact. notes: Free-text notes. addresses: List of address objects; see the format above. tag_ids: List of tag UUIDs to attach to the contact. phone_numbers: Removed in 0.2.0. Use addresses with type "tel". emails: Removed in 0.2.0. Use addresses with type "email".
| Name | Required | Description | Default |
|---|---|---|---|
| notes | No | ||
| emails | No | ||
| source | No | ||
| company | No | ||
| tag_ids | No | ||
| addresses | No | ||
| job_title | No | ||
| last_name | No | ||
| first_name | No | ||
| external_id | No | ||
| display_name | No | ||
| phone_numbers | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does so richly: gateway 400 vs. contact-manager silently skipping invalid address types, best-effort address/tag writes that still return success, duplicate-address behavior, and the unvalidated source field. These are exactly the failure modes an agent must know before calling.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the one-line purpose, then dense but relevant detail; nothing is padding. There is modest redundancy in that addresses, phone_numbers and emails are described both in the address-format block and again in the Args list.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 12-parameter creation tool with no annotations and an output schema (so return values need not be explained), the description covers every input's semantics, defaults, and pitfall behavior, leaving nothing an agent needs to call it correctly uncovered.
Complex tools with many parameters or behaviors need more documentation. 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 0%, so the description must compensate and it does: it documents every parameter, gives the exact accepted keys (type/target/name/detail/is_primary) with requiredness and enum-style values for type, spells out source's accepted values and lack of validation, and marks phone_numbers/emails as removed in 0.2.0.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Create a new contact') and clarifies the address model that distinguishes it from the address-manipulation siblings. It does not name update_contact or delete_contact as alternatives, but the creation scope is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly routes the agent to add_contact_address when guaranteed address persistence is required, and explains why (best-effort writes here). It also flags the removed phone_numbers/emails parameters and the default source value, giving clear call-time guidance without an explicit 'do not use when' clause.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_flowA
Create a new flow with a sequence of actions.
Each action has an id, next_id (for chaining), type, and option object. There are around 40 action types, covering call control (answer, hangup), media (play, talk, stream_echo), recording, conversation handling, AI agents, queues and branching. Note that "transfer" is a FLOW type, not an action type, and is rejected here. An unsupported type is rejected with a 400 naming the action; consult the VoIPbin API documentation for the full list and each type's option schema.
Example actions for a simple answer-and-hangup flow: [ {"id": "a1", "next_id": "a2", "type": "answer", "option": {}}, {"id": "a2", "next_id": "", "type": "hangup", "option": {}} ]
Args: name: Display name for the flow. detail: Description of the flow. actions: List of action objects defining the flow logic.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| detail | Yes | ||
| actions | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does well: it discloses that unsupported action types are rejected with a 400 naming the action, that 'transfer' is rejected here, and that a ~40-type option schema exists externally. It omits auth/permission requirements and idempotency behavior, so not a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core purpose, then constraints, then a compact example, then the Args block. Every element earns its place, though the id/next_id/type/option prose is dense enough that it could be trimmed slightly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a create tool with a nested-array parameter, an output schema (so return values needn't be explained), and no annotations, this is nearly complete: it covers the payload shape, failure modes, and an example. Missing only permission and post-creation state 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 0%, so the description must compensate. It does so for the complex 'actions' parameter by explaining each action's id/next_id/type/option structure and giving a worked example; the trivial name/detail params are touched only lightly, leaving a small gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('Create a new flow with a sequence of actions') and defines the scope precisely. The clarification that 'transfer' is a flow type rather than an action type actively differentiates this tool's domain from related flow/campaign tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives rich guidance about what the actions parameter accepts and how unsupported types are rejected, but never states when to use create_flow versus siblings like update_flow or create_campaign. Usage is implied by the create semantics rather than routed explicitly.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_campaignB
Delete a campaign.
Args: campaign_id: The UUID of the campaign.
| Name | Required | Description | Default |
|---|---|---|---|
| campaign_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden for behavioral disclosure. It only says 'Delete a campaign' without indicating irreversibility, permissions, side effects, or return value. This is a tautology of the tool name and provides no extra 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 very concise and front-loaded with the action. The Args block is minimal but structured. No unnecessary words are used, though it could be enhanced without becoming verbose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. 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 deletion tool with no annotations and no other context, the description is notably incomplete. It fails to communicate that deletion is likely permanent or what consequences may follow. While an output schema exists and could explain return values, the description itself lacks essential context for safe usage.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Although the schema only shows campaign_id as a string with title 'Campaign Id', the description adds meaningful semantics by stating it is 'The UUID of the campaign.' This clarifies the format and purpose beyond the schema, compensating for the 0% schema description 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 'Delete a campaign' with a specific verb and resource. This distinguishes it from sibling tools like delete_contact and delete_flow, as the resource type is explicitly named.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives. The description simply restates the action without any context about prerequisites, conditions, or exclusions. There is no mention of when not to use it or which sibling might be preferable.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_conferenceA
Delete a conference.
Args: conference_id: The UUID of the conference to delete.
| Name | Required | Description | Default |
|---|---|---|---|
| conference_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, and the description simply restates the operation without disclosing consequences such as permanence, reversibility, or permissions. 'Delete' implies destructiveness, but the description adds no behavioral context beyond the name.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two short sentences, front-loaded with the primary action and immediately explaining the sole parameter. 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 simple single-parameter delete operation, the description is minimally viable. However, it lacks any detail about side effects, error cases, or requirements, making it less complete than ideal for an unattended agent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema provides only 'string' and 'Conference Id', but the description clarifies that conference_id is the UUID of the conference to delete, adding meaningful type and role information. This compensates for the bare 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 states the action ('Delete') and the specific resource ('conference'), distinguishing it from sibling delete tools like delete_contact and delete_flow. It is concise 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?
No guidance is provided on when to use this tool, prerequisites, or alternatives. The description does not mention anything like 'permanently removes' or 'use get_conference first to verify existence.'
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_contactA
Delete a contact.
Args: contact_id: The UUID of the contact to delete.
| Name | Required | Description | Default |
|---|---|---|---|
| contact_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It only repeats the tool's name and does not mention consequences such as permanence, cascading effects, or required permissions, leaving the agent unaware of the destructiveness.
Agents need to know what a tool does to the 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 a single sentence and a clear 'Args' section. Every word earns its place, with no fluff or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter delete tool, the description is functional and provides the necessary parameter information. However, it lacks behavioral warnings about irreversibility or error handling. The presence of an output schema reduces the need to explain return values, but the destructive nature should be highlighted.
Complex tools with many parameters or behaviors need more documentation. 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 explains that contact_id is the UUID of the contact to delete, which adds meaning beyond the schema's bare type declaration. This is especially valuable given the schema description coverage is 0%. However, it is minimal and could be more explicit about format restrictions.
Input schemas describe structure but not intent. Descriptions should explain 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 and resource: 'Delete a contact.' This distinguishes it from sibling tools like create_contact, update_contact, and get_contact, which have different verbs.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 no guidance on when to use this tool, any prerequisites, or alternatives. It simply states the action without offering context about the deletion scenario or distinguishing between similar delete tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_contact_addressB
Remove one of a contact's addresses.
Args: contact_id: The UUID of the contact. address_id: The UUID of the address to remove.
| Name | Required | Description | Default |
|---|---|---|---|
| address_id | Yes | ||
| contact_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden, yet it only says 'Remove'. It does not disclose whether deletion is permanent/irreversible, what permissions are required, what happens on a missing address, or any cascading effects.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the action in the first sentence, followed by a tight two-item Args list. No wasted text, though the Args block is boilerplate rather than genuinely informative.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists so return values need not be explained, and both params are documented. However, for a destructive mutation with zero annotations, the description should say something about irreversibility or permission requirements to be considered complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% (properties only have titles), but the description compensates by naming both parameters and explaining each: contact_id is the contact's UUID, address_id is the address to remove. That is enough to invoke correctly, though it adds no format or constraint detail.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (remove) and resource (one of a contact's addresses), scoping the deletion to a single address. This clearly separates it from the sibling add_contact_address and update_contact_address tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this versus update_contact_address or how it relates to delete_contact. The name and verb imply a delete operation, but nothing in the description states prerequisites or alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_contact_tagC
Detach a tag from a contact.
Args: contact_id: The UUID of the contact. tag_id: The UUID of the tag to detach.
| Name | Required | Description | Default |
|---|---|---|---|
| tag_id | Yes | ||
| contact_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden, yet it only implies a removal. It doesn't state whether the operation is idempotent, whether it errors if the tag isn't attached, whether it requires any permissions, or whether the deletion is recoverable.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The action is front-loaded in the first sentence, followed by a compact Args block. It is appropriately short, though the docstring-style parameter listing is more boilerplate than earned prose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. 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 mutating delete tool with zero annotations, the definition is thin. The output schema covers return values, but nothing is said about failure modes, permissions, or side effects, which an agent needs before invoking a destructive operation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate, and it does identify both parameters. However, the added value is thin: 'The UUID of the contact' and 'The UUID of the tag to detach' mostly restate the parameter names, adding only the UUID format hint.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb and resource ('Detach a tag from a contact'), which is unambiguous and implicitly distinguishes it from the sibling add_contact_tag. It does not, however, explicitly reference any sibling or scope boundary.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use guidance, no prerequisites (e.g. tag must already be attached), and no mention of the add_contact_tag alternative for the inverse operation. The agent must infer the usage entirely from the verb.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_flowB
Delete a flow.
Args: flow_id: The UUID of the flow to delete.
| Name | Required | Description | Default |
|---|---|---|---|
| flow_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must disclose behavioral traits, but it only restates the action and argument. It does not mention idempotency, error behavior, cascading effects, or permission requirements, which are critical for a delete operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise: a two-sentence action statement followed by a clear Args block. It is front-loaded and contains no unnecessary words, 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?
For a simple one-parameter delete tool, the description covers the core action and argument. However, it lacks usage guidance and behavioral details that would help an agent use it correctly, such as whether the flow must exist or if deletion is permanent. The presence of an output schema does not compensate for these 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 description adds that flow_id is 'The UUID of the flow to delete', specifying the format as UUID, which is a slight improvement over the schema's bare 'string' type. However, it largely restates the parameter's purpose without additional constraints or 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 'Delete a flow' uses a specific verb and resource, clearly distinguishing it from sibling tools like create_flow, update_flow, and get_flow. It precisely states the tool's function.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided about when to use this tool versus alternatives or about preconditions. It does not mention whether the flow must exist or that deletion is irreversible, leaving the invocation context unclear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_activeflowB
Get details of a running active flow.
Args: activeflow_id: The UUID of the active flow.
| Name | Required | Description | Default |
|---|---|---|---|
| activeflow_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Since no annotations are provided, the description must carry the full burden of behavioral disclosure. It only states the action and does not mention side effects, permissions, error behavior, or return format, leaving significant gaps for a tool that could potentially fail or behave unexpectedly.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is highly concise, consisting of a single sentence and an Args block with one parameter. Every word serves a purpose, and the structure is clean and front-loaded with the primary 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, output schema present), the description covers the essential purpose and parameter semantics. It does not need to explain return values due to the output schema, but lacks usage context and alternative tool mentions that would make it fully 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 schema has no parameter descriptions (0% coverage), so the description compensates by explaining activeflow_id as 'The UUID of the active flow.' This adds useful semantic information beyond the schema's plain string type, though it could be even more detailed.
Input schemas describe structure but not intent. Descriptions should explain 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 function with a specific verb and resource: 'Get details of a running active flow.' This distinguishes it from related tools like get_flow and list_activeflows by focusing on 'active' flows, though it doesn't explicitly name alternatives.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is given on when to use this tool versus alternatives such as get_flow or list_activeflows. The description lacks any contextual direction for tool selection, making it inadequate for an agent deciding between sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_agentA
Get details of a specific agent.
Args: agent_id: The UUID of the agent.
| Name | Required | Description | Default |
|---|---|---|---|
| agent_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full behavioral disclosure burden. It states only 'Get details' but does not mention side-effect-free behavior, error conditions, or required permissions. The ambiguity of 'details' adds no 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 extremely concise, with a clear front-loaded verb and a structured Args block. Every word earns its place, with no filler or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The output schema exists, so return values are covered. However, the description lacks usage context (e.g., when to use vs alternatives) and does not elaborate on 'details', leaving gaps that are more than expected for a simple get 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 schema provides only 'type: string' with no description. The Args section clarifies agent_id is 'The UUID of the agent', adding critical format and meaning beyond the schema. This compensates for the 0% 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 'Get details of a specific agent' uses a specific verb ('Get') and resource ('agent'), clearly distinguishing it from sibling tools like list_agents. It leaves no ambiguity about the tool's core function.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is given on when to use this tool versus alternatives. There is no mention of using list_agents to find agent IDs or any exclusions, leaving the agent without clear context for tool selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_aiB
Get details of a specific AI voice agent.
Args: ai_id: The UUID of the AI agent.
| Name | Required | Description | Default |
|---|---|---|---|
| ai_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It only says 'Get details,' which is the operation itself, with no mention of side effects, error handling, permissions, or response behavior. Minimal transparency beyond the basic action.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Extremely concise and front-loaded: one sentence for purpose, one line for the parameter. No wasted words, and the structure is clear.
Shorter descriptions cost fewer tokens and are easier for agents to parse. 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 retrieval tool with an output schema, the description is mostly adequate. However, it lacks any context about missing IDs, permissions, or potential errors, which would be helpful for an agent to handle edge cases. It is minimally viable but not complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description adds meaningful context for ai_id by specifying it is 'The UUID of the AI agent,' which is more informative than the schema's generic string type. With only one parameter and 0% schema coverage, this sufficiently clarifies the parameter's purpose.
Input schemas describe structure but not intent. Descriptions should explain 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 that this tool retrieves details for a specific AI voice agent, using the verb 'Get' and identifying the resource. It is unambiguous, though it doesn't explicitly differentiate between sibling tools like get_agent or list_ais.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage context is implied: use this when you need details for one AI voice agent by its UUID. No explicit when-to-use, alternatives, or exclusions are provided, which is acceptable for a simple getter but leaves some ambiguity.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_billingB
Get details of a specific billing record.
Args: billing_id: The UUID of the billing record.
| Name | Required | Description | Default |
|---|---|---|---|
| billing_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are present, so the description carries the full burden of behavioral disclosure. It merely states 'get details', which is implicit in the tool name, and does not disclose behavior on missing records, authorization requirements, or any side effects beyond the read-only nature of 'get'.
Agents need to know what a tool does to the 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 and front-loaded: a clear one-sentence purpose followed by a single parameter definition. Every word contributes to understanding the tool, 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?
A simple get tool with an output schema, so return values are covered. Yet the description lacks usage context (when to use vs list_billings) and error/edge-case behavior. It is minimally viable but leaves gaps for an agent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema only defines billing_id as a string with no description, so the description's addition of 'The UUID of the billing record' adds semantic meaning. However, this is minimal and does not explain why the parameter is needed or how to obtain 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 uses the verb 'Get' with a specific resource ('details of a specific billing record'), distinguishing it from the sibling tool 'list_billings'. This clearly defines what the tool does.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives such as list_billings. There is no mention of prerequisites, context, or exclusions, leaving the agent to infer usage solely from the name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_callA
Get detailed information about a specific call.
Returns the call's status, source, destination, direction, recording IDs, timestamps, and current action being executed.
Args: call_id: The UUID of the call to retrieve.
| Name | Required | Description | Default |
|---|---|---|---|
| call_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It explicitly lists the return fields (status, source, destination, direction, recording IDs, timestamps, current action), giving the agent insight into what to expect. It does not mention error behavior or permissions, but for a read-like 'get' tool, this is sufficient and adds value beyond the bare action.
Agents need to know what a tool does to the 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 purpose, and includes an Args section for the parameter. Every sentence earns its place without redundant text. It is well-structured and easily scannable.
Shorter descriptions cost fewer tokens and are easier for agents to parse. 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 parameter) and the presence of an output schema, the description is adequate. It states the purpose, lists return fields (even though output schema could handle that), and explains the parameter. It does not over-explain, and it covers the essential aspects for a 'get' operation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has only call_id with no description, so the schema coverage is 0%. The description compensates by explaining 'call_id: The UUID of the call to retrieve,' adding semantic detail that the schema alone does not provide. This goes beyond simply restating the parameter name.
Input schemas describe structure but not intent. Descriptions should explain 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 function: 'Get detailed information about a specific call.' This distinguishes it from list_calls (which lists calls) and other retrieval tools like get_conversation or get_flow by focusing on a single call and its specific attributes.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 a specific call but does not explicitly state when to use this tool over alternatives. No exclusions or alternatives are mentioned. The context is clear enough, but it lacks direct guidance like 'use this instead of list_calls when you need call details.'
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_campaignA
Get details of a specific campaign.
Args: campaign_id: The UUID of the campaign.
| Name | Required | Description | Default |
|---|---|---|---|
| campaign_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations are absent, so the description must disclose behavioral traits. It only says 'Get details' and provides no information about read-only behavior, error handling, permissions, or response format. For a mutation-ambiguous tool this would be a serious gap; for a 'get' tool it is still thin.
Agents need to know what a tool does to the 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 exceptionally concise, with a clear first line and a simple parameter listing. No redundant text or fluff, and it is immediately readable.
Shorter descriptions cost fewer tokens and are easier for agents to parse. 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 output schema exists, so the description need not explain return values. However, it provides no context about error conditions, suggested prerequisites, or differences from related get_* tools. For a simple one-parameter getter, this is adequate but leaves room for more helpful context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description explicitly identifies campaign_id as a UUID, adding semantic meaning beyond the schema's generic string type. This helps the agent format the parameter correctly. Despite the schema's 0% description coverage, the description compensates for the single parameter.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Get details of a specific campaign' with a specific verb and resource. It distinguishes itself from list_campaigns by targeting a single campaign, and from create/update/delete by being a read operation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied from the name and the campaign_id argument, but there is no explicit guidance on when to use this tool versus alternatives like list_campaigns or get_* tools. No exclusions or conditional use cases are mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_conferenceA
Get details of a specific conference.
Args: conference_id: The UUID of the conference.
| Name | Required | Description | Default |
|---|---|---|---|
| conference_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must disclose behavioral traits. It only says 'Get details' without addressing error behavior (e.g., not found), permissions, or confirming it is a read-only operation. This leaves the agent with insufficient safety or edge-case information.
Agents need to know what a tool does to the 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 and well-structured with an Args block. It front-loads the main action and adds 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?
The tool has one parameter, an output schema, and a straightforward purpose, so the description covers the core function. However, it omits guidance on error handling or how to obtain the conference ID (e.g., via list_conferences), leaving an agent to infer important workflow context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema only describes conference_id as a string, but the description's Args block adds meaningful semantics by specifying it is a UUID. This helps the agent understand the expected format and 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 uses the specific verb 'Get' and clearly identifies the resource as 'details of a specific conference.' This distinguishes it from sibling tools like list_conferences (which retrieves multiple) and other get_* tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies that this tool is for retrieving a single conference by ID, but it does not explicitly state when to use it versus list_conferences or provide any exclusion criteria. The context is clear but not fully articulated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_contactA
Get details of a specific contact.
Args: contact_id: The UUID of the contact.
| Name | Required | Description | Default |
|---|---|---|---|
| contact_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The verb 'Get' implies a read-only operation, which is a basic behavioral trait, but the description does not disclose error behavior, required permissions, or the exact content of 'details'. With no annotations, the description carries full burden and could be more explicit about side effects and edge cases.
Agents need to know what a tool does to the 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 for the purpose and a compact Args section for the single parameter. Every word earns its place, and it is front-loaded with 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?
The tool is simple and has an output schema, so return values are covered, but the description lacks usage context (e.g., when to use vs list_contacts) and doesn't mention error handling. It is minimally adequate but leaves 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 schema only provides the property name and type, while the description adds that contact_id is 'The UUID of the contact', clarifying the format and purpose. This goes beyond the schema's minimal info.
Input schemas describe structure but not intent. Descriptions should explain 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 'Get' and resource 'contact', clarifying it retrieves details for a specific contact by UUID. This distinguishes it from list_contacts, delete_contact, and other contact tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this tool versus alternatives like list_contacts or get_contact variants. No explicit context, prerequisites, or exclusions are provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_conversationB
Get details of a specific conversation.
Args: conversation_id: The UUID of the conversation.
| Name | Required | Description | Default |
|---|---|---|---|
| conversation_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations are not provided, so the description carries full responsibility for behavioral disclosure. It only says 'Get details', with no mention of side effects, error behavior (e.g., 404 on not found), authentication, or rate limits. For a getter, the lack of any behavioral context is a significant gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and front-loaded with the primary purpose. It includes a simple Args section with the parameter. Every word earns its place, but it may be too terse, lacking any elaboration for the parameter. Still, it is well-structured and not bloated.
Shorter descriptions cost fewer tokens and are easier for agents to parse. 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 is a simple getter with an output schema (not shown but present), the description is minimally sufficient for invocation. However, it does not provide guidance on when to use it versus list_conversations, nor any behavioral notes. It is adequate for a basic tool but not fully complete in context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema provides only a string type for conversation_id, and the description adds that it is a 'UUID of the conversation', giving some meaning beyond the schema. However, it doesn't explain the format beyond UUID or how to obtain the ID, nor any constraints. With 0% schema coverage, the description compensates minimally.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Get details of a specific conversation', which is a specific verb ('Get details') and resource ('specific conversation'). It distinguishes itself from sibling tools like list_conversations (listing all) and get_message (messages vs conversations).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied: when you have a conversation_id and need its details. However, there is no explicit guidance about when to use this over alternatives, nor any exclusions or prerequisites. The parameter name makes the use case obvious, but the description offers no direct comparison.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_customerA
Get your VoIPbin customer account information.
Returns account details including name, billing info, and webhook configuration.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It explicitly states that the tool returns account details including name, billing info, and webhook configuration, giving clear behavioral expectations. The 'Get' verb implies a safe read operation, and the description adds context about the return content beyond what a bare name would 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?
The description is two concise sentences with no filler. The first sentence states the core purpose, and the second adds useful detail about return fields. 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 parameterless getter, the description adequately covers the main purpose and return content. Output schema exists, so detailed return structure is not required. It lacks explicit mention of error conditions or authentication, but these are reasonable gaps given the tool's simplicity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so schema coverage is trivially 100%. As per rubric, 0 params yields a baseline of 4; the description need not explain any parameters since none exist.
Input schemas describe structure but not intent. Descriptions should explain 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 starts with 'Get your VoIPbin customer account information', which clearly states the verb (get) and resource (customer account). It also enumerates specific returned fields (name, billing info, webhook configuration), making the tool's purpose unambiguous and distinguishing it from sibling tools like get_billing or get_number.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 when customer account details are needed, but it does not provide explicit when-to-use/when-not-to-use guidance or mention alternatives. Given the sibling get_billing, there is no differentiation, so an agent might lack clarity on when to choose this over related tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_emailB
Get details of a specific email.
Args: email_id: The UUID of the email.
| Name | Required | Description | Default |
|---|---|---|---|
| email_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description must disclose behavioral traits. It only states 'Get details' with no mention of side effects, error behavior (e.g., what happens if the email_id is not found), authentication requirements, or rate limits. While the operation is inherently read-only, this is not explicitly stated.
Agents need to know what a tool does to the 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 and front-loaded, with no superfluous wording. It fits the minimal nature of the tool, though it could include an additional sentence about error cases without losing conciseness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (one parameter) and the presence of an output schema, the description covers the primary purpose and argument. However, the lack of annotations means the description should also state read-only behavior and potential errors, which it does not, leaving some gaps for a complete understanding.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema provides only the type 'string' for email_id, and the description adds 'The UUID of the email,' clarifying the format and meaning. This partially compensates for the 0% schema description coverage, but it lacks examples, constraints, or referring context (e.g., how to obtain a list of email IDs).
Input schemas describe structure but not intent. Descriptions should explain 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 and resource ('Get details of a specific email'), clearly distinguishing it from sibling tools like list_emails (which lists multiple) and send_email (which creates an outgoing email). The word 'specific' plus the email_id parameter makes the singular retrieval purpose unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied rather than stated: the description suggests this tool is for when you need details of one specific email by ID. However, it does not explicitly contrast with list_emails or mention any exclusions, such as not being able to fetch emails from threads or requiring certain permissions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_extensionA
Get details of a specific extension.
Args: extension_id: The UUID of the extension.
| Name | Required | Description | Default |
|---|---|---|---|
| extension_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are present, so the description must carry the full burden. It only says 'get details' without disclosing behavior such as error handling, not-found responses, permissions, or output format. The description is minimal and does not reveal any non-obvious traits.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences and front-loaded with the main purpose. The Args section is concise and adds the UUID detail without redundancy. Every sentence earns its place, making it highly efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is simple with one parameter and an output schema present, so return values need not be explained. However, the lack of usage guidelines and behavioral transparency creates gaps, making the description only marginally adequate for full context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema provides only a type and title for extension_id with 0% description coverage. The description adds that it is 'The UUID of the extension,' giving semantic meaning beyond the schema. This compensates for the gap, though it doesn't elaborate on accepted UUID formats.
Input schemas describe structure but not intent. Descriptions should explain 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 'Get details of a specific extension,' identifying the action (get) and resource (extension). The word 'specific' distinguishes it from the sibling tool list_extensions, making its purpose unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives like list_extensions. There is no mention of context, prerequisites, or scenarios where this tool is appropriate, leaving the agent without decision support.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_flowA
Get a flow by its ID, including its full action sequence.
Args: flow_id: The UUID of the flow.
| Name | Required | Description | Default |
|---|---|---|---|
| flow_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
There are no annotations, so the description carries the full burden. It does add a useful behavioral detail—'including its full action sequence'—which indicates the return content. However, it does not disclose error handling, authentication requirements, or any potential side effects, even though reads are typically safe.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise, consisting of a short purpose statement and a single parameter definition. Every sentence adds value, and the Args formatting is clean 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?
For a simple get-by-ID tool with an output schema, the description is mostly complete. It tells the user what the tool does and what it returns. However, it lacks guidance on when to choose this over related getters or how to handle not-found cases, leaving a minor gap in context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description includes an Args section clarifying that flow_id is 'The UUID of the flow', which adds semantic meaning beyond the schema's generic 'string' type. With only one parameter, this provides sufficient context, though it could be more detailed about the expected format.
Input schemas describe structure but not intent. Descriptions should explain 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 'Get a flow by its ID, including its full action sequence' clearly states the specific action (get), the resource (flow), and the key differentiator (by ID, full action sequence). It distinguishes itself from sibling tools like list_flows and get_activeflow.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit guidance on when to use this tool versus alternatives. It does not mention that list_flows should be used to enumerate flows, or that get_activeflow is for active flows. The context is implied by the word 'get', but no explicit when/why is provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_messageB
Get details of a specific message.
Args: message_id: The UUID of the message.
| Name | Required | Description | Default |
|---|---|---|---|
| message_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full transparency burden. It only states the basic purpose and the message_id argument, without disclosing error behavior, return format, authentication needs, or any side effects. This is a minimal disclosure for a read operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise: one sentence for purpose and one for the argument. There is no redundant or irrelevant content, and the structure is clear for a single-parameter getter.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple getter with an output schema and a single parameter, the description is functionally sufficient. However, it lacks any mention of related tools (e.g., list_messages) or the context in which this tool should be invoked, so it is adequate but not complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description adds that message_id is 'The UUID of the message', which provides semantic meaning beyond the schema's 'Message Id' title. However, it does not provide format validation, examples, or clarify if the UUID must be an existing message, leaving marginal 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 'Get details of a specific message' provides a specific verb and resource, distinguishing it from list_messages and send_message. It clearly states the action of retrieving one message, though it does not detail what 'details' entails.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 gives no explicit guidance on when to use this tool versus alternatives. It only implies selection of a single message via 'specific', but does not mention sibling tools like list_messages for enumerating messages, nor any exclusions or prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_numberB
Get details of a specific phone number.
Args: number_id: The UUID of the number.
| Name | Required | Description | Default |
|---|---|---|---|
| number_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations available, the description carries the full burden for behavioral disclosure. It only states 'Get details,' which implies a read operation, but doesn't disclose output format, error behavior, permissions, or any side effects. This is a minimal disclosure.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise, consisting of a single sentence and a brief parameter note. Every word earns its place; there is no redundancy or filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple get-by-ID tool with an output schema, the description is minimally sufficient. It lacks usage context and behavioral details, but the core invocation intent is clear. More context about similar tools or edge cases would improve completeness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema provides no description for number_id beyond 'string,' but the description adds meaning by stating 'The UUID of the number.' This clarifies the expected value, compensating for the schema's lack of detail.
Input schemas describe structure but not intent. Descriptions should explain 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 'Get details of a specific phone number' with a specific verb and resource. It distinguishes itself from list_numbers (listing all numbers) and other get_* siblings, though it doesn't explicitly name alternatives.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives. It only implies usage when you have a number_id, but there is no explicit context, prerequisites, or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_queueA
Get details of a specific queue.
Args: queue_id: The UUID of the queue.
| Name | Required | Description | Default |
|---|---|---|---|
| queue_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It only states the action and parameter without disclosing behavioral details such as read-only nature, error handling, or prerequisites. The tool name implies a read operation, but the description adds no extra 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 highly concise, with a clear purpose statement followed by a single parameter explanation. Every word earns its place, and the structure is front-loaded with 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?
For a simple one-parameter get operation, the description is adequate. It provides essential information about the tool's purpose and parameter. Since an output schema exists, return value details are not needed. However, it lacks guidance on related operations or error scenarios, which would improve completeness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description documents queue_id as 'The UUID of the queue', adding semantic meaning beyond the schema's plain string type. With 0% schema description coverage, this compensation is valuable and clarifies the expected format.
Input schemas describe structure but not intent. Descriptions should explain 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 'Get details of a specific queue', which identifies the action (get) and resource (queue details). It distinguishes from sibling list_queues by specifying 'specific queue' rather than listing all queues.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 a single queue identified by queue_id but does not explicitly mention when to use this tool over alternatives like list_queues. It lacks explicit exclusions or alternative tool references.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_routeA
Get details of a specific route. Requires project superadmin permission.
Routes are a platform-level resource. A customer access key cannot read them, so this tool answers 403 PERMISSION_DENIED unless your key carries project superadmin permission.
Args: route_id: The UUID of the route.
| Name | Required | Description | Default |
|---|---|---|---|
| route_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It clearly discloses the authorization requirement, the likely error (403 PERMISSION_DENIED), and the distinction between platform-level routes and customer access keys. This is exactly the kind of behavioral context an agent needs to avoid failed calls.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Very concise: three short paragraphs. Front-loaded with purpose, then permission constraints, then parameter detail. No wasted words. Efficient 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?
The tool has an output schema, so return values needn't be described. The description covers purpose, authorization, error behavior, and the single parameter's format, leaving nothing critical unstated for an agent to call it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%—the only parameter, route_id, is undocumented in the schema. The description provides a brief hint: 'The UUID of the route.' This does add meaning by specifying format (UUID), but it's minimal for a parameter heavily exposed to calls. Baseline 3 is appropriate given the schema provides no description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clear verb and resource: 'Get details of a specific route.' This distinguishes it from list_routes by scope (single vs. list), and route_id confirms it retrieves one entity. Sibling differentiation comes from the name and the specificity of the resource, though it doesn't explicitly contrast with list_routes.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 prerequisite: 'Requires project superadmin permission' and 'A customer access key cannot read them.' This tells the agent exactly when the tool will fail and under what conditions it can be used. Strong guidance on when to use and when not to use.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_tagA
Get details of a specific tag.
Args: tag_id: The UUID of the tag.
| Name | Required | Description | Default |
|---|---|---|---|
| tag_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
There are no annotations, so the description carries the full burden of behavioral disclosure. It clearly implies a read-only operation via 'Get details', but does not state what happens if the tag does not exist, whether authentication is required, or any side effects. For a simple get tool, this is adequate but not rich.
Agents need to know what a tool does to the 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 exceptionally concise, consisting of two sentences that cover the purpose and the sole parameter. It is front-loaded with the main verb, and the Args section is a standard, clear structure. Every word earns its place 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?
Given the tool's simplicity (one parameter) and the presence of an output schema, the description is adequate. It does not explain return values, but that is unnecessary with an output schema available. The description could theoretically include usage context, but for a single-resource get, the provided information suffices.
Complex tools with many parameters or behaviors need more documentation. 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 provides only the parameter name and type (string), with no description. The description adds crucial meaning by stating tag_id is 'The UUID of the tag', clarifying both its format and semantic role. This goes beyond what the schema offers, helping the agent understand what value to supply.
Input schemas describe structure but not intent. Descriptions should explain 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 ('Get') and the resource ('specific tag'), which distinguishes it from sibling tools like list_tags (listing tags) and other get_* tools. The phrase 'specific tag' implies retrieval by unique identifier, setting expectations for a single-resource read operation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no explicit guidance on when to use this tool versus alternatives. It does not mention prerequisites, suitable contexts, or mention that for listing tags one should use list_tags. The intent is implicitly conveyed by the tool's naming convention, but there is no direct advisory.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
hangup_callA
Hang up an active call.
Args: call_id: The UUID of the call to hang up.
| Name | Required | Description | Default |
|---|---|---|---|
| call_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full behavioral disclosure burden. It states the action ('hang up') but does not reveal side effects such as irreversibility, required permissions, or what happens if the call is already hung up. For a mutating operation, this is a significant gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is succinct with two clear sentences, front-loading the purpose and briefly documenting the parameter. No unnecessary words, and the Args format is clear.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple single-parameter tool with an output schema, the description is nearly adequate. However, the lack of behavioral details (e.g., error conditions, prerequisites) and absence of annotations reduce completeness. It would benefit from mentioning that the call must be active.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Since schema description coverage is 0%, the description compensates by explaining that call_id is 'The UUID of the call to hang up.' This adds meaningful context beyond the schema's generic title 'Call Id', although it does not specify where to obtain the UUID.
Input schemas describe structure but not intent. Descriptions should explain 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 'Hang up an active call' uses a clear verb and object, distinguishing it from sibling tools like get_call or create_call. It is 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 implies usage when an active call needs to be terminated, but it does not explicitly mention when not to use it or mention alternatives. It lacks guidance on prerequisites like whether the call must be owned by the user or in a certain state.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_activeflowsA
List all currently running active flows.
Active flows are flow instances currently executing on calls.
Args: page_size: Number of results per page (default 10). page_token: Pagination cursor from a previous response.
| Name | Required | Description | Default |
|---|---|---|---|
| page_size | No | ||
| page_token | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the burden. It discloses pagination behavior (page_token as cursor, default page_size) and clarifies the resource scope. It does not explicitly state read-only behavior, but 'list' implies it. The description adds value beyond the schema by explaining what active flows are.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is highly concise and well-structured. It front-loads the purpose, provides a clear definition, and lists arguments succinctly. Every sentence earns its place 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?
Given the tool's simplicity and the presence of an output schema, the description covers the key contextual aspects: what is listed, what constitutes an active flow, and pagination parameters. It lacks explicit usage guidance vs alternatives, but overall the context is sufficient for an agent to select and invoke the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description fully compensates by explaining both parameters: page_size as 'Number of results per page (default 10)' and page_token as 'Pagination cursor from a previous response.' This adds clear meaning beyond the raw schema type definitions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'List all currently running active flows.' It uses a specific verb (list) and resource (active flows), and further clarifies that active flows are flow instances executing on calls, distinguishing it from flow definitions.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 the tool by defining active flows as 'currently executing on calls,' but it does not explicitly mention alternatives or exclusions. Siblings like list_flows and get_activeflow exist, but no direct comparison or guidance is provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_agentsA
List all agents in your VoIPbin account.
Agents are users who can handle calls, messages, and other interactions.
Args: page_size: Number of results per page (default 10). page_token: Pagination cursor from a previous response.
| Name | Required | Description | Default |
|---|---|---|---|
| page_size | No | ||
| page_token | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the burden. It correctly implies a read-only operation and documents pagination semantics (page_token as a cursor from a previous response), but it doesn't disclose rate limits, auth requirements, or ordering/filtering 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 compact, with a two-sentence introduction and a brief Args list. No sentences are wasted; every element serves a 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?
The tool is a simple paginated list operation, and the description covers its core purpose, entity definition, and parameter semantics. An output schema exists, so the lack of return-value explanation is acceptable; it's fully 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 0%, so the description's Args section is essential. It explains page_size as the number of results and page_token as a pagination cursor, adding meaning beyond the schema's type and default fields. This fully compensates for the lack of 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 states 'List all agents in your VoIPbin account' with a specific verb and resource, and clarifies agents as users handling interactions. This distinguishes it from sibling list tools like list_contacts or list_numbers.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 what agents are but gives no explicit guidance on when to use this tool versus alternatives such as get_agent for a single agent. Usage is implied by the name and primary statement, but lacks clear exclusions or named alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_aisA
List all AI voice agents in your VoIPbin account.
Args: page_size: Number of results per page (default 10). page_token: Pagination cursor from a previous response.
| Name | Required | Description | Default |
|---|---|---|---|
| page_size | No | ||
| page_token | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Since no annotations are provided, the description carries the behavioral disclosure burden. It does mention pagination behavior (page_size, page_token), indicating that results are paged and that page_token comes from a previous response. However, it does not disclose ordering, filtering, or whether deleted or inactive agents are included.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is very concise: a single statement of purpose followed by a compact parameter list. Every sentence earns its place and the main action is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple list tool with two optional pagination parameters and an output schema, the description covers the essentials. It explains pagination and the purpose, though it could be more complete with a note about iterating pages or clarifying the difference from 'list_agents'.
Complex tools with many parameters or behaviors need more documentation. 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 only provides parameter names and defaults (0% coverage), so the description must compensate. It clearly explains page_size ('Number of results per page') and page_token ('Pagination cursor from a previous response'), adding meaningful context 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 ('List all AI voice agents') with a specific scope ('in your VoIPbin account'). It is specific but does not differentiate from the sibling tool 'list_agents', which could be confusing.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided regarding when to use this tool versus alternatives like 'list_agents'. There are no exclusions, prerequisites, or context about when this listing is appropriate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_billingsA
List all billing records in your VoIPbin account.
Args: page_size: Number of results per page (default 10). page_token: Pagination cursor from a previous response.
| Name | Required | Description | Default |
|---|---|---|---|
| page_size | No | ||
| page_token | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the burden. It discloses the basic listing behavior and implicitly suggests pagination through the presence of 'page_size' and 'page_token' args, but it does not describe the output format, sorting, authentication requirements, or any potential side effects. This is minimal but acceptable for a simple read-style list tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise: a one-sentence purpose followed by a clean parameter list. It is front-loaded with the core operation, contains no fluff, and every sentence serves a 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 paginated list tool, the description covers the essential purpose and parameter semantics. An output schema is available, so return-value details are presumably covered there. However, it lacks usage context and any mention of filters or limits, which would make it more complete for an agent selecting among many sibling tools.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage, the description's 'Args' section compensates by explaining both parameters: 'Number of results per page (default 10)' and 'Pagination cursor from a previous response'. This adds meaningful context beyond the bare schema types and defaults, though it could be more detailed (e.g., max page size, token format).
Input schemas describe structure but not intent. Descriptions should explain 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 all billing records in your VoIPbin account', which uses a specific verb and resource, and distinguishes this tool from siblings like 'get_billing' and other 'list_' tools. The scope is explicit 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 provides no guidance on when to use this tool versus alternatives such as 'get_billing' or other list tools. It does not mention any prerequisites, excluded scenarios, or suggest when pagination is needed, leaving usage decisions entirely to the agent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_callsA
List all calls in your VoIPbin account.
Returns a paginated list of calls with their status, source/destination numbers, direction, and timestamps.
Args: page_size: Number of results per page (default 10). page_token: Pagination cursor from a previous response.
| Name | Required | Description | Default |
|---|---|---|---|
| page_size | No | ||
| page_token | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It discloses that the result is paginated and lists specific fields returned (status, source/destination numbers, direction, timestamps). However, it does not mention authentication requirements, rate limits, or ordering semantics, which are relevant for a list operation. This is adequate but not comprehensive.
Agents need to know what a tool does to the 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 and well-structured: two sentences for purpose and return fields, followed by an Args list. It front-loads the primary purpose and keeps every sentence informative. There is no fluff 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 the essential aspects for a simple paginated list tool: what it lists, the return fields, and the parameters. Since an output schema exists, the return format is documented elsewhere. The only minor gap is the absence of any mention of authentication or the relationship to other call-related tools, but 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?
The schema has zero description coverage for its parameters, but the description provides clear, concise explanations in the Args section. It explains that page_size sets the number of results per page with a default of 10, and page_token acts as a pagination cursor from a previous response. This adds meaningful semantic context beyond the schema's bare type and default values.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'List all calls in your VoIPbin account.' This uses a specific verb ('List') and resource ('calls'), and the distinction from siblings like get_call, create_call, and hangup_call is clear. The clarification that it returns a paginated list further refines the 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?
The description clearly implies when to use the tool (to list all calls), but it does not explicitly mention when not to use it or suggest alternatives like get_call for a single call. There is no exclusionary guidance, so it earns a 4 rather than a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_campaignsA
List all outbound campaigns.
Campaigns automate outbound calling, SMS, or email to contact lists.
Args: page_size: Number of results per page (default 10). page_token: Pagination cursor from a previous response.
| Name | Required | Description | Default |
|---|---|---|---|
| page_size | No | ||
| page_token | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden for behavioral disclosure. It does not explicitly state that this is a read-only operation, nor does it describe pagination behavior (beyond parameter names), sorting, or whether archived/inactive campaigns are included. The description is minimal and relies on the implied safety of a 'list' operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and front-loaded: the first sentence states the purpose, followed by a brief context sentence and a straightforward Args list. Every sentence earns its place 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 the core purpose and parameters, and an output schema exists so return values are presumably documented. However, it lacks explicit details about pagination flow (e.g., how to retrieve subsequent pages), filtering behavior, or any edge cases like empty results or permission requirements. For a simple list tool this is adequate but not complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description includes an Args section that explains both parameters: page_size as 'Number of results per page (default 10)' and page_token as 'Pagination cursor from a previous response.' This adds meaning beyond the bare schema, which only provides types and defaults, and is especially valuable given 0% schema description 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 'List all outbound campaigns' with a specific verb and resource, and adds context about what campaigns are (automate outbound calling, SMS, or email). This distinguishes it from sibling tools like list_calls or list_flows.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 all campaigns but provides no explicit guidance on when to choose this over related tools (e.g., get_campaign for a single campaign). No alternatives or exclusions are mentioned, leaving the choice based on the tool name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_conferencesA
List all conferences in your VoIPbin account.
Args: page_size: Number of results per page (default 10). page_token: Pagination cursor from a previous response.
| Name | Required | Description | Default |
|---|---|---|---|
| page_size | No | ||
| page_token | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the transparency burden. It discloses pagination through the page_size and page_token parameters and indicates all conferences are listed, but it does not detail return format, ordering, or potential pagination limits. This is adequate for a simple list operation but not deeply transparent.
Agents need to know what a tool does to the 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: a leading purpose sentence followed by a clear args list. Every sentence adds value, and there is no redundant or filler content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. 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 list tool with an output schema, the description covers the essential purpose and pagination parameters. It lacks explicit usage alternatives but is otherwise sufficient given the tool's low complexity and available output schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It explains page_size as 'Number of results per page (default 10)' and page_token as 'Pagination cursor from a previous response,' adding meaningful context beyond the raw schema types and defaults.
Input schemas describe structure but not intent. Descriptions should explain 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 all conferences in your VoIPbin account,' using a specific verb and resource. This distinguishes it from sibling tools like get_conference, create_conference, and delete_conference by focusing on the listing 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 implies usage as a listing tool but does not explicitly mention when to use it over alternatives like get_conference. There are no exclusions or alternative recommendations, so guidance is only implied by the tool's name and purpose.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_contactsA
List all contacts in your VoIPbin account.
Args: page_size: Number of results per page (default 10). page_token: Pagination cursor from a previous response.
| Name | Required | Description | Default |
|---|---|---|---|
| page_size | No | ||
| page_token | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must disclose behavior. It states the tool lists all contacts and explains the pagination parameters, implying a read-only operation. However, it doesn't explicitly confirm non-destructiveness, mention ordering, or clarify that results are returned in pages despite saying 'all'. Adding a note like 'This is a read-only operation' would improve transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences plus a focused Args block; the main purpose is stated first, and parameter documentation is structured and free of redundancy. 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?
The tool is simple with two optional params and an output schema, and the description covers the pagination semantics adequately. It might benefit from mentioning that the result is a paginated list of contacts and how to iterate, but given the output schema exists and the description is clear about args, it's reasonably 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 descriptions are entirely absent (0% coverage), so the description's Args section provides essential meaning: page_size defines page size with a default, and page_token is explained as a pagination cursor from a previous response. This compensates well for the schema gap, though it could elaborate on how page_token is obtained (e.g., from the response).
Input schemas describe structure but not intent. Descriptions should explain 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') with a clear resource ('contacts') and scope ('in your VoIPbin account'), distinguishing it from sibling contact tools like get_contact or delete_contact.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to choose list_contacts over alternatives; it doesn't reference get_contact for single-contact lookup or mention pagination as a reason to use this tool. The description simply states what it does without context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_conversationsA
List all conversations in your VoIPbin account.
Conversations group related calls, messages, and interactions together.
Args: page_size: Number of results per page (default 10). page_token: Pagination cursor from a previous response.
| Name | Required | Description | Default |
|---|---|---|---|
| page_size | No | ||
| page_token | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are present, so the description carries the full burden. It discloses pagination behavior via the args but does not explicitly state read-only nature, error handling, ordering, or other edge-case behaviors. The conceptual grouping note adds useful context but is not exhaustive.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise, front-loaded with the primary action, and includes only essential information: a clear purpose statement, a brief conceptual note, and parameter explanations. 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 low complexity (simple paginated list with two parameters) and the existence of an output schema, the description adequately covers purpose and parameters without needing to explain return values. It is sufficient for an agent to select and invoke the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The Args section explains both page_size and page_token with meaningful descriptions ('Number of results per page' and 'Pagination cursor from a previous response'), fully compensating for the 0% schema description coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description explicitly states 'List all conversations in your VoIPbin account' using a specific verb and resource, and further clarifies what conversations group. This clearly differentiates it from sibling tools like list_calls and list_contacts.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context for when to use this tool (to list conversations) but does not explicitly compare it to alternatives like get_conversation or mention exclusions. It is straightforward and unambiguous, but lacks explicit alternative guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_emailsA
List all emails in your VoIPbin account.
Args: page_size: Number of results per page (default 10). page_token: Pagination cursor from a previous response.
| Name | Required | Description | Default |
|---|---|---|---|
| page_size | No | ||
| page_token | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden of behavioral disclosure. It does mention pagination via the args (page_size, page_token), which hints at the response being paged. However, it does not explicitly state whether the operation is read-only, how 'all emails' interacts with pagination, or any other behavioral characteristics like ordering or limits.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is brief and front-loaded with the purpose, followed by a clear Args section. Every sentence/line earns its place with no fluff or repetition of schema fields beyond what is necessary for clarity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. 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 simplicity of the tool (2 optional params, output schema exists) and adequate parameter documentation, the description covers the essentials. However, it lacks usage guidelines and any broader context about when to choose this over sibling list tools, which keeps it from being fully 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?
Though schema description coverage is 0%, the description fully compensates by explaining both parameters: page_size as 'Number of results per page (default 10)' and page_token as 'Pagination cursor from a previous response.' This adds meaningful semantics beyond the schema's titles and defaults.
Input schemas describe structure but not intent. Descriptions should explain 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 all emails in your VoIPbin account.' with a specific verb (list) and resource (emails). It is distinct from sibling tools like list_messages or get_email by resource type, though it does not explicitly differentiate itself.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives such as list_messages or get_email. The description simply defines the action without context or exclusions, leaving the agent to infer usage from the name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_extensionsA
List all extensions in your VoIPbin account.
Extensions are internal phone lines assigned to agents.
Args: page_size: Number of results per page (default 10). page_token: Pagination cursor from a previous response.
| Name | Required | Description | Default |
|---|---|---|---|
| page_size | No | ||
| page_token | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It discloses pagination behavior through the Args section (page_size, page_token) and states the scope ('all extensions in your VoIPbin account'). It does not discuss auth, rate limits, or potential side effects, but for a read-only list operation this 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 is brief and front-loaded with the purpose, followed by a helpful clarification of what an extension is, and then a clean Args block. No wasted words or 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?
Given a simple list tool with an output schema present, the description covers purpose, parameter semantics, and pagination. It might optionally mention ordering or max page size, but overall it is complete for its complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema provides only types and defaults, with 0% description coverage. The description compensates by explaining page_size as 'Number of results per page (default 10)' and page_token as 'Pagination cursor from a previous response', adding meaning beyond the structured 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 states a specific verb ('List') and resource ('extensions') with the scope 'in your VoIPbin account'. It additionally clarifies what extensions are ('internal phone lines assigned to agents'), which effectively distinguishes this tool from sibling tools like list_numbers or list_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 implies usage: use this to list all extensions in the account, and the extension definition hints at the concept. However, it does not explicitly state when to prefer this over other list tools or how it relates to get_extension. No exclusions or alternative tools are mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_flowsA
List all flows in your VoIPbin account.
Flows define call handling logic as a sequence of actions (answer, play, record, etc.).
Args: page_size: Number of results per page (default 10). page_token: Pagination cursor from a previous response.
| Name | Required | Description | Default |
|---|---|---|---|
| page_size | No | ||
| page_token | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It clearly states the tool lists flows, which implies a read-only operation, and explains what flows are. However, it does not disclose any additional behavioral traits such as pagination semantics (how to detect the last page), ordering, or whether any filters or side effects exist. The description adds domain context but not beyond what is obvious from the tool name.
Agents need to know what a tool does to the 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 and well-structured: it starts with the primary purpose, adds a brief explanatory sentence about flows, and ends with parameter documentation. There is no redundant content; every section serves a clear purpose and the main action is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple list tool with two optional parameters and an output schema, the description is complete. It names the resource, explains the params, and does not need to describe return values because the output schema covers them. No critical information appears to be missing 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?
The input schema has 0% description coverage, but the description compensates by explicitly defining both parameters: page_size as 'Number of results per page (default 10)' and page_token as 'Pagination cursor from a previous response'. This adds meaningful semantics beyond the literal schema types and defaults.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The first sentence, 'List all flows in your VoIPbin account', clearly states the action (list), the resource (flows), and the scope (VoIPbin account). This distinguishes it from sibling tools like get_flow (retrieve a single flow) or create_flow/update_flow/delete_flow (mutations), and from list_activeflows which likely lists only active flows.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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: to list all flows in the account. However, it does not explicitly mention when to use this tool over alternatives (e.g., get_flow for a specific flow, or list_activeflows for active flows), nor does it provide any exclusions or prerequisites. This is adequate but lacks proactive guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_messagesA
List all SMS messages in your VoIPbin account.
Args: page_size: Number of results per page (default 10). page_token: Pagination cursor from a previous response.
| Name | Required | Description | Default |
|---|---|---|---|
| page_size | No | ||
| page_token | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It discloses pagination behavior via page_size and page_token, and it's read-only by nature. However, it does not mention ordering, filtering, or other potential edge cases, leaving some behavioral details unspecified.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and front-loaded with the purpose. The args section is minimal, with no filler or redundancy. Every sentence serves a clear function.
Shorter descriptions cost fewer tokens and are easier for agents to parse. 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 list operation with an output schema, the description is largely sufficient. It covers pagination parameters and gives a clear scope. It could add more context about result ordering or typical use cases, but the given information is adequate for a low-complexity 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 zero descriptions, so the description fully compensates by explaining page_size as 'Number of results per page' and page_token as 'Pagination cursor from a previous response.' This adds meaning beyond the bare schema fields.
Input schemas describe structure but not intent. Descriptions should explain 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 action and resource: 'List all SMS messages in your VoIPbin account.' This distinguishes it from sibling tools like list_emails or list_numbers, which target different resource types.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage by stating it lists SMS messages, but it does not explicitly explain when to choose it over alternatives like get_message or list_conversations. It provides no exclusions or comparison context, though the action is straightforward.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_numbersA
List all phone numbers in your VoIPbin account.
Args: page_size: Number of results per page (default 10). page_token: Pagination cursor from a previous response.
| Name | Required | Description | Default |
|---|---|---|---|
| page_size | No | ||
| page_token | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must carry the burden of behavioral disclosure. It mentions pagination via page_size and page_token, which is useful, and implies read-only behavior with 'List'. However, it does not discuss rate limits, sorting, or any side effects beyond what is obvious.
Agents need to know what a tool does to the 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, leading with the main purpose and then clearly listing parameters. Every sentence adds value, with no fluff or repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. 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 list endpoint with an output schema present, the description covers the action and both parameters adequately. It lacks explicit mention of the return structure, but that is provided by the output schema. It could mention potential use cases or limitations, but overall it is sufficient for the tool's simplicity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has no descriptions for its parameters, so the description compensates by explaining page_size as 'Number of results per page' and page_token as a 'Pagination cursor from a previous response.' This adds meaningful semantic context beyond the raw 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 uses a specific verb and resource ('List all phone numbers'), clearly distinguishing it from sibling tools like get_number, list_contacts, etc. It also scopes to the user's VoIPbin account, making the intent unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is given on when to use this tool versus alternatives such as get_number for retrieving a single number. The description implies usage for browsing the full list, but does not explicitly state exclusions or alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_queuesA
List all call queues in your VoIPbin account.
Queues hold incoming calls and distribute them to available agents.
Args: page_size: Number of results per page (default 10). page_token: Pagination cursor from a previous response.
| Name | Required | Description | Default |
|---|---|---|---|
| page_size | No | ||
| page_token | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description bears the full burden of behavioral disclosure. It adds useful pagination context (page_size default 10, page_token as a cursor), but does not explicitly state that the operation is read-only or mention any permissions, rate limits, or side effects. This is adequate but not rich.
Agents need to know what a tool does to the 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 the purpose stated first, a brief explanatory sentence for context, and a clean Args section. Every sentence contributes value without redundancy or unnecessary 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 low complexity of a simple list operation with an output schema, the description fully covers the core functionality, pagination parameters, and background on what a queue is. There is no critical missing information for an agent to select and invoke this tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has no parameter descriptions, but the description compensates fully via an Args section. It explains page_size as 'Number of results per page (default 10)' and page_token as 'Pagination cursor from a previous response,' providing complete semantic meaning for both 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 'List all call queues in your VoIPbin account,' specifying the exact resource and scope. It also explains what queues are, distinguishing this from sibling tools like get_queue by emphasizing 'all call queues.'
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 usage is implied by the name and description, but there is no explicit guidance on when to use this tool versus alternatives like get_queue. It lacks exclusionary or comparative statements to help an agent choose between similar list_* tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_routesA
List provider routing rules. Requires project superadmin permission.
Routes are a platform-level resource. A customer access key cannot read them, so this tool answers 403 PERMISSION_DENIED unless your key carries project superadmin permission.
Args: page_size: Number of results per page (default 10). page_token: Pagination cursor from a previous response.
| Name | Required | Description | Default |
|---|---|---|---|
| page_size | No | ||
| page_token | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden. It discloses the permission requirement, platform-level resource scope, and 403 error behavior. It does not explicitly state read-only semantics or describe pagination beyond the parameter definitions, but covers the key access constraint well.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with purpose and permission requirements, then lists arguments compactly. It is slightly repetitive, repeating the superadmin permission requirement across two sentences, but otherwise 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 simple two-parameter list operation, the presence of an output schema, and no annotations, the description covers what an agent needs: purpose, required permission, failure behavior, and both parameters. Nothing essential is 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 description coverage is 0%, so the description must compensate. It defines both parameters: page_size as results per page (default 10) and page_token as a pagination cursor from a previous response. This adds meaningful semantics beyond the bare schema titles and defaults.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a clear verb and resource: 'List provider routing rules.' It is distinguishable from most siblings, but does not explicitly name or contrast with the closest sibling, get_route, so it falls just short of full sibling differentiation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives important usage context: requires project superadmin permission and will return 403 PERMISSION_DENIED without it. This is a clear when-to-use condition and an exclusion, but it names no alternative tool for users who lack the required key.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_tagsA
List all tags in your VoIPbin account.
Tags can be applied to contacts, calls, and other resources for organization.
Args: page_size: Number of results per page (default 10). page_token: Pagination cursor from a previous response.
| Name | Required | Description | Default |
|---|---|---|---|
| page_size | No | ||
| page_token | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the burden of behavioral disclosure. It discloses the read-only nature ('List all tags') and explains pagination parameters, but lacks details such as authentication requirements, potential rate limits, ordering, or edge cases. The description adds some context but not rich behavioral insight.
Agents need to know what a tool does to the 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 and well-structured, with a clear opening sentence, a brief domain note, and an 'Args' section. It avoids unnecessary verbosity and every sentence adds value, though a slightly cleaner separation of purpose and parameters could improve readability.
Shorter descriptions cost fewer tokens and are easier for agents to parse. 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 nature of this list tool with only two optional parameters and an existing output schema, the description is largely complete. It covers pagination and the scope of results, and since an output schema exists, it need not describe return values. It lacks only minor details like sorting or filtering options, but these are not essential for basic usage.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It explicitly explains both parameters: page_size as 'Number of results per page (default 10)' and page_token as 'Pagination cursor from a previous response'. This adds meaningful semantics beyond the bare schema types and titles.
Input schemas describe structure but not intent. Descriptions should explain 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 all tags in your VoIPbin account' with a specific verb and resource, distinguishing it from the sibling 'get_tag' which retrieves a single tag. The additional context that tags can be applied to contacts, calls, and resources further clarifies the tool's domain.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for listing all tags, but it does not explicitly state when to use this tool versus alternatives like 'get_tag'. There are no exclusions or prerequisite conditions mentioned, leaving usage guidance purely implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
phone_call_startA
Start a live phone conversation: place a call that YOU will speak on and listen to. Costs money (the call, speech-to-text and text-to-speech are all billed).
Dials the destination, waits for the answer, then starts transcription of the callee's voice and a text-to-speech channel towards them. When this returns status "answered", talk with phone_say_and_listen (one turn per call), and end with phone_hangup. If you stop calling tools for 5 minutes the call is hung up automatically, and it is always hung up at max_duration_seconds.
Returns {"call_id", "status": "answered", "max_duration_seconds", "hint"}, or {"error", "reason"} where reason is no_answer, call_failed (with hangup_reason when known), session_limit (at most 4 concurrent calls) or events_unavailable.
The platform hangs up every call one hour after its channel is created, so a conversation can never run longer than that; this is why max_duration_seconds is capped at 3600.
Args: source_number: Your VoIPbin number to call from (E.164, e.g. "+15551234567"). destination_type: tel, sip or extension. destination_target: The phone number, SIP URI, or extension name to call. language: BCP-47 language of the conversation (e.g. "en-US", "ko-KR"). Used for both speech recognition and speech synthesis. voice_id: Optional text-to-speech voice id. Empty uses the default voice for the language. max_duration_seconds: Maximum length of the conversation, 30 to 3600 (default 3600). It cannot be extended after the call starts. answer_timeout_seconds: How long to wait for an answer, 5 to 60 (default 60).
| Name | Required | Description | Default |
|---|---|---|---|
| language | No | en-US | |
| voice_id | No | ||
| source_number | Yes | ||
| destination_type | Yes | ||
| destination_target | Yes | ||
| max_duration_seconds | No | ||
| answer_timeout_seconds | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full behavioral burden and largely meets it: it discloses billing for call/STT/TTS, the exact return shape on failure (no_answer, call_failed with hangup_reason, session_limit, events_unavailable), auto-termination conditions, and the hard 3600s cap. It stops short of stating required permissions or what happens to the callee on failure, so it is strong but not exhaustive.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with purpose and cost, then workflow, then return contract, then args — a sensible order. It is long, and the paragraph explaining the one-hour platform cap partly restates the max_duration_seconds ceiling, which is the one place a sentence could be trimmed.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 7-parameter, side-effectful tool with no annotations, this covers purpose, cost, lifecycle, concurrency limits, failure reasons and parameter formats, and an output schema exists to carry return structure. Nothing an agent needs to call it correctly is 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 description coverage is 0%, so the Args block does all the work: it documents all 7 parameters with E.164 formatting for source_number, the tel/sip/extension enum values for destination_type, BCP-47 language semantics shared by recognition and synthesis, default-voice behavior for voice_id, and numeric ranges/defaults for both timeout fields.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('Start a live phone conversation: place a call') and immediately scopes it with 'that YOU will speak on and listen to', which separates it from dispatch-style siblings like create_call and from the one-way phone_say/phone_listen tools. An agent can identify the tool's role without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit conditional workflow: if status is 'answered', converse via phone_say_and_listen (one turn per call) and terminate with phone_hangup. It also states operational limits that affect when this tool is viable — 5-minute idle auto-hangup, 4 concurrent calls max, one-hour platform cap.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
phone_hangupA
End a live phone conversation: stop speech and hang up the call, which ends billing.
Works at any time, including while another phone tool is waiting on the same call.
Args: call_id: The call_id from phone_call_start or phone_wait_incoming.
| Name | Required | Description | Default |
|---|---|---|---|
| call_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does meaningful work: it discloses the side effects (speech stops, call ends, billing stops) and the concurrency behavior (safe even while another phone tool waits on the same call). It omits permission/auth requirements, but the core behavioral profile is covered.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the action and its consequences, followed by a short usage note and an Args section. Tight and well-ordered, though the docstring-style Args block is slightly formulaic for a single self-evident parameter.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Output schema exists, so return values need not be described. For a one-parameter tool, the description covers purpose, effects, and parameter provenance adequately; the remaining gap is the unaddressed overlap with the hangup_call sibling.
Complex tools with many parameters or behaviors need more documentation. 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 0%, so the description must compensate, and it does by explaining the provenance of call_id ('from phone_call_start or phone_wait_incoming'). That tells the agent where to obtain the required value, which the bare string schema does not.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource (end/hang up a live call) and adds the concrete consequences of stopping speech and ending billing. It is clear what the tool does, but it never distinguishes itself from the sibling hangup_call, leaving an ambiguity an agent must resolve elsewhere.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 usable timing context ('Works at any time, including while another phone tool is waiting on the same call'), which tells the agent when this call is safe. It stops short of stating when to prefer this over alternatives such as hangup_call or how it relates to phone_call_start's lifecycle.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
phone_incoming_configureA
Prepare (or release) a number for live phone conversations on INCOMING calls. Answered calls are billed (the call, speech-to-text and text-to-speech).
enabled=true REPLACES the number's existing call flow with a flow that keeps callers ringing until phone_wait_incoming answers them, so incoming calls are only handled while an MCP server is running and waiting. The original call flow id is stored on the replacement flow, so calling this again, even from a new session, never loses it. Only one MCP process may wait on a number at a time.
enabled=false restores the original call flow (or restore_call_flow_id) and deletes the replacement flow. It fails while this process is still waiting on, or talking on, the number.
Returns {"number", "call_flow_id", "previous_call_flow_id", "enabled"}. For enabled=false, previous_call_flow_id is the MCP flow that was removed.
Args: number_id: UUID of your VoIPbin number (see list_numbers). enabled: true to take over incoming calls, false to give the number back. restore_call_flow_id: With enabled=false, the call flow to restore instead of the stored one. It must exist. clear: With enabled=false and no stored previous flow, set true to leave the number without any call flow. Without it the request is refused, so incoming routing is never removed silently.
| Name | Required | Description | Default |
|---|---|---|---|
| clear | No | ||
| enabled | Yes | ||
| number_id | Yes | ||
| restore_call_flow_id | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden and does so richly: billing applies to answered calls (call, STT, TTS), the existing call flow is REPLACED and its id persisted on the replacement, only one MCP process may wait per number at a time, and deletion of the replacement flow on release. This is exactly the non-obvious operational context an agent needs.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Well structured with front-loaded purpose, then enabled=true/false blocks, a Returns line, and an Args list; no filler sentences. It is on the long side for a description, but the length is largely justified by the destructive/stateful behavior being disclosed.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists and the description goes further by naming the returned fields and clarifying previous_call_flow_id semantics per mode. For a stateful, billable, flow-replacing operation, nothing needed to call it correctly is 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 0%, so the description must compensate and does: number_id is tied to list_numbers, enabled defines the two modes, restore_call_flow_id is described as an override that must exist, and clear is explained as the guard against silently removing routing. Every parameter gets meaning beyond its bare type.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource – prepare or release a number for incoming calls – and immediately scopes it to INCOMING calls, distinguishing it from outgoing siblings like phone_call_start. The enabled=true/enabled=false framing makes the two modes unmistakable.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 each mode applies: enabled=true takes over incoming calls and requires an MCP server waiting (pointing at phone_wait_incoming), enabled=false hands the number back. It also names the failure conditions (already waiting/talking, missing stored flow) and the alternative restoration path.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
phone_listenA
Listen for the other party's next turn in a live phone conversation. Speech recognition is billed.
Returns speech already buffered first, otherwise waits for them to speak and returns once they stay silent for end_silence_ms.
Returns {"heard", "barge_in", "timed_out", "truncated", "call_ended", "during_agent_speech", "events_connected"}, plus stt_silent_seconds when no speech has been recognised for a long time. truncated means they were still talking at the time limit; the rest comes with the next listen.
Args: call_id: The call_id from phone_call_start or phone_wait_incoming. timeout_seconds: How long to wait for speech, 1 to 120 (default 30). end_silence_ms: Silence that ends their turn, 300 to 3000 (default 800).
| Name | Required | Description | Default |
|---|---|---|---|
| call_id | Yes | ||
| end_silence_ms | No | ||
| timeout_seconds | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and discharges most of it: it discloses that speech recognition is billed, that buffered speech is returned before waiting, that the turn ends after end_silence_ms of silence, and precisely what `truncated` means and how the remainder is retrieved. It omits auth/permission prerequisites and any concurrency or failure 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?
Purpose is front-loaded, the return semantics follow, and the Args block is clean and scannable. The enumeration of all seven return keys is somewhat redundant given an output schema exists, but the accompanying semantic notes justify most of the 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?
For a real-time voice primitive with no annotations, the description covers billing, waiting behavior, turn-ending rules, truncation semantics, and full parameter guidance. It stops short of stating what happens when the agent itself is speaking or how it relates to sibling call-control tools, though the output schema covers return shapes.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate entirely, and it does: call_id's origin is named, timeout_seconds is documented as 1–120 with default 30, and end_silence_ms as 300–3000 with default 800. All three parameters gain meaning and valid ranges absent from 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 states a specific verb and resource – listening for the other party's next spoken turn on a live call – which is clearly distinct from phone_say, phone_hangup, and phone_status. It never names the closest sibling (phone_say_and_listen) or the tradeoff between them, so it stops short of full differentiation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It establishes when the call_id originates (phone_call_start or phone_wait_incoming) and describes the buffered-speech-first behavior, which implies operational context. It never states when to pick this over phone_say_and_listen or phone_wait_incoming, so usage is inferred rather than prescribed.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
phone_sayA
Speak in a live phone conversation without listening afterwards. Speech synthesis is billed.
Queues text for the other party. With wait=true it returns when your speech is estimated to have finished (or when they talk over you), at most 120 seconds; still_speaking is then true if it had not finished. Their speech meanwhile is buffered for the next phone_listen.
Returns {"queued", "estimated_seconds", "call_ended", "events_connected"} plus "barge_in": true when they talked over you since the last result, and "still_speaking" with wait. call_ended is true when the call has ended (your speech then stops); a call that had already ended returns {"error", "reason": "call_ended", "call_ended": true}.
Args: call_id: The call_id from phone_call_start or phone_wait_incoming. text: What to say. At most 20000 bytes per call. wait: Block until the speech is estimated to be finished. barge_in: Stop your speech when they talk over you (default true).
| Name | Required | Description | Default |
|---|---|---|---|
| text | Yes | ||
| wait | No | ||
| call_id | Yes | ||
| barge_in | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does so: it discloses billing for speech synthesis, the 120-second wait cap, barge_in semantics, that still_speaking is only present with wait, buffering of the other party's speech, call_ended behavior, and the specific error shape for an already-ended call. This is unusually rich behavioral disclosure.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core action and billing note, then behavior, returns, and args. The Args section largely restates parameters already covered in prose, which is mild redundancy, but the sizing is appropriate for a tool with this much behavioral nuance.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite having an output schema, the description still enumerates the return fields and the error case, and it captures the interaction model (buffering for phone_listen, barge_in, wait timing) that an agent needs to sequence calls correctly. Nothing essential is 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 0%, so the description must compensate, and it documents all four parameters: call_id's origin (phone_call_start / phone_wait_incoming), the 20000-byte limit on text, wait's blocking behavior, and barge_in's default true and meaning. Nothing is left undefined.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Speak in a live phone conversation') and immediately scopes it against the listening variant with 'without listening afterwards'. An agent can distinguish it from phone_say_and_listen and phone_listen without opening schemas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The contrast 'without listening afterwards' and the note that the other party's speech 'is buffered for the next phone_listen' implicitly routes the agent between say vs say_and_listen vs listen. It never states an explicit 'use this when' rule or exclusion, so it falls just short of 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
phone_say_and_listenA
Take one turn of a live phone conversation: say text, then listen for the reply. Speech synthesis and recognition are billed.
Speaks text to the other party, then returns what they said after it. The turn ends once they stay silent for end_silence_ms. If they start talking over you and barge_in is true, your speech is stopped.
Returns {"heard", "earlier_heard", "barge_in", "timed_out", "truncated", "call_ended", "during_agent_speech", "events_connected"}. earlier_heard is speech that was already buffered before you spoke. still_speaking is true when your text is too long to finish within this call; continue with phone_listen. during_agent_speech marks speech captured while you were talking (possibly an echo of your own voice). stt_silent_seconds appears when no speech has been recognised for a long time, which can mean transcription stopped.
Args: call_id: The call_id from phone_call_start or phone_wait_incoming. text: What to say. At most 20000 bytes per call. listen_timeout_seconds: How long to wait for a reply after you finish speaking, 1 to 120 (default 30). end_silence_ms: Silence that ends their turn, 300 to 3000 (default 800). barge_in: Stop your speech when they talk over you (default true).
| Name | Required | Description | Default |
|---|---|---|---|
| text | Yes | ||
| call_id | Yes | ||
| barge_in | No | ||
| end_silence_ms | No | ||
| listen_timeout_seconds | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does so well: it discloses that speech synthesis/recognition are billed, that the turn ends after end_silence_ms of silence, that barge_in stops speech, and explains key return semantics like earlier_heard, still_speaking, during_agent_speech, and stt_silent_seconds.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Structure is front-loaded with the core action before detail, and most sentences earn their place. The mid-second block enumerating return fields is somewhat redundant given an output schema exists, adding minor bloat.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 5-param mutating/real-time tool with no annotations, the description covers purpose, turn mechanics, billing, parameter ranges, and continuation path thoroughly. Since an output schema exists, the added return-field prose is extra rather than a gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must compensate and it does: every parameter is documented with type/range/default (text max 20000 bytes, listen_timeout_seconds 1-120 default 30, end_silence_ms 300-3000 default 800, barge_in default true) plus the provenance of call_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 opening line states a specific verb-resource-action: 'Take one turn of a live phone conversation: say text, then listen for the reply.' This clearly distinguishes it from sibling phone_say (say only) and phone_listen (listen 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?
It explains the turn lifecycle and explicitly routes continuation to phone_listen ('continue with phone_listen'), and names phone_call_start/phone_wait_incoming as the source of call_id. However, it never states when to prefer phone_say or phone_listen outright, so full alternative selection is left partly implicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
phone_statusA
Show the state of live phone conversations in this MCP server (the calls are billed while active).
With call_id, summarises that call; without it, every call this process holds. Each summary has state, elapsed_seconds, remaining_seconds, buffered_transcripts and events_connected.
Args: call_id: Optional call_id; empty lists every call.
| Name | Required | Description | Default |
|---|---|---|---|
| call_id | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It usefully discloses that calls are billed while active and enumerates the summary fields, but it never explicitly states that the tool is non-mutating/read-only or whether permissions are needed. The billing warning is genuine added context, but the safety profile is left implicit.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Purpose and billing warning are front-loaded, followed by the two operating modes and an Args block. It is appropriately sized with little waste, though the trailing Args section is slightly redundant with the prose above.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-optional-param, read-only status tool with an output schema present, the definition covers scoping, cost implications, and return contents. Since the output schema documents the return shape, the enumerated fields are a minor redundancy rather than a gap; the only real omission is explicit read-only framing.
Complex tools with many parameters or behaviors need more documentation. 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 0% (the schema only exposes a bare call_id with a default of ""), so the description must compensate. It does: 'empty lists every call' explains the empty-string default behavior that the schema does not, which is exactly the semantics an agent needs for the single optional parameter.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Show the state of live phone conversations') and distinguishes the two operating modes: with call_id summarizes one call, without it lists every call this process holds. It is clear, but it never contrasts itself with the many sibling read tools (list_calls, get_call), leaving the agent to infer why 'live conversation state' differs from stored call records.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 conditions behavior on call_id (present vs empty), which is useful, but it offers no explicit when-to-use or when-not-to-use guidance relative to alternatives like get_call or list_calls. Usage is only implied by the framing of 'live phone conversations in this MCP server'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
phone_wait_incomingA
Wait for an incoming call and answer it for a live phone conversation. Costs money once a call is answered (the call, speech-to-text and text-to-speech are billed).
The number must first be prepared with phone_incoming_configure. When a call arrives it is answered by playing the greeting, then transcription and text-to-speech start, and you continue with phone_say_and_listen. Returns {"call_id", "caller", "status": "answered"} or {"status": "timed_out", "timed_out": true}. For long waits call this repeatedly rather than with a large timeout.
While this MCP server runs, an incoming call to a number that this server process has already waited on is rejected after 15 seconds if no phone_wait_incoming takes it. Calls to configured numbers this process has not waited on are left ringing.
When no MCP process is running, an incoming call to a configured number is never answered: it keeps ringing until the platform's one-hour call duration timeout.
Args: number_id: UUID of the number prepared with phone_incoming_configure. timeout_seconds: How long to wait for a call, 1 to 600 (default 120). greeting: What the caller hears on answer. Required: playing it is what answers the call. greeting_language: Language of the greeting voice (e.g. "en-US"). language: BCP-47 language of the conversation for speech recognition and synthesis. voice_id: Optional text-to-speech voice id for the conversation (not used for the greeting). max_duration_seconds: Maximum length of the conversation, 30 to 3600.
| Name | Required | Description | Default |
|---|---|---|---|
| greeting | No | Hello. | |
| language | No | en-US | |
| voice_id | No | ||
| number_id | Yes | ||
| timeout_seconds | No | ||
| greeting_language | No | en-US | |
| max_duration_seconds | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and delivers: billing triggers (call, STT, TTS), the 15-second rejection rule for numbers this process has waited on, the leave-ringing behavior for un-waited numbers, and the one-hour platform timeout when no MCP process runs. These are exactly the destructive/cost/side-effect traits an agent cannot infer from 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?
Front-loads the purpose, then the operational edge cases, then a compact Args block that earns its place because schema coverage is 0%. Sentences are information-dense with no filler, and the return-value shape is stated in one short line.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, yet the description still summarizes the two return shapes, and it covers prerequisites, billing, continuation, and timeout behavior for a genuinely complex tool. The only minor wrinkle is that it calls greeting 'Required' while the schema lists only number_id as required and gives greeting a default — a small description-vs-schema tension, not a gap in 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 description coverage is 0%, so the description must compensate and does: it documents all seven parameters with ranges and meaning (timeout 1-600 default 120, max_duration 30-3600, greeting_language vs language vs voice_id roles, BCP-47 for conversation language). It adds genuine semantics beyond the bare schema, e.g. that the greeting is what answers the call.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('Wait for an incoming call and answer it') and immediately scopes it to a live phone conversation. It also distinguishes itself from siblings by naming the prerequisite (phone_incoming_configure) and the continuation tool (phone_say_and_listen), so the agent can place it correctly in the workflow without opening any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states the precondition ('number must first be prepared with phone_incoming_configure') and the next step ('you continue with phone_say_and_listen'). It also gives a concrete operational instruction: for long waits, call repeatedly rather than with a large timeout, rather than leaving the choice to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
send_emailA
Send an email.
Attachments reference something already stored in VoIPbin rather than carrying file bytes. Each entry accepts exactly two keys:
reference_type Must be "recording". No other value attaches anything. reference_id UUID of the recording to attach.
Example: attachments=[{"reference_type": "recording", "reference_id": ""}]
Attachments are resolved AFTER the API has answered success: the send runs in the background, so nothing about an attachment is reported back. What happens to an unresolvable attachment (an unsupported reference_type, or a reference_id that does not exist) depends on which provider handles the message. The primary logs it and sends the email without it; the fallback, used when the primary fails, treats it as an error and sends NOTHING. So a success response here confirms only that the email was accepted, never that an attachment was included, and never that the email went out at all. To send with no attachments, omit this argument entirely rather than passing a placeholder entry.
Args: destination_email: Recipient email address. subject: Email subject line. content: Email body (HTML or plain text). attachments: Required by the API, defaulted here. See the format above; omit it to send an email with no attachments.
| Name | Required | Description | Default |
|---|---|---|---|
| content | Yes | ||
| subject | Yes | ||
| attachments | No | ||
| destination_email | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does it unusually well: attachments resolve AFTER the API returns success, the send is backgrounded, and a success response confirms neither attachment inclusion nor actual delivery. It also documents provider-dependent failure semantics (primary logs and sends without the attachment; fallback errors and sends nothing) — exactly the kind of non-obvious behavior an agent needs before invoking.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Purpose is front-loaded and each block (format, timing, provider behavior, Args) earns its place. The provider-failure paragraph is dense and slightly repetitive around 'accepted vs. sent', but the verbosity is driven by genuinely load-bearing semantics rather than padding.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be explained, and the description goes further by warning that a success response is not proof of delivery. Combined with full coverage of all four params and the attachment contract, nothing an agent needs to call this correctly is 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 0% and the nested attachments object has additionalProperties:true, so the description must do the work — and it does, fully specifying the two allowed keys, the only valid reference_type value, and a concrete example. The three scalar params get only one-line glosses ('HTML or plain text' on content is the one piece of added meaning), so it is strong but not exhaustive.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The first line states a specific verb+resource ('Send an email'), which is enough to separate it from read siblings like list_emails/get_email. It does not, however, explicitly distinguish itself from the similarly-named send_message sibling, which an agent could plausibly confuse with it.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied rather than stated: nothing says when to email versus send_message. It does give one concrete piece of behavioral guidance ('omit this argument entirely rather than passing a placeholder entry'), which is real but parameter-scoped rather than a when-to-use rule.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
send_messageA
Send an SMS message.
Args: source_number: Your VoIPbin phone number in E.164 format (e.g., "+14155551234"). destination_number: Recipient phone number in E.164 format. text: The message text to send.
| Name | Required | Description | Default |
|---|---|---|---|
| text | Yes | ||
| source_number | Yes | ||
| destination_number | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden of behavioral disclosure. It only states the action 'send' without mentioning potential side effects, costs, irreversibility, or any prerequisites. This is a significant gap for a tool that performs a real-world side effect like sending a text message.
Agents need to know what a tool does to the 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 and well-structured: a one-line purpose followed by a clear args list. Every sentence adds value, and it includes a helpful format example without unnecessary filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers the tool's purpose and all three parameters clearly, which is sufficient for a simple messaging tool. An output schema exists, so return value details are not needed. The description is complete for an agent to invoke the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema provides only names and types, but the description adds critical meaning by specifying E.164 format for both numbers and clarifying that source_number is 'Your VoIPbin phone number' and destination_number is the recipient. It also gives a concrete example, fully compensating for zero schema description 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 starts with 'Send an SMS message,' which is a specific verb and resource. It clearly distinguishes itself from sibling send_email by explicitly stating SMS, leaving no ambiguity about the tool's function.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context by specifying that this tool sends SMS messages, which is enough to understand when to use it. It does not explicitly mention alternatives or exclusions, but the SMS focus implicitly differentiates it from send_email and other communication tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
stop_activeflowB
Stop a running active flow.
Args: activeflow_id: The UUID of the active flow to stop.
| Name | Required | Description | Default |
|---|---|---|---|
| activeflow_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Given the lack of annotations, the description carries the full burden but does not disclose side effects, reversibility, or prerequisites. For a mutating operation, this is a significant gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is exceptionally concise and front-loaded, with a single declarative sentence plus a minimal parameter doc. 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?
The tool is simple, but the description omits behavioral context (e.g., what happens to the flow, whether it's safe, if it can be restarted). The presence of an output schema reduces the need to describe return values, but side effects are still undocumented.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description adds the semantic detail that activeflow_id is a UUID, which is not present in the schema. However, it doesn't explain how to obtain the value or any constraints beyond the basic identifier.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Stop') and the resource ('a running active flow'), distinguishing it from sibling tools like get_activeflow or delete_flow. The verb is 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?
No guidance is provided about when to use this tool versus alternatives such as delete_flow or hangup_call. The single sentence implies usage but lacks explicit context, prerequisites, or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_campaignA
Update a campaign.
Only the arguments you pass are sent. Any argument you leave out keeps its current value on the server.
This endpoint does not change a campaign's actions. Use update_campaign_actions for that.
Args: campaign_id: The UUID of the campaign. name: Campaign name. detail: Description. campaign_type: Type of campaign. One of: call, flow. service_level: Target service level percentage, 0-100. Only consulted when the campaign has a queue; see create_campaign for how it gates dialing. end_handle: What to do when the outdial list is exhausted. One of: stop, continue. fields: Removed in 0.2.0. Pass the named arguments instead.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | ||
| detail | No | ||
| fields | No | ||
| end_handle | No | ||
| campaign_id | Yes | ||
| campaign_type | No | ||
| service_level | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden. It discloses important mutation semantics: omitted fields are preserved, actions are not changed, service_level is only consulted when a queue exists, and 'fields' is removed. It stops short of permissions, reversibility, or side-effect warnings, so it is strong but not exhaustive.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core action, then partial-update behavior, then sibling routing, then a structured Args section. Every part earns its place because the schema has no property descriptions and the agent needs the argument semantics.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 7-parameter mutation tool with no annotations and an existing output schema, the description covers parameter meaning, partial-update behavior, and sibling routing well. It is nearly complete, though it does not address authorization or potential side effects of updating dialing behavior.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description fully compensates. It documents every argument, including campaign_id as UUID, campaign_type enum values, end_handle enum values, service_level range/conditionality, and explicitly deprecates the 'fields' argument.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Starts with a specific verb+resource: 'Update a campaign.' It also distinguishes itself from the sibling update_campaign_actions by stating that this endpoint does not change campaign actions. An agent can immediately tell it apart from adjacent campaign tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit partial-update semantics ('Only the arguments you pass are sent...') and names the correct alternative for the excluded operation ('Use update_campaign_actions for that'). This is clear when/how context and when-not/alternative guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_campaign_actionsB
Replace the flow actions a campaign runs for each contact.
Args: campaign_id: The UUID of the campaign. actions: The full list of flow actions. This replaces the existing list rather than appending to it.
| Name | Required | Description | Default |
|---|---|---|---|
| actions | Yes | ||
| campaign_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It does disclose the critical replace-not-append semantics ('This replaces the existing list rather than appending to it'), which signals a destructive overwrite of existing actions. However, it omits permissions/auth requirements, side effects on already-running contacts, and reversibility.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core action in the first sentence, followed by a compact args block. The replace-vs-append clarification earns its place. Slightly redundant restating of param names, but overall tight.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be explained. For a mutation tool with zero annotations, the description covers the key replace semantics but leaves out permissions, the effect on active contacts, and the structure of the actions payload, which the schema also does not supply.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It adds meaning for both params: campaign_id is a UUID and actions is the full replacing list. It does not, however, describe the structure of an individual flow action object, leaving the array item shape undocumented.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: 'Replace the flow actions a campaign runs for each contact.' This is more precise than the sibling update_campaign because it scopes to the campaign's flow actions. It does not, however, explicitly distinguish itself from update_campaign or update_flow, so sibling differentiation is only implied.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives no when-to-use guidance and never names an alternative. An agent cannot tell from the text whether this is the right tool versus update_campaign or update_flow; the connection between this tool and campaigns is only inferable from the name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_contactA
Update an existing contact.
Only the arguments you pass are sent. Any argument you leave out keeps its current value on the server. Passing an empty string clears that field.
Addresses and tags are not part of this call. Use add_contact_address, update_contact_address, delete_contact_address, add_contact_tag and delete_contact_tag for those.
Args: contact_id: The UUID of the contact to update. first_name: Contact's first name. last_name: Contact's last name. display_name: Display name (shown in UI). company: Company name. job_title: Job title. external_id: Your own identifier for this contact. notes: Free-text notes. fields: Removed in 0.2.0. Pass the named arguments instead.
| Name | Required | Description | Default |
|---|---|---|---|
| notes | No | ||
| fields | No | ||
| company | No | ||
| job_title | No | ||
| last_name | No | ||
| contact_id | Yes | ||
| first_name | No | ||
| external_id | No | ||
| display_name | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does well: it discloses PATCH-style merge semantics, the empty-string-clears rule, and that the `fields` argument was removed in 0.2.0. It does not mention auth/permission requirements or whether changes are reversible, so it stops short of a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads purpose, then the two critical behavioral rules, then the sibling routing, then the parameter list. The Args block is somewhat redundant with the schema, but the deprecation note and clearing semantics earn their space.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be explained. For a mutation tool with no annotations and a 9-parameter schema, the description covers the essential mechanics (partial update, clearing, sibling scope) but omits permissions and error/validation behavior.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% and there are 9 parameters (1 required), so the description must compensate. It lists every parameter and adds meaning for `fields` (deprecated) and the empty-string-clearing rule, but most per-parameter glosses ('Company name', 'Job title') merely restate the property titles, leaving the coverage gap only partially filled.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (Update) and resource (an existing contact), and explicitly scopes out addresses/tags by naming the sibling tools that handle them. It does not describe how it differs from create_contact or get_contact in detail, but the mutation scope is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit when-to-use semantics (partial update: only passed arguments are sent, omitted ones retain server values) and an explicit destructive-ish behavior (empty string clears a field). It also routes the agent away from this tool for addresses and tags by naming add_contact_address, update_contact_address, delete_contact_address, add_contact_tag and delete_contact_tag.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_contact_addressA
Update one of a contact's addresses.
Only the arguments you pass are sent.
Two limitations. The address type cannot be changed. The name and detail labels cannot either, and the way they fail matters: the API gateway accepts them and forwards them, but the layer behind it copies only target and is_primary, so a name or detail sent here is DROPPED with a success response. Nothing reports the loss. This tool therefore does not accept them at all, rather than letting them look like they worked. To change any of those, delete the address and add it again with add_contact_address.
Args: contact_id: The UUID of the contact. address_id: The UUID of the address to update. target: The phone number (E.164) or email address. is_primary: Whether this becomes the primary address of its type.
| Name | Required | Description | Default |
|---|---|---|---|
| target | No | ||
| address_id | Yes | ||
| contact_id | Yes | ||
| is_primary | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full behavioral burden and does so well: it discloses that only supplied arguments are transmitted, that name/detail labels are silently dropped by the API layer behind the gateway with a success response, and that the tool deliberately omits those fields to avoid false success.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the purpose, followed by the key behavior and limitations, then an Args section. Despite its length, every sentence earns its place by explaining a non-obvious silent failure mode that would otherwise cause incorrect agent behavior.
Shorter descriptions cost fewer tokens and are easier for agents to parse. 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 an output schema, so return values need not be described. With no annotations, the description supplies the necessary behavioral caveats, alternatives, and parameter details, making it complete enough 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 description coverage is 0%, so the description must document the four parameters. It does: contact_id and address_id are UUIDs, target is a phone number in E.164 or an email address, and is_primary controls whether the address becomes the primary one of its type.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: 'Update one of a contact's addresses.' It distinguishes this from add_contact_address and delete_contact_address by naming the alternative for changes it cannot make, and it is immediately clear which contact-address operation this is.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives explicit usage constraints, including that only passed arguments are sent, that address type and labels cannot be changed here, and that changing those requires deleting the address and re-adding it via add_contact_address. This names the alternative and the condition under which it should be used.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_flowA
Update an existing flow. All fields are required (full replacement).
Args: flow_id: The UUID of the flow to update. name: New display name. detail: New description. actions: New list of action objects.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| detail | Yes | ||
| actions | Yes | ||
| flow_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the behavioral burden. It discloses a key behavioral trait: 'All fields are required (full replacement)', indicating that existing values are overwritten. This is significant context beyond what is obvious from 'update', though it does not cover other aspects like auth or error 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?
The description is concise and front-loaded, with the core purpose in the first sentence and parameter details listed in a clean format. There is no extraneous information; 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?
The description provides the essential details for a full-replacement update, including the mandatory fields and the meaning of each. The output schema exists, so return values need not be described, but it lacks contextual details such as the structure of 'action objects' or how to obtain the flow_id, leaving it slightly short of 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 schema description coverage is 0%, so the description must compensate. It does so by providing a brief but clear meaning for each parameter: flow_id, name, detail, and actions. Each parameter's purpose is explicitly stated, adding value beyond the schema's type and title.
Input schemas describe structure but not intent. Descriptions should explain 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 'Update an existing flow' with a specific verb and resource. It distinguishes from sibling tools like create_flow, delete_flow, and get_flow by specifying the update operation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description clearly implies use when needing to modify an existing flow, with 'Update an existing flow' providing clear context. However, it does not explicitly mention alternatives or when-not-to-use, so it falls short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
8 tool updates
v0.3.0- Added
phone_call_start - Added
phone_hangup - Added
phone_incoming_configure - Added
phone_listen - Added
phone_say - Added
phone_say_and_listen - Added
phone_status - Added
phone_wait_incoming
13 tool updates
v0.2.0- Added
add_contact_address - Added
add_contact_tag - Changed
create_ai1 field changed- added
Input schema / properties / parameterAdded value: +{ + "anyOf": [ + { + "additionalProperties": true, + "type": "object" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Parameter" +}
- Changed
create_campaign4 fields changed- added
Input schema / properties / next_campaign_idAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Next Campaign Id" +} - added
Input schema / properties / outdial_idAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Outdial Id" +} - added
Input schema / properties / outplan_idAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Outplan Id" +} - added
Input schema / properties / queue_idAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Queue Id" +}
- Changed
create_conference2 fields changed- added
Input schema / properties / conference_typeAdded value: +{ + "default": "conference", + "title": "Conference Type", + "type": "string" +} - changed
Input schema / properties / timeout / defaultPrevious value: -3600000New value: +3600
- Changed
create_contact4 fields changed- added
Input schema / properties / addressesAdded value: +{ + "anyOf": [ + { + "items": { + "additionalProperties": true, + "type": "object" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Addresses" +} - added
Input schema / properties / external_idAdded value: +{ + "default": "", + "title": "External Id", + "type": "string" +} - added
Input schema / properties / sourceAdded value: +{ + "default": "", + "title": "Source", + "type": "string" +} - added
Input schema / properties / tag_idsAdded value: +{ + "anyOf": [ + { + "items": { + "type": "string" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Tag Ids" +}
- Added
delete_contact_address - Added
delete_contact_tag - Changed
send_email1 field changed- added
Input schema / properties / attachmentsAdded value: +{ + "anyOf": [ + { + "items": { + "additionalProperties": true, + "type": "object" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Attachments" +}
- Changed
update_campaign10 fields changed- added
Input schema / properties / campaign_typeAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Campaign Type" +} - added
Input schema / properties / detailAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Detail" +} - added
Input schema / properties / end_handleAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "End Handle" +} - removed
Input schema / properties / fields / additionalPropertiesRemoved value: -true - added
Input schema / properties / fields / anyOfAdded value: +[ + { + "additionalProperties": true, + "type": "object" + }, + { + "type": "null" + } +] - added
Input schema / properties / fields / defaultAdded value: +null - removed
Input schema / properties / fields / typeRemoved value: -"object" - added
Input schema / properties / nameAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Name" +} - added
Input schema / properties / service_levelAdded value: +{ + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Service Level" +} - changed
Input schema / requiredPrevious value: -[ - "campaign_id", - "fields" -]New value: +[ + "campaign_id" +]
- Added
update_campaign_actions - Changed
update_contact12 fields changed- added
Input schema / properties / companyAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Company" +} - added
Input schema / properties / display_nameAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Display Name" +} - added
Input schema / properties / external_idAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "External Id" +} - removed
Input schema / properties / fields / additionalPropertiesRemoved value: -true - added
Input schema / properties / fields / anyOfAdded value: +[ + { + "additionalProperties": true, + "type": "object" + }, + { + "type": "null" + } +] - added
Input schema / properties / fields / defaultAdded value: +null - removed
Input schema / properties / fields / typeRemoved value: -"object" - added
Input schema / properties / first_nameAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "First Name" +} - added
Input schema / properties / job_titleAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Job Title" +} - added
Input schema / properties / last_nameAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Last Name" +} - added
Input schema / properties / notesAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Notes" +} - changed
Input schema / requiredPrevious value: -[ - "contact_id", - "fields" -]New value: +[ + "contact_id" +]
- Added
update_contact_address
52 tool updates
v0.1.1- First observed
create_ai - First observed
create_call - First observed
create_campaign - First observed
create_conference - First observed
create_contact - First observed
create_flow - First observed
delete_campaign - First observed
delete_conference - First observed
delete_contact - First observed
delete_flow - First observed
get_activeflow - First observed
get_agent - First observed
get_ai - First observed
get_billing - First observed
get_call - First observed
get_campaign - First observed
get_conference - First observed
get_contact - First observed
get_conversation - First observed
get_customer - First observed
get_email - First observed
get_extension - First observed
get_flow - First observed
get_message - First observed
get_number - First observed
get_queue - First observed
get_route - First observed
get_tag - First observed
hangup_call - First observed
list_activeflows - First observed
list_agents - First observed
list_ais - First observed
list_billings - First observed
list_calls - First observed
list_campaigns - First observed
list_conferences - First observed
list_contacts - First observed
list_conversations - First observed
list_emails - First observed
list_extensions - First observed
list_flows - First observed
list_messages - First observed
list_numbers - First observed
list_queues - First observed
list_routes - First observed
list_tags - First observed
send_email - First observed
send_message - First observed
stop_activeflow - First observed
update_campaign - First observed
update_contact - First observed
update_flow
TDQS
Scored across 66 tools
Most tools pair a distinct resource with an action (list_calls, get_flow, create_contact), but the generic account-call tools (create_call, get_call, hangup_call) overlap conceptually with the live phone_* tools (phone_call_start, phone_status, phone_hangup). The descriptions explicitly separate account-level call records from live interactive conversations, so boundaries are usually recoverable, but misselection remains plausible.
Nearly all names are snake_case and follow a predictable verb_noun CRUD pattern (list_, get_, create_, update_, delete_) with clear subresource prefixes such as contact_address and campaign_actions. The phone_* family is internally inconsistent (phone_call_start vs phone_say, phone_hangup, phone_status), but the overall convention is still readable and mostly uniform.
66 tools is an extreme mismatch for one MCP server, exceeding the 50+ threshold for the lowest score. The set includes many near-duplicate list/get pairs and separate generic-call versus live-phone families, substantially increasing agent selection burden.
Core call, contact, flow, and campaign workflows have workable coverage, but many resources expose only list/get (agents, numbers, messages, emails, conversations, queues, tags, extensions, routes, billings, AIs) with no create/update/delete. These significant lifecycle gaps mean agents cannot fully manage much of the VoIP platform surface.
Maintenance
Related MCP Connectors
MCP server that lets AI assistants use all OneSchema features exposed via the public API.
MCP server for your apps' tools and custom tools, plus hosted AI agents and approval-gated workflows
Nifty's MCP server — exposes tasks, projects, messages, and files as tools for AI agents.
The Telnyx MCP server is an official implementation of the Model Context Protocol that enables AI clients (like Claude Desktop, Cursor, and OpenAI Agents) to interact with Telnyx's telephony, messaging, and AI assistant APIs. It provides comprehensive capabilities including making and managing phone calls, sending SMS/MMS messages, purchasing and configuring phone numbers, creating AI assistants with custom instructions, managing cloud storage buckets, scraping and embedding website content, and handling integration secrets. The server exists as both a local implementation and a remotely hosted version, allowing developers to integrate real-world communication infrastructure directly into AI applications.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceA Model Context Protocol server that enables AI models to interact with VoIPBin's VoIP services, supporting features like call management, agent management, campaigns, conferences, and chat functionality.4MIT
- AlicenseNot gradedqualityFmaintenanceAn implementation of the Model Context Protocol (MCP) server that exposes Twilio APIs to AI assistants and tools, allowing them to interact with Twilio services through the MCP protocol.113MIT
- AlicenseNot gradedqualityDmaintenanceMCP Server that integrates various Vonage APIs as MCP tools, to make it easier for developers to work with and create Vonage applications.39 npm3Apache 2.0
- AlicenseAqualityAmaintenanceAn MCP server that exposes Nextcloud APIs as tools for AI assistants, enabling management of files, calendar, contacts, conversations, and more.2221MIT