SkipCalls
Server Details
AI phone receptionist for small businesses: calls, transcripts, recordings, contacts, appointments, texts and outbound AI calls. OAuth 2.1 with PKCE and dynamic client registration; the account owner picks what the assistant may do.
- Status
- Healthy
- OAuth
- Works in Glama
- Last Tested
- Transport
- Streamable HTTP · MCP 2025-06-18
- URL
- ChatGPT
- –
- Claude
- –
TDQS
Scored across 100 tools
Several tools overlap heavily around calls and contacts: app_listCalls, getCallHistory, openCallsInbox, app_getCall, getCallDetails, and search all retrieve or present call data, while get_contact, search, search_mentions, and timeline tools are adjacent. Descriptions provide guidance, but the set still forces agents to choose among near-duplicates.
Tool names mix snake_case and camelCase extensively, e.g. agent_functions_attach, addToContacts, app_listCalls, getCallHistory, statusReport, and updateTimezone. Domain prefixes and verbs are inconsistent across otherwise related resources.
At 100 tools, the surface is far beyond a normal 3–15 tool scope and even beyond a heavy 25+ tool set. The product is broad, but many tools are narrowly sliced variants that could be consolidated.
Coverage is broad across calls, contacts, calendars, knowledge, call scenarios, transfers, onboarding, notifications, and billing, but notable gaps remain: no general contact listing or contact deletion, no knowledge page deletion, no Agent Function delete/detach, and no agent-task update. These omissions create some dead ends for common lifecycle operations.
Available Tools
100 toolsaddToContactsADestructiveInspect
Create or update a contact by phone number. WARNING: if a contact with this phone number already exists, its name/notes will be overwritten (upsert semantics). ALWAYS confirm the change with the user before calling. Use search first to check if the contact exists.
| Name | Required | Description | Default |
|---|---|---|---|
| notes | Yes | Notes about the contact | |
| lastName | Yes | Last name of the contact | |
| firstName | Yes | First name of the contact | |
| phoneNumber | Yes | Phone number of the contact |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and readOnlyHint=false, but the description earns credit by specifying exactly what is destroyed: existing name/notes are overwritten. That is concrete consequence detail the annotations cannot convey. It stops short of saying whether unmentioned fields are preserved or cleared, or what the response contains.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four short sentences, each carrying a distinct payload: purpose, destructive consequence, confirmation requirement, prerequisite check. The destructive warning is surfaced near the front rather than buried.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, annotations covering the safety profile, and full parameter documentation, the description covers nearly everything an agent needs before calling. The remaining gap is what a successful upsert returns and whether it reports create-vs-update, which would help the agent relay results to the user.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so every parameter is already documented, and 3 is the baseline here. The description adds one genuinely new semantic point — phoneNumber is the matching key that determines create-vs-update — but says nothing about how notes interacts with the overwrite behavior.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb pair and resource ('Create or update a contact') plus the identity key ('by phone number'), and immediately clarifies that this is an upsert rather than a pure create. An agent can distinguish it from get_contact, update_contact and search without opening any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly prescribes two pre-call behaviors: 'Use search first to check if the contact exists' and 'ALWAYS confirm the change with the user before calling.' It names the alternative (search) but does not clarify when to prefer the sibling update_contact over this upsert path, which is the main unanswered routing question.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
agent_functions_attachAIdempotentInspect
Attach an existing Agent Function to one receptionist so it can call it on live calls. Additive: other functions stay. A Code function runs its saved tests first and stays unattached if any fails. Show the exact function, receptionist, behaviour, active state, endpoint (HTTP) and code/test summary (Code), then get explicit confirmation before calling. Never repeat secret header values.
| Name | Required | Description | Default |
|---|---|---|---|
| agentId | Yes | Receptionist ID from listAgents. | |
| functionId | Yes | Agent Function ID from agent_functions_list. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the annotations: discloses that the operation is additive ('other functions stay'), that Code functions run saved tests first and abort attachment on failure, and that secret header values must never be echoed. These are non-obvious failure and safety behaviours an agent could not infer from readOnly/destructive/idempotent hints.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with purpose, then constraints, then the confirmation requirement in a tight sequence of short clauses. Dense but every sentence carries information; only the display-field enumeration is slightly procedural.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With only two fully documented parameters, rich annotations and no output schema, the description covers the remaining gaps: what happens on test failure, that existing attachments persist, and the confirmation/secret-handling protocol. Nothing needed to invoke it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and both parameters document their source (listAgents, agent_functions_list). The description only refers generically to 'the exact function, receptionist', adding no syntax or format detail beyond the schema, so baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Attach an existing Agent Function to one receptionist') plus the runtime effect ('so it can call it on live calls'). Clearly distinguishes itself from the create_code/create_http siblings because it says 'existing'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Implies this is the path for functions that already exist (contrasted with the create_* siblings) and gives the confirmation prerequisite before calling. It never explicitly says when to prefer creating a new function instead, so it sits just below the top mark.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
agent_functions_create_codeAInspect
Create a sandboxed Code function with saved tests, for logic the receptionist runs on live calls (calculations, lookups in fixed data). Read agent_functions_get_guide first for the main(input, context) contract. Required: name, description, instruction, codeLanguage, codeSource, inputSchema (root object field whose children are the arguments) and 1-25 codeTestCases. Checks plan capacity and returns upgrade_required when the plan has no room. Pass agentId to attach it once its tests pass. To call an outside URL use agent_functions_create_http instead; to change an existing function use agent_functions_update_code. Show the exact function name, receptionist, behaviour, active state, language and a summary of the code and tests, then get explicit confirmation before calling.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Function name the receptionist sees as a tool, e.g. "check_order_status". | |
| agentId | Yes | Optional receptionist ID from listAgents to attach the function to right away. | |
| isActive | Yes | Whether receptionists may call it. Default true. | |
| codeSource | Yes | Complete source defining main(input, context) that returns the result; see agent_functions_get_guide for the contract and sandbox limits. | |
| description | Yes | What the function does, in one or two plain sentences. | |
| inputSchema | Yes | Root input definition: a field of type "object" whose children are the arguments the receptionist passes (name, type, description, validations), e.g. {"name":"input","type":"object","children":[{"name":"orderNumber","type":"string","description":"Order number the caller gives"}]}. | |
| instruction | Yes | When and how the receptionist should call it on a live call, e.g. "Call when a caller asks where their order is; ask for the order number first." | |
| codeLanguage | Yes | Language of codeSource: PYTHON, JAVASCRIPT or TYPESCRIPT. | |
| codeTestCases | Yes | 1-25 tests run in the sandbox and saved with the function; it is attached to a receptionist only when all pass. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only declare non-read-only, non-destructive, non-idempotent, closed-world; the description adds real behavioral context on top: the code runs sandboxed, plan capacity is checked and returns upgrade_required when there is no room, and the function is only attached to a receptionist when all saved tests pass. That failure mode and the attachment gating are not derivable from the annotations or schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The purpose and scope are front-loaded and the guide pointer comes early, so the important routing information is not buried. It is slightly overstuffed, packing the alternatives, the confirmation workflow, and the required-field enumeration into one paragraph, but no sentence is pure filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 9-required-parameter mutation tool with deep nested objects (inputSchema children, codeTestCases with context/call) and no output schema, the description covers prerequisites, required inputs, capacity failure, attachment semantics and confirmation. The only gap is that it says little about what a successful call returns beyond the upgrade_required case, which is partly mitigated by the get_guide reference.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already explains every one of the 9 parameters. The description does add some meaning - that inputSchema is a root object whose children are the arguments, and that agentId attaches the function once tests pass - but it also restates the required-field list that the schema already enforces. This lands at the baseline for full coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb plus resource - 'Create a sandboxed Code function with saved tests' - and scopes it to 'logic the receptionist runs on live calls (calculations, lookups in fixed data)'. It also names the two sibling tools that handle adjacent cases, so an agent can distinguish this from create_http and update_code without opening any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit routing is given: 'To call an outside URL use agent_functions_create_http instead; to change an existing function use agent_functions_update_code', plus the prerequisite 'Read agent_functions_get_guide first for the main(input, context) contract'. It goes further and states the human-in-the-loop condition - enumerate the name, receptionist, behaviour, active state, language, code and test summary, then get explicit confirmation before calling.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
agent_functions_create_httpAInspect
Create an HTTP/webhook Agent Function the receptionist calls during live calls. waitForResponse=false sends it in the background without waiting for the reply (slow webhooks). Pass agentId to attach it in the same step. Show the exact function, receptionist, behaviour, active state, endpoint (HTTP) and code/test summary (Code), then get explicit confirmation before calling. Never repeat secret header values.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | ||
| name | Yes | Function name the receptionist sees as a tool, e.g. "check_order_status". | |
| method | Yes | ||
| agentId | Yes | Optional receptionist ID from listAgents to attach the function to right away. | |
| headers | Yes | HTTP headers as plain key/value pairs. Header values may contain secrets; never repeat secret values in the confirmation or final response. | |
| isActive | Yes | Whether receptionists may call it. Default true. | |
| description | Yes | What the function does, in one or two plain sentences. | |
| inputSchema | Yes | ||
| instruction | Yes | When and how the receptionist should call it on a live call, e.g. "Call when a caller asks where their order is; ask for the order number first." | |
| waitForResponse | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare openWorldHint=true, readOnlyHint=false and idempotentHint=false, so the outbound-write nature is known; the description adds genuinely new behavior beyond that — background fire-and-forget mode for slow webhooks, same-step attachment via agentId, and a mandatory confirmation gate. The secret-header redaction rule ('never repeat secret header values') is a real operational constraint the schema does not convey. It does not describe the return value or what happens on duplicate 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?
Purpose is front-loaded and each subsequent clause carries distinct information: dispatch mode, attachment, confirmation workflow, secret handling. The confirmation clause is a crowded list ('function, receptionist, behaviour, active state, endpoint (HTTP) and code/test summary (Code)') but it is dense rather than padded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema exists, yet the description never says what a successful creation returns (function id, attached state). For a 10-parameter tool whose schema contains a nested inputSchema definition tree with children, validations and calculatedField, that structure is entirely undescribed. The workflow and safety guidance are solid; the data-shape guidance is the gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 60% schema coverage, the schema already documents name, agentId, isActive, description, instruction and headers. The description adds semantic meaning for waitForResponse (background dispatch) and agentId (same-step attach) that the bare schema lacks. But the largest and most complex parameters — url, method, and the deeply nested inputSchema tree — get no explanatory treatment in either place.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The first clause pairs a specific verb with a specific resource — an HTTP/webhook Agent Function invoked by the receptionist on live calls — and the '(HTTP)' vs '(Code)' phrasing in the later sentence makes the split with agent_functions_create_code legible. An agent can tell this apart from the code-based sibling without opening either 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?
It gives concrete decision rules: use waitForResponse=false for slow webhooks, pass agentId to attach in the same step, and always show the full configuration and get explicit confirmation before calling. It stops short of an explicit 'use this instead of agent_functions_create_code when...' exclusion, so the alternative is only implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
agent_functions_get_codeARead-onlyIdempotentInspect
Read one Code function's full editable definition by its ID from agent_functions_list: name, description, instruction, active state, language, source, input schema and saved tests. Call it before agent_functions_update_code, which needs the complete definition back; to only check the tests use agent_functions_run_tests. HTTP functions have no code to read.
| Name | Required | Description | Default |
|---|---|---|---|
| functionId | Yes | Agent Function ID from agent_functions_list. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint and destructiveHint=false, so the safety profile is covered. The description adds real context beyond that: the definition is the 'full editable' one, it is a prerequisite for the update flow, and HTTP functions return no code. It does not discuss error behavior for an invalid ID, which keeps it from a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three tight sentences, front-loaded with the core action and return contents, followed by the sequencing rule and the edge case. No redundant restatement of the name or title.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, but the description compensates by enumerating the returned fields, and it covers the prerequisite relationship and the HTTP-function edge case. For a single-parameter read tool, nothing an agent needs to call it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the single parameter is already documented, so the baseline is 3. The description adds provenance by pointing to agent_functions_list as the source of the ID, which helps the agent obtain a valid value.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Read one Code function's full editable definition by its ID') and enumerates exactly what is returned: name, description, instruction, active state, language, source, input schema and saved tests. It is clearly distinguishable from agent_functions_list, agent_functions_update_code and agent_functions_run_tests.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit sequencing guidance ('Call it before agent_functions_update_code, which needs the complete definition back'), names the alternative for a narrower need ('to only check the tests use agent_functions_run_tests'), and states an exclusion ('HTTP functions have no code to read').
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
agent_functions_get_guideARead-onlyIdempotentInspect
Return the exact Code function contract: main(input, context), runtime context fields, sandbox limits, saved test-case shape and examples. Call before drafting or editing a Code function. Read-only.
| 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 destructiveHint=false, so 'Read-only' is redundant. What the description adds beyond the annotations is the ordering constraint (fetch the contract first) and the specific content of the response, which is what an agent needs to know before drafting a function. No token-size or caching caveats, so not a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, both front-loaded: the return payload first, the call timing second. Every clause names a distinct piece of returned content; nothing is padding.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no parameters, no output schema, and full annotation coverage, the only gaps an agent could have are 'what comes back' and 'when do I call it' — both are answered explicitly. The tool is a documentation fetch, and the description fully discharges that 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?
Zero parameters, so there is nothing to disambiguate; the baseline applies. The description correctly spends no words on parameter semantics and instead covers return content.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Return the exact Code function contract') and then enumerates the payload: main(input, context), runtime context fields, sandbox limits, test-case shape, examples. That enumeration distinguishes it from the similarly named sibling agent_functions_get_code, which plausibly returns actual code rather than the spec.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'Call before drafting or editing a Code function' gives an explicit trigger condition tied to the sibling workflows (create_code, update_code, create_http). It stops short of naming alternatives or stating when not to call it, so it is clear context rather than full routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
agent_functions_listARead-onlyIdempotentInspect
List the account's Agent Functions (HTTP webhooks, connected MCP tools and Code functions) with safe summaries. Header values, secrets and code source are omitted. Read-only.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnly, idempotent, non-destructive), so the bar is lower. The description nonetheless adds real substance: header values, secrets, and code source are omitted, telling the agent that returned summaries are redacted and that it cannot retrieve credentials through this tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, front-loaded with the resource and its subtypes, followed by the redaction caveat and the safety flag. No filler and nothing redundant with the annotations except the final 'Read-only' phrase.
Shorter descriptions cost fewer tokens and are easier for agents to parse. 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 for a parameterless list tool with no output schema: the agent knows what is returned (summaries), what is withheld (secrets, headers, code), and that it is safe. Minor gaps remain around result ordering or whether all functions are returned in one 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?
The tool takes zero parameters and the schema is an empty object with additionalProperties=false, so there is nothing for the description to clarify. 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?
States a specific verb (List) and resource (Agent Functions), and enumerates the three concrete subtypes it covers: HTTP webhooks, connected MCP tools, and Code functions. It does not explicitly name the related get/create/update siblings, but the read/list scope is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Listing is implied as the discovery step before agent_functions_get_code or the create/update siblings, but the description never says when to use this versus those alternatives. Usage is inferable from the verb and sibling naming rather than stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
agent_functions_run_testsARead-onlyIdempotentInspect
Run one Code function's saved tests in the sandbox and return each result. Does not change the function. Offline unless an operator enabled network access for this function.
| Name | Required | Description | Default |
|---|---|---|---|
| functionId | Yes | Agent Function ID from agent_functions_list. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and openWorldHint, so the safety profile is covered; the description still earns credit for the non-obvious disclosure that execution is offline by default absent operator-granted network access. "Does not change the function" largely restates readOnlyHint but usefully confirms side-effect freedom for a tool that executes code.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, action front-loaded, with the two most decision-relevant caveats (no mutation, offline) trailing economically. Nothing redundant enough to cut.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter, no-output-schema tool with rich annotations, the description covers action, side effects, and network posture adequately. It stops short of saying what a failing test or an unconfigured-sandbox response looks like, which would help an agent interpret results.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the single functionId parameter is documented with a pointer to agent_functions_list, so the schema carries the load. The description only says "one Code function's saved tests" and adds no format or discovery detail beyond 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?
States a specific verb and resource ("Run one Code function's saved tests in the sandbox") plus the return shape ("return each result"), which cleanly separates it from siblings like agent_functions_get_code or agent_functions_create_code that touch code rather than execute tests.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied (verify a saved function via its tests) but never spelled out as when-to-use versus an alternative, and no prerequisites such as needing saved tests to exist are stated. The only explicit guidance is the network condition, which is a constraint rather than a routing rule.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
agent_functions_update_codeADestructiveIdempotentInspect
Replace one Code function (functionId from agent_functions_list) with a complete new definition: every field is required, so start from agent_functions_get_code and change only what the user asked. The proposed tests run first; a failing edit never replaces the current function. Show the exact function name, receptionist, behaviour, active state, language and a summary of the code and tests, then get explicit confirmation before calling.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Function name the receptionist sees as a tool, e.g. "check_order_status". | |
| isActive | Yes | Whether receptionists may call it after the edit. | |
| codeSource | Yes | Complete source defining main(input, context) that returns the result; see agent_functions_get_guide for the contract and sandbox limits. | |
| functionId | Yes | Agent Function ID from agent_functions_list. | |
| description | Yes | What the function does, in one or two plain sentences. | |
| inputSchema | Yes | Root input definition: a field of type "object" whose children are the arguments the receptionist passes (name, type, description, validations), e.g. {"name":"input","type":"object","children":[{"name":"orderNumber","type":"string","description":"Order number the caller gives"}]}. | |
| instruction | Yes | When and how the receptionist should call it on a live call, e.g. "Call when a caller asks where their order is; ask for the order number first." | |
| codeLanguage | Yes | Language of codeSource: PYTHON, JAVASCRIPT or TYPESCRIPT. | |
| codeTestCases | Yes | The complete new test list (1-25), replacing the saved tests; all must pass or nothing changes. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and idempotentHint=true, but the description adds substantive behavior: all fields are required so it is a full overwrite, and proposed tests run first so a failing edit never replaces the current function. This test-gated atomicity is exactly the kind of context the agent cannot infer from the hint flags.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, front-loaded with the replacement semantics, then the source-of-truth step, then the safety/confirmation gate. No restatement of the title or filler 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?
For a 9-parameter, fully-required tool with deeply nested schema and no output schema, the description covers the replacement model, the test gate and the confirmation requirement, which is sufficient to call it safely. It does not say what a successful response looks like, but with no output schema that is a minor gap given the strength of the rest.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3; the description still adds workflow-level meaning by stating every field is required and that the values should be seeded from agent_functions_get_code rather than authored from scratch. It also enumerates the fields to surface for confirmation (function name, receptionist, behaviour, active state, language, code and tests), which helps the agent fill the schema correctly.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: "Replace one Code function (functionId from agent_functions_list) with a complete new definition." It names the exact identifier source and distinguishes itself from create_code and get_code by framing the operation as wholesale replacement of an existing function.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit workflow guidance: start from agent_functions_get_code and change only what the user asked, plus an explicit gate — get confirmation before calling. It also names the sibling to read first, so the agent has both a when-to-use path and a prerequisite.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
agent_tasks_addAInspect
Enable one call task on a receptionist. Pass only title to enable a standard task from agent_tasks_list (for example "Ask for email"); pass title, description and completionCriteria to create a custom task (max 3 per account). One task per user request. Get explicit approval before calling.
| Name | Required | Description | Default |
|---|---|---|---|
| title | Yes | Task title. A standard task title from agent_tasks_list (for example "Ask for email") enables that task with no other fields; any other title creates a custom task and needs description and completionCriteria. | |
| agentId | Yes | Receptionist ID from listAgents. | |
| description | Yes | Custom task only: the instruction the receptionist follows during the call. | |
| completionCriteria | Yes | Custom task only: how the receptionist decides the task is completed vs unable. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations cover the safety profile (readOnlyHint=false, destructiveHint=false, idempotentHint=false, openWorldHint=false), and the description adds substantive behavior beyond them: an account-level quota on custom tasks, a one-task-per-request rule, and a required user-approval gate before invocation.
Agents need to know what a tool does to the 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 short sentences, front-loaded with the core action, then the two mode branches, then the constraints, then the approval gate. No filler and no repetition of the tool name.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutation tool with no output schema and only four flat, fully documented parameters, the description supplies everything an agent needs: both modes, quotas, per-request scope, and the approval prerequisite.
Complex tools with many parameters or behaviors need more documentation. Simple 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 schema's own title description already spells out the standard-vs-custom conditional and the dependency on description/completionCriteria. The description restates that mapping rather than adding new meaning (e.g., format, length, or what happens if a custom title collides with a standard one).
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Enable one call task on a receptionist') and immediately disambiguates the two modes: standard task from agent_tasks_list versus custom task. An agent can distinguish this from agent_tasks_list and agent_tasks_delete without opening any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit branching instructions: pass only title for a standard task, pass title+description+completionCriteria for a custom task. It also states hard constraints (max 3 custom tasks per account, one task per user request) and a procedural precondition ('Get explicit approval before calling').
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
agent_tasks_deleteADestructiveIdempotentInspect
Remove one call task from a receptionist by taskId. REAL ACTION, not a preview: the live receptionist stops doing that task on calls. Right before calling, show the user the exact change and get their explicit confirmation.
| Name | Required | Description | Default |
|---|---|---|---|
| taskId | Yes | Task ID from agent_tasks_list. | |
| agentId | Yes | Receptionist ID from listAgents. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, idempotentHint=true, and readOnlyHint=false, so the safety profile is known. The description goes beyond them by stating the real-world effect (the live receptionist stops performing that task on calls) and prescribing a confirmation step — context the annotations cannot 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?
Three short sentences, front-loaded with what the tool does, then the risk disclosure, then the required pre-call behavior. Nothing is redundant or padded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-parameter destructive tool with full annotations and no output schema, the description covers purpose, risk, and the confirmation protocol. It omits what happens on an unknown or already-deleted taskId (idempotency behavior), a minor but real gap for a delete operation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with both taskId and agentId documented including their source endpoints, so the schema does the heavy lifting. The description only reiterates "by taskId" and adds no format, constraint, or edge-case detail beyond it.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Names a specific verb and resource ("Remove one call task from a receptionist") and adds the keying parameter (taskId). It is trivially distinguishable from siblings agent_tasks_add and agent_tasks_list, which are the adjacent 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?
Provides clear operating context: this is a real mutation, and the caller must confirm with the user right before invoking. It doesn't explicitly name alternatives (e.g. agent_tasks_list to find the task first), though the schema's "Task ID from agent_tasks_list" cross-reference covers that routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
agent_tasks_listARead-onlyIdempotentInspect
List a receptionist's call tasks (what it collects or accomplishes on every call), the standard tasks that can be enabled, and the remaining custom-task budget. Not for notification settings. Read-only.
| Name | Required | Description | Default |
|---|---|---|---|
| agentId | Yes | Receptionist ID from listAgents. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and openWorldHint=false, so 'Read-only' in the description is redundant. What does add value is disclosing the response composition (current tasks, standard-task catalog, and remaining custom-task budget) in the absence of an output schema, hinting at a per-receptionist quota constraint.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences with zero waste: what it returns first, then the exclusion, then the safety profile. Front-loaded and scannable.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description usefully covers the shape of the result. Minor gaps remain, such as whether the standard-task catalog is filtered by business type or how the budget is expressed numerically, but nothing essential for correct invocation 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?
Only one parameter (agentId) exists and schema coverage is 100%, with the schema itself explaining that the ID comes from listAgents. The description adds nothing about the identifier or its format, so the baseline 3 for high-coverage schemas applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (List) and resource (a receptionist's call tasks), then enumerates the three things returned: assigned tasks, the catalog of standard enableable tasks, and the remaining custom-task budget. The parenthetical '(what it collects or accomplishes on every call)' makes the resource concrete, and 'Read-only' separates it from the mutation siblings agent_tasks_add and agent_tasks_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 one explicit exclusion ('Not for notification settings'), which steers the agent away from notification_settings_get, but gives no positive trigger condition or comparison against agent_tasks_add/agent_tasks_delete. Usage is only implied by the enumeration of returned content.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
app_getCallARead-onlyInspect
Get one call by its UUID with everything the Calls inbox shows: caller or recipient, status, start time, minutes, the AI summary, the call goal (outbound), the spoken transcript as speaker turns, and a dashboard link (webUrl). Use it after app_listCalls or openCallsInbox returned the call id. In a chat answer, getCallDetails gives the same call plus a shareable recording link; use getCallHistory or search to find a call first. Summary and transcript are null or empty while the call is still being analyzed or when the conversation is private. An unknown ID returns a not-found error.
| Name | Required | Description | Default |
|---|---|---|---|
| callId | Yes | Inbound or outbound call UUID, e.g. the id from app_listCalls or getCallHistory. Not a phone number. |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | Yes | |
| goal | Yes | |
| title | Yes | |
| status | Yes | |
| webUrl | Yes | |
| minutes | Yes | |
| summary | Yes | |
| direction | Yes | |
| startedAt | Yes | |
| transcript | Yes | |
| resourceUri | Yes | |
| recipientName | No | |
| routingContext | No | |
| summaryPreview | Yes | |
| counterpartName | Yes | |
| counterpartPhone | Yes | |
| receptionistName | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnly/non-destructive annotations, it discloses that summary and transcript are null or empty while analysis is pending or when the conversation is private, and that an unknown ID produces a not-found error. These are genuinely useful edge-case behaviors the agent could not infer from annotations, though it doesn't mention latency or size limits of the transcript payload.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core action and the returned fields, then the usage routing, then edge cases. It is somewhat dense with sibling names, but each clause carries information; nothing is pure filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so the field enumeration is bonus rather than a necessity; combined with the null-state and not-found behavior, an agent has enough to call and interpret this correctly. Only minor gaps remain (e.g., whether the returned transcript is truncated for long calls).
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the schema itself already says the callId is a UUID, not a phone number. The description mainly reinforces that the ID comes from app_listCalls/getCallHistory, adding little beyond the schema, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ("Get one call by its UUID") and enumerates the payload it returns (caller/recipient, status, minutes, AI summary, transcript turns, webUrl). The sibling/alternatives (getCallDetails, getCallHistory, search) are named as different tools, so an agent can distinguish this from them without opening a schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says to use it after app_listCalls or openCallsInbox returned the call id, and explicitly routes to getCallDetails for a shareable recording link and to getCallHistory/search to find a call first. Both when-to-use and when-to-use-something-else are stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
app_listCallsARead-onlyInspect
List one page of calls (inbound and outbound merged), newest first: id, direction, title, caller or recipient name and phone, status, start time, minutes and a summary preview. All arguments are optional: direction (all, inbound or outbound), query (name, phone or title text), limit (1-50, default 25) and cursor. When nextCursor is not null, pass it as cursor to get older calls; an empty calls list means no match. This feeds the Calls inbox view. In a chat answer, prefer getCallHistory for a compact list or search to find a call by name, phone or topic.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | Yes | Calls per page, 1-50. Defaults to 25. | |
| query | Yes | Case-insensitive match on caller name, phone, or title. | |
| cursor | Yes | nextCursor from the previous page, to get older calls. Omit for the newest page. | |
| direction | Yes | Which calls to list. Defaults to all. |
Output Schema
| Name | Required | Description |
|---|---|---|
| calls | Yes | |
| nextCursor | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false and openWorldHint=false, so the safety profile is covered; the description adds real behavioral context beyond that: page ordering, cursor-driven pagination, and empty-result semantics. It stops short of anything about rate limits or result caps beyond the page size, but for a read-only list tool this is solid.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with what the tool returns, then arguments, then pagination behavior, then alternatives — a sensible order with no filler sentences. It is dense and slightly overstuffed for one paragraph, but each clause carries information an agent would otherwise have to infer.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given an output schema (so return values need not be explained), full annotation coverage, and 100% schema description coverage, the description supplies everything else an agent needs: ordering, pagination loop, empty-result meaning, and when to prefer a sibling tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents every parameter, and the description mostly restates it (limit 1-50/default 25, direction values, query matching, cursor source). It adds little beyond the schema, and it introduces a real inconsistency by calling all arguments 'optional' while the schema marks all four as required — an agent could misread the contract from either side.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('List one page of calls'), its scope ('inbound and outbound merged'), ordering ('newest first'), and even the fields returned. It also names the sibling tools (getCallHistory, search) it is not, so an agent can separate it from app_getCall, getCallDetails, and getCallHistory without opening schemas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit routing guidance: use getCallHistory for a compact list, use search to find a call by name/phone/topic, and use this for the paged Calls inbox view. It also gives the operational rule for pagination ('when nextCursor is not null, pass it as cursor to get older calls') and the terminal condition (empty list = no match).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
bookCalendarSlotAInspect
Create one appointment in the user's connected calendar at an exact slot returned by findCalendarSlots. Show the exact calendar, date, time, timezone, title, and supplied guest details. Never invent guest contact details. REAL ACTION, not a preview: the event is written to the user's real calendar. Right before calling, show the user the exact change and get their explicit confirmation.
| Name | Required | Description | Default |
|---|---|---|---|
| start | Yes | Exact ISO-8601 slot start, including its numeric UTC offset, copied from findCalendarSlots. | |
| title | Yes | Owner-visible appointment title or purpose. | |
| extraId | Yes | Use null unless the selected slot object contains a non-empty extraId, then copy that exact value. Never invent a placeholder or copy calendarShortId or another calendar ID here. | |
| guestName | Yes | Use null unless the owner wrote the exact invitee name in a user message and approved it in the booking proposal. Never infer it from the owner profile, receptionist, agent, calendar, service, or appointment title. | |
| guestEmail | Yes | Use null unless the owner wrote the exact email address in their message and approved it in the booking proposal. A guest name is not an email. Never generate example.com, a placeholder, an inferred address, or any invented email. | |
| guestPhone | Yes | Use null unless the owner wrote the exact phone number in their message and approved it in the booking proposal. Never send an empty string, placeholder, example, inferred, or invented phone number. | |
| description | Yes | ||
| calendarShortId | Yes | Calendar ID returned with availability. Omit only when the user has one active calendar. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes beyond the annotations by stressing 'REAL ACTION, not a preview' — the event is written to the real calendar — plus the confirmation ritual, which the openWorldHint/readOnlyHint=false flags alone don't convey. It stops short of describing failure behavior when a slot has been taken or whether a retry creates a duplicate event.
Agents need to know what a tool does to the 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 short sentences, each doing distinct work: purpose, display obligations, anti-fabrication rule, and the real-action/confirmation warning. The critical mutation warning sits in the final, emphasized position with no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For an 8-required-parameter real-world booking mutation with no output schema, the description covers the preconditions and confirmation workflow well. What's missing is what the agent should expect on success (booking id, event link) and what to do if the slot is no longer available.
Complex tools with many parameters or behaviors need more documentation. Simple 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 88%, so the schema already documents nearly every parameter in detail, including the null semantics for guest fields and extraId. The description reinforces the no-invention rule for guest details but adds no syntax, format, or edge-case guidance beyond what is already in the property descriptions; baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (Create one appointment) with the exact resource (in the user's connected calendar) and a hard precondition (at an exact slot returned by findCalendarSlots). This cleanly separates it from findCalendarSlots, cancelAppointment, and scheduleCall without opening a schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly names the upstream tool that produces the slot, mandates showing calendar/date/time/timezone/title/guest details, forbids inventing guest contact details, and requires explicit user confirmation immediately before the call. Both the when and the how are spelled out.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
business_qa_createAInspect
Add one custom question and answer to the Business Profile. Short facts only, not documents or call workflows (use knowledge pages or call scenarios for those). Show the exact question and answer and get explicit approval before calling.
| Name | Required | Description | Default |
|---|---|---|---|
| answer | Yes | Short caller-facing factual answer. | |
| agentId | Yes | Owned receptionist ID: use its attached business profile. If businessProfileId is also supplied it must match. A receptionist with no business profile fails: offer to attach one with updateAgent businessProfileId, then retry after the owner approves. | |
| question | Yes | Short caller-facing factual question. | |
| businessProfileId | Yes | Owned business profile ID from business_qa_list_profiles. Omit both businessProfileId and agentId to use the default business. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare this is a non-read-only, non-destructive, non-idempotent, closed-world mutation. The description adds useful behavioral context: content must be short facts, and the exact Q&A must be shown for explicit approval before calling. It does not cover duplicate handling or return behavior, but the annotation coverage lowers that burden.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, front-loaded with the action and followed by scope exclusions and the approval requirement. Every sentence adds useful guidance with no repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a four-parameter create tool with no output schema and full schema coverage, the description provides the key content constraints and approval workflow. It is nearly complete, though it could mention duplicate handling or what happens after creation.
Complex tools with many parameters or behaviors need more documentation. Simple 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 schema already explains all four parameters in detail, including agentId/businessProfileId matching and default behavior. The description reinforces that the question and answer should be exact, but adds no parameter syntax or format details beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: add one custom question and answer to the Business Profile. It also distinguishes the tool from knowledge pages and call scenarios, so an agent can identify its role without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly limits use to short facts and names alternatives for documents and call workflows. It also adds a clear approval requirement before calling, leaving little ambiguity about when and how to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
business_qa_deleteADestructiveIdempotentInspect
Delete one Business Profile question and its answer by questionId. Name the exact question. REAL ACTION, not a preview: the question and answer are deleted and the receptionist stops using them. Right before calling, show the user the exact change and get their explicit confirmation.
| Name | Required | Description | Default |
|---|---|---|---|
| agentId | Yes | Owned receptionist ID: use its attached business profile. If businessProfileId is also supplied it must match. A receptionist with no business profile fails: offer to attach one with updateAgent businessProfileId, then retry after the owner approves. | |
| questionId | Yes | Question ID from business_qa_list. | |
| businessProfileId | Yes | Owned business profile ID from business_qa_list_profiles. Omit both businessProfileId and agentId to use the default business. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already carry destructiveHint=true and idempotentHint=true, so the safety profile is known. The description adds valuable context beyond that: it stresses this is a REAL ACTION rather than a preview, and that the receptionist stops using the deleted Q&A — a downstream effect not encoded in any structured field. It stops short of stating reversibility or error behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, front-loaded with the operation and scope, then the destructive warning, then the confirmation workflow. 'Name the exact question' is mildly redundant with the confirmation sentence, but nothing is wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive mutation with no output schema and fully documented parameters, the description covers what is destroyed, the downstream effect, and the required user-confirmation step. Missing only failure-mode detail (e.g. behavior when questionId no longer exists) which is minor.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and each of the three parameters (agentId, questionId, businessProfileId) has a detailed description including defaulting behavior and failure/retry guidance. The description only adds 'by questionId', so the schema does the heavy lifting and baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (delete), the exact resource (one Business Profile question and its answer), and the keying parameter (questionId). This is clearly distinguishable from sibling business_qa_create/update/list without opening any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives a clear precondition for use: 'Right before calling, show the user the exact change and get their explicit confirmation', plus the need to name the exact question. It does not explicitly route to alternatives (e.g. business_qa_update for edits instead of removal), so it falls short of a full 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
business_qa_listARead-onlyIdempotentInspect
List every Business Profile question with its current answer and ID: the short facts the receptionist uses on every call (hours, services, pricing, location, policies). Call it before business_qa_create, business_qa_update or business_qa_delete to see what exists and get the IDs; for a workspace with several businesses, business_qa_list_profiles lists the profiles first. Longer documents live in the Knowledge Base (knowledge_list_pages).
| Name | Required | Description | Default |
|---|---|---|---|
| agentId | Yes | Owned receptionist ID: use its attached business profile. If businessProfileId is also supplied it must match. A receptionist with no business profile fails: offer to attach one with updateAgent businessProfileId, then retry after the owner approves. | |
| businessProfileId | Yes | Owned business profile ID from business_qa_list_profiles. Omit both businessProfileId and agentId to use the default business. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare this a safe, idempotent, read-only, non-open-world operation, so the description does not need to restate safety. It adds real context beyond them: the returned items pair each question with its current answer and ID, and the ID is what feeds the create/update/delete siblings. It stops short of mentioning ordering, pagination, or what an empty profile looks like, which keeps it below a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The core action and its payoff (current answer plus ID) are front-loaded in the first sentence, and the remaining sentences are pure routing to the three relevant siblings. No redundant restatement of the tool name or annotations.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, so the description carries some of that load by naming the returned fields (question, current answer, ID), and the schema handles the identifier and failure paths. It is nearly complete for a simple listing tool, though an agent must still discover ordering and pagination behavior at call time.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, including the meaningful cases: agentId uses its attached profile and must match businessProfileId if both are supplied, an agent with no profile fails and should be fixed via updateAgent, and omitting both falls back to the default business. The description adds little parameter-level meaning of its own beyond noting that IDs come from this listing, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource — 'List every Business Profile question with its current answer and ID' — and immediately defines what a question is (hours, services, pricing, location, policies). That level of detail lets an agent distinguish this from business_qa_list_profiles and knowledge_list_pages without opening any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives explicit ordering guidance ('call it before business_qa_create, business_qa_update or business_qa_delete to see what exists and get the IDs') and routes two alternatives by condition: business_qa_list_profiles for multi-business workspaces, knowledge_list_pages for longer documents. Both the when and the when-not are covered.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
business_qa_list_profilesARead-onlyIdempotentInspect
List the businesses (Business Profiles) on this account and the receptionists attached to each. Use it to pick businessProfileId for the business_qa_* tools. Read-only.
| 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 destructiveHint=false, so "Read-only" in the description is largely redundant. The description does add genuine value by disclosing the response content (businesses plus their attached receptionists), but says nothing about volume, pagination, or ordering.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, each earning its place: what it lists, why to call it, and its safety profile. The purpose and routing hint are front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description must convey what comes back, and it does at a high level (businesses and their receptionists). It leaves the exact field shape of a profile unspecified, which is a minor gap for an agent that needs to parse the result.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so the baseline is 4; there is no parameter semantics to explain. The description does signal that the output contains a businessProfileId usable elsewhere, which is a useful pointer beyond the empty schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ("List the businesses (Business Profiles) on this account") and adds the nested content returned ("the receptionists attached to each"). This clearly distinguishes it from business_qa_list, which lists Q&A entries rather than profiles.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 agent when to reach for it: to obtain a businessProfileId for the business_qa_* tools, which names the downstream alternative family. It stops short of stating when it isn't needed (e.g., if the ID is already known), so not a full 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
business_qa_updateADestructiveIdempotentInspect
Replace the answer to one Business Profile question by questionId. Preserve exact numbers and policy facts. Show the new answer and get explicit approval before calling; update each question separately.
| Name | Required | Description | Default |
|---|---|---|---|
| answer | Yes | Short caller-facing factual answer. | |
| agentId | Yes | Owned receptionist ID: use its attached business profile. If businessProfileId is also supplied it must match. A receptionist with no business profile fails: offer to attach one with updateAgent businessProfileId, then retry after the owner approves. | |
| questionId | Yes | Question ID from business_qa_list. | |
| businessProfileId | Yes | Owned business profile ID from business_qa_list_profiles. Omit both businessProfileId and agentId to use the default business. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, idempotentHint=true, and readOnlyHint=false, so the mutation/idempotency profile is covered. The description adds genuinely new behavioral context: an approval gate before invocation and a data-integrity rule ("Preserve exact numbers and policy facts"), which is exactly the kind of value-add expected when annotations are present.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences with zero waste: the operation, the integrity constraint, and the approval workflow, in that priority order. Nothing is repeated from the schema or annotations.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive, no-output-schema mutation with rich annotations and full schema coverage, the description supplies the two things structured fields can't: the approval requirement and the factual-precision constraint. It stops short of stating failure behavior (unknown questionId, mismatch between agentId and businessProfileId beyond what the schema says), leaving a small gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and the per-parameter descriptions already explain questionId sourcing, agentId/businessProfileId fallback, and the answer format. The description's only added signal is "by questionId," which restates the schema rather than extending it, so baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ("Replace the answer to one Business Profile question") and scopes it precisely by questionId, which cleanly separates it from business_qa_create/delete/list. It never names a sibling explicitly, so an agent must infer the boundary from the verb, but the operation itself 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?
"update each question separately" rules out batching and "Show the new answer and get explicit approval before calling" gives a concrete pre-call workflow. What's missing is guidance on when to use this versus business_qa_create (e.g. when the questionId doesn't exist yet), but the usage context is otherwise clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
calendar_listARead-onlyIdempotentInspect
List every calendar connected to the receptionists with its booking settings (work hours, appointment length, buffer, timezone, double-booking, cancellation) and 4-character calendar IDs. Call first for any calendar question. Read-only.
| 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 destructiveHint=false, so 'Read-only' adds nothing; however, the description contributes real value by enumerating the returned fields and the 4-character ID format, which matters because there is no output schema. Minor gaps remain (no mention of behavior when no calendars are connected, or ordering).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, verb front-loaded, no filler. The only near-redundancy is the trailing 'Read-only', which merely echoes the annotations and costs almost nothing.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema and no parameters, the description correctly compensates by listing exactly which booking settings come back, which is what an agent needs to decide to call it. It is slightly incomplete on edge cases (empty calendar list, ordering, whether IDs are stable across calls).
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so the baseline is 4 and there is nothing for the description to disambiguate. The mention of '4-character calendar IDs' describes returned data rather than inputs, which is useful but not a parameter 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?
States a specific verb and resource ('List every calendar connected to the receptionists') and enumerates the payload it returns (work hours, appointment length, buffer, timezone, double-booking, cancellation, 4-character IDs). This is clearly distinguishable from siblings like calendar_list_events, calendar_update_settings, and findCalendarSlots without opening a 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?
'Call first for any calendar question' gives an explicit entry-point rule that tells the agent when to reach for this tool before others. It stops short of naming the alternatives or stating exclusions (e.g., that event listing lives in calendar_list_events), so it is clear context rather than a full routing map.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
calendar_list_eventsARead-onlyIdempotentInspect
List the events already booked on one date (YYYY-MM-DD in the owner's timezone, default today) across every connected calendar, so you can answer "what's on my calendar". Use findCalendarSlots to find free times for a booking, findAppointments for appointments SkipCalls booked, and calendar_list to see which calendars are connected.
| Name | Required | Description | Default |
|---|---|---|---|
| date | Yes | Date in YYYY-MM-DD format. Defaults to today. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, non-destructive, so the safety profile is covered. The description still adds real behavior: results aggregate across every connected calendar, and the date is interpreted in the owner's timezone with today as the default. It stops short of describing ordering, limits, or what fields come back per event.
Agents need to know what a tool does to the 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: the first front-loads what the tool returns and its scope, the second disambiguates against three siblings. No repeated annotation content and no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
A one-parameter read tool with full schema coverage and a complete annotation set needs little more; the description covers scope, timezone, default, and sibling disambiguation. The absence of an output schema is minor for a simple event list.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline would be 3, but the description adds the timezone interpretation of the date ('YYYY-MM-DD in the owner's timezone, default today'), which the schema's parameter text does not state. That is genuine meaning beyond the structured 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?
States a specific verb and resource ('List the events already booked'), plus scope ('on one date ... across every connected calendar') and an answering use case. It is immediately distinguishable from findCalendarSlots, findAppointments, and calendar_list without opening any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly routes the agent: use findCalendarSlots for free times, findAppointments for appointments SkipCalls booked, and calendar_list for connected calendars. Both the when-to-use and the when-to-use-something-else conditions are named.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
calendar_update_settingsADestructiveIdempotentInspect
Change the booking settings of one connected calendar by calendarShortId; send only the fields that change. Ambiguous "until/close" times: ask once whether it is the last appointment start or end; if still unclear treat it as the last start and say so. workDays only opens days (others are kept); closeWorkDays closes exact days. Square, Calendly, TidyCal, Cal.com and GoHighLevel calendars reject hours, length, buffer and timezone edits (set them in that provider). Get explicit approval before calling.
| Name | Required | Description | Default |
|---|---|---|---|
| isActive | Yes | For update. Enable/disable booking on this calendar. | |
| timezone | Yes | For update. IANA timezone (e.g., "America/Los_Angeles"). | |
| workDays | Yes | For update. Days to keep active or open. Existing active days omitted from this array are preserved. To close specific days, use closeWorkDays. To stop all booking, use isActive=false. | |
| description | Yes | For update. Description shown to the AI (e.g. "New patient — 40 min"). | |
| bufferMinutes | Yes | For update. Buffer between appointments in minutes. | |
| closeWorkDays | Yes | For update. Exact active days to close. Their stored hours are removed. Never infer this from a partial workDays list. | |
| showEventNames | Yes | For update. Share event titles with callers vs busy/free only. | |
| workHoursByDay | Yes | For update. Per-day work hours in HHMM format, e.g. {"MONDAY": [900, 1730]}. Keys must be exact uppercase weekday names MONDAY-SUNDAY, without extra quotes. Never infer hours from ambiguous cutoff/close/until language; first ask whether the named time is the final appointment start or final appointment end. | |
| calendarShortId | Yes | 4-character calendar ID from calendar_list (for example "a1b2"). | |
| defaultDuration | Yes | For update. Default appointment length in minutes. | |
| allowCancellation | Yes | For update. Let the AI cancel or move a caller's upcoming booking, matched by caller ID only. | |
| allowDoubleBooking | Yes | For update. Allow overlapping appointments. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations (destructiveHint=true, idempotentHint=true), the description discloses provider-specific rejections for Square, Calendly, TidyCal, Cal.com, and GoHighLevel, the fact that closeWorkDays removes stored hours, and the requirement to obtain explicit approval. These are meaningful behavioral constraints an agent could not infer from the annotations alone.
Agents need to know what a tool does to the 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 purpose and required identifier are front-loaded, and each subsequent sentence carries a rule that prevents a concrete failure mode. The text is dense and packs several rules into long clauses, but little is genuinely redundant.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive 12-parameter mutation with no output schema, the description covers the critical gaps: approval, provider restrictions, partial-update behavior, and ambiguity handling. It does not describe the result of the call or what happens to omitted versus null fields, which is a minor remaining gap given the annotations and 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?
With 100% schema coverage, the baseline is 3, but the description adds cross-parameter meaning the schema does not: workDays opens days while others are preserved, closeWorkDays closes exact days and strips stored hours, and ambiguous cutoff language must be resolved before setting workHoursByDay. It does not add much for straightforward fields like isActive or timezone, but the risky parameters are well explained.
Input schemas describe structure but not intent. Descriptions should explain non-obvious 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 and resource: "Change the booking settings of one connected calendar by calendarShortId." It is clearly distinguishable from siblings such as calendar_list, update_work, and updateTimezone because it scopes the action to a single calendar's booking configuration.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives explicit operational guidance: send only changed fields, use workDays only to open days, use closeWorkDays to close exact days, do not infer closeWorkDays from a partial list, and ask once about ambiguous until/close times. It also names when the tool cannot apply edits (provider-hosted calendars) and requires explicit approval before calling.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
call_scenarios_createAInspect
Create one Call Scenario (Skill) on a receptionist: when it applies and the step-by-step guide the receptionist follows. Keep it focused and under 6,000 characters; split unrelated flows. Requires PRO or higher (Growth on older web plans). Call listCallScenarios first, show the exact change, and wait for explicit approval; set confirmed=true only after it.
| Name | Required | Description | Default |
|---|---|---|---|
| title | Yes | ||
| agentId | Yes | ||
| scenario | Yes | ||
| confirmed | Yes | Must be true only after the user explicitly approved this exact scenario change in the immediately previous turn. | |
| isEnabled | Yes | ||
| whenToUse | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare this is a non-destructive, non-idempotent, closed-world write. The description adds real context beyond that: a PRO/Growth plan prerequisite, a ~6,000-character payload ceiling, and a mandatory human-approval protocol driving the confirmed flag. It stops short of saying what happens when the limit is exceeded or on duplicate creation, so it is strong but not exhaustive.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Purpose and scope are front-loaded in the first clause, then constraints and the approval workflow follow in the order an agent needs them. Dense but every sentence carries information; the semicolon-chained clauses make it slightly harder to scan than a fully structured version.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 6-required-param mutation with no output schema, the description covers the operational essentials: plan gating, size limits, and the approval gate that governs confirmed. The remaining weakness is underspecified field semantics (notably isEnabled nullability and the title/agentId relationship).
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is only 17% — effectively just the confirmed field, which the description merely restates. It does add meaning for scenario ('step-by-step guide the receptionist follows') and whenToUse ('when it applies'), but title, agentId, and especially the nullable isEnabled semantics (what null means versus false) are left entirely to the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (Create) and resource (one Call Scenario / Skill on a receptionist) and immediately defines the content of the object: when it applies plus a step-by-step guide. That clearly separates it from call_scenarios_update, call_scenarios_delete, and call_scenarios_reorder without opening any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit sequencing and gating: check plan tier, call listCallScenarios first, show the exact change, wait for explicit approval, then set confirmed=true. It also tells the agent to keep one scenario focused and split unrelated flows, which is genuine usage guidance rather than restated purpose.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
call_scenarios_deleteADestructiveIdempotentInspect
Delete one Call Scenario by scenarioId. To pause it instead, use call_scenarios_update with isEnabled=false. Requires PRO or higher (Growth on older web plans). Call listCallScenarios first, show the exact change, and wait for explicit approval; set confirmed=true only after it. REAL ACTION, not a preview: the scenario is deleted from the live receptionist. Right before calling, show the user the exact change and get their explicit confirmation.
| Name | Required | Description | Default |
|---|---|---|---|
| agentId | Yes | ||
| confirmed | Yes | Must be true only after the user explicitly approved this exact scenario change in the immediately previous turn. | |
| scenarioId | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and readOnlyHint=false, but the description adds material context beyond them: that this mutates the live receptionist rather than a draft ("REAL ACTION, not a preview"), that a specific confirmation protocol is required, and that PRO+ entitlement is needed. That is exactly the extra context annotations cannot express.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the identity and the pause-alternative before the operational cautions, which is the right order. Slightly marred by restating the confirmation requirement twice ("show the exact change... wait for explicit approval" then "Right before calling, show the user the exact change and get their explicit confirmation") — defensible emphasis for a destructive op, but redundant.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 3-parameter destructive tool with no output schema, everything an agent needs is present: entitlement check, the lookup call to run first, the human-approval gate, and the irreversible live-action warning. Nothing consequential is left to inference.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 33% — only `confirmed` is documented in the schema, and the description's gating language reinforces its semantics well. However, `agentId` is required yet never explained in either place, and `scenarioId` is only named, not characterized. Partial compensation, not full.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
"Delete one Call Scenario by scenarioId" gives an unambiguous verb, resource, and lookup key, and immediately distinguishes itself from the two relevant siblings (call_scenarios_update for pausing, listCallScenarios for enumeration). An agent can place this tool in the family without reading any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Names the alternative explicitly (use call_scenarios_update with isEnabled=false to pause instead), states the prerequisite sequence (listCallScenarios first, show change, wait for approval, then set confirmed=true), and adds the plan-tier gate. When-to-use, when-not-to-use, and prerequisites are all present.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
call_scenarios_reorderADestructiveIdempotentInspect
Set the order of a receptionist's Call Scenarios. scenarioIds lists the scenarios top first. Requires PRO or higher (Growth on older web plans). Call listCallScenarios first, show the exact change, and wait for explicit approval; set confirmed=true only after it.
| Name | Required | Description | Default |
|---|---|---|---|
| agentId | Yes | ||
| confirmed | Yes | Must be true only after the user explicitly approved this exact scenario change in the immediately previous turn. | |
| scenarioIds | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already flag destructiveHint=true and idempotentHint=true, but the description adds what the annotations cannot: the plan gate, the mandatory user-approval protocol, and the fact that the destructive effect is limited to ordering (content is untouched) with scenarioIds interpreted top-first. That is real behavioral value 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?
Three short sentences, front-loaded with the action and ordering rule, followed by the plan gate and the approval protocol. No filler; every sentence constrains agent behavior.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive, no-output-schema mutation tool this covers action, ordering, permissions, and the approval safeguard. The remaining gap is whether scenarioIds is a full replacement list or a partial one, which matters for something marked destructive.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 33% (only confirmed is documented), so the description must compensate. It does explain scenarioIds ordering semantics (top first) but leaves agentId entirely unexplained, and it never says whether the array must list all scenarios or what happens to omitted ones.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: 'Set the order of a receptionist's Call Scenarios', and clarifies that scenarioIds is top-first. This clearly separates it from call_scenarios_create/delete and listCallScenarios, though it never explicitly distinguishes it from call_scenarios_update, which might also touch 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?
Gives an explicit prerequisite workflow: call listCallScenarios first, show the exact change, wait for explicit approval, and only then set confirmed=true. It also names the plan requirement (PRO or Growth on older plans), so the agent knows when the call is even permitted.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
call_scenarios_updateADestructiveIdempotentInspect
Change the title, when-to-use selector, guide text or enabled state of one Call Scenario by scenarioId. Send only the fields that change. Requires PRO or higher (Growth on older web plans). Call listCallScenarios first, show the exact change, and wait for explicit approval; set confirmed=true only after it.
| Name | Required | Description | Default |
|---|---|---|---|
| title | Yes | ||
| agentId | Yes | ||
| scenario | Yes | ||
| confirmed | Yes | Must be true only after the user explicitly approved this exact scenario change in the immediately previous turn. | |
| isEnabled | Yes | ||
| whenToUse | Yes | ||
| scenarioId | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, idempotentHint=true, and readOnlyHint=false; the description adds genuinely new context, namely the paid-plan requirement, partial-update semantics, and an approval gate that explains why confirmed exists. It does not spell out what is lost or whether the change is reversible, so it stops short of the top score despite strong additions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three tight sentences; the mutation scope comes first, then the plan prerequisite, then the approval workflow. Nothing is redundant and the ordering matches the order an agent needs the information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive mutation with no output schema, the description supplies everything that matters: prerequisites, the precondition call, the partial-update contract, and the confirmation requirement. Safety context comes from annotations, so no critical gap remains.
Complex tools with many parameters or behaviors need more documentation. 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 schema description coverage at 14%, the description carries most of the load: it maps title, whenToUse, scenario (guide text), and isEnabled to their meanings and reinforces the confirmed gate. agentId is never explained and the null-means-unchanged convention is only implied by 'send only the fields that change', so a small gap remains.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (change) and resource (one Call Scenario) plus the exact mutable fields: title, when-to-use selector, guide text, enabled state, keyed by scenarioId. This clearly separates it from call_scenarios_create, delete, and reorder, which do different things to the same object.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit workflow: call listCallScenarios first, show the exact change, wait for explicit approval, then set confirmed=true. It also states the plan prerequisite (PRO or higher, Growth on older web plans) and the partial-update rule, so the agent knows both when to call it and what sequence to follow.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cancelAppointmentADestructiveInspect
Cancel one exact SkipCalls-tracked appointment at the calendar provider. Use an appointment ID returned by findAppointments. Show the exact appointment, calendar, date, time, and timezone. REAL ACTION, not a preview: the appointment is cancelled in the real calendar and cannot be undone automatically. Right before calling, show the user the exact change and get their explicit confirmation.
| Name | Required | Description | Default |
|---|---|---|---|
| appointmentId | Yes | Exact tracked appointment ID returned by findAppointments. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already flag destructiveHint=true and readOnlyHint=false, and the description goes well beyond them: it warns this is a REAL ACTION not a preview, states the change is irreversible ('cannot be undone automatically'), and mandates showing the user the exact change plus obtaining explicit confirmation first. That is exactly the operational context annotations cannot 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?
Front-loaded with the action, then the prerequisite, then the safety flow. Slight redundancy between 'Show the exact appointment, calendar, date, time, and timezone' and 'show the user the exact change and get their explicit confirmation,' which could be merged, keeping it from a 5.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With one 100%-documented parameter, rich annotations, and no output schema, the description covers sourcing, safety, and irreversibility well. It never indicates what the tool returns (cancellation confirmation, provider errors), which would be useful for a destructive one-param call with no output schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the single parameter is already documented as 'Exact tracked appointment ID returned by findAppointments.' The description reinforces exact-match sourcing but adds no format, validation, or failure semantics beyond the schema. Baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Cancel one exact SkipCalls-tracked appointment at the calendar provider'), with a scope qualifier ('one exact') that distinguishes it from the sibling bulk/other-resource cancellers like cancelCall and cancel_reminder. An agent can route correctly without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly names the prerequisite source ('Use an appointment ID returned by findAppointments') and prescribes a confirmation workflow before invocation. It stops short of naming when-not-to-use cases or pointing to sibling tools for non-appointment cancellation, but the context is otherwise clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cancelCallADestructiveInspect
Cancel a scheduled outbound call that has not been placed yet. Pass the call id from getCallHistory or scheduleCall. REAL ACTION, not a preview: the call is cancelled and cannot be restored. Right before calling, show the user the exact change and get their explicit confirmation.
| Name | Required | Description | Default |
|---|---|---|---|
| callId | Yes | UUID of the scheduled outbound call to cancel: the call id returned by getCallHistory or search, not a phone number or name. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark it destructive and not read-only, but the description adds important behavior beyond them: it is a real action, not a preview, and the cancellation cannot be restored. It also prescribes a confirmation workflow, which is exactly the kind of context an agent needs for a destructive operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three tight sentences with no waste. The purpose and scope are front-loaded, followed by parameter sourcing and then the irreversible-action warning.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter destructive mutation with no output schema, the description covers the essential missing context: what it does, the prerequisite state, the irreversibility, and the required user confirmation. An agent has enough to call it correctly and safely.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the parameter is already documented, but the description adds useful source context by naming getCallHistory and scheduleCall as origins for the call id. The schema's warning that it is a UUID rather than a phone number or name is also reinforced by the description's focus on call id.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: cancel a scheduled outbound call that has not been placed yet. The scope condition clearly distinguishes it from scheduling or inspecting calls, and the required call id origin points to related 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?
Gives clear context for when to use it: only for scheduled outbound calls not yet placed, and requires explicit user confirmation immediately before invocation. It does not explicitly name alternatives such as reporting an issue for already-placed calls, so it falls short of full when/when-not guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cancel_reminderADestructiveInspect
Cancel one pending reminder the user no longer wants, by the id from create_reminder or list_work (view snoozed). It will not fire; the item is closed as handled and shows under the done view, so set a new one with create_reminder if needed. Only reminders can be cancelled here: for other Needs you items use update_work.
| Name | Required | Description | Default |
|---|---|---|---|
| workItemId | Yes | Reminder id from createReminder or listWork (view=snoozed). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the destructiveHint annotation, the description explains the outcome: the reminder will not fire, the item is closed as handled, and it appears under the done view. That is meaningful behavioral context for a destructive mutation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the core action and then adds only useful constraints and alternatives. Every sentence contributes to correct tool selection or invocation.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter destructive tool with no output schema, the description covers purpose, id source, outcome, and sibling alternatives. Nothing material is missing for correct use.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and the description does not add syntax or format details beyond the schema's workItemId description. The baseline of 3 is appropriate because the schema already fully documents the single parameter.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description specifies a clear verb and resource: cancel one pending reminder. It also scopes the action to reminders only and distinguishes sibling tools create_reminder and update_work, so an agent can select it confidently.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 states when to use this tool (a pending reminder the user no longer wants) and when not to use it (other Needs you items should use update_work). It also points to create_reminder when a new reminder is needed after cancellation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_contact_noteAInspect
Add a new note to a contact's record, e.g. a preference or detail the owner wants remembered. The note appears on the contact page and in get_contact_timeline; existing notes are never changed. Returns the new note {id, content, createdAt}. To change contact fields (name, email, tags, the profile notes field) use update_contact instead; to remind someone to act later use create_reminder.
| Name | Required | Description | Default |
|---|---|---|---|
| content | Yes | Note text, saved as written (trimmed), e.g. "Prefers morning appointments; gate code 4412". | |
| contactId | Yes | UUID of the contact the note belongs to. Get it from search (scope contacts). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds real context beyond the annotations: the note becomes visible on the contact page and in get_contact_timeline, existing notes are immutable, and the return payload {id, content, createdAt} is spelled out. The description does not cover permission/auth requirements or rate limits, and it does not explicitly say the write is additive-only vs. destructive, but the immutability statement largely covers that.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the action and its purpose, then side-effect, then return value, then sibling routing in one compact paragraph. Slightly dense and the return-shape detail could be trimmed, but no sentence is filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-parameter creation tool with no output schema, the description covers purpose, side effects and visibility, immutability of existing notes, return shape, and alternative tools. Nothing needed to call it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and both parameters are documented in the schema, so the baseline is 3. The description only loosely adds meaning by characterizing content as a remembered preference and pointing to where contactId comes from, which duplicates the schema's own note about using search (scope contacts).
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource (add a new note to a contact's record) and clarifies what a note is with an example. It explicitly distinguishes itself from update_contact (contact fields) and create_reminder, so an agent can separate it from the closest siblings without reading schemas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit when-to-use ('a preference or detail the owner wants remembered'), when-not-to-use with named alternatives for both competing intents: update_contact for changing contact fields and create_reminder for reminders. Exclusions are concrete and route the agent correctly.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_reminderAInspect
Create a reminder when the user says "remind me …": it waits under Later in Needs you and, at the given time, notifies them with a SkipCalls chat ready to continue. Returns the reminder id and the time it will fire. To cancel it use cancel_reminder; to move it use update_work (action later). For a note that should just stay on a customer record, use create_contact_note instead.
| Name | Required | Description | Default |
|---|---|---|---|
| at | Yes | When to remind. | |
| note | Yes | One context line shown when it fires, e.g. "You paused while adding the office number as a transfer." Only what the task does not already say; omit it when there is nothing to add. | |
| text | Yes | What to remind the owner of, as a short task ("Finish setting up call transfers"). | |
| contactId | Yes | A real contact id (from getWork, listWork or the CRM) when the reminder is about that customer. null for anything else, such as finishing a setup step; never a made-up or all-zero id. | |
| timeNamed | Yes | True when the owner named a clock time ("at 9 PM"); false for "tomorrow", "in 2 hours". A time that was not named never fires between 9 PM and 8 AM. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only declare that this is a non-read-only, non-destructive, closed-world write. The description adds real context beyond that: the reminder surfaces under Later in Needs you, fires a notification with a SkipCalls chat ready to continue, and returns the reminder id plus fire time. It stops short of saying whether the chat is created at schedule time or fire time, which is the one behavior an agent might still guess at.
Agents need to know what a tool does to the 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 doing distinct work: trigger, placement/notification behavior, return value, and sibling routing. Front-loaded with the trigger phrase. Slightly dense with three sibling references in one sentence, but nothing is wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 5-required-param mutation with no output schema, the description covers the missing return-value information (id and fire time) and the user-visible effect of the call. Annotations carry the safety profile and the schema carries the parameters, so nothing an agent needs is absent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so every parameter is already documented in detail (including the null semantics for note and contactId, and the 9 PM–8 AM rule for timeNamed). The description adds only "at the given time" and does not enrich any parameter beyond the schema, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ("Create a reminder") plus the triggering user phrasing "remind me …", so an agent can match intent directly. It also distinguishes itself from create_contact_note, cancel_reminder, and update_work by name.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit when-to-use (user says "remind me"), explicit when-not alternatives for two adjacent needs: cancellation routes to cancel_reminder, rescheduling to update_work (action later), and a note that should stay on a customer record routes to create_contact_note instead.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_upload_linkAInspect
Generate a public upload link for a contact so they can attach files (photos, PDFs, docs). Returns the URL and expiry. Send the URL to the customer via SMS or email yourself.
| Name | Required | Description | Default |
|---|---|---|---|
| contactId | Yes | Contact UUID. Get it from search (scope contacts); it is not a phone number. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only say this is not read-only and not destructive; the description adds the material behavioral facts: the link is PUBLIC, it is scoped to a contact, it expires, and the agent is responsible for delivery. That public-exposure disclosure is exactly the kind of context annotations cannot convey. It stops short of saying how long the expiry is, whether the link is single-use, or whether generating a new link revokes an old one.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, front-loaded with the action and its purpose, then the return value, then the operational caveat. No filler and nothing repeated from the schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter tool with no output schema, the definition covers purpose, the return value (URL and expiry), and who delivers the link. The remaining gap is link lifecycle detail – expiry duration and revocation behavior – which matters for a public, externally shared artifact but is not strictly needed to invoke the tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, and the schema already documents contactId as a UUID with a pointer to search (scope contacts) and a warning that it is not a phone number. The description adds nothing further about the parameter, so this is the baseline case where the schema does all the work.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Generate a public upload link for a contact') plus the file types it accepts, so the agent knows exactly what capability this exposes. It also implicitly carves out that delivery is the caller's job ('Send the URL ... yourself'), which separates it from sendSms, though it never names a sibling tool outright.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The context of use is clear: a contact needs to attach files and the agent must hand them a link externally. The 'yourself' clause usefully signals that a separate messaging step is required, but there is no explicit when-not guidance (e.g. for existing files use list_customer_files) or stated prerequisites beyond the contactId.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
estimates_confirm_assumptionAIdempotentInspect
Accept the open assumption shown by estimates_get as correct, so it is closed. To correct it instead, use estimates_update_prices with answersAssumption=true. Owner or team admin; PRO and above.
| Name | Required | Description | Default |
|---|---|---|---|
| businessProfileId | Yes | Only when the account has several businesses; omit for the default business. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, idempotentHint=true and destructiveHint=false, so the safety profile is largely covered. The description adds genuinely non-structured context: the role/permission gate and plan tier required, plus the state effect of closing the assumption. It does not mention reversibility (e.g. estimates_undo) or what happens to the estimate afterwards, which keeps it short of a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, zero filler: purpose first, alternative second, prerequisites last. Every clause carries actionable information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter mutation with no output schema, the description covers the action, the alternative, and the permission/plan requirements. The only gap is what the agent should expect after confirmation — e.g. whether the accepted price becomes locked or can be undone.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and the single parameter businessProfileId is documented in the schema with its 'omit for the default business' semantics. The description adds nothing about it, so the baseline 3 for schema-covered parameters applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Uses a specific verb ('Accept') on a specific resource ('the open assumption shown by estimates_get') and states the resulting state change ('so it is closed'). It also names the sibling that performs the contrasting action, so an agent can distinguish it from estimates_update_prices and estimates_get immediately.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states the condition for use (there is an open assumption to accept) and names the alternative path with the exact parameter needed ('use estimates_update_prices with answersAssumption=true'). It also lists prerequisites: owner or team admin, PRO plan and above.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
estimates_getARead-onlyIdempotentInspect
Read the owner's Estimates prices in plain words, any open assumption, and whether Estimates and quoting on calls are on. Call first. Read-only. Owner or team admin; PRO and above.
| Name | Required | Description | Default |
|---|---|---|---|
| businessProfileId | Yes | Only when the account has several businesses; omit for the default business. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover readOnly/idempotent/non-destructive, so the bar is lower, and the description still adds real context: required access level (owner or team admin; PRO plan and above) and a preview of what the read returns (prices, open assumption, on/off flags). It does not mention rate limits or pagination, but for a single-object read that is minor.
Agents need to know what a tool does to the 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 short sentences, with the action front-loaded and the constraint/permission notes trailing. Efficient, though 'in plain words' and the double 'Essays/Estimates' phrasing are read twice before parsing cleanly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. 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 compensates by enumerating the three things returned plus the access requirement and ordering hint. A single-optional-param read tool needs little more; only the return shape (structured object vs. text) remains unspecified.
Complex tools with many parameters or behaviors need more documentation. 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 description coverage, so the schema already explains that businessProfileId should be omitted for the default business. The description adds nothing about the parameter; baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (read) and concrete resources: Estimates prices, any open assumption, and whether Estimates and quoting-on-calls are enabled. That distinguishes it from the write-side siblings (estimates_update_prices, estimates_set_enabled), though it never names them explicitly and the phrase 'prices in plain words' is slightly awkward.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'Call first' is an explicit sequencing instruction that tells the agent to hit this before the other estimates_* tools — genuinely actionable ordering guidance. It lacks an explicit 'use X instead when...' exclusion, so it stops short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
estimates_set_enabledAIdempotentInspect
Turn Estimates on or off. Prices are kept either way. Owner or team admin; PRO and above.
| Name | Required | Description | Default |
|---|---|---|---|
| enabled | Yes | true = on, false = off. | |
| businessProfileId | Yes | Only when the account has several businesses; omit for the default business. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare this is an idempotent, non-destructive write. The description adds important context beyond annotations: prices are retained either way, and the caller must be an owner or team admin on PRO or above.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences with the action front-loaded and no wasted wording. The side-effect and permission details are compactly included.
Shorter descriptions cost fewer tokens and are easier for agents to parse. 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 toggle with complete schema coverage and annotations, the description supplies the key side effect and authorization requirements. No output schema exists, and none is needed for this operation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so both parameters are already documented in the schema. The description adds no parameter-specific syntax or format details beyond what the schema provides, making the baseline 3 appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: turning Estimates on or off. It also distinguishes the action from sibling tools like estimates_update_prices by noting that prices are kept either way.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives clear context for enabling or disabling Estimates and states the required role and plan level. It does not explicitly name alternatives or when not to use this tool, so it falls short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
estimates_set_quote_on_callsAIdempotentInspect
Allow or stop the receptionist saying estimate prices to callers on calls. Owner or team admin; PRO and above.
| Name | Required | Description | Default |
|---|---|---|---|
| enabled | Yes | true = on, false = off. | |
| businessProfileId | Yes | Only when the account has several businesses; omit for the default business. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare this is a non-read-only, non-destructive, idempotent mutation, so the bar is lower. The description adds genuinely new behavioral context the annotations lack: the authorization role and plan tier required. It doesn't say what the receptionist actually does when quoting is off (refuse vs. deflect), which keeps it from a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, zero waste, with the functional effect front-loaded and the access constraint following. Nothing is padded or repeated.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple two-parameter toggle with full schema coverage, annotations, and no output schema, this is nearly sufficient — action, scope, and prerequisites are all present. The only real gap is disambiguation from estimates_set_enabled, which matters given how many estimates_* siblings exist.
Complex tools with many parameters or behaviors need more documentation. Simple 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 both parameters are already documented, and the description's 'allow or stop' phrasing merely mirrors the boolean 'enabled' semantics. Baseline 3 is appropriate — no syntax or edge-case detail is added beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb pair ('Allow or stop') and a concrete resource ('the receptionist saying estimate prices to callers on calls'), making the effect unambiguous. However, it never distinguishes itself from the similarly named sibling estimates_set_enabled, leaving an agent to guess which switch governs what.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides clear gating context ('Owner or team admin; PRO and above') that tells the agent who can successfully call it. It stops short of naming an alternative or exclusion — notably estimates_set_enabled — so the selection guidance is incomplete rather than absent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
estimates_start_overADestructiveIdempotentInspect
Delete the Estimates prices and their Undo copy. Owner or team admin; PRO and above. REAL ACTION, not a preview: every price and its Undo copy are deleted for good; say it cannot be undone. Right before calling, show the user the exact change and get their explicit confirmation.
| Name | Required | Description | Default |
|---|---|---|---|
| businessProfileId | Yes | Only when the account has several businesses; omit for the default business. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare destructiveHint=true, but the description adds the details that actually matter: the Undo copy is destroyed too, the effect is permanent, and the agent is instructed to tell the user it cannot be undone before proceeding. Permission scoping (owner/team admin, PRO+) and the mandatory confirmation step are context the annotations do not carry.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the destructive action and its irreversibility, with the confirmation requirement placed last as the immediate pre-call step. The warning is stated twice in close succession ('REAL ACTION, not a preview' and 'deleted for good; say it cannot be undone'), which is defensible emphasis for a destructive tool but slightly redundant.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter destructive tool with full annotation coverage and no output schema, this covers what an agent needs: what is deleted, who may do it, that it is irreversible, and the confirmation gate. Nothing required for a correct, safe invocation 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?
There is one parameter and the schema documents it at 100% coverage, including the 'omit for the default business' rule. The description never mentions businessProfileId, so it adds nothing beyond the schema — baseline 3 is appropriate here.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource with unusual precision: it deletes the Estimates prices *and their Undo copy*, which is what separates it from a plain price update or an undo. An agent reading only this line knows exactly what object is being cleared and what the resulting state is.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives prerequisites (Owner or team admin; PRO and above) and an explicit pre-call workflow (show the exact change, get explicit confirmation). It also contrasts with a preview path via 'REAL ACTION, not a preview', implicitly routing away from the try/preview sibling, though it never names estimates_try, estimates_undo, or estimates_update_prices as alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
estimates_tryARead-onlyIdempotentInspect
Show the estimate a caller who says the given words would get from the current prices. Nothing is saved. Owner or team admin; PRO and above.
| Name | Required | Description | Default |
|---|---|---|---|
| text | Yes | What a caller would say ("I need two rooms and stairs cleaned"). | |
| businessProfileId | Yes | Only when the account has several businesses; omit for the default business. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint/idempotent/non-destructive; the description adds beyond that by confirming the dry-run semantics ('Nothing is saved') and by disclosing role and plan gating (Owner or team admin; PRO and above). It does not cover edge behavior, e.g. what happens when no prices are configured for the account.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences ordered action → safety → authorization, with zero filler. The terse 'Owner or team admin; PRO and above' fragment is compressed but still readable as a 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?
For a two-parameter, fully described, annotation-covered read tool this is nearly sufficient: purpose, non-persistence, and authorization are all stated. The main gap is that with no output schema, the description could say what the returned estimate contains (e.g. price range or line items), which the agent currently cannot infer.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and both parameters are documented there, so baseline 3 applies. The description reinforces the intent of 'text' by framing it as what a caller would say, but adds no syntax, length, or format 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?
Names a specific verb and resource (show the estimate) and pins down the exact scenario: a simulated caller utterance priced against current prices. 'Nothing is saved' implicitly separates it from the persisted-estimate siblings (estimates_get), but no sibling is named, so differentiation is by implication rather than explicit routing.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives clear invocation context and hard prerequisites ('Owner or team admin; PRO and above') that an agent must check before calling. It never states exclusions or points at alternatives such as estimates_get or estimates_update_prices, so the when-not-to-use case is left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
estimates_undoADestructiveInspect
Put back the Estimates prices from before the last estimates_update_prices change, when the owner says the change was wrong ("undo that"). Only one Undo step is kept; with no earlier change it says there is nothing to undo and changes nothing. Use estimates_update_prices for a new change and estimates_start_over to delete all prices. Owner or team admin; PRO and above.
| Name | Required | Description | Default |
|---|---|---|---|
| businessProfileId | Yes | Only when the account has several businesses; omit for the default business. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the annotations by disclosing the single-level undo history, the no-op behavior with a clear message when no prior change exists, and the authorization/plan gates (owner or team admin; PRO and above). The annotations already flag destructive/non-idempotent, so those need no restating; what's missing is scope — whether it only reverses estimates_update_prices and leaves other estimate setting changes (e.g., set_quote_on_calls) untouched.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the action, then the trigger, then edge-case behavior, then sibling routing and permissions — a logical order with no filler. The phrasing 'Put back the Estimates prices' is slightly awkward but does not cost comprehension.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter mutation with annotations and no output schema, this covers authorization, edge-case behavior, statefulness, and sibling routing well. Return shape and interaction with other estimate-mutating tools are the only unaddressed pieces, and neither is strictly required here.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and businessProfileId is fully documented in the schema itself, including the multi-business case. The description adds nothing about the sole parameter, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('put back the Estimates prices') and pins the exact scope: the state prior to the last estimates_update_prices call. The three sibling price tools (estimates_update_prices, estimates_start_over, estimates_undo) are cleanly separable from this sentence alone.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit trigger ('when the owner says the change was wrong, "undo that"') and names both alternatives with the condition that selects them: estimates_update_prices for a new change, estimates_start_over to delete all prices. The one-step limit also implicitly defines when this tool is not applicable.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
estimates_update_pricesADestructiveInspect
Change or add Estimates prices from the owner's exact words, passed verbatim. The previous prices stay available to estimates_undo. Owner or team admin; PRO and above.
| Name | Required | Description | Default |
|---|---|---|---|
| text | Yes | The owner's own words about the prices or the change, copied verbatim from their message ("stairs are $45 per flight now"). Never paraphrase or rewrite as a list. | |
| answersAssumption | Yes | true when the owner's words correct the open assumption shown by estimates_get, so it is closed. | |
| businessProfileId | Yes | Only when the account has several businesses; omit for the default business. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and idempotentHint=false; the description adds the crucial fact that prior prices survive in estimates_undo, downgrading apparent risk, and states the authorization/plan requirement. It still does not say whether the change applies immediately or how partial or ambiguous input is handled.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, no filler, with the core action and its input constraint front-loaded and the escape hatch and permissions trailing. Every clause carries information an agent needs.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive three-parameter mutation with no output schema, the definition supplies authorization, recoverability, and input format. What remains unstated is the effect model (does the supplied text replace or append to existing prices) and error behavior on ambiguous wording.
Complex tools with many parameters or behaviors need more documentation. Simple 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 text parameter's description already spells out the verbatim, no-paraphrase rule with an example. The description's 'passed verbatim' phrasing reinforces that constraint but adds no new meaning for answersAssumption or businessProfileId, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb pair ('Change or add') and resource ('Estimates prices'), plus the defining constraint that the input is the owner's exact words. It also names estimates_undo as the counterpart, so an agent can separate this from the rollback sibling without opening either schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives concrete preconditions ('Owner or team admin; PRO and above') and points at estimates_undo as the recovery path, which implies when not to use this tool for restoring. It does not contrast against close siblings like estimates_try or estimates_confirm_assumption, so the routing guidance is clear but not exhaustive.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
findAppointmentsARead-onlyInspect
Find appointments tracked by SkipCalls using a guest name, phone, email, title, period, or exact ISO date range. This is read-only and does not search free time or change calendar configuration.
| Name | Required | Description | Default |
|---|---|---|---|
| to | Yes | Inclusive ISO-8601 upper bound with numeric UTC offset. | |
| from | Yes | Inclusive ISO-8601 lower bound with numeric UTC offset. | |
| limit | Yes | Maximum appointments to return. Up to 20; larger values are capped to 20. | |
| period | Yes | ||
| search | Yes | Guest name, phone, email, or appointment title. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false, and openWorldHint=false, so 'this is read-only' is largely redundant. The description does add real scope information — it searches only appointments tracked by SkipCalls, not free/busy — but says nothing about result ordering, the 20-item cap behavior, or what happens when all-nullable filters are omitted. With annotations covering the safety profile, this is adequate but thin.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, zero waste, with the primary capability front-loaded and the disambiguation trailing. Nothing repeats the schema or the annotations verbatim.
Shorter descriptions cost fewer tokens and are easier for agents to parse. 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 search tool with no output schema, the description should clarify how filters interact (AND vs. OR across search/period/from/to) and what the result set looks like, since there is no output schema to fall back on. It covers the what and the not-what, but leaves the combination semantics and return shape implicit.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 80%, so the schema carries most of the load, including the limit cap and the ISO-8601 offset requirement. The description names the searchable fields but adds no meaning for the undocumented 'period' enum (upcoming/past/all) and does not explain how search, period, from, and to combine or what a null value means for each of the five required-but-nullable parameters. Baseline 3 fits.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource (find appointments tracked by SkipCalls) and enumerates the search dimensions: guest name, phone, email, title, period, and exact ISO date range. The closing clause ('does not search free time') separates it from the slot-finding sibling, so an agent can distinguish it without opening any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly rules out two adjacent behaviors: searching free time (the findCalendarSlots territory) and changing calendar configuration (calendar_update_settings territory). That is clear routing context, though it stops short of naming the sibling tools or stating the 'when to use' condition positively (e.g., 'use when you need to look up an existing booking').
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
findCalendarSlotsARead-onlyInspect
Find real bookable appointment slots in the user's active connected calendars. This is read-only availability, not existing-event lookup and not calendar configuration. Copy returned calendar IDs, ISO starts, timezones, and provider resource IDs exactly into a booking proposal.
| Name | Required | Description | Default |
|---|---|---|---|
| date | Yes | Calendar-local date in YYYY-MM-DD format. | |
| calendarShortId | Yes | Exact 4-character calendar ID returned by manageCalendar action=list or a prior availability result. Never pass a calendar name. Omit only when the user has one active calendar. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false, and openWorldHint=true, so the safety profile is covered. The description adds useful behavioral context: the slots are real bookable availability from active connected calendars, and the returned calendar IDs, ISO starts, timezones, and provider resource IDs must be copied exactly into a booking proposal.
Agents need to know what a tool does to the 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 tightly written sentences. It front-loads the core purpose, then adds exclusions and downstream output handling without any wasted phrasing.
Shorter descriptions cost fewer tokens and are easier for agents to parse. 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 annotations covering the safety profile and the schema fully documenting both parameters, the main remaining burden is return-value guidance because there is no output schema. The description partially handles this by naming the key returned fields to copy into a booking proposal, though it does not describe the full response shape or edge cases such as no availability.
Complex tools with many parameters or behaviors need more documentation. Simple 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 parameter descriptions already explain calendarShortId as an exact 4-character ID and date as a calendar-local YYYY-MM-DD value. The tool description adds little parameter-specific detail beyond referencing active connected calendars, so the schema carries the semantic load.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb+resource: finding real bookable appointment slots in the user's active connected calendars. It also explicitly distinguishes this from existing-event lookup and calendar configuration, so an agent can tell it apart from siblings like findAppointments or calendar_update_settings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 clear usage context: use it for real bookable availability, not for existing-event lookup and not for calendar configuration. It does not name the alternative tools directly, but the exclusions provide enough routing guidance for an agent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
getAccountARead-onlyIdempotentInspect
Identify the connected SkipCalls account: business name, workspace ID, timezone, the person on this connection vs the workspace owner, team size, receptionists (ID, name, active), phone numbers, and the current plan and minute balance (in ChatGPT, billing is replaced by the SkipCalls dashboard link). Call when the user asks which account this is or before account-wide work. Read-only.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds useful details beyond the read-only annotations: it lists the account fields returned and notes that billing is replaced by the SkipCalls dashboard link in ChatGPT. It does not describe auth requirements or rate limits, but it provides solid context for a read-only lookup tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the core purpose and then usage guidance. It is dense but every clause contributes relevant detail about the returned account fields, though the single long enumeration makes it slightly run-on.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description carries the burden of explaining what is returned, and it does so thoroughly: business name, workspace ID, timezone, user vs owner, team size, receptionists, phone numbers, plan, and minute balance. That is complete enough for an agent to know what to expect.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes no parameters, so the baseline is 4. The description does not need to explain parameter behavior, and it correctly focuses on the returned account information instead.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource ('Identify the connected SkipCalls account') and enumerates exactly what account details are returned. It is highly distinguishable from most siblings by its account-identity scope, though it does not explicitly name alternatives like getBillingInfo or getOverview.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives clear usage context: 'Call when the user asks which account this is or before account-wide work.' It does not, however, state when not to use it or route to sibling tools such as getBillingInfo for billing-specific questions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
getAgentARead-onlyInspect
Get rich detailed receptionist info: config, instructions, connected resources, management pointers, knowledge, and stats. Defaults to compact Markdown to avoid unnecessary structured payloads. Pass format="json" only when exact editable fields are required for programmatic processing.
| Name | Required | Description | Default |
|---|---|---|---|
| format | Yes | Response format. "markdown" returns a compact human-readable summary and is the default. Use "json" only when exact editable fields are required for programmatic processing. | |
| agentId | Yes | ID of the agent to get details for |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false, and openWorldHint=false. The description adds useful behavioral context about the default compact Markdown response and why JSON should be reserved for exact editable fields, though it does not cover error behavior or missing-agent handling.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tightly written sentences with the main purpose front-loaded and the format guidance following immediately. No wasted text.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only getter with two fully documented parameters and no output schema, the description is complete enough: it names the returned information categories and explains the response-format choice.
Complex tools with many parameters or behaviors need more documentation. Simple 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 both parameters are already documented in the schema. The description reinforces the format tradeoff but adds little beyond the schema's own format description, and the stated default slightly conflicts with format being a required parameter.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: get rich detailed receptionist info, and enumerates the included areas (config, instructions, resources, knowledge, stats). This clearly distinguishes it from listAgents and updateAgent.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides clear guidance on when to use format="json" versus the default Markdown, but does not explicitly say when to choose getAgent over siblings like listAgents, getOverview, or updateAgent. Usage is implied by 'rich detailed' rather than stated as a selection rule.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
getAvailableVoicesARead-onlyInspect
List voices the user can select for a receptionist as a compact table: display name, exact id, style tags, which receptionist currently uses it, and a preview link. Pass only the exact id to updateAgent voice.
| 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 openWorldHint=false, so safety is covered. The description adds real beyond-schema behavior: it is a read-only enumeration returning a compact table with display name, id, style tags, current receptionist usage, and a preview link, plus the constraint that only the exact id may be forwarded.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, both load-bearing: the first defines output contents, the second defines the downstream contract. No filler and no restatement of the tool name.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, so the description's enumeration of returned fields carries that burden and does so adequately for a zero-parameter list. With annotations covering the safety profile, nothing material is missing for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Zero parameters, so the baseline is 4; there is nothing to disambiguate. The only 'parameter' guidance concerns the downstream updateAgent `voice` field, and the description correctly warns to pass the exact id rather than a display name.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('List voices the user can select for a receptionist') and enumerates the exact columns returned. This clearly separates it from mutation siblings like updateAgent and list siblings dealing with calls, contacts, or agents.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly routes the agent downstream: 'Pass only the exact id to updateAgent `voice`' tells the agent this is the discovery step before an update. It gives clear context but does not state exclusions or when another voice source would be preferred.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
getBillingInfoARead-onlyInspect
In ChatGPT, billing is unavailable: return the SkipCalls dashboard link, without plans, prices, or checkout. Other MCP clients can read their subscription status, minute balance, and account limits. Read-only.
| 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, so 'Read-only' is largely redundant. However the description adds real behavioral context beyond the annotations: output depends on which client is calling, and in ChatGPT the payload is deliberately reduced to a link rather than billing data. That is the kind of non-obvious trait annotations cannot 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?
Three tight sentences with the client-conditional behavior front-loaded and the exclusion list stated up front. Minor redundancy in repeating 'Read-only' against the annotations, but no padding.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema exists, and the description compensates by describing what is returned in each client context (dashboard link vs. subscription status, minute balance, account limits). For a zero-parameter read tool this is close to complete; it does not describe the link format or whether balance values are formatted, but that is minor.
Complex tools with many parameters or behaviors need more documentation. 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 the schema has additionalProperties=false, so there is nothing to explain; baseline 4 applies. The description correctly asks for no inputs.
Input schemas describe structure but not intent. Descriptions should explain non-obvious 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 resource (billing info: dashboard link, subscription status, minute balance, account limits) and preconditionally forks behavior by client type, which is genuinely informative. It implicitly distinguishes itself from startSubscriptionCheckout by saying it does not include checkout, though the sibling is not named explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It clearly gives the condition that selects each behavior: ChatGPT clients get the dashboard link, other MCP clients get subscription data. There is no explicit 'use X instead' routing to a sibling, but the exclusion of plans/prices/checkout implies where checkout belongs (startSubscriptionCheckout).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
getCallDetailsARead-onlyInspect
Get everything about one call by its UUID, inbound or outbound (detected automatically): who called or was called, status, time, receptionist, AI summary, transcript, and a signed public share link to the call page (recording, summary, transcript) the user can open or share. Use it after getCallHistory, search or get_contact_timeline gave you the call id; use getCallHistory to list calls and search to find one by name, phone or topic.
| Name | Required | Description | Default |
|---|---|---|---|
| callId | Yes | UUID of the call: the call id returned by getCallHistory or search, not a phone number or caller name. Works for both outbound and inbound calls — automatically detects the type. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false and openWorldHint=false, so the safety profile is covered. The description adds a genuinely non-obvious behavioral detail: the response includes a signed public share link to the call page, which is a shareable artifact the agent should know about before surfacing it. Minor gaps remain (behavior when the UUID is invalid, transcript size/truncation).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with the core action, and the routing sentence sits at the end where it belongs. The return-field enumeration is long but earns its place because no output schema exists; the only cost is that the first sentence is a dense run-on.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With one parameter, no output schema, and no nested objects, the description carries the right load by describing the response shape in prose. It stops just short of full completeness because it says nothing about failure modes for an unknown UUID or whether the transcript is truncated.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the single callId parameter is already documented as a UUID from getCallHistory or search, not a phone number. The description reinforces that provenance but adds no new syntax or format meaning beyond the schema. Baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ("Get everything about one call by its UUID") and then enumerates exactly what comes back: status, time, receptionist, AI summary, transcript, and a signed share link. The inbound/outbound auto-detection is called out, which distinguishes it from tools that require a direction or phone number.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly sequences the tool: "Use it after getCallHistory, search or get_contact_timeline gave you the call id." It also names the alternatives and their selecting conditions — getCallHistory to list calls, search to find one by name, phone or topic — so an agent can route without guessing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
getCallHistoryARead-onlyInspect
Compact list of the user's calls. Params: type (INCOMING|OUTGOING|ALL), count (default 5; choose the smallest useful count and use more only if needed), skip (default 0), and optional sinceHours. Any explicit call time window takes precedence over a name, phone, company, or topic and must use sinceHours. It is a hard boundary: do not silently search older calls when that window has no match; increase count or paginate only inside the same boundary. Returns id, direction, status, phone, timestamp, receptionist, title, and short summary. Copy one exact likely Call ID into getCallDetails; never reconstruct an ID.
| Name | Required | Description | Default |
|---|---|---|---|
| skip | Yes | Number of results to skip, default is 0 | |
| type | Yes | Type of the history | |
| count | Yes | Number of compact results. Choose the smallest useful count: normally 5; use more only when the user asks for an exhaustive list or 5 results were insufficient. Up to 20; larger values are capped to 20. | |
| sinceHours | Yes | Hard time boundary: only return calls whose call time falls within this many hours (incoming createdAt; outgoing scheduledAt). Future scheduled outbound calls are excluded. Use for requests like "today", "recently", or "a couple of hours ago" instead of putting time words into search. If no returned call matches, say so or ask before widening; do not run an unbounded search in the same turn. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/destructive/openWorld, so the bar is lower, and the description still adds real behavior: results are compact, the hard time boundary semantics, future scheduled outbound calls are excluded, and which fields come back. It does not mention auth requirements, rate limits, or ordering, so not a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with purpose, then params, then boundary rules, then the handoff to getCallDetails; nearly every clause carries an actionable constraint. The enumeration of return fields is slightly list-like and the density of clauses makes it a bit heavy, but nothing is truly wasted given there is no output schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description compensates by naming the returned fields; with four required params, all are discussed; and the sibling handoff (exact Call ID into getCallDetails) closes the loop. Nothing an agent needs in order to call it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so a 3 would be the floor, but the description adds cross-cutting semantics the schema does not: time windows must be expressed via sinceHours rather than other filters, and count should be the smallest useful value with more only when needed. That is genuine meaning beyond the per-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?
States a specific verb and resource ('Compact list of the user's calls') and implicitly contrasts with getCallDetails by telling the agent to fetch one full call afterward. It does not distinguish itself from nearby look-alikes such as app_listCalls or search, which is the only thing keeping it from a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit selection rules: use sinceHours for any explicit time window, and that window takes precedence over name/phone/company/topic filters. It also states a hard negative ('do not silently search older calls when that window has no match') and the escalation path (increase count or paginate inside the boundary), so an agent knows both when to use it and when not to widen.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
getCarrierForwardingInfoARead-onlyInspect
Get verified carrier-specific call-forwarding codes or portal steps with the user's SkipCalls number filled in. Ask the user to name or confirm the carrier and choose missed/conditional calls versus all calls before calling.
| Name | Required | Description | Default |
|---|---|---|---|
| carrier | Yes | Carrier name as the user said it | |
| forwardingTargetPhoneNumber | Yes | SkipCalls/receptionist number to forward to when the forwarding skill context lists multiple targets and the user chose one. Omit for a single recommended target. This must be one of the active non-test SkipCalls numbers shown in the forwarding context. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false, openWorldHint=false, so the safety profile is covered. The description adds useful behavioral context beyond that: results are 'verified' carrier-specific codes or portal steps, and the user's number is injected so the agent needn't construct it. It stops short of saying what happens for an unrecognized carrier or in what shape the steps come back.
Agents need to know what a tool does to the 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 padding: the first front-loads what the tool returns, the second front-loads the interaction prerequisites. Every clause carries actionable information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-parameter read-only lookup with no output schema, the description covers what is produced (codes or portal steps), that the number is filled in, and the conversational setup required. Minor gaps remain around unknown-carrier behavior and how the missed/all-calls choice is communicated to the tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3; the description reinforces that the carrier is captured in the user's own words and that the target number is the user's SkipCalls number. However, it instructs the agent to capture a missed/conditional versus all-calls choice that has no corresponding parameter, leaving the agent unsure how that decision reaches the 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?
States a specific verb (Get) and a specific resource (verified carrier-specific call-forwarding codes or portal steps), plus the key qualifier that the user's SkipCalls number is pre-filled. This is distinguishable at a glance from siblings like runForwardingTestCall or transfer_numbers_list, which also touch forwarding.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit precondition sequence: ask the user to name or confirm the carrier and to choose missed/conditional versus all calls before invoking. It does not name an alternative tool or state when not to use this one, but the preconditions are clear enough that an agent knows how to reach the call correctly.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_contactARead-onlyInspect
Get one contact by ID: name, phone, email, company, tags, notes, lifecycle stage, Skip AI (bypassReceptionist), do-not-call/SMS flags, custom fields, and the 5 newest timeline events. Use it after search (scope contacts, by name or phone) when you need the full record; for more history use get_contact_timeline. Returns {error: "Contact not found"} for an unknown or deleted ID.
| Name | Required | Description | Default |
|---|---|---|---|
| contactId | Yes | Contact UUID. Get it from search (scope contacts); it is not a phone number. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare a safe read (readOnlyHint=true, destructiveHint=false, openWorldHint=false), and the description adds genuinely new behavior: the timeline is capped at the 5 newest events, and an unknown or deleted ID yields {error: "Contact not found"}. It does not discuss auth or permissions, but for a read-only single-record fetch that is a minor gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The purpose and the alternative are front-loaded, and the field enumeration earns its length by telling the agent what it will receive. The parenthetical naming of "Skip AI (bypassReceptionist)" is slightly cluttered but still informative.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, so the description carries the burden of describing returns — it lists the returned fields, the timeline cap, and the not-found error shape. Combined with the usage routing to get_contact_timeline, nothing an agent needs to call and interpret this tool is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the contactId description already says to obtain the UUID from search and that it is not a phone number. The description's "(scope contacts, by name or phone)" restates that guidance rather than adding meaning, so it sits at the baseline for a fully documented single parameter.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ("Get one contact by ID") and immediately enumerates the record contents, so the agent knows exactly what comes back. It also distinguishes itself from the two nearest siblings, search and get_contact_timeline, without needing to open either schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit precondition ("use it after search (scope contacts, by name or phone)") and an explicit alternative for the richer case ("for more history use get_contact_timeline"). Both the when and the when-not are named.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_contact_timelineARead-onlyInspect
Get one contact's full interaction history in one list, newest first: inbound and outbound calls, SMS, jobs, follow-ups, appointments, notes, document uploads and field changes. Each event has id, type, date, title, summary and metadata. Use it for "what happened with this customer"; use get_contact for the profile, getCallDetails for one call's transcript, and getTextConversation for a full message thread. Returns {error: "Contact not found"} for an unknown or deleted ID.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | Yes | How many of the newest events to return, 1-50 (default 20). Older events beyond 50 are not reachable here. | |
| contactId | Yes | Contact UUID. Get it from search (scope contacts); it is not a phone number. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnly, non-destructive, closed-world), so the remaining burden is modest, and the description does add ordering ('newest first'), an event field list, and the unknown/deleted-ID error. It does not disclose pagination beyond the stated 50-event ceiling or whether results are truncated silently.
Agents need to know what a tool does to the 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 capability and scope come first, then the event inventory, then sibling routing, then the error case — a well front-loaded structure with no filler sentences. Dense but every clause carries information an agent would otherwise have to infer.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description compensates by naming the per-event fields (id, type, date, title, summary, metadata) and the error shape. Combined with the annotations and full schema coverage, nothing material is missing for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the schema already explains the 1-50 limit, the default of 20, the unreachability of older events, and that contactId is a UUID rather than a phone number. The description adds no parameter-level meaning beyond reinforcing 'newest first' ordering, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Get one contact's full interaction history') and enumerates exactly what is included: calls, SMS, jobs, follow-ups, appointments, notes, document uploads and field changes. It also names the sibling tools it is not (get_contact, getCallDetails, getTextConversation), so the agent can distinguish it without opening any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit decision rule ('what happened with this customer') and then routes three common alternatives to their own tools with the condition that selects each. It also states the failure case ({error: "Contact not found"} for unknown or deleted IDs), which is the kind of edge guidance agents need before calling.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
getOverviewARead-onlyInspect
REQUIRED READING for any external assistant connecting over MCP. Returns a static overview of what SkipCalls is, how the product is structured (receptionist, calls, contacts, knowledge), which MCP tool to use for which job, and the editing rules (preserve user text, get confirmation, only send changed fields). Call this once at the start of a session before touching any other tool. Does not expose the chat system prompt, persona, or any user data.
| 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, openWorldHint=false, so the safety profile is covered. The description adds genuinely new context beyond that: the content is static, it is idempotent enough to call once per session, and it explicitly does not expose the chat system prompt, persona, or user data — a useful disclosure about what will and will not be returned.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The imperative "REQUIRED READING" is front-loaded, followed by scope, then contents, then timing, then exclusions — a sensible priority order. The single sentence groups four clauses and runs long, but each clause carries distinct information an agent needs.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter, read-only, closed-world info tool with no output schema, the description fully covers what it returns, when to call it, and what it withholds. Nothing an agent needs in order to call it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so the baseline is 4. The description correctly says nothing about inputs, which is right for a no-arg orientation endpoint, and its content summary substitutes for what a parameter list would normally convey.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ("Returns a static overview of what SkipCalls is") and enumerates the exact contents: product structure, tool-routing guidance, and editing rules. It is unmistakably distinct from every sibling tool in the list, none of which is a documentation/orientation 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?
Explicit timing instruction: "Call this once at the start of a session before touching any other tool," plus "REQUIRED READING for any external assistant connecting over MCP." This is an unambiguous when-to-use directive with an implicit exclusion (once, not repeatedly).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
getTextConversationARead-onlyInspect
Read the messages of one SMS, email or website-chat thread, up to 10 per page, without marking it read or changing anything. Get conversationId from listTextConversations or search first. Pass cursor null for the first page; when the result returns a cursor, more messages exist, so call again with that exact cursor.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | Yes | Number of messages per page. Up to 10; larger values are capped to 10. | |
| cursor | Yes | Use null for the first page. For later pages, copy only the exact cursor returned by the preceding page. | |
| channel | Yes | SMS, EMAIL, WEB (website chat), or ALL channels (default). | |
| conversationId | Yes | UUID of the thread: the conversationId value returned by listTextConversations or search, not a phone number, email, or customer name. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds meaningful behavior beyond the readOnly and non-destructive annotations by stating that reading does not mark the thread as read or change anything. It also explains cursor-driven pagination, though it does not discuss permission requirements or error behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact, front-loaded with the core action, and contains no wasted wording. Every sentence contributes either purpose, prerequisite, or pagination behavior.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only, paginated retrieval tool with no output schema, the description gives enough context to invoke it correctly. It covers the source of conversationId, the first-page cursor value, and how to continue paging.
Complex tools with many parameters or behaviors need more documentation. Simple 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 already 100%, so the schema documents the parameters well. The description still adds useful semantics by tying cursor behavior to page progression and reinforcing that conversationId is not a phone number, email, or customer name.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb and resource: reading messages of one SMS, email, or website-chat thread. It clearly distinguishes this tool from listTextConversations and search, and states its pagination scope of up to 10 messages per page.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 tells the agent to obtain conversationId from listTextConversations or search first. It also gives precise pagination guidance: pass cursor null for the first page, and reuse the exact returned cursor when more messages exist.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_workARead-onlyInspect
Read one Needs you item: customer, what to do, the prepared text and recipient, caller quotes, calls, texts already sent, due. Read-only. To act, use sendSms or scheduleCall (with the user confirmation), then update_work done.
| Name | Required | Description | Default |
|---|---|---|---|
| workItemId | Yes | Exact item id returned by listWork or getWork. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false, and openWorldHint=false, and the description is consistent with them. It goes further by enumerating what the read returns (valuable since there is no output schema) and by flagging that downstream actions require user confirmation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short, front-loaded sentences with no filler; the read scope and the field list come first, and the routing sentence comes last. The field list is a dense comma run, but every item conveys returned data an agent needs.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description carries the burden of describing the response, and it does so by naming the fields returned. Combined with the read-only framing and next-step routing, an agent has enough to call it and know what comes back, though paging/error behavior is unmentioned.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Only one parameter and schema description coverage is 100%, with the schema already specifying "Exact item id returned by listWork or getWork." The description adds no syntax, format, or sourcing detail beyond that, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and scope ("Read one Needs you item") plus the concrete payload the item carries: customer, action, prepared text/recipient, quotes, calls, texts, due date. The singular "one" implicitly separates it from the list_work sibling, and the field enumeration makes the resource unmistakable.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly routes post-read activity to sendSms or scheduleCall and then update_work, with the "user confirmation" precondition stated. It gives clear context for acting but never states when to use this versus browsing with list_work, so the read-side routing is left implicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
knowledge_create_pageAInspect
Create one Knowledge Base text page the receptionist can cite on calls. Show the exact title and complete text and get explicit approval, then call with confirmed=true. Does not upload files.
| Name | Required | Description | Default |
|---|---|---|---|
| title | Yes | ||
| content | Yes | ||
| confirmed | Yes | Set only after the owner approved the exact title and full page text. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnlyHint=false, destructiveHint=false, idempotentHint=false, openWorldHint=false), so the description only needs to add operational context — and it does: this is a human-in-the-loop write gated on owner approval of the exact text. It does not say what happens on a duplicate title or what the call returns.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, front-loaded with the core action and approval gate, then the exclusion. No filler and nothing repeated from the schema or annotations.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 3-parameter mutation with no output schema, the description covers the essential thing an agent could get wrong: calling before owner approval. Remaining gaps are the post-call outcome (created page identity, duplicate handling), which are minor for a straightforward create.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is only 33%: title and content have no field descriptions, and only confirmed is documented. The description partially compensates by requiring the "exact title and complete text" — implying full-fidelity, non-truncated content — but adds nothing about title uniqueness, length limits, or content format.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ("Create one Knowledge Base text page") with an explicit scope ("one") and audience ("the receptionist can cite on calls"). The closing "Does not upload files" actively separates it from file-oriented siblings like create_upload_link and list_customer_files.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives a concrete precondition workflow: show the exact title and full text, obtain explicit approval, then call with confirmed=true. The "does not upload files" clause adds a negative case. It stops short of naming knowledge_update_page or knowledge_get_page as the alternative path, so routing is implied rather than explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
knowledge_get_pageARead-onlyIdempotentInspect
Read the complete text and last-updated timestamp of one Knowledge Base text page, by the ID from knowledge_list_pages. Read it before knowledge_update_page so the edit keeps the existing text; to find which page mentions something use search with scope knowledge.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Exact page ID returned by knowledge_list_pages. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and openWorldHint=false, so the safety profile is covered. The description adds the return payload (full text and timestamp) and the workflow constraint about reading before editing. It does not say what happens with an unknown or stale ID, which is the remaining gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single dense sentence with the primary action front-loaded, followed by the update-ordering constraint and the disambiguation pointer. No redundant restatement of the tool name or annotations.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema exists, but the description compensates by naming the returned content precisely. For a one-parameter read tool with full annotation coverage, nothing needed for correct invocation is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the single parameter is self-documenting, so the baseline is 3. The description adds provenance the schema only hints at: the ID must come from knowledge_list_pages, indicating it is opaque rather than guessable.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: reading the complete text plus last-updated timestamp of a single Knowledge Base text page, keyed by ID. It distinguishes itself from knowledge_update_page and from search-based discovery in the same sentence.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says to read before knowledge_update_page so the edit preserves existing text, and routes the agent to search with scope knowledge when the goal is finding which page mentions something. It also names knowledge_list_pages as the source of the ID, so when/when-not guidance is complete.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
knowledge_list_pagesARead-onlyIdempotentInspect
List every Knowledge Base text page (the longer reference documents the receptionist can look up on calls) with its ID and title, no body text. Use it to get an ID for knowledge_get_page or knowledge_update_page, or to check a page exists before knowledge_create_page. To search page content by meaning use search with scope knowledge. Uploaded files are managed in the SkipCalls app and are not listed here.
| 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 and closed-world, so the safety profile is covered. The description adds genuinely new behavioural facts: the response omits page bodies, the set is limited to text pages, and uploaded files are managed in the app and absent from results. It stops short of stating ordering or any cap on the returned list.
Agents need to know what a tool does to the 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 compact sentences with no waste: capability and return shape first, then when to use and what to use instead, then the exclusion plus the reason. The parenthetical defining what a page is earns its place by distinguishing pages from uploaded files.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, yet the description already specifies the returned fields (ID and title) and what is omitted (body text), which is the key information an agent needs to plan a follow-up call. Combined with the sibling routing, nothing material is missing for a zero-argument 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?
Zero parameters, so the baseline is 4; the description correctly implies an unfiltered, complete enumeration rather than hinting at filters that do not exist. Nothing further is needed for a no-arg 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?
Opens with a specific verb+resource ("List every Knowledge Base text page") and immediately scopes the return shape ("with its ID and title, no body text"). It also disambiguates from the two nearest neighbours: `search` with scope knowledge and the uploaded files that are not listed here.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives three explicit uses (fetch an ID for knowledge_get_page / knowledge_update_page, or check existence before knowledge_create_page) and names the alternative for content search. No inference is required to pick between this and `search`.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
knowledge_update_pageADestructiveIdempotentInspect
Replace the title and/or complete text of one Knowledge Base text page. Read it with knowledge_get_page first and pass its ID and expectedUpdatedAt, so a stale edit is rejected. Show the exact result and get explicit approval, then call with confirmed=true.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Exact page ID returned by knowledge_list_pages. | |
| title | Yes | ||
| content | Yes | ||
| confirmed | Yes | Set only after the owner approved the exact title and full page text. | |
| expectedUpdatedAt | Yes | The page updated timestamp exactly as returned by knowledge_get_page (ISO-8601); a stale value is rejected. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already flag destructiveHint=true and idempotentHint=true, but the description adds real value beyond them: optimistic concurrency via expectedUpdatedAt, the rejection of stale writes, and a mandatory human-approval gate before confirmed=true. It stops short of saying what happens to an existing title when title is null, which keeps it off a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences: what it does, the read-then-update precondition, then the approval-and-confirm step. Nothing is repeated and the destructive action is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive mutation with no output schema, the description covers the safety path (read first, concurrency token, explicit approval, confirmed gate) well. The remaining gap is return behavior and the exact null-handling semantics for title/content, which an agent would have to discover by calling.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 60% — id, confirmed and expectedUpdatedAt are documented in-schema, while title and content are not. The description compensates by saying "title and/or complete text," clarifying that either or both nullable required fields may be supplied, and ties expectedUpdatedAt to the stale-edit rejection rather than just naming it.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ("Replace") and resource ("title and/or complete text of one Knowledge Base text page"), with scope limited to a single page. This is unambiguously distinct from the sibling knowledge_create_page and knowledge_get_page without needing to open either schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit ordered workflow: read with knowledge_get_page first, pass its ID and expectedUpdatedAt, show the exact result, get explicit approval, then call with confirmed=true. The precondition and the alternative failure mode (stale edit rejected) are both spelled out rather than left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
lead_alerts_getARead-onlyIdempotentInspect
Read one receptionist's Lead Alerts: whether they are on and the ordered rules that call or text a team member after a matching inbound call, with rule IDs. Get agentId from listAgents. Read this before changing alerts: lead_alerts_replace overwrites the whole rule list, so start from what this returns.
| Name | Required | Description | Default |
|---|---|---|---|
| agentId | Yes | ID of the receptionist whose Lead Alerts should be read. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint and destructiveHint=false, so the safety profile is covered. The description adds value beyond that by describing the return content (enabled state, ordered rules, rule IDs) and by warning that the sibling write overwrites the entire rule list, which is a real behavioral hazard an agent should know. It stops short of discussing what happens when a receptionist has no alerts configured or unmapped states.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, front-loaded with the purpose before the prerequisite and the sibling warning. No filler, and every clause carries actionable information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter read tool with no output schema, the description supplies what the annotations can't: the shape of the returned data, how to obtain the required ID, and the sequencing rule against the destructive sibling. Nothing an agent needs to invoke it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With a single parameter at 100% schema coverage, the baseline is 3, but the description earns more by naming the source of the value ('Get agentId from listAgents'), which the schema itself does not say. It still doesn't note edge cases such as invalid or cross-account agent IDs, so it isn't exhaustive.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Read one receptionist's Lead Alerts') and enumerates what is returned: on/off state, ordered rules that call or text a team member after a matching inbound call, and rule IDs. It also implicitly distinguishes itself from lead_alerts_replace, so an agent can tell the read from the write without opening either schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly gives the prerequisite ('Get agentId from listAgents') and an ordering constraint with the reason ('Read this before changing alerts: lead_alerts_replace overwrites the whole rule list, so start from what this returns'). That names the alternative tool and the condition that sequences them.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
lead_alerts_replaceADestructiveIdempotentInspect
Replace one receptionist's complete Lead Alert setup: the enabled state and the full ordered rule list. Call lead_alerts_get first, keep IDs of existing rules, show the exact resulting setup and get explicit approval before calling.
| Name | Required | Description | Default |
|---|---|---|---|
| rules | Yes | Complete desired ordered rule list. Preserve IDs from lead_alerts_get for unchanged or edited rules, omit id only for new rules, and send [] to clear all rules. | |
| agentId | Yes | ID of the receptionist whose Lead Alerts should be replaced. | |
| enabled | Yes | Complete desired enabled state for Lead Alerts. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and idempotentHint=true, so the safety profile is known; the description adds the crucial operational context that this is a full replacement requiring prior read and human approval. It stops short of spelling out that rules omitted from the list are deleted, though 'complete' and the schema's '[] to clear all rules' imply it.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, zero waste, with the replacement scope front-loaded and the prerequisite workflow following immediately. Every clause carries actionable information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive, idempotent mutation with no output schema, the description supplies the missing pieces: read-before-write, ID preservation, and approval gating. An agent has everything needed to invoke it safely and correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all three parameters and nested rule fields are already documented, including ID preservation and the empty-array clearing behavior. The description reinforces the ID-preservation rule but adds no syntax or format detail beyond the schema, so baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (Replace) and resource (one receptionist's complete Lead Alert setup), and enumerates the scope: enabled state plus full ordered rule list. It is clearly distinguishable from the sibling lead_alerts_get, which it explicitly references as the read counterpart.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit workflow: call lead_alerts_get first, preserve existing rule IDs, show the exact resulting setup, and obtain explicit approval before calling. This is a when-and-how directive that leaves nothing to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
listAgentsARead-onlyInspect
Get list of all voice agents for the user. Returns agent IDs, names, voices, and assigned phone numbers.
| 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 openWorldHint=false, so safety is covered. The description adds real value beyond that by disclosing the return contents (agent IDs, names, voices, assigned phone numbers), which matters because there is no output schema. Pagination, ordering, and empty-result behavior remain undisclosed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, zero filler, with the core action front-loaded and the return payload immediately after. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a parameterless list tool with no output schema, the description covers the essentials by naming the returned fields. It could go slightly further by noting ordering, pagination, or whether inactive agents are included, but 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?
The tool takes zero parameters, so there is no parameter semantics to explain; the baseline for a 0-param tool is 4. The description correctly avoids inventing 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?
States a specific verb and resource ('Get list of all voice agents for the user') and enumerates the returned fields, which distinguishes it from the singular getAgent sibling via the word 'all'. It does not explicitly name that sibling, so it falls short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied: 'all voice agents for the user' suggests an enumeration use case and contrasts implicitly with getAgent. There is no explicit when-to-use, when-not-to-use, or named alternative.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
listCallScenariosARead-onlyInspect
List one receptionist's Skills / Call Scenarios, including IDs, stable keys, selectors, full guides, enabled state, and order. Use before proposing any scenario change. Read-only and available to the receptionist owner on every plan; scenario editing still requires PRO or higher (Growth on older web plans).
| Name | Required | Description | Default |
|---|---|---|---|
| agentId | Yes | Receptionist ID whose Skills / Call Scenarios should be listed. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare it read-only. The description adds plan and permission context: it is available to the receptionist owner on every plan, while editing requires PRO or higher. It also describes the return contents, which makes up for the missing output schema, though it says nothing about pagination or size.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three front-loaded sentences, and each one carries distinct value: purpose, usage, and permissions.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple one-parameter read tool, the description covers return contents, workflow role and plan constraints. That is enough to use it correctly even without an 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?
The schema fully documents the single agentId parameter. The description adds only the 'one receptionist' framing and does not say where to get the ID, such as from listAgents.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description pairs a specific verb with a specific resource: list one receptionist's Skills / Call Scenarios. It also lists the returned fields (IDs, stable keys, selectors, full guides, enabled state, order), which sets it apart from the call_scenarios_create/update/delete/reorder 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?
"Use before proposing any scenario change" gives a clear workflow placement relative to the mutation siblings. It does not say when this tool is the wrong choice, for example versus loadSkill or getAgent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_customer_filesARead-onlyInspect
List the files a customer uploaded through an upload link from create_upload_link (photos, PDFs, documents), newest first. Returns {files: [{id, fileName, fileSize (bytes), mimeType, createdAt}]}; an empty list means nothing was uploaded yet. Deleted files are left out. Returns {error: "Contact not found"} for an unknown or deleted contact ID.
| Name | Required | Description | Default |
|---|---|---|---|
| contactId | Yes | Contact UUID. Get it from search (scope contacts); it is not a phone number. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, destructiveHint=false and openWorldHint=false, yet the description still adds real behavior: newest-first ordering, deleted files excluded, empty list meaning, the exact error payload for an unknown or deleted contact, and the returned field set. This goes well beyond the safety profile the annotations provide.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three tight sentences, each earning its place: scope first, then return shape, then edge cases (empty list, deleted files, unknown contact). No filler or repetition of the tool name.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter read tool with no output schema, the description compensates fully by spelling out the response object, its field types, the empty-list semantics, and the error case. Nothing needed to call it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the single contactId parameter is fully documented there, including the UUID/not-a-phone-number warning, so the schema does the heavy lifting. The description contributes only marginally by implying a deleted contact ID also yields an error, which slightly clarifies accepted values.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource (list the files a customer uploaded) plus the exact provenance (through an upload link from create_upload_link), and names the file types. An agent can distinguish this from sibling listing tools like list_work or search without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The provenance clause ('through an upload link from create_upload_link') implicitly scopes when this tool applies and points at the companion create tool, giving clear context. It stops short of an explicit when-not or a named alternative for other file sources, so it is not a full routing rule.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
listTextConversationsARead-onlyInspect
List the newest text conversations (SMS, email, website chat), one preview per thread with its conversationId, newest first. channel narrows to SMS, EMAIL or WEB (default ALL); page starts at 1; limit is previews per page (default 20, max 30). Read-only: nothing is marked read. Use it to browse recent messages; to find a thread by name, phone or words use search, and to read a whole thread pass its conversationId to getTextConversation.
| Name | Required | Description | Default |
|---|---|---|---|
| page | Yes | Page number, starting at 1 (newest conversations). | |
| limit | Yes | Number of previews per page. Request only the amount needed; paginate for more. Up to 30; larger values are capped to 30. | |
| channel | Yes | SMS, EMAIL, WEB (website chat), or ALL channels (default). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and destructiveHint=false, so the description earns credit for adding genuinely new behavior: that nothing is marked read by this call, that results are previews rather than full threads, and how channel defaults and the limit cap behave. The remaining gap is return specifics such as total counts or preview contents, which is minor against the annotation coverage.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three tight sentences, front-loaded with what is returned and in what order, followed by parameter constraints and then sibling routing. Every sentence carries distinct information with no repetition of the schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With three required parameters and no output schema, the description supplies what an agent needs: the shape of a result (one preview per thread with conversationId), ordering, paging defaults and caps, and the handoff to getTextConversation. Nothing needed to call it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description adds default values not present in the schema (channel default ALL is repeated, page starts at 1, limit default 20 with max 30) and the enum meaning of WEB as website chat. It stops short of adding anything about paging edge cases.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('List the newest text conversations') plus scope and ordering ('one preview per thread with its conversationId, newest first'), and names the channel coverage (SMS, email, website chat). An agent can distinguish it from getTextConversation and search without opening any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit routing: browse recent messages here, use search to find a thread by name/phone/words, and pass a conversationId to getTextConversation to read a whole thread. Both alternatives and the condition selecting each are stated, not implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_workARead-onlyInspect
List Needs you items, the to-do list SkipCalls keeps for the owner: follow-ups from calls and reminders, each with its id, customer, what to do and due time. view picks the list (default needs_you; snoozed also holds upcoming reminders); contactId limits it to one customer. Read-only. Use it to answer "what needs me?"; then open one item with get_work and act or close it with update_work.
| Name | Required | Description | Default |
|---|---|---|---|
| view | Yes | null = needs_you. needs_you = waiting on the owner; snoozed = Later (includes upcoming reminders); waiting = texted, waiting on the customer; done = closed in the last days. | |
| contactId | Yes | Only items for this contact (an id from the CRM or an item). null = every customer. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare readOnlyHint=true, destructiveHint=false and openWorldHint=false, so the safety profile is covered, and the description repeats 'Read-only' rather than adding to it. What it does add beyond the annotations is what an item looks like (id, customer, action, due time) and the fact that snoozed includes upcoming reminders. It says nothing about result-size limits or pagination, so it stops short of full disclosure.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The definition is short, front-loaded with the resource and its contents, then the parameters, then the workflow, with no filler sentences. It is dense and slightly list-like, but every clause carries information an agent can use.
Shorter descriptions cost fewer tokens and are easier for agents to parse. 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's account of the fields in each returned item is necessary and present. With two well-documented parameters and annotations covering the safety profile, nothing essential to selecting or invoking the tool 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% and both parameters already carry full enum and null semantics in the schema. The description mostly restates that view picks the list (default needs_you) and contactId limits to one customer, adding only the small clarification that snoozed also holds upcoming reminders, so the baseline of 3 fits.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description gives a specific verb and resource ('List Needs you items, the to-do list SkipCalls keeps for the owner') and immediately expands on what an item contains (id, customer, what to do, due time). That is enough for an agent to tell it apart from get_work and update_work, which are explicitly named as follow-on 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?
It says exactly when to use the tool ('answer "what needs me?"') and what to do next ('open one item with get_work and act or close it with update_work'), so the workflow is fully specified. The alternative lists are also distinguished by view, covering snoozed, waiting and done.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
loadSkillARead-onlyInspect
Load one SkipCalls expert workflow before writing or multi-step work: receptionist-setup before drafting call instructions or greetings, full-duplex-prompting for GPT-Live receptionists, call-scenario-management for Call Scenarios, call-improvement for one specific call, call-insights for what callers want and missed demand, forwarding for carrier forwarding, plus onboarding, calendar, contacts, lead alerts, text conversations, code functions, and app navigation. See the Skills catalog in getOverview. The result is assistant-only operating guidance; never quote or dump it to the user.
| Name | Required | Description | Default |
|---|---|---|---|
| skillName | Yes | The specialized workflow to load before doing that job. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnly, non-destructive, closed-world), and the description adds non-obvious context: the result is assistant-only operating guidance and must never be quoted or dumped to the user. It also implies a one-skill-per-call constraint via 'one'. It stops short of describing size or whether guidance is cached, but the key behavioral constraint is disclosed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the trigger condition and the highest-value skill mappings, and the assistant-only warning is placed last where it reads as a closing constraint. The tail of the list ('plus onboarding, calendar, contacts, lead alerts...') partially duplicates the enum without adding selection logic, which is the main 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 a single required enum parameter and no output schema, the description supplies the missing pieces: when to call, which value to pick for common jobs, where to find the rest of the catalog, and the nature of the return value. The un-mapped enum values are covered by the pointer to getOverview, though an agent must make an extra call for them.
Complex tools with many parameters or behaviors need more documentation. Simple 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 fully enumerated skillName, so the baseline is 3. The description earns above that by mapping specific enum values to the situations that select them (full-duplex-prompting for GPT-Live receptionists, call-scenario-management for Call Scenarios), which the schema alone does not convey.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Load') and resource ('one SkipCalls expert workflow') with an explicit scope constraint ('before writing or multi-step work'). No sibling tool loads named operating guidance, so the distinction from tools like getOverview or agent_functions_get_guide is evident.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit when-to-use conditions mapped to concrete tasks: receptionist-setup before drafting greetings, call-improvement for one specific call, call-insights for missed demand, forwarding for carrier forwarding. It also names a routing alternative ('See the Skills catalog in getOverview') for discovery.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
memory_forgetADestructiveIdempotentInspect
Stop using one remembered fact by memoryId when the person asks SkipCalls to forget it.
| Name | Required | Description | Default |
|---|---|---|---|
| memoryId | Yes | Memory ID from memory_list. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, idempotentHint=true and readOnlyHint=false, so safety basics are covered. The description adds real value by specifying that the memory stops being *used* — a behavioral consequence (removal from future recall) that the annotations alone do not convey. It leaves unresolved whether the underlying record is permanently erased versus merely deactivated, which is the one detail an agent would still want.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One sentence, front-loaded with the action and resource, with the trigger condition trailing. Minimal waste, though "stop using ... forget" is mildly redundant phrasing.
Shorter descriptions cost fewer tokens and are easier for agents to parse. 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, an output schema absent, and annotations carrying the destructive/idempotent profile, the definition is largely sufficient to call it correctly. The only meaningful gap is irreversibility — whether the fact can be recovered — which the description gestures at but never settles.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the single parameter already documents that memoryId comes from memory_list. The description only restates that the ID identifies the fact to forget, adding no syntax or format detail beyond the schema. Baseline 3 applies when the schema carries the parameter burden.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ("Stop using") on a specific resource ("one remembered fact") and names the identifying parameter (memoryId), which separates it cleanly from memory_remember and memory_list. It stops short of explicitly contrasting with those siblings, but the intent is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit trigger condition: "when the person asks SkipCalls to forget it." That is a clear use-case boundary rather than an implied one. It does not mention a when-not case or name an alternative tool, so it misses the top tier.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
memory_listARead-onlyIdempotentInspect
List what SkipCalls remembers about the person on this connection and the workspace (name, reply and report preferences, standing rules, links, date-bound facts), each with its ID. Read it at the start of a session to follow the saved preferences. To save a new fact use memory_remember; to delete one pass its ID to memory_forget.
| 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, and destructiveHint=false, so the safety profile is covered. The description usefully adds that memories are scoped to the person on this connection and the workspace, and that each item includes its ID. It does not describe return formatting or pagination, but for a zero-parameter read tool this is minor.
Agents need to know what a tool does to the 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 compact sentences, front-loaded with the core purpose and memory categories. The follow-on guidance about session-start use and sibling tools is useful and earns its place without repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter, read-only list tool with no output schema and strong annotations, the description is complete enough. It covers scope, content categories, ID exposure, intended session-start usage, and the alternative tools for adjacent operations.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so there is no parameter semantics needed and the baseline is 4. The description appropriately focuses on what is listed rather than inventing parameter details.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Starts with a specific verb and resource: 'List what SkipCalls remembers...' and enumerates the memory categories (name, preferences, standing rules, links, date-bound facts). It clearly distinguishes itself from the sibling memory tools by naming memory_remember and memory_forget for different 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?
Explicitly says to read it 'at the start of a session to follow the saved preferences,' giving a clear when-to-use condition. It also routes the agent to the correct siblings for saving and deleting memories, leaving little inference required.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
memory_rememberAInspect
Save one durable fact when the person asks SkipCalls to remember it for future conversations; pass replacesMemoryId to correct an existing one. Never store receptionist call-handling rules, notification settings, one-off tasks, customer details or sensitive personal data.
| Name | Required | Description | Default |
|---|---|---|---|
| kind | Yes | ||
| about | Yes | remember only: me = about the person chatting; workspace = applies to everyone on the account. Default me. | |
| value | Yes | ||
| validUntil | Yes | remember TEMPORARY only: last local date (YYYY-MM-DD) it is true. | |
| replacesMemoryId | Yes | remember only: id from list when the new fact corrects an existing memory. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare non-read-only, non-destructive, non-idempotent, closed-world, so the safety profile is covered. The description adds real value beyond that: facts are durable across conversations and an existing memory can be corrected rather than duplicated, which is not derivable from the annotations. It stops short of saying what comes back (e.g., a new memory id for later forget/list) or any limits on size/count.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, no filler: the core action and scope constraint lead, the correction path follows, and the prohibition list closes. Every clause carries distinct 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 purpose, exclusions, and the update/duplicate-avoidance path for a 5-required-param write tool with no output schema. The remaining gap is that it never explains how to choose among the 'kind' enum values, which is the main semantic decision the caller must make.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 60% schema description coverage, the schema already documents about/validUntil/replacesMemoryId, and the description only reinforces replacesMemoryId's correction semantics. The required 'kind' parameter with five enum values (IDENTITY, PREFERENCE, STANDING_RULE, LINK, TEMPORARY) has no description in the schema and none here, and 'value' is likewise unexplained, so a key decision point is left undocumented.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Specific verb and resource ('Save one durable fact') plus the triggering condition ('when the person asks SkipCalls to remember it for future conversations'), which separates it from automatic data capture. The correction clause (pass replacesMemoryId) further pins down scope, and the exclusion sentence implicitly distinguishes it from knowledge pages, notification settings, reminders, and contacts.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit when-to-use trigger, an explicit when-not-to-use list (call-handling rules, notification settings, one-off tasks, customer details, sensitive data), and names the mechanism for the correction case. An agent can decide invoke vs. skip vs. correct without opening the schema.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
notification_settings_getARead-onlyIdempotentInspect
Read the owner's notification settings: email and call-summary notifications, new-message, spam and abandoned-call alerts, important-call SMS, Daily Recap and Weekly Report, Needs-you reminders, recipients and delivery times. Read-only.
| 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, openWorldHint=false, and destructiveHint=false, so the safety profile is fully covered. The description adds the scope of settings returned, but repeats 'Read-only' and does not add further behavioral context such as auth requirements or return structure.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the verb and resource, then efficiently lists the settings categories in one sentence. The trailing 'Read-only' is short and useful, and there is no wasted text.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no parameters, rich annotations, and no output schema, the description is nearly complete for tool selection. It clearly states what is read and that the operation is read-only, though it could say more about the returned settings object's shape.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
This tool has zero parameters, so parameter semantics receive the baseline score of 4. There are no parameters for the description to clarify.
Input schemas describe structure but not intent. Descriptions should explain non-obvious 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 (Read) and resource (owner's notification settings), then enumerates the covered settings categories. It is clearly distinguishable from the sibling notification_settings_update by its read-only framing and 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 'Read-only' phrasing clearly indicates when to use this tool rather than the update sibling, but it does not explicitly name notification_settings_update as the alternative for modifying settings. Usage is clear without being fully prescriptive about exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
notification_settings_updateADestructiveIdempotentInspect
Change one or more notification settings; send only the settings the user asked to change. Show the exact changes and get explicit approval before calling.
| Name | Required | Description | Default |
|---|---|---|---|
| changes | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and idempotentHint=true. The description adds important behavioral context beyond annotations by requiring explicit approval and limiting changes to user-requested settings, though it does not describe return behavior or side effects in detail.
Agents need to know what a tool does to the 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 compact sentences, front-loaded with the action and followed by the critical approval workflow. There is no redundant or wasted text.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers the most important safety workflow for a destructive mutation: minimal changes plus explicit approval. It remains incomplete for the tool's complexity because it does not explain the nested parameter variants or what the call 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?
The description adds meaningful selection policy for the 'changes' parameter: only include settings the user asked to change. However, with 0% schema description coverage and a complex nested anyOf structure, it does not explain the per-setting shapes, formats, or variants that the agent must construct.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: 'Change one or more notification settings.' The scope is clear and an agent can distinguish this from the sibling read-only notification_settings_get by the mutation verb.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives clear usage constraints: send only the settings the user asked to change, show exact changes, and get explicit approval before calling. It does not name notification_settings_get as the read alternative, but the when/when-not guidance is otherwise strong.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
onboarding_complete_receptionist_setupAIdempotentInspect
Finish an existing receptionist that has no phone number yet by assigning one automatically, without changing its settings. Use only when onboarding_get_status names this step. Owner only. REAL ACTION, not a preview: a real phone number is assigned to the receptionist. Right before calling, show the user the exact change and get their explicit confirmation.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false and openWorldHint=true, but the description goes further: it warns this is a REAL ACTION rather than a preview, that a real phone number gets assigned, that other settings are untouched, and that explicit user confirmation must precede the call. That is meaningful 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?
Four short sentences, front-loaded with purpose, then gating condition, then authority, then the safety warning. No filler and the most important operational caveat ('REAL ACTION, not a preview') is capitalized and prominent.
Shorter descriptions cost fewer tokens and are easier for agents to parse. 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, gating, auth, and confirmation warnings for a mutation tool with no output schema. The only missing piece is what the agent gets back (e.g., which number was assigned) or failure modes if no numbers are available, but the definition is otherwise complete 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?
There are zero parameters, so there is nothing to disambiguate; per the baseline for a 0-param tool this is a 4. The description doesn't need to explain inputs, though it could note what identifies the receptionist (it appears to be implicit).
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Finish... by assigning one automatically') on a specific resource ('an existing receptionist that has no phone number yet'), and explicitly carves itself out from onboarding_create_receptionist by saying it operates on an existing receptionist without changing settings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 gates invocation on 'onboarding_get_status names this step,' adds an 'Owner only' restriction, and mandates user confirmation before calling. This is about as precise as when-to-use guidance gets.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
onboarding_create_receptionistAInspect
Create the first receptionist and assign it a phone number automatically (the user never picks or buys the first number separately). Owner only. Show the name, call-handling instructions, greeting and voice. REAL ACTION, not a preview: a live receptionist is created and a real phone number is assigned to the account. Right before calling, show the user the exact change and get their explicit confirmation.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| voice | Yes | ||
| greeting | Yes | ||
| callHandlingInstructions | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare openWorldHint=true, idempotentHint=false and destructiveHint=false, but the description adds the operationally critical fact that this is not a preview: a live receptionist is created and a real number is provisioned on the account, so the agent knows repeating it is not harmless. It also adds the owner-only authorization constraint, which annotations do not encode.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the action and its automatic number assignment, then constraints. Slight redundancy between 'REAL ACTION, not a preview' and 'a live receptionist is created and a real phone number is assigned', but that emphasis is arguably justified for a tool with real-world side effects.
Shorter descriptions cost fewer tokens and are easier for agents to parse. 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 and no parameter documentation, but the description covers the things an agent most needs before a real-action onboarding mutation: authorization, confirmation protocol, and the fact that a number is provisioned. Missing only return-value expectations and where to source voice options.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% with no per-property descriptions, so the description is the only source: it enumerates name, call-handling instructions, greeting and voice, which maps the four required params. However, it adds no semantic detail — voice format/enum (getAvailableVoices exists as a sibling but is not referenced), greeting length, or whether voice/greeting accept nulls despite being required.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Create the first receptionist') plus an unusual side effect handled automatically ('assign it a phone number'). The word 'first' plus the note that the user never picks the number separately distinguishes it from the general updateAgent/listAgents siblings and from the other onboarding_* 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?
Gives a clear precondition ('Owner only') and an explicit procedural instruction ('Right before calling, show the user the exact change and get their explicit confirmation'). It does not name the alternative path (e.g. onboarding_complete_receptionist_setup or updateAgent for later edits), so routing guidance is strong but not exhaustive.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
onboarding_get_statusARead-onlyIdempotentInspect
Read where first-time SkipCalls setup stands and the one next step: Business Profile category and address, subscription, first receptionist with its automatically assigned phone number, and optional calendar connection. Call first for any "set up my account" request and again after each step. Read-only.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and openWorldHint=false, so the safety profile is covered; the description nonetheless adds valuable behavior — that it is the sequencing entry point and should be re-read after every setup step, and what state it surfaces ('the one next step'). The trailing 'Read-only' restates the annotation rather than adding anything.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with the purpose before the calling instruction, and every clause carries information (scope, timing, returned fields). The only marginal waste is the redundant 'Read-only' closer.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description usefully enumerates the returned surface (profile fields, subscription, receptionist + phone number, calendar connection) and the concept of a 'next step'. It stops short of describing how the next step is encoded or behavior when setup is already complete, which would matter for a status tool consumed in a loop.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so there is no parameter semantics to explain and the baseline of 4 applies. Nothing in the description conflicts with the empty 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 ('Read') plus a precisely scoped resource ('where first-time SkipCalls setup stands') and enumerates the exact payload (business profile category/address, subscription, first receptionist with auto-assigned number, optional calendar). It implies separation from the other onboarding_* siblings (which write), but never names them, so an agent must infer which onboarding tool mutates vs reads.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit when-to-use: 'Call first for any "set up my account" request and again after each step' gives both an entry condition and a repeat cadence. There is no when-not guidance or explicit pointer to the write siblings that follow each step, but the usage context is unambiguous.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
onboarding_list_business_categoriesARead-onlyIdempotentInspect
List the canonical business categories with their IDs. Use it to pick the categoryId for onboarding_save_business_profile. Read-only.
| 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, non-destructive and openWorldHint=false, so "Read-only" merely restates structured data. The only extra signal is that the categories are "canonical" with stable IDs, which is modest added context for a zero-cost read.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences with zero waste; the resource and its return content come first, then the routing hint. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-arg read with rich annotations, the description covers what is returned (categories plus IDs) and why to call it. A minor gap remains — no hint about list size, ordering, or whether the values are static — but nothing needed to invoke it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes no parameters, so there is nothing for the description to disambiguate. Baseline for a zero-param tool applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ("List the canonical business categories with their IDs") and makes clear what the output carries. It is easily distinguished from siblings because it names the exact downstream consumer, onboarding_save_business_profile.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit use case: pick the categoryId for onboarding_save_business_profile. It does not state when not to use it, but there is no plausible alternative sibling for enumerating categories, so the context is effectively unambiguous.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
onboarding_save_business_profileADestructiveIdempotentInspect
Save the business name, category and address on the Business Profile during setup. Overwrites those fields. Owner only. Show the exact values and get explicit approval before calling.
| Name | Required | Description | Default |
|---|---|---|---|
| address | Yes | ||
| agentId | Yes | Optional owned receptionist whose attached business profile is being saved. Omit for the default business. | |
| zipCode | Yes | ||
| cityName | Yes | ||
| stateName | Yes | ||
| categoryId | Yes | UUID category ID exactly as listed by onboarding_list_business_categories, not the category name. | |
| countryName | Yes | ||
| businessName | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark this destructive and non-read-only, and the description corroborates with 'Overwrites those fields' while adding genuinely new context: an owner-only authorization requirement and a required human-approval step. It does not cover idempotency behavior or downstream effects on the attached profile, which would have pushed this higher.
Agents need to know what a tool does to the 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 short sentences, front-loaded with the purpose and followed by mutation behavior, authorization, and the approval protocol — every sentence earns its place. The phrase 'those fields' is terse and arguably ambiguous given how many fields the schema requires.
Shorter descriptions cost fewer tokens and are easier for agents to parse. 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 eight-parameter destructive write with no output schema, the description supplies purpose, overwrite semantics, authorization, and a confirmation protocol — the essentials an agent needs before mutating data. What's missing is coverage of the remaining parameters and what the call returns or triggers, but the core is present.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 25%, with agentId and categoryId documented in the schema and the rest bare, so the description carries real weight here. It names business name, category and address but says nothing about countryName, cityName, stateName, zipCode, or the agentId scoping rule for the default business, leaving half the parameters unexplained in either place.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (Save) and resource (Business Profile) plus the setup context, which separates it from siblings like onboarding_create_receptionist or onboarding_complete_receptionist_setup. The enumerated fields ('business name, category and address') are incomplete against the eight required parameters, so the scope statement slightly under-sells what the call actually writes.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'During setup' and 'Owner only' establish when and by whom this should be called, and 'Show the exact values and get explicit approval before calling' gives a concrete pre-call protocol. It does not name an alternative tool or state when not to use this, so it falls short of the explicit routing seen in top-tier definitions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
onboarding_start_calendar_connectionARead-onlyIdempotentInspect
Return the secure link that connects Google Calendar or Outlook. The owner opens it in a signed-in browser and grants access; nothing is connected until they finish. Then call onboarding_get_status again.
| Name | Required | Description | Default |
|---|---|---|---|
| provider | Yes | GOOGLE for Google Calendar, OUTLOOK for Microsoft Outlook. Other providers are connected in the SkipCalls web app. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint and non-destructive, and the description adds meaningful context beyond them: nothing is actually connected until the owner completes the browser grant, so the agent knows this call has no side effect on its own. Missing details like link expiry or reuse behavior keep it from a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, front-loaded with the return value, then the human prerequisite, then the follow-up call. No filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description does state what is returned (the secure link) and the human-in-the-loop requirement that governs when the connection becomes real. It stops short of describing the link's shape or lifetime, a minor gap for a one-parameter read 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% and the single enum parameter is fully documented in the schema, so the baseline is 3. The description's mention of Google Calendar/Outlook mirrors the enum but adds no format or constraint detail beyond it.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Specific verb and resource: returns a secure link for connecting Google Calendar or Outlook. It is clearly distinguishable from siblings like calendar_list or onboarding_get_status, which read state rather than produce a connection URL.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explains the flow: the owner must open the link in a signed-in browser and grant access, and instructs to call onboarding_get_status again afterward. It gives clear context and next step, though it does not name an explicit alternative for providers outside GOOGLE/OUTLOOK (that is only in the schema).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
openCallsInboxARead-onlyInspect
Open the interactive SkipCalls Calls inbox: recent inbound and outbound calls with summaries and transcripts. Use when the user wants to browse or look through their calls visually. Read-only.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| calls | Yes | |
| nextCursor | Yes | |
| initialPath | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false and openWorldHint=false, so the trailing 'Read-only' adds nothing. What does add value is the disclosure that this opens an interactive surface rather than returning data, plus what content the inbox surfaces (summaries and transcripts).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences: identity and content first, usage condition second. No filler and nothing buried.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return-value detail is unnecessary, and the tool has no parameters to explain. The description covers the essentials for a trivial UI-opening tool; only edge behavior (e.g. empty inbox, or whether it navigates the client) is left unstated.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so there is nothing for the description to disambiguate and the baseline of 4 applies. The schema is an empty object, leaving no semantic gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Specific verb plus resource: 'Open the interactive SkipCalls Calls inbox: recent inbound and outbound calls with summaries and transcripts.' The word 'interactive' and 'visually' implicitly separate it from data-returning siblings like getCallHistory or app_listCalls, though no sibling is named outright.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'Use when the user wants to browse or look through their calls visually' gives a clear triggering condition and implicitly contrasts with programmatic retrieval. It stops short of naming an explicit alternative or a when-not-to-use case.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
previewReceptionistGreetingARead-onlyIdempotentInspect
Speak a receptionist's greeting in the receptionist's own voice and return a link to an MP3 the owner can open and play. Hears the saved greeting, or a draft passed as text, so the owner can approve wording before updateAgent saves it. Free for the user (no minutes or credits used) and changes nothing. New previews are limited per workspace (10 per hour, 30 per day); repeating the same voice and text is free and unlimited. Some voices cannot be previewed; the result then says so and suggests a test call.
| Name | Required | Description | Default |
|---|---|---|---|
| text | Yes | Unsaved greeting draft to hear instead of the saved one; null to hear the saved greeting | |
| agentId | Yes | Receptionist id from listAgents | |
| greeting | Yes | UNKNOWN_CALLERS (default: inbound callers not in contacts), KNOWN_CONTACTS (inbound callers in contacts) or OUTGOING (opening message of outgoing calls); null otherwise |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the readOnly/idempotent annotations: states it costs no minutes or credits, that repeating a voice+text pair is free and unlimited while new previews are capped at 10/hour and 30/day per workspace, that it mutates nothing, and that some voices fail with a suggested workaround. This is the kind of operational detail annotations cannot express.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Five tight sentences, front-loaded with what it does and the MP3 return, then the approval workflow, then cost, then rate limits, then the failure mode. No sentence restates the name or the annotations and each adds distinct information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description carries the return-value burden and does so (MP3 link the owner can open and play) and also covers cost, throttling with a dedup exemption, and the unsupported-voice failure path. An agent has everything needed to call it and to interpret success or failure.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description adds genuine meaning: text is a draft versus the saved greeting, and the preview is spoken in the receptionist's own voice. The enum values for greeting are documented in the schema rather than the description, so this stops short of a 5.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a concrete verb and resource ('Speak a receptionist's greeting') plus the concrete artifact returned ('a link to an MP3'). It also draws the line against the sibling it is most likely to be confused with by positioning itself as a pre-check before updateAgent saves.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is clearly contextualized: it is the approval step for wording before updateAgent persists changes, which tells the agent exactly when to reach for it instead of the update tool. It also names a fallback path ('suggests a test call') when a voice cannot be previewed, though it does not name the sibling tool that performs that call.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
reportCallIssueAInspect
Record one privacy-safe issue as negative feedback on a specific call after getCallDetails provides concrete evidence. Do not include transcript quotes, caller details, or implementation internals. This adds feedback and does not change receptionist settings.
| Name | Required | Description | Default |
|---|---|---|---|
| callId | Yes | UUID of the incoming or outgoing call that was reviewed: the call id returned by getCallHistory or search. | |
| summary | Yes | Privacy-safe owner-language issue summary. Do not include names, phone numbers, addresses, transcript quotes, IDs, or internal implementation details. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations state readOnlyHint=false, destructiveHint=false, and openWorldHint=false. The description adds real context on top: the write is additive feedback, it explicitly does not alter receptionist configuration, and it imposes a privacy constraint on payload content. It does not cover idempotency (what happens if the same call is reported twice) or failure modes, so it falls just short of a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four short sentences, with the action and its precondition front-loaded, then constraints, then a scope disclaimer. Every sentence carries distinct information and nothing is repeated.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With only two required params, full schema coverage, and no output schema, the description supplies everything an agent needs: purpose, sequencing after getCallDetails, payload privacy rules, and confirmation that no settings are affected. Nothing material is missing for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and both callId and summary are fully documented in the schema, including the privacy rule on summary. The description restates the privacy constraint and signals that callId must come from a verified call, but adds little syntax or format detail beyond what the schema already provides. A 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 a specific verb and resource: 'Record one privacy-safe issue as negative feedback on a specific call'. It also scopes the operation to a single call and single issue, which separates it from any sibling that reads calls (getCallDetails, getCallHistory) or modifies the agent (updateAgent).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It names the explicit prerequisite ('after getCallDetails provides concrete evidence'), the exclusion rule ('Do not include transcript quotes, caller details, or implementation internals'), and the boundary against a nearby class of tools ('does not change receptionist settings'). It gives the agent both when-to-use and when-not-to-confuse.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
runForwardingTestCallADestructiveInspect
Place an automated call to the user's regular phone number and verify that carrier forwarding reaches the active SkipCalls receptionist. This tests forwarding only. Never pass the SkipCalls receptionist number as the target. REAL ACTION, not a preview: the user's phone is called right away. Right before calling, show the user the exact change and get their explicit confirmation.
| Name | Required | Description | Default |
|---|---|---|---|
| targetPhoneNumber | Yes | Optional phone number to call for the forwarding test. Omit unless the user explicitly gives a different regular phone number. By default we call the user's profile phone number. Never pass the SkipCalls/receptionist number here. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and openWorldHint=true, so the safety profile is known; the description goes further by stating exactly what happens ('the user's phone is called right away'), that it is not a preview, and that the side effect is a real outbound call to a human. The prohibition on passing the receptionist number also discloses a concrete failure mode (forwarding loops).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Five short sentences, front-loaded with the action and then the risk warning and confirmation requirement. The 'never pass the receptionist number' warning appears twice (description and schema description), which is mild but deliberate redundancy rather than wasted text.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers what the call does, that it is destructive and live, and the human-in-the-loop requirement — everything needed to invoke it safely. The one remaining gap is outcome: there is no output schema and the description never says what the agent receives back or how to interpret a successful versus failed verification.
Complex tools with many parameters or behaviors need more documentation. Simple 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 schema already documents the single optional parameter, its null default, and the receptionist-number prohibition. The description only repeats that guardrail rather than adding syntax, formatting, or validation detail, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource — places an automated call to the user's regular number and verifies forwarding to the receptionist — plus an explicit scope limiter ('This tests forwarding only'). It does not name the closest sibling (getCarrierForwardingInfo) or any other alternative, so differentiation is by scope rather than by routing.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives a hard exclusion ('Never pass the SkipCalls receptionist number as the target') and a stated prerequisite workflow: show the exact change and get explicit user confirmation immediately before calling. It does not point to a preferred sibling when the user only wants to inspect forwarding status, so the agent must infer that boundary.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
scheduleCallADestructiveInspect
Place or schedule an OUTBOUND phone call on behalf of the user. Show the exact phone number, goal, and scheduledAt. If the account has active receptionists, call listAgents first and pass the exact agentId; if this tool returns a missing-agentId error, choose one of the returned IDs and retry. REFUSE harmful goals (threats, harassment, impersonation of IRS/police/bank, fraud, scams, extortion, hate speech, harmful pranks, illegal activity). For calls to place NOW, pass scheduledAt="NOW". Otherwise ISO 8601 with explicit numeric offset for the user's timezone (never bare "Z"). Only one-time calls. REAL ACTION, not a preview: a real person's phone rings, now or at scheduledAt. Right before calling, show the user the exact change and get their explicit confirmation.
| Name | Required | Description | Default |
|---|---|---|---|
| goal | Yes | Goal of the call, all detailed information from user input, place, time, context, primary goal, etc. Use English always, expect if user specified language in request. Put ALL the details from context here - time of the call, place, primary goal, etc. Do not limit only for primary goal, put all details. | |
| agentId | Yes | ID of the receptionist/agent that must place this call. Required whenever the account has any active receptionists. Get this from listAgents; do not rely on putting the agent name only in goal/additionalContext. If you omit this, scheduleCall will refuse and return the available agent IDs. | |
| phoneNumber | Yes | Phone number to schedule the outbound call to, not the user's phone number starting with country code like +1. Supported countries: +1, +1, +972, +49, +44, +33, +41, +43, +372, +30 | |
| scheduledAt | Yes | Scheduled time of the call. MUST be either "NOW" or an ISO 8601 timestamp with an EXPLICIT timezone offset matching the user's local timezone (e.g. "2026-04-16T10:00:00-05:00" for America/Chicago CDT, "2026-04-16T10:00:00+02:00" for Europe/Berlin). NEVER use the bare "Z" / UTC suffix — it will fire at the wrong hour for the user. When the user says "10 AM" they mean THEIR local time; emit the matching offset. The user's timezone and current local time are provided in User Context. | |
| doWeNeedToRetry | Yes | Do we need to run smart retry after call is failed by some reason? | |
| additionalContext | Yes | Additional context of the call. Like business name, more information about place, person we are calling, etc. Empty is ok if not needed. | |
| retryAfterMinutes | Yes | How many minutes to wait before retrying the call if not successful, optional | |
| maxDurationMinutes | Yes | Max duration of the call in minutes only if user provided it |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well past annotations by disclosing the consequence chain: "REAL ACTION, not a preview: a real person's phone rings, now or at scheduledAt," plus a mandatory pre-call confirmation of the exact change and a stated refusal policy for harmful goals. These are exactly the destructive/openWorld traits an agent needs spelled out, not just hinted at by destructiveHint=true.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with purpose, then prerequisites, then refusals, then parameter quirks, then confirmation — a sensible escalation order with no filler sentences. It runs long and repeats some schema content (especially the scheduledAt offset guidance), which keeps it out of the top band.
Shorter descriptions cost fewer tokens and are easier for agents to parse. 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 eight-required-parameter mutation with no output schema, the description covers the risky parts well: real-world side effect, confirmation gate, agentId resolution path, and timezone handling. It stops short of saying what a successful response contains or how to cancel/recover a mis-scheduled call, and it notes one-time-only without naming an alternative for recurring calls.
Complex tools with many parameters or behaviors need more documentation. Simple 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 all eight parameters — including scheduledAt's offset rule and agentId's listAgents dependency — are already documented in the schema, and the description largely restates them. It adds only the instruction to display phoneNumber, goal, and scheduledAt to the user before calling, which is workflow rather than parameter meaning; baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Opens with a specific verb+resource+scope: "Place or schedule an OUTBOUND phone call on behalf of the user." That distinguishes it cleanly from read siblings like app_listCalls, getCallDetails, and findCalendarSlots, and the OUTBOUND emphasis separates it from inbound receptionist behavior.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 routing rules: call listAgents first when active receptionists exist and pass the exact agentId; on a missing-agentId error, pick a returned ID and retry. It also names when to refuse (harmful goals), when to use scheduledAt="NOW" vs an ISO timestamp, and that only one-time calls are supported — leaving little to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
searchARead-onlyInspect
Targeted search across calls, contacts, SMS, or knowledge. Choose the narrowest scope. For calls/contacts/SMS use only a phone number, name, company, or 1-4 distinctive words, never a full request. Any explicit call time window takes precedence over a name, phone, company, or topic: use getCallHistory.sinceHours and do not call search in the same turn to bypass or widen that window. Natural-language questions are allowed only with scope=knowledge. scope=all searches contacts, calls, and SMS but not knowledge. On follow-ups, reuse sufficient prior results instead of repeating the same query with a higher limit. Returns Call IDs for getCallDetails.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | Yes | Maximum results per selected section. Choose the smallest useful limit; normally 3, or omit for the default 5. Use more only when the user asks for a broader list. Up to 10; larger values are capped to 10. | |
| query | Yes | The shortest distinctive lookup text. For calls, contacts, or text conversations use only a phone number, email, name, company, or 1-4 meaningful topic/message words. Never restate the full user request. Any explicit call time window such as "today" or "a couple hours ago" takes precedence over a name, phone, company, or topic: use getCallHistory.sinceHours and do not use search to bypass that window in the same turn. A natural-language question is allowed only with scope="knowledge". | |
| scope | Yes | Required search surface: calls, contacts, conversations, knowledge, or all. conversations searches SMS, email, and website-chat threads. Pick the narrowest surface. all searches contacts, calls, and text conversations but not knowledge; use it only when the user explicitly asks across multiple operational data types. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false and openWorldHint=false, so safety is covered. The description still adds non-obvious behavior: the precedence rule where a time window overrides entity/topic matching, the exclusion of knowledge from scope=all, and the fact that results are Call IDs intended for getCallDetails. It does not describe result shape for the contacts/conversations/knowledge sections.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with purpose then routing constraints, and every sentence carries an actionable rule. The main inefficiency is that the time-window precedence rule is stated twice (in the description and again in the query parameter), which is redundant rather than harmful.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 3-parameter, fully-required search with no output schema, the description covers routing, query shaping, precedence, and follow-up behavior — everything needed to call it correctly. The one remaining gap is what the non-call sections return, since only 'Call IDs for getCallDetails' is mentioned.
Complex tools with many parameters or behaviors need more documentation. Simple 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's parameter guidance (shortest distinctive query, narrowest scope, small limit) largely restates what the schema properties already say verbatim. It adds no syntax, format, or edge-case detail beyond the structured fields, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Opens with a specific verb+resource ('Targeted search across calls, contacts, SMS, or knowledge') and enumerates the surfaces, so an agent can distinguish it from getCallHistory, search_mentions, or searchHelpCenter without opening the schema. The routing sentence about scope=all excluding knowledge further sharpens the boundary.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly names the alternative and the condition that selects it: an explicit call time window must go to getCallHistory.sinceHours and search must not be called in the same turn to widen it. It also constrains query form ('1-4 distinctive words, never a full request'), restricts natural-language questions to scope=knowledge, and tells the agent to reuse prior results on follow-ups rather than re-querying with a higher limit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
searchHelpCenterARead-onlyInspect
Search the official SkipCalls product documentation (help center) with vector search. Returns full article passages with links. Call this first for any question about how SkipCalls works: what a feature does, how to set something up, which plan includes a feature, or troubleshooting. Only for SkipCalls product questions; not for the user's own business facts, settings, calls, or their own Knowledge Base.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | What to look up in the SkipCalls help center, in plain words, for example "forward calls from Bell" or "how call scenarios work". |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, openWorldHint=false, destructiveHint=false, so the safety profile is carried structurally. The description adds value by disclosing the retrieval mechanism (vector search) and the return shape ('full article passages with links'), which matters because there is no output schema. No mention of result limits or fallback behavior when nothing is found, which keeps it from a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, front-loaded with the capability, then the routing rule, then the exclusion. Every clause adds decision-relevant information; there is no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter read-only search with no output schema, the description covers what it searches, when to invoke it first, what it returns, and what it explicitly does not cover. Nothing an agent needs in order to call it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the single query parameter is well documented with concrete examples ('forward calls from Bell'). The description adds nothing further about how to phrase or scope the query, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: 'Search the official SkipCalls product documentation (help center) with vector search.' The parenthetical and 'SkipCalls product documentation' scope clearly separate it from generic siblings like search, search_mentions, and the knowledge_* page 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?
Gives explicit when-to-use guidance ('Call this first for any question about how SkipCalls works: what a feature does, how to set something up, which plan includes a feature, or troubleshooting') and explicit when-not ('not for the user's own business facts, settings, calls, or their own Knowledge Base'). It also names the alternative source (the user's Knowledge Base) for the excluded case.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_mentionsARead-onlyInspect
Typeahead for the ChatGPT composer @-mention menu: up to 8 matching SkipCalls contacts and recent calls as resource links the user can attach. An empty query returns the most recent calls. To look something up for an answer, use search instead.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | Typeahead text; may be empty. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false and openWorldHint=false, so the safety profile is covered. The description adds genuinely new behavior beyond that: a hard cap of 8 results, the empty-query fallback, and the fact that results surface as attachable resource links rather than plain data. It stops short of describing ordering or ranking of the typeahead matches, which keeps it from a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, no filler, with the typeahead purpose front-loaded and the sibling disambiguation placed last as a routing note. Every sentence carries distinct information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter read-only lookup with no output schema, the description covers what it matches, how many results come back, the empty-query case, and the form of the return (resource links in a composer menu). Nothing an agent needs to call it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With one parameter at 100% schema coverage, the baseline is 3, but the description goes further by explaining what an empty query does semantically ('returns the most recent calls'), which the schema's 'may be empty' does not convey. That is real added meaning for the only parameter.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a precise role: 'Typeahead for the ChatGPT composer @-mention menu', then names the resource set (contacts and recent calls as attachable resource links). It also explicitly distinguishes itself from the sibling `search` tool, so an agent can route correctly without opening either 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?
It names the alternative explicitly ('To look something up for an answer, use search instead') and documents the degenerate case ('An empty query returns the most recent calls'). Both the when-to-use and when-not-to-use conditions are stated outright.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sendCallFollowUpADestructiveInspect
Send one EMAIL or SMS follow-up tied to an exact completed inbound call that is linked to a contact. The backend resolves EMAIL from the contact's saved email and SMS from the call's caller number. Show the exact channel, recipient, and complete message. Never silently switch channels. REAL ACTION, not a preview: the email or text reaches the caller immediately and cannot be recalled. Right before calling, show the user the exact change and get their explicit confirmation.
| Name | Required | Description | Default |
|---|---|---|---|
| channel | Yes | Delivery channel explicitly requested or approved by the owner. Never silently switch channels. | |
| message | Yes | Complete message exactly as approved by the owner. EMAIL must be a natural plain-text email with greeting, call context, requested message, and polite sign-off; the backend creates its subject, so do not include a Subject line. Choose a natural signature from the known owner preferred/name identity or represented business identity according to the message context; never sign as the receptionist. If no suitable identity is known, omit a sender name. Never invent a sender or leave template placeholders for the owner to complete. SMS should be concise and natural for text. Never invent names, facts, commitments, or a sender identity. | |
| incomingCallId | Yes | ID of the existing inbound call that authorizes this follow-up. Outbound calls are not eligible. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark this as destructive and open-world, and the description adds critical context: this is a real action, not a preview, the message reaches the caller immediately, and it cannot be recalled. It also explains backend channel resolution and the need for explicit user confirmation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the core action and then adds safety-critical details. It is appropriately sized for a destructive action, though some channel-switching guidance repeats what is already in the schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive, open-world tool with no output schema, the description covers the essential behavioral context: authorization source, channel resolution, message requirements, irreversibility, and confirmation. Nothing critical is missing for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the schema already documents all three parameters in detail. The description adds useful semantics beyond the schema by explaining that EMAIL resolves from the contact's saved email and SMS resolves from the call's caller number.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: send one EMAIL or SMS follow-up tied to an exact completed inbound call linked to a contact. It also distinguishes this from generic messaging by requiring an authorizing inbound call and contact linkage.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives clear prerequisites (completed inbound call, linked contact) and a strong confirmation requirement before execution. It does not explicitly name alternatives such as sendSms or state when not to use this tool, so it falls short of full alternative routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sendSmsADestructiveInspect
Send an SMS from the user to a phone number that is eligible for messaging. Show the exact recipient and message. Backend validates whether SMS is allowed for that recipient. REAL ACTION, not a preview: the text is delivered to that person immediately and cannot be recalled. Right before calling, show the user the exact change and get their explicit confirmation.
| Name | Required | Description | Default |
|---|---|---|---|
| message | Yes | Message to send | |
| phoneNumber | Yes | E.164 phone number to text |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already flag readOnlyHint=false, destructiveHint=true, openWorldHint=true; the description reinforces this with far more useful detail: delivery is immediate, cannot be recalled, and the backend validates eligibility for the recipient. That is exactly the consequence-level context an agent needs before a destructive outbound action.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four short sentences, front-loaded with the action and its irreversible nature, then the confirmation requirement. No restated name/title, no filler; each sentence adds a distinct operational fact.
Shorter descriptions cost fewer tokens and are easier for agents to parse. 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 outbound mutation with no output schema, the description covers everything that matters: eligibility validation, irreversibility, and the mandatory confirmation step. Nothing an agent needs to call this safely 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% and both parameters (message, phoneNumber in E.164) are documented there. The description only adds that the recipient must be messaging-eligible, which is a constraint rather than parameter syntax, so baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Send an SMS') with scope ('a phone number that is eligible for messaging'). The phrase 'REAL ACTION, not a preview' directly separates it from preview/confirmation-style siblings such as previewReceptionistGreeting, so an agent can classify it without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives a clear precondition for invocation: show the exact recipient and message and obtain explicit user confirmation immediately before calling. It also frames the not-a-preview case. It stops short of naming a sibling alternative for non-delivery scenarios (e.g., drafting vs sending), so it is clear context rather than a full when/when-not decision tree.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
startSubscriptionCheckoutAInspect
In ChatGPT, checkout is unavailable: return the SkipCalls dashboard link and do not create a session. Other MCP clients may create a hosted Stripe Checkout link for one approved plan and billing period returned by getBillingInfo; show that plan, period and price. REAL ACTION, not a preview: it opens a live Stripe Checkout session, and paying there charges the user's card. Right before calling, show the user the exact change and get their explicit confirmation.
| Name | Required | Description | Default |
|---|---|---|---|
| planId | Yes | Exact plan ID returned by getBillingInfo | |
| billingPeriod | Yes | Billing period selected and explicitly confirmed by the user |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only declare readOnlyHint=false, openWorldHint=true, destructiveHint=false — they say nothing about money. The description adds the crucial fact that this is a real Stripe session whose payment charges the user's card, plus the confirmation gate. It stops short of stating what happens on an unapproved plan or whether abandoned sessions expire, but the safety-critical disclosure is well beyond what the annotations carry.
Agents need to know what a tool does to the 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 tight sentences with no filler, and the ChatGPT carve-out plus the getBillingInfo dependency are front-loaded. The most safety-critical sentence ('REAL ACTION... charges the user's card') sits in the middle rather than leading, which slightly weakens front-loading for a card-charging tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-parameter mutation with no output schema, the description covers the routing branch, the input source, the real-world consequence, and the confirmation requirement. It omits what the call returns (presumably a checkout URL) and failure behavior for a non-approved plan, which an agent would want before promising an outcome.
Complex tools with many parameters or behaviors need more documentation. Simple 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 already document their constraints (plan ID must come from getBillingInfo; billing period must be user-confirmed). The description reinforces the plan/period/price display requirement but adds no syntax, format, or edge-case detail beyond the schema, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: create a hosted Stripe Checkout link for one approved plan and billing period. It also names the sibling that supplies the inputs (getBillingInfo) and the ChatGPT-specific branch, so an agent can distinguish this from the read-only billing tools without opening any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit when-not (in ChatGPT, checkout is unavailable — return the dashboard link and do not create a session), when-to (other MCP clients, one approved plan/period from getBillingInfo), and a mandatory precondition (show the exact change and get explicit confirmation immediately before calling). Nothing about routing is left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
statusReportARead-onlyInspect
Get a receptionist/workspace health report for questions like "How is my receptionist doing?", "How are things?", or "What needs attention?". Returns today/all-time call counts, recent activity, upcoming calendar events, valuable calls, and setup Doctor problems. For a period question ("How many leads did I get last month?", "How many calls this week?", "How many estimates went out in October?") pass from (and optionally to) as YYYY-MM-DD dates in the owner's timezone, up to 366 days: it then returns only that period's stats (inbound/outbound calls, answered vs voicemail/routed/failed/spam, leads by type, bookings, transfers, average length, per-receptionist split, estimates estimated/sent/quoted total, Work items created/closed/open). Read-only.
| Name | Required | Description | Default |
|---|---|---|---|
| to | Yes | Last day of the period, YYYY-MM-DD (inclusive). Null = today. Only with `from`; at most 366 days. | |
| from | Yes | First day of a period to report on, YYYY-MM-DD in the owner's timezone (inclusive). Set it for questions about a period ("how many leads last month", "calls this week", "estimates sent in October"). Null otherwise: the general health report. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint/destructiveHint, and the description adds real context beyond them: owner-timezone interpretation, an inclusive-date convention, a hard 366-day cap, and a full enumeration of what the response contains. It stops short of noting cost, latency, or what happens with empty periods.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the purpose, then the default report contents, then the period-report branch — logical ordering with no filler sentences. The parenthetical list of period metrics is long but each item earns its place by telling the agent what data is available.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description compensates by enumerating both the default report contents and the period-mode metrics, which is exactly what an agent needs to decide whether to call this or a narrower tool. Timezone, date bounds, and mode selection are all covered.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the schema already documents both parameters as YYYY-MM-DD, inclusive, null-means-today, at most 366 days. The description largely restates those same facts with example queries, adding only the owner's-timezone nuance. Baseline 3 is appropriate since the schema carries the semantics.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ("Get a receptionist/workspace health report") and anchors it with example user questions that separate it from siblings like getOverview or getCallHistory. The second half also explains the distinct period-report mode, so an agent knows exactly what comes back.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives concrete trigger phrasing for both modes and explicitly says when to pass `from` versus when to omit it ("Null otherwise: the general health report"). It never names a competing sibling to prefer instead, so routing against getCallHistory/getOverview is left implicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
transfer_numbers_addAInspect
Add one transfer number to a receptionist (max 20). label is a single lowercase word such as "sales"; description says when to transfer there. Warm transfer by default. Get explicit approval before calling.
| Name | Required | Description | Default |
|---|---|---|---|
| label | Yes | ||
| agentId | Yes | Receptionist ID from listAgents. | |
| isActive | Yes | For add / update. false = keep configured but skip in routing. | |
| workHours | Yes | For add / update. Per-day work hours in HHMM, e.g. {"MONDAY": [900, 1730]}. Omit to keep current. | |
| description | Yes | ||
| phoneNumber | Yes | ||
| transferType | Yes | For add / update. "warm" = AI briefs the recipient before connecting; "cold" = direct transfer. Defaults to "warm" on add. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description provides critical behavioral context not found in the schema or annotations: the 'max 20' limit, the default 'warm transfer' type, and the mandatory 'Get explicit approval before calling' step, all of which are key operational behaviors.
Agents need to know what a tool does to the 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 efficient. It front-loads the core purpose and immediate functional constraints (max 20, label format) before adding behavioral nuances.
Shorter descriptions cost fewer tokens and are easier for agents to parse. 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 complex nature of the input schema, the description provides the necessary external context (limits, approval flow, default behavior) that helps an agent understand the scope and required process, making it very 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?
Although schema coverage is low (57%), the description adds vital semantic constraints on key parameters, specifically dictating that 'label' must be a single lowercase word and explaining the 'description' field's role in the transfer decision-making process.
Input schemas describe structure but not intent. Descriptions should explain non-obvious 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 transfer number) and the target resource (receptionist). While it doesn't list all siblings, the 'Add' prefix clearly distinguishes it from list, delete, or update operations in the context of the sibling 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?
It provides strong contextual usage constraints, such as the maximum capacity (max 20) and specific formatting rules for the 'label'. It implies usage through the constraints rather than explicitly detailing when *not* to use it compared to siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
transfer_numbers_deleteADestructiveIdempotentInspect
Permanently remove one transfer number by transferShortId. Prefer transfer_numbers_update with isActive=false to pause it. REAL ACTION, not a preview: the transfer number is removed and live calls stop transferring to it. Right before calling, show the user the exact change and get their explicit confirmation.
| Name | Required | Description | Default |
|---|---|---|---|
| agentId | Yes | Receptionist ID from listAgents. | |
| transferShortId | Yes | 4-character ID from transfer_numbers_list (for example "a1b2"). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, readOnlyHint=false, idempotentHint=true, but the description goes further: it spells out the real-world consequence ("live calls stop transferring to it") and emphasizes "REAL ACTION, not a preview." It also imposes a confirmation protocol, which is exactly the behavioral context an agent needs before a destructive call.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four short sentences, front-loaded with the purpose, then the safer alternative, then the risk, then the required confirmation step. Nothing is redundant and the ordering matches decision order.
Shorter descriptions cost fewer tokens and are easier for agents to parse. 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 two-parameter tool with no output schema, the description covers scope, risk, alternative, and the confirmation protocol. There is no meaningful gap an agent would need filled before invoking 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?
Schema description coverage is 100%, so both agentId and transferShortId are already documented (including the 4-character format and source endpoint). The description only restates transferShortId as the selector and adds no format or sourcing detail beyond the schema. Baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ("Permanently remove one transfer number"), pins the scope to a single record, and names the key identifier (transferShortId). It is unmistakable against siblings like transfer_numbers_list, transfer_numbers_update, and transfer_numbers_reorder.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly routes the agent to the softer alternative: "Prefer transfer_numbers_update with isActive=false to pause it." This gives both a when-to-use and a when-not-to-use with the named substitute, plus the pre-call confirmation requirement.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
transfer_numbers_listARead-onlyIdempotentInspect
List a receptionist's transfer numbers (where it hands off live calls) in priority order, with their 4-character IDs, schedules, warm/cold mode and active state. Read-only.
| Name | Required | Description | Default |
|---|---|---|---|
| agentId | Yes | Receptionist ID from listAgents. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint and destructiveHint=false, so 'Read-only' is partly redundant but consistent. Beyond the annotations, the description discloses meaningful behavior: results are in priority order and each item carries 4-character IDs, schedules, warm/cold mode and active state – return-shape information the agent would otherwise lack.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single dense sentence front-loads the resource and scope, then enumerates returned fields, ending with the safety qualifier. No filler or repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema exists, and the description compensates by enumerating the returned fields (IDs, schedules, mode, active state) and ordering. Combined with full parameter coverage and rich annotations, an agent has everything needed to call and interpret 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?
One parameter with 100% schema description coverage ('Receptionist ID from listAgents'), so the schema already explains both meaning and provenance. The description adds nothing about the agentId, which is acceptable given full coverage; baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('List a receptionist's transfer numbers') and even disambiguates the domain concept with a parenthetical explanation of what transfer numbers are (handoff points for live calls). The name plus description make it unambiguous against siblings like transfer_numbers_add or transfer_numbers_reorder.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied: the description says it lists existing numbers and is read-only, which hints at inspection-before-mutation workflows, but it never explicitly contrasts with transfer_numbers_update or transfer_numbers_add, nor states prerequisites. Adequate but with clear gaps.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
transfer_numbers_reorderADestructiveIdempotentInspect
Set the priority order of all of a receptionist's transfer numbers (the order the receptionist tries them when transferring a caller). Call transfer_numbers_list first: orderedShortIds must contain every transfer number, top first; a partial list is rejected and the old order stays. Only the order changes; to edit a number or its rules use transfer_numbers_update. Show the new order and get explicit approval before calling.
| Name | Required | Description | Default |
|---|---|---|---|
| agentId | Yes | Receptionist ID from listAgents. | |
| orderedShortIds | Yes | Every transferShortId of this receptionist in the new priority order, top first. Partial lists are rejected. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare destructiveHint=true and idempotentHint=true, but the description supplies the reasoning behind them: a partial list is rejected atomically and 'the old order stays', which tells the agent the failure mode is safe and non-partial. It also mandates an approval step before invocation, which is exactly the human-in-the-loop guidance a destructive-flagged tool needs. Adds genuine context beyond the annotation set rather than restating it.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three tight sentences, each earning its place: what it does, the prerequisite plus failure mode, and the sibling boundary plus approval requirement. The core action is front-loaded and no sentence is filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, yet the description implies the resulting order is surfaced ('Show the new order'), covering the return behavior an agent needs. For a two-parameter, non-nested mutation tool, everything required to invoke it correctly — prerequisite call, completeness constraint, failure semantics, and approval gate — is present.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so both parameters are already documented, making 3 the floor. The description still adds non-obvious semantics: orderedShortIds must be exhaustive ('must contain every transfer number') and the ordering direction is 'top first', reinforcing that a partial list fails validation rather than appending.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Set the priority order of all of a receptionist's transfer numbers') and immediately defines what the order means operationally ('the order the receptionist tries them when transferring a caller'). It also names the sibling it is not (transfer_numbers_update) and the sibling it depends on (transfer_numbers_list), so an agent can distinguish it without opening any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit prerequisites ('Call transfer_numbers_list first'), an explicit alternative for a different need ('to edit a number or its rules use transfer_numbers_update'), and an explicit process constraint ('Show the new order and get explicit approval before calling'). Both when-to-use and when-not-to-use are covered.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
transfer_numbers_updateADestructiveIdempotentInspect
Change one transfer number by transferShortId: label, description, phone number, schedule (clearWorkHours=true makes it 24/7), warm/cold mode, or isActive=false to pause it while keeping its setup. Send only changed fields. Get explicit approval before calling.
| Name | Required | Description | Default |
|---|---|---|---|
| label | Yes | For add / update. Single lowercase word (a–z only, no spaces / numbers / punctuation), e.g. "sales", "manager", "afterhours". Unique per agent. | |
| agentId | Yes | Receptionist ID from listAgents. | |
| isActive | Yes | For add / update. false = keep configured but skip in routing. | |
| workHours | Yes | For add / update. Per-day work hours in HHMM, e.g. {"MONDAY": [900, 1730]}. Omit to keep current. | |
| description | Yes | For add / update. ≤140 chars explaining when AI should transfer to this number, e.g. "Use for sales inquiries and new customer questions". | |
| phoneNumber | Yes | For add / update. E.164 format (e.g. "+15551234567"). Backend validates + normalizes; must be in a supported country. | |
| transferType | Yes | For add / update. "warm" = AI briefs the recipient before connecting; "cold" = direct transfer. Defaults to "warm" on add. | |
| clearWorkHours | Yes | For update only. true = clear transfer schedule and make this number available 24/7. Omit or false to keep current schedule unless workHours is provided. | |
| transferShortId | Yes | 4-character ID from transfer_numbers_list (for example "a1b2"). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructive/idempotent/non-read-only, and the description adds value on top: a required human-approval step and a non-obvious side effect (pausing preserves setup instead of removing the number). However, "Send only changed fields" sits in tension with a schema that marks all 9 parameters required, which leaves the actual mutation semantics slightly ambiguous.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the identity of the operation and the key parameter in the first clause, then packs field semantics and the approval requirement into dense, non-redundant sentences. No filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 9-required-parameter destructive mutation with no output schema, the description covers approval and pause/schedule side effects well but leaves a real ambiguity unresolved: whether the agent must supply all 9 fields or only changed ones. It also says nothing about what a successful update returns or how failures surface.
Complex tools with many parameters or behaviors need more documentation. Simple 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 restates semantics already present in the schema (clearWorkHours=true means 24/7; isActive=false keeps configuration), adding little beyond the parameter docs, and its partial-update instruction conflicts with the schema's required list.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Opens with a specific verb+resource+key: "Change one transfer number by transferShortId." It then enumerates the exact mutable facets (label, description, phone, schedule, mode, isActive), which separates it cleanly from transfer_numbers_add, transfer_numbers_delete, transfer_numbers_reorder, and transfer_numbers_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?
Gives clear operational context: use isActive=false to pause rather than delete, use clearWorkHours=true for 24/7, and send only changed fields. It also mandates approval before calling. It does not explicitly name a sibling alternative or exclusion, so it stops short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
updateAgentADestructiveInspect
Update one SkipCalls receptionist's configuration. Send ONLY the fields you intend to change — never the whole config. ALWAYS get explicit user approval before calling; summarize the proposed change in plain language and wait for confirmation. NEVER rewrite, condense, translate, or 'improve' user-provided text — pass it through verbatim. Route instruction changes by call direction: instructions is outbound-only and incomingCallInstructions is incoming-only. Never copy, summarize, or distill the opposite-direction field into the selected field unless the user explicitly approves a separate shared change. IMPORTANT about instructions fields: SkipCalls already has a strong internal system prompt that handles tone, safety, persona, turn-taking, and call-handling behavior. Do NOT pad these fields with generic AI-assistant rules ('be polite', 'speak clearly', 'ask follow-up questions'), and do NOT use instructions as a workaround for real settings such as speaking pace, incoming SMS enablement, SMS auto-send mode, default post-call SMS, Smart Follow-ups, texts during calls, transfer destinations, calendars, or blocklists. Incoming call instructions are always the base for SMS; incomingSmsInstructions is only an SMS-specific overlay when needed, not the SMS on/off switch. Keep instructions short and business-specific: hours, services, pricing, booking rules, which questions to ask callers, which information to collect, when to transfer. If the user's request only has generic instructions, ask them for business-specific facts instead.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Name of the agent. Send null to leave unchanged. | |
| voice | Yes | Voice ID to use for the agent. Use getAvailableVoices to see the list. Send null to leave unchanged. | |
| agentId | Yes | ID of the agent to update | |
| voiceSpeed | Yes | Voice speaking pace from slow to fast. 0.5 is normal/provider default. Prefer mobile presets: Slow 0.35, Normal 0.5, Faster 0.75. Not all voice providers support speed control. Only set when the approved proposal explicitly mentioned speaking speed or pace; tone/persona words such as warm, polished, friendly, professional, calm, energetic, or efficient are not approval to change voice speed. Send null to leave unchanged. | |
| recordCalls | Yes | Save audio recordings of calls. Transcripts are kept either way. Send null to leave unchanged. | |
| sttKeyterms | Yes | Recognition Boost: names and special words speech recognition should listen for (max 50 items, each at most 6 words and 50 characters). Send the complete list; it replaces the saved list. Send [] to clear. Send null to leave unchanged. | |
| typingSound | Yes | Play typing sounds when agent is processing. Send null to leave unchanged. | |
| firstMessage | Yes | Opening message for outbound calls, used when the call has no call-specific opening message. Send null to leave unchanged. | |
| instructions | Yes | Behavioral instructions used for outbound calls only. Use this field for approved outbound-call wording, identity, disclosure, questioning, and goal-execution rules. Do not copy or distill incomingCallInstructions into it merely because an incoming rule looks reusable. Send null to leave unchanged. | |
| closingPhrase | Yes | Closing phrase before ending a call. Send null to leave unchanged. | |
| allowFollowUps | Yes | Enable Smart Follow-ups: personalized AI-generated post-call SMS follow-ups for eligible incoming calls. Different from incoming SMS auto-replies and the default post-call SMS. Send null to leave unchanged. | |
| behaviorPreset | Yes | Overall receptionist role. 'employee' = capable team member who handles what it can; 'default' = calm gatekeeper who mainly takes messages for an unavailable owner. Send null to leave unchanged. | |
| backgroundSound | Yes | Add office ambiance sounds during incoming calls. Send null to leave unchanged. | |
| dataConsentText | Yes | Custom text for what consent is requested for. Send null to leave unchanged. | |
| allowIncomingSms | Yes | Enable the SMS receptionist for incoming text conversations. This is a boolean setting; do not use call instructions to turn SMS on/off. Send null to leave unchanged. | |
| allowRealtimeSms | Yes | Allow the receptionist to send SMS during active phone calls. Different from one-off chat SMS sends, incoming SMS auto-replies, and post-call SMS. Send null to leave unchanged. | |
| autoRespondToSms | Yes | Send SMS receptionist replies automatically. false means draft/waiting approval, not that incoming SMS is disabled. Send null to leave unchanged. | |
| smsResponseDelay | Yes | Delay in seconds before auto-responding to SMS. Send null to leave unchanged. | |
| strictSpamFilter | Yes | Strictly reject incoming spam calls before connecting. Send null to leave unchanged. | |
| valuableCallRule | Yes | Custom rule (max 300 characters) for which incoming calls count as valuable leads and trigger the valuable-lead alert. An empty string restores the default important-call detection. Send null to leave unchanged. | |
| voiceRecognition | Yes | EN = English-only (higher accuracy), MULTI = multilingual support. Send null to leave unchanged. | |
| businessProfileId | Yes | Owned business profile ID for this receptionist. Use manageBusinessProfileQA action=listProfiles to find IDs. Calls use its company details and Q&A. An empty string clears the attachment. Send null to leave unchanged. | |
| delayAcceptSeconds | Yes | Answer Delay: seconds (0-20) the receptionist waits after a call reaches SkipCalls before answering. Only for Google Voice or simultaneous ring so the owner's phone rings first; keep 0 for carrier no-answer forwarding. Send null to leave unchanged. | |
| postCallSmsMessage | Yes | Default post-call SMS for eligible incoming calls. When smart follow-ups are enabled, this is the fallback if no personalized follow-up is sent. Send null to leave unchanged. This text is sent literally: no dynamic placeholders, template variables, bracket placeholders, or fake example URLs. | |
| requireDataConsent | Yes | Require caller consent before starting call. Send null to leave unchanged. | |
| knowledgeAccessMode | Yes | Knowledge base access mode. 'NONE' disables KB lookup. 'ALL' lets agent read every KB item. 'TAGS_ONLY' restricts to items tagged in knowledgeAccessTags. Send null to leave unchanged. | |
| knowledgeAccessTags | Yes | Tags the agent is allowed to read when knowledgeAccessMode='TAGS_ONLY'. Ignored for NONE/ALL. Send [] to clear. Send null to leave unchanged. | |
| outgoingTypingSound | Yes | Play typing sounds while the receptionist works during outbound calls. Send null to leave unchanged. | |
| followUpInstructions | Yes | Custom instructions for Smart Follow-ups. Max 600 characters. Send null to leave unchanged. | |
| inboundPreCloseRules | Yes | Final checks before ending an incoming call (max 4000 characters): must-have details the receptionist confirms before it hangs up. Send the complete text; an empty string clears it. Send null to leave unchanged. | |
| enableVoiceExpressions | Yes | Voice Expressions: lets the voice add breaths, sighs, laughs, pauses, and other expressive delivery cues where the voice provider supports them. false stops them; a call-instruction rule cannot. Send null to leave unchanged. | |
| incomingSmsInstructions | Yes | Optional SMS-specific overlay for text conversations. Base behavior comes from incoming call instructions; this field should only add text-specific rules such as brevity, signature, or channel limits. Do not put SMS enablement, auto-send toggles, Smart Follow-ups, realtime texts, or blocklists here. Preserve the user's SMS-specific wording exactly as provided. Send null to leave unchanged. | |
| outgoingBackgroundSound | Yes | Add office ambiance sounds during outbound calls. Send null to leave unchanged. | |
| skipAiForSyncedContacts | Yes | Send every contact synced from the owner's phone straight to Skip AI voicemail instead of the receptionist. Contacts saved after calls, on the web, or by import are not included. Send null to leave unchanged. | |
| incomingCallInstructions | Yes | Compact behavioral workflow for incoming calls using capabilities already available to this receptionist: intent routing, questions to ask, qualification, spoken policies, specific phrases, language preferences, and when to use enabled call tools. Do not use this field as a store for catalogs/manuals/large reference data, basic Business Profile facts, generic assistant behavior already handled by the system, product toggles, transfer/calendar configuration, or carrier-level behavior. Inbound caller keypad/DTMF signals are handled by the runtime; define a menu mapping only in explicitly approved incoming-call instructions. Preserve user-provided instruction text exactly as approved — do NOT summarize or condense. Send null to leave unchanged. | |
| maxIncomingCallDurationMinutes | Yes | Maximum duration for incoming calls in minutes (0-60; 0 = No limit in the app). Calls are never ended by this limit before 15 minutes: values under 15, including 0, run as 15. Send null to leave unchanged. | |
| maxOutgoingCallDurationMinutes | Yes | Maximum duration for outbound calls in minutes (0-60; 0 = No limit in the app, which runs as 60). Values 1-14 run as 15. Send null to leave unchanged. | |
| allowOutboundGreetingInterruptions | Yes | Outbound calls: let the other person interrupt the opening message. false makes the receptionist finish the opening first. Send null to leave unchanged. | |
| welcomingVoiceMailMessageForOthers | Yes | Greeting message for unknown callers when agent answers. Send null to leave unchanged. | |
| welcomingVoiceMailMessageForContacts | Yes | Greeting message for known contacts when agent answers. For personalization, use only these exact double-brace variables with no spaces: {{contact_name}}, {{contact_first}}, {{contact_last}}, {{contact_company}}, {{contact_email}}, {{contact_phone}}, {{contact_address}}. Example: "Hi {{contact_first}}! How can I help?" Never invent aliases such as {first_name}, {{first_name}}, {contact_first}, or {{name}}. Send null to leave unchanged. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already flag this as destructive and non-read-only; the description adds the operational context that matters: partial-update semantics, mandatory human approval, verbatim-text pass-through, and the warning that instructions fields must not be used as a proxy for real settings (SMS toggles, pace, transfers, blocklists). It does not describe what happens on validation failure, permission/auth requirements, or the response shape.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded correctly: the partial-update rule and the approval requirement come first, before the more granular instructions-field guidance. It is long (~300 words), but this is a destructive 40-parameter mutation tool where the length is defensible. Some sentences duplicate what the schema already says about outbound/incoming instruction routing, which is the main trimming opportunity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive tool with 40 required-but-nullable parameters and no output schema, the description covers the critical failure modes: sending the whole config, missing approval, paraphrasing user text, and abusing instruction fields as settings. What it omits is the return behavior and error handling, which would be more valuable given no output schema exists to fill that 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% so parameter mechanics are already documented; the description goes beyond that by explaining the semantic split between `instructions` (outbound-only) and `incomingCallInstructions` (incoming-only), and that `incomingSmsInstructions` is an overlay rather than the SMS on/off switch. It also pre-empts the common misuse of stuffing generic assistant rules into instruction fields. A 4 rather than 5 because these rules are partially restated rather than adding new per-parameter detail.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Opens with a specific verb+resource: 'Update one SkipCalls receptionist's configuration.' An agent immediately knows this is a partial-mutation tool on a single agent record. It does not name or differentiate itself from the other update-shaped siblings (updateOutbound, updateTimezone, onboarding_create_receptionist), so it stops short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit pre-conditions ('ALWAYS get explicit user approval before calling; summarize the proposed change in plain language and wait for confirmation') and an explicit invocation rule ('Send ONLY the fields you intend to change — never the whole config'). It also tells the agent when to stop and ask the user for more input rather than proceeding with generic instructions. No sibling alternative is named, which keeps it out of 5 territory.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_contactADestructiveInspect
Update fields on a contact. Standard fields (firstName, lastName, email, companyName, notes, tags, lifecycleStage) and any custom field keys are accepted. bypassReceptionist turns Skip AI on (true) or off (false) for this person. doNotCall and doNotSms are protected — only the business owner can change those via the dashboard. Routes through the audit log so changes appear in the timeline. Use it to change an existing contact found with search or get_contact; to add someone new by phone number use addToContacts, and to add a dated note without touching fields use create_contact_note. Only the listed fields change; returns the updated contact, or an {error} naming an unknown contact or invalid value.
| Name | Required | Description | Default |
|---|---|---|---|
| fields | Yes | Standard fields (firstName, lastName, email, companyName, notes, tags, lifecycleStage, bypassReceptionist) or any custom field key as key/value pairs. bypassReceptionist is Skip AI (true/false): when true, this person's calls skip the AI receptionist and leave a voicemail after the owner's greeting. doNotCall/doNotSms are blocked for compliance. | |
| contactId | Yes | UUID of the contact to update. Get it from search (scope contacts). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark this as non-read-only and destructive, and the description adds exactly the context they cannot: which fields are write-protected for compliance and why (only the business owner via dashboard), that the operation is a partial patch ("Only the listed fields change"), that it is audit-logged into the timeline, and that failures return an error naming an unknown contact or invalid value. That covers mutation scope, authorization constraints, and error 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?
Content is dense and front-loaded: mutation scope first, then field semantics, then routing, then return behavior. The bypassReceptionist sentence partially duplicates the schema's own parameter description, which is the only real redundancy in an otherwise efficient block.
Shorter descriptions cost fewer tokens and are easier for agents to parse. 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, yet the description still states the return value (the updated contact) and the error shape. Combined with the authorization constraint, partial-update guarantee, and audit behavior, nothing an agent needs in order to call this destructive mutation safely 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 already 100%, and the schema text itself spells out bypassReceptionist as Skip AI and the doNotCall/doNotSms block. The description largely restates those same semantics rather than adding new detail such as value formats, key casing, or how clearing a field with null behaves, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The opening sentence states a specific verb and resource ("Update fields on a contact") and the body enumerates the updatable field families (standard fields, custom keys, bypassReceptionist). It also explicitly distinguishes itself from addToContacts (new contact by phone) and create_contact_note (dated note without touching fields), so an agent can route correctly without inspecting the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit when-to-use ("change an existing contact found with search or get_contact") paired with two named alternatives and the conditions that select them (adding someone new by phone number, adding a dated note). The doNotCall/doNotSms exclusion tells the agent when the call will fail.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
updateOutboundADestructiveInspect
Update the goal of one queued outbound call in place. Use a call ID returned by getCallHistory. Show the exact new goal. Refuse the same harmful goals as scheduleCall. REAL ACTION, not a preview: the call will say the new goal to a real person. Right before calling, show the user the exact change and get their explicit confirmation.
| Name | Required | Description | Default |
|---|---|---|---|
| goal | Yes | New goal/instructions for the call. Replaces the existing goal (not a diff — include ALL details: fallback-to-SMS, pricing conditions, etc.). SAFETY: this edit is NOT a way to bypass moderation. The new goal must pass the same rules as scheduleCall: no threats, harassment, impersonation (IRS, police, bank), fraud, scams, extortion, hate speech, harmful pranks, or illegal activity. If the user asks you to change the goal into anything harmful, REFUSE and do not call this tool. When in doubt, ask the user to clarify intent instead of editing. | |
| callId | Yes | ID of the scheduled outbound call to update |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations flag destructiveHint=true, but the description adds the crucial operational detail: this is a REAL ACTION, not a preview, the new goal will be spoken to a real person, and explicit confirmation is required just before the call. It also narrows applicability to queued calls, which annotations cannot express.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Five short sentences ordered by importance: action, ID source, safety, real-world effect, confirmation. No redundant phrasing and the escalation ('REAL ACTION') is placed prominently.
Shorter descriptions cost fewer tokens and are easier for agents to parse. 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 mutation with no output schema, the description covers action, prerequisites, safety, and confirmation well. It does not say what happens on failure (e.g., call already in progress) or what the call returns, a minor gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the goal parameter's description already explains replacement semantics and safety rules. The tool description adds only 'Show the exact new goal', so it does not meaningfully extend what the schema provides; baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource with scope: 'Update the goal of one queued outbound call in place.' An agent can tell immediately this edits an existing scheduled call's goal, not a new call (scheduleCall) or other call mutations.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives the precondition ('Use a call ID returned by getCallHistory') and the safety gate ('Refuse the same harmful goals as scheduleCall'), plus an operational rule to confirm with the user before acting. The only gap is the absence of an explicit when-not-to-use case beyond harmful goals.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
updateTimezoneADestructiveInspect
Update the user profile timezone (IANA format, e.g. "America/Los_Angeles"). Required for correct scheduling of future calls. Confirm with the user before calling — overwrites the stored timezone.
| Name | Required | Description | Default |
|---|---|---|---|
| timezone | Yes | Timezone in IANA Area/Location format, e.g. "America/Los_Angeles", "Europe/London", "Asia/Tokyo". Abbreviations ("PST", "EST") and offsets ("GMT-8") are rejected. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare destructiveHint=true, and the description adds useful specifics beyond that: it 'overwrites the stored timezone' and requires user confirmation before calling. It does not discuss authentication or rate limits, but those are not central for this simple profile update.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded, compact, and every sentence contributes: format expectation, scheduling importance, and the overwrite/confirmation warning. There is no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a low-complexity, single-parameter mutation with full schema coverage and annotations covering destructiveness, the description includes the key operational details an agent needs: format, purpose, overwrite behavior, and confirmation requirement.
Complex tools with many parameters or behaviors need more documentation. Simple 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 schema fully documents the single timezone parameter including accepted IANA formats and rejected abbreviations/offsets. The description reinforces the IANA format but does not add 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 states a specific verb and resource: 'Update the user profile timezone', with the expected IANA format. It is clear what the tool changes, but it does not explicitly differentiate itself from any sibling tool.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives clear usage context: the timezone is 'Required for correct scheduling of future calls' and the agent should 'Confirm with the user before calling'. It does not name alternatives, but for this narrowly scoped tool there are no obvious sibling alternatives to route between.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_workADestructiveInspect
Mark one Needs you item done or not_needed (optional short note), snooze it (later), or set/clear its due time, when the user asks. Sends nothing.
| Name | Required | Description | Default |
|---|---|---|---|
| note | Yes | For done / not_needed: how it was handled, e.g. "Texted via assistant". | |
| dueAt | Yes | For action=set_due. | |
| later | Yes | For action=later: in_2_hours, tomorrow_8am, or custom with until. | |
| until | Yes | For later=custom: when it comes back. | |
| action | Yes | done = handled; not_needed = not the owner's to do; later = snooze; set_due / clear_due = owner due time. | |
| reason | Yes | For action=not_needed. Default HANDLED. | |
| workItemId | Yes | Exact item id returned by listWork or getWork. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, destructiveHint=true and openWorldHint=false, so the safety profile is covered; 'Sends nothing' largely restates openWorldHint=false. The description does not explain what destructive means here — whether marking done archives the item, whether the change is reversible, or what permissions are needed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The action set is front-loaded in a single sentence and closed with a short, useful constraint ('Sends nothing'). Slight redundancy with the action enum keeps it from a 5, but no sentence is wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With 7 parameters fully documented in schema, annotations present, and no output schema to explain, the description covers what an agent needs to select the tool. The remaining gap is the absence of any reversal/aftermath note on a destructive mutation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so every parameter including the action enum and the note/reason/later/until dependencies is already documented. The description's action list mirrors the schema's own enum description and adds no syntax, format, or coupling detail beyond it; baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States specific verbs (mark done / not_needed, snooze, set/clear due) against a named resource ('one Needs you item'), which cleanly separates it from the read-oriented siblings list_work and get_work. An agent can identify the tool without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'when the user asks' establishes the trigger context, and the action enumeration implies which case maps to which operation. There is no explicit when-not guidance or pointer to alternatives (e.g., use get_work/list_work to find the id first), which keeps it below a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
100 tool updates
- First observed
addToContacts - First observed
agent_functions_attach - First observed
agent_functions_create_code - First observed
agent_functions_create_http - First observed
agent_functions_get_code - First observed
agent_functions_get_guide - First observed
agent_functions_list - First observed
agent_functions_run_tests - First observed
agent_functions_update_code - First observed
agent_tasks_add - First observed
agent_tasks_delete - First observed
agent_tasks_list - First observed
app_getCall - First observed
app_listCalls - First observed
bookCalendarSlot - First observed
business_qa_create - First observed
business_qa_delete - First observed
business_qa_list - First observed
business_qa_list_profiles - First observed
business_qa_update - First observed
calendar_list - First observed
calendar_list_events - First observed
calendar_update_settings - First observed
call_scenarios_create - First observed
call_scenarios_delete - First observed
call_scenarios_reorder - First observed
call_scenarios_update - First observed
cancel_reminder - First observed
cancelAppointment - First observed
cancelCall - First observed
create_contact_note - First observed
create_reminder - First observed
create_upload_link - First observed
estimates_confirm_assumption - First observed
estimates_get - First observed
estimates_set_enabled - First observed
estimates_set_quote_on_calls - First observed
estimates_start_over - First observed
estimates_try - First observed
estimates_undo - First observed
estimates_update_prices - First observed
findAppointments - First observed
findCalendarSlots - First observed
get_contact - First observed
get_contact_timeline - First observed
get_work - First observed
getAccount - First observed
getAgent - First observed
getAvailableVoices - First observed
getBillingInfo - First observed
getCallDetails - First observed
getCallHistory - First observed
getCarrierForwardingInfo - First observed
getOverview - First observed
getTextConversation - First observed
knowledge_create_page - First observed
knowledge_get_page - First observed
knowledge_list_pages - First observed
knowledge_update_page - First observed
lead_alerts_get - First observed
lead_alerts_replace - First observed
list_customer_files - First observed
list_work - First observed
listAgents - First observed
listCallScenarios - First observed
listTextConversations - First observed
loadSkill - First observed
memory_forget - First observed
memory_list - First observed
memory_remember - First observed
notification_settings_get - First observed
notification_settings_update - First observed
onboarding_complete_receptionist_setup - First observed
onboarding_create_receptionist - First observed
onboarding_get_status - First observed
onboarding_list_business_categories - First observed
onboarding_save_business_profile - First observed
onboarding_start_calendar_connection - First observed
openCallsInbox - First observed
previewReceptionistGreeting - First observed
reportCallIssue - First observed
runForwardingTestCall - First observed
scheduleCall - First observed
search - First observed
search_mentions - First observed
searchHelpCenter - First observed
sendCallFollowUp - First observed
sendSms - First observed
startSubscriptionCheckout - First observed
statusReport - First observed
transfer_numbers_add - First observed
transfer_numbers_delete - First observed
transfer_numbers_list - First observed
transfer_numbers_reorder - First observed
transfer_numbers_update - First observed
update_contact - First observed
update_work - First observed
updateAgent - First observed
updateOutbound - First observed
updateTimezone
Publisher details
- Operator
- SkipCalls · Publisher source
- Operator website
- https://skipcalls.com · Publisher source
- Vendor relationship
- First-party · Publisher source
- Documentation
- https://skipcalls.com/for-agents · Publisher source
- Trust center
- Not available
- Restrictions
- Requires a SkipCalls account. The account owner signs in through OAuth 2.1 and chooses which permissions the assistant gets (read, receptionist settings, actions, contacts). Server-to-server API keys need a PRO plan or above. · Publisher source
Related MCP Connectors
AI receptionist: calls, leads, credits, usage, workflows and guided setup via OAuth
Give your AI assistant a real phone line. Place and end real phone calls with AI voice agents, read call transcripts, run a live two-way interpreter between two people who share no language (31 languages, browser link or phone), create and edit voice agents, and search, buy and bind phone numbers in 21 countries. OAuth 2.1 with PKCE — the model never sees your API key; a read-only scope is available. Pay as you go from $0.10/min, $5 free credit for new accounts.
Invoicing, expenses, accounting analytics. OAuth 2.1 dynamic client registration, no API key.
Work, docs, CRM, calendar, chat and hiring for small teams. OAuth 2.1 with scoped, audited access.
Related MCP Servers
AlicenseNot gradedqualityCmaintenanceLets an AI assistant read call and message history, send texts and picture messages, reach Phone Book contacts by name, and — once switched on — place calls run by a voice agent, all limited to the phone numbers the user ticks. Hosted remotely with OAuth sign-in, so nothing needs to be installed locally.MIT- AlicenseNot gradedqualityBmaintenanceEnables small local businesses to offer Alexa+ voice booking from one self-hosted, multi-business deployment with strict per-business isolation. It supports finding businesses, searching slots, two-step booking, rescheduling and cancellation with deposits, cross-session memory, bookings for people you care for, agentic waitlist recovery, notifications, and an owner dashboard.MIT
- AlicenseNot gradedqualityCmaintenanceEnables an AI assistant to safely read and write small-business ERP data such as customers, appointments, invoices and bills, gated by OAuth 2.1, role-scoped tool registration, preview-and-confirm write approvals, masked personal data and an audit trail. Runs against an in-memory mock ERP with synthetic data so the safety patterns can be tried out immediately.MIT
- AlicenseAqualityAmaintenanceEnables AI assistants to answer a small business's customer questions from its own FAQs and order data, list upcoming open appointment times in the business's time zone, and book one of those offered slots with staff notification. Free for the first 1,000 businesses, using fast rule-based FAQ matching rather than free-form generation.3MIT
Glama MCP Gateway
Add one secure layer between your agents and this server.