Build AI voice assistants and phone agents with Vapi using the Model Context Protocol.
The easiest way to get started. No API key needed - authenticate via browser on first use.
claude mcp add vapi -- npx -y @vapi-ai/mcp-serverThe Vapi skill helps Claude guide you through building voice assistants:
mkdir -p ~/.claude/skills/vapi
curl -o ~/.claude/skills/vapi/SKILL.md https://raw.githubusercontent.com/VapiAI/mcp-server/main/skill/SKILL.mdAfter restarting, use /vapi or ask Claude to help build a voice assistant. On first use, you'll be prompted to sign in via browser - no API key copy-paste needed.
{
"mcpServers": {
"vapi": {
"command": "npx",
"args": ["-y", "@vapi-ai/mcp-server"]
}
}
}If you prefer to use an API key directly, get one from the Vapi dashboard:
{
"mcpServers": {
"vapi": {
"command": "npx",
"args": ["-y", "@vapi-ai/mcp-server"],
"env": {
"VAPI_TOKEN": "<your_vapi_token>"
}
}
}
}Connect to Vapi's hosted MCP server:
{
"mcpServers": {
"vapi": {
"command": "npx",
"args": [
"mcp-remote",
"https://mcp.vapi.ai/mcp",
"--header",
"Authorization: Bearer ${VAPI_TOKEN}"
],
"env": {
"VAPI_TOKEN": "<your_vapi_token>"
}
}
}
}Ask Claude:
I want to build a voice assistant that can schedule appointments
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 call with my support assistant for next Tuesday at 3:00 PM to +1555123456
The create_call action supports passing dynamic variables through assistantOverrides.variableValues. Use double curly braces in your assistant's prompts: {{variableName}}.
Hello {{customerName}}, this is a reminder about your appointment on {{appointmentDate}} at {{appointmentTime}} with {{doctorName}}.
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.
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
- URL:
https://mcp.vapi.ai/sse - Header:
Authorization: Bearer your_vapi_api_key_here
| Tool | Description |
|---|---|
vapi_list_assistants |
List all assistants |
vapi_get_assistant |
Get assistant by ID |
vapi_create_assistant |
Create new assistant |
vapi_update_assistant |
Update assistant |
vapi_delete_assistant |
Delete assistant |
| Tool | Description |
|---|---|
vapi_list_calls |
List call history |
vapi_get_call |
Get call details |
vapi_create_call |
Start outbound call (immediate or scheduled) |
| Tool | Description |
|---|---|
vapi_list_phone_numbers |
List phone numbers |
vapi_get_phone_number |
Get phone number details |
vapi_buy_phone_number |
Purchase new number |
vapi_update_phone_number |
Update number settings |
vapi_delete_phone_number |
Release number |
| Tool | Description |
|---|---|
vapi_list_tools |
List custom tools |
vapi_get_tool |
Get tool details |
vapi_create_tool |
Create tool for API integration |
vapi_update_tool |
Update tool |
vapi_delete_tool |
Delete tool |
| Tool | Description |
|---|---|
vapi_login |
Start OAuth flow |
vapi_logout |
Log out and clear credentials |
# Install dependencies
npm install
# Build
npm run build
# Test with MCP inspector
npm run inspector{
"mcpServers": {
"vapi-local": {
"command": "node",
"args": ["<path>/dist/index.js"],
"env": {
"VAPI_TOKEN": "<your_vapi_token>"
}
}
}
}# Unit tests (mocked)
npm run test:unit
# E2E tests (requires VAPI_TOKEN)
export VAPI_TOKEN=your_token_here
npm run test:e2e
# All tests
npm test