Skip to main content
Glama
Vapi MCP Server

Vapi MCP Server

Official
by VapiAI

Vapi MCP Server

Build AI voice assistants and phone agents with Vapi using the Model Context Protocol.

Setup

The MCP server requires a Vapi API key. Get one from the Vapi dashboard.

Local Server (stdio)

Configure any MCP client that supports local stdio servers to run:

npx -y @vapi-ai/mcp-server

Set VAPI_TOKEN in the server environment. MCP client configuration formats vary, but the server definition generally looks like this:

{
  "mcpServers": {
    "vapi": {
      "command": "npx",
      "args": ["-y", "@vapi-ai/mcp-server"],
      "env": {
        "VAPI_TOKEN": "<your_vapi_token>"
      }
    }
  }
}

Remote Server (Streamable HTTP)

Clients that support remote MCP servers can connect directly:

  • URL: https://mcp.vapi.ai/mcp

  • Header: Authorization: Bearer your_vapi_api_key_here

Client-Specific Examples

Claude Code

claude mcp add -e VAPI_TOKEN=your_vapi_token vapi -- npx -y @vapi-ai/mcp-server

Claude Desktop

Use the local server configuration above in the Claude Desktop configuration file. To connect to the hosted server through an stdio bridge instead:

{
  "mcpServers": {
    "vapi": {
      "command": "npx",
      "args": [
        "mcp-remote",
        "https://mcp.vapi.ai/mcp",
        "--header",
        "Authorization: Bearer ${VAPI_TOKEN}"
      ],
      "env": {
        "VAPI_TOKEN": "<your_vapi_token>"
      }
    }
  }
}

Optional Agent Skill

The skill directory contains reusable instructions for AI coding agents that support Agent Skills. Install it using your host's skill installation process.

For Claude Code:

mkdir -p ~/.claude/skills/vapi
curl -o ~/.claude/skills/vapi/SKILL.md https://raw.githubusercontent.com/VapiAI/mcp-server/main/skill/SKILL.md

Related MCP server: Lark MCP Server

Example Usage

Create a Voice Assistant

Ask your MCP-enabled agent:

I want to build a voice assistant that can schedule appointments

Make an Outbound Call

Call +1234567890 using my appointment reminder assistant with these details:
- Customer name: Sarah Johnson
- Appointment date: March 25th
- Appointment time: 2:30 PM

Schedule a Future Call

Schedule a call with my support assistant for next Tuesday at 3:00 PM to +1555123456

Using Variable Values in Assistant Prompts

The create_call action supports passing dynamic variables through assistantOverrides.variableValues. Use double curly braces in your assistant's prompts: {{variableName}}.

Example Prompt with Variables

Hello {{customerName}}, this is a reminder about your appointment on {{appointmentDate}} at {{appointmentTime}} with {{doctorName}}.

Default Variables

These are automatically available (no need to pass):

  • {{now}} - Current date and time (UTC)

  • {{date}} - Current date (UTC)

  • {{time}} - Current time (UTC)

  • {{month}} - Current month (UTC)

  • {{day}} - Current day of month (UTC)

  • {{year}} - Current year (UTC)

  • {{customer.number}} - Customer's phone number

See Vapi documentation for advanced date/time formatting.


Remote MCP Server

Connect to Vapi's hosted MCP server from any MCP client:

  • URL: https://mcp.vapi.ai/mcp

  • Header: Authorization: Bearer your_vapi_api_key_here

SSE (Deprecated)

  • URL: https://mcp.vapi.ai/sse

  • Header: Authorization: Bearer your_vapi_api_key_here


Available Tools

Documentation

Tool

Description

ask_vapi_docs

Query the Fern docs MCP for current documentation passages and source URLs

ask_vapi_docs({"question":"How do assistant hooks work?","topK":8}) forwards to searchDocs at https://docs.vapi.ai/_mcp/server. The result preserves Fern's content, source links and error flag. This endpoint currently returns passages for the calling agent to synthesize, rather than a generated answer. topK defaults to 8 (maximum 20). Each request owns its MCP connection, supports caller cancellation, times out after 30 seconds and closes the connection afterwards.

This tool needs outbound HTTPS to the Fern endpoint. It makes no Vapi API calls and sends no Vapi credentials upstream. The server still requires VAPI_TOKEN at startup. Discovery through tools/list makes no network requests; upstream failures are returned as tool errors. No extra MCP connection is needed. Do not include secrets or private customer data in docs questions.

Assistants

Tool

Description

list_assistants

List all assistants

get_assistant

Get assistant by ID

create_assistant

Create new assistant

update_assistant

Update assistant

Calls

Tool

Description

list_calls

List call history

get_call

Get call details

create_call

Start outbound call (immediate or scheduled)

Phone Numbers

Tool

Description

list_phone_numbers

List phone numbers

get_phone_number

Get phone number details

Tools (Function Calling)

Tool

Description

list_tools

List custom tools

get_tool

Get tool details

create_tool

Create tool for API integration

update_tool

Update tool

Public Skills

Tool

Description

search_skills

Search public Vapi skills by keywords; omit query to browse

load_skill

Read a skill's SKILL.md or a supporting file

For example, call search_skills({"query":"simulations"}), then load_skill({"name":"simulations"}). The load result includes a files list; read a supporting file with load_skill({"name":"simulations","path":"references/example.md"}), using an exact path from that list. Loading returns instructions for the current task; it does not install skills or run scripts.

Skills come directly from the public VapiAI/skills repository, including experimental skills. Discovery uses its GitHub tree rather than the proposed skills manifest. Each server caches a commit-pinned snapshot for five minutes, so file reads within that snapshot use the same revision. Search matches names, descriptions and instruction text; it returns at most limit results (default 10, maximum 30) and the total match count. load_skill returns one text file at a time, up to 512 KB, with its source URL and revision.

The skills tools need outbound HTTPS to public GitHub. They make no Vapi API calls and send no Vapi credentials upstream. The server still requires VAPI_TOKEN at startup. Discovery through tools/list makes no network requests; upstream failures are returned as tool errors. No GitHub token is needed for this public content. GitHub's unauthenticated API rate limits apply.

Simulations

Tool

Description

list_simulation_personalities

List simulated callers

create_simulation_personality

Create a simulated caller with a tester assistant

list_simulation_scenarios

List tester scripts and evaluations

create_simulation_scenario

Create a tester script and evaluations

list_simulations

List scenario/personality pairs

create_simulation

Pair a scenario with a personality

list_simulation_suites

List groups of simulations

create_simulation_suite

Group simulations into a suite

run_simulations

Run simulations or suites against an assistant or squad

list_simulation_runs

List runs and filter by status or target

get_simulation_run

Get run status and item summaries

get_simulation_run_item

Get a full item including transcript and results

The catalog contains 29 tools. Simulation lists default to 50 results. get_simulation_run returns the first 100 item summaries, with API pagination metadata in itemsMetadata and itemsTruncated: true when more items exist. Legacy array responses are also supported. Use get_simulation_run_item for the full details of a known item.


Development

# Install dependencies
npm install

# Build
npm run build

# Test with MCP inspector
npm run inspector

Local Development Config

{
  "mcpServers": {
    "vapi-local": {
      "command": "node",
      "args": ["<path>/dist/index.js"],
      "env": {
        "VAPI_TOKEN": "<your_vapi_token>"
      }
    }
  }
}

Testing

# Safe default suite (build, mocked execution, contract, and stdio compatibility)
npm test

# Unit tests (mocked public tool execution and catalog contract)
npm run test:unit

# Documentation/tool-catalog consistency lint
npm run test:docs

# Full TypeScript check (production and test code)
npm run typecheck

# Build and run local stdio protocol compatibility tests (no Vapi API calls)
npm run test:stdio

# Pack, install, and launch the package from a clean temporary consumer
npm run test:package

# Live read-only API tests
export VAPI_TOKEN=your_token_here
npm run test:live:readonly

# Live mutating tests (creates and cleans up disposable assistants and tools)
export VAPI_TOKEN=your_test_org_token_here
npm run test:live:mutating

Input validation from OpenAPI

All 21 parameterized MCP tools use imported OpenAPI constraints through Zod's experimental z.fromJSONSchema(), pinned to Zod 4.6.7. This covers assistant names/LLMs/voices/transcribers, call schedules and customer numbers, lookup/update IDs, function parameters, transfer destinations, HTTP methods, timeouts and retry plans, plus all 12 simulation tools. The four original list tools have local empty input schemas.

src/schemas/assistant-openapi.json is the compact projection for the original tool surfaces (the filename is retained from the initial assistant cutover). It records the public API spec source SHA-256 and includes the recursive JSON-schema definitions needed for function parameters and request bodies. Builds and installs use it without network access. Refresh explicitly with npm run schemas:snapshot, or pass a saved spec with npm run schemas:snapshot -- /path/spec.json.

src/schemas/simulation-openapi.json bundles the full simulation DTOs and their referenced definitions from the same public spec. The same refresh command updates both snapshots. Simulation validation includes names, folder paths, UUIDs, instructions, evaluations, nested tester assistants and structured outputs. Scenario/suite additionalFields are validated after merging, so they cannot override an API constraint. Large nested assistant and structured-output objects have compact advertised envelopes; their full API contracts are checked at runtime. The shared summary projection omits long documentation and recursive definitions from simulation discovery. The 25-tool catalog is about 28 KB. No runtime schema fetch or get_api_schema tool is required.

Simulation aliases remain local adapters: run_simulations takes exactly one assistant/squad target and at least one simulation/suite ID, then builds the API request. Integer iterations and integer page sizes of 1–100 are MCP policies; API iteration bounds and parameter formats come from the snapshot. The item lookup endpoint publishes plain strings for its IDs, so those are not assigned UUID constraints from a different endpoint.

The shared normalizer also represents empty preset enums as always-failing branches and preserves property names such as oneOf and default when walking JSON Schema definitions.

When upgrading @vapi-ai/server-sdk, refresh and review the bundled schema in the same PR, then run npm run typecheck, npm test, and npm run test:package. Check changes against the SDK's request types and the MCP adapters below. The public endpoint serves the current API spec, not a spec version tied to the SDK release, so refreshing does not by itself guarantee compatibility. Keep the reviewed schema bundled with the release; do not refresh it during installation or startup.

The adapter documents published contract corrections: overlapping enum/string oneOf alternatives become anyOf; duplicate enum values and JavaScript regex delimiters are removed; the contradictory object/string-enum annotation on BackoffPlan.type is corrected. Provider variants reject undeclared fields. Spec defaults do not inject request fields; MCP defaults remain separate. For the original compact assistant tools, variants requiring fields outside the current interface remain excluded: custom voice, Neuphonic voice, custom transcriber, Speechmatics transcriber, and custom LLM. Adding their required fields needs an explicit interface extension.

MCP wrappers preserve field aliases and sparse updates. URL checks and string-valued header maps remain explicit transport rules because the spec only describes a string/object. API-request header maps and SMS metadata retain legacy MCP representations; they are explicit compatibility adapters, not claimed to be full API DTO validation. SMS metadata is not described in the published DTO. Response summaries also remain local: they are transformed MCP representations, not raw API DTOs.

Validation failures return isError: true, concise text and structured validationError details: tool name, issue code, field path, message and allowed choices where relevant. Errors select the supplied provider's union branch, include at most 12 issues and 8 allowed choices per issue, and indicate truncation. Submitted values and credential contents are not echoed. Agents should correct the listed fields and retry; a validation failure never invokes the API handler. Tests exercise this correction loop through a real MCP client.

tools/list advertises a compact input summary derived from the same validators: field names, basic types, required fields, defaults, and short constraints. It omits provider/model catalogs, lengthy API documentation, and recursive schema definitions. The full OpenAPI-derived validator still runs before any API call; the advertised summary is intentionally broader. Catalog tests cap the original 13-tool list at 20 KB, the 12 simulation tools at 10 KB, and the complete 25-tool list at 30 KB to prevent unexpected agent-context growth.

npm test includes schema contract tests, independent Ajv parity cases, and validation-feedback tests. The existing live compatibility suites cover read-only resources and disposable assistants/custom tools.


References

Available Tools

29 tools
ask_vapi_docsA
Read-only

Ask about current Vapi documentation through the Fern docs MCP. Returns relevant documentation passages and source URLs; use them to answer the question.

NameRequiredDescriptionDefault
topKNoMaximum number of relevant documentation passages.
questionYesA specific question about Vapi configuration, APIs, SDKs or troubleshooting. Send no API keys or private customer data.

TDQS

A3.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover the safety profile (readOnly, openWorld, non-destructive), so the description's job is to add context, and it does: it discloses the return shape (passages plus source URLs) which no output schema documents, and the word 'current' signals live retrieval rather than cached data. It omits rate limits and how many passages come back by default, 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.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, front-loaded with the purpose and the retrieval source, with zero padding. The semicolon-joined second clause is slightly compressed but still readable.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

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 full schema coverage, the description supplies the essentials: retrieval source, return content, and an implicit instruction to ground answers in the passages. Nothing critical is missing apart from guidance on competing tools.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, including topK bounds and a note forbidding API keys or private customer data, so the schema carries the parameter burden. The description adds no syntax, format or default guidance beyond that, making the baseline 3 correct.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Ask about current Vapi documentation') and adds what comes back ('documentation passages and source URLs'). It is clearly distinguishable from the assistant/call/simulation siblings, though it never mentions the potentially overlapping get_api_schema tool.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The only usage instruction is 'use them to answer the question,' which concerns consuming the results rather than when to select this tool. There is no statement of when-not to use it and no routing to alternatives such as get_api_schema for raw API schema lookups.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

create_assistantC

Creates a new Vapi assistant

NameRequiredDescriptionDefault
llmNoLLM configuration
nameYesName of the assistant
voiceNoVoice configuration
toolIdsNoIDs of tools to use with this assistant
transcriberNoTranscription configuration
firstMessageNoFirst message to say to the userHello, how can I help you today?
instructionsNoInstructions for the assistantYou are a helpful assistant.
firstMessageModeNoThis determines who speaks first, either assistant or userassistant-speaks-first

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of behavioral disclosure and supplies almost nothing. It doesn't say whether the assistant is immediately live, what defaults apply to llm/voice/transcriber when omitted, whether creation is reversible, or what identity/response is returned.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single six-word sentence with zero filler, but it is so terse that there is no structure to front-load anything useful. It earns no penalty for bloat, only for lacking substance.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

This is a create tool with 8 parameters, nested objects, and a required field, yet the description explains none of the creation semantics, defaults, or outcomes. Only the schema's parameter descriptions keep it usable at all.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and every one of the 8 parameters, including the nested llm/voice/transcriber objects and the firstMessageMode enum, is documented in the schema itself. The description adds no meaning beyond that, so the baseline of 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Creates a new Vapi assistant'), so an agent knows this is a create operation for assistant entities. It doesn't explicitly differentiate itself from update_assistant or list_assistants beyond the verb, but the verb+resource pairing is unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no guidance on when to create versus update an existing assistant, no prerequisites, and no mention of what happens to unspecified configuration. The agent must infer usage entirely from the name.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

create_callC

Creates a outbound call

NameRequiredDescriptionDefault
customerNoCustomer information
assistantIdNoID of the assistant to use for the call
scheduledAtNoISO datetime string for when the call should be scheduled (e.g. "2025-03-25T22:39:27.771Z")
phoneNumberIdNoID of the phone number to use for the call
assistantOverridesNoOverrides for the assistant configuration

TDQS

C2.8/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden, and it delivers almost nothing. Beyond the word "outbound" it says nothing about immediate versus scheduled dialing, required configuration for the call to succeed, side effects, cost, or what identifies the created call; for a mutating, real-world-dialing tool this is a substantial gap.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

It is a single short sentence with no waste, but it is under-specified rather than concise, and it contains a grammatical error ("a outbound"). Nothing beyond the tool name is front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool has five parameters (nested objects, a datetime constraint), zero required fields, no annotations, and no output schema. With no guidance on which parameters matter, what the response contains, or how scheduling interacts with immediate calls, the definition is not complete enough for confident invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

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 customer.number, assistantId, scheduledAt, phoneNumberId, and assistantOverrides. The description adds no meaning beyond the schema, so the baseline of 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

"Creates a outbound call" names a specific verb (creates) and resource (call) and the direction (outbound), which distinguishes it from read-only siblings like list_calls and get_call. It does not, however, differentiate it from other creation tools (create_assistant, create_simulation) beyond the resource word.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no when-to-use guidance, no prerequisites, and no mention of alternatives or conditions. An agent cannot tell from this text when to create a call directly versus scheduling one, nor what must be true (assistantId, phoneNumberId, number) before calling.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

create_simulationB

Creates a simulation that pairs a scenario with a personality. Run it with run_simulations.

NameRequiredDescriptionDefault
nameNoThis is an optional friendly name for the simulation.
pathNoOptional folder path for organizing simulations. Supports up to 3 levels (e.g., "dept/feature/variant"). Maps to GitOps resource folder structure.
scenarioIdYesThis is the ID of the scenario to use for this simulation.
personalityIdYesThis is the ID of the personality to use for this simulation.

TDQS

B3.3/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are supplied, so the description carries the full behavioral burden, and it discloses little beyond 'creates'. It does not say whether the new simulation's ID is returned, whether re-creating the same scenario/personality pair is allowed or errors as a duplicate, what permissions are needed, or whether the simulation is immediately runnable.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences, front-loaded with the core action and immediately followed by the next-step pointer. No filler or redundancy for a simple creation tool.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a four-parameter mutation with no annotations and no output schema, the description is only partially sufficient: it names the action and the intended follow-up, but omits return value/ID, duplicate handling, and prerequisite lookups. Adequate but with clear gaps an agent would want filled.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents all four parameters including name, path, and the two required UUIDs; baseline 3 applies. The pairing sentence adds a small conceptual gloss on why scenarioId and personalityId are both required, but no format or constraint detail beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource ('Creates a simulation') and clarifies the domain meaning by defining a simulation as a scenario paired with a personality. It is clear on its own, though it does not explicitly differentiate itself from nearby siblings such as create_simulation_suite or create_simulation_personality.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

'Run it with run_simulations' gives a useful lifecycle pointer to the follow-up tool, which is real guidance. However, there is no statement of when to use this versus create_simulation_suite, and no mention that scenarioId/personalityId must first come from list_simulation_scenarios/list_simulation_personalities.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

create_simulation_personalityC

Creates a simulation personality: the simulated caller that talks to the assistant under test

NameRequiredDescriptionDefault
nameYesThis is the name of the personality (e.g., "Confused Carl", "Rude Rob").
pathNoOptional folder path for organizing personalities. Supports up to 3 levels (e.g., "dept/feature/variant"). Maps to GitOps resource folder structure.
assistantYesFull tester assistant configuration, validated against the bundled Vapi OpenAPI schema. See https://api.vapi.ai/api-json (TransientAssistantDTO).

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full behavioral burden. It says nothing beyond the bare fact of creation: no word on name-collision behavior, whether the referenced assistant must already exist, required permissions, 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.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence with zero padding; the definition of the resource follows immediately after the verb. Nothing here is wasted or restated from the schema.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool takes a nested, additionalProperties-open assistant DTO validated against an external Vapi schema, has no annotations, and no output schema. For that complexity the description is thin: it never hints that the assistant argument is a full transient-assistant configuration, nor what a successful call produces or how the personality relates to a later simulation run.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, with name, path, and the nested assistant object all documented in the schema, so the baseline is 3. The description adds no parameter-level meaning beyond identifying that the personality acts as a simulated caller, which is contextual rather than semantic detail about the arguments.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb plus resource ("Creates a simulation personality") and then defines the concept inline as "the simulated caller that talks to the assistant under test," which an agent could not infer from the name alone. It stops short of differentiating this from close siblings such as create_simulation_scenario or create_simulation, so it is clear but not sibling-aware.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no when-to-use guidance, no prerequisites, and no mention of alternatives. Given siblings like create_simulation_scenario and create_simulation, an agent gets no help deciding which creation tool to call when setting up a test.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

create_simulation_scenarioC

Creates a simulation scenario: instructions for the tester plus evaluations that decide whether the assistant passed

NameRequiredDescriptionDefault
nameYesThis is the name of the scenario.
pathNoOptional folder path for organizing scenarios. Supports up to 3 levels (e.g., "dept/feature/variant"). Maps to GitOps resource folder structure.
evaluationsYesThis is the structured output-based evaluation plan for the simulation. Each item defines a structured output to extract and evaluate against an expected value.
instructionsYesThis is the script/instructions for the tester to follow during the simulation.
additionalFieldsNoAdditional documented API fields. The merged request is validated against the bundled Vapi OpenAPI schema.

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations exist, so the description carries the full behavioral burden, and it discloses almost nothing beyond creation. It does not state whether the scenario is immediately runnable, whether it is org/workspace scoped, what identifier is returned (no output schema exists), or how duplicates/names are handled.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence with no filler, defining the resource by its two core components. It is efficient, though the compactness comes at the cost of detail that would otherwise be valuable.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The nested evaluations schema and 5-parameter shape are complex, and the very rich schema covers most field-level meaning, so the description is minimally adequate. However, with no annotations and no output schema, it should say what the caller gets back and how the new scenario is consumed downstream.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

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 name, path, instructions, evaluations, and additionalFields in detail. The description adds only a light gloss that evaluations determine pass/fail, which is already implied by the evaluation fields' own 'required' and comparator semantics.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Creates a simulation scenario') and adds what the artifact contains: tester instructions plus pass/fail evaluations. It distinguishes the artifact conceptually from create_simulation or create_simulation_personality but never names those siblings explicitly.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no guidance on when to use this versus create_simulation, create_simulation_suite, or create_simulation_personality. It also omits the typical workflow implication that a scenario must be referenced by a simulation before it can run, leaving the agent to infer prerequisites from sibling names alone.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

create_simulation_suiteB

Creates a simulation suite that groups simulations so they can be run together

NameRequiredDescriptionDefault
nameYesThis is the name of the simulation suite.
pathNoOptional folder path for organizing simulation suites. Supports up to 3 levels (e.g., "dept/feature/variant"). Maps to GitOps resource folder structure.
simulationIdsYesThis is the list of simulation IDs to include in the suite.
additionalFieldsNoAdditional documented API fields. The merged request is validated against the bundled Vapi OpenAPI schema.

TDQS

B3.2/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full behavioral burden, yet it says nothing about permissions, whether suite names must be unique, what happens on duplicate name or invalid simulationIds, or whether the operation is idempotent. It only explains the conceptual grouping effect, leaving all mutation-risk context to inference.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single well-formed sentence with the verb and resource front-loaded and zero filler. It is efficient, though the brevity is part of why coverage gaps exist elsewhere rather than a flaw in the prose itself.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a straightforward create operation with a fully documented four-parameter schema, the description covers the what but not the return value (no output schema) or failure/duplicate behavior. Adequate as minimum viable, but a creation tool with no annotations should say more about what the caller gets back.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so name, path, simulationIds, and additionalFields are already documented, including the folder-path pattern and GitOps mapping. The description adds no parameter-level meaning 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.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ("Creates a simulation suite") and adds the semantic effect — grouping simulations so they can be run together — which distinguishes it from sibling create_simulation and points toward run_simulations. It does not explicitly name those siblings, so differentiation is implicit rather than stated.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is only implied: the phrase "so they can be run together" hints that a suite exists to be executed as a batch, but the description never says when to create a suite versus individually creating simulations, nor does it reference run_simulations as the follow-up action. No prerequisites (e.g., simulations must already exist) or exclusions are given.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

create_toolC

Creates a new Vapi tool

NameRequiredDescriptionDefault
smsNoSMS tool configuration - to send text messages
nameNoName of the function/tool
typeYesType of the tool to create
functionNoCustom function tool configuration - for custom server-side functions
apiRequestNoAPI Request tool configuration - for HTTP API integration
descriptionNoDescription of what the function/tool does
transferCallNoTransfer call tool configuration - to transfer calls to destinations
additionalFieldsNo

TDQS

C2.8/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden of behavioral disclosure. It only states that the tool creates a Vapi tool, without mentioning mutation effects, required type-specific fields, permissions, error behavior, or how the polymorphic type parameter controls valid configuration.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The single sentence is concise and front-loaded, with no wasted wording. However, for an eight-parameter polymorphic creation tool, this level of brevity leaves the description under-specified rather than optimally structured.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool has a complex schema with nested objects, multiple tool type variants, no annotations, and no output schema. The description does not explain the type variants, required type-dependent fields, or creation workflow, leaving significant context gaps for an agent.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is high at 88%, so the schema already documents most parameters, including type-specific nested fields. The description adds no additional parameter meaning beyond the generic 'Vapi tool' framing, making the baseline 3 appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: 'Creates a new Vapi tool.' This clearly distinguishes creation from sibling operations like update_tool, get_tool, and list_tools. However, it does not explain the polymorphic tool types or what kinds of tools can be created.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no explicit guidance on when to use this tool versus update_tool or get_api_schema, nor any prerequisites or exclusions. The only implied usage is that it is for creation rather than update or retrieval.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_api_schemaA

Looks up a schema in the Vapi API reference (the OpenAPI spec the Vapi SDKs are generated from). Pass search to find schema names, then name to get one schema. References to other schemas are left as "#/components/schemas/" and listed in referencedSchemas, so look those up next if you need them. Use it to find fields that other tools accept through additionalFields.

NameRequiredDescriptionDefault
nameNoExact schema name to return, e.g. "CreateTransferCallToolDTO" or "TransferPlan"
searchNoCase-insensitive text to find schema names, e.g. "transfer". Used when name is not given.

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations supplied, the description carries the burden and does real work: it discloses that cross-references are returned as "#/components/schemas/<Name>" placeholders and enumerated in referencedSchemas, which tells the agent how to follow up. It does not mention auth, rate limits, or whether search and name can be combined, but for a read-only reference lookup those gaps are modest.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences, each earning its place: what it is, how to use the two parameters, and what the return shape implies for follow-up. The purpose is front-loaded with no redundant restatement of the name.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

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 and no annotations, the description covers the source data, the call sequence, the return reference format, and the follow-up behavior. An agent has everything needed to call it correctly and interpret what it gets back.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

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 including the "used when name is not given" precedence rule. The description's sequencing adds a little workflow context but no new semantics about the parameters themselves; baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource ("looks up a schema in the Vapi API reference") and identifies the source of truth (the OpenAPI spec the SDKs are generated from). The final sentence about finding fields other tools accept through additionalFields makes its role distinct from the sibling documentation and CRUD tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives a clear two-step workflow (use `search` to discover names, then `name` to fetch one) and a concrete use case, following referenced schemas when needed. It does not explicitly say when to prefer the sibling ask_vapi_docs instead, so the routing guidance is clear on this tool but not on its alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_assistantB

Gets a Vapi assistant by ID

NameRequiredDescriptionDefault
assistantIdYesID of the assistant to get

TDQS

B3.2/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are supplied, so the description carries the full behavioral burden. "Gets" implies a read-only lookup, but it never states what happens when the ID is unknown (error vs. empty result), whether authentication or scope is required, or anything about the returned object.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single short sentence, front-loaded with the action and resource, with no filler. It is lean to the point of being under-specified, but nothing is wasted.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a one-parameter lookup with no output schema, the core fact an agent needs (fetch a single assistant by its UUID) is present. Missing is any statement of return shape or not-found behavior, which matters more here because no annotations or output schema fill that gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, with the single assistantId parameter fully documented including UUID format and pattern, so the baseline is 3. The phrase "by ID" in the description adds no syntax or format meaning beyond what the schema already provides.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

"Gets a Vapi assistant by ID" names a specific verb and resource, and "by ID" implies single-record retrieval, distinguishing it from list_assistants. It does not, however, explicitly differentiate itself from sibling getters such as get_call or get_tool.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is only implied: an agent can infer this is the tool for fetching one assistant when its ID is known, versus listing them. There is no explicit when-to-use statement, no mention of alternatives like list_assistants or ask_vapi_docs, and no prerequisites.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_callC

Gets details of a specific call

NameRequiredDescriptionDefault
callIdYesID of the call to get

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are supplied, so the description bears the full burden, yet it only says the tool gets details. It does not state that this is a read-only lookup, whether it errors on unknown or malformed IDs (the schema requires a UUID), or what object shape comes back.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single short sentence with no wasted wording and the resource front-loaded. Brevity here borders on under-specification rather than being padded, so it is efficient but thin.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a one-parameter read tool with no output schema and no nested objects, little is required, but the ambiguous word "details" leaves the agent guessing what the response contains. Minimum viable rather than complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and callId is documented as "ID of the call to get", so the schema already covers the only parameter. The description adds no format, sourcing, or lookup-key guidance beyond that.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

"Gets details of a specific call" names a specific verb (gets) and resource (call) and implies single-record lookup, which an agent can distinguish from list_calls or create_call in the sibling set. It stops short of saying which details are returned or explicitly contrasting itself with those siblings.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no when-to-use guidance at all: nothing tells the agent to prefer this over list_calls when only one ID is known, and no prerequisites or failure conditions are mentioned. Usage must be inferred entirely from the tool name.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_phone_numberB

Gets details of a specific phone number

NameRequiredDescriptionDefault
phoneNumberIdYesID of the phone number to get

TDQS

B3.3/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden of behavioral disclosure. It says only that it 'gets details' and does not state that the operation is read-only, what permissions are needed, what happens on invalid IDs, or what kind of details are returned.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, front-loaded sentence with no redundant wording or unnecessary background. It is appropriately sized for the trivial surface it attempts to describe.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple one-parameter getter, the description covers the basic purpose but leaves key gaps: there is no output schema, no annotations, and the description does not explain return shape, read-only behavior, or how it differs from list_phone_numbers. It is minimum viable but incomplete for safe tool selection.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, and the sole parameter phoneNumberId is already documented in the schema as 'ID of the phone number to get.' The description adds no additional meaning, format constraints, or usage hints beyond what the schema provides.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: 'Gets details of a specific phone number.' The word 'specific' implies a single-resource lookup, which distinguishes it somewhat from list_phone_numbers, but it never names the sibling tool explicitly.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is only implied: the agent can infer this is for retrieving one phone number by ID. The description gives no explicit when-to-use guidance, no exclusion for list_phone_numbers, and no prerequisites or alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_simulation_runA

Gets a simulation run with its status, item counts, and the first 100 item summaries. itemsTruncated indicates omitted items; itemsMetadata preserves API pagination metadata. Use get_simulation_run_item for an item’s transcript and call details.

NameRequiredDescriptionDefault
runIdYes

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations at all, the description carries the full behavioral burden and does disclose the key quirk: results are capped at 100 item summaries, itemsTruncated signals omission, and itemsMetadata holds API pagination metadata. That is genuine behavior beyond the schema. It stops short of stating read-only semantics explicitly or any auth/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.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences, each doing distinct work: what is returned, how truncation is signaled, and where to go for per-item detail. The truncation caveat is placed before the sibling pointer, which is the right order for an agent deciding whether this result is sufficient.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

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 must convey the return shape, and it does so at a useful level (status, counts, 100 truncated item summaries, two metadata fields). It could be more complete about what the item summary objects contain or how itemsMetadata should be used to page further.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% and the sole required parameter runId has no description in the schema or in the description text. The meaning is inferable from the tool's purpose (a simulation run identifier), and the uuid format in the schema removes most ambiguity, so the gap is small but real.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description gives a specific verb and resource ("Gets a simulation run") and enumerates what comes back: status, item counts, and the first 100 item summaries. It also names the sibling get_simulation_run_item and states what that one returns instead, so an agent can separate the two tools 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.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives an explicit routing rule: use get_simulation_run_item for an item's transcript and call details. That covers the most likely sibling confusion, but it offers no guidance on when to reach for this tool versus list_simulation_runs or run_simulations, and no preconditions for runId.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_simulation_run_itemB

Gets one simulation run item in full, including results, call snapshots, transcript, and improvement suggestions

NameRequiredDescriptionDefault
runIdYes
itemIdYes

TDQS

B3.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full behavioral burden. It usefully discloses the return payload (results, call snapshots, transcript, improvement suggestions), but it does not state that the operation is read-only, whether it has side effects, what permissions are required, or how invalid IDs are handled.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single front-loaded sentence with no filler and efficiently lists the returned content. It could be slightly better structured by separating scope from return details, but it is appropriately concise.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple two-parameter read tool with no output schema, the description conveys the single-item scope and the main returned contents. However, it omits parameter semantics and error or permission context, leaving important gaps for correct invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate for the undocumented runId and itemId parameters. It never explains what runId and itemId identify, their format, or how they relate to the returned item; it only indirectly alludes to an 'item.'

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses the specific verb 'Gets' with the resource 'one simulation run item' and clarifies scope with 'in full,' including the returned contents. It is clear what the tool does, but it does not explicitly contrast itself with the sibling get_simulation_run, so sibling differentiation is missing.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage for retrieving a single simulation run item, but it gives no explicit when-to-use guidance, prerequisites, or alternatives such as list_simulation_runs or get_simulation_run. The implied use case is adequate but not directive.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_toolC

Gets details of a specific tool

NameRequiredDescriptionDefault
toolIdYesID of the tool to get

TDQS

C2.7/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden of behavioral disclosure. It says nothing about what fields the returned details include, whether the lookup is read-only, or what happens for an invalid or nonexistent toolId — all important for a lookup tool with zero annotation coverage.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single efficient sentence with no filler and the resource scoping front-loaded. Its brevity is appropriate for a one-parameter lookup, though it borders on under-specification.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple one-parameter lookup with complete schema coverage, the description covers the minimum: what it fetches and by what key. Because there is no output schema, the description should have characterized the returned "details," which it does not, leaving a meaningful gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, with toolId fully documented as a UUID with a pattern, so the description need not compensate. The description adds nothing beyond the schema, which is the expected baseline when the schema does the work.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose3/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific verb and resource ("Gets details of a specific tool"), so the basic operation is identifiable. However, "details" is vague and never differentiates it from siblings such as list_tools, create_tool, update_tool, or get_api_schema, leaving the agent to infer what the returned details actually are.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no guidance on when to use this tool versus alternatives like list_tools or get_api_schema, and no mention of prerequisites or lookup workflow. The only implied usage is that an agent must already have a toolId, which comes from the schema rather than the description.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_assistantsB

Lists all Vapi assistants

NameRequiredDescriptionDefault

No parameters

TDQS

B3.1/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden and discloses nothing beyond the fact that it reads. It says nothing about pagination, result ordering, approximate result volume, or whether truncation occurs, all of which matter for a list endpoint with no output schema.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded phrase with zero filler, which is the right shape for a no-parameter list tool. The brevity is efficient rather than padded, though it leaves the description barren.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool is structurally simple (no params, flat, no output schema), so a short description is defensible, but a list operation with no annotations and no declared return shape still benefits from at least a note on pagination and return contents, which is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

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 meaning to add; baseline is 4. The empty schema means there is nothing the description could clarify here.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (Lists) and resource (Vapi assistants), which an agent can easily distinguish from get_assistant, create_assistant, and the unrelated list_* siblings by resource noun. It stops short of 5 because it does not explicitly contrast itself with get_assistant or note that it returns all assistants regardless of filters.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no when-to-use guidance at all: no mention of when to prefer get_assistant for a single record, no prerequisites, and no indication of what the list covers (org-wide vs. a subset). The only usable signal is the name itself.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_callsC

Lists all Vapi calls

NameRequiredDescriptionDefault

No parameters

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description must carry the full behavioral burden, but it discloses nothing about result size, ordering, pagination, or whether the listing includes all calls or only ones visible to the caller. That omission matters for a list operation over a potentially large collection.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Four words with zero filler and the key concept front-loaded. It is trimmed, but the brevity is only acceptable because there is nothing else supplied; if it had more to convey, this would be under-specification rather than concision.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a zero-parameter list tool with no output schema, the description should say what comes back, such as full call objects versus summaries, and how large result sets are handled. As written, it leaves the agent guessing about the return shape.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool accepts zero parameters, so there is no parameter semantics for the description to explain, and the baseline of 4 applies. The empty schema leaves nothing ambiguous that the description needs to clarify.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose3/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb ("Lists") and resource ("Vapi calls"), so the basic operation is unambiguous. It adds nothing about scope, filtering, or pagination to separate it from the neighboring get_call and create_call tools beyond the plain verb, which keeps it at a minimum-viable 3.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no when-to-use guidance and no mention of alternatives such as get_call for a single call. The agent must infer from the name alone that this tool is the bulk-retrieval path.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_phone_numbersB

Lists all Vapi phone numbers

NameRequiredDescriptionDefault

No parameters

TDQS

B3.1/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full behavioral burden and discloses almost nothing beyond the fact of listing. It does not say whether results are paginated, whether the list is org-wide or credential-scoped, what fields each entry contains, or what an empty result means.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single short sentence with no filler and the resource front-loaded after the verb. It is efficient, though its brevity stems partly from under-specification rather than deliberate economy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a zero-parameter read tool this is close to adequate, but with no annotations and no output schema the description is the only source of behavioral information and leaves return shape, pagination, and scoping unstated. It is the minimum viable definition rather than a complete one.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

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; the baseline for a no-parameter tool applies. The description correctly implies a parameterless full listing.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (Lists) and resource (Vapi phone numbers), and the word 'all' implicitly contrasts with the sibling get_phone_number. It does not explicitly name that sibling or clarify whether the listing is scoped to an organization, but an agent can still tell what the tool returns.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no guidance on when to use this versus get_phone_number, and no mention of prerequisites such as authentication or org scope. Usage is only implied by the name and the word 'all'.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_simulation_personalitiesA

Lists simulation personalities: the simulated callers (testers) used in Vapi simulations

NameRequiredDescriptionDefault
limitNoMaximum number of results to return (default 50)

TDQS

A3.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden, and 'Lists' reasonably implies a non-destructive read. However, it says nothing about pagination or truncation behavior (the 50-default, 1000-max limit), whether an empty list is possible, or what fields a personality record contains — context an unannotated tool should supply.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single clause, front-loaded with the action and resource, with the colon-apposition earning its place by defining a domain term. Nothing extraneous.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a one-optional-parameter list tool with a fully documented schema and no output schema, the description covers the essential question of what is being listed. It stops short of only minor extras such as default page size or return shape, which keeps it close to complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and the sole parameter 'limit' is fully documented in-schema with bounds and a default. The description adds no meaning beyond the schema, so baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb ('Lists') plus the exact resource ('simulation personalities') and then defines what that resource is — 'the simulated callers (testers) used in Vapi simulations' — a term an agent may not otherwise know. The plural verb form cleanly separates it from the create_simulation_personality sibling.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is only implied by the verb: an agent can infer this is the enumeration tool for personalities versus create_simulation_personality. There is no explicit statement of when to reach for this over list_simulation_scenarios or list_simulations, and no note that limit caps the result set rather than returning everything.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_simulation_runsC

Lists simulation runs, newest first

NameRequiredDescriptionDefault
limitNoMaximum number of results to return (default 50)
statusNo
targetIdNo

TDQS

C2.7/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations at all, the description carries the full behavioral burden yet only discloses sort order. It says nothing about pagination beyond the implicit limit, whether results are scoped to a workspace, permission requirements, or whether a truncated list is silently capped.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single short sentence with no wasted words and the ordering fact placed prominently. It is efficient, though the extreme brevity reads more as under-specification than deliberate concision.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a filterable list tool with three parameters, one-third schema coverage, no annotations, and no output schema, the description leaves the agent without enough to call it confidently — especially for the undocumented status and targetId filters. It should at minimum explain what the filters select.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is only 33% — limit is documented in the schema, but status (an enum with no stated meaning) and targetId (a UUID with no stated referent) are undocumented. The description adds no meaning to any of the three parameters, leaving a real compensation gap.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ('Lists') and resource ('simulation runs') plus an ordering guarantee ('newest first'), so an agent knows exactly what it returns. However, it never distinguishes this tool from close siblings like list_simulations or get_simulation_run, so there is no explicit sibling differentiation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no when-to-use or when-not-to-use guidance, no mention of alternatives (e.g. use get_simulation_run for a single run, list_simulations for the definitions), and no indication of when the status/targetId filters should be applied. Usage can only be inferred from the verb.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_simulationsB

Lists simulations. Each simulation pairs one scenario with one personality.

NameRequiredDescriptionDefault
limitNoMaximum number of results to return (default 50)

TDQS

B3.1/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are supplied, so the description carries the full burden and it discloses almost nothing behavioral: not whether results are paginated or truncated at a default, not the ordering, and not the shape of a returned simulation. The only hint at read-only behavior comes from the name itself.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences, no filler, with the tool's action front-loaded and the entity definition 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.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

This is a simple single-optional-parameter list tool with no output schema, so the description need not explain return values. However, for a tool sitting among half a dozen simulation-related listers, it should say what a call returns in aggregate and how it relates to those siblings.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and the single optional limit parameter is fully documented in the schema, including its default of 50 and maximum of 1000. The description adds nothing about the parameter, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description gives a specific verb and resource ("Lists simulations") and the second sentence defines the entity as a scenario+personality pair, which implicitly separates it from list_simulation_runs and list_simulation_personalities. It stops short of naming those siblings outright, so an agent must infer the boundary.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no statement of when to use this instead of list_simulation_runs, list_simulation_suites, or the personality/scenario listers, all of which appear in the sibling set. No prerequisites, no exclusions, no alternative routing.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_simulation_scenariosC

Lists simulation scenarios: the scripts testers follow and the checks that decide pass or fail

NameRequiredDescriptionDefault
nameNo
limitNoMaximum number of results to return (default 50)

TDQS

C2.8/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full behavioral burden. It implies a read operation but never states that it is read-only, whether results are paginated, what the default ordering is, or what happens when the limit is exceeded; only the resource's meaning is explained.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single short sentence with the resource front-loaded and the gloss following immediately. It wastes no words, though the explanatory clause is more helpful for a human than for tool selection.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple two-optional-parameter list tool with no output schema, the description covers the resource adequately. However, it omits filtering semantics for name and pagination behavior for limit, which an agent needs to invoke it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 50%: the limit parameter is documented in the schema (default 50, max 1000), but the name parameter has no description anywhere. The description does not clarify whether name filters, matches exactly, or some other semantics, so it fails to compensate for the uncovered parameter.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a clear verb 'Lists' and a specific resource 'simulation scenarios', then expands with a plain-language gloss ('the scripts testers follow and the checks that decide pass or fail'). It does not differentiate itself from close siblings like list_simulations or list_simulation_suites, so an agent must infer the distinction from names alone.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no guidance about when to use this tool rather than load_skill, list_simulations, list_simulation_suites, or get_simulation_run. The description offers no context, prerequisites, or exclusions, leaving selection entirely to the tool name.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_simulation_suitesC

Lists simulation suites: named groups of simulations

NameRequiredDescriptionDefault
limitNoMaximum number of results to return (default 50)

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are supplied, so the description bears the full disclosure burden, and it discloses almost nothing: it does not confirm this is a non-mutating read, does not mention the default page size of 50 or the 1000 cap, and says nothing about truncation, ordering, or what a returned suite contains. The definition is a one-line label rather than a behavioral account.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

One sentence, front-loaded with the verb and resource, with the clarifying gloss placed where it helps most. There is no filler, though the brevity is close to under-specification rather than disciplined economy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

This is a simple list tool with one optional numeric parameter and no output schema, so the bar is low, and the description does define the resource. It still leaves out the things an agent needs for correct invocation at scale, namely that results are paginated by default and that the response shape is unspecified.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

There is a single optional parameter and schema description coverage is 100%, so the schema already explains limit, its default of 50, and its bounds. The description adds no extra meaning about pagination semantics, which is the baseline expectation at full coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

"Lists simulation suites" states a specific verb and resource, and the gloss "named groups of simulations" defines the entity well enough to separate suites from the sibling list_simulations and list_simulation_scenarios. It stops short of naming those siblings explicitly, so the differentiation is inferential rather than stated.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no when-to-use guidance, no mention of when a suite is the right thing to look at versus a simulation, scenario, or personality, and no prerequisites. The only signal is the implicit one carried by the verb "Lists".

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_toolsB

Lists all Vapi tools

NameRequiredDescriptionDefault

No parameters

TDQS

B3.1/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations supplied, the description carries the full burden and provides almost nothing: no indication of pagination, result volume, ordering, or whether the listing is scoped to an org/workspace. For a listing endpoint whose main risk is unbounded result size, this is a meaningful gap.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence with zero filler. It is arguably under-specified rather than verbose, but nothing in it is wasted.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool is simple (no params, no nested objects), so the low description length is defensible, but with no output schema the agent has no idea what a returned tool object looks like or whether results are paginated. One more sentence on return shape would close the gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

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; the baseline for a 0-param tool is 4. The description is consistent with the empty schema by not describing any filter inputs.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description gives a specific verb and resource ('Lists all Vapi tools'), and 'all' signals an unfiltered enumeration that contrasts implicitly with the sibling get_tool. It does not explicitly name any sibling, so an agent must infer the boundary itself.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no when-to-use or when-not-to-use guidance, and no mention of the alternatives (get_tool for a single tool, search_skills-adjacent patterns for filtered lookup). The only hint is the word 'all', which is left for the agent to interpret.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

load_skillA
Read-only

Read a public Vapi skill or one of its supporting files. Start with SKILL.md, then load relevant files from the returned file list as needed. Returns instructions for this task; does not install skills or execute scripts.

NameRequiredDescriptionDefault
nameYesExact skill name from search_skills.
pathNoFile path relative to the skill directory, such as SKILL.md or references/hooks.md.SKILL.md

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered; the description still adds value by clarifying the return contract (instructions for the task) and by ruling out side effects (no installing, no script execution). It doesn't mention size limits or errors for a missing path, 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.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three tight sentences with zero filler: purpose first, then the operating sequence, then the boundary condition. Nothing is buried, and every sentence carries distinct information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With only two well-documented parameters and no output schema, the description has to carry the return-value story, and it does: it says instructions come back plus a file list used for follow-up loads. It stops just short of describing what a skill file's contents look like or what happens when a path doesn't exist.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

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 fully documented, including the SKILL.md default and the relative-path format. The description's mention of starting at SKILL.md and following the returned file list is workflow context rather than added parameter semantics, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

A specific verb ("read") plus a specific resource ("a public Vapi skill or one of its supporting files") tells the agent exactly what the tool does. The closing clause ("does not install skills or execute scripts") separates it from anything that would mutate state or run code, and the two-parameter shape makes it easy to tell apart from siblings like search_skills.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives real sequencing guidance: start with SKILL.md, then load relevant files from the returned file list as needed. What's missing is any pointer to search_skills for discovering the exact name (that hint lives only in the schema) and any explicit statement of when not to use it.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

run_simulationsA

Starts a simulation run of simulations and/or suites against an assistant or squad. Returns the run with its ID and a dashboard URL to share with the user. Check progress with get_simulation_run.

NameRequiredDescriptionDefault
squadIdNoID of an existing squad to test against. Cannot be combined with inline squad.
suiteIdsNo
transportNoTransport provider for the simulation run
iterationsNoNumber of times to run each simulation (default: 1)
assistantIdNoID of an existing assistant to test against. Cannot be combined with inline assistant.
simulationIdsNo
idempotencyKeyNo

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full behavioral burden. It does add real value by stating that the call returns the run with its ID and a shareable dashboard URL, and by implying the run is started asynchronously since progress must be polled via get_simulation_run. It says nothing about idempotency behavior, iteration limits, failure modes, or any permission requirements involved in starting a run.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences, front-loaded with the action, then the return value, then the follow-up tool. Every sentence carries distinct information with no restatement or filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a seven-parameter launch tool with no annotations and no output schema, the description covers the essentials: what it starts, what it returns, and how to monitor it. The remaining gap is the undocumented idempotencyKey and any statement about run duration or expected errors, which keeps it short of complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 57%, so the schema already explains assistantId, squadId, simulationIds, suiteIds, iterations and transport. The description only restates the mutual-exclusion shape ('simulations and/or suites against an assistant or squad'); it adds no guidance on idempotencyKey, the only parameter lacking any schema description, nor on how iterations interacts with the run.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

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 ('Starts a simulation run') and states the target ('of simulations and/or suites against an assistant or squad'), which mirrors the schema's mutual-exclusion groups. It is immediately distinguishable from get_simulation_run and list_simulations, which read state rather than launch it.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives clear context for when to reach for this tool (launching a batch run of existing simulations or suites) and explicitly routes the agent to get_simulation_run for progress polling. It does not, however, position it against siblings like create_simulation or list_simulations, nor state any prerequisites such as needing an existing assistant or squad ID.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

search_skillsA
Read-only

Find Vapi agent skills in the public VapiAI/skills repository by name, description or content. Omit query to browse. Use load_skill to read a result.

NameRequiredDescriptionDefault
limitNo
queryNoKeywords describing the Vapi task, or empty to browse all skills.

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, openWorldHint and destructiveHint=false, so the safety profile is covered. The description still adds real context: the search target is a public GitHub-hosted repository (consistent with openWorldHint), and results are pointers that must be fetched with load_skill rather than full skill bodies. It does not mention ranking, pagination or rate limits.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences, front-loaded with what it searches and where, followed by the browse case and the follow-up tool. No filler, no 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.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a two-parameter read-only search with no output schema, the description covers purpose, the empty-query behavior and the read follow-up, which is enough to call it correctly. The only loose end is the undocumented 'limit' parameter, whose default and cap of 30 live in the schema but carry no explanation of ordering or result-count tradeoffs.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 50%: the 'query' parameter already documents itself as keywords or empty-to-browse, so the description's wording largely mirrors the schema. The description does add the match fields (name, description, content) which the schema omits, but the 'limit' parameter is left entirely unexplained in both places, keeping this at the baseline.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource ('Find Vapi agent skills') and names the exact repository, scope and match fields (name, description, content). It also distinguishes itself from the sibling that consumes its output ('Use load_skill to read a result'), so an agent can separate search from read 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.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives a concrete usage condition ('Omit query to browse') and routes the agent to the correct follow-up tool (load_skill) for reading a hit. It stops short of an explicit 'do not use this for X' exclusion or guidance on when to prefer ask_vapi_docs, so it is clear but not fully exhaustive.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_assistantC

Updates an existing Vapi assistant

NameRequiredDescriptionDefault
llmNoNew LLM configuration
nameNoNew name for the assistant
voiceNoNew voice configuration
toolIdsNoNew IDs of tools to use with this assistant
assistantIdYesID of the assistant to update
transcriberNoNew transcription configuration
firstMessageNoFirst message to say to the user
instructionsNoNew instructions for the assistant
firstMessageModeNoThis determines who speaks first, either assistant or user

TDQS

C2.5/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations supplied, the description carries the full behavioral burden and does not meet it. It never states whether this is a partial merge or a full replace (critical for a 9-parameter update tool where omitted fields may be wiped), whether the change is reversible, what permissions or auth are needed, 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.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The single sentence is front-loaded and free of filler, but its brevity reflects under-specification rather than discipline. There is no wasted wording to cut, yet almost every sentence that would earn its place is missing.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a mutation tool with 9 parameters, nested objects, an enum, no output schema, and no annotations, a five-word description leaves major gaps. An agent cannot tell whether omitted fields are preserved or cleared, nor what a valid voice/llm object requires, without reading the schema closely.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

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 nested llm, voice, and transcriber objects is already documented in the input schema. The description adds no extra meaning - no format hints for llm/voice objects, no note on the firstMessageMode enum behavior - so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose3/5

Does the description clearly state what the tool does and how it differs from similar tools?

"Updates an existing Vapi assistant" names a specific verb and resource, so the basic action is unambiguous. However, it offers no differentiation from siblings such as create_assistant or get_assistant, and it says nothing about which aspects of the assistant are updatable - all of that has to be recovered from the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no when-to-use guidance at all: nothing tells the agent to prefer create_assistant for new assistants or get_assistant for read-only inspection. No prerequisites, no mention of whether the assistant must already exist beyond 'existing', and no guidance on partial vs. full configuration replacement.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_toolC

Updates an existing Vapi tool

NameRequiredDescriptionDefault
smsNoSMS tool configuration - to send text messages
nameNoName of the function/tool
toolIdYesID of the tool to update
functionNoCustom function tool configuration - for custom server-side functions
apiRequestNoAPI Request tool configuration - for HTTP API integration
descriptionNoDescription of what the function/tool does
transferCallNoTransfer call tool configuration - to transfer calls to destinations
additionalFieldsNo

TDQS

C2.5/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden and supplies almost nothing. It does not say whether this is a full replace or a partial merge, what happens to omitted fields, whether mutations are reversible, or whether the tool type can be changed after creation — all critical for a mutation tool with no annotation coverage.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The single sentence is efficient and front-loaded with the verb, so nothing is wasted. But at this length for an 8-parameter polymorphic mutation tool the brevity reads as under-specification rather than concision, leaving the key update semantics unstated.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given a nested schema with 8 parameters and four mutually plausible tool-type configurations, plus no annotations and no output schema, the description is far too thin to guide a correct call. The rich schema descriptions partially compensate, but the agent still cannot determine partial-vs-full update behavior or success/failure characteristics.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 88% and each of the 8 parameters (sms, function, apiRequest, transferCall, toolId, name, description, additionalFields) is documented in the schema itself, so the schema does most of the work. The description adds no meaning beyond that, including no clarification of whether multiple configuration blocks can be passed together, which the schema leaves ambiguous.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose3/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource ("Updates an existing Vapi tool"), so the agent knows this is a mutation on a tool entity. However, it offers no differentiation from sibling tools such as create_tool, get_tool, or list_tools sharing the same resource, and it does not indicate which tool types are modifiable.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no guidance on when to use this instead of create_tool or get_tool, no prerequisites (does the tool already have to exist?), and no note that only one of the polymorphic configurations (sms, function, apiRequest, transferCall) should be supplied. Usage is only implied by the word "Updates".

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.

  1. 29 tool updatesv0.1.0
    • Addedask_vapi_docs
    • Changedcreate_assistant15 fields changed
      • changedInput schema / additionalProperties
        Previous value: -falseNew value: +{}
      • changedInput schema / properties / firstMessageMode / enum
        Previous value: -[
        -  "assistant-speaks-first",
        -  "assistant-waits-for-user",
        -  "assistant-speaks-first-with-model-generated-message"
        -]New value: +[
        +  "assistant-speaks-first",
        +  "assistant-speaks-first-with-model-generated-message",
        +  "assistant-waits-for-user"
        +]
      • addedInput schema / properties / instructions / maxLength
        Added value: +100000000
      • changedInput schema / properties / llm / anyOf
        Previous value: -[
        -  {
        -    "anyOf": [
        -      {
        -        "additionalProperties": false,
        -        "properties": {
        -          "model": {
        -            "enum": [
        -              "gpt-4o",
        -              "gpt-4o-mini"
        -            ],
        -            "type": "string"
        -          },
        -          "provider": {
        -            "const": "openai",
        -            "type": "string"
        -          }
        -        },
        -        "required": [
        -          "provider",
        -          "model"
        -        ],
        -        "type": "object"
        -      },
        -      {
        -        "additionalProperties": false,
        -        "properties": {
        -          "model": {
        -            "enum": [
        -              "claude-3-7-sonnet-20250219",
        -              "claude-3-5-haiku-20241022"
        -            ],
        -            "type": "string"
        -          },
        -          "provider": {
        -            "const": "anthropic",
        -            "type": "string"
        -          }
        -        },
        -        "required": [
        -          "provider",
        -          "model"
        -        ],
        -        "type": "object"
        -      },
        -      {
        -        "additionalProperties": false,
        -        "properties": {
        -          "model": {
        -            "enum": [
        -              "gemini-1.5-pro",
        -              "gemini-1.5-flash",
        -              "gemini-2.0-flash",
        -              "gemini-2.0-pro"
        -            ],
        -            "type": "string"
        -          },
        -          "provider": {
        -            "const": "google",
        -            "type": "string"
        -          }
        -        },
        -        "required": [
        -          "provider",
        -          "model"
        -        ],
        -        "type": "object"
        -      },
        -      {
        -        "additionalProperties": false,
        -        "properties": {
        -          "model": {
        -            "type": "string"
        -          },
        -          "provider": {
        -            "type": "string"
        -          }
        -        },
        -        "required": [
        -          "provider",
        -          "model"
        -        ],
        -        "type": "object"
        -      }
        -    ]
        -  },
        -  {
        -    "type": "string"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": false,
        +    "properties": {
        +      "model": {
        +        "type": "string"
        +      },
        +      "provider": {
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "provider"
        +    ],
        +    "type": "object"
        +  },
        +  {
        +    "type": "string"
        +  }
        +]
      • removedInput schema / properties / llm / default
        Removed value: -{
        -  "model": "gpt-4o",
        -  "provider": "openai"
        -}
      • addedInput schema / properties / name / maxLength
        Added value: +40
      • removedInput schema / properties / transcriber / default
        Removed value: -{
        -  "model": "nova-3",
        -  "provider": "deepgram"
        -}
      • removedInput schema / properties / transcriber / properties / model / description
        Removed value: -"Transcription model to use"
      • removedInput schema / properties / transcriber / properties / provider / description
        Removed value: -"Provider to use for transcription"
      • changedInput schema / properties / transcriber / required
        Previous value: -[
        -  "provider",
        -  "model"
        -]New value: +[
        +  "provider"
        +]
      • removedInput schema / properties / voice / default
        Removed value: -{
        -  "provider": "11labs",
        -  "voiceId": "sarah"
        -}
      • removedInput schema / properties / voice / properties / model / description
        Removed value: -"Voice model to use"
      • removedInput schema / properties / voice / properties / provider / description
        Removed value: -"Provider to use for voice"
      • removedInput schema / properties / voice / properties / provider / enum
        Removed value: -[
        -  "vapi",
        -  "11labs",
        -  "azure",
        -  "cartesia",
        -  "custom-voice",
        -  "deepgram",
        -  "11labs",
        -  "hume",
        -  "lmnt",
        -  "neuphonic",
        -  "openai",
        -  "playht",
        -  "rime-ai",
        -  "smallest-ai",
        -  "tavus",
        -  "sesame"
        -]
      • removedInput schema / properties / voice / properties / voiceId / description
        Removed value: -"Voice ID to use"
    • Changedcreate_call8 fields changed
      • changedInput schema / additionalProperties
        Previous value: -falseNew value: +{}
      • removedInput schema / properties / assistantOverrides / additionalProperties
        Removed value: -false
      • addedInput schema / properties / assistantOverrides / properties / variableValues / properties
        Added value: +{}
      • removedInput schema / properties / customer / additionalProperties
        Removed value: -false
      • addedInput schema / properties / customer / properties / number / maxLength
        Added value: +40
      • addedInput schema / properties / customer / properties / number / minLength
        Added value: +3
      • addedInput schema / properties / scheduledAt / format
        Added value: +"date-time"
      • addedInput schema / properties / scheduledAt / pattern
        Added value: +"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
    • Addedcreate_simulation
    • Addedcreate_simulation_personality
    • Addedcreate_simulation_scenario
    • Addedcreate_simulation_suite
    • Changedcreate_tool64 fields changed
      • changedInput schema / additionalProperties
        Previous value: -falseNew value: +{}
      • addedInput schema / allOf
        Added value: +[
        +  {
        +    "if": {
        +      "properties": {
        +        "type": {
        +          "const": "apiRequest"
        +        }
        +      },
        +      "required": [
        +        "type"
        +      ]
        +    },
        +    "then": {
        +      "required": [
        +        "apiRequest"
        +      ]
        +    }
        +  },
        +  {
        +    "if": {
        +      "anyOf": [
        +        {
        +          "required": [
        +            "function"
        +          ]
        +        },
        +        {
        +          "properties": {
        +            "description": {
        +              "minLength": 1
        +            }
        +          },
        +          "required": [
        +            "description"
        +          ]
        +        }
        +      ],
        +      "properties": {
        +        "type": {
        +          "const": "function"
        +        }
        +      },
        +      "required": [
        +        "type"
        +      ]
        +    },
        +    "then": {
        +      "required": [
        +        "name"
        +      ]
        +    }
        +  }
        +]
      • addedInput schema / properties / additionalFields
        Added value: +{
        +  "additionalProperties": {},
        +  "propertyNames": {
        +    "type": "string"
        +  },
        +  "type": "object"
        +}
      • removedInput schema / properties / apiRequest / additionalProperties
        Removed value: -false
      • removedInput schema / properties / apiRequest / properties / backoffPlan / additionalProperties
        Removed value: -false
      • addedInput schema / properties / apiRequest / properties / backoffPlan / properties / baseDelaySeconds / maximum
        Added value: +10
      • addedInput schema / properties / apiRequest / properties / backoffPlan / properties / baseDelaySeconds / minimum
        Added value: +0
      • addedInput schema / properties / apiRequest / properties / backoffPlan / properties / maxRetries / maximum
        Added value: +10
      • addedInput schema / properties / apiRequest / properties / backoffPlan / properties / maxRetries / minimum
        Added value: +0
      • addedInput schema / properties / apiRequest / properties / backoffPlan / properties / type / description
        Added value: +"This is the type of backoff plan to use. Defaults to fixed.\n\n@default fixed"
      • removedInput schema / properties / apiRequest / properties / body / additionalProperties
        Removed value: -false
      • addedInput schema / properties / apiRequest / properties / body / properties / description
        Added value: +{
        +  "description": "This is the description to help the model understand what it needs to output.",
        +  "type": "string"
        +}
      • addedInput schema / properties / apiRequest / properties / body / properties / enum
        Added value: +{
        +  "description": "This array specifies the allowed values that can be used to restrict the output of the model.",
        +  "items": {
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
      • addedInput schema / properties / apiRequest / properties / body / properties / format
        Added value: +{
        +  "type": "string"
        +}
      • addedInput schema / properties / apiRequest / properties / body / properties / items
        Added value: +{}
      • addedInput schema / properties / apiRequest / properties / body / properties / pattern
        Added value: +{
        +  "type": "string"
        +}
      • removedInput schema / properties / apiRequest / properties / body / properties / properties / $ref
        Removed value: -"#/properties/function/properties/parameters/properties/properties"
      • addedInput schema / properties / apiRequest / properties / body / properties / properties / additionalProperties
        Added value: +{
        +  "allOf": [
        +    {}
        +  ]
        +}
      • addedInput schema / properties / apiRequest / properties / body / properties / properties / description
        Added value: +"This is required if the type is \"object\". This specifies the properties of the object. This is a map of property names to JsonSchema objects."
      • addedInput schema / properties / apiRequest / properties / body / properties / properties / properties
        Added value: +{}
      • addedInput schema / properties / apiRequest / properties / body / properties / properties / type
        Added value: +"object"
      • removedInput schema / properties / apiRequest / properties / body / properties / required / $ref
        Removed value: -"#/properties/function/properties/parameters/properties/required"
      • addedInput schema / properties / apiRequest / properties / body / properties / required / description
        Added value: +"This is a list of properties that are required.\n\nThis only makes sense if the type is \"object\"."
      • addedInput schema / properties / apiRequest / properties / body / properties / required / items
        Added value: +{
        +  "type": "string"
        +}
      • addedInput schema / properties / apiRequest / properties / body / properties / required / type
        Added value: +"array"
      • addedInput schema / properties / apiRequest / properties / body / properties / title
        Added value: +{
        +  "description": "This is the title of the schema.",
        +  "type": "string"
        +}
      • removedInput schema / properties / apiRequest / properties / body / properties / type / $ref
        Removed value: -"#/properties/function/properties/parameters/properties/type"
      • addedInput schema / properties / apiRequest / properties / body / properties / type / enum
        Added value: +[
        +  "string",
        +  "number",
        +  "integer",
        +  "boolean",
        +  "array",
        +  "object"
        +]
      • addedInput schema / properties / apiRequest / properties / body / properties / type / type
        Added value: +"string"
      • changedInput schema / properties / apiRequest / properties / body / required
        Previous value: -[
        -  "type",
        -  "properties"
        -]New value: +[
        +  "type"
        +]
      • addedInput schema / properties / apiRequest / properties / headers / properties
        Added value: +{}
      • changedInput schema / properties / apiRequest / properties / method / enum
        Previous value: -[
        -  "GET",
        -  "POST"
        -]New value: +[
        +  "POST",
        +  "GET",
        +  "PUT",
        +  "PATCH",
        +  "DELETE"
        +]
      • addedInput schema / properties / apiRequest / properties / timeoutSeconds / maximum
        Added value: +300
      • addedInput schema / properties / apiRequest / properties / timeoutSeconds / minimum
        Added value: +1
      • removedInput schema / properties / function / additionalProperties
        Removed value: -false
      • removedInput schema / properties / function / properties / parameters / additionalProperties
        Removed value: -false
      • removedInput schema / properties / function / properties / parameters / properties / properties / additionalProperties / additionalProperties
        Removed value: -false
      • removedInput schema / properties / function / properties / parameters / properties / properties / additionalProperties / properties
        Removed value: -{
        -  "description": {
        -    "type": "string"
        -  },
        -  "enum": {
        -    "items": {
        -      "type": "string"
        -    },
        -    "type": "array"
        -  },
        -  "items": {},
        -  "properties": {
        -    "additionalProperties": {},
        -    "type": "object"
        -  },
        -  "required": {
        -    "items": {
        -      "type": "string"
        -    },
        -    "type": "array"
        -  },
        -  "type": {
        -    "type": "string"
        -  }
        -}
      • removedInput schema / properties / function / properties / parameters / properties / properties / additionalProperties / required
        Removed value: -[
        -  "type"
        -]
      • removedInput schema / properties / function / properties / parameters / properties / properties / additionalProperties / type
        Removed value: -"object"
      • addedInput schema / properties / function / properties / parameters / properties / properties / properties
        Added value: +{}
      • addedInput schema / properties / function / properties / parameters / properties / required / description
        Added value: +"This specifies the properties that are required by the function."
      • addedInput schema / properties / function / properties / parameters / properties / type / description
        Added value: +"This must be set to 'object'. It instructs the model to return a JSON object containing the function call properties."
      • removedInput schema / properties / function / properties / server / additionalProperties
        Removed value: -false
      • addedInput schema / properties / function / properties / server / properties / headers / properties
        Added value: +{}
      • addedInput schema / properties / name / maxLength
        Added value: +64
      • addedInput schema / properties / name / pattern
        Added value: +"^[a-zA-Z0-9_-]{1,64}$"
      • removedInput schema / properties / sms / additionalProperties
        Removed value: -false
      • removedInput schema / properties / sms / properties / metadata / additionalProperties
        Removed value: -false
      • removedInput schema / properties / transferCall / additionalProperties
        Removed value: -false
      • changedInput schema / properties / transferCall / properties / destinations / items / additionalProperties
        Previous value: -falseNew value: +{}
      • addedInput schema / properties / transferCall / properties / destinations / items / description
        Added value: +"Transfer destination. Other TransferDestinationNumber fields, such as transferPlan and message, are sent as given (see get_api_schema)."
      • removedInput schema / properties / transferCall / properties / destinations / items / properties / callerId / description
        Removed value: -"Caller ID to use for the transfer"
      • addedInput schema / properties / transferCall / properties / destinations / items / properties / callerId / maxLength
        Added value: +40
      • changedInput schema / properties / transferCall / properties / destinations / items / properties / description / description
        Previous value: -"Description of the transfer destination"New value: +"This is the description of the destination, used by the AI to choose when and how to transfer the call."
      • changedInput schema / properties / transferCall / properties / destinations / items / properties / extension / description
        Previous value: -"Extension number if applicable"New value: +"This is the extension to dial after transferring the call to the `number`."
      • addedInput schema / properties / transferCall / properties / destinations / items / properties / extension / maxLength
        Added value: +10
      • addedInput schema / properties / transferCall / properties / destinations / items / properties / extension / minLength
        Added value: +1
      • changedInput schema / properties / transferCall / properties / destinations / items / properties / number / description
        Previous value: -"Phone number to transfer to (e.g., \"+16054440129\"). It can be any phone number in E.164 format."New value: +"This is the phone number to transfer the call to."
      • addedInput schema / properties / transferCall / properties / destinations / items / properties / number / maxLength
        Added value: +40
      • addedInput schema / properties / transferCall / properties / destinations / items / properties / number / minLength
        Added value: +3
      • addedInput schema / properties / type / anyOf
        Added value: +[
        +  {
        +    "const": "sms",
        +    "description": "The type of tool. \"sms\" for Twilio SMS sending tool.",
        +    "type": "string"
        +  },
        +  {
        +    "const": "transferCall",
        +    "type": "string"
        +  },
        +  {
        +    "const": "function",
        +    "description": "The type of tool. \"function\" for Function tool.",
        +    "type": "string"
        +  },
        +  {
        +    "const": "apiRequest",
        +    "description": "The type of tool. \"apiRequest\" for API request tool.",
        +    "type": "string"
        +  }
        +]
      • removedInput schema / properties / type / enum
        Removed value: -[
        -  "sms",
        -  "transferCall",
        -  "function",
        -  "apiRequest"
        -]
      • removedInput schema / properties / type / type
        Removed value: -"string"
    • Addedget_api_schema
    • Changedget_assistant3 fields changed
      • changedInput schema / additionalProperties
        Previous value: -falseNew value: +{}
      • addedInput schema / properties / assistantId / format
        Added value: +"uuid"
      • addedInput schema / properties / assistantId / pattern
        Added value: +"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
    • Changedget_call3 fields changed
      • changedInput schema / additionalProperties
        Previous value: -falseNew value: +{}
      • addedInput schema / properties / callId / format
        Added value: +"uuid"
      • addedInput schema / properties / callId / pattern
        Added value: +"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
    • Changedget_phone_number3 fields changed
      • changedInput schema / additionalProperties
        Previous value: -falseNew value: +{}
      • addedInput schema / properties / phoneNumberId / format
        Added value: +"uuid"
      • addedInput schema / properties / phoneNumberId / pattern
        Added value: +"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
    • Addedget_simulation_run
    • Addedget_simulation_run_item
    • Changedget_tool3 fields changed
      • changedInput schema / additionalProperties
        Previous value: -falseNew value: +{}
      • addedInput schema / properties / toolId / format
        Added value: +"uuid"
      • addedInput schema / properties / toolId / pattern
        Added value: +"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
    • Changedlist_assistants1 field changed
      • addedInput schema / additionalProperties
        Added value: +{}
    • Changedlist_calls1 field changed
      • addedInput schema / additionalProperties
        Added value: +{}
    • Changedlist_phone_numbers1 field changed
      • addedInput schema / additionalProperties
        Added value: +{}
    • Addedlist_simulation_personalities
    • Addedlist_simulation_runs
    • Addedlist_simulation_scenarios
    • Addedlist_simulation_suites
    • Addedlist_simulations
    • Changedlist_tools1 field changed
      • addedInput schema / additionalProperties
        Added value: +{}
    • Addedload_skill
    • Addedrun_simulations
    • Addedsearch_skills
    • Changedupdate_assistant14 fields changed
      • changedInput schema / additionalProperties
        Previous value: -falseNew value: +{}
      • addedInput schema / properties / assistantId / format
        Added value: +"uuid"
      • addedInput schema / properties / assistantId / pattern
        Added value: +"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
      • changedInput schema / properties / firstMessageMode / enum
        Previous value: -[
        -  "assistant-speaks-first",
        -  "assistant-waits-for-user",
        -  "assistant-speaks-first-with-model-generated-message"
        -]New value: +[
        +  "assistant-speaks-first",
        +  "assistant-speaks-first-with-model-generated-message",
        +  "assistant-waits-for-user"
        +]
      • addedInput schema / properties / instructions / maxLength
        Added value: +100000000
      • changedInput schema / properties / llm / anyOf
        Previous value: -[
        -  {
        -    "anyOf": [
        -      {
        -        "additionalProperties": false,
        -        "properties": {
        -          "model": {
        -            "enum": [
        -              "gpt-4o",
        -              "gpt-4o-mini"
        -            ],
        -            "type": "string"
        -          },
        -          "provider": {
        -            "const": "openai",
        -            "type": "string"
        -          }
        -        },
        -        "required": [
        -          "provider",
        -          "model"
        -        ],
        -        "type": "object"
        -      },
        -      {
        -        "additionalProperties": false,
        -        "properties": {
        -          "model": {
        -            "enum": [
        -              "claude-3-7-sonnet-20250219",
        -              "claude-3-5-haiku-20241022"
        -            ],
        -            "type": "string"
        -          },
        -          "provider": {
        -            "const": "anthropic",
        -            "type": "string"
        -          }
        -        },
        -        "required": [
        -          "provider",
        -          "model"
        -        ],
        -        "type": "object"
        -      },
        -      {
        -        "additionalProperties": false,
        -        "properties": {
        -          "model": {
        -            "enum": [
        -              "gemini-1.5-pro",
        -              "gemini-1.5-flash",
        -              "gemini-2.0-flash",
        -              "gemini-2.0-pro"
        -            ],
        -            "type": "string"
        -          },
        -          "provider": {
        -            "const": "google",
        -            "type": "string"
        -          }
        -        },
        -        "required": [
        -          "provider",
        -          "model"
        -        ],
        -        "type": "object"
        -      },
        -      {
        -        "additionalProperties": false,
        -        "properties": {
        -          "model": {
        -            "type": "string"
        -          },
        -          "provider": {
        -            "type": "string"
        -          }
        -        },
        -        "required": [
        -          "provider",
        -          "model"
        -        ],
        -        "type": "object"
        -      }
        -    ]
        -  },
        -  {
        -    "type": "string"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": false,
        +    "properties": {
        +      "model": {
        +        "type": "string"
        +      },
        +      "provider": {
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "provider"
        +    ],
        +    "type": "object"
        +  },
        +  {
        +    "type": "string"
        +  }
        +]
      • addedInput schema / properties / name / maxLength
        Added value: +40
      • removedInput schema / properties / transcriber / properties / model / description
        Removed value: -"Transcription model to use"
      • removedInput schema / properties / transcriber / properties / provider / description
        Removed value: -"Provider to use for transcription"
      • changedInput schema / properties / transcriber / required
        Previous value: -[
        -  "provider",
        -  "model"
        -]New value: +[
        +  "provider"
        +]
      • removedInput schema / properties / voice / properties / model / description
        Removed value: -"Voice model to use"
      • removedInput schema / properties / voice / properties / provider / description
        Removed value: -"Provider to use for voice"
      • removedInput schema / properties / voice / properties / provider / enum
        Removed value: -[
        -  "vapi",
        -  "11labs",
        -  "azure",
        -  "cartesia",
        -  "custom-voice",
        -  "deepgram",
        -  "11labs",
        -  "hume",
        -  "lmnt",
        -  "neuphonic",
        -  "openai",
        -  "playht",
        -  "rime-ai",
        -  "smallest-ai",
        -  "tavus",
        -  "sesame"
        -]
      • removedInput schema / properties / voice / properties / voiceId / description
        Removed value: -"Voice ID to use"
    • Changedupdate_tool62 fields changed
      • changedInput schema / additionalProperties
        Previous value: -falseNew value: +{}
      • addedInput schema / properties / additionalFields
        Added value: +{
        +  "additionalProperties": {},
        +  "propertyNames": {
        +    "type": "string"
        +  },
        +  "type": "object"
        +}
      • removedInput schema / properties / apiRequest / additionalProperties
        Removed value: -false
      • removedInput schema / properties / apiRequest / properties / backoffPlan / additionalProperties
        Removed value: -false
      • addedInput schema / properties / apiRequest / properties / backoffPlan / properties / baseDelaySeconds / maximum
        Added value: +10
      • addedInput schema / properties / apiRequest / properties / backoffPlan / properties / baseDelaySeconds / minimum
        Added value: +0
      • addedInput schema / properties / apiRequest / properties / backoffPlan / properties / maxRetries / maximum
        Added value: +10
      • addedInput schema / properties / apiRequest / properties / backoffPlan / properties / maxRetries / minimum
        Added value: +0
      • addedInput schema / properties / apiRequest / properties / backoffPlan / properties / type / description
        Added value: +"This is the type of backoff plan to use. Defaults to fixed.\n\n@default fixed"
      • removedInput schema / properties / apiRequest / properties / body / additionalProperties
        Removed value: -false
      • addedInput schema / properties / apiRequest / properties / body / properties / description
        Added value: +{
        +  "description": "This is the description to help the model understand what it needs to output.",
        +  "type": "string"
        +}
      • addedInput schema / properties / apiRequest / properties / body / properties / enum
        Added value: +{
        +  "description": "This array specifies the allowed values that can be used to restrict the output of the model.",
        +  "items": {
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
      • addedInput schema / properties / apiRequest / properties / body / properties / format
        Added value: +{
        +  "type": "string"
        +}
      • addedInput schema / properties / apiRequest / properties / body / properties / items
        Added value: +{}
      • addedInput schema / properties / apiRequest / properties / body / properties / pattern
        Added value: +{
        +  "type": "string"
        +}
      • removedInput schema / properties / apiRequest / properties / body / properties / properties / $ref
        Removed value: -"#/properties/function/properties/parameters/properties/properties"
      • addedInput schema / properties / apiRequest / properties / body / properties / properties / additionalProperties
        Added value: +{
        +  "allOf": [
        +    {}
        +  ]
        +}
      • addedInput schema / properties / apiRequest / properties / body / properties / properties / description
        Added value: +"This is required if the type is \"object\". This specifies the properties of the object. This is a map of property names to JsonSchema objects."
      • addedInput schema / properties / apiRequest / properties / body / properties / properties / properties
        Added value: +{}
      • addedInput schema / properties / apiRequest / properties / body / properties / properties / type
        Added value: +"object"
      • removedInput schema / properties / apiRequest / properties / body / properties / required / $ref
        Removed value: -"#/properties/function/properties/parameters/properties/required"
      • addedInput schema / properties / apiRequest / properties / body / properties / required / description
        Added value: +"This is a list of properties that are required.\n\nThis only makes sense if the type is \"object\"."
      • addedInput schema / properties / apiRequest / properties / body / properties / required / items
        Added value: +{
        +  "type": "string"
        +}
      • addedInput schema / properties / apiRequest / properties / body / properties / required / type
        Added value: +"array"
      • addedInput schema / properties / apiRequest / properties / body / properties / title
        Added value: +{
        +  "description": "This is the title of the schema.",
        +  "type": "string"
        +}
      • removedInput schema / properties / apiRequest / properties / body / properties / type / $ref
        Removed value: -"#/properties/function/properties/parameters/properties/type"
      • addedInput schema / properties / apiRequest / properties / body / properties / type / enum
        Added value: +[
        +  "string",
        +  "number",
        +  "integer",
        +  "boolean",
        +  "array",
        +  "object"
        +]
      • addedInput schema / properties / apiRequest / properties / body / properties / type / type
        Added value: +"string"
      • changedInput schema / properties / apiRequest / properties / body / required
        Previous value: -[
        -  "type",
        -  "properties"
        -]New value: +[
        +  "type"
        +]
      • addedInput schema / properties / apiRequest / properties / headers / properties
        Added value: +{}
      • changedInput schema / properties / apiRequest / properties / method / enum
        Previous value: -[
        -  "GET",
        -  "POST"
        -]New value: +[
        +  "POST",
        +  "GET",
        +  "PUT",
        +  "PATCH",
        +  "DELETE"
        +]
      • addedInput schema / properties / apiRequest / properties / timeoutSeconds / maximum
        Added value: +300
      • addedInput schema / properties / apiRequest / properties / timeoutSeconds / minimum
        Added value: +1
      • removedInput schema / properties / function / additionalProperties
        Removed value: -false
      • removedInput schema / properties / function / properties / parameters / additionalProperties
        Removed value: -false
      • removedInput schema / properties / function / properties / parameters / properties / properties / additionalProperties / additionalProperties
        Removed value: -false
      • removedInput schema / properties / function / properties / parameters / properties / properties / additionalProperties / properties
        Removed value: -{
        -  "description": {
        -    "type": "string"
        -  },
        -  "enum": {
        -    "items": {
        -      "type": "string"
        -    },
        -    "type": "array"
        -  },
        -  "items": {},
        -  "properties": {
        -    "additionalProperties": {},
        -    "type": "object"
        -  },
        -  "required": {
        -    "items": {
        -      "type": "string"
        -    },
        -    "type": "array"
        -  },
        -  "type": {
        -    "type": "string"
        -  }
        -}
      • removedInput schema / properties / function / properties / parameters / properties / properties / additionalProperties / required
        Removed value: -[
        -  "type"
        -]
      • removedInput schema / properties / function / properties / parameters / properties / properties / additionalProperties / type
        Removed value: -"object"
      • addedInput schema / properties / function / properties / parameters / properties / properties / properties
        Added value: +{}
      • addedInput schema / properties / function / properties / parameters / properties / required / description
        Added value: +"This specifies the properties that are required by the function."
      • addedInput schema / properties / function / properties / parameters / properties / type / description
        Added value: +"This must be set to 'object'. It instructs the model to return a JSON object containing the function call properties."
      • removedInput schema / properties / function / properties / server / additionalProperties
        Removed value: -false
      • addedInput schema / properties / function / properties / server / properties / headers / properties
        Added value: +{}
      • addedInput schema / properties / name / maxLength
        Added value: +64
      • addedInput schema / properties / name / pattern
        Added value: +"^[a-zA-Z0-9_-]{1,64}$"
      • removedInput schema / properties / sms / additionalProperties
        Removed value: -false
      • removedInput schema / properties / sms / properties / metadata / additionalProperties
        Removed value: -false
      • addedInput schema / properties / toolId / format
        Added value: +"uuid"
      • addedInput schema / properties / toolId / pattern
        Added value: +"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
      • removedInput schema / properties / transferCall / additionalProperties
        Removed value: -false
      • changedInput schema / properties / transferCall / properties / destinations / items / additionalProperties
        Previous value: -falseNew value: +{}
      • addedInput schema / properties / transferCall / properties / destinations / items / description
        Added value: +"Transfer destination. Other TransferDestinationNumber fields, such as transferPlan and message, are sent as given (see get_api_schema)."
      • removedInput schema / properties / transferCall / properties / destinations / items / properties / callerId / description
        Removed value: -"Caller ID to use for the transfer"
      • addedInput schema / properties / transferCall / properties / destinations / items / properties / callerId / maxLength
        Added value: +40
      • changedInput schema / properties / transferCall / properties / destinations / items / properties / description / description
        Previous value: -"Description of the transfer destination"New value: +"This is the description of the destination, used by the AI to choose when and how to transfer the call."
      • changedInput schema / properties / transferCall / properties / destinations / items / properties / extension / description
        Previous value: -"Extension number if applicable"New value: +"This is the extension to dial after transferring the call to the `number`."
      • addedInput schema / properties / transferCall / properties / destinations / items / properties / extension / maxLength
        Added value: +10
      • addedInput schema / properties / transferCall / properties / destinations / items / properties / extension / minLength
        Added value: +1
      • changedInput schema / properties / transferCall / properties / destinations / items / properties / number / description
        Previous value: -"Phone number to transfer to (e.g., \"+16054440129\"). It can be any phone number in E.164 format."New value: +"This is the phone number to transfer the call to."
      • addedInput schema / properties / transferCall / properties / destinations / items / properties / number / maxLength
        Added value: +40
      • addedInput schema / properties / transferCall / properties / destinations / items / properties / number / minLength
        Added value: +3
  2. 2 tool updatesv0.0.11
    • Removedvapi_login
    • Removedvapi_logout
  3. 2 tool updatesv0.0.9
    • Addedvapi_login
    • Addedvapi_logout
  4. 13 tool updatesv1.0.0
    • Addedcreate_assistant
    • Addedcreate_call
    • Addedcreate_tool
    • Addedget_assistant
    • Addedget_call
    • Addedget_phone_number
    • Addedget_tool
    • Addedlist_assistants
    • Addedlist_calls
    • Addedlist_phone_numbers
    • Addedlist_tools
    • Addedupdate_assistant
    • Addedupdate_tool

TDQS

B3/5.0

Scored across 29 tools

Disambiguation4/5

Most tools target a distinct resource+action pair, and the simulation cluster (personality vs scenario vs simulation vs suite vs run) is disambiguated by explicit descriptions. The closest overlaps are list_simulations vs list_simulation_runs and the four read/query helpers (ask_vapi_docs, get_api_schema, search_skills, load_skill), which are related but still separable.

Naming Consistency4/5

Nearly everything follows a snake_case verb_noun pattern (list_assistants, create_call, get_simulation_run_item), which is predictable. Minor deviations exist in the docs/skills group where 'ask_vapi_docs' and 'load_skill' depart slightly from the get_/list_/create_ convention.

Tool Count2/5

29 tools is heavy and well past the comfortable range, dominated by 12 near-repetitive simulation tools (list/create/get for personalities, scenarios, simulations, suites, runs). While they map to real product areas, the surface feels bloated rather than deliberately scoped.

Completeness3/5

Core flows (create assistant/call/tool, run simulations and inspect results) are covered, but lifecycle coverage is patchy: no delete operations anywhere, phone numbers are read-only (list/get only, no create/update/delete), and simulations have list/create but no get_simulation or update/delete.

Maintenance

ActivityMaintained
ResponsivenessLimited data

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    D
    maintenance
    Enables AI models to send messages to Lark users and manage calendar events (list, create, add attendees) through the Model Context Protocol.
    18 npm
    6
    MIT
  • A
    license
    Not graded
    quality
    D
    maintenance
    Provides a standardized interface for interacting with Falai's tools and services through the Model Context Protocol, enabling AI assistants to leverage Falai capabilities.
    2
    MIT
  • A
    license
    Not graded
    quality
    D
    maintenance
    Enables AI clients to seamlessly take HubSpot actions and interact with your HubSpot data through the Model Context Protocol.
    45,845 npm
    MIT