Skip to main content
Glama
README.md
# Vapi MCP Server – Voice AI Integration for Claude & Model Context Protocol

**Vapi MCP Server** is an open-source [Model Context Protocol](https://modelcontextprotocol.com/) (MCP) server that connects [Vapi](https://vapi.ai) voice AI APIs with Claude Desktop and other MCP clients. Manage assistants, create and schedule phone calls, and control voice AI tools—all from your AI workflow.

[![smithery badge](https://smithery.ai/badge/@VapiAI/vapi-mcp-server)](https://smithery.ai/server/@VapiAI/vapi-mcp-server)

<a href="https://glama.ai/mcp/servers/@VapiAI/mcp-server">
  <img width="380" height="200" src="https://glama.ai/mcp/servers/@VapiAI/mcp-server/badge" alt="Vapi Server MCP server" />
</a>

---

## Table of Contents

- [About This Project](#about-this-project)
- [Features](#features)
- [Prerequisites](#prerequisites)
- [Quick Start](#quick-start)
- [Claude Desktop Setup](#claude-desktop-setup)
- [Using Variable Values in Assistant Prompts](#using-variable-values-in-assistant-prompts)
- [Remote MCP](#remote-mcp)
- [Supported Actions & Tools](#supported-actions--tools)
- [Development](#development)
- [Testing](#testing)
- [References](#references)
- [Author & Contact](#author--contact)

---

## About This Project

This project provides a **Model Context Protocol (MCP) server for Vapi**, enabling:

- **Claude Desktop integration** – Use Claude to create calls, manage assistants, and work with Vapi phone numbers via natural language.
- **Voice AI tool calling** – Expose Vapi assistants, calls, phone numbers, and tools as MCP tools for any MCP-compatible client.
- **Streamable HTTP & SSE** – Connect locally (stdio) or remotely to Vapi’s MCP endpoint.

Ideal for developers building voice AI workflows, appointment schedulers, and AI-powered phone integrations with [Vapi](https://vapi.ai) and [Claude](https://www.anthropic.com).

---

## Features

- **Assistant management** – List, create, update, and get Vapi assistants
- **Call control** – Create outbound calls (immediate or scheduled) with dynamic variables
- **Phone numbers** – List and inspect Vapi phone numbers
- **Vapi tools** – List and get Vapi tool definitions
- **Claude Desktop** – Drop-in configuration for Claude Desktop
- **Remote MCP** – Connect via Streamable HTTP or SSE to Vapi’s hosted MCP server

---

## Prerequisites

- [Node.js](https://nodejs.org/) (see [.nvmrc](.nvmrc) for recommended version)
- A [Vapi](https://vapi.ai) account and [API key](https://dashboard.vapi.ai/org/api-keys)
- [Claude Desktop](https://claude.ai/download) (optional, for Claude integration)

---

## Quick Start

1. Get your **Vapi API key** from the [Vapi dashboard](https://dashboard.vapi.ai/org/api-keys).
2. Install and run the server (see [Claude Desktop Setup](#claude-desktop-setup) or [Development](#development)).
3. Use your MCP client to call Vapi assistants, create calls, and manage phone numbers.

---

## Claude Desktop Setup

1. Open **Claude Desktop** and press `Cmd + ,` (Mac) or `Ctrl + ,` (Windows) to open **Settings**.
2. Go to the **Developer** tab.
3. Click **Edit Config** to open `claude_desktop_config.json`.
4. Add the MCP server configuration below (see [Model Context Protocol user quickstart](https://modelcontextprotocol.io/quickstart/user) for details).
5. **Restart Claude Desktop** after saving the config.

### Local Configuration

Run the Vapi MCP server locally via `npx`:

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

### Remote Configuration

Connect to Vapi’s remote MCP server (no local install):

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

### Example Usage with Claude Desktop

1. Create or import a **phone number** in the [Vapi dashboard](https://dashboard.vapi.ai/phone-numbers).
2. Create a new **assistant** (e.g. using the “Appointment Scheduler” template) in the [Vapi dashboard](https://dashboard.vapi.ai/assistants).
3. Ensure Claude Desktop is configured with the Vapi MCP server and restart the app.
4. Ask Claude to initiate or schedule a call. Examples:

**Example 1: Request an immediate call**

```text
I'd like to speak with my ShopHelper assistant to talk about my recent order. Can you have it call me at +1234567890?
```

**Example 2: Schedule a future call**

```text
I need to schedule a call with Mary assistant for next Tuesday at 3:00 PM. My phone number is +1555123456.
```

**Example 3: Call with dynamic variables**

```text
I want to call +1234567890 with my appointment reminder assistant. Use these details:
- Customer name: Sarah Johnson
- Appointment date: March 25th
- Appointment time: 2:30 PM
- Doctor name: Dr. Smith
```

---

## Using Variable Values in Assistant Prompts

The `create_call` action supports dynamic variables via `assistantOverrides.variableValues`. Use them in your assistant’s prompts with double curly braces: `{{variableName}}`.

### Example Assistant Prompt with Variables

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

### Default Variables

These variables are available in prompts without passing `variableValues`:

| Variable | Description |
|----------|-------------|
| `{{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 |

For default variables and date/time formatting, see the [Vapi documentation](https://docs.vapi.ai/assistants/dynamic-variables#default-variables).

---

## Remote MCP

You can use Vapi’s MCP server remotely from any MCP client.

### Streamable HTTP (Recommended)

- **Endpoint:** `https://mcp.vapi.ai/mcp`
- Use **Streamable HTTP** transport and send your Vapi API key as a Bearer token.
- Example header: `Authorization: Bearer your_vapi_api_key_here`

### SSE (Deprecated)

- **Endpoint:** `https://mcp.vapi.ai/sse`
- Use **SSE** transport and send your Vapi API key as a Bearer token.
- Example header: `Authorization: Bearer your_vapi_api_key_here`

---

## Supported Actions & Tools

The Vapi MCP Server exposes these tools:

### Assistant Tools

| Tool | Description |
|------|-------------|
| `list_assistants` | List all Vapi assistants |
| `create_assistant` | Create a new Vapi assistant |
| `update_assistant` | Update an existing Vapi assistant |
| `get_assistant` | Get a Vapi assistant by ID |

### Call Tools

| Tool | Description |
|------|-------------|
| `list_calls` | List all Vapi calls |
| `create_call` | Create an outbound call (immediate or scheduled; supports `assistantOverrides.variableValues`) |
| `get_call` | Get details of a specific call |

### Phone Number Tools

| Tool | Description |
|------|-------------|
| `list_phone_numbers` | List all Vapi phone numbers |
| `get_phone_number` | Get details of a specific phone number |

### Vapi Tools

| Tool | Description |
|------|-------------|
| `list_tools` | List all Vapi tools |
| `get_tool` | Get details of a specific tool |

> **Note:** `create_call` supports scheduling (immediate or future) and dynamic variables via `assistantOverrides.variableValues`.

---

## Development

```bash
# Install dependencies
npm install

# Build the server
npm run build

# Run with MCP inspector (for testing)
npm run inspector
```

To use your local build with Claude Desktop, point the config to the built file:

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

---

## Testing

### Unit Tests

Uses mocks; no real Vapi API calls.

```bash
npm run test:unit
```

### End-to-End Tests

Requires a valid `VAPI_TOKEN` and performs real API calls.

```bash
export VAPI_TOKEN=your_token_here
npm run test:e2e
```

### Run All Tests

```bash
npm test
```

---

## References

- [Vapi Remote MCP Server](https://mcp.vapi.ai/)
- [Vapi MCP Tool Documentation](https://docs.vapi.ai/tools/mcp)
- [Vapi MCP Server SDK](https://docs.vapi.ai/sdk/mcp)
- [Model Context Protocol](https://modelcontextprotocol.com/)
- [Claude Desktop – MCP Quickstart](https://modelcontextprotocol.io/quickstart/user)

---

## Author & Contact

**KuchikiRenji**

| | |
|---|---|
| **GitHub** | [github.com/KuchikiRenji](https://github.com/KuchikiRenji) |
| **Email** | KuchikiRenji@outlook.com |
| **Discord** | `kuchiki_renji` |

For issues, feature requests, or contributions, please open an [issue](https://github.com/KuchikiRenji/mcp-server/issues) or reach out via the channels above.