warp-mcp
Click on "Install 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., "@warp-mcpsearch for available phone numbers in area code 415"
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.
warp-mcp
MCP server for the Ringer WARP platform — SIP trunking, phone numbers, porting, messaging/10DLC, billing, and CDR analytics.
Gives AI agents (Claude, Cursor, Copilot, Codex, ChatGPT) full access to the WARP Customer API: 135 tools covering trunk provisioning, number search and ordering, port-in lifecycle, 10DLC brand/campaign registration, SMS sending, invoices, and call-detail analytics.
Quick Start
# Recommended: global install — the setup wizard runs automatically
npm install -g warp-mcp
# Or run the wizard explicitly / without installing
npx -y warp-mcp setupThe wizard validates your API key, stores it in ~/.warp-mcp/config.json, and registers the server with every MCP client it detects (Claude Code, Claude Desktop, Cursor, Codex, GitHub Copilot, ChatGPT Desktop).
You need a WARP API key (rk_...) — mint one in the WARP portal under Settings → API Keys.
Related MCP server: bubblyphone-agents
One-command installs
Claude Code
claude mcp add -s user warp -e WARP_API_TOKEN=rk_your_key -- npx -y warp-mcpCursor — click to install (then replace YOUR_WARP_API_KEY)
Manual (any MCP client)
{
"mcpServers": {
"warp": {
"command": "npx",
"args": ["-y", "warp-mcp"],
"env": { "WARP_API_TOKEN": "rk_your_key" }
}
}
}See INSTALL.md for per-client walkthroughs, troubleshooting, and uninstall steps.
Hosted endpoint
No local install needed — connect straight to https://mcp.warp.ringer.tel/ (Streamable HTTP).
Desktop connectors (claude.ai, ChatGPT): add a custom connector with that URL and sign in with your WARP account when prompted — the hosted endpoint authenticates via OAuth 2.1 and grants your customer-scoped permissions (excluding admin surfaces, Buzz, and API-key management — those stay in the portal).
Developer / CLI clients: authenticate with a bearer rk_ key instead:
claude mcp add --transport http warp https://mcp.warp.ringer.tel/ \
--header "Authorization: Bearer $WARP_API_KEY"{
"mcpServers": {
"warp": {
"type": "http",
"url": "https://mcp.warp.ringer.tel/",
"headers": { "Authorization": "Bearer rk_your_key_here" }
}
}
}Keys are minted in the WARP portal under Settings → API Keys.
Tools
Prefix | Group | Tools | What it does |
| SIP Trunks | 24 | Trunk CRUD, SIP credentials, endpoints, IP ACLs, registrations |
| Porting | 33 | Port-in requests end to end: draft → validate → submit → activate, documents, TIN compliance |
| Messaging | 33 | Send SMS, message history, 10DLC brands/campaigns, number enrollment, TCR reference data |
| Numbers | 15 | Search, order, release DIDs; per-TN voice/SMS config; port-out PINs |
| Team | 9 | Members and RBAC roles |
| Billing | 5 | Balance, ledger, invoices (JSON + HTML) |
| Analytics | 5 | Call detail records, statistics, trends, CSV export |
| Account | 10 | Capacity, utilization, scopes, WARP network IPs, API-key audit |
| Diagnostics | 1 | Config + connectivity check |
The server also ships a warp-guide prompt (and server instructions) with deep WARP domain knowledge — workflows, concepts, and common mistakes.
Environment variables
Variable | Default | Purpose |
| — | API key ( |
|
| API base URL override |
|
| Per-request timeout |
Token resolution order: env var → ~/.warp-mcp/config.json → unauthenticated (tools return guidance to run setup).
Development
npm ci --ignore-scripts
npm run build # tsc → dist/
npm test # vitest (in-memory MCP transport)
npm run dev # tsx src/index.tsReleases are published from CI: npm version patch|minor|major, push with --follow-tags, create a GitHub release — the workflow publishes to npm (OIDC trusted publishing with provenance) and to the MCP Registry (io.github.ringer/warp). Do not run npm publish locally after the initial release.
License
MIT © Ringer
Available Tools
135 toolsacct_get_balanceGet prepaid balanceARead-onlyIdempotent
Get your prepaid balance and currency. Use for a quick balance check; for the full billing snapshot (credit limit, available, suspension flag) use bill_get_balance. POSTPAID customers always see prepaid_balance=0.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and nondestructive. The description adds behavioral nuance: POSTPAID customers always see prepaid_balance=0, which goes beyond annotations. No contradiction.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with purpose, then usage guidance, then a caveat. 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?
Despite no output schema, the description adequately covers return values and edge cases. Context from annotations and sibling tools supports 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?
No parameters exist, so schema description coverage is 100%. The description adds value by hinting at response contents (balance and currency), which is helpful given no output schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool retrieves prepaid balance and currency, and explicitly distinguishes from the sibling tool bill_get_balance, making the purpose unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Directly states when to use this tool ('quick balance check') and when to use the alternative (bill_get_balance for full snapshot). Also notes the behavior for POSTPAID customers, providing clear usage guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
acct_get_capacityGet account capacityARead-onlyIdempotent
Get your account's per-class × per-direction CPS (calls-per-second) and channel capacity ceilings. Use when planning traffic loads or diagnosing capacity-related call rejections.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false, and idempotentHint=true. Description adds that it returns 'ceilings', which are static limits. It doesn't contradict annotations, but doesn't add significant behavioral context beyond what annotations already convey.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, each serving a purpose: first states the function, second provides usage guidance. No redundant or irrelevant information. Efficient and well-structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has no parameters and no output schema, the description covers the essential purpose and use cases. It mentions key concepts like per-class and per-direction. While it could add details about scope or format, 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?
Input schema has 0 parameters, so schema coverage is 100% trivially. The description adds meaning by explaining what the tool returns (CPS and channel capacity), which is not in the schema. Baseline for 0 params is 4, and description satisfies that.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states it retrieves 'per-class × per-direction CPS and channel capacity ceilings'. The verb 'Get' and resource 'account capacity' are specific. It distinguishes from siblings like acct_get_utilization by focusing on capacity ceilings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly provides usage scenarios: 'Use when planning traffic loads or diagnosing capacity-related call rejections.' This gives clear context, though it doesn't mention when not to use or alternative tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
acct_get_utilizationGet capacity utilizationARead-onlyIdempotent
Get your aggregate CPS/channel capacity and current concurrent usage across trunk groups. Use to check how close live traffic is to capacity ceilings. current_* fields are null when live counters cannot be read (counters_available=false).
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, destructiveHint. The description adds a valuable behavioral detail: current_* fields are null when live counters cannot be read (counters_available=false). No contradictions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with purpose and usage. Every sentence adds value 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 zero parameters and no output schema, the description provides sufficient context: what it does, why to use it, and a key edge case. Could optionally mention return fields, but not necessary for this simple 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?
No parameters, so baseline is 4. The description adds meaning by stating what data is returned (aggregate capacity, current usage, trunk groups).
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool retrieves aggregate CPS/channel capacity and current concurrent usage across trunk groups, distinguishing it from siblings like acct_get_capacity or acct_get_balance.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly tells the user to use it to check live traffic against capacity ceilings, providing clear context. Does not explicitly list alternatives, but the purpose is clear enough for selection among siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
acct_list_scopesList permission scope catalogARead-onlyIdempotent
List every permission scope in the WARP platform registry, grouped by category. Use when building or editing team roles or API keys to see what scopes exist. Requires the team:read scope.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint=true, idempotentHint=true, and destructiveHint=false. The description adds that the list is grouped by category and that the 'team:read' scope is required, providing useful behavioral context beyond the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise—two sentences that efficiently convey the purpose, grouping, usage context, and auth requirement. No extraneous information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple listing tool with no parameters and no output schema, the description covers all essential aspects: what it does, how results are organized, when to use it, and what authentication is needed. It is complete for an AI agent to select and invoke correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has zero parameters, so schema coverage is 100%. With no parameters to document, the description does not need to add parameter semantics. A baseline of 4 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'List' and the resource 'permission scope in the WARP platform registry', and it explicitly mentions grouping by category. It is distinct from all sibling tools, none of which list permission scopes.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 explicitly states when to use the tool ('when building or editing team roles or API keys') and mentions the required scope ('team:read'). It does not provide explicit alternatives or when-not-to-use, but the context is clear and there are no sibling tools for listing scopes.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
bill_get_balanceGet billing balance snapshotARead-onlyIdempotent
Get your full billing balance snapshot: current balance, credit limit, available credit, suspension flag, and currency. Use for billing questions; for just the prepaid number use acct_get_balance.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false. Description adds value by listing the returned fields (balance, credit limit, etc.) and scope (full billing snapshot), which annotations don't cover.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with purpose and structure. Every word earns its place; no 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?
For a simple read-only tool with no parameters, the description lists returned fields comprehensively. No output schema exists, but description compensates well.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
No parameters in input schema (schema coverage 100%). Baseline for 0 params is 4; description need not add parameter 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?
Description clearly states 'Get your full billing balance snapshot' and lists specific fields. It distinguishes from sibling acct_get_balance by specifying its use for prepaid 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?
Explicitly says 'Use for billing questions; for just the prepaid number use acct_get_balance', providing clear when-to-use and when-not-to-use guidance with a named alternative.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
bill_get_invoiceGet an invoiceARead-onlyIdempotent
Get one invoice in full: header, line items, tax lines, and payment applications. Use after finding the invoice id via bill_list_invoices. Returns 404 for invoices not owned by you.
| Name | Required | Description | Default |
|---|---|---|---|
| invoice_id | Yes | Invoice id (from bill_list_invoices) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and idempotentHint=true, so the description doesn't need to repeat safety. It adds the 404 response behavior, which is useful context beyond annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences: first describes what the tool returns, second provides usage guidance and error condition. No wasted words, front-loaded with the core purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read operation with one parameter, the description covers what is returned, how to obtain the required ID, and a key error scenario. No output schema needed; fully informative.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Single parameter invoice_id with schema description 'Invoice id (from bill_list_invoices)'. Schema coverage is 100%, so description adds minimal extra meaning; baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states the verb 'get' and resource 'one invoice in full', listing components (header, line items, tax lines, payment applications). Distinguishes from sibling tools like bill_list_invoices (list vs get) and bill_get_invoice_html (different format).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says 'Use after finding the invoice id via bill_list_invoices,' providing a clear precondition. Also notes the 404 error condition for invoices not owned by the user, guiding 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.
bill_get_invoice_htmlRender invoice as HTMLARead-onlyIdempotent
Render one invoice as a branded HTML document (returned as text). Use when the user wants a presentable invoice document; for structured data use bill_get_invoice. A PDF variant exists at GET /v1/invoices/{id}/pdf but is binary — direct users to the portal for PDF downloads.
| Name | Required | Description | Default |
|---|---|---|---|
| invoice_id | Yes | Invoice id (from bill_list_invoices) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations provide safety profile; description adds that output is HTML text. No contradictions, but lacks details on auth or rate limits.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with purpose, no unnecessary words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Adequately explains return format as text, but doesn't detail HTML structure; tool is simple so information is sufficient.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema has 100% coverage with description for invoice_id; description adds no new meaning beyond what 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?
Clearly states it renders an invoice as HTML returned as text, and distinguishes from sibling tool bill_get_invoice which returns structured data.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly tells when to use (user wants presentable invoice) and when not (for structured data use bill_get_invoice), also addresses PDF variant.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
bill_list_invoicesList invoicesARead-onlyIdempotent
List your invoices, newest billing period first. Use to find an invoice id before fetching details with bill_get_invoice.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark it as read-only and idempotent. Description adds ordering ('newest billing period first') and purpose, which adds some value beyond the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences that front-load the action and ordering. Every word adds value with no waste.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple, parameterless list tool, the description covers purpose and ordering. While output schema is missing, the use case is straightforward.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
No parameters defined in input schema, so description does not need to add meaning. Baseline 4 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'List your invoices, newest billing period first' with a specific verb and resource. It distinguishes itself from sibling tools like bill_get_invoice by stating its use case.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 usage guidance: 'Use to find an invoice id before fetching details with bill_get_invoice.' It does not list when not to use, but the context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
bill_list_ledgerList ledger transactionsARead-onlyIdempotent
List your billing ledger journal entries, most recent first. Use to trace payments, charges, and adjustments — e.g. 'why did my balance drop yesterday'.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max rows to return (1-500, default 100) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false, idempotentHint=true, so the description does not need to repeat those. The description adds ordering ('most recent first') and a use case, but does not disclose details like pagination behavior or rate limits. Given the annotations cover safety, a score of 3 is appropriate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise: two sentences that immediately state the action and provide context. Every sentence adds value, and there is no redundancy. It is perfectly front-loaded for an agent to quickly understand.
Shorter descriptions cost fewer tokens and are easier for agents to parse. 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 optional parameter, no output schema), the description is mostly complete. It explains what the tool lists and in what order, and gives a usage example. The only minor gap is that the return format is not described, but for a list tool this is often acceptable.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There is a single parameter 'limit' with full schema description coverage. The tool description does not add any additional information about the parameter beyond what is already in the schema. With 100% coverage, the baseline is 3, and no extra value is provided.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states that the tool lists billing ledger journal entries in reverse chronological order. It includes a concrete example ('why did my balance drop yesterday'), which helps agents understand the purpose. It is easily distinguishable from siblings like bill_get_balance or bill_list_invoices.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides a usage scenario: tracing payments, charges, and adjustments. It gives an example query ('why did my balance drop yesterday'). However, it does not explicitly mention when not to use this tool or compare it to alternatives, so it slightly lacks exclusion criteria.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cdr_export_csvExport CDRs as CSVARead-onlyIdempotent
Start an asynchronous CSV export of call detail records for a date range and wait for the download link. The export runs server-side (capped at 500,000 rows; a capped file ends with a TRUNCATED marker line) and the tool returns a signed download URL valid 24h — it never returns CSV text, so hand the URL to the user rather than trying to read it. Use only when the user explicitly wants a file; for browsing or analysis use cdr_get_details / cdr_get_statistics. This tool polls for up to 45s; if the job is still running it returns its job_id — call the tool again with that job_id (filters are ignored then) to resume waiting on the same export instead of starting a new one. Errors: INVALID_DATE, NO_ACTIVE_CUSTOMER, NOT_FOUND (unknown or foreign job_id), CDR_EXPORT_FAILED, EXPORT_TIMEOUT, CDR_EXPORT_UNAVAILABLE.
| Name | Required | Description | Default |
|---|---|---|---|
| ani | No | Filter by ANI (calling number) | |
| dni | No | Filter by DNI (called number) | |
| job_id | No | Resume polling an export job returned by an earlier call instead of starting a new one. When set, the filter parameters are ignored. | |
| end_date | No | End date (YYYY-MM-DD, inclusive) | |
| direction | No | Filter by call direction | |
| start_date | No | Start date (YYYY-MM-DD) | |
| disposition | No | Filter by call disposition (e.g. ANSWERED, NO ANSWER, BUSY, FAILED) | |
| tz_offset_minutes | No | Operator timezone offset in minutes, as returned by JS getTimezoneOffset() (e.g. 420 for US Mountain in summer) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, and the description adds substantial context beyond them: async polling capped at 45s, the 500,000-row limit with TRUNCATED marker, signed URL valid 24h, the explicit 'never returns CSV text' behavior, job_id resume semantics where filters are ignored, and a complete error-code list. Nothing contradicts the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Dense but every sentence earns its place: purpose first, then behavioral constraints, then routing guidance, then polling/job_id mechanics and errors. The 'hand the URL to the user rather than trying to read it' instruction is a high-value anti-misuse note, and the error enumeration discloses failure modes 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?
For an async tool with no output schema, the description covers everything an agent needs: the return shape (signed URL, not CSV text), the failure modes (error codes), retry/resume semantics (job_id), limits (500k rows), and timeout behavior (45s poll). The only minor tension is 'for a date range' versus zero required parameters, but the schema documents the date fields, so nothing critical 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 100%, so the baseline of 3 applies — the schema already documents all 8 parameters thoroughly. The description reinforces the job_id resume semantics ('filters are ignored then') and implies date-range usage, but adds no per-parameter meaning beyond what the schema provides, which is acceptable at this coverage level.
Input schemas describe structure but not intent. Descriptions should explain 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 opens with a specific verb+resource combination ('Start an asynchronous CSV export of call detail records for a date range and wait for the download link') that precisely states what the tool does. It also explicitly names the sibling tools it is not — cdr_get_details / cdr_get_statistics — so an agent can differentiate it without opening any other schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives an explicit usage rule: 'Use only when the user explicitly wants a file; for browsing or analysis use cdr_get_details / cdr_get_statistics.' This is a clear when-to-use/when-not-to-use statement with named alternatives, leaving nothing to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cdr_get_dashboard_statsGet dashboard statisticsARead-onlyIdempotent
Get the key dashboard metrics (counts, revenue, growth) scoped to your accessible customers. Use for a quick account health overview rather than detailed CDR analysis.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and idempotentHint. Description adds context about scoping and return fields (counts, revenue, growth). No contradictions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with purpose, then usage guidance. 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 no-parameter tool with safe annotations and no output schema, the description fully covers purpose, scope, and usage. No gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
No parameters exist, schema coverage is 100%. Description doesn't need to add param info; baseline for 0 params is 4.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Describes specific verb ('get'), resource ('dashboard metrics'), and scope ('your accessible customers'). Distinguishes from siblings like cdr_get_details by stating it's for a quick overview rather than detailed analysis.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states when to use: 'quick account health overview'. Also implies when not to use: 'rather than detailed CDR analysis', guiding towards alternative sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cdr_get_detailsList call detail recordsARead-onlyIdempotent
List call detail records (CDRs) for a date range with optional filters, newest first. Use to investigate specific calls, verify traffic, or debug call failures. Pagination is cursor-based: pass the previous response's next_cursor back as cursor to get the following page, and stop when has_more is false. There is no page number and no total count — an exact total over the CDR store is not affordable at platform volume. For aggregate metrics use cdr_get_statistics; for chart data use cdr_get_trends. Returns up to 50 records per page — pass next_cursor to continue; the WARP API itself accepts up to 1000 for direct callers. Errors: INVALID_DATE, INVALID_CURSOR (a bad cursor is a hard error, never a silent restart), CDR_QUERY_FAILED.
| Name | Required | Description | Default |
|---|---|---|---|
| ani | No | Filter by ANI (calling number) | |
| dni | No | Filter by DNI (called number) | |
| limit | No | Rows per page (1-50, default 50) | |
| cursor | No | Opaque cursor from a previous call's next_cursor. Omit for the first page. | |
| end_date | No | End date (YYYY-MM-DD, inclusive) | |
| direction | No | Filter by call direction | |
| start_date | No | Start date (YYYY-MM-DD) | |
| disposition | No | Filter by call disposition (e.g. ANSWERED, NO ANSWER, BUSY, FAILED) | |
| tz_offset_minutes | No | Operator timezone offset in minutes, as returned by JS getTimezoneOffset() (e.g. 420 for US Mountain in summer) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint, so the safety profile is covered. The description adds substantial behavioral detail beyond that: cursor-based pagination semantics, absence of page numbers and total counts, the hard-error behavior for invalid cursors, the 50-record page cap versus the WARP API's 1000, and specific error codes. This is rich, non-obvious behavior that an agent needs to call the tool correctly.
Agents need to know what a tool does to the 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 dense but every sentence earns its place: action/scope, use cases, pagination behavior, sibling routing, and error codes. It is front-loaded with the core purpose, then expands into operational details.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a paginated list tool with nine parameters, no required parameters, no output schema, and annotations covering safety, the description is complete. It explains how pagination works, when to stop, what not to expect ('no page number and no total count'), and what errors may occur. An agent has everything needed to invoke and consume this tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the schema already documents every parameter, giving a baseline of 3. The description adds meaningful semantics beyond the schema, especially for cursor ('pass the previous response's next_cursor back'), the lack of page numbers/total counts, and the limit behavior. It doesn't deeply elaborate on each filter, but the schema already does that.
Input schemas describe structure but not intent. Descriptions should explain 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 action ('List call detail records') on a specific resource (CDRs), with scope (date range, optional filters) and ordering ('newest first'). It names concrete use cases and explicitly distinguishes itself from cdr_get_statistics and cdr_get_trends, so an agent can tell it apart from siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives explicit when-to-use guidance ('investigate specific calls, verify traffic, or debug call failures') and explicitly names alternatives for other needs ('For aggregate metrics use cdr_get_statistics; for chart data use cdr_get_trends'). This leaves little ambiguity about tool selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cdr_get_statisticsGet call statisticsARead-onlyIdempotent
Get aggregated CDR metrics (totals, durations, dispositions) for a date range. Use for summary questions like 'how many calls last week' or ASR/ACD analysis. For individual calls use cdr_get_details.
| Name | Required | Description | Default |
|---|---|---|---|
| end_date | No | End date (YYYY-MM-DD, inclusive) | |
| start_date | No | Start date (YYYY-MM-DD) | |
| tz_offset_minutes | No | Operator timezone offset in minutes, as returned by JS getTimezoneOffset() (e.g. 420 for US Mountain in summer) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint=true, idempotentHint=true, destructiveHint=false, so the description's behavioral burden is reduced. The description adds that it aggregates metrics over a date range, which is useful context beyond annotations. No contradictions, but could be more detailed about return format.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, no wasted words, front-loaded with key purpose and usage guidance. Efficient and to the point.
Shorter descriptions cost fewer tokens and are easier for agents to parse. 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 output schema, the description lists included metric types (totals, durations, dispositions) which partially compensates. However, it does not detail the exact fields or structure of the response. For a simple aggregation tool, this is moderately complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with descriptions for all three parameters, so baseline is 3. The description mentions 'date range' but does not add syntax or format details beyond what the schema already provides. No additional semantic value from 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?
Description clearly states the tool retrieves aggregated CDR metrics (totals, durations, dispositions) for a date range, and explicitly contrasts with sibling cdr_get_details for individual calls. This provides specific verb+resource and distinguishes from a key sibling.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states when to use (summary questions, ASR/ACD analysis) and when not to use, with a clear alternative: 'For individual calls use cdr_get_details.' This covers both usage context and exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cdr_get_trendsGet call trend dataARead-onlyIdempotent
Get time-bucketed CDR aggregates for a date range, suitable for charts and spotting traffic patterns over time. Choose hour granularity for a single day, day for weeks, week for months.
| Name | Required | Description | Default |
|---|---|---|---|
| end_date | No | End date (YYYY-MM-DD, inclusive) | |
| start_date | No | Start date (YYYY-MM-DD) | |
| granularity | No | Bucket size (default day) | |
| tz_offset_minutes | No | Operator timezone offset in minutes, as returned by JS getTimezoneOffset() (e.g. 420 for US Mountain in summer) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false. Description adds context on aggregation and suitability for charts, which is useful beyond annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences, front-loaded with purpose, then usage hint. 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?
Covers purpose, usage, and granularity. No output schema, but for a chart-oriented aggregate tool, description is sufficient. Could mention data range constraints, but not critical.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with descriptions for all parameters. Description does not add additional meaning to parameters beyond the schema, so baseline 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states 'get time-bucketed CDR aggregates' for charts and traffic patterns, distinguishing it from sibling tools like cdr_get_details (detailed records) and cdr_get_statistics (statistics).
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 suggests granularity choices: 'hour for a single day, day for weeks, week for months'. Does not mention when not to use or alternatives, but given siblings, this is adequate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
key_getGet an API keyARead-onlyIdempotent
Get one API key's metadata and scopes by key UUID (never the secret). Use to inspect a specific key found via key_list. Requires the api_keys:read scope.
| Name | Required | Description | Default |
|---|---|---|---|
| key_id | Yes | API key UUID | |
| customer_id | Yes | Your customer UUID (shown in the WARP portal under Settings) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare read-only, idempotent, non-destructive. Description adds key behavioral detail: 'never the secret' and the required scope 'api_keys:read', providing context beyond annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three concise sentences, front-loaded with purpose and key constraint. No wasted words. Every sentence adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read tool with 2 params and no output schema, the description fully covers purpose, what it returns (metadata and scopes), what it doesn't (secret), how to use it, and permissions needed. Adequate for agent decision-making.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema has 100% description coverage. Description reinforces that key_id is the UUID to use, but does not add new semantic meaning beyond what the schema already provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description uses specific verb 'Get' and resource 'API key's metadata and scopes'. Differentiates from siblings by stating 'never the secret' and linking to key_list. Clearly identifies the tool's unique role.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
States when to use: 'Use to inspect a specific key found via key_list' and lists required scope. Does not explicitly state when not to use, but implication is clear that it's for metadata only.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
key_get_auditGet API key audit trailARead-onlyIdempotent
Get the most recent 100 audit events (create/rotate/revoke/auth activity) for one API key. Use when investigating suspicious key usage or verifying rotation history. Requires the api_keys:read scope.
| Name | Required | Description | Default |
|---|---|---|---|
| key_id | Yes | API key UUID | |
| customer_id | Yes | Your customer UUID (shown in the WARP portal under Settings) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations (readOnlyHint, idempotentHint, destructiveHint) already declare the tool is safe and non-destructive. The description adds value by specifying the limit of 100 events and the types of audit activities, which goes beyond the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two concise sentences: first defines the action, second provides usage context and requirements. No superfluous information, well front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read tool with two parameters and no output schema, the description is adequately complete. It covers purpose, use case, scope, and result limit. The lack of output format details is acceptable per guidelines.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 100% coverage with descriptions for both parameters. The description does not add additional meaning beyond what the schema provides, so baseline 3 is appropriate per guidelines.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool retrieves the most recent 100 audit events for one API key, specifying event types (create/rotate/revoke/auth). It distinguishes from sibling tools like key_get and key_get_audit_all by scope and resource.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit use cases (investigating suspicious usage, verifying rotation history) and required scope (api_keys:read). It does not explicitly state when not to use this tool versus key_get_audit_all, but the context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
key_get_audit_allGet customer-wide API key audit trailARead-onlyIdempotent
Get the most recent 100 audit events across ALL of your API keys. Use for a security review of key activity account-wide; for a single key's history use key_get_audit. Requires the api_keys:read scope.
| Name | Required | Description | Default |
|---|---|---|---|
| customer_id | Yes | Your customer UUID (shown in the WARP portal under Settings) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false. Description adds return limit of 100 events and scope requirement, but no additional behavioral traits like pagination or rate limits.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with core function and constraints. Every sentence adds value with no waste.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given simple read-only tool with one well-described parameter and no output schema, description fully covers what an agent needs: function, scope, limit, prerequisite (scope), and sibling distinction.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with a clear description for the single parameter. The description does not add further parameter-level detail beyond what the schema already provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clear verb ('Get') and resource ('audit events across ALL of your API keys'). Distinguishes from sibling 'key_get_audit' by specifying scope ('ALL' vs single key).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states when to use ('security review of key activity account-wide') and when not to use ('for a single key's history use key_get_audit'). Also notes required scope ('api_keys:read').
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
key_listList API keysARead-onlyIdempotent
List your API keys with their scopes and prefixes (secrets are never returned). Use to audit which keys exist and what they can do. Requires the api_keys:read scope.
| Name | Required | Description | Default |
|---|---|---|---|
| customer_id | Yes | Your customer UUID (shown in the WARP portal under Settings) | |
| include_revoked | No | Include revoked keys (default false) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and idempotentHint=true. The description adds critical behavioral info: 'secrets are never returned' and the required scope, which goes beyond annotations without contradiction.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, compact and to the point. Every word adds value, with no redundancy or fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the simple tool with 2 parameters and strong annotations, the description covers purpose, permission, and a key behavioral constraint. The lack of output schema is acceptable as the annotations indicate it's a list (non-destructive, read-only).
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with clear descriptions for both parameters. The tool description does not add new parameter-level meaning beyond the schema, so baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'List' and the resource 'API keys', and highlights the purpose 'to audit which keys exist and what they can do'. It distinguishes from sibling tools like 'key_get' and 'key_get_audit' by focusing on listing.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description indicates usage for auditing and notes the required scope 'api_keys:read'. It does not explicitly exclude alternatives, but the context is clear enough for an agent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
msg_assign_numbersAttach numbers to campaignA
Attach telephone numbers you own to one of your 10DLC campaigns. This is STEP 3 of the 10DLC flow (msg_create_brand → msg_create_campaign → assign numbers) and is required before msg_send will accept a number as from. Returns per-TN assigned/failed lists (failure reasons: not_found, not_owned, lookup_error, write_error); the response is NOT wrapped in the standard envelope. Errors: INVALID_PAYLOAD (400), NOT_FOUND (404, campaign not owned), TNIQ_ERROR (502).
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Campaign ID (messaging-backend UUID, as returned by msg_list_campaigns / msg_create_campaign) | |
| phone_numbers | Yes | Telephone numbers to attach, NANP format, e.g. ["13039813633"] |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Describes the response format as 'per-TN assigned/failed lists' with specific failure reasons, and notes that the response is NOT wrapped in the standard envelope. This adds significant context beyond the annotations, which only indicate non-readonly and non-idempotent. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences with no wasted words. Front-loaded with action, then flow context, then response/error details. 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 parameter set and the presence of annotations, the description fully covers purpose, usage context, prerequisites, response format, and error scenarios. No gaps identified.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with clear descriptions for both parameters. The description adds context by explaining the campaign ID source (msg_list_campaigns / msg_create_campaign) and the NANP format example, which enhances understanding beyond the schema alone.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The name and description clearly state 'Attach telephone numbers you own to one of your 10DLC campaigns.' It uses a specific verb ('attach'), identifies the resource ('telephone numbers' and 'campaign'), and positions it as step 3 of the 10DLC flow, distinguishing it from siblings like msg_remove_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?
Explicitly states it is step 3 of the flow, lists prerequisites (msg_create_brand, msg_create_campaign), and notes that it is required before msg_send. Also enumerates possible error types (INVALID_PAYLOAD, NOT_FOUND, TNIQ_ERROR) with HTTP status codes.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
msg_create_brandCreate 10DLC brandA
Register a new 10DLC brand with TCR (The Campaign Registry) for your account. This is STEP 1 of the 10DLC flow: create brand → msg_create_campaign → msg_assign_numbers. Check msg_list_entity_types and msg_list_verticals for valid enum values first. Registration may incur TCR fees. Errors: INVALID_PAYLOAD/TNIQ_VALIDATION (400), TNIQ_ERROR (502, upstream TCR failure).
| Name | Required | Description | Default |
|---|---|---|---|
| ein | No | Tax ID / EIN, e.g. "12-3456789" (US). Required for company registrations; improves trust score. | |
| city | No | City, e.g. "Denver" | |
| No | Brand contact email address | ||
| phone | No | Support/contact phone in E.164 format, e.g. "+13035551212" | |
| state | No | State/region code, e.g. "CO" | |
| street | No | Street address, e.g. "123 Main St" | |
| country | No | Country as 2-letter ISO code, e.g. "US" | |
| website | No | Brand website URL, e.g. "https://acme.example.com" | |
| vertical | No | Industry vertical code (see msg_list_verticals for the valid list), e.g. RETAIL | |
| last_name | No | Contact last name (required for SOLE_PROPRIETOR) | |
| first_name | No | Contact first name (required for SOLE_PROPRIETOR) | |
| entity_type | No | Brand entity type (see msg_list_entity_types for the valid list), e.g. PRIVATE_PROFIT | |
| postal_code | No | Postal/ZIP code, e.g. "80202" | |
| company_name | No | Legal company name as registered, e.g. "Acme Coffee LLC". Required for non-SOLE_PROPRIETOR entity types. | |
| display_name | No | Brand display/marketing name, e.g. "Acme Coffee" | |
| mobile_phone | No | Mobile phone in E.164 format (used for SOLE_PROPRIETOR OTP verification) | |
| reference_id | No | Your own free-form reference ID for this brand | |
| stock_symbol | No | Stock ticker symbol (PUBLIC_PROFIT brands only) | |
| stock_exchange | No | Stock exchange, e.g. NASDAQ, NYSE (PUBLIC_PROFIT brands only) | |
| alt_business_id | No | Alternate business identifier, e.g. DUNS number | |
| ein_issuing_country | No | EIN issuing country as 2-letter ISO code, e.g. "US" | |
| alt_business_id_type | No | Type of the alternate business ID, e.g. DUNS, LEI, GIIN |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Discloses registration may incur TCR fees and lists possible error codes (INVALID_PAYLOAD/TNIQ_VALIDATION 400, TNIQ_ERROR 502). Annotations indicate non-read-only and non-destructive. Missing success response 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?
Four sentences, each with a distinct purpose: core operation, flow placement, prerequisites, and error/fee info. 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?
Covers purpose, flow, prerequisites, and errors. Lacks success return value/response description, but given no output schema, it is reasonably complete for a registration tool with 22 parameters.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema has 100% coverage with detailed parameter descriptions. Description adds context about EIN requirement for company registrations and SOLE_PROPRIETOR requirements, but does not significantly enhance parameter meaning beyond schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states the tool registers a new 10DLC brand with TCR, identifies it as step 1 of the flow, and distinguishes from sibling tools like msg_create_campaign and msg_delete_brand.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 tool is step 1 of the 10DLC flow and advises checking msg_list_entity_types and msg_list_verticals for valid enum values. Does not mention alternatives like when to use msg_update_brand instead.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
msg_create_campaignCreate 10DLC campaignA
Register a new 10DLC campaign under one of your brands. This is STEP 2 of the 10DLC flow: msg_create_brand → create campaign → msg_assign_numbers. Check msg_get_use_case_requirements for the chosen use case first (sample counts, opt-in rules). Carrier review can take days; monitor with msg_get_mno_status. Registration incurs recurring TCR fees. Errors: INVALID_PAYLOAD/TNIQ_VALIDATION (400), TNIQ_ERROR (502).
| Name | Required | Description | Default |
|---|---|---|---|
| sample1 | No | Sample message 1 (representative outbound text) | |
| sample2 | No | Sample message 2 | |
| sample3 | No | Sample message 3 | |
| sample4 | No | Sample message 4 | |
| sample5 | No | Sample message 5 | |
| usecase | No | Campaign use case code, e.g. MARKETING, 2FA, CUSTOMER_CARE (see msg_list_use_cases; check msg_get_use_case_requirements first) | |
| brand_id | No | Parent brand ID (messaging-backend UUID from msg_list_brands). Required when creating a campaign. | |
| age_gated | No | True if content is age-gated (alcohol, gambling, etc.) | |
| description | No | What this campaign sends and to whom (reviewed by carriers) | |
| number_pool | No | True if the campaign uses 50+ sending numbers (number pooling) | |
| auto_renewal | No | Auto-renew the campaign at TCR each billing cycle | |
| help_message | No | Reply sent when a subscriber texts a help keyword | |
| message_flow | No | How subscribers opt in to receive messages (consent flow description; heavily weighted in carrier review) | |
| reference_id | No | Your own free-form reference ID for this campaign | |
| sub_usecases | No | Sub-use-case codes for MIXED/LOW_VOLUME campaigns | |
| embedded_link | No | True if messages may contain URLs/links | |
| help_keywords | No | Comma-separated help keywords, e.g. "HELP,INFO" | |
| optin_message | No | Confirmation message sent after a subscriber opts in | |
| direct_lending | No | True if content relates to direct lending or loan arrangements | |
| embedded_phone | No | True if messages may contain phone numbers | |
| optin_keywords | No | Comma-separated opt-in keywords, e.g. "START,SUBSCRIBE" | |
| optout_message | No | Confirmation message sent after a subscriber opts out | |
| optout_keywords | No | Comma-separated opt-out keywords, e.g. "STOP,UNSUBSCRIBE" | |
| subscriber_help | No | True if subscribers can request help via keyword (HELP handling) | |
| subscriber_optin | No | True if subscribers can opt in via keyword | |
| subscriber_optout | No | True if subscribers can opt out via keyword (STOP handling) | |
| terms_and_conditions | No | Affirm the campaign complies with carrier terms and conditions |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds important behavioral context beyond annotations: carrier review can take days, incurs recurring TCR fees, and lists specific error codes (400, 502). No contradiction with annotations (readOnlyHint, destructiveHint all false).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four sentences, each with distinct value: main purpose, flow position, prerequisites, and behavioral notes. No wasted words, proceeds from high-level to specifics.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (27 parameters, no output schema, multi-step flow), the description covers purpose, prerequisites, post-actions, and errors. Missing explicit note about what the response returns (e.g., campaign ID), but well-rounded otherwise.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% with detailed descriptions for each of the 27 parameters. The tool description adds minimal new parameter information; it mentions sample counts and opt-in rules which are already covered by schema parameters. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states 'Register a new 10DLC campaign under one of your brands', identifies the resource and action. Explicitly positions it as STEP 2 in a three-step flow (msg_create_brand → create campaign → msg_assign_numbers), distinguishing it from sibling 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 sequential context (step 2 of the 10DLC flow) and directs to check use case requirements and monitor carrier review. Implicitly tells when to use (after brand creation, before number assignment) though lacks explicit 'when not to use' or alternative scenarios.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
msg_delete_brandDelete 10DLC brandADestructive
Permanently delete one of your 10DLC brands from TCR and this account. Campaigns under the brand become unusable — only do this when decommissioning a brand. Errors: NOT_FOUND (404), TNIQ_ERROR (502).
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Brand ID (messaging-backend UUID, as returned by msg_list_brands / msg_create_brand) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark destructiveHint=true, and the description adds key behavioral details: permanent deletion, impact on campaigns (unusable), and specific error codes (404, 502). Adds value beyond annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences: first states purpose and impact, second provides usage guidance and error codes. No wasted words, front-loaded with key 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 minimal parameters and no output schema, the description fully covers purpose, impact, usage context, and potential errors. Complete for a delete tool with good annotations.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Only one parameter with 100% schema coverage; schema already describes it as 'Brand ID (messaging-backend UUID...)'. Description does not add extra parameter meaning, so baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states 'Permanently delete one of your 10DLC brands from TCR and this account' with specific verb and resource. Distinguishes from sibling tools like create, update, or list.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly advises 'only do this when decommissioning a brand' and notes that campaigns become unusable. Provides context but no explicit when-not-to-use or alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
msg_elect_cnpElect connectivity partner (CNP)A
Elect a Connectivity Partner / DCA for one of your campaigns (required before carriers will pass traffic; see msg_list_dcas for available partners). The body is a free-form object passed through to the messaging backend. Check election/sharing progress with msg_get_sharing_status. Errors: INVALID_PAYLOAD (400), NOT_FOUND (404), TNIQ_ERROR (502).
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Campaign ID (messaging-backend UUID, as returned by msg_list_campaigns / msg_create_campaign) | |
| body | No | Free-form CNP election payload passed through to the messaging backend, e.g. {"cnp_id": "SYNIVERSE"} |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate a write operation (readOnlyHint=false). The description adds that the body is free-form and lists error codes, but does not discuss side effects, idempotency, or reversibility beyond annotations. No contradiction.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences with error codes, concise and front-loaded with purpose. No unnecessary words, though a bulleted list for errors could improve scanability.
Shorter descriptions cost fewer tokens and are easier for agents to parse. 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 output schema, the description covers core usage, prerequisites (campaign ID), related tools, and error handling. It lacks details on response format but is adequate for an agent to select and invoke.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with detailed descriptions for both parameters. The description reiterates that the body is free-form, adding minimal value beyond the schema. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool elects a Connectivity Partner (CNP) for a campaign, with a specific verb ('Elect') and resource. It distinguishes from siblings by referencing 'msg_list_dcas' for available partners and 'msg_get_sharing_status' for progress checks.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description indicates when to use ('required before carriers will pass traffic'), suggests alternatives ('see msg_list_dcas'), and provides post-operation guidance ('Check election/sharing progress with msg_get_sharing_status'). It does not explicitly state when not to use, but the context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
msg_getGet a messageARead-onlyIdempotent
Get a single SMS/MMS message by its WARP message UUID, including delivery status. Use after msg_send or msg_list to check one message's details. Errors: INVALID_ID (400), NOT_FOUND (404).
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | WARP message UUID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnly and idempotent. Description adds value by mentioning delivery status inclusion and specific error codes (INVALID_ID, NOT_FOUND), which are behavioral traits beyond annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences efficiently convey purpose, usage hint, and error info. No extraneous content; front-loaded with core functionality.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple one-param tool without output schema, description covers usage context, return content (delivery status), and error handling. No gaps identified.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Only one parameter (id) with schema description 'WARP message UUID'. Description does not add additional semantic meaning beyond the schema. Baseline score of 3 applies due to 100% schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states it retrieves a single SMS/MMS message by UUID, including delivery status. This distinguishes it from sibling tools like msg_list (list) and msg_send (send).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly advises using after msg_send or msg_list to check details, providing clear context for invocation. No exclusion of other scenarios, but guidance is sufficient.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
msg_get_brandGet 10DLC brandARead-onlyIdempotent
Get one of your 10DLC brands by its messaging-backend UUID (snake_case TCR brand object, including identity status and trust score). For brands not registered in this account use msg_lookup_brand with the TCR brand ID instead. Errors: NOT_FOUND (404, includes cross-tenant access), TNIQ_ERROR (502).
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Brand ID (messaging-backend UUID, as returned by msg_list_brands / msg_create_brand) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds context beyond annotations: mentions return includes 'identity status and trust score', and explains that NOT_FOUND covers cross-tenant access. No contradiction with readOnlyHint/destructiveHint.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences: first defines purpose and return shape, second covers usage and errors. Zero waste, every sentence adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Complete for a simple read tool with one parameter and rich annotations. Covers purpose, alternative, errors, and return contents. No gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema covers id fully, but description adds that it's a 'messaging-backend UUID' and references how to obtain it (from msg_list_brands/msg_create_brand). Enhances understanding beyond schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states 'Get one of your 10DLC brands by its messaging-backend UUID', specifying the verb, resource, and identifier type. Explicitly distinguishes from sibling msg_lookup_brand for cross-tenant lookups.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 when-to-use (for own brands) and when-not-to (use msg_lookup_brand for brands not in account). Also lists relevant error types with HTTP codes and meanings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
msg_get_campaignGet 10DLC campaignARead-onlyIdempotent
Get one of your 10DLC campaigns by its messaging-backend UUID (snake_case TCR campaign object, including registration status). For campaigns not registered in this account use msg_lookup_campaign with the TCR campaign ID. Errors: NOT_FOUND (404, includes cross-tenant access), TNIQ_ERROR (502).
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Campaign ID (messaging-backend UUID, as returned by msg_list_campaigns / msg_create_campaign) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate read-only, non-destructive, idempotent. Description adds return format (snake_case TCR object with registration status) and error codes (404, 502) with meanings, complementing annotations without contradiction.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with purpose, then alternative and errors. No redundant information, every sentence adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter tool with full schema coverage and annotations, the description covers purpose, usage boundary, return content, and error types. Complete for its complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with the 'id' parameter fully described. Description reiterates it's a messaging-backend UUID and mentions alternative TCR ID, adding marginal value over 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 specifies 'Get one of your 10DLC campaigns by its messaging-backend UUID' with clear verb and resource. It distinguishes from sibling msg_lookup_campaign by noting the alternative for campaigns not in the account.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states when to use (get your own campaign by UUID) and when not to (use msg_lookup_campaign for campaigns not registered in this account), providing clear guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
msg_get_mno_statusGet campaign MNO statusARead-onlyIdempotent
Get per-mobile-carrier (MNO) registration status for one of your campaigns — shows whether AT&T, T-Mobile, Verizon, etc. have approved it. Use after msg_create_campaign or msg_resubmit_campaign to track carrier approval. Errors: NOT_FOUND (404), TNIQ_ERROR (502).
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Campaign ID (messaging-backend UUID, as returned by msg_list_campaigns / msg_create_campaign) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate readOnlyHint=true, idempotentHint=true, destructiveHint=false. Description adds context: shows carrier approval status per carrier, and mentions error conditions. No contradictions. Could add more detail about response structure, but overall good.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences: first states purpose, second provides usage timing and errors. Front-loaded, no unnecessary words. Highly efficient for the information conveyed.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Tool is simple (1 param, no output schema, annotations cover safety). Description covers purpose, usage timing, errors. Does not detail return format, but given simplicity, it is mostly complete. Could mention that it returns per-carrier status details.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Only one parameter 'id' with full schema description (100% coverage). Description reinforces source of id ('as returned by msg_list_campaigns / msg_create_campaign'). Adds value beyond schema by tying usage to specific prior actions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it gets per-carrier (MNO) registration status for a campaign, listing specific carriers (AT&T, T-Mobile, Verizon). It distinguishes from siblings by specifying the action and resource, and the context of use (after msg_create_campaign or msg_resubmit_campaign).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says 'Use after msg_create_campaign or msg_resubmit_campaign to track carrier approval.' Provides error codes (NOT_FOUND, TNIQ_ERROR). Lacks explicit when-not-to-use, but context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
msg_get_sharing_statusGet campaign sharing statusARead-onlyIdempotent
Get the connectivity-partner (CNP) sharing status for one of your campaigns — whether the campaign has been shared with and accepted by the elected CNP/DCA. Use after msg_elect_cnp; if stuck, try msg_nudge_cnp. Errors: NOT_FOUND (404), TNIQ_ERROR (502).
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Campaign ID (messaging-backend UUID, as returned by msg_list_campaigns / msg_create_campaign) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false. The description adds value by mentioning specific error codes and indicating it's a status check, but does not go beyond annotations significantly.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences. First sentence states the purpose, second sentence provides usage context and error handling. 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?
Covers core usage, error codes, and integration with sibling tools. With no output schema, a more detailed description of the return value could improve completeness, but current level is adequate for a read-only single-parameter tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with a clear description of the single parameter. The description does not add new meaning beyond the schema, so baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description explicitly states the tool gets the CNP sharing status for a campaign, which is a specific and clear purpose. It distinguishes itself from siblings by focusing on the sharing status and mentions related workflow steps.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 when to use ('Use after msg_elect_cnp') and alternative action ('if stuck, try msg_nudge_cnp'). Also lists relevant error codes (NOT_FOUND, TNIQ_ERROR), giving the agent robust guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
msg_get_statsGet message statisticsARead-onlyIdempotent
Get aggregate message counts for your account: overall totals (total, inbound, outbound, delivered, failed) plus a per-campaign breakdown. Use for a quick health check of messaging volume and delivery rates. Errors: NO_ACTIVE_CUSTOMER/UNAUTHORIZED (401).
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false. Description adds value by specifying the exact statistics returned (overall totals and per-campaign breakdown) and listing possible errors (NO_ACTIVE_CUSTOMER/UNAUTHORIZED).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, concise and front-loaded with action and result. Every sentence provides useful information without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema, description sufficiently covers what the tool returns and error conditions. For a simple stats tool, it is complete enough, though a note on response format would enhance it.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Tool has zero parameters, so schema_coverage is 100%. Per guidelines, baseline is 4. Description adds no parameter detail (none needed).
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states the tool retrieves aggregate message counts (overall totals and per-campaign breakdown). The verb 'Get' and resource 'message counts' is specific, and it distinguishes from siblings like 'msg_send' (sending) and 'msg_list' (listing individual messages).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly suggests use for 'a quick health check of messaging volume and delivery rates', providing clear context. Does not list alternatives or exclusions, but the purpose is well-defined.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
msg_get_throughput_estimateGet throughput estimateARead-onlyIdempotent
Estimate messaging throughput (messages/sec, daily cap) and get a recommendation for a brand given its trust score and vetting status. Use after msg_get_brand (which includes the trust score) to understand sending capacity and whether external vetting would help. Errors: MISSING_PARAM/INVALID_PARAM (400).
| Name | Required | Description | Default |
|---|---|---|---|
| vetted | No | Whether the brand is externally vetted | |
| trust_score | Yes | Brand trust score, 0-100 (from the TCR brand object) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate read-only and idempotent behavior. Description adds context about the estimation and recommendation outputs, and lists possible errors. No contradictions; description complements annotations 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?
Two sentences plus error line, direct and efficient. No redundant information. Front-loads the main 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?
No output schema, but description explains expected outputs. Also provides workflow context (use after msg_get_brand) and error types. Covers all necessary aspects for tool 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 has 100% coverage, baseline 3. Description adds meaning by noting trust_score source (TCR brand object) and vetted's purpose. This extra context justifies a score of 4.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states it estimates messaging throughput and gives a recommendation based on trust score and vetting status. It specifies outputs (messages/sec, daily cap) and distinguishes itself from siblings by mentioning it is used after msg_get_brand.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly advises to use after msg_get_brand, providing clear context for when to invoke this tool. It does not specify when not to use it, but the guidance is sufficient for an agent to understand the workflow.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
msg_get_use_case_requirementsGet use case requirementsARead-onlyIdempotent
Get the submission requirements for a specific 10DLC campaign use case: required sample-message count, opt-in rules, approval difficulty, and notes. Use before msg_create_campaign to build a compliant submission. Errors: MISSING_PARAM/INVALID_USE_CASE (400).
| Name | Required | Description | Default |
|---|---|---|---|
| use_case | Yes | Use case code from msg_list_use_cases, e.g. MARKETING, 2FA |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly and idempotent. Description adds detail on return content and errors but does not go beyond what annotations imply for safety. Adds moderate value.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences: first defines purpose and output, second gives usage advice and error info. No redundant words, front-loaded with key action.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers purpose, usage, parameters, and errors. No output schema, but description lists return fields. Lacks explicit output format hint, but adequate 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?
Schema coverage is 100% with description for use_case. Description supplements by referencing msg_list_use_cases and providing example values, adding 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?
Clearly states the tool retrieves submission requirements for a 10DLC campaign use case, listing specific fields like sample-message count and opt-in rules. Distinguishes from siblings by explicitly referencing msg_create_campaign.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 advice to use before msg_create_campaign and lists error types. Lacks explicit when-not-to-use or alternatives, but the guidance is clear for the intended workflow.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
msg_link_brandLink existing TCR brandA
Link a brand that already exists at TCR (registered elsewhere) into this account, instead of creating a new one with msg_create_brand. Use msg_lookup_brand first to verify the TCR brand ID. Errors: INVALID_PAYLOAD (400), TNIQ_ERROR (502).
| Name | Required | Description | Default |
|---|---|---|---|
| tcr_brand_id | Yes | TCR brand ID to link into this account, e.g. "BABC123" |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations provide minimal behavioral info. Description adds that the tool links an existing brand (not destructive) but doesn't elaborate on side effects, reversibility, or permissions. Error codes are a plus but not rich 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?
Two sentences with no filler: purpose, alternative, prerequisite, errors. Efficient and front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple tool with one parameter and no output schema, the description covers purpose, usage, and common errors. Could mention return value but not critical. Adequate for invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema covers 100% of the single parameter with description and example. Description adds prerequisite guidance to verify the ID, but doesn't significantly extend semantic understanding beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states the tool links an existing TCR brand into the account, specifies the verb 'link' and resource, and distinguishes from sibling tool msg_create_brand. Prerequisite step is also mentioned.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly provides when to use ('instead of creating a new one'), mentions prerequisite (use msg_lookup_brand first), and lists possible errors (INVALID_PAYLOAD, TNIQ_ERROR), guiding correct invocation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
msg_link_campaignLink existing TCR campaignA
Link a campaign that already exists at TCR (registered elsewhere) into this account, instead of creating a new one with msg_create_campaign. Use msg_lookup_campaign first to verify the TCR campaign ID. Errors: INVALID_PAYLOAD (400), TNIQ_ERROR (502).
| Name | Required | Description | Default |
|---|---|---|---|
| tcr_campaign_id | Yes | TCR campaign ID to link into this account, e.g. "CABC123" |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations are all false, so description must carry behavior. It mentions it's a link operation (write) and lists errors, but lacks details on authorization, side effects, or what linking entails beyond the action. 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 two sentences plus error codes, all front-loaded with purpose, alternative, prerequisite, and errors. No redundant 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 1-parameter tool with no output schema and no nested objects, the description provides sufficient context: what it does, when to use alternative, prerequisite, and potential errors.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 100% coverage with a well-described required parameter tcr_campaign_id. The description does not add extra meaning beyond the schema, so baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states that the tool links an existing TCR campaign into the account, with specific verb 'Link' and resource 'campaign'. It directly distinguishes itself from msg_create_campaign, making the purpose unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly advises to use msg_lookup_campaign first to verify the TCR campaign ID, and contrasts with msg_create_campaign for creation. This provides clear when-to-use and when-not-to-use guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
msg_listList messagesARead-onlyIdempotent
List your SMS/MMS messages (inbound and outbound), most recent first, optionally filtered by direction or delivery status. Use to review message history or check recent delivery outcomes; for a single message use msg_get, for aggregate counts use msg_get_stats. Errors: NO_ACTIVE_CUSTOMER/UNAUTHORIZED (401).
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number, 1-based (default 1) | |
| status | No | Filter by delivery status, e.g. queued, sent, delivered, failed | |
| per_page | No | Page size (default 20, max 100) | |
| direction | No | Filter by message direction |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare read-only, idempotent, non-destructive. Description adds ordering (most recent first) and optional filtering, but doesn't disclose pagination details like total counts.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, no fluff. Front-loaded with purpose, then usage, then errors. Every sentence adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers purpose, usage, filters, errors. Lacks explicit pagination behavior details, but schema parameters imply pagination. No output schema, but description suffices for agent to understand what the tool returns.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, baseline 3. Description adds value by clarifying that filtering is optional and that results are ordered by most recent first, which is not in schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states it lists SMS/MMS messages with ordering and filtering. Distinguishes from siblings msg_get and msg_get_stats by specifying different use cases.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says when to use (review history, check delivery) and when not (use msg_get for single message, msg_get_stats for aggregates). Also lists expected errors.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
msg_list_brandsList 10DLC brandsARead-onlyIdempotent
List your registered 10DLC brands (snake_case TCR brand objects). A brand is step 1 of the 10DLC flow (create brand → create campaign → assign numbers); use this to find an existing brand before creating campaigns.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number, 1-based (default 1) | |
| per_page | No | Page size (default 20, max 100) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare read-only and idempotent behavior. Description adds meaningful context about the return format (snake_case TCR brand objects) and the tool's role in the 10DLC workflow, which complements the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two succinct sentences with no extraneous information. Front-loaded with the primary action and followed by contextual workflow guidance.
Shorter descriptions cost fewer tokens and are easier for agents to parse. 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 listing tool with pagination, the combination of annotations, schema, and description fully covers safety, parameters, purpose, and workflow context. No output schema needed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3. Description does not add parameter-specific information beyond what is already documented in the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states 'List your registered 10DLC brands' with a specific verb and resource. It distinguishes from sibling tools like msg_create_brand by explaining the 10DLC flow and role of brand listing.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly advises 'use this to find an existing brand before creating campaigns,' providing clear context for when to use. Does not explicitly state when not to use, but the context implies alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
msg_list_campaign_numbersList campaign numbersARead-onlyIdempotent
List the telephone numbers attached to one of your 10DLC campaigns. Use to verify which numbers can send under a campaign; for account-wide messaging status of every DID use msg_list_numbers. Errors: NOT_FOUND (404), TNIQ_ERROR (502).
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Campaign ID (messaging-backend UUID, as returned by msg_list_campaigns / msg_create_campaign) | |
| page | No | Page number, 1-based (default 1) | |
| per_page | No | Page size (default 50, max 500) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false. The description adds error codes (NOT_FOUND, TNIQ_ERROR) and clarifies the scope (numbers attached to a campaign). It does not contradict annotations and provides additional useful context beyond the structured fields.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences: first sentence clearly states the purpose, second sentence gives usage guidance and error codes. Every sentence adds value; no fluff. It is front-loaded and efficiently structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, so the description should compensate by explaining the return structure. It mentions listing numbers but does not describe the response format (e.g., paginated list, fields). For a simple read-only tool, it is adequate but could be more complete by indicating what the response contains.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description does not add significant meaning beyond what the schema already provides for each parameter. It reinforces the context (campaign numbers) but doesn't elaborate on parameter formats or constraints.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the specific action: 'List the telephone numbers attached to one of your 10DLC campaigns.' It includes the verb 'list' and the resource 'telephone numbers attached to a campaign'. It also distinguishes from the sibling tool msg_list_numbers by specifying when to use each.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit guidance: 'Use to verify which numbers can send under a campaign; for account-wide messaging status of every DID use msg_list_numbers.' This tells the agent exactly when to use this tool and when to use an alternative. Errors are listed.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
msg_list_campaignsList 10DLC campaignsARead-onlyIdempotent
List your 10DLC campaigns (snake_case TCR campaign objects), optionally filtered by parent brand. A number must be attached to an approved campaign (msg_assign_numbers) before msg_send will accept it as a from number.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number, 1-based (default 1) | |
| brand_id | No | Filter by parent brand ID (messaging-backend UUID) | |
| per_page | No | Page size (default 20, max 100) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint=true and destructiveHint=false. Description adds that it returns snake_case TCR objects and includes the note about number assignment, which is helpful behavioral context beyond annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences: first defines the main action, second adds critical prerequisite knowledge. No redundant or 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?
With 3 parameters fully documented in schema and no output schema, the description covers the listing purpose, filter capability, and a key prerequisite. It could mention pagination behavior but that is implied by parameters.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with descriptions for all 3 parameters. The description adds minimal extra meaning (e.g., 'optionally filtered by parent brand' for brand_id) but the schema already covers parameter details adequately.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it lists 10DLC campaign objects, with optional filter by parent brand. It distinguishes from sibling tools like msg_list_brands (brands) and msg_get_campaign (single campaign) by specifying it's listing campaigns.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 context for when to use (listing campaigns) and mentions a prerequisite for downstream use (msg_assign_numbers before msg_send), but doesn't explicitly exclude alternative tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
msg_list_carriersList mobile carriers (MNOs)ARead-onlyIdempotent
List the mobile network operators (MNOs) relevant to 10DLC registration (AT&T, T-Mobile, Verizon, etc.). Reference data for interpreting msg_get_mno_status results.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint=true, idempotentHint=true, destructiveHint=false, so the description's behavioral disclosure is minimal. It adds domain relevance (10DLC) but does not describe additional behaviors like rate limits or side effects.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences, front-loaded with the action. No wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Low complexity tool (no parameters, no output schema). Description fully explains the tool's purpose (list MNOs for 10DLC) and links to related tool msg_get_mno_status. Complete for its 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?
No parameters; baseline 4 applies. Schema coverage is 100% (trivially). Description adds no param info, which is fine 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?
Description clearly states it lists MNOs relevant to 10DLC registration, with examples (AT&T, T-Mobile, Verizon). It distinguishes from sibling msg_get_mno_status by noting it's reference data for interpreting that tool's results.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
States the tool provides reference data for interpreting msg_get_mno_status results, giving clear context. Does not explicitly exclude other uses or mention when not to use, but the context is sufficient for this simple tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
msg_list_dcasList connectivity partners (DCAs/CNPs)ARead-onlyIdempotent
List the Direct Connect Aggregators / connectivity partners (CNPs) that WARP elects against (only the common ones, not the full upstream list). Use before msg_elect_cnp to pick a partner.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate read-only, idempotent, non-destructive. Description adds the important behavioral detail that only common DCAs are returned, not the full upstream list, which annotations don't cover.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences: first states the action and scope, second gives usage instruction. No redundant or missing 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 no parameters, no output schema, and clear annotations, the description covers the tool's purpose and limitation adequately. Could mention prerequisites, but not required.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% (no parameters), so baseline is 3. Description adds no parameter info, but that's unnecessary. The usage context enhances 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?
Description clearly states the tool lists Direct Connect Aggregators/CNPs used by WARP, specifies it returns only common ones, and distinguishes from sibling msg_elect_cnp by explicitly framing it as a preparatory step.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 instructs to use before msg_elect_cnp to pick a partner, providing clear context. Does not list exclusions or alternative tools, but the sibling context makes it sufficient.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
msg_list_entity_typesList brand entity typesARead-onlyIdempotent
List the valid 10DLC brand entity types (e.g. PRIVATE_PROFIT, NON_PROFIT). Reference data — check before msg_create_brand.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already fully declare the tool as read-only, non-destructive, and idempotent. The description adds that it is reference data but does not provide additional behavioral traits beyond what annotations cover.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is only two sentences, front-loaded with the purpose, and every word earns its place. There is no extraneous 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 no parameters and no output schema, the description is fully complete: it tells what it does, provides examples, and gives usage guidance. No additional context is necessary.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There are no parameters, and the schema coverage is 100% (empty schema). Per the rubric, 0 parameters yields a baseline of 4. The description does not add parameter-specific information, but none is needed.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it lists valid 10DLC brand entity types with specific examples (PRIVATE_PROFIT, NON_PROFIT), and distinguishes itself by noting it's reference data to check before msg_create_brand.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly says to check before msg_create_brand, providing clear context for when to use it. It does not explicitly state when not to use it, but the guidance is sufficient.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
msg_list_numbersList messaging-enabled numbersARead-onlyIdempotent
List every active DID you own joined to its messaging association: attached campaign/brand, messaging status, MMS enablement, and whether a per-TN inbound webhook is configured (has_webhook). Use to check which numbers are ready to send with msg_send or still need msg_assign_numbers. Errors: NO_ACTIVE_CUSTOMER/UNAUTHORIZED (401).
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate read-only and idempotent behavior. The description adds specific data fields and error codes (NO_ACTIVE_CUSTOMER/UNAUTHORIZED), enhancing transparency beyond annotations without contradiction.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences long, tightly packed with essential information (action, resource, fields, use case, errors). No extraneous words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no parameters and no output schema, the description fully explains what the tool returns and when to use it, making it complete for an agent to invoke correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With zero parameters and 100% schema coverage, the description correctly omits any parameter details. It focuses on the returned data, which is appropriate for a parameterless tool.
Input schemas describe structure but not intent. Descriptions should explain 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 every active DID you own' with specific fields (campaign/brand, messaging status, etc.), making the action and resource unambiguous. It distinguishes from siblings like msg_assign_numbers and msg_send by clarifying 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 explicitly tells when to use: 'Use to check which numbers are ready to send with msg_send or still need msg_assign_numbers.' It also lists possible errors, providing context for decision-making.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
msg_list_use_casesList campaign use casesARead-onlyIdempotent
List the valid 10DLC campaign use cases (e.g. MARKETING, 2FA). Reference data — check before msg_create_campaign, then fetch details with msg_get_use_case_requirements.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false; description is consistent and adds context that it is reference data. Does not provide additional behavioral details but no contradiction.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences front-load purpose and usage. 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 no parameters, good annotations, and a simple listing function, the description fully covers purpose, usage sequence, and example outputs. No gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
No parameters in schema (100% coverage), description does not need to explain parameters. Provides example output values which adds value beyond schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states the tool lists valid 10DLC campaign use cases with examples (MARKETING, 2FA). Distinguishes from siblings like msg_list_campaigns and msg_get_use_case_requirements by specifying the reference role.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly tells when to use (before msg_create_campaign) and what to do next (fetch details with msg_get_use_case_requirements). Provides clear sequential guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
msg_list_verticalsList industry verticalsARead-onlyIdempotent
List the valid 10DLC brand industry verticals. Reference data — check before msg_create_brand or msg_update_brand.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false, so the tool's safe read-only behavior is well-covered. The description adds 'Reference data' which reinforces this but doesn't disclose additional behavioral traits beyond what annotations provide.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two short sentences with no unnecessary words. The purpose is front-loaded, and every word earns its place. It is optimally concise.
Shorter descriptions cost fewer tokens and are easier for agents to parse. 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 (no parameters, no output schema, clear annotations), the description is complete. It states what the tool does and when to use it, leaving no gaps for the agent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters and schema description coverage is 100%. The description does not need to add parameter details. Baseline for 0 params is 4, and the description fulfills that without extra explanation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it lists valid 10DLC brand industry verticals. The verb 'list' and resource 'verticals' are specific, and it distinguishes from sibling tools like msg_create_brand and msg_update_brand by framing itself as reference data.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly says 'Reference data — check before msg_create_brand or msg_update_brand.' This provides clear when-to-use guidance and references specific sibling tools, making the usage context unmistakable.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
msg_lookup_brandLook up TCR brandARead-onlyIdempotent
Read brand details directly from TCR by TCR brand ID, without requiring the brand to be registered in this account. Use before msg_link_brand to verify a brand exists. Errors: NOT_FOUND (404), TNIQ_ERROR (502).
| Name | Required | Description | Default |
|---|---|---|---|
| tcr_brand_id | Yes | TCR brand ID, e.g. "BABC123" |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so the description does not need to restate safety. It adds valuable behavioral detail: the tool queries TCR directly and works even if the brand is not registered in the account. Error codes are also provided, adding transparency beyond annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise, consisting of two sentences with no redundant words. It front-loads the main action and purpose, followed by usage guidance and errors. 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?
Given the tool's low complexity (single parameter, no output schema), the description covers all necessary aspects: what it does, when to use it (before linking), and error handling. Annotations fill the safety profile, so no further detail is needed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with a single parameter 'tcr_brand_id' already described. The description mentions 'by TCR brand ID' but does not add additional constraints or examples beyond the schema, so it achieves baseline adequacy without extra value.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool reads brand details from TCR by brand ID, and explicitly differentiates from sibling tools by noting it does not require the brand to be registered. The mention of 'msg_link_brand' as a subsequent use case further clarifies its 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 provides explicit context: use before msg_link_brand to verify a brand exists. It also lists expected errors (NOT_FOUND, TNIQ_ERROR). While it does not include explicit 'when not to use', the guidance is clear and sufficient for an agent to determine appropriate usage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
msg_lookup_campaignLook up TCR campaignARead-onlyIdempotent
Read campaign details directly from TCR by TCR campaign ID, without requiring the campaign to be registered in this account. Use before msg_link_campaign to verify a campaign exists. Errors: NOT_FOUND (404), TNIQ_ERROR (502).
| Name | Required | Description | Default |
|---|---|---|---|
| tcr_campaign_id | Yes | TCR campaign ID, e.g. "CABC123" |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false. Description adds context that it reads from TCR directly and does not require account registration, plus error conditions. No contradictions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences: first clearly states purpose, second provides usage context and error list. No filler, every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (1 parameter, read-only, idempotent) and rich annotations (readOnly, idempotent, non-destructive), the description covers purpose, use case, and errors completely. No output schema needed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% for the single parameter tcr_campaign_id, which includes an example. The tool description adds minimal extra meaning beyond the schema, only implying the ID is from TCR. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states 'Read campaign details directly from TCR by TCR campaign ID', specifying the action (read) and resource (campaign by ID). Distinguishes from siblings like msg_get_campaign (reads from account) and msg_link_campaign (links campaign), with explicit note that it works without requiring campaign registration in the account.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly advises 'Use before msg_link_campaign to verify a campaign exists', providing a specific use case and alternative. Also lists possible errors (NOT_FOUND, TNIQ_ERROR) to guide handling.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
msg_nudge_cnpNudge connectivity partnerA
Prompt the elected Connectivity Partner to re-review a campaign that is stuck in review. Use when msg_get_sharing_status shows a pending CNP review for too long. Returns 202 Accepted with no body. Errors: NOT_FOUND (404), TNIQ_ERROR (502).
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Campaign ID (messaging-backend UUID, as returned by msg_list_campaigns / msg_create_campaign) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations provide no hints (readOnly=false, destructive=false), but description adds non-idempotent nature (prompt), response format (202 Accepted, no body), and error codes (404, 502). No contradictions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences: purpose and usage condition, followed by return/error info. No wasted words, front-loaded with key action.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter mutation with no output schema, description covers what, when, response, and errors. No gaps given tool 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 coverage is 100% with detailed parameter description. Description does not add new semantic value beyond the schema's 'Campaign ID' and context of origin. Baseline score applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states the verb 'Prompt' and the resource 'elected Connectivity Partner' to re-review a campaign. It distinguishes from siblings by referencing msg_get_sharing_status for pending review.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says 'Use when msg_get_sharing_status shows a pending CNP review for too long,' providing a clear condition. No explicit alternatives mentioned but condition is sufficient.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
msg_remove_numbersDetach numbers from campaignADestructive
Detach telephone numbers from one of your 10DLC campaigns — those numbers can no longer send SMS until re-attached to an approved campaign. Returns per-TN removed/failed lists (failure reasons: not_found, not_owned, lookup_error, write_error); the response is NOT wrapped in the standard envelope. Errors: INVALID_PAYLOAD (400), NOT_FOUND (404, campaign not owned), TNIQ_ERROR (502).
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Campaign ID (messaging-backend UUID, as returned by msg_list_campaigns / msg_create_campaign) | |
| phone_numbers | Yes | Telephone numbers to detach, NANP format, e.g. ["13039813633"] |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate destructiveHint=true. The description adds valuable behavioral details: the effect on SMS capability, response format (per-TN lists with specific failure reasons), non-standard envelope, and error codes (INVALID_PAYLOAD, NOT_FOUND, TNIQ_ERROR). No contradiction.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with action and resource, each sentence adds critical information. No redundancy or 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?
For a 2-parameter tool with no output schema but good annotations, the description covers purpose, effect, response structure, and errors. An agent can correctly invoke and interpret the tool response.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so baseline is 3. The description does not add any parameter-specific meaning beyond what is already in the schema descriptions (id and phone_numbers are well-described in 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 specific verb 'Detach' and clearly states the resource 'telephone numbers from one of your 10DLC campaigns'. It distinguishes from sibling tools like msg_assign_numbers (assign) and msg_list_numbers (list) by focusing on removal.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Description implies usage context (when removing numbers from a campaign) and notes the consequence (numbers can't send SMS until re-attached). It doesn't explicitly state when not to use or list alternatives, but the context is sufficient for differentiation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
msg_resubmit_campaignResubmit 10DLC campaignAIdempotent
Resubmit a 10DLC campaign for carrier review, typically after fixing rejection reasons with msg_update_campaign. Check current per-carrier status with msg_get_mno_status first. Errors: NOT_FOUND (404), TNIQ_ERROR (502).
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Campaign ID (messaging-backend UUID, as returned by msg_list_campaigns / msg_create_campaign) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate idempotent (true) and not read-only. Description adds error codes (404, 502) but doesn't detail side effects or required permissions. Since annotations cover key behaviors, the description adds moderate value.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, no redundancy. Purpose is front-loaded. Could be slightly more concise, but effectively communicates key points without waste.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With one parameter and no output schema, the description is adequate but lacks detail on the result of resubmission (e.g., campaign state change, expected response). Additional context would improve completeness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The single parameter 'id' is described with context: 'as returned by msg_list_campaigns / msg_create_campaign'. This adds meaning beyond the schema's type and requirement, guiding the agent on where to obtain the ID.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states the action ('Resubmit'), the resource ('10DLC campaign'), and the context ('after fixing rejection reasons with msg_update_campaign'). Distinguishes from sibling tools like msg_update_campaign (modify) and msg_get_mno_status (check status).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly advises checking status with msg_get_mno_status first, and mentions fixing rejection reasons with msg_update_campaign. This guides when to use the tool, though it doesn't list alternatives or contraindications.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
msg_sendSend an SMS messageA
SENDS A REAL SMS TEXT MESSAGE to a real phone number — the recipient's device will receive it immediately; there is no test/sandbox mode, so confirm the destination and body before calling. The from number must be assigned to your account AND enrolled in an approved 10DLC campaign (register via msg_create_brand → msg_create_campaign → msg_assign_numbers), otherwise the request is rejected. Errors: INVALID_PAYLOAD/MISSING_PARAM/INVALID_TO (400), NO_ACTIVE_CUSTOMER/UNAUTHORIZED (401), FROM_* rejections for unenrolled numbers.
| Name | Required | Description | Default |
|---|---|---|---|
| to | Yes | Destination telephone number in E.164 / NANP format, e.g. "13125551212". A real device receives the message. | |
| body | Yes | Message text, e.g. "Your verification code is 123456". Encoding (GSM-7 vs UCS-2) and segment count are computed automatically. | |
| from | Yes | Sending telephone number in NANP format, e.g. "13039813633". Must be assigned to your account and enrolled in an approved 10DLC campaign (see msg_list_numbers). | |
| idempotency_key | No | Client-supplied Idempotency-Key: retrying with the same key returns the original message instead of sending a duplicate. Strongly recommended. | |
| status_callback | No | Optional webhook URL that receives message-status callbacks (queued → sent → delivered/failed), e.g. "https://example.com/webhooks/sms" |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses key behaviors beyond annotations: immediate real message delivery, no sandbox mode, enrollment requirement for 'from' number, idempotency behavior, and status callback capability. Annotations are all false, so the description carries the full burden, which it meets 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 concise at three sentences, each earning its place: first sentence states purpose and warning, second sentence covers prerequisites, third sentence lists error codes. The most critical information is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the lack of output schema and presence of 5 parameters (3 required), the description covers the real-world impact, prerequisites, error handling, idempotency, and optional callback. No significant gaps remain for safe and correct tool 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 100%, so baseline is 3. The description adds marginal value by repeating some schema details (e.g., from number enrollment) but does not add new meaning or examples beyond what is already in the input schema properties.
Input schemas describe structure but not intent. Descriptions should explain 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 a clear verb 'SENDS' and identifies the resource as 'a real SMS text message', immediately distinguishing this tool from sibling tools that manage brands, campaigns, or numbers. The specificity about immediate delivery and lack of test mode reinforces its unique 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 provides strong usage context: it warns about the real-world impact, lists prerequisites (from number enrolled in 10DLC campaign), and cites error codes. Although it does not explicitly name alternatives or state when not to use, the guidance is sufficient for safe invocation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
msg_update_brandUpdate 10DLC brandAIdempotent
Full replace (PUT) of one of your 10DLC brands — supply the complete brand object, not just changed fields. Use to correct brand identity details, which may trigger TCR re-verification. Errors: INVALID_PAYLOAD (400), NOT_FOUND (404), TNIQ_ERROR (502).
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Brand ID (messaging-backend UUID, as returned by msg_list_brands / msg_create_brand) | |
| ein | No | Tax ID / EIN, e.g. "12-3456789" (US). Required for company registrations; improves trust score. | |
| city | No | City, e.g. "Denver" | |
| No | Brand contact email address | ||
| phone | No | Support/contact phone in E.164 format, e.g. "+13035551212" | |
| state | No | State/region code, e.g. "CO" | |
| street | No | Street address, e.g. "123 Main St" | |
| country | No | Country as 2-letter ISO code, e.g. "US" | |
| website | No | Brand website URL, e.g. "https://acme.example.com" | |
| vertical | No | Industry vertical code (see msg_list_verticals for the valid list), e.g. RETAIL | |
| last_name | No | Contact last name (required for SOLE_PROPRIETOR) | |
| first_name | No | Contact first name (required for SOLE_PROPRIETOR) | |
| entity_type | No | Brand entity type (see msg_list_entity_types for the valid list), e.g. PRIVATE_PROFIT | |
| postal_code | No | Postal/ZIP code, e.g. "80202" | |
| company_name | No | Legal company name as registered, e.g. "Acme Coffee LLC". Required for non-SOLE_PROPRIETOR entity types. | |
| display_name | No | Brand display/marketing name, e.g. "Acme Coffee" | |
| mobile_phone | No | Mobile phone in E.164 format (used for SOLE_PROPRIETOR OTP verification) | |
| reference_id | No | Your own free-form reference ID for this brand | |
| stock_symbol | No | Stock ticker symbol (PUBLIC_PROFIT brands only) | |
| stock_exchange | No | Stock exchange, e.g. NASDAQ, NYSE (PUBLIC_PROFIT brands only) | |
| alt_business_id | No | Alternate business identifier, e.g. DUNS number | |
| ein_issuing_country | No | EIN issuing country as 2-letter ISO code, e.g. "US" | |
| alt_business_id_type | No | Type of the alternate business ID, e.g. DUNS, LEI, GIIN |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate idempotentHint=true and destructiveHint=false. The description goes beyond by clarifying it's a full replace (PUT), which explains idempotency, and warns about potential TCR re-verification. This adds behavioral context not present in annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, no wasted words. It front-loads the crucial 'full replace (PUT)' concept, then adds side effect and error codes. Every sentence adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 23 parameters and no output schema, the description adequately explains the operation type, side effect, and common errors. It could mention return values or success indicators, but the schema richness and annotations compensate. Sufficient for agent 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 100%, so the schema already documents all parameters. The description does not add further semantics for individual parameters, but it reinforces the overall requirement to supply the complete object. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it's a full replace (PUT) operation for a 10DLC brand, distinguishes it from partial updates by requiring the complete object, and specifies the use case of correcting brand identity details. It also mentions potential re-verification, adding context.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description says 'Use to correct brand identity details', which implies the intended use case. However, it does not explicitly state when not to use (e.g., for partial updates) or mention alternatives like msg_create_brand or msg_update_campaign. The usage guidance is implied but lacks explicit exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
msg_update_campaignUpdate 10DLC campaignAIdempotent
Update (PUT) one of your 10DLC campaigns — e.g. fix sample messages or opt-in flow after a carrier rejection, then resubmit with msg_resubmit_campaign. Errors: INVALID_PAYLOAD (400), NOT_FOUND (404), TNIQ_ERROR (502).
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Campaign ID (messaging-backend UUID, as returned by msg_list_campaigns / msg_create_campaign) | |
| sample1 | No | Sample message 1 (representative outbound text) | |
| sample2 | No | Sample message 2 | |
| sample3 | No | Sample message 3 | |
| sample4 | No | Sample message 4 | |
| sample5 | No | Sample message 5 | |
| usecase | No | Campaign use case code, e.g. MARKETING, 2FA, CUSTOMER_CARE (see msg_list_use_cases; check msg_get_use_case_requirements first) | |
| brand_id | No | Parent brand ID (messaging-backend UUID from msg_list_brands). Required when creating a campaign. | |
| age_gated | No | True if content is age-gated (alcohol, gambling, etc.) | |
| description | No | What this campaign sends and to whom (reviewed by carriers) | |
| number_pool | No | True if the campaign uses 50+ sending numbers (number pooling) | |
| auto_renewal | No | Auto-renew the campaign at TCR each billing cycle | |
| help_message | No | Reply sent when a subscriber texts a help keyword | |
| message_flow | No | How subscribers opt in to receive messages (consent flow description; heavily weighted in carrier review) | |
| reference_id | No | Your own free-form reference ID for this campaign | |
| sub_usecases | No | Sub-use-case codes for MIXED/LOW_VOLUME campaigns | |
| embedded_link | No | True if messages may contain URLs/links | |
| help_keywords | No | Comma-separated help keywords, e.g. "HELP,INFO" | |
| optin_message | No | Confirmation message sent after a subscriber opts in | |
| direct_lending | No | True if content relates to direct lending or loan arrangements | |
| embedded_phone | No | True if messages may contain phone numbers | |
| optin_keywords | No | Comma-separated opt-in keywords, e.g. "START,SUBSCRIBE" | |
| optout_message | No | Confirmation message sent after a subscriber opts out | |
| optout_keywords | No | Comma-separated opt-out keywords, e.g. "STOP,UNSUBSCRIBE" | |
| subscriber_help | No | True if subscribers can request help via keyword (HELP handling) | |
| subscriber_optin | No | True if subscribers can opt in via keyword | |
| subscriber_optout | No | True if subscribers can opt out via keyword (STOP handling) | |
| terms_and_conditions | No | Affirm the campaign complies with carrier terms and conditions |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide idempotentHint=true, readOnlyHint=false, destructiveHint=false. The description confirms it's an update (PUT) operation and mentions error codes, adding some behavioral context. No contradictions. However, it does not disclose additional traits like whether partial updates are supported or that only specified fields are updated. Acceptable given annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise (two sentences), front-loaded with the action and resource. It includes a practical example and error codes in a compact format. Could be slightly more structured (e.g., bullet points for errors) but overall efficient with no wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With 28 optional parameters and no output schema, the description provides a high-level example but does not explain common update patterns, which fields are typically modified, or the response behavior. The schema covers parameter details, but a quick-start guide would help. The error code list adds some completeness for error handling.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3. The description briefly mentions 'sample messages or opt-in flow' as examples, but does not add significant semantic meaning beyond what the schema already provides (e.g., field descriptions). No parameter-specific guidance like 'sample1-sample5 are mutually exclusive' or validation rules.
Input schemas describe structure but not intent. Descriptions should explain 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 (PUT) one of your 10DLC campaigns', providing a specific verb and resource. It gives a concrete example of use (fixing sample messages after carrier rejection). While it implicitly distinguishes from siblings like msg_create_campaign by mentioning resubmission, it could explicitly differentiate from msg_update_brand. Overall clear 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 provides a specific use case: fixing sample messages or opt-in flow after a carrier rejection, then resubmitting with msg_resubmit_campaign. This guides the agent on when to use this tool. It also lists error codes (INVALID_PAYLOAD, NOT_FOUND, TNIQ_ERROR) for troubleshooting. However, it does not explicitly state when not to use it or mention alternative tools beyond resubmit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
net_get_ingress_ipsGet WARP SIP ingress serversARead-onlyIdempotent
Get the customer-facing WARP SIP edge servers (UDP/TCP/TLS hosts, IPs, ports) to point a trunk or PBX at. Use when configuring SIP endpoints or firewall rules toward WARP.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, non-destructive behavior. Description adds value by detailing the return content (UDP/TCP/TLS hosts, IPs, ports), which is not in annotations. No contradictions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences. First sentence states purpose and resource, second sentence provides usage guidance. No filler words. Front-loaded with key information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter tool with no output schema, the description completely covers what the tool returns (ingress server details) and when to use it. No gaps given the 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?
Input schema has 0 parameters with 100% schema description coverage. Baseline is 4 since no parameters to document. Description does not need to add parameter 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?
Description clearly states verb 'Get' and specific resource 'customer-facing WARP SIP edge servers' with technical details (UDP/TCP/TLS hosts, IPs, ports). Distinguished from sibling tools like net_get_vendor_ips and trunk_list_ips by specifying WARP SIP ingress.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Description provides explicit usage context: 'Use when configuring SIP endpoints or firewall rules toward WARP.' Though it does not list alternatives or when not to use, the context is clear and actionable.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
net_get_vendor_ipsGet WARP origination IPsARead-onlyIdempotent
Get the WARP egress/origination IPs you must allowlist in your firewall for symmetric SIP signaling. Use when inbound calls from WARP are being blocked or when setting up a new network edge.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnly and idempotent. Description adds context about allowlisting and signaling but does not contradict annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences, front-loaded with key action, 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?
Complete enough given no parameters and good annotations. Could mention return value format but not necessary.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
No parameters; baseline is 4. Description adds no parameter info, but none needed.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states it gets WARP egress/origination IPs for allowlisting, with specific verb and resource. It distinguishes from siblings like net_get_ingress_ips and warp_status.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states when to use: when inbound calls from WARP are blocked or setting up a new network edge. Provides context about symmetric SIP signaling.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
num_bulk_orderBulk order (assign) numbersA
Procure and assign up to 200 telephone numbers in one idempotent batch. THIS COSTS MONEY — each number incurs purchase and recurring charges, so confirm the list with the user first. Requires a UUID idempotency key (reused as procurement_request_id); reuse the same key to safely retry. Per-TN failures do not abort the batch. Find candidates with num_search; for a single number use num_order; to route many held numbers to a trunk use num_bulk_route. Errors: INVALID_REQUEST, MISSING_IDEMPOTENCY_KEY, INVALID_IDEMPOTENCY_KEY, TRUNK_UNOWNED (whole-request 403 on default_trunk_id).
| Name | Required | Description | Default |
|---|---|---|---|
| tns | Yes | Telephone numbers to procure and assign (max 200) | |
| note | No | Free-text note recorded on the procurement request | |
| tn_metadata | No | Metadata applied to every TN in the batch (e.g. friendly_name, description fields) | |
| idempotency_key | Yes | UUID idempotency key for the batch (sent as the Idempotency-Key header; reuse it to retry the same batch safely) | |
| default_trunk_id | No | Trunk-group UUID to route all assigned numbers to (403 TRUNK_UNOWNED if not yours) | |
| per_tn_overrides | No | Map of TN -> per-number override object, overriding tn_metadata/default_trunk_id for that TN |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only provide hints; description adds critical behavioral details: idempotency via key reuse, cost implication, partial failure handling ('Per-TN failures do not abort the batch'), and specific error codes. Missing only explicit statement about non-destructive nature (implied by procurement/assignment).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single paragraph with clear front-loading of purpose, followed by warnings, usage guidance, and error summary. Every sentence adds value; no fluff. Length is appropriate for complexity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Comprehensive coverage of behavior, errors, and usage context given no output schema. Lacks return value details, but the tool's output is likely implicit (success/failure). Could elaborate on success response structure, but current info suffices for agent decision-making.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema covers all 6 parameters with descriptions, but description adds context like idempotency key UUID reuse, max 200 numbers, and mapping of error codes to parameters (e.g., TRUNK_UNOWNED on default_trunk_id). Enhances schema without redundancy.
Input schemas describe structure but not intent. Descriptions should explain 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 ('Procure and assign up to 200 telephone numbers') and distinguishes it from siblings like num_order (single number) and num_bulk_route (routing held numbers). The verb 'procure and assign' is specific and resource-targeted.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly advises confirming with user due to cost, specifies when to use alternatives (num_search for finding, num_order for single, num_bulk_route for routing), and includes prerequisites like idempotency key. Covers both 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.
num_bulk_routeBulk route numbers to a trunkAIdempotent
Assign up to 200 HELD numbers you already own to a single voice trunk-group in one request (idempotent at the SQL level). Use after num_bulk_order to bring purchased numbers into service, or to re-home existing numbers. For per-number routing details use num_update_voice. Errors: INVALID_REQUEST, TRUNK_UNOWNED (whole-request 403).
| Name | Required | Description | Default |
|---|---|---|---|
| tns | Yes | Held telephone numbers to route (max 200) | |
| trunk_id | Yes | Voice trunk-group UUID to route all listed numbers to |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations show idempotentHint=true, destructiveHint=false. Description adds idempotent at SQL level and lists error codes, consistent with annotations. No mention of rollback or side effects, but idempotency implies safety.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences front-load the core action and usage context, with no extraneous 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?
Given no output schema and straightforward batch operation, description covers purpose, usage, and error conditions adequately. Could mention batch limit, but maxItems in schema covers that.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema covers 100% of parameters with descriptions. The description does not add meaning beyond schema; baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it assigns up to 200 HELD numbers to a single voice trunk-group in one request, with idempotency noted. It distinguishes from siblings num_bulk_order and num_update_voice.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states when to use: after num_bulk_order to bring purchased numbers into service, or to re-home existing numbers. Advises using num_update_voice for per-number routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
num_delete_sms_configClear SMS configurationADestructive
Remove the SMS usage row from a number you own, disabling SMS on it. To change SMS settings instead of removing them, use num_update_sms. Errors: TN_NOT_OWNED.
| Name | Required | Description | Default |
|---|---|---|---|
| tn | Yes | Telephone number, 10 digits (e.g. "3035551234") or 11 digits with leading 1 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Descriptions adds value beyond annotations: specifies the effect (disabling SMS) and possible error (TN_NOT_OWNED). Annotations already indicate destructiveness; description complements with concrete behavioral details.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with action, then alternative and error. 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 one parameter, no output schema, and annotations, the description covers purpose, alternative, and error. Could be slightly more explicit about the irreversible nature (though destructiveHint covers it), but still 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 covers 100% of parameters with description. Description does not add additional semantics beyond restating 'number you own', which is already implied by the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool removes the SMS usage row from a number, disabling SMS. It distinguishes from sibling 'num_update_sms' by contrasting removal with modification.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states when to use (to disable SMS by removing config) and when not (to change settings, use num_update_sms). Provides a direct alternative.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
num_delete_voice_configClear voice configurationADestructive
Remove the voice usage row from a number you own, DISABLING voice routing on it (inbound calls will stop routing). To change routing instead of removing it, use num_update_voice. Errors: TN_NOT_OWNED.
| Name | Required | Description | Default |
|---|---|---|---|
| tn | Yes | Telephone number, 10 digits (e.g. "3035551234") or 11 digits with leading 1 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate destructiveHint: true. Description adds extra context: disables voice routing and inbound calls stop. Also mentions error case. No contradiction.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences: first states action and consequence, second gives alternative and error. No filler, every sentence adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Simple tool with one param and no output schema. Description covers purpose, side effects, prerequisites, and alternative. Could mention response format but it's a deletion so minimal feedback expected.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with description for tn parameter. Description does not add additional meaning beyond the schema's definition of tn format. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states it removes voice usage row and disables voice routing. Uses specific verb 'remove' and resource 'voice usage row'. Differentiates from sibling num_update_voice which changes routing instead of removing.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says when to use (remove voice routing) and when not (use num_update_voice to change routing). Also mentions error condition TN_NOT_OWNED as prerequisite.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
num_getGet a numberARead-onlyIdempotent
Get one telephone number you own, including its voice and SMS usage configuration. Use after num_list to inspect a specific TN before updating it with num_update_voice, num_update_sms, or num_update_metadata.
| Name | Required | Description | Default |
|---|---|---|---|
| tn | Yes | Telephone number, 10 digits (e.g. "3035551234") or 11 digits with leading 1 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint true, idempotentHint true, destructiveHint false. The description adds that the tool returns voice and SMS usage configuration, which provides specific behavioral detail beyond annotations. No contradictions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences: first states purpose, second gives usage context. No unnecessary words, front-loaded with key information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (one parameter, no output schema), the description fully covers when to use it and what it returns. No gaps identified.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 100% description coverage for the single parameter 'tn', clearly specifying format. The description does not add additional parameter meaning beyond the schema, so baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool gets one telephone number with its voice and SMS usage configuration, using a specific verb (get) and resource (number). It distinguishes itself from sibling tools like num_list (listing) and num_update_* (updating).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states when to use this tool ('Use after num_list to inspect a specific TN before updating it with num_update_voice, num_update_sms, or num_update_metadata'), providing clear context and alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
num_get_port_out_pinGet port-out PIN statusARead-onlyIdempotent
Check whether a port-out PIN is set on a number you own, and if verification attempts locked it out, when the lock expires (locked_until). The PIN itself is never returned. Set a PIN with num_set_port_out_pin; clear it with num_remove_port_out_pin. Errors: TN_NOT_OWNED.
| Name | Required | Description | Default |
|---|---|---|---|
| tn | Yes | Telephone number, 10 digits (e.g. "3035551234") or 11 digits with leading 1 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate idempotent, read-only, and non-destructive behavior. The description adds value by stating the PIN is never returned and mentioning the specific error TN_NOT_OWNED, which helps agents handle failures. This goes beyond what annotations alone 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?
Extremely concise: two sentences for the core description plus one for errors. Every sentence provides essential information without redundancy. The purpose is stated immediately, and additional context is efficiently given.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only check tool with one parameter and no output schema, the description is complete. It explains what is checked (PIN set, lock status, lock expiration) and what is not returned (PIN). No output schema is needed given the 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 only parameter 'tn' has 100% schema coverage, including format examples. The description does not add additional semantics beyond the schema, so it receives the baseline score of 3 for well-documented 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 it checks whether a port-out PIN is set and if locked out, with the locked_until timestamp. It specifically notes the PIN itself is never returned, distinguishing it from get-like tools that might return secrets. References to sibling tools num_set_port_out_pin and num_remove_port_out_pin clarify the broader context.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly tells when to use this tool (to check PIN status or lockout). Provides clear alternatives for setting and removing the PIN. Does not explicitly state when not to use, but the context is clear considering sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
num_listList your numbersARead-onlyIdempotent
List the telephone numbers you own, with each number's voice/SMS configuration state. Use to browse or audit your DID/TFN inventory; filter by status, type, search text, or configuration flags. To find NEW purchasable numbers use num_search instead; to inspect one owned number use num_get.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number, 1-based (default 1) | |
| size | No | Results per page (default 50) | |
| type | No | Filter by number type: did (local) or tfn (toll-free) | |
| search | No | Free-text search on TN digits or metadata | |
| status | No | Filter by number status | |
| sms_configured | No | Filter to numbers with (true) or without (false) SMS configuration | |
| voice_configured | No | Filter to numbers with (true) or without (false) voice configuration |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly=true, idempotent=true, destructive=false. Description adds that it returns configuration states and filtering options, adding behavioral context without contradiction.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences: first states purpose and output, second provides usage guidance and alternatives. 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?
Despite no output schema, the description sufficiently explains that it returns numbers with configuration state. For a 7-param optional filter tool, the guidance is complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with well-described parameters. Description summarizes filters (status, type, search, configuration flags) but does not add meaning beyond what schema provides. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states it lists telephone numbers with their voice/SMS configuration state, uses a specific verb ('List'), and distinguishes from siblings by naming num_search and num_get.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says when to use (browse/audit inventory) and when not, with alternatives: 'To find NEW purchasable numbers use num_search instead; to inspect one owned number use num_get.'
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
num_orderOrder (assign) a numberA
Procure a telephone number from upstream inventory and assign it to your account. THIS COSTS MONEY — ordering a number incurs purchase and recurring charges, so confirm the TN with the user first. Find candidates with num_search; after ordering, configure it with num_update_voice / num_update_sms. For up to 200 numbers at once use num_bulk_order. Errors: TN_ALREADY_ASSIGNED, TN_UNAVAILABLE, TNIQ_UPSTREAM_ERROR.
| Name | Required | Description | Default |
|---|---|---|---|
| tn | Yes | Telephone number, 10 digits (e.g. "3035551234") or 11 digits with leading 1 | |
| description | No | Free-text description to set on the new number | |
| friendly_name | No | Human-friendly label to set on the new number |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only indicate non-readOnly and non-destructive. The description adds critical behavioral context: ordering costs money (purchase and recurring charges), requiring user confirmation. It also discloses possible error types (TN_ALREADY_ASSIGNED, etc.), significantly beyond annotation info.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four sentences, front-loaded with action, then cost warning, workflow, and errors. No redundant or irrelevant information. Very concise and well-structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Although no output schema exists, the description provides good context: mentions workflow, errors, and cost implications. However, it does not explain what the tool returns on success (e.g., the ordered number object). Minor gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with descriptions for all 3 parameters. The description adds minor value: specifies tn format as '10 digits or 11 digits with leading 1'. No additional semantics beyond schema, so baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Procure a telephone number from upstream inventory and assign it to your account.' It uses a specific verb ('order' / 'assign') and resource ('telephone number'), and distinguishes from siblings like num_search (find candidates) and num_bulk_order (bulk ordering).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly instructs to confirm the number with the user first due to cost, references num_search for finding candidates, num_update_voice/sms for post-order configuration, and num_bulk_order for bulk ordering. It also lists common errors, providing clear when-to-use and alternative guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
num_releaseRelease a numberADestructive
Release a telephone number you own back to inventory. IRREVERSIBLE from your account's perspective — the number leaves your inventory and may be picked up by others, so confirm with the user first. Errors: TN_NOT_OWNED, POI_LOCKED (number is a POI fallback ANI), TNIQ_UPSTREAM_ERROR.
| Name | Required | Description | Default |
|---|---|---|---|
| tn | Yes | Telephone number, 10 digits (e.g. "3035551234") or 11 digits with leading 1 | |
| reason | No | Free-text reason for releasing the number (for audit) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, but the description adds valuable context: the number leaves inventory and may be picked up by others, and lists specific error conditions (TN_NOT_OWNED, POI_LOCKED, TNIQ_UPSTREAM_ERROR). This goes beyond the annotation's bare flag.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three sentences: first states purpose, second warns and gives usage guidance, third lists errors. It is concise, front-loaded, and every sentence adds value. 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 simple action (release a number) and no output schema, the description covers the key aspects: purpose, irreversibility, and errors. It omits details like return value or success indication, but for this tool, those are less critical.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description does not add new information about parameters beyond what the schema already provides (tn and reason). It mentions errors but not parameter specifics.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Release' and the resource 'a telephone number you own back to inventory'. It distinguishes this action from sibling tools like num_get, num_list, or num_update_*, all of which are non-destructive or have different purposes.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly warns that the action is irreversible and advises confirming with the user. It also lists specific errors, providing context for when the tool may fail. However, it does not compare with alternative tools or specify when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
num_remove_port_out_pinClear port-out PINBDestructive
Clear the port-out PIN on a number you own (idempotent), removing PIN protection against port-outs. Requires step-up MFA. Returns 204 No Content on success. Check state with num_get_port_out_pin; set a new PIN with num_set_port_out_pin. Errors: TN_NOT_OWNED.
| Name | Required | Description | Default |
|---|---|---|---|
| tn | Yes | Telephone number, 10 digits (e.g. "3035551234") or 11 digits with leading 1 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Contradicts annotations: description claims 'idempotent' while annotations set idempotentHint: false. Adds some context (MFA requirement, return code) but the contradiction undermines trust.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Efficient two-sentence structure front-loading purpose, with critical details (idempotency, MFA, return code, error, sibling tools) in compact form. Deduction for contradictory statement.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers return code and error case, links to related tools. Lacks details on idempotency behavior consistency and no output schema. Adequate for a simple tool but incomplete due to contradiction.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Only one parameter (tn) with full schema coverage; description adds no additional meaning beyond the schema's format example. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states the action ('clear'), the resource ('port-out PIN'), and context ('on a number you own'). Differentiates from siblings by mentioning the get and set counterparts.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 prerequisites ('Requires step-up MFA'), success response ('Returns 204 No Content'), and a common error ('TN_NOT_OWNED'). Implicitly guides usage via reference to sibling tools, but lacks explicit when-to-use vs. alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
num_searchSearch available numbersARead-onlyIdempotent
Search upstream inventory for PURCHASABLE telephone numbers by area code, rate center, locality, or digit pattern. Returns paginated candidates you do not yet own. Use this before ordering; then buy a candidate with num_order (or many with num_bulk_order). For numbers you already own use num_list.
| Name | Required | Description | Default |
|---|---|---|---|
| npa | No | Area code (NPA), 3 digits, e.g. "303" | |
| nxx | No | Exchange (NXX), 3 digits, e.g. "629" | |
| city | No | City name | |
| page | No | Page number, 1-based (default 1) | |
| size | No | Results per page (default 25) | |
| type | No | Number type: "did" (local, default) or "tfn" (toll-free) | |
| state | No | 2-letter state code, e.g. "CO" | |
| pattern | No | Digit pattern to match within the number, e.g. "1234" | |
| locality | No | Locality name | |
| rate_center | No | LERG rate center name, e.g. "DENVER" | |
| last_4_prefix | No | Prefix the last 4 digits must start with |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, non-destructive. Description adds that it returns paginated candidates not owned, and that it searches upstream inventory. No contradictions. Still, does not detail pagination behavior or rate limits.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, no fluff, efficiently conveys purpose, usage, and alternatives. Front-loaded with key action.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 11 optional params and no output schema, description provides essential context for usage and outcome. However, it does not describe the structure of returned candidates (e.g., fields like phone number, rate center, cost). Still, it sufficiently guides the agent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema has 100% coverage for all parameters. Description lists main search criteria (area code, rate center, locality, digit pattern) but adds no additional meaning beyond schema descriptions. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it searches upstream inventory for purchasable telephone numbers by various criteria, and distinguishes from sibling tools like num_list (for owned numbers) and num_order (for purchasing). Verb 'Search' and resource 'upstream inventory' are specific.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says 'Use this before ordering; then buy a candidate with num_order (or many with num_bulk_order). For numbers you already own use num_list.' Provides context and alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
num_set_port_out_pinSet port-out PINAIdempotent
Set the customer-chosen 4-10 digit port-out PIN on a number you own (hashed at rest; also resets the failed-attempt lock). Requires step-up MFA on the session. Check current state with num_get_port_out_pin; clear with num_remove_port_out_pin. Errors: INVALID_REQUEST, INVALID_PIN, TN_NOT_OWNED.
| Name | Required | Description | Default |
|---|---|---|---|
| tn | Yes | Telephone number, 10 digits (e.g. "3035551234") or 11 digits with leading 1 | |
| pin | Yes | Port-out PIN, 4-10 digits, e.g. "482913" |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate idempotentHint=true, readOnlyHint=false. Description adds extra context: PIN is 'hashed at rest', resets failed-attempt lock, requires MFA. No contradiction. Provides value beyond annotations by explaining security and state implications.
Agents need to know what a tool does to the 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: two sentences plus error list. Critical information is front-loaded. No unnecessary words. Each sentence adds value (action, side effects, requirements, alternatives, errors).
Shorter descriptions cost fewer tokens and are easier for agents to parse. 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 mutation tool with no output schema, the description covers the main aspects: input, behavior, errors. It does not describe the return value on success, but given the tool's simplicity and idempotency annotation, this is acceptable. Minor gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with clear descriptions for both parameters (tn and pin). The description restates the PIN length (4-10 digits) which matches the schema pattern, but does not add new meaning beyond the schema. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Set the customer-chosen 4-10 digit port-out PIN on a number you own'. It specifies the action (set), resource (port-out PIN), and scope (on owned number). Also notes side effects (resets lock) and distinguishes from sibling tools num_get_port_out_pin and num_remove_port_out_pin.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit guidance: when to use (set PIN), prerequisites (step-up MFA), related tools for alternative actions (check current state, clear), and enumerates possible errors (INVALID_REQUEST, INVALID_PIN, TN_NOT_OWNED). No ambiguity.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
num_update_metadataUpdate number metadataAIdempotent
Update the friendly name and/or description on a number you own. Use to label numbers for humans; for routing/E911/CNAM use num_update_voice, for messaging use num_update_sms. Errors: INVALID_REQUEST, TN_NOT_OWNED.
| Name | Required | Description | Default |
|---|---|---|---|
| tn | Yes | Telephone number, 10 digits (e.g. "3035551234") or 11 digits with leading 1 | |
| description | No | Longer free-text description of the number's purpose | |
| friendly_name | No | Human-friendly label for the number, e.g. "Support line" |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate it's a non-read, non-destructive, idempotent mutation. The description adds context about what can be updated (friendly name and description) and lists possible errors (INVALID_REQUEST, TN_NOT_OWNED), which goes beyond the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences plus error list, zero waste. Front-loaded with the core action ('Update...'). Every sentence adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple mutation tool with three required/optional string parameters and no output schema, the description covers purpose, usage, alternatives, and errors. It is fully adequate.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with all three parameters described in the input schema. The description only mentions 'friendly name and/or description', adding minimal meaning beyond the schema's descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Update the friendly name and/or description on a number you own,' providing a specific verb and resource. It distinguishes from siblings by mentioning alternative tools for routing/E911/CNAM and messaging.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states when to use this tool ('to label numbers for humans') and when to use alternatives ('for routing/E911/CNAM use num_update_voice, for messaging use num_update_sms'), providing clear context and exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
num_update_smsUpdate SMS configurationAIdempotent
Update the customer-owned SMS fields on a number you own: inbound webhook URL/secret, fallback URL, and MMS toggle. Requests containing tniq-owned fields are rejected. To remove SMS entirely use num_delete_sms_config. Errors: INVALID_REQUEST, TN_NOT_OWNED.
| Name | Required | Description | Default |
|---|---|---|---|
| tn | Yes | Telephone number, 10 digits (e.g. "3035551234") or 11 digits with leading 1 | |
| mms_enabled | No | Enable or disable MMS on this number | |
| inbound_webhook_url | No | HTTPS URL that receives inbound SMS webhooks, e.g. "https://example.com/sms" | |
| fallback_inbound_url | No | Fallback URL used when the primary inbound webhook fails | |
| inbound_webhook_secret | No | Shared secret used to sign inbound webhook deliveries |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate idempotentHint=true, destructiveHint=false. Description adds that only customer-owned fields are updatable, tniq-owned fields are rejected, and lists specific errors (INVALID_REQUEST, TN_NOT_OWNED). No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences. Front-loaded with update verb and resource. No fluff or repetition. Every word adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 5-parameter, non-destructive update with no output schema, the description covers constraints, errors, and alternative tool. Annotations provide safety profile. 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 100% for 5 parameters. Description adds context by naming the updatable fields and clarifying rejection of tniq-owned fields. This goes beyond 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?
Clearly states 'Update the customer-owned SMS fields on a number you own' with specific resources (inbound webhook URL/secret, fallback URL, MMS toggle). Distinguishes from sibling num_delete_sms_config by noting that tool removes SMS entirely.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 suggests alternative num_delete_sms_config for removal. Notes that requests with tniq-owned fields are rejected. Error codes are listed. Could add more context on when not to use, but the alternative suffices.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
num_update_voiceUpdate voice configurationAIdempotent
Set or update the voice routing, E911, and CNAM configuration on a number you own. Use after ordering a number (num_order) to bring it into voice service, or to change routing later. To disable voice entirely use num_delete_voice_config; to route many numbers to one trunk use num_bulk_route. Errors: INVALID_REQUEST, TN_NOT_OWNED.
| Name | Required | Description | Default |
|---|---|---|---|
| tn | Yes | Telephone number, 10 digits (e.g. "3035551234") or 11 digits with leading 1 | |
| trunk_id | No | Voice trunk-group UUID to route inbound calls to | |
| cnam_enabled | No | Enable or disable outbound CNAM (caller name) on this number | |
| e911_enabled | No | Enable or disable E911 emergency service on this number | |
| e911_address_id | No | Validated E911 address record ID to associate with this number | |
| cnam_display_name | No | CNAM display name shown to called parties (typically max 15 chars) | |
| voice_destination | No | Primary inbound voice destination (e.g. SIP URI or endpoint) | |
| voice_routing_type | No | Routing type for inbound voice (e.g. "trunk" or a URI-based type per your account setup) | |
| voice_failover_destination | No | Failover destination used when the primary is unreachable |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate idempotentHint=true, readOnlyHint=false, destructiveHint=false, which are consistent with the description's update semantics. The description adds error types (INVALID_REQUEST, TN_NOT_OWNED) but does not detail other behavioral aspects like provisioning time or synchronicity. Overall adds value without contradicting annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three sentences: main action, usage guidance, and alternatives. It is front-loaded and efficient. The error list is appended concisely. Could be slightly more integrated, but overall well-structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (9 params, state-changing), the description covers prerequisites (owning the number), alternatives, and common errors. No output schema exists, but the description does not need to detail return values. It provides sufficient context for selecting and invoking the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% for 9 parameters, so the schema already explains each parameter. The description only summarizes the categories (routing, E911, CNAM) without adding new parameter details. Baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Set or update the voice routing, E911, and CNAM configuration on a number you own.' It distinguishes from sibling tools by specifying when to use num_delete_voice_config and num_bulk_route instead. The mention of errors adds specificity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit usage guidance: 'Use after ordering a number (num_order) to bring it into voice service, or to change routing later.' It also tells when not to use it (disable voice: use num_delete_voice_config; bulk route: use num_bulk_route). This clarifies the appropriate context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
port_activateActivate ported numbersA
Activate numbers that have reached FOC (the final step of the port-in lifecycle). Gated on the project being activatable — check port_get_progress first. Requires step-up MFA. To have this happen automatically instead, use port_set_auto_activation. Errors: NOT_FOUND, CONFLICT (not activatable), TNIQ_ERROR.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Port request UUID (from port_list_requests or port_create_request) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Discloses that activation is gated on activatability and lists errors (NOT_FOUND, CONFLICT, TNIQ_ERROR). Annotations show no read-only or destructive hint, so the description adds value with precondition and error details.
Agents need to know what a tool does to the 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 three sentences that front-load the action, then cover prerequisites, alternatives, and errors. 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?
For a simple mutation tool with one parameter and no output schema, the description covers the key aspects: condition, prerequisite, alternative, and errors. It lacks details on success return but is generally adequate.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The single parameter 'id' is fully described in the schema (100% coverage). The description does not add further semantics beyond what the schema already provides, so baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states that the tool activates numbers at the FOC stage of port-in, using a specific verb and resource. It distinguishes from sibling port_set_auto_activation, making the purpose unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit guidance: check port_get_progress first, use port_set_auto_activation for automatic activation, and mentions MFA requirement. This covers when and when not to use the tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
port_add_noteAdd a port-in noteA
Add a note to the port request. visibility="internal" is operator-only (customers get FORBIDDEN); customers may only post "customer" notes. Read notes with port_list_notes. Errors: INVALID_PAYLOAD, FORBIDDEN, NOT_FOUND, INTERNAL_ERROR.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Port request UUID (from port_list_requests or port_create_request) | |
| body | Yes | Note text | |
| visibility | No | Note visibility: "customer" (default; visible to the customer) or "internal" (operator-only) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses error types (INVALID_PAYLOAD, FORBIDDEN, NOT_FOUND, INTERNAL_ERROR) and permission differences, adding behavioral context beyond the annotations (which only indicate non-read, non-destructive, non-idempotent). No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three concise sentences: purpose, permissions/errors, and reading counterpart. No unnecessary words, well 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?
Given three parameters all covered, and no output schema (mutation), the description is complete. It addresses usage, errors, and related tools, making it fully informative for an AI agent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3. The description adds value by explaining the default for visibility and the source for id, including cross-references to other tools. This enriches the schema 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 action: 'Add a note to the port request.' It uses a specific verb ('add') and resource ('note'), and distinguishes from the sibling tool 'port_list_notes' which reads notes.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit guidance on visibility: operator-only vs customer, and that customers get FORBIDDEN for 'internal'. It also mentions reading notes with port_list_notes. However, it does not explicitly state when not to use this tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
port_add_tnsAdd TNs to a port-in requestA
Normalise a free-form TN list and upload it to the draft port request's TNIQ project. Step 2 of the port-in lifecycle, after port_create_request and before port_set_group_details / port_validate_request. Errors: INVALID_PAYLOAD, VALIDATION_ERROR, NOT_FOUND, TNIQ_ERROR.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Port request UUID (from port_list_requests or port_create_request) | |
| tns | Yes | Free-form list of 10-digit telephone numbers to add to the port request |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations are all false, so no special constraints needed. Description discloses that it 'normalises' and 'uploads' TNs, and lists error types. Could add more detail on idempotency or side effects, but 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?
Very concise: two sentences plus error list. Action is front-loaded. Every sentence adds value with no redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 2-parameter tool with no output schema, description covers purpose, lifecycle placement, error types, and parameter context. Complete given simplicity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema already covers 100% of parameters with descriptions. Description adds context: 'draft port request' for id, 'free-form' for tns, and lifecycle references that enhance meaning beyond schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description uses specific verb 'Normalise' and resource 'TN list' and 'upload' to port request's TNIQ project. Distinguishes by specifying lifecycle step 2, after port_create_request and before port_set_group_details / port_validate_request.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 it is Step 2 in the port-in lifecycle, after port_create_request and before port_set_group_details / port_validate_request. Lists possible errors, providing clear usage context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
port_auto_fixAuto-fix port-in errorsA
Apply TNIQ auto-fixes to the project, optionally scoped to one error group (from port_get_error_groups) or a TN subset. After fixing, run port_revalidate_tns or port_resubmit_request as appropriate. Errors: NOT_FOUND, TNIQ_ERROR.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Port request UUID (from port_list_requests or port_create_request) | |
| tns | No | Optional subset of 10-digit TNs to fix; omit to fix all affected TNs | |
| error_group_id | No | Error group ID (from port_get_error_groups) to scope the fix to |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations are all false, providing no hints. Description implies mutation but lacks details on side effects, idempotency, or safety of retrying. Only errors are listed, not behavioral outcomes.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences plus error list, front-loaded with action, no fluff. Every sentence adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, description should mention return value or confirmation. It covers purpose and follow-up but lacks details on prerequisites, synchronous/asynchronous behavior, and what the tool returns.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3. Description adds minor context (error_group_id from port_get_error_groups) but largely restates schema parameter descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states 'Apply TNIQ auto-fixes to the project' with optional scoping to error group or TN subset, distinguishing it from sibling tools like port_get_error_groups and port_resubmit_request.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly mentions optional scoping and recommends follow-up tools (port_revalidate_tns or port_resubmit_request), but does not explicitly state when not to use or compare to alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
port_cancel_requestCancel a port-in requestADestructive
Cancel a submitted port. Gated on the project being cancellable — a CONFLICT is returned otherwise. For unsubmitted drafts use port_delete_draft instead. Requires step-up MFA. Errors: NOT_FOUND, CONFLICT, TNIQ_ERROR.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Port request UUID (from port_list_requests or port_create_request) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond annotations (destructiveHint=true), description adds critical behavioral details: requires step-up MFA and lists specific errors (NOT_FOUND, CONFLICT, TNIQ_ERROR). No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, no fluff. Front-loaded with purpose, well-structured with guidelines and behavioral notes. Every sentence adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Completely covers prerequisites, alternatives, authentication requirements, and error conditions. Simple tool with one parameter, so no further information needed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3. Description adds context that the id parameter is a port request UUID from port_list_requests or port_create_request, providing useful semantic meaning beyond the schema 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?
Clearly states 'Cancel a submitted port' with specific verb and resource. Distinguishes from sibling tool port_delete_draft for unsubmitted drafts, providing clear differentiation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly notes the tool is gated on project cancellability, returning CONFLICT otherwise. Provides direct alternative for unsubmitted drafts, making when-to-use and when-not-to-use very clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
port_create_requestCreate a port-in draftA
Create a draft port-in request (TNIQ project + WARP mirror row). This is step 1 of the port-in lifecycle: create draft → port_add_tns → port_set_group_details → port_validate_request → port_generate_loa → port_submit_request → track with port_get_progress → port_activate. Run port_preview first to check portability. Errors: NO_ACTIVE_CUSTOMER, INVALID_PAYLOAD, TNIQ_ERROR, INTERNAL_ERROR, GATEWAY_UNAVAILABLE.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | Human-friendly name for the port request | |
| desired_due_date | No | Desired port due date (FOC date), ISO 8601 date, e.g. 2026-08-01 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Description discloses it is a create (mutation), lists specific errors, and explains it creates a TNIQ project and WARP mirror row. With annotations lacking any hints, this adds meaningful behavioral context. However, it does not mention idempotency, rate limits, or side effects beyond creation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Description is two sentences with a list of errors. Front-loaded with core purpose, followed by lifecycle and prerequisite. No unnecessary words, every sentence adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers purpose, lifecycle, prerequisite, and errors. However, since there is no output schema, the description fails to mention the return value (e.g., the created draft request), which is a notable gap for an agent invoking this tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so both parameters have descriptions in the schema. The tool description does not add any additional parameter-specific information beyond what the schema already provides. Baseline score of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it creates a draft port-in request, using specific verb 'Create' and resource 'draft port-in request', with internal details (TNIQ project + WARP mirror row). It distinguishes itself from sibling tools like port_add_tns or port_submit_request by positioning as step 1 of the lifecycle.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 step-by-step lifecycle (create draft → port_add_tns → ... → port_activate) and a prerequisite (Run port_preview first). Also lists possible errors. This gives clear guidance on when to use this tool and in what sequence.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
port_delete_documentDelete a port documentADestructive
Delete a document from the port project. Get document IDs from port_list_documents. Deleting a group's only current LOA will re-block port_submit_request for that group. Errors: NOT_FOUND, TNIQ_VALIDATION, TNIQ_ERROR.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Port request UUID (from port_list_requests or port_create_request) | |
| doc_id | Yes | Document ID (from port_list_documents) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations set destructiveHint=true, and the description adds specific behavioral context: deleting a group's only current LOA re-blocks port_submit_request. It also lists possible errors (NOT_FOUND, TNIQ_VALIDATION, TNIQ_ERROR). No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences: first states purpose, second adds critical behavioral note, third lists errors. No redundant information. Efficient and front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With two well-described parameters, no output schema, and clear annotations, the description covers all necessary aspects: what it does, what inputs are needed, side effects, and errors. Complete for its complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with clear parameter descriptions. The description reinforces doc_id by referencing port_list_documents but adds no additional parameter semantics beyond the schema. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool deletes a document from a port project, specifies error types, and adds a critical behavioral detail about LOA deletion effects. It implicitly distinguishes from sibling tools like port_upload_document and port_list_documents.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 tells users to get document IDs from port_list_documents, linking to a sibling tool. It also warns about the LOA re-blocking consequence, guiding when deletion might be risky. However, it could explicitly state when not to use (e.g., for deleting the request itself).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
port_delete_draftDelete a port-in draftADestructive
Delete a pre-submission draft port request (TNIQ project + WARP mirror row). Only allowed in states with zero submitted TNs — after submission use port_cancel_request instead. Requires step-up MFA. Errors: NOT_FOUND, CONFLICT (already submitted), TNIQ_ERROR, INTERNAL_ERROR.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Port request UUID (from port_list_requests or port_create_request) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate destructiveHint=true and readOnlyHint=false. The description adds context about MFA requirements and specific error types (NOT_FOUND, CONFLICT, etc.), going beyond annotations but not contradicting them.
Agents need to know what a tool does to the 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 at three sentences, front-loading the main action and scope, followed by usage conditions and error list. No unnecessary words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema and one parameter, the description covers purpose, conditions, alternatives, and errors. It could mention irreversibility, but annotations already cover destructive nature. Reasonably complete 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?
Schema coverage is 100% with the single parameter 'id' having a clear description in the schema. The tool description does not add additional information about the parameter beyond what the schema provides, so baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool deletes a pre-submission draft port request, specifying the resources involved (TNIQ project + WARP mirror row) and differentiating it from the sibling tool port_cancel_request for post-submission cancellations.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly tells when to use (pre-submission drafts with zero submitted TNs) and when not to (after submission, use port_cancel_request). Also notes required step-up MFA, providing thorough guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
port_download_documentDownload a port documentARead-onlyIdempotent
Download one port document's raw bytes (Content-Type mirrors the stored document). Get document IDs from port_list_documents. Note: binary content (e.g. PDF) is returned inline and may not be readable as text. Errors (JSON): NOT_FOUND, TNIQ_VALIDATION, TNIQ_ERROR.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Port request UUID (from port_list_requests or port_create_request) | |
| doc_id | Yes | Document ID (from port_list_documents) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds value beyond annotations by noting that Content-Type mirrors the stored document, binary content may not be readable as text, and lists possible error types (NOT_FOUND, TNIQ_VALIDATION, TNIQ_ERROR). Annotations already indicate read-only and idempotent, but the description provides operational details.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise: two sentences plus a note, with no unnecessary words. Key information is front-loaded and each sentence adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple download tool with good annotations and full schema coverage, the description covers all necessary aspects: purpose, prerequisite, return format details, and error types. No output schema is needed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already provides full descriptions for both parameters (100% coverage). The description does not add new semantic meaning beyond stating that document IDs come from port_list_documents, which is contextually useful but not parameter-specific.
Input schemas describe structure but not intent. Descriptions should explain 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 'Download one port document's raw bytes', specifying the verb and resource. It distinguishes itself from sibling tools like port_upload_document and port_delete_document.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 explicitly mentions how to obtain document IDs ('Get document IDs from port_list_documents'), providing clear prerequisite context. While it doesn't state when not to use, this is sufficient for a simple download tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
port_execute_transferExecute an on-net transferA
Transfer on-net numbers between WARP tenants without an NPAC port. Each item authorizes with the current owner's port-out PIN; items succeed or fail INDEPENDENTLY within an HTTP 200 response — check per-TN results. Per-TN failure reasons: not_in_warp_inventory, already_yours, poi_locked, invalid_pin, pin_locked, lookup_failed, transfer_failed, invalid_tn. Preview eligibility first with port_preview_transfer. Requires step-up MFA. Errors: NO_ACTIVE_CUSTOMER, INVALID_PAYLOAD.
| Name | Required | Description | Default |
|---|---|---|---|
| items | Yes | Numbers to transfer, each with the owning tenant's port-out PIN |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond annotations (which indicate non-read-only and non-destructive), the description adds critical behavioral details: each item authorizes with the current owner's port-out PIN, per-TN independent success/failure with specific reasons, step-up MFA requirement, and possible error codes. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is four sentences with no wasted words. It front-loads the core purpose, then efficiently appends behavioral details, failure reasons, and error codes in a structured manner.
Shorter descriptions cost fewer tokens and are easier for agents to parse. 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 purpose, usage, behavior, and errors well. However, with no output schema, a more explicit description of the response structure would be helpful for an agent to parse results correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with clear parameter descriptions. The description adds value by explaining that each item authorizes with the PIN and that results are per-TN independent. This enhances understanding of parameter usage 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 verb 'Transfer', the resource 'on-net numbers between WARP tenants', and distinguishes the tool by specifying 'without an NPAC port'. This sets it apart from sibling tools like port_preview_transfer and other port operations.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly advises to 'Preview eligibility first with port_preview_transfer', providing a clear prerequisite. It also notes that items succeed or fail independently, guiding usage behavior. However, it does not explicitly list alternative tools or conditions when not to use this tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
port_generate_loaGenerate a Letter of AuthorizationA
Render a WARP-branded LOA PDF for one off-net SPID group and upload it to the project, superseding prior LOAs for that group. Only valid BEFORE the port is submitted; every off-net group needs a current LOA before port_submit_request will succeed. Requires attestation=true plus all authorizing-party, losing-carrier, and signer fields. Requires step-up MFA. Alternatively upload an existing signed LOA with port_upload_document. Errors: INVALID_PAYLOAD (error.details.fields lists missing fields), INVALID_PARAM, CONFLICT (already submitted), TNIQ_ERROR, INTERNAL_ERROR, GATEWAY_UNAVAILABLE.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Port request UUID (from port_list_requests or port_create_request) | |
| spid | Yes | Losing-carrier SPID (from port_get_request's SPID groups) | |
| signer | No | Signer details for the LOA | |
| attestation | Yes | Must be true — attests the signer is authorized to port the numbers | |
| losing_carrier | No | Losing-carrier account details for the LOA | |
| authorizing_party | No | Authorizing party details for the LOA |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations are neutral, but the description adds behavioral details: it supersedes prior LOAs, requires step-up MFA, and lists specific error types. Minor deduction because it doesn't detail the upload behavior or MFA process.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured, front-loading the main action and including prerequisites, alternatives, and error info. Every sentence is concise and valuable.
Shorter descriptions cost fewer tokens and are easier for agents to parse. 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 complexity (6 parameters, nested objects, no output schema), the description covers purpose, timing, prerequisites, alternatives, and errors comprehensively. It explains how to handle INVALID_PAYLOAD errors.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the description adds value by grouping required fields and specifying that attestation must be true. However, it implies signer, losing_carrier, and authorizing_party are required, while schema marks them optional, causing slight inconsistency.
Input schemas describe structure but not intent. Descriptions should explain 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 renders a WARP-branded LOA PDF for one off-net SPID group and uploads it, superseding prior LOAs. It distinguishes from the sibling tool port_upload_document by noting the alternative. The verb 'Render' and resource are specific.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says 'Only valid BEFORE the port is submitted' and that every off-net group needs a current LOA before port_submit_request succeeds. It also provides an alternative (port_upload_document) and lists prerequisites including MFA.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
port_get_error_groupsGet port-in error groupsARead-onlyIdempotent
Get the TNIQ validation/port error groups for the project. Use after port_validate_request or a rejected submission to see what's blocking the port, then resolve with port_auto_fix (pass an error_group_id) or port_set_group_details. Errors: NOT_FOUND, TNIQ_ERROR.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Port request UUID (from port_list_requests or port_create_request) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false. Description adds context about what the tool retrieves (error groups) and its role in the port validation workflow. No contradiction.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences plus error listing, all front-loaded with purpose. Every sentence adds value 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 a single parameter, no output schema, and clear annotations, the description fully explains tool purpose, usage context, and how to interpret results. Errors are listed. No gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and already explains the 'id' parameter as 'Port request UUID'. Description adds no extra parameter-level detail beyond what the schema provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states it gets TNIQ validation/port error groups for the project, with specific verb 'get' and resource 'error groups'. Differentiates from siblings by focusing on error groups related to port validation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly tells when to use (after port_validate_request or rejected submission) and how to proceed (use port_auto_fix or port_set_group_details with error_group_id). Also lists error responses for completeness.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
port_get_historyGet port-in audit historyARead-onlyIdempotent
Get the audit timeline for the port request (tenant-scoped, newest-first). Use to see who did what and when — submissions, cancels, document uploads, state changes. Errors: NOT_FOUND, INTERNAL_ERROR.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Port request UUID (from port_list_requests or port_create_request) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false. The description adds ordering ('newest-first'), scope ('tenant-scoped'), and specific event types, providing useful behavioral context beyond annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences: first states purpose and ordering, second gives usage context and lists errors. No wasted words. Front-loads key 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 description covers purpose, usage, events, and errors. However, without an output schema, it does not describe the return structure (e.g., fields, format). Given the simplicity of the tool and the context from sibling tools, it is mostly complete but could specify what the timeline contains.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 100% schema coverage, baseline is 3. The schema already describes the 'id' parameter as 'Port request UUID (from port_list_requests or port_create_request)'. The tool description does not add further parameter semantics, so score remains at baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The verb 'Get' and resource 'audit timeline for the port request' is specific. It clearly distinguishes from sibling tools like port_get_request (full request details) and port_get_progress (progress). Additional details like 'tenant-scoped, newest-first' further clarify scope.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description states to use it 'to see who did what and when' and lists example events (submissions, cancels, etc.). It provides clear context but does not explicitly exclude alternatives or state when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
port_get_progressGet port-in progressARead-onlyIdempotent
Get the live TNIQ progress snapshot for the port project. Use to track a submitted port (per-TN states, FOC readiness) and to check whether it is activatable before port_activate. For aggregate counts use port_get_statistics. Errors: NOT_FOUND, TNIQ_ERROR.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Port request UUID (from port_list_requests or port_create_request) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare read-only, idempotent, non-destructive. Description adds that it provides a 'live' snapshot and lists possible errors (NOT_FOUND, TNIQ_ERROR). No contradictions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences: first defines the tool, second explains usage, third provides alternatives and errors. No wasted words; front-loaded with key information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only tool with one parameter and no output schema, the description is complete enough. It specifies the type of data (per-TN states, FOC readiness) and mentions activatability check. Lack of output schema is mitigated by the description's clarity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Input schema has 100% description coverage for the single parameter 'id'. The description does not add new semantics beyond the schema, which already states it's a port request UUID. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it gets a live TNIQ progress snapshot for a port project, tracking per-TN states and FOC readiness. It distinguishes from port_get_statistics, which provides aggregate counts, and from port_get_history and port_get_request, which are different in nature.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly tells when to use: for tracking submitted port progress and checking activatability before port_activate. Provides an alternative for aggregate counts (port_get_statistics). Could be improved by mentioning when not to use (e.g., for historical data or request details).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
port_get_requestGet a port-in requestARead-onlyIdempotent
Get one port-in request: the WARP mirror row, the live TNIQ project, and per-SPID grouped TN details. Also reconciles any ACTIVATED TNs into inventory (idempotent). Use this as the primary status view for a port; for the lighter progress snapshot use port_get_progress. Errors: NO_ACTIVE_CUSTOMER, INVALID_ID, NOT_FOUND, CONFLICT.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Port request UUID (from port_list_requests or port_create_request) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare read-only, idempotent, non-destructive. Description adds that it reconciles activated TNs into inventory and is idempotent, which is useful context beyond the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three concise sentences covering purpose, usage guidance, and errors. No redundant information. Front-loaded with key details.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite missing output schema, the description provides a good indication of the return structure (WARP row, TNIQ project, per-SPID TN details) and mentions reconciliation behavior. Overall sufficient for agent understanding.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the parameter 'id' is well-described in the schema. The description only reiterates the source of the UUID but adds no additional semantics 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?
Description clearly specifies the tool retrieves a port-in request and lists its components: WARP mirror row, TNIQ project, per-SPID TN details, and reconciliation. It distinguishes itself from the lighter port_get_progress sibling.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states when to use this tool ('primary status view') and when to use the alternative ('lighter progress snapshot use port_get_progress'). Also lists specific error conditions (NO_ACTIVE_CUSTOMER, INVALID_ID, etc.).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
port_get_statisticsGet port-in statisticsARead-onlyIdempotent
Get the live TNIQ statistics for the port project (also opportunistically refreshes the WARP snapshot). Use for aggregate TN state counts; for per-TN detail use port_get_progress. Errors: NOT_FOUND, TNIQ_ERROR.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Port request UUID (from port_list_requests or port_create_request) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false, idempotentHint=true. The description adds that it opportunistically refreshes the WARP snapshot, a behavioral side effect not captured by annotations. This provides useful context beyond what annotations offer.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, front-loaded with the primary purpose, and contains no superfluous information. Every sentence adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has a single parameter, no output schema, and clear annotations, the description covers what it does, side effects, alternative tools, and errors. It is fully complete for the complexity level.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema has 100% coverage with clear parameter description linking to other tools. The description does not add additional parameter semantics beyond what the schema provides, so baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it gets live TNIQ statistics for the port project, and explicitly distinguishes from sibling tool port_get_progress for per-TN detail. It uses specific verb 'get' and resource 'TNIQ statistics'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states when to use ('aggregate TN state counts') and when not to ('for per-TN detail use port_get_progress'). Also lists possible errors (NOT_FOUND, TNIQ_ERROR).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
port_list_documentsList port documentsARead-onlyIdempotent
List the port project's documents (LOAs, bills, CSRs, etc.), optionally filtered by doc_type or TN. signer_ip is present only for operator callers. Use to verify LOA coverage before port_submit_request. Errors: NOT_FOUND, TNIQ_ERROR.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Port request UUID (from port_list_requests or port_create_request) | |
| tn | No | Filter by 10-digit telephone number | |
| doc_type | No | Filter by document type: LOA | BILL | CSR | OTHER |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint, idempotentHint, destructiveHint (safe). Description adds that 'signer_ip is present only for operator callers,' a behavioral detail beyond annotations. Mentions error types.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, front-loaded with purpose. No extraneous information. Efficient use of 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?
No output schema, but description mentions signer_ip field and error types. For a read-only list tool, this is sufficient. Could elaborate on response format or pagination, but not essential.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so parameters are already well-documented. Description mentions filtering by doc_type or TN, but adds minimal new meaning 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 verb 'List', the resource 'port project's documents', and provides examples (LOAs, bills, CSRs). It distinguishes from sibling tools like port_upload_document or port_generate_loa.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit use case: 'Use to verify LOA coverage before port_submit_request.' Provides specific context. Does not explicitly state when not to use, but the context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
port_list_notesList port-in notesARead-onlyIdempotent
List the port request's notes. Operators also see internal notes; customers see only customer-visibility notes. Add notes with port_add_note. Errors: NOT_FOUND, INTERNAL_ERROR.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Port request UUID (from port_list_requests or port_create_request) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark the tool as readOnly, idempotent, and non-destructive. The description adds role-based access details (operator vs. customer) and lists possible errors (NOT_FOUND, INTERNAL_ERROR), providing useful behavioral context beyond structured fields.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three short sentences, each adding value: purpose with role distinction, alternative tool, and error cases. It is front-loaded and efficient with no wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the simple tool (one required parameter, no output schema, safe read), the description covers purpose, access control, complementary tool, and error scenarios. It is fully complete for an agent to use correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema describes the 'id' parameter as 'Port request UUID (from port_list_requests or port_create_request)' with 100% coverage. The tool description does not add additional parameter semantics beyond what the schema already provides, so baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses 'List the port request's notes' with a specific verb and resource. It further differentiates between operator and customer visibility, making the purpose clear and distinct from siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description clarifies that operators see internal notes while customers see only customer-visibility notes, indicating when each user type should use this tool. It also mentions using port_add_note to add notes, showing complementary context. However, it does not explicitly state when not to use the tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
port_list_requestsList port-in requestsARead-onlyIdempotent
List the active customer's port-in requests, most-recent first. Use to find an existing port request's UUID before calling port_get_request or any other per-request tool. Errors: NO_ACTIVE_CUSTOMER, INTERNAL_ERROR.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, covering safety. Description adds ordering and error details, but no further behavioral traits beyond what annotations imply.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with purpose, followed by usage guidance and errors. 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?
Complete for a simple listing tool: states scope, ordering, workflow purpose, and possible errors. No output schema needed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
No parameters, so schema coverage is 100%. Description adds no param info needed; baseline applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'List' and the resource 'port-in requests' with ordering 'most-recent first'. It distinguishes from siblings like port_get_request and port_create_request by being a list 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?
Explicitly states when to use: 'Use to find an existing port request's UUID before calling port_get_request or any other per-request tool.' This provides clear context without exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
port_lookup_company_detailsLookup company details by name and addressARead-onlyIdempotent
Retrieve detailed company information from TinComply by company name and optional address. Used during the port-in flow for entity verification (e.g. before drafting an LOA). See also port_lookup_ein (by EIN) and port_verify_tin_name (TIN/name match). Errors: INVALID_REQUEST, COMPANY_NAME_REQUIRED, TINCOMPLY_ERROR, LOOKUP_FAILED.
| Name | Required | Description | Default |
|---|---|---|---|
| city | No | City | |
| state | No | State, 2-letter code, e.g. CO | |
| street | No | Street address | |
| zip_code | No | ZIP code, e.g. 80202 | |
| company_name | Yes | Legal company name to look up |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false, and idempotentHint=true, indicating a safe read operation. The description adds useful context: the data source (TinComply) and potential errors (INVALID_REQUEST, COMPANY_NAME_REQUIRED, etc.), which enhances transparency beyond the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is succinct (3 sentences) and front-loaded with the main purpose and usage context. It efficiently includes sibling tool references and error types without redundancy. Every sentence adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
While the description explains when to use the tool and what it retrieves, it lacks specifics about the output format or structure. Without an output schema, the agent is left guessing what 'detailed company information' includes. For a lookup tool, this is a notable gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% (all parameters described in the schema). The description notes that address is optional, but this is already evident from the schema (company_name is required, others not). The description adds no new semantic details about the parameters beyond what the schema provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('retrieve detailed company information'), the data source ('TinComply'), and the parameters ('by company name and optional address'). It also distinguishes itself by listing sibling tools for alternative lookups (ein, tin/name match).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly states the use case ('port-in flow for entity verification, e.g. before drafting an LOA') and provides alternative tools ('See also port_lookup_ein... and port_verify_tin_name...'), offering clear guidance on when to use this tool versus others.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
port_lookup_einLookup company by EINARead-onlyIdempotent
Retrieve company information from TinComply by EIN/Tax ID. Used during the port-in flow for entity verification. Validate the format first with port_validate_ein_format if unsure. Errors: EIN_REQUIRED, INVALID_EIN, TINCOMPLY_ERROR, LOOKUP_FAILED.
| Name | Required | Description | Default |
|---|---|---|---|
| ein | Yes | EIN/Tax ID, 9 digits with or without hyphen, e.g. 12-3456789 or 123456789 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false. The description adds context (data source TinComply) and error codes, which are beyond annotations. No contradictions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences plus an error list, front-loaded with the main action. No unnecessary words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the simple tool (one parameter, no output schema, good annotations), the description is complete enough. It mentions the purpose, context, prerequisite, and errors. Could optionally describe return format, but not lacking.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, baseline is 3. The description does not add significant parameter semantics beyond what the schema already provides (EIN format with examples).
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Retrieve company information' and resource 'from TinComply by EIN/Tax ID', and provides context (port-in flow for entity verification). However, it does not explicitly differentiate from the sibling tool port_lookup_company_details.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states when to use (during port-in flow) and recommends validating format first with port_validate_ein_format. Also lists possible errors, providing clear guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
port_previewPreview a port-inARead-onlyIdempotent
Run an instant Telique-backed portability preview for a free-form list of TNs, grouped by current losing-carrier SPID. No project is created — use this BEFORE port_create_request to see which carriers hold the numbers and whether they are portable. For numbers already on-net (WARP-to-WARP), use port_preview_transfer instead. Errors: NO_ACTIVE_CUSTOMER, INVALID_PAYLOAD, VALIDATION_ERROR, GATEWAY_UNAVAILABLE.
| Name | Required | Description | Default |
|---|---|---|---|
| tns | Yes | Free-form list of 10-digit telephone numbers to check for portability, e.g. ["3035551234", "7205556789"] |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint=true, idempotentHint=true, and destructiveHint=false. The description adds value beyond annotations by stating that no project is created, that it groups results by SPID, and lists possible errors (NO_ACTIVE_CUSTOMER, INVALID_PAYLOAD, VALIDATION_ERROR, GATEWAY_UNAVAILABLE). This provides additional behavioral context not present in annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise with three sentences, each serving a distinct purpose: explaining the core function, providing usage guidance with alternative, and listing possible errors. It is front-loaded with the most critical information and has no unnecessary wording.
Shorter descriptions cost fewer tokens and are easier for agents to parse. 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 has only one parameter with full schema coverage, annotations present, and no output schema, the description is complete. It covers purpose, usage context, alternatives, and error conditions, leaving no essential gaps 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 input schema covers 100% of the single parameter 'tns', describing it as a free-form list of 10-digit NANP numbers. The description does not add new semantic meaning beyond the schema, but the mention of errors like VALIDATION_ERROR indirectly hints at parameter validation. Since schema coverage is high, a baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool runs an instant Telique-backed portability preview for a list of TNs, grouped by losing carrier SPID. It distinguishes itself from the sibling tool port_preview_transfer by specifying that this preview is for numbers to be ported in, not for on-net transfers.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly says to use this tool BEFORE port_create_request to see portability and carrier info. It also provides a clear alternative: for numbers already on-net (WARP-to-WARP), use port_preview_transfer instead. This gives clear context on when and when not to use the tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
port_preview_transferPreview an on-net transferARead-onlyIdempotent
For a free-form TN list, report which numbers are on-net (an active WARP assignment) and eligible for on-net transfer between WARP tenants (no NPAC port needed). The owning customer's BAN is masked. Per-TN ineligibility reasons: not_in_warp_inventory, already_yours, poi_locked, lookup_failed. Use before port_execute_transfer; for off-net numbers use port_preview instead. Errors: NO_ACTIVE_CUSTOMER, INVALID_PAYLOAD, VALIDATION_ERROR.
| Name | Required | Description | Default |
|---|---|---|---|
| tns | Yes | Free-form list of 10-digit telephone numbers to check for on-net transfer eligibility |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false. Description adds that BAN is masked and lists ineligibility reasons, which enhances understanding of output behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences plus a list of reasons and errors. Every sentence adds value, no fluff. Front-loaded with purpose, then usage, then error codes.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Tool has 1 parameter and no output schema. Description explains input format, output behavior (eligibility report with reasons), and possible errors. Combined with annotations covering safety, it's complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with description for 'tns' parameter. Description says 'Free-form list of 10-digit telephone numbers to check' which mirrors schema but doesn't add new syntax or format details beyond what 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?
States 'report which numbers are on-net and eligible for on-net transfer.' Clearly specifies verb (report), resource (TN list), and scope (eligibility for on-net transfer). Differentiates from sibling port_preview (off-net).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says 'Use before port_execute_transfer; for off-net numbers use port_preview instead.' Provides clear when-to-use and alternative.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
port_resubmit_requestResubmit a port-in requestA
Resubmit a port that is in an error/rejection/exception state (e.g. after fixing issues with port_auto_fix or port_set_group_details). Only valid from those states — a CONFLICT is returned otherwise. Errors: NOT_FOUND, CONFLICT, TNIQ_ERROR.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Port request UUID (from port_list_requests or port_create_request) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Description adds state constraints and error conditions beyond annotations. Annotations already indicate not read-only and not destructive, so description provides moderate additional 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?
Two concise sentences plus error list. Every sentence adds value; no fluff. Front-loaded with action and state constraint.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given simple tool with one parameter and no output schema, description is complete: covers purpose, allowed states, errors, and references prior 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?
Schema description for 'id' is already clear and 100% covered. Description adds no further parameter semantics beyond schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states verb 'Resubmit' and resource 'port-in request' in error/rejection/exception state. Distinguishes from siblings by referencing port_auto_fix and port_set_group_details as prior steps.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 valid only from error/rejection/exception states with CONFLICT otherwise. Lists error types. Does not explicitly exclude alternative tools like port_submit_request but context makes it clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
port_revalidate_tnsRevalidate selected port-in TNsA
Send a REVALIDATE bulk action for selected (or all) TNs in the port request. Use after fixing individual TN errors when you don't need the full re-validation of port_validate_request. Errors: NOT_FOUND, TNIQ_ERROR.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Port request UUID (from port_list_requests or port_create_request) | |
| tns | No | Optional subset of 10-digit TNs to revalidate; omit to revalidate all TNs in the request |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations show readOnlyHint=false, destructiveHint=false. Description adds value by explaining the mutation action (sending a bulk revalidate) and listing possible errors, which is beyond what annotations provide. However, could mention if retry is safe, but not required.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with primary action and usage context. 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 action tool with 2 parameters and no output schema, the description covers purpose, usage, and errors adequately. Could mention return value but not critical.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with descriptions for both parameters. Description reinforces intended usage ('selected (or all) TNs') but adds minimal new meaning 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?
Description clearly states the action ('Send a REVALIDATE bulk action') and resource ('selected (or all) TNs in the port request'), and distinguishes from sibling 'port_validate_request' by specifying when to use this tool instead.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says 'Use after fixing individual TN errors when you don't need the full re-validation of port_validate_request', providing clear when-to-use and alternative guidance. Also lists error types.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
port_set_auto_activationSet auto-activation policyAIdempotent
Update the port project's auto-activation mode so numbers activate without a manual port_activate call. Modes: DISABLED (manual only), ASAP (activate as soon as FOC is reached), SCHEDULED (activate at scheduled_at, which is required for that mode). Errors: INVALID_PAYLOAD, NOT_FOUND, TNIQ_ERROR.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Port request UUID (from port_list_requests or port_create_request) | |
| mode | Yes | Auto-activation mode: DISABLED | ASAP | SCHEDULED (SCHEDULED requires scheduled_at) | |
| scheduled_at | No | ISO 8601 timestamp for SCHEDULED mode, e.g. 2026-08-01T14:00:00Z; required when mode=SCHEDULED |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide idempotentHint=true, destructiveHint=false, readOnlyHint=false. The description adds meaningful context: what the update does (activates numbers without manual call), mode-specific behavior (FOC for ASAP), and error codes. It doesn't contradict annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences: first states purpose, second lists modes with brief descriptions, third lists errors. No fluff, front-loaded with the core action. Every sentence adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutation tool with idempotentHint, the description sufficiently explains what it does and when to use it. No output schema exists, but the description doesn't need to detail return values. Slight gap: no mention of response behavior, but not critical given simplicity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema covers all 3 params with descriptions (100% coverage). The description reinforces the dependency of scheduled_at on mode=SCHEDULED and adds behavioral context for each mode (e.g., 'activate as soon as FOC is reached' for ASAP), which the schema does not provide.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states it updates the auto-activation mode, enumerates the three modes with concise explanations, and distinguishes from the manual port_activate call. The verb 'update' and resource 'port project's auto-activation mode' are specific.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains the benefit of using this tool (avoid manual port_activate call) and describes each mode's behavior. However, it does not explicitly state when not to use it or mention alternatives like port_activate for manual activation. The context of sibling tools partially compensates.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
port_set_group_detailsApply carrier-group detailsAIdempotent
Apply losing-carrier account details (account number, BTN, PIN, service address, names) to EVERY TN in one SPID group. Group membership is recomputed from live TNIQ details, not client-supplied. Get SPID groups from port_get_request; run before port_validate_request. Errors: INVALID_PAYLOAD, INVALID_PARAM, NOT_FOUND, TNIQ_ERROR.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Port request UUID (from port_list_requests or port_create_request) | |
| btn | No | Billing telephone number (10-digit) on the losing account | |
| pin | No | Account PIN/passcode with the losing carrier | |
| spid | Yes | Losing-carrier SPID (from port_get_request's SPID groups) | |
| business_name | No | Business name on the losing account | |
| end_user_name | No | End-user name on the losing account | |
| account_number | No | Account number with the losing carrier | |
| service_address | No | Service address on file with the losing carrier |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide idempotentHint=true and destructiveHint=false. The description adds behavioral context: it applies details to every TN, recomputes membership from live TNIQ, and lists possible errors. This adds value beyond the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise with four sentences, each serving a purpose: action, membership source, usage sequence, and errors. No redundant or missing information. Front-loaded with the most important 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 complexity (8 parameters, no output schema) and rich annotations, the description covers the main action, source of data, ordering, and error types. It does not explain optional parameter behavior or return value, but these are partially covered by schema and annotations. Overall sufficiently complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so baseline is 3. The description lists the parameter categories but does not add additional meaning or syntax details beyond what the schema provides. No extra value added.
Input schemas describe structure but not intent. Descriptions should explain 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 applies losing-carrier account details to every TN in a SPID group, with a specific verb and resource. It distinguishes from siblings by mentioning live TNIQ details and sequencing with port_validate_request.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 when-to-use context: get SPID groups from port_get_request and run before port_validate_request. It also clarifies that group membership is from live TNIQ, not client-supplied. However, it does not explicitly state when not to use this tool or mention alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
port_submit_requestSubmit a port-in requestA
Submit the port to NPAC. Gated on (1) every off-net SPID group having a current LOA (generate one with port_generate_loa or upload with port_upload_document) and (2) the project being submittable (validate first with port_validate_request). Requires step-up MFA. On the LOA gate a 409 CONFLICT is returned whose error.details has reason="loa_required" and groups=[{spid, tn_count, reason: "missing"|"stale"}]; other 409s carry error.details.reason from the submit blocker. After submitting, track with port_get_progress and port_get_statistics. Errors: NOT_FOUND, CONFLICT, TNIQ_ERROR.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Port request UUID (from port_list_requests or port_create_request) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond annotations (readOnlyHint=false, destructiveHint=false), the description discloses that 'Requires step-up MFA' and details the 409 CONFLICT response structure including error.details.reason and groups. This provides critical operational context not captured in annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is relatively concise but packs dense information including gates, error details, and post-submission tracking. It could be slightly more compact, but it remains well-structured and front-loaded with the core purpose. No wasted 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?
Given the tool's complexity (multiple failure modes, MFA requirement, post-submission steps) and the absence of an output schema, the description covers all essential aspects: prerequisites, error handling, and follow-up actions. No gaps remain for effective use.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 100% schema description coverage, the schema already documents the 'id' parameter. The description adds minor value by specifying the id's source (port_list_requests or port_create_request), but this is not essential. Baseline 3 is appropriate as the description does not significantly enhance parameter understanding.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Submit the port to NPAC.' as the core action, which is a specific verb and resource. It distinguishes itself from sibling tools by referencing prerequisite steps like port_generate_loa and port_validate_request, making its role in the workflow explicit.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly lists two gating conditions (LOA presence and project submittability) and directs the agent to specific tools for handling each gate. It also recommends tracking tools (port_get_progress, port_get_statistics) after submission, effectively guiding when and when not to use this tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
port_supplement_due_dateSupplement the due dateA
Change the desired due date of a submitted port (SUP_DDD), optionally for a subset of TNs. Only valid before activation — a CONFLICT is returned otherwise. Errors: INVALID_PAYLOAD, NOT_FOUND, CONFLICT, TNIQ_ERROR.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Port request UUID (from port_list_requests or port_create_request) | |
| tns | No | Optional subset of 10-digit TNs to supplement; omit to apply to all TNs | |
| new_ddd | Yes | New desired due date (FOC date), ISO 8601 date, e.g. 2026-08-15 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations are minimal; the description adds value by listing specific error types (INVALID_PAYLOAD, NOT_FOUND, CONFLICT, TNIQ_ERROR) and the activation constraint. This provides behavioral context beyond annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise with two efficient sentences, no fluff, and presents key information upfront.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema is present, and the description does not explain return values or success indicators. It covers the main purpose and constraints but lacks completeness for a mutation tool, especially regarding what happens after a successful change.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with descriptions for all parameters. The tool description adds little beyond the schema, only briefly mentioning 'optionally for a subset of TNs' which is already in the schema. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool changes the desired due date of a submitted port, with optional subset of TNs. It uses a specific verb and resource, and mentions the acronym SUP_DDD for clarity, though it does not explicitly differentiate from sibling port tools, it is distinct enough.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description specifies that the tool is only valid before activation, returning CONFLICT otherwise. This gives clear context for when to use it, but does not mention alternatives or when not to use it in comparison with other tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
port_upload_documentUpload a port documentA
Upload a supporting document (LOA, bill copy, CSR, or other; max 25MB) to the port's TNIQ project from a local file. Use for a customer-signed LOA or supporting evidence; to have WARP generate the LOA instead, use port_generate_loa. Errors: INVALID_PAYLOAD, NOT_FOUND, TNIQ_VALIDATION, TNIQ_ERROR.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Port request UUID (from port_list_requests or port_create_request) | |
| doc_type | Yes | Document type: LOA | BILL | CSR | OTHER | |
| file_path | Yes | Absolute path to the local file to upload (max 25MB) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate this is a write operation (readOnlyHint=false) and not destructive. Description adds file size limit, document types, and lists concrete error codes (INVALID_PAYLOAD, NOT_FOUND, TNIQ_VALIDATION, TNIQ_ERROR), which is helpful for handling failures.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two well-structured sentences plus error codes. No fluff, every part adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema, the description explains purpose, alternatives, constraints (file size, type), and errors. It is sufficiently complete for a simple upload tool with clear parameters.
Complex tools with many parameters or behaviors need more documentation. 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 already describes all three parameters with 100% coverage (id, doc_type with enum, file_path). Description reinforces that file_path is absolute and doc_type enum, but does not add meaningfully beyond the schema 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 identifies the action (upload), the resource (supporting document to port's TNIQ project), and scope (LOA, bill copy, CSR, other; max 25MB). It distinguishes from sibling tool port_generate_loa.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states when to use ('customer-signed LOA or supporting evidence') and when not ('to have WARP generate the LOA instead, use port_generate_loa'). Provides clear decision context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
port_validate_ein_formatValidate EIN formatARead-onlyIdempotent
Check whether an EIN is well-formed (9 digits) WITHOUT calling the external TinComply API. Use as a cheap pre-check before port_lookup_ein or port_verify_tin_name. Errors: EIN_REQUIRED.
| Name | Required | Description | Default |
|---|---|---|---|
| ein | Yes | EIN to validate, e.g. 12-3456789 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnly, idempotent, non-destructive behavior. Description adds value by clarifying it does NOT call the external TinComply API and is a 'cheap pre-check', providing cost/performance 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?
Two sentences: first states purpose and key behavioral trait (no API call), second provides usage guidance and error. Extremely concise and front-loaded with no unnecessary words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Tool is simple (single parameter, no output schema). Description covers purpose, usage context, and possible error sufficiently. No need for additional details.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with a clear description and example for 'ein'. Description does not add further semantics beyond what the schema provides, so baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states the tool validates EIN format (9 digits) without calling an external API. Distinguishes itself from siblings like port_lookup_ein and port_verify_tin_name by emphasizing format-only check.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 recommends using this tool as a cheap pre-check before port_lookup_ein or port_verify_tin_name. Also mentions possible error 'EIN_REQUIRED', providing clear usage context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
port_validate_requestValidate a port-in requestA
Trigger a TNIQ-side re-validation of ALL TNs in the port request. Run after adding TNs (port_add_tns) and applying carrier details (port_set_group_details), then inspect failures via port_get_error_groups and fix them with port_auto_fix. To revalidate only a subset of TNs use port_revalidate_tns. Errors: NOT_FOUND, TNIQ_ERROR.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Port request UUID (from port_list_requests or port_create_request) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations show readOnlyHint=false, destructiveHint=false, idempotentHint=false, consistent with a mutation. Description lists possible errors (NOT_FOUND, TNIQ_ERROR), adding transparency beyond annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, front-loaded with purpose, then usage sequence, then alternative and errors. Every sentence contributes value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple one-parameter tool with no output schema, description covers purpose, workflow, alternatives, and error types. Complete context for agent selection and invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with description for the single parameter 'id'. Description does not add extra semantics beyond schema, so baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description uses specific verb 'trigger' and resource 're-validation of ALL TNs in the port request'. Clearly distinguishes from port_revalidate_tns.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states when to run (after port_add_tns and port_set_group_details) and provides workflow (inspect failures via port_get_error_groups, fix with port_auto_fix). Also mentions alternative for subset.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
port_verify_tin_nameVerify TIN and company name matchARead-onlyIdempotent
Verify that a TIN matches the provided company name via IRS TIN-Name matching. Used during the port-in flow to confirm the authorizing entity before submission. See also port_lookup_ein and port_lookup_company_details. Errors: INVALID_REQUEST, INVALID_TIN, COMPANY_NAME_REQUIRED, TINCOMPLY_ERROR, VERIFICATION_FAILED.
| Name | Required | Description | Default |
|---|---|---|---|
| tin | Yes | TIN/EIN to verify, 9 digits, e.g. 123456789 | |
| company_name | Yes | Legal company name to match against the TIN |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint=true, idempotentHint=true, and destructiveHint=false. The description adds behavioral context by specifying it uses IRS TIN-Name matching and enumerating errors like INVALID_TIN and TINCOMPLY_ERROR, which go beyond the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise with two front-loaded sentences stating purpose and usage context, plus a list of possible errors. Every sentence adds value with no wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has only two simple parameters, no output schema, and comprehensive annotations, the description provides sufficient context: purpose, usage scenario, related tools, and error types. It is complete for an AI agent to understand when and how to use the tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has 100% coverage with clear descriptions for both parameters (tin and company_name). The tool description adds no additional parameter semantics beyond what the schema already provides, so baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool verifies that a TIN matches the company name via IRS matching, using specific verbs and resources. It distinguishes from sibling tools port_lookup_ein and port_lookup_company_details by explicitly mentioning them as alternatives.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly states the tool is used during the port-in flow to confirm the authorizing entity before submission, and references alternative tools. It also lists possible errors, providing clear guidance on when to use this tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
team_create_roleCreate a custom roleA
Create a customer-owned role with the given scope set. Scopes must exist in the platform registry (discover them with acct_list_scopes), be non-superadmin, and be held by the caller (no privilege escalation). To start from an existing role's scopes instead, use team_duplicate_role. Requires the team:write scope.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Machine name for the role (unique within the customer), e.g. 'billing_viewer' | |
| scopes | Yes | Permission scopes the role grants, e.g. ['team:read', 'billing:read']. Use acct_list_scopes to see the full catalog. | |
| customer_id | Yes | Your customer UUID (shown in the WARP portal under Settings) | |
| description | No | Optional free-text description of the role's purpose | |
| display_name | Yes | Human-readable role name, e.g. 'Billing Viewer' |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations provide no hints (all false), so the description carries the burden. It discloses that scopes must be non-superadmin and held by the caller, and that the role is customer-owned. However, it does not mention idempotency behavior or potential side effects of repeated calls, which is a minor gap for a creation tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise: two sentences plus a required scope note. It is front-loaded with the primary purpose in the first sentence, followed by constraints and alternatives, with no wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers key behaviors, constraints, and alternatives. However, it does not specify the return value (expected output of a created role object) since there is no output schema. Also, it omits mention of uniqueness constraints for the name beyond the schema description. Still, it is largely complete for the tool's complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so baseline is 3. The description adds value by explaining scope validation (non-superadmin, held by caller) and directing to acct_list_scopes, which is not fully captured in the schema descriptions. This extra context justifies a higher score.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action 'Create a customer-owned role with the given scope set', specifying the verb (create), resource (role), and key attribute (customer-owned, scope set). It also distinguishes from the sibling tool team_duplicate_role by advising to use that alternative when starting from an existing role's scopes.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly provides when-to-use and when-not-to-use guidance: 'To start from an existing role's scopes instead, use team_duplicate_role.' It also lists constraints (scopes must exist in registry, be non-superadmin, held by caller) and the required scope (team:write), giving clear context for appropriate invocation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
team_delete_roleDelete a custom roleADestructive
Permanently delete a customer-owned role. HIGH IMPACT and irreversible. Fails when the role is still assigned to any user (reassign members via team_update_member_role first) or when it is a system role. Requires the team:write scope.
| Name | Required | Description | Default |
|---|---|---|---|
| role_id | Yes | Role UUID (find it via team_list_roles) | |
| customer_id | Yes | Your customer UUID (shown in the WARP portal under Settings) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already set destructiveHint=true, but description adds context: 'HIGH IMPACT and irreversible' and details failure conditions. Adds value beyond annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences, front-loaded with key information, no 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?
Covers prerequisites, impact, required scope, and failure conditions. No output schema needed; description fully informs usage for a high-impact deletion tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema covers both parameters fully. Description adds minimal extra meaning beyond the schema, such as how parameters relate to failure conditions. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states the verb 'delete' and the resource 'customer-owned role'. Distinguishes from sibling tools like team_create_role or team_update_role.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit guidance: fails if role is assigned (redirects to team_update_member_role) or is a system role. Specifies required scope, helping the agent decide when to use.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
team_duplicate_roleDuplicate a roleA
Create a new customer-owned role copying the source role's scope set (the source may be a system role). Useful for customizing a system role: duplicate it, then adjust scopes with team_update_role. The caller must hold every copied scope. Requires the team:write scope.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Machine name for the new role (unique within the customer), e.g. 'support_admin_custom' | |
| role_id | Yes | Source role UUID to copy scopes from (find it via team_list_roles) | |
| customer_id | Yes | Your customer UUID (shown in the WARP portal under Settings) | |
| description | No | Optional free-text description of the new role | |
| display_name | Yes | Human-readable name for the new role |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate non-read-only, non-idempotent, non-destructive. The description adds that it creates a new role, requires team:write scope, and that the caller must hold every copied scope. It does not discuss reversibility or side effects, but given the simple creation nature, it is adequately 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 two sentences plus a requirement sentence. It is front-loaded with the primary action. It could be slightly more concise by integrating the requirement into the main sentence, but overall it is efficient and 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?
Given no output schema and moderate complexity, the description covers the core operation, prerequisite, and suggested workflow. It does not mention return values, but for a creation tool this is acceptable. It is reasonably complete for an agent to use effectively.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3. The description adds sourcing hints like 'find it via team_list_roles' for role_id and 'shown in the WARP portal under Settings' for customer_id, but does not clarify the distinction between name and display_name beyond schema descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it creates a new role by copying scopes from a source, specifying it can copy from system roles. This distinguishes it from sibling tools like team_create_role (which creates from scratch) and team_update_role (which modifies an existing role).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says 'Useful for customizing a system role: duplicate it, then adjust scopes with team_update_role.' This provides a clear use case and alternative. It also mentions a prerequisite: 'The caller must hold every copied scope.' However, it lacks explicit when-not-to-use guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
team_get_roleGet a roleARead-onlyIdempotent
Get one role (system or customer-owned) with its full scope list. Use to inspect exactly what a role grants before assigning it (team_update_member_role) or editing it (team_update_role). Requires the team:read scope.
| Name | Required | Description | Default |
|---|---|---|---|
| role_id | Yes | Role UUID (find it via team_list_roles) | |
| customer_id | Yes | Your customer UUID (shown in the WARP portal under Settings) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint=true, idempotentHint=true, destructiveHint=false. Description adds the requirement of team:read scope, which is additional context beyond annotations. No contradictions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, no wasted words. First sentence states core purpose, second gives usage context, third specifies permissions. Perfectly front-loaded and balanced.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read tool with comprehensive annotations and full schema coverage, the description covers purpose, usage, and permissions. No output schema, but description doesn't need to detail return values. Slightly lacking in explaining what 'full scope list' entails, but sufficient.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Input schema has 100% coverage with descriptions for both parameters. Description adds practical guidance: role_id can be found via team_list_roles, customer_id is from WARP portal. This extra context enhances understanding beyond schema alone.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it retrieves a single role with its full scope list, using specific verbs and resource. It distinguishes from sibling tools like team_list_roles, team_create_role, and team_delete_role by mentioning inspection for assignment or editing.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 when-to-use context: before assigning a role via team_update_member_role or editing via team_update_role. Also states the required team:read scope. Lacks explicit when-not-to-use but is clear enough for selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
team_list_membersList team membersARead-onlyIdempotent
List every user holding a role in this customer, alphabetical by email. Use to see who is on the team and which role each member holds, or to find a user UUID for team_update_member_role / team_remove_member. Requires the team:read scope.
| Name | Required | Description | Default |
|---|---|---|---|
| customer_id | Yes | Your customer UUID (shown in the WARP portal under Settings) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint=true, idempotentHint=true, and destructiveHint=false. The description adds value by specifying alphabetical ordering, scope requirement, and that it returns every user. No contradictions; behavior is well-explained.
Agents need to know what a tool does to the 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 concise sentences, each serving a distinct purpose: output format, usage examples, and scope requirement. No wasted words; information is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the simple tool (one param, read-only), the description covers purpose, ordering, scope, and usage ties to siblings. It lacks output format details (e.g., keys returned), but for a minimal tool this is adequate.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 100% schema description coverage, the schema already explains customer_id. The description adds no additional parameter details, so it meets the baseline of 3 for tools with full schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool lists every user holding a role in a customer, sorted alphabetically by email. This verb-resource combination is specific and distinguishes it from sibling tools like team_list_roles (which lists roles) and team_remove_member (which removes a member).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit use cases: seeing team membership and finding a user UUID for follow-up actions. It also mentions the required scope (team:read). It lacks explicit when-not-to-use guidance, but the context of sibling tools implies alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
team_list_rolesList rolesARead-onlyIdempotent
List the system roles plus this customer's custom roles. Use to find a role UUID for team_update_member_role, team_get_role, team_update_role, team_duplicate_role, or team_delete_role. Requires the team:read scope.
| Name | Required | Description | Default |
|---|---|---|---|
| customer_id | Yes | Your customer UUID (shown in the WARP portal under Settings) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Consistent with annotations (readOnlyHint=true, destructiveHint=false); adds context about listing both system and custom roles.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with purpose and usage, no extraneous information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Complete for a simple list tool with one parameter, no output schema, and thorough annotations.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Single parameter (customer_id) is fully described in the schema; description adds no further semantics, schema coverage is 100%.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states it lists system roles and custom roles, differentiating from sibling tools like team_get_role, team_create_role, etc.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says when to use (to find role UUID for specific operations) and mentions required scope (team:read).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
team_remove_memberRemove a team memberADestructive
Remove a user's membership (role assignment) from this customer. HIGH IMPACT: the user immediately loses access and all their sessions are invalidated. You cannot remove yourself. Find the user UUID via team_list_members first. To change a member's permissions instead of removing them, use team_update_member_role. Requires the team:write scope.
| Name | Required | Description | Default |
|---|---|---|---|
| user_id | Yes | User UUID of the team member (find it via team_list_members) | |
| customer_id | Yes | Your customer UUID (shown in the WARP portal under Settings) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate destructiveHint=true. The description adds high-impact context (immediate loss of access, session invalidation) and mentions scope requirement (team:write), going beyond what annotations provide.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise (4 sentences), front-loads the key purpose and impact, and includes essential warnings and alternatives without extraneous information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given comprehensive parameter descriptions in schema, destructive annotations, and the description covering prerequisites, impact, scope, and alternatives, the tool is fully contextualized for safe and correct 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 coverage is 100%, so baseline is 3. The description adds practical source hints (find via team_list_members, shown in WARP portal) for both parameters, adding value beyond schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Remove a user's membership'), identifies the impact, and distinguishes from sibling tools like team_update_member_role and team_list_members.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit guidance on when to use this tool versus alternatives, including to use team_update_member_role for permission changes, and notes the prerequisite of obtaining the user UUID via team_list_members.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
team_update_member_roleSet a member's roleAIdempotent
Assign a role (system or customer-owned, never superadmin) to a member of this customer, replacing their current role. The caller must hold every scope the role grants (no privilege escalation). Find user UUIDs via team_list_members and role UUIDs via team_list_roles. Requires the team:write scope.
| Name | Required | Description | Default |
|---|---|---|---|
| role_id | Yes | UUID of the role to assign (from team_list_roles); superadmin roles cannot be assigned | |
| user_id | Yes | User UUID of the team member (find it via team_list_members) | |
| customer_id | Yes | Your customer UUID (shown in the WARP portal under Settings) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond annotations (idempotentHint=true, destructiveHint=false), the description adds that it replaces the current role, the caller must hold every scope granted (no privilege escalation), and superadmin roles cannot be assigned. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise (three sentences), front-loaded with the main action, and contains no unnecessary information. Every sentence adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool is a write operation with no output schema, the description covers key aspects: purpose, constraints, prerequisites, and auth scope. It lacks information on return value or error conditions, but overall it's fairly complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with good descriptions for each parameter. The description adds minimal extra meaning (e.g., how to find UUIDs via sibling tools), so baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it assigns a role to a member, replacing their current role, and specifies that roles can be system or customer-owned but never superadmin. This distinguishes it from sibling tools like team_create_role or team_remove_member.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 when to use (to assign a role), points to sibling tools for finding UUIDs, and states the required scope. It does not explicitly mention when not to use, but the context is sufficient.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
team_update_roleUpdate a custom roleAIdempotent
Update the display name, description, and/or scope set of a customer-owned role. System roles are immutable. HIGH IMPACT when changing scopes: session invalidation fans out to every user holding the role. Only provided fields are changed. Use acct_list_scopes to discover valid scopes. Requires the team:write scope.
| Name | Required | Description | Default |
|---|---|---|---|
| scopes | No | Replacement scope set, e.g. ['team:read', 'billing:read']. Replaces the role's entire scope list and invalidates sessions of affected users. | |
| role_id | Yes | Role UUID (find it via team_list_roles) | |
| customer_id | Yes | Your customer UUID (shown in the WARP portal under Settings) | |
| description | No | New free-text description of the role's purpose | |
| display_name | No | New human-readable role name |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description goes beyond annotations by warning of high impact when changing scopes: session invalidation fans out to all users holding the role. This adds important behavioral context that the annotations (idempotentHint=true, destructiveHint=false) do not fully capture.
Agents need to know what a tool does to the 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 at 5 sentences, each adding value. It front-loads the main purpose, then covers constraints and impact. Could be slightly more concise, but 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?
The description covers the tool's purpose, constraints, and behavioral impacts adequately. No output schema exists, but the description doesn't need to detail return values as the context is clear for an update 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?
All 5 parameters have schema descriptions (100% coverage), so the description adds only marginal value, e.g., noting that only provided fields are changed and that scopes replaces the entire list. Baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Update' and the resource 'customer-owned role', and distinguishes from sibling tools like team_create_role and team_delete_role by specifying the scope of update (display name, description, scope set).
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 key usage guidance: it notes that system roles are immutable (when not to use), advises using acct_list_scopes to discover valid scopes, and specifies the required team:write scope. However, it does not explicitly contrast with alternatives like team_duplicate_role or team_get_role.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
trunk_add_ip_aclAdd a trunk IP ACL entryA
Add an IP/netmask to an owned trunk's ACL and sync it to Kamailio, allowing that source IP to send calls. The trunk's auth_type should include IP_ACL (IP_ACL, EITHER, or BOTH — check with trunk_get). Step-up MFA required. Errors: NO_ACTIVE_CUSTOMER, INVALID_ID, NOT_FOUND, INVALID_PAYLOAD, INTERNAL_ERROR.
| Name | Required | Description | Default |
|---|---|---|---|
| ip | Yes | IPv4 address to allow (e.g. 203.0.113.10) | |
| enabled | No | Whether the entry is active (default true) | |
| netmask | No | CIDR netmask bits, 0-32 (e.g. 32 for a single host) | |
| trunk_id | Yes | Trunk group UUID (find it with trunk_list) | |
| description | No | Free-text label for this ACL entry (e.g. 'HQ PBX') |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Discloses that the tool syncs to Kamailio and lists common error codes. Annotations are all false, so no contradictions. Could mention idempotency or destruction implications but not required.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences plus error list, no fluff. Purpose is front-loaded. Efficiently conveys core information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers most essentials: action, precondition, MFA, errors. Lacks success response indication and mention of trunk ownership requirement. Adequate but not fully comprehensive.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema has 100% coverage, so baseline is 3. The description adds context ('IP/netmask', 'allow source IP') but does not significantly enhance parameter meaning beyond schema descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action: adding an IP/netmask to a trunk's ACL and syncing to Kamailio, with the effect of allowing calls from that source. It distinguishes from sibling tools like delete and update by specifically mentioning 'add' and the sync 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?
Provides a precondition: trunk's auth_type must include IP_ACL. Also notes step-up MFA required. Lacks explicit comparison to alternatives (e.g., when to use update vs add) but context is clear enough.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
trunk_createCreate a trunkA
Create a new trunk group on your account. Enforces your account's allowed number-classes and per-direction capacity ceilings (check acct_get_capacity first). Note: a capacity of 0 means 'direction disabled' — calls in that direction are rejected with 503 + Retry-After. Errors: NO_ACTIVE_CUSTOMER, INVALID_PAYLOAD, VALIDATION_ERROR, INTERNAL_ERROR.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Trunk name (required) | |
| auth_type | Yes | Authentication mode: IP_ACL (source-IP allowlist), DIGEST (SIP username/password), EITHER, or BOTH | |
| sip_config | No | SIP config object persisted as JSONB (e.g. { codecs: [...], dtmf_mode: '...' }). The customer portal only writes codecs and dtmf_mode; other keys are admin-surface. | |
| description | No | Free-text description of the trunk | |
| capacity_cps_inbound | No | Max inbound calls-per-second. 0 is valid and means the direction is disabled (runtime gate returns 503 + Retry-After) | |
| capacity_cps_outbound | No | Max outbound calls-per-second; 0 disables outbound | |
| allowed_number_classes | No | Number classes this trunk may carry (must be within the account's allowed classes) | |
| capacity_channels_inbound | No | Max concurrent inbound channels; 0 disables inbound | |
| capacity_channels_outbound | No | Max concurrent outbound channels; 0 disables outbound |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate this is not read-only, not idempotent, and not destructive. The description adds valuable context: it enforces account-level constraints, capacity 0 disables direction, and lists possible error codes. This goes beyond the annotations, though it could mention persistence or side effects more explicitly.
Agents need to know what a tool does to the 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: two sentences covering the main action, a crucial usage hint, a behavioral note, and a list of error codes. No unnecessary words; front-loaded with the primary purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (9 parameters, nested objects), the description covers the core behavioral aspects, includes error handling, and mentions prerequisites. However, it does not describe the return value (e.g., the created trunk object or ID), which would be helpful since no output schema exists.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already includes descriptions for all 9 parameters (100% coverage). The description restates some of this (e.g., capacity 0 meaning disabled), but does not add substantial new semantic value beyond what the schema provides. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Create' and the resource 'a new trunk group on your account.' It effectively distinguishes this tool from sibling tools like trunk_delete, trunk_update, and trunk_list by specifying that this is for creation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides a prerequisite check ('check acct_get_capacity first') and explains the implication of setting capacity to 0. However, it does not explicitly state when not to use this tool or directly compare to alternatives, which would elevate it to a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
trunk_create_credentialCreate a SIP credentialA
Create a SIP Digest credential on an owned trunk. The trunk's auth_type must be DIGEST, EITHER, or BOTH (check with trunk_get). The plaintext password is returned exactly once — save it immediately. Step-up MFA required. Errors: INVALID_ID, NO_ACTIVE_CUSTOMER, TRUNK_UNOWNED, VALIDATION_ERROR, INVALID_PAYLOAD, CONFLICT, INTERNAL_ERROR.
| Name | Required | Description | Default |
|---|---|---|---|
| trunk_id | Yes | Trunk group UUID (find it with trunk_list) | |
| username | Yes | SIP auth username for the new credential (required) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses critical behavioral traits: the plaintext password is returned exactly once (must be saved immediately), step-up MFA is required, and lists error types. Annotations (readOnlyHint=false, destructiveHint=false) do not contradict; instead, the description adds valuable context beyond the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise but includes essential information: purpose, prerequisite, password handling, MFA requirement, and error list. It is front-loaded with the main purpose. Minor improvement could be structuring errors with bullet points, but it is efficient overall.
Shorter descriptions cost fewer tokens and are easier for agents to parse. 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 prerequisites, behavior, and errors, but does not specify what the response contains (e.g., credential ID) since there is no output schema. It mentions the password is returned once but lacks detail on the full response structure, leaving some ambiguity for the agent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 100% coverage with descriptions for both parameters (trunk_id and username). The description adds minimal extra parameter information, only noting that trunk_id can be found with trunk_list. Given the high schema coverage, a baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Create a SIP Digest credential on an owned trunk', specifying the exact action and resource. It distinguishes from sibling tools like trunk_delete_credential, trunk_list_credentials, trunk_update_credential, and trunk_rotate_credential.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 prerequisites: the trunk's auth_type must be DIGEST, EITHER, or BOTH, and advises to check with trunk_get. It also lists possible errors, giving context for when the tool should or shouldn't be used. However, it does not explicitly name alternative tools for different scenarios.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
trunk_create_endpointCreate a trunk endpointA
Add a dispatcher endpoint (SIP destination) to an owned trunk, either as structured host/port/transport or as a raw_uri. Returns HTTP 207 with a warning when the Kamailio sync is deferred. Step-up MFA required. Errors: NO_ACTIVE_CUSTOMER, INVALID_ID, NOT_FOUND, INVALID_PAYLOAD, VALIDATION_ERROR, INTERNAL_ERROR.
| Name | Required | Description | Default |
|---|---|---|---|
| host | No | SIP destination hostname or IP (structured form; mutually alternative to raw_uri) | |
| port | No | SIP destination port (e.g. 5060) | |
| weight | No | Load-balancing weight among endpoints of the same priority | |
| enabled | No | Whether the endpoint is active in the dispatcher | |
| raw_uri | No | Raw SIP URI (alternative to structured host/port/transport, e.g. sip:pbx.example.com:5061;transport=tls) | |
| priority | No | Failover priority (lower is tried first) | |
| trunk_id | Yes | Trunk group UUID (find it with trunk_list) | |
| transport | No | SIP transport protocol | |
| description | No | Free-text label for the endpoint |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate readOnlyHint=false, and the description adds useful behavioral context: returns HTTP 207 with a warning when Kamailio sync is deferred, and lists specific error codes. This goes beyond the annotations, though it could mention side effects (e.g., modification of trunk state).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise (a few sentences) and front-loaded with the action. It includes key conditions (MFA, sync deferral, errors) without unnecessary verbosity. However, it could be slightly more structured (e.g., bullet points).
Shorter descriptions cost fewer tokens and are easier for agents to parse. 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 9 parameters and no output schema, the description covers return status (207), error cases, and a usage requirement (MFA). It does not explain the format of responses on success, but as a creation tool, the primary concern is side effects and errors, which are addressed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has 100% coverage of parameters. The description adds value by explicitly noting the mutual exclusivity of host/port/transport and raw_uri, which is not stated in the schema. This helps agents avoid invalid combinations.
Input schemas describe structure but not intent. Descriptions should explain 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 ('Add a dispatcher endpoint to an owned trunk') and the resource (trunk), and it distinguishes between two input forms (structured host/port/transport vs raw_uri), making it distinct from sibling tools like trunk_create or trunk_create_credential.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description mentions 'Step-up MFA required' and lists possible errors (e.g., NO_ACTIVE_CUSTOMER, INVALID_ID), which guide when the tool should be used. However, it does not explicitly compare with alternatives like trunk_update_endpoint for updates or trunk_create for trunk creation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
trunk_deleteDelete a trunkADestructive
Delete an owned trunk. Rejected with CONFLICT when the trunk has live calls (drain first — check trunk_get_throttle_state) or is referenced by CDRs (disable it via trunk_update instead). Run trunk_get_cascade_preview first to see what will be removed. Step-up MFA required. Errors: NO_ACTIVE_CUSTOMER, INVALID_ID, NOT_FOUND, CONFLICT, INTERNAL_ERROR.
| Name | Required | Description | Default |
|---|---|---|---|
| trunk_id | Yes | Trunk group UUID (find it with trunk_list) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already set destructiveHint=true. Description adds crucial behavior: CONFLICT errors for live calls or CDR references, step-up MFA requirement, and specific error codes. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four sentences. First sentence states purpose. Subsequent sentences cover conditions, prerequisites, auth, and errors. No fluff. Information dense and front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive single-parameter tool with annotations, description covers preconditions (drain, check throttle, cascade preview), conflict scenarios, required MFA, and possible errors. Sufficient for agent to use correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Only one parameter with 100% schema coverage. Schema provides description 'Trunk group UUID (find it with trunk_list)'. Description adds no additional semantic meaning beyond that, but context in body helps. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states 'Delete an owned trunk.' Specifies verb and resource. Distinguishes from siblings like trunk_update and trunk_get_cascade_preview by mentioning 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?
Explicitly states when to use (delete owned trunk) and when not (live calls, CDRs). Provides alternative workflows: drain first via trunk_get_throttle_state, disable via trunk_update. Recommends trunk_get_cascade_preview first.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
trunk_delete_credentialDelete a SIP credentialADestructive
Delete a SIP credential and cascade removal from Redis + Kamailio usrloc. Idempotent (returns 204 when already gone). Use trunk_list_credentials first to find the credential id. Step-up MFA required. Errors: INVALID_ID, NO_ACTIVE_CUSTOMER, TRUNK_UNOWNED, NOT_FOUND, INTERNAL_ERROR.
| Name | Required | Description | Default |
|---|---|---|---|
| cred_id | Yes | SIP credential UUID (find it with trunk_list_credentials) | |
| trunk_id | Yes | Trunk group UUID (find it with trunk_list) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Discloses cascade removal, idempotency, MFA, and errors, but contradicts the annotation idempotentHint=false by stating the operation is idempotent. This inconsistency undermines 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?
Two efficient sentences plus error list. Front-loaded with action and key details. 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?
Covers prerequisites, idempotency, MFA, and errors, but the idempotency contradiction with annotations leaves uncertainty. Lacks mention of output format or HTTP status codes beyond 204.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with adequate descriptions. The description adds no extra meaning beyond referencing trunk_list_credentials for cred_id. Baseline score due to high coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states the verb 'Delete' and resource 'SIP credential', with additional context of cascade removal from Redis and Kamailio usrloc. Distinguishes from sibling tools like trunk_create_credential and trunk_list_credentials.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 instructs to use trunk_list_credentials first, notes idempotency and Step-up MFA requirement, and lists expected errors. Provides clear when-to-use and what-to-expect.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
trunk_delete_endpointDelete a trunk endpointADestructive
Remove a dispatcher endpoint from an owned trunk and drop it from Kamailio. Use trunk_list_endpoints first to find the endpoint id. Step-up MFA required. Errors: NO_ACTIVE_CUSTOMER, INVALID_ID, NOT_FOUND, INTERNAL_ERROR.
| Name | Required | Description | Default |
|---|---|---|---|
| trunk_id | Yes | Trunk group UUID (find it with trunk_list) | |
| endpoint_id | Yes | Endpoint ID (integer, find it with trunk_list_endpoints) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate destructiveHint=true, and the description adds that it 'drops from Kamailio' and lists specific error codes (NO_ACTIVE_CUSTOMER, INVALID_ID, NOT_FOUND, INTERNAL_ERROR), providing additional context beyond the structured annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences plus an error list. Front-loaded with the primary action, no unnecessary words, every sentence contributes value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers the action, prerequisites, and possible errors. However, it lacks explanation of the expected successful response or side effects beyond deletion. For a destructive operation with no output schema, this is a notable gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents both parameters. The description only reinforces 'find it with trunk_list_endpoints' but adds no new parameter semantics 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 'Remove a dispatcher endpoint from an owned trunk and drop it from Kamailio', specifying the verb, resource, and scope. It distinguishes from siblings like trunk_delete (removes entire trunk) and trunk_delete_credential.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 actionable guidance: 'Use trunk_list_endpoints first to find the endpoint id' and mentions 'Step-up MFA required'. While it doesn't explicitly state when not to use, the prerequisite and security note offer clear usage context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
trunk_delete_ip_aclDelete a trunk IP ACL entryADestructive
Remove an IP ACL entry from an owned trunk; that source IP can no longer send calls via IP auth. Use trunk_list_ips first to find the ip_id. Step-up MFA required. Errors: NO_ACTIVE_CUSTOMER, INVALID_ID, NOT_FOUND, INTERNAL_ERROR.
| Name | Required | Description | Default |
|---|---|---|---|
| ip_id | Yes | IP ACL entry UUID (find it with trunk_list_ips) | |
| trunk_id | Yes | Trunk group UUID (find it with trunk_list) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare destructiveHint=true and readOnlyHint=false. Description adds the 'Step-up MFA required' context and the consequence of the IP being blocked. No contradictions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences with no superfluous words. Purpose, prerequisite, and error codes are presented efficiently.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Tool is simple (delete an ACL entry). Description covers purpose, prerequisite, consequence, MFA requirement, and error codes. No output schema needed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with parameter descriptions. Description adds value by referencing trunk_list_ips and trunk_list, providing guidance 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?
Description clearly states 'Remove an IP ACL entry from an owned trunk' with the consequence 'source IP can no longer send calls via IP auth'. This distinguishes it from sibling tools like trunk_add_ip_acl and trunk_update_ip_acl.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides a clear prerequisite ('Use trunk_list_ips first to find the ip_id') and mentions 'Step-up MFA required'. Does not explicitly state when not to use or list alternatives, but context is adequate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
trunk_getGet a trunkARead-onlyIdempotent
Get one trunk group you own, including its IP ACL entries. Use trunk_list first to find the trunk id. Errors: UNAUTHORIZED, INVALID_ID, NOT_FOUND.
| Name | Required | Description | Default |
|---|---|---|---|
| trunk_id | Yes | Trunk group UUID (find it with trunk_list) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint. Description adds context that the tool returns IP ACL entries, which is beyond annotations. No contradictions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences: first sentence states purpose clearly; second gives usage hint and errors. No redundant information. Front-loaded with the most important information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given one parameter, no output schema, and comprehensive annotations, the description is sufficient. It tells the agent what the tool returns (trunk group + IP ACL entries) and how to get the required ID. Could mention return format but not necessary.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema has one required parameter trunk_id with description 'Trunk group UUID (find it with trunk_list)'. Description reinforces this by stating 'Use trunk_list first to find the trunk id.' Schema coverage is 100%, so description adds no extra needed information but is consistent.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states verb 'Get', resource 'one trunk group', scope 'you own', and additional detail 'including its IP ACL entries'. It distinguishes from sibling tools like trunk_list (list) and trunk_get_endpoint (different resource).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly tells agent to use trunk_list first to find the trunk id, providing a clear prerequisite. Also lists relevant error types (UNAUTHORIZED, INVALID_ID, NOT_FOUND) for failure handling. Lacks explicit when-not-to-use but is sufficient.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
trunk_get_cascade_previewPreview trunk deletion cascadeARead-onlyIdempotent
Get per-trunk cascade-preview counts (src_ips, tns_routed_here, active_calls, cdr_count) for an owned trunk. Use before trunk_delete to see what would be affected; active_calls is read live from Redis. Errors: NO_ACTIVE_CUSTOMER, INVALID_ID, NOT_FOUND, INTERNAL_ERROR.
| Name | Required | Description | Default |
|---|---|---|---|
| trunk_id | Yes | Trunk group UUID (find it with trunk_list) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint=true, destructiveHint=false, idempotentHint=true, which align with the description. The description adds behavioral detail: 'active_calls is read live from Redis' and lists possible error messages (NO_ACTIVE_CUSTOMER, etc.), going beyond what annotations provide.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences plus a list of errors. Purpose and usage are front-loaded. Every element adds value; 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?
No output schema exists, and the description only lists fields (src_ips, tns_routed_here, active_calls, cdr_count) without specifying return type, structure, or format. For a preview tool, agents need to know what to expect (e.g., object with numeric fields). This gap reduces completeness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with trunk_id described as 'Trunk group UUID (find it with trunk_list).' The description adds no further parametric semantics beyond implying the trunk must be owned. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Get per-trunk cascade-preview counts' with specific fields (src_ips, tns_routed_here, active_calls, cdr_count). It explicitly differentiates from sibling trunk_delete by instructing 'Use before trunk_delete to see what would be affected.'
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 when-to-use guidance ('Use before trunk_delete') and practical context (active_calls read live from Redis). Does not explicitly list when not to use or alternative tools, but the directive is strong and clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
trunk_get_endpointGet a trunk endpointARead-onlyIdempotent
Get one dispatcher endpoint on an owned trunk. Use trunk_list_endpoints first to find the endpoint id. Errors: NO_ACTIVE_CUSTOMER, INVALID_ID, NOT_FOUND, INTERNAL_ERROR.
| Name | Required | Description | Default |
|---|---|---|---|
| trunk_id | Yes | Trunk group UUID (find it with trunk_list) | |
| endpoint_id | Yes | Endpoint ID (integer, find it with trunk_list_endpoints) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, destructiveHint. Description adds context by specifying 'dispatcher endpoint' and listing errors, enhancing transparency beyond annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences: first states purpose, second gives prerequisite and error list. No unnecessary words, 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?
For a simple get operation with two well-documented parameters, the description covers purpose, prerequisite, and errors adequately. No output schema needed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so schema already describes parameters well. Description does not add new parameter info beyond what is in schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states 'Get one dispatcher endpoint on an owned trunk.' Identifies specific verb and resource, distinguishing from list and mutation tools among siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly tells users to use trunk_list_endpoints first to find the endpoint id, providing a prerequisite. Also lists common errors, offering guidance on what to expect.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
trunk_get_throttle_stateGet trunk live throttle stateARead-onlyIdempotent
Get an owned trunk's configured capacity plus live CPS/channel counters. Use to check current load before draining, deleting, or resizing a trunk. On a Redis read failure the counters are null and counters_available=false (still HTTP 200). Errors: INVALID_ID, NO_ACTIVE_CUSTOMER, NOT_FOUND.
| Name | Required | Description | Default |
|---|---|---|---|
| trunk_id | Yes | Trunk group UUID (find it with trunk_list) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate safe, read-only, idempotent behavior. The description adds valuable details: on Redis read failure, counters are null with a 200 status, and it lists specific error codes (INVALID_ID, NO_ACTIVE_CUSTOMER, NOT_FOUND). This goes beyond annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise (three sentences) with no redundant information. Each sentence adds value: purpose, usage guidance, and failure behavior. The information 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 read tool with one parameter and no output schema, the description covers essential context: purpose, usage scenario, failure mode, and errors. It could optionally detail the response structure (e.g., fields returned), but the given level is sufficient for correct selection and invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema covers the single parameter trunk_id with a description ('Trunk group UUID (find it with trunk_list)'). The tool description does not add extra meaning beyond the schema, so it meets but does not exceed the baseline of 3 for 100% schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool retrieves 'configured capacity plus live CPS/channel counters' for an owned trunk, distinguishing it from other trunk tools like trunk_get (basic info) or trunk_list (listing). The specific verb+resource combination is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly says to use this tool 'to check current load before draining, deleting, or resizing a trunk,' providing a clear use case and implicitly guiding when not to use it (e.g., for non-load-related checks).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
trunk_listList my trunksARead-onlyIdempotent
List all of your trunk groups, each with its IP ACL entries. Use this first to find a trunk_id for the other trunk_* tools. Errors: UNAUTHORIZED, INTERNAL_ERROR.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false, so the description adds minimal behavioral insight beyond listing IP ACL entries and error types. It does not contradict annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise with two sentences, no filler, and front-loads the core purpose. Every sentence adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (no params, no output schema, rich annotations) and the description covering the main output (trunk groups with IP ACLs), it is largely complete. Minor omission: no mention of pagination or ordering, but these are implicit for a list tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With zero parameters, the description does not need to elaborate on parameter semantics. The baseline of 4 is appropriate as there is no additional information needed beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool lists all trunk groups with IP ACL entries, and explicitly directs the user to use it first to obtain a trunk_id for other trunk_* tools, effectively distinguishing it from sibling 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 explicitly advises using this tool first to find a trunk_id for related tools, providing clear usage context. It also lists possible errors (UNAUTHORIZED, INTERNAL_ERROR). However, it does not explicitly state when not to use it or suggest alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
trunk_list_credential_callsList a credential's active callsARead-onlyIdempotent
List active SIP dialogs for a credential's AOR. Note: the dialog-tracking store is not yet live, so this currently returns an empty array. Use trunk_list_credentials first to find the credential id. Errors: INVALID_ID, NO_ACTIVE_CUSTOMER, TRUNK_UNOWNED, NOT_FOUND, INTERNAL_ERROR.
| Name | Required | Description | Default |
|---|---|---|---|
| cred_id | Yes | SIP credential UUID (find it with trunk_list_credentials) | |
| trunk_id | Yes | Trunk group UUID (find it with trunk_list) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds crucial behavioral context beyond annotations: the dialog-tracking store is not live, so this returns an empty array. It also lists possible errors, which annotations do not cover.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences: purpose, caveat, errors. Concise and well-structured, though the error list could be considered less essential for the primary description.
Shorter descriptions cost fewer tokens and are easier for agents to parse. 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 string parameters and no output schema, the description covers the key contextual points: what it does, a behavioral caveat, error types, and a prerequisite step. It is complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, and both parameters have descriptions. The description does not add additional meaning for the parameters beyond the schema, so baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states 'List active SIP dialogs for a credential's AOR' with a specific verb and resource, clearly distinguishing from sibling tools like trunk_list_credential_registrations and trunk_list_endpoints.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It provides a prerequisite: 'Use trunk_list_credentials first to find the credential id.' However, it does not explicitly contrast with alternatives or state when not to use this tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
trunk_list_credential_registrationsList a credential's live registrationsARead-onlyIdempotent
List the current Kamailio usrloc bindings (live SIP registrations) for a credential's AOR. Use to see which devices are registered, or to find a contact_id for trunk_revoke_registration. Errors: INVALID_ID, NO_ACTIVE_CUSTOMER, TRUNK_UNOWNED, NOT_FOUND, GATEWAY_UNAVAILABLE.
| Name | Required | Description | Default |
|---|---|---|---|
| cred_id | Yes | SIP credential UUID (find it with trunk_list_credentials) | |
| trunk_id | Yes | Trunk group UUID (find it with trunk_list) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint=true, idempotentHint=true, and destructiveHint=false. The description adds valuable context beyond this: it specifies the nature of the data (live SIP registrations via Kamailio usrloc) and lists possible error codes. This helps the agent understand the behavior without hiding side effects.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise: two sentences that front-load the main action and purpose, then provide usage guidance and error information. Every sentence adds value with no wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the absence of an output schema, the description still provides enough context: it explains the command's purpose, usage, how to find required parameters (via trunk_list and trunk_list_credentials), and lists possible errors. For a listing tool with clear annotations, this is complete and sufficient.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Input schema has 100% coverage with descriptive parameter names and descriptions. The description adds minimal extra meaning beyond the schema, such as 'for a credential's AOR', but does not provide additional syntax or format details. Since schema already does the heavy lifting, a baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb ('List') and resource ('current Kamailio usrloc bindings (live SIP registrations) for a credential's AOR'). It distinguishes from sibling tools like trunk_list_credentials (lists credentials) and trunk_revoke_registration (revokes a registration) by specifying the exact output and linking to the latter for contact_id.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 explicit use cases: to see which devices are registered or to find a contact_id for trunk_revoke_registration. It mentions errors (INVALID_ID, etc.) that imply prerequisites. However, it does not explicitly state when not to use this tool, but the guidance is clear enough for an AI agent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
trunk_list_credentialsList SIP credentialsARead-onlyIdempotent
List SIP Digest credentials for an owned trunk (no HA1, no password), each enriched with live registration_count and active_call_count. Use trunk_list first to find the trunk id. Errors: INVALID_ID, NO_ACTIVE_CUSTOMER, TRUNK_UNOWNED, INTERNAL_ERROR.
| Name | Required | Description | Default |
|---|---|---|---|
| trunk_id | Yes | Trunk group UUID (find it with trunk_list) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint=true, idempotentHint=true, and destructiveHint=false. The description adds value by noting the exclusion of HA1 and password, inclusion of live counts, and listing possible errors. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences plus error list: the first sentence states purpose and key details, the second provides usage guidance, and errors are listed concisely. No unnecessary words, effectively 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?
Given the simple input (one parameter), no output schema, and many sibling tools, the description is complete. It explains what is returned, what is omitted, how to get the input, and potential errors. No gaps for an agent to select and invoke correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There is only one parameter (trunk_id) with full schema coverage (100%). The description adds meaning beyond the schema by stating 'Trunk group UUID (find it with trunk_list)', guiding the user to obtain the value. No other parameters require elaboration.
Input schemas describe structure but not intent. Descriptions should explain 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 SIP Digest credentials for an owned trunk (no HA1, no password), each enriched with live registration_count and active_call_count.' This provides a specific verb and resource, clearly distinguishing from sibling tools like trunk_list_credential_calls and trunk_list_credential_registrations.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 instructs to 'Use trunk_list first to find the trunk id' and lists specific errors (INVALID_ID, NO_ACTIVE_CUSTOMER, TRUNK_UNOWNED, INTERNAL_ERROR). It provides clear context for use, though it does not explicitly exclude alternatives or state 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.
trunk_list_endpointsList trunk endpointsARead-onlyIdempotent
List the dispatcher endpoints (SIP destinations WARP delivers calls to) for an owned trunk. Use trunk_list first to find the trunk id. Errors: NO_ACTIVE_CUSTOMER, INVALID_ID, NOT_FOUND, INTERNAL_ERROR.
| Name | Required | Description | Default |
|---|---|---|---|
| trunk_id | Yes | Trunk group UUID (find it with trunk_list) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark it as read-only and idempotent. Description adds error codes, which is helpful. No contradictions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences: first states purpose, second adds prerequisite and error list. No unnecessary words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers purpose, prerequisite, and errors. Could optionally mention return format, but not necessary given simplicity and lack of 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?
Only one parameter (trunk_id) with schema description stating it's a UUID found via trunk_list. The tool description reinforces this. Schema coverage is 100%.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool lists dispatcher endpoints for a trunk, with a specific verb ('List') and resource. It distinguishes from siblings like trunk_get_endpoint and trunk_list.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says to use trunk_list first to find the trunk id. Lists common errors. Could explicitly contrast with trunk_get_endpoint, but the guidance is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
trunk_list_ipsList trunk IP ACL entriesARead-onlyIdempotent
List all IP ACL entries for an owned trunk. Use to audit which source IPs may send calls, or to find an ip_id for trunk_update_ip_acl / trunk_delete_ip_acl. Errors: NO_ACTIVE_CUSTOMER, INVALID_ID, NOT_FOUND, INTERNAL_ERROR.
| Name | Required | Description | Default |
|---|---|---|---|
| trunk_id | Yes | Trunk group UUID (find it with trunk_list) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false, fully covering safety. The description adds the specific purpose and error codes but no new behavioral traits beyond what annotations provide. It does not contradict annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences plus a compact error list. It is front-loaded with core functionality and use cases. 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 tool has no output schema, so the description should clarify the return format. It mentions ip_id from entries but does not describe the structure (e.g., fields like ip, ip_id, etc.). Coverage is adequate but not complete for full agent understanding.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is high (100% for trunk_id). The description adds no extra parameter information beyond the schema's description. Baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'List' and resource 'IP ACL entries for an owned trunk'. It provides two specific use cases: auditing source IPs and finding an ip_id for update/delete operations. This distinguishes it from sibling tools like trunk_add_ip_acl and trunk_delete_ip_acl.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly says when to use this tool (to audit source IPs or find an ip_id). It implicitly excludes modifications (use trunk_add_ip_acl, trunk_update_ip_acl, trunk_delete_ip_acl). Error codes provide context. However, it does not explicitly mention when not to use it or name alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
trunk_revoke_registrationRevoke a single SIP registrationADestructive
Evict one SIP contact binding from Kamailio usrloc for a credential's AOR. Use trunk_list_credential_registrations first to find the contact_id. Step-up MFA required. Errors: INVALID_ID, MISSING_ID, NO_ACTIVE_CUSTOMER, TRUNK_UNOWNED, NOT_FOUND, GATEWAY_UNAVAILABLE.
| Name | Required | Description | Default |
|---|---|---|---|
| cred_id | Yes | SIP credential UUID (find it with trunk_list_credentials) | |
| trunk_id | Yes | Trunk group UUID (find it with trunk_list) | |
| contact_id | Yes | usrloc contact ID of the registration binding to revoke (from trunk_list_credential_registrations) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate destructiveHint=true, but the description adds valuable context: 'Step-up MFA required' and a list of specific error codes. No contradictions with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Extremely concise and front-loaded. Each sentence adds necessary information: purpose, prerequisite, security requirement, and error list. No unnecessary words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the destructive nature, 3 required params, and no output schema, the description covers purpose, data source for IDs, MFA requirement, and error handling. It is fully adequate for an agent to invoke correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with descriptions for each parameter. The description adds extra guidance: 'find it with trunk_list_credentials' for cred_id, 'find it with trunk_list' for trunk_id, and 'from trunk_list_credential_registrations' for contact_id, enhancing 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 uses a specific verb 'Evict' and clearly identifies the resource as 'SIP contact binding from Kamailio usrloc for a credential's AOR'. It distinguishes from sibling tools like trunk_list_credential_registrations (list) and trunk_rotate_credential (rotate) by focusing on revocation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 prerequisite: 'Use trunk_list_credential_registrations first to find the contact_id'. Lists possible errors. However, it does not compare with alternatives like trunk_rotate_credential or explicitly state 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.
trunk_rotate_credentialRotate a SIP credential's passwordADestructive
Generate a new password + HA1 for a SIP credential (username and realm unchanged). The old password stops working immediately and the new plaintext password is returned exactly once — save it immediately. Step-up MFA required. Errors: INVALID_ID, NO_ACTIVE_CUSTOMER, TRUNK_UNOWNED, NOT_FOUND, INTERNAL_ERROR.
| Name | Required | Description | Default |
|---|---|---|---|
| cred_id | Yes | SIP credential UUID (find it with trunk_list_credentials) | |
| trunk_id | Yes | Trunk group UUID (find it with trunk_list) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds significant insight beyond the destructiveHint annotation: it specifies that the old password stops working immediately, the new plaintext password is returned exactly once, and that step-up MFA is required. This fully informs the agent of the tool's 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 extremely concise: two sentences plus a list of error codes. The most critical information is front-loaded, and every sentence provides value 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?
For a two-parameter tool with no output schema, the description covers all necessary aspects: purpose, behavioral impact (immediate, one-time return), security requirement (MFA), and error conditions. It is fully self-sufficient.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and the description does not supplement the schema with additional parameter details. It adds no extra meaning beyond what is already in the input schema, so baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Generate a new password + HA1') and the resource ('SIP credential'), explicitly noting that username and realm remain unchanged, which distinguishes it from related tools like trunk_create_credential and trunk_update_credential.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
While the description does not explicitly list alternatives, it provides clear context by stating the immediate effect of the old password stopping and that the new password is returned once, implying a specific use case for password rotation. The error list also guides proper invocation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
trunk_updateUpdate a trunkAIdempotent
Update an owned trunk's settings (name, auth type, capacities, SIP config). The trunk being updated is excluded from the account capacity-sum check. POI assignment is silently ignored (admin-only). Step-up MFA required. Use trunk_list first to find the trunk id. Errors: NO_ACTIVE_CUSTOMER, INVALID_ID, NOT_FOUND, INVALID_PAYLOAD, VALIDATION_ERROR, INTERNAL_ERROR.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | Trunk name | |
| trunk_id | Yes | Trunk group UUID (find it with trunk_list) | |
| auth_type | No | Authentication mode: IP_ACL, DIGEST, EITHER, or BOTH | |
| sip_config | No | SIP config object persisted as JSONB (e.g. { codecs: [...], dtmf_mode: '...' }). The customer portal only writes codecs and dtmf_mode; other keys are admin-surface. | |
| description | No | Free-text description of the trunk | |
| capacity_cps_inbound | No | Max inbound calls-per-second; 0 disables inbound (503 + Retry-After at runtime) | |
| capacity_cps_outbound | No | Max outbound calls-per-second; 0 disables outbound | |
| allowed_number_classes | No | Number classes this trunk may carry | |
| capacity_channels_inbound | No | Max concurrent inbound channels; 0 disables inbound | |
| capacity_channels_outbound | No | Max concurrent outbound channels; 0 disables outbound |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds significant behavioral context beyond annotations: the trunk is excluded from capacity-sum check, POI assignment is silently ignored, and Step-up MFA is required. No contradiction with annotations (idempotentHint=true is consistent with update semantics).
Agents need to know what a tool does to the 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, front-loads the main purpose, and adds relevant details without extraneous text. Slightly verbose with error list but still 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?
Covers errors, prerequisites, and behavioral quirks. Lacks description of return value or side effects, but given no output schema, this is acceptable. Could be more complete for a complex tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema descriptions cover all 10 parameters comprehensively (100% coverage). The tool description adds minimal additional meaning beyond echoing schema fields, so baseline score applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Update an owned trunk's settings' with specific fields listed (name, auth type, capacities, SIP config). It distinguishes from sibling operations like trunk_create and trunk_delete.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit prerequisite ('Use trunk_list first to find the trunk id') and mentions special conditions (POI silently ignored, Step-up MFA required). Does not explicitly state when not to use or list alternatives, but context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
trunk_update_credentialEnable or disable a SIP credentialAIdempotent
Toggle a SIP credential's enabled flag. Disabling drops the Redis HA1 + AOR and tears down active registrations (in-progress dialogs are NOT terminated); enabling restores them. Use trunk_list_credentials first to find the credential id. Step-up MFA required. Errors: INVALID_ID, NO_ACTIVE_CUSTOMER, TRUNK_UNOWNED, INVALID_PAYLOAD, NOT_FOUND, INTERNAL_ERROR.
| Name | Required | Description | Default |
|---|---|---|---|
| cred_id | Yes | SIP credential UUID (find it with trunk_list_credentials) | |
| enabled | No | true to enable the credential, false to disable it | |
| trunk_id | Yes | Trunk group UUID (find it with trunk_list) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Describes side effects in detail: disabling drops Redis HA1/AOR and tears down active registrations but not in-progress dialogs. Also mentions step-up MFA requirement and lists error codes, adding value beyond annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences with no filler. Front-loaded with the primary action, then side effects, prerequisite, auth, and errors. Every sentence contributes necessary information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers prerequisites, side effects, authentication (step-up MFA), and error codes. No output schema exists, but the description sufficiently prepares the agent for expected outcomes.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so parameters are fully described. The description adds minimal extra meaning beyond the schema, only referencing trunk_list_credentials for the cred_id field.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states the action (toggle/enable/disable) and resource (SIP credential enabled flag). Distinguishes from sibling tools like trunk_create_credential and trunk_delete_credential by focusing on the enabled flag update.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly advises using trunk_list_credentials first to find the credential ID. Lists possible errors, which helps in error handling. Could be improved by explicitly contrasting with alternatives (e.g., trunk_create_credential for new credentials).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
trunk_update_endpointUpdate a trunk endpointAIdempotent
Update a dispatcher endpoint on an owned trunk (structured host/port/transport fields or a raw_uri). Returns HTTP 207 with a warning when the Kamailio sync is deferred. Use trunk_list_endpoints first to find the endpoint id. Step-up MFA required. Errors: NO_ACTIVE_CUSTOMER, INVALID_ID, NOT_FOUND, INVALID_PAYLOAD, VALIDATION_ERROR, INTERNAL_ERROR.
| Name | Required | Description | Default |
|---|---|---|---|
| host | No | SIP destination hostname or IP (structured form; mutually alternative to raw_uri) | |
| port | No | SIP destination port (e.g. 5060) | |
| weight | No | Load-balancing weight among endpoints of the same priority | |
| enabled | No | Whether the endpoint is active in the dispatcher | |
| raw_uri | No | Raw SIP URI (alternative to structured host/port/transport, e.g. sip:pbx.example.com:5061;transport=tls) | |
| priority | No | Failover priority (lower is tried first) | |
| trunk_id | Yes | Trunk group UUID (find it with trunk_list) | |
| transport | No | SIP transport protocol | |
| description | No | Free-text label for the endpoint | |
| endpoint_id | Yes | Endpoint ID (integer, find it with trunk_list_endpoints) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Discloses HTTP 207 with a warning when Kamailio sync is deferred, and lists six specific error codes. This adds behavioral context beyond annotations (which indicate idempotent and non-destructive mutation). No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, front-loaded with the core action, followed by prerequisite, MFA requirement, and error listing. 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?
Covers all essential aspects: operation, parameter distinction, prerequisite, security, asynchronous behavior (deferred sync), and errors. No output schema is needed for this update tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, but the description adds value by grouping parameters into structured vs raw_uri and hinting at mutual exclusivity. It also briefly explains the purpose of weight, priority, and enabled, though the schema already covers these.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action (Update), the resource (a dispatcher endpoint on an owned trunk), and specifies the two forms (structured host/port/transport fields or raw_uri), distinguishing it from sibling tools like trunk_create_endpoint or trunk_delete_endpoint.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 (use trunk_list_endpoints to find endpoint_id) and a security requirement (Step-up MFA). Mentions the structured vs raw_uri alternative but does not explicitly compare to other sibling tools or give exclusion criteria.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
trunk_update_ip_aclUpdate a trunk IP ACL entryAIdempotent
Update the description and/or enabled flag of an owned trunk's IP ACL entry. Use trunk_list_ips first to find the ip_id. Step-up MFA required. Errors: NO_ACTIVE_CUSTOMER, INVALID_ID, NOT_FOUND, INVALID_PAYLOAD, INTERNAL_ERROR.
| Name | Required | Description | Default |
|---|---|---|---|
| ip_id | Yes | IP ACL entry UUID (find it with trunk_list_ips) | |
| enabled | No | true to enable the ACL entry, false to disable it | |
| trunk_id | Yes | Trunk group UUID (find it with trunk_list) | |
| description | No | New free-text label for the ACL entry |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide readOnlyHint=false, destructiveHint=false, and idempotentHint=true. The description adds the MFA requirement and a list of error codes, giving valuable context beyond structured fields.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three concise sentences: purpose, prerequisite step, and error list. Every sentence earns its place with no wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema and a simple update operation, the description covers prerequisites, MFA, and errors. It could mention success behavior, but the idempotent hint reduces the need. Still, slightly incomplete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with descriptions for all 4 parameters. The description only reinforces the schema's guidance for ip_id (find with trunk_list_ips), adding no new semantic meaning beyond what's already documented.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'update' and the specific resource 'IP ACL entry of an owned trunk', distinguishing it from sibling tools like trunk_add_ip_acl and trunk_delete_ip_acl.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 provides explicit guidance: 'Use trunk_list_ips first to find the ip_id', lists possible errors, and mentions MFA requirement. It does not explicitly exclude alternatives but is still clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
warp_statusWARP MCP statusARead-onlyIdempotent
Check warp-mcp configuration and API connectivity. Use this first when any other tool returns an auth error, or to confirm the server is set up correctly. Reports the server version, API base URL, whether an API key is configured, and whether the API accepts it.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare read-only and idempotent behavior; the description adds specifics on what is checked (configuration, connectivity) and reported (version, API base, key), enhancing 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?
Three concise sentences: purpose, usage guidance, and outputs listed. No unnecessary words, well-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?
With no parameters or output schema required, the description fully covers inputs, behavior, and outputs. Annotations supplement safety, making the definition complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
No parameters exist, and schema coverage is 100%; the description does not need to add parameter details and remains self-sufficient.
Input schemas describe structure but not intent. Descriptions should explain 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 checks warp-mcp configuration and API connectivity, listing specific outputs like server version and API key status, and distinguishes its primary use case (auth errors).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly advises using this tool first when other tools return auth errors or to confirm server setup, providing clear guidance on when to invoke it.
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. Dates show when Glama detected each change.
2 tool updates
v1.1.0- Changed
cdr_export_csv1 field changed- added
Input schema / properties / job_idAdded value: +{ + "description": "Resume polling an export job returned by an earlier call instead of starting a new one. When set, the filter parameters are ignored.", + "type": "string" +}
- Changed
cdr_get_details4 fields changed- added
Input schema / properties / cursorAdded value: +{ + "description": "Opaque cursor from a previous call's next_cursor. Omit for the first page.", + "type": "string" +} - added
Input schema / properties / limitAdded value: +{ + "description": "Rows per page (1-50, default 50)", + "maximum": 50, + "minimum": 1, + "type": "integer" +} - removed
Input schema / properties / pageRemoved value: -{ - "description": "Page (1-based, default 1)", - "maximum": 9007199254740991, - "minimum": 1, - "type": "integer" -} - removed
Input schema / properties / per_pageRemoved value: -{ - "description": "Page size (1-500, default 50)", - "maximum": 500, - "minimum": 1, - "type": "integer" -}
135 tool updates
v1.0.2- First observed
acct_get_balance - First observed
acct_get_capacity - First observed
acct_get_utilization - First observed
acct_list_scopes - First observed
bill_get_balance - First observed
bill_get_invoice - First observed
bill_get_invoice_html - First observed
bill_list_invoices - First observed
bill_list_ledger - First observed
cdr_export_csv - First observed
cdr_get_dashboard_stats - First observed
cdr_get_details - First observed
cdr_get_statistics - First observed
cdr_get_trends - First observed
key_get - First observed
key_get_audit - First observed
key_get_audit_all - First observed
key_list - First observed
msg_assign_numbers - First observed
msg_create_brand - First observed
msg_create_campaign - First observed
msg_delete_brand - First observed
msg_elect_cnp - First observed
msg_get - First observed
msg_get_brand - First observed
msg_get_campaign - First observed
msg_get_mno_status - First observed
msg_get_sharing_status - First observed
msg_get_stats - First observed
msg_get_throughput_estimate - First observed
msg_get_use_case_requirements - First observed
msg_link_brand - First observed
msg_link_campaign - First observed
msg_list - First observed
msg_list_brands - First observed
msg_list_campaign_numbers - First observed
msg_list_campaigns - First observed
msg_list_carriers - First observed
msg_list_dcas - First observed
msg_list_entity_types - First observed
msg_list_numbers - First observed
msg_list_use_cases - First observed
msg_list_verticals - First observed
msg_lookup_brand - First observed
msg_lookup_campaign - First observed
msg_nudge_cnp - First observed
msg_remove_numbers - First observed
msg_resubmit_campaign - First observed
msg_send - First observed
msg_update_brand - First observed
msg_update_campaign - First observed
net_get_ingress_ips - First observed
net_get_vendor_ips - First observed
num_bulk_order - First observed
num_bulk_route - First observed
num_delete_sms_config - First observed
num_delete_voice_config - First observed
num_get - First observed
num_get_port_out_pin - First observed
num_list - First observed
num_order - First observed
num_release - First observed
num_remove_port_out_pin - First observed
num_search - First observed
num_set_port_out_pin - First observed
num_update_metadata - First observed
num_update_sms - First observed
num_update_voice - First observed
port_activate - First observed
port_add_note - First observed
port_add_tns - First observed
port_auto_fix - First observed
port_cancel_request - First observed
port_create_request - First observed
port_delete_document - First observed
port_delete_draft - First observed
port_download_document - First observed
port_execute_transfer - First observed
port_generate_loa - First observed
port_get_error_groups - First observed
port_get_history - First observed
port_get_progress - First observed
port_get_request - First observed
port_get_statistics - First observed
port_list_documents - First observed
port_list_notes - First observed
port_list_requests - First observed
port_lookup_company_details - First observed
port_lookup_ein - First observed
port_preview - First observed
port_preview_transfer - First observed
port_resubmit_request - First observed
port_revalidate_tns - First observed
port_set_auto_activation - First observed
port_set_group_details - First observed
port_submit_request - First observed
port_supplement_due_date - First observed
port_upload_document - First observed
port_validate_ein_format - First observed
port_validate_request - First observed
port_verify_tin_name - First observed
team_create_role - First observed
team_delete_role - First observed
team_duplicate_role - First observed
team_get_role - First observed
team_list_members - First observed
team_list_roles - First observed
team_remove_member - First observed
team_update_member_role - First observed
team_update_role - First observed
trunk_add_ip_acl - First observed
trunk_create - First observed
trunk_create_credential - First observed
trunk_create_endpoint - First observed
trunk_delete - First observed
trunk_delete_credential - First observed
trunk_delete_endpoint - First observed
trunk_delete_ip_acl - First observed
trunk_get - First observed
trunk_get_cascade_preview - First observed
trunk_get_endpoint - First observed
trunk_get_throttle_state - First observed
trunk_list - First observed
trunk_list_credential_calls - First observed
trunk_list_credential_registrations - First observed
trunk_list_credentials - First observed
trunk_list_endpoints - First observed
trunk_list_ips - First observed
trunk_revoke_registration - First observed
trunk_rotate_credential - First observed
trunk_update - First observed
trunk_update_credential - First observed
trunk_update_endpoint - First observed
trunk_update_ip_acl - First observed
warp_status
TDQS
Each tool targets a distinct action within its domain (e.g., msg_create_brand vs msg_create_campaign). Even similar names like acct_get_balance vs bill_get_balance are explicitly differentiated in their descriptions, removing ambiguity.
All tools follow a consistent prefix_domain_verb_noun pattern in snake_case (e.g., trunk_create, num_release, port_validate_request). The naming is uniform and predictable across all 135 tools.
135 tools is large, but the server covers a broad telecom platform (accounting, billing, CDR, messaging, numbers, ports, team, trunks). Each subdomain has a justified set of tools; the count is appropriate for the comprehensive scope, though slightly high.
The tool set covers the full lifecycle for each domain: CRUD for numbers, brands, campaigns, trunks; full port-in workflow (preview→create→submit→activate); team role management; and CDR/statistics. Gaps are minimal (e.g., no dedicated webhook tool, but that's covered via number updates).
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
Give AI agents real phone numbers, messages, and voice calls via MCP.
MCP server for building and testing AI agents with multi-model experimentation and insights.
Give AI agents a phone number. Voice calls, SMS, and phone number management for MCP clients.
- ZapierOAuthcom.zapier
Hosted MCP server connecting AI assistants to 9,000+ apps and 40,000+ actions via Zapier.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceMCP server for provisioning dedicated real-SIM US phone numbers, receiving inbound SMS, and extracting OTP codes. Built for AI agents automating phone verification workflows.471MIT
- AlicenseAqualityDmaintenanceMCP server for BubblyPhone that lets AI assistants make real phone calls, manage AI voice agents, buy phone numbers in 30+ countries, and track billing. Supports 20 tools for full telephony control.20141MIT

oitvoip-mcp-serverofficial
FlicenseBqualityDmaintenanceA Model Context Protocol (MCP) server that provides AI agents with seamless access to the NetSapiens VoIP platform for user management, call analytics, and system administration.234-
@saperly/mcpofficial
AlicenseNot gradedqualityCmaintenanceMCP server for Saperly that enables AI agents to provision phone numbers, place calls, send SMS, and manage credentials via 36 tools backed by the Saperly API.453MIT
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/Ringer/warp-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server