Vapi MCP Server
OfficialThe Vapi MCP Server enables integration with Vapi APIs through the Model Context Protocol for managing:
Assistants: List, create, update, and retrieve assistants with customizable LLM, voice, transcriber, and first message configurations.
Calls: List, create, and retrieve calls, including scheduling outbound calls for immediate or future execution.
Phone Numbers: List and retrieve Vapi phone numbers.
Tools: List and retrieve Vapi tools.
Remote Connectivity: Connect to the server remotely using Server-Sent Events (SSE) for seamless integration.
Development & Testing: Supports local development with unit and end-to-end tests.
Allows the MCP server to be installed and run via NPX, making it easy to integrate Vapi's capabilities through the NPM package ecosystem.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Vapi MCP Servercall my appointment reminder assistant to schedule a follow-up for next week"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
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-serverSet 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/mcpHeader:
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-serverClaude 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.mdRelated 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 appointmentsMake 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 PMSchedule a Future Call
Schedule a call with my support assistant for next Tuesday at 3:00 PM to +1555123456Using 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:
Streamable HTTP (Recommended)
URL:
https://mcp.vapi.ai/mcpHeader:
Authorization: Bearer your_vapi_api_key_here
SSE (Deprecated)
URL:
https://mcp.vapi.ai/sseHeader:
Authorization: Bearer your_vapi_api_key_here
Available Tools
Assistants
Tool | Description |
| List all assistants |
| Get assistant by ID |
| Create new assistant |
| Update assistant |
Calls
Tool | Description |
| List call history |
| Get call details |
| Start outbound call (immediate or scheduled) |
Phone Numbers
Tool | Description |
| List phone numbers |
| Get phone number details |
Tools (Function Calling)
Tool | Description |
| List custom tools |
| Get tool details |
| Create tool for API integration |
| Update tool |
Development
# Install dependencies
npm install
# Build
npm run build
# Test with MCP inspector
npm run inspectorLocal 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:mutatingReferences
Available Tools
13 toolscreate_assistantB
Creates a new Vapi assistant
| Name | Required | Description | Default |
|---|---|---|---|
| llm | No | LLM configuration | |
| name | Yes | Name of the assistant | |
| voice | No | Voice configuration | |
| toolIds | No | IDs of tools to use with this assistant | |
| transcriber | No | Transcription configuration | |
| firstMessage | No | First message to say to the user | Hello, how can I help you today? |
| instructions | No | Instructions for the assistant | You are a helpful assistant. |
| firstMessageMode | No | This determines who speaks first, either assistant or user | assistant-speaks-first |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full responsibility. It only states the tool creates an assistant, with no insight into side effects, authentication needs, rate limits, or what happens on success/failure. This is insufficient.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, non-wasteful sentence. It is front-loaded with the action. However, for a complex tool with 8 parameters, slightly more context might be warranted, but it remains appropriately concise.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (8 parameters, nested objects, no output schema) and absence of annotations, the description is inadequate. It does not explain return values, relationship to other entities (e.g., tools), or typical workflow integration.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3. The description adds no parameter-specific meaning beyond the schema; it simply states the tool's purpose. No extra value is provided.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action (creates) and resource (new Vapi assistant), and implicitly distinguishes from sibling tools like create_call or create_tool. It is specific and unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives (e.g., update_assistant) or any context about prerequisites or typical use cases. It lacks any usage direction.
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
| Name | Required | Description | Default |
|---|---|---|---|
| customer | No | Customer information | |
| assistantId | No | ID of the assistant to use for the call | |
| scheduledAt | No | ISO datetime string for when the call should be scheduled (e.g. "2025-03-25T22:39:27.771Z") | |
| phoneNumberId | No | ID of the phone number to use for the call | |
| assistantOverrides | No | Overrides for the assistant configuration |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must convey all behavioral traits. It only mentions 'outbound call' without disclosing side effects (e.g., cost, permissions, idempotency) or whether the call may be scheduled (as indicated by the scheduledAt parameter).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is short and front-loaded, but contains a grammatical error ('a outbound'). It lacks structure and fails to earn its place with substantial content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity of the input schema (5 parameters, nested objects) and no output schema, the description omits crucial details like what the call creation returns, how scheduling works, and any necessary prerequisites.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
All parameters have descriptive titles in the schema, so the description adds no additional meaning. Baseline 3 is appropriate given 100% schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states the tool creates an outbound call, distinguishing it from read tools like get_call or list_calls. However, it lacks precision about what creating a call entails (e.g., immediate dialing vs scheduling).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives like create_assistant or when to avoid it. Missing context on prerequisites or restrictions.
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
| Name | Required | Description | Default |
|---|---|---|---|
| sms | No | SMS tool configuration - to send text messages | |
| name | No | Name of the function/tool | |
| type | Yes | Type of the tool to create | |
| function | No | Custom function tool configuration - for custom server-side functions | |
| apiRequest | No | API Request tool configuration - for HTTP API integration | |
| description | No | Description of what the function/tool does | |
| transferCall | No | Transfer call tool configuration - to transfer calls to destinations |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must convey behavior. It only says 'creates', implying mutation, but offers no details on side effects, idempotency, or what changes occur. The agent is left to infer from the schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence, which is concise, but it lacks substantive content. It is front-loaded but too sparse to be fully effective.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a complex tool with 7 parameters and no output schema, the description is grossly incomplete. It fails to explain what the tool returns or any post-creation behavior, making it insufficient for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description adds no extra meaning beyond the schema—no examples, relationships, or usage tips for the nested parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description 'Creates a new Vapi tool' clearly states the action and the resource. It distinguishes from sibling tools like create_assistant or create_call due to the explicit mention of 'tool'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives, nor any prerequisites or context for creation. The schema indicates 'type' is required, but the description does not elaborate on use cases.
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
| Name | Required | Description | Default |
|---|---|---|---|
| assistantId | Yes | ID of the assistant to get |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must fully disclose behavioral traits, but it only states a simple retrieval. It omits whether the operation is read-only, requires authentication, or has any side effects. The minimal description does not compensate for missing annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One short, direct sentence conveys the core purpose efficiently. While it lacks detail, for a simple get operation, the conciseness is acceptable.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the simple tool (1 parameter, no output schema, no annotations), the description is minimally adequate but lacks completeness regarding return value, error conditions, or behavioral traits. Could be improved.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already describes the only parameter ('assistantId') with 100% coverage, so the description adds no extra meaning. Baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Gets' and the resource 'Vapi assistant by ID,' making the purpose unambiguous. It naturally distinguishes itself from sibling tools like 'create_assistant' or 'list_assistants'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives (e.g., 'list_assistants' for multiple, 'update_assistant' for modifications). No context about prerequisites or 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.
get_callB
Gets details of a specific call
| Name | Required | Description | Default |
|---|---|---|---|
| callId | Yes | ID of the call to get |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description bears full burden for behavioral disclosure. It only says 'gets details' but does not specify whether it is read-only, what happens on missing IDs, or any authorization requirements. Lacks any behavioral context beyond the bare function.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single sentence, no extraneous words. Efficiently communicates the core purpose with no redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema is provided, and the description offers no details about return format, errors, or pagination. For a simple get tool, this may be sufficient, but the lack of any additional context (like example usage or notes) makes it incomplete for an agent to fully understand the behavior.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% (callId described as 'ID of the call to get'). The description adds no extra meaning beyond the schema, so baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action and resource: 'Gets details of a specific call'. It distinguishes from sibling tools like list_calls (listing) and create_call (creating), making the purpose unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives. There is no mention of prerequisites, typical use cases, or what to do if the call ID is invalid.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_phone_numberC
Gets details of a specific phone number
| Name | Required | Description | Default |
|---|---|---|---|
| phoneNumberId | Yes | ID of the phone number to get |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Description says 'Gets details' implying a read-only operation, but no annotations are provided to confirm safety. It does not disclose any behavioral traits such as rate limits, authentication requirements, or side effects.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence, which is concise but lacks structure. It efficiently communicates the core purpose but does not earn its place with extra detail.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Without an output schema, the description should at least hint at the return value (e.g., 'returns phone number details'). It does not, making it incomplete for a simple read tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% (phoneNumberId described adequately). The description adds no additional meaning beyond the schema; baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Gets details' with a specific resource ('phone number'), distinguishing it from sibling tools like list_phone_numbers (list) and create_phone_number (create). However, it lacks specificity about what 'details' include.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus siblings. For example, it doesn't mention that list_phone_numbers should be used to get all numbers, and this is for a single number by ID.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_toolB
Gets details of a specific tool
| Name | Required | Description | Default |
|---|---|---|---|
| toolId | Yes | ID of the tool to get |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden. It implies a read-only operation but does not explicitly state that no modifications occur or that it is safe. A simple 'Reads and returns tool details without side effects' would improve transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single, concise sentence. No wasted words, but it is minimal. Could include more context without harming conciseness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple get operation with one parameter and no output schema, the description is adequate. However, it does not hint at the return structure or any prerequisites (e.g., tool must exist), which would be helpful for the agent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema covers toolId with 100% description, so the description adds no additional semantics. Baseline at 3 is appropriate. It could clarify the expected format (e.g., UUID), but is not necessary.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description 'Gets details of a specific tool' clearly identifies the action (getting) and the resource (tool). It distinguishes from siblings like list_tools by specifying a single tool. However, it omits what specific details are retrieved, making it slightly less than perfectly clear.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool vs. alternatives like list_tools. The description does not mention that this tool is for retrieving a single tool by ID, while list_tools is for enumerating all tools. This lack of differentiation forces the agent to infer usage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_assistantsA
Lists all Vapi assistants
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so the description must disclose behavior. It says 'lists all' but does not mention pagination, limits, ordering, or any other behavioral traits beyond the action itself.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Extremely concise, one sentence with no unnecessary words. Front-loaded with the core action.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has no parameters and no output schema, the description is adequate but lacks contextual depth such as scope (e.g., all assistants for the user) or any behavioral notes. Could be more complete but satisfies basic needs.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Input schema has no parameters (100% coverage), so the description does not need to add parameter details. Baseline is 4 for zero-parameter tools.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it lists all Vapi assistants, using a specific verb and resource. It distinguishes from sibling tools like get_assistant (single) and create_assistant (creation).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives (e.g., get_assistant for a single assistant). Does not specify any context or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_callsB
Lists all Vapi calls
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. It only states 'Lists all Vapi calls' with no details on return size, pagination, or rate limits, leaving behavioral traits unclear.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single sentence, no unnecessary words. Could be slightly more informative without bloat, but remains concise.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema, no parameters, and no annotations, the description is too minimal; it doesn't explain return format, pagination, or side effects for a list tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
No parameters in schema; schema description coverage is 100%. Description adds no extra param info but baseline for 0 params is 4, and the description is adequate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states verb 'Lists' and resource 'Vapi calls', distinguishing it from siblings like get_call (single call) and list_assistants (different resource).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool vs alternatives; e.g., no mention that get_call is for a specific call or that list_assistants lists different resources.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_phone_numbersA
Lists all Vapi phone numbers
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden but only states the basic function. It does not disclose behavioral traits such as read-only nature, pagination, rate limits, or any filters. The description is too sparse to inform about potential side effects or constraints.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence with no redundant words. It is maximally concise and focused.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has no parameters and no output schema, the description is minimally adequate. However, it lacks information on pagination, response format, or whether all phone numbers are truly listed without limits. It could be more complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There are zero parameters in the input schema, so the description does not need to explain param semantics. Baseline for 0 params is 4, and no additional information is required.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb 'Lists' and clearly identifies the resource 'all Vapi phone numbers'. It distinguishes from sibling tools like list_assistants, list_calls, list_tools, and get_phone_number.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives, nor any prerequisites or when not to use it. The intended usage context is implicit but not explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_toolsA
Lists all Vapi tools
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden for behavioral transparency, but it only states 'Lists all Vapi tools.' It does not disclose whether the operation is read-only, if there are any side effects, rate limits, or pagination behavior. This is insufficient for a comprehensive understanding.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence that concisely states the tool's function with no extraneous words. It is appropriately front-loaded and efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple listing tool with no parameters and no output schema, the description is adequate but minimal. It could benefit from mentioning return format, pagination, or ordering, which are common for list operations. Still, it is complete enough for basic understanding.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has zero parameters, and schema description coverage is 100%. Since there are no parameters to explain, the description does not need to add parameter semantics. Baseline for 0 parameters is 4, and no deficiency is noted.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description 'Lists all Vapi tools' clearly specifies the verb (lists) and the resource (Vapi tools). It distinguishes from sibling tools like list_assistants and list_phone_numbers by naming the specific resource type.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit guidance on when to use this tool versus alternatives is provided. While the name and description imply it is the sole tool for listing tools, there is no mention of context, restrictions, or alternatives, leaving room for ambiguity.
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
| Name | Required | Description | Default |
|---|---|---|---|
| llm | No | New LLM configuration | |
| name | No | New name for the assistant | |
| voice | No | New voice configuration | |
| toolIds | No | New IDs of tools to use with this assistant | |
| assistantId | Yes | ID of the assistant to update | |
| transcriber | No | New transcription configuration | |
| firstMessage | No | First message to say to the user | |
| instructions | No | New instructions for the assistant | |
| firstMessageMode | No | This determines who speaks first, either assistant or user |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must disclose behavioral traits but only states 'Updates an existing Vapi assistant'. It omits side effects, idempotency, partial update behavior, error conditions, and required permissions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence with no waste, but it lacks structure or additional context such as usage notes.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (9 parameters, nested objects, no output schema, no annotations), the description provides insufficient context about behavior, return values, or how updates are applied.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The tool description adds no extra meaning beyond the schema's property descriptions (e.g., 'New name', 'New IDs').
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Updates') and the resource ('an existing Vapi assistant'), distinguishing it from siblings like create_assistant, get_assistant, and list_assistants.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives like create_assistant or get_assistant, nor are there prerequisites or exclusions mentioned.
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
| Name | Required | Description | Default |
|---|---|---|---|
| sms | No | SMS tool configuration - to send text messages | |
| name | No | Name of the function/tool | |
| toolId | Yes | ID of the tool to update | |
| function | No | Custom function tool configuration - for custom server-side functions | |
| apiRequest | No | API Request tool configuration - for HTTP API integration | |
| description | No | Description of what the function/tool does | |
| transferCall | No | Transfer call tool configuration - to transfer calls to destinations |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description should compensate but only states 'updates an existing Vapi tool'. It does not disclose whether the update is partial or full, what permissions are needed, or any side effects.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence, making it concise. However, it is too terse and omits essential behavioral details, making it less helpful than it could be.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity (7 parameters, nested objects, no output schema, no annotations), the description is insufficient. It does not explain the update semantics (e.g., partial vs full replacement) or error handling.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so each parameter has a detailed description in the schema. The tool description adds no additional meaning beyond what is already provided in the input schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'updates' and the resource 'existing Vapi tool', making the purpose unambiguous. However, it does not specify which fields can be updated, relying on the schema for details.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives like create_tool or delete_tool. The description lacks any context about typical usage scenarios or prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
TDQS
Each tool targets a distinct resource and action: assistants, calls, phone numbers, and tools are clearly separated, with list/get/create/update operations uniquely identified. There is no functional overlap between any tools.
All 13 tools follow a consistent verb_noun pattern with lowercase and underscores, such as list_assistants, create_call, get_phone_number. The convention is uniform across all resources.
With 13 tools spanning three core resource types, the count is well within the optimal range. Each tool serves a distinct purpose with no redundancy.
Assistants and tools have full CRUD except delete operations, while phone numbers lack create/update/delete and calls lack update/delete. These are minor gaps but may reflect API constraints; core read and update workflows are covered.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
Integrate Connext AI into agentic workflows, enabling Connext product-aware assistance.
A Model Context Protocol server for Wix AI tools
Enable secure connectivity between Sentry issues and debugging data, and LLM clients, using a Model Context Protocol (MCP) server.
AI-callable tools for API mocking, testing, monitoring, security, and automation.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceEnables integration with Vapi's voice AI platform to manage assistants, create and schedule phone calls with dynamic variables, and manage phone numbers through function calling.601MIT
- AlicenseNot gradedqualityFmaintenanceEnables AI models to send messages to Lark users and manage calendar events (list, create, add attendees) through the Model Context Protocol.136MIT
- AlicenseNot gradedqualityDmaintenanceProvides a standardized interface for interacting with Falai's tools and services through the Model Context Protocol, enabling AI assistants to leverage Falai capabilities.2MIT
- AlicenseNot gradedqualityDmaintenanceEnables AI clients to seamlessly take HubSpot actions and interact with your HubSpot data through the Model Context Protocol.22,588MIT
Appeared in Searches
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/VapiAI/mcp-server'
If you have feedback or need assistance with the MCP directory API, please join our Discord server