# Vapi MCP connector

Connect Vapi to Claude, ChatGPT, Cursor and any MCP client so your team can review calls, recordings and call logs, and adjust voice assistants in plain language, with every action logged.

Source: https://elaichi.ai/connectors/vapi/

## Facts

| | |
| --- | --- |
| Application | Vapi |
| Category | Voice |
| AI tools | 86 |
| Authentication | Connects with an API key |
| Needs your own OAuth app | No |
| MCP endpoint | https://api.elaichi.ai/mcp |
| Works with | Claude, ChatGPT, Cursor, any MCP client, and the Elaichi Agent |
| Tools advertised by name | No. 86 tools is past the 30-tool threshold, so clients use `search_tools` and `execute_tool` |

## What you can ask once Vapi is connected

- Which Vapi assistants handled the most calls this week?
- Show me yesterday's failed Vapi calls by assistant.
- List every Vapi squad and the assistants inside it.

## Connect Vapi in Elaichi

This happens once for the organization, before any client is involved.

1. Open Connections, choose Add connection, and pick Vapi.
2. Optionally set Share with, then press Connect.
3. Paste a Vapi API key. One person generates a token in Vapi and pastes it once. Everyone else works through Share with, and never sees it.

Credentials are vaulted and nobody, including the AI, reads them back. The connection becomes a toolbox immediately, so you can curate which Vapi tools are exposed, rename them, or freeze arguments before anyone points a client at it.

## Connect Vapi to Claude

Endpoint: https://api.elaichi.ai/mcp

1. Open Customize, then Connectors.
2. Press Add.
3. Name it, paste the MCP server URL, then Continue.
4. Sign in and approve.

On Team and Enterprise, an Owner adds it once. Everyone else turns it on for themselves.

## Connect Vapi to ChatGPT

Endpoint: https://api.elaichi.ai/mcp

1. Open Plugins, then press the + button.
2. Name it and paste the endpoint into Server URL.
3. Leave Authentication on OAuth, then tick the risk acknowledgement.
4. Press Create, then sign in and approve.

Works on the web today. The plugin directory lives at chatgpt.com/plugins.

## Connect Vapi to Cursor

Endpoint: https://api.elaichi.ai/mcp

1. Open `~/.cursor/mcp.json`.
2. Add the endpoint under `mcpServers`.
3. Reload Cursor, then sign in and approve.

Set up per machine, so repeat it on each computer you work from.

## Connect Vapi to any MCP client

Endpoint: https://api.elaichi.ai/mcp

1. Add the endpoint as a remote MCP server.
2. Sign in and approve.

The Elaichi Agent already has these tools, with nothing to set up.

## What the consent screen decides

Only Read is granted by default, which is not enough to call a Vapi tool. Over MCP there is no trusted place to confirm a write in the moment, so the consent screen is the standing approval rather than a formality. Grant Read and Run tools. Think hard before granting Delete, which reaches into connected apps and cannot be undone.

## What teams do with Vapi through Elaichi

### Find out why a call went badly

Support. When a customer complains about a voice assistant, pull up that Vapi call, its log and its recording in one ask and see what was said and where it went wrong.

### Start outbound calls from a lead list

Sales. Hand the agent a list of numbers and the assistant to use, and it places the Vapi calls, then reports back which ones connected.

### Change an assistant's script the same day

Operations. Ask for the greeting, voice or instructions on a Vapi assistant to be updated, and the change is live without opening the dashboard.

### Review yesterday's recordings in one pass

Quality. List the day's Vapi recordings and call logs, have them summarized, and flag the calls where the assistant stumbled or a caller hung up early.

### Build a test assistant and add it to a squad

Product. Create a new Vapi assistant, put it in a squad alongside the current one, and run a few calls to compare how each handles the same request.

### Check how a calling campaign is doing

Marketing. Ask how many Vapi calls a campaign assistant made this week, how long they ran, and which ones ended with the caller asking to be called back.

## Frequently asked questions

### How do I connect Vapi to Claude?

Connect Vapi in Elaichi first, which asks only for your Vapi API key, then in Claude go to Customize, then Connectors, then Add, and paste https://api.elaichi.ai/mcp. There is no OAuth application to register in Vapi and no client ID or secret to generate. Once the endpoint is in place, Claude signs in through Elaichi and your Vapi assistants, calls and recordings are available.

### Does Vapi work with ChatGPT and Cursor as well as Claude?

Yes. You connect Vapi once in Elaichi, and the same endpoint, https://api.elaichi.ai/mcp, works in Claude, ChatGPT, Cursor, any other MCP client and the Elaichi Agent. Each client signs in with the same account and sees the same Vapi connection.

### What can an AI agent actually do with my Vapi data?

An agent connected to Vapi can list and look up your assistants, squads, calls, recordings, call logs and chats, place new calls, start chats, and create, update or delete assistants and squads. In practice that means asking for the recording of a specific call, changing an assistant's greeting, or summarizing yesterday's call logs. Because Vapi has many capabilities, short concrete asks such as "show me the calls from today" work better than long instructions.

### Does connecting Vapi give the AI everything in my Vapi account?

The AI sees only what the person who signed in can see in Vapi, because every call runs under that person's own access. Elaichi can narrow that further, for example to reading calls and recordings without changing assistants, but it can never widen what Vapi itself allows.

### Can my team share one Vapi connection?

Yes. One person connects Vapi with the API key, shares the connection with a team in Elaichi, and nobody else on the team ever sees or handles that key. Each teammate still signs in to Elaichi as themselves, so the audit log names the person who placed a Vapi call or changed an assistant.

### Can I stop an agent from deleting or changing things in Vapi?

Yes. Restrictions in Elaichi apply per action, so you can allow listing Vapi calls and recordings while blocking the deletion of assistants, squads or calls. A blocked action is never shown to Claude, ChatGPT or any other client, so no prompt can reach it.

### What happens to a Vapi connection when someone leaves?

Offboarding the person in Elaichi ends their access to Vapi through every client at once. If they connected a shared Vapi account, the connection keeps working for everyone else on the team. Disconnecting Vapi once in Elaichi removes it from Claude, ChatGPT, Cursor and every other client at the same time.

## All 86 Vapi tools

Every tool below is callable through https://api.elaichi.ai/mcp once Vapi is connected, subject to the toolbox it is in and the restrictions on the caller.

- **List all Vapi assistants** (List). List vapi assistants. Returns: id, createdAt, updatedAt. Supports optional filtering by creation and update timestamps (gt, lt, ge, le variants for both createdAt and updatedAt).
- **Create a Vapi assistant** (Create). Create a new vapi assistant. Returns: id, createdAt, updatedAt.
- **Get single Vapi assistant by ID** (Get). Get a single vapi assistant by id. Returns: id, createdAt, updatedAt. Required: id.
- **Update a Vapi assistant by ID** (Update). Update a vapi assistant by id using a partial payload. Returns: id, createdAt, updatedAt. Required: id.
- **Delete a Vapi assistant by ID** (Delete). Delete a vapi assistant by id. Returns the deleted assistant object including id, createdAt, updatedAt. Required: id.
- **List all Vapi squads** (List). List vapi squads. Returns: id, createdAt, updatedAt per squad. Supports optional filtering by createdAt and updatedAt date ranges.
- **Create a Vapi squad** (Create). Create a new vapi squad. Returns: id, createdAt, updatedAt of the newly created squad.
- **Get single Vapi squad by ID** (Get). Get a single vapi squad by id. Returns: id, createdAt, updatedAt. Required: id.
- **Update a Vapi squad by ID** (Update). Update an existing vapi squad by id. Returns: id, createdAt, updatedAt of the updated squad. Required: id.
- **Delete a Vapi squad by ID** (Delete). Delete a vapi squad by id. Returns the deleted squad object including id, createdAt, updatedAt. Required: id.
- **List all Vapi calls** (List). List vapi calls with optional filters. Returns an array of call records each including id, type, assistantId, phoneNumberId, createdAt, and updatedAt. Filter by id, assistantId, phoneNumberId, or creation/update date ranges.
- **Create a Vapi call** (Create). Create a new vapi call. Returns the created call object including id, type, assistantId, phoneNumberId, createdAt, and updatedAt.
- **Get single Vapi call by ID** (Get). Get a single vapi call by id. Returns: id, type, assistantId, phoneNumberId, createdAt, updatedAt. Required: id.
- **Update a Vapi call by ID** (Update). Update a vapi call by id. Returns the updated call object including id, type, assistantId, phoneNumberId, createdAt, and updatedAt. Required: id.
- **Delete a Vapi call by ID** (Delete). Delete a vapi call by id. Returns the deleted call object including id, type, assistantId, phoneNumberId, createdAt, and updatedAt. Required: id.
- **List all Vapi mono recordings** (List). Download the mono-channel audio recording for a vapi call. Returns a 302 redirect to a short-lived presigned URL for the audio file; the recording content is served from the redirect target. Required: id.
- **List all Vapi stereo recordings** (List). Download the stereo recording for a vapi call by call id. Returns a redirect (302) to a short-lived presigned URL for the binary audio recording file; no structured JSON body is returned. Required: id.
- **List all Vapi video recordings** (List). Download the video recording for a vapi call by call id. The endpoint issues a 302 redirect to a short-lived presigned URL pointing to the video file — follow the redirect to access the recording. Required: id.
- **List all Vapi customer recordings** (List). Download the customer-side recording for a vapi call by call id. Returns an audio recording file (200 OK) or redirects to a short-lived presigned URL for the recording (302). Required: id.
- **List all Vapi assistant recordings** (List). Download the assistant recording for a vapi call. Returns a 302 redirect to a short-lived presigned URL for the audio recording file rather than a structured JSON body. Required: id (call UUID).
- **List all Vapi pcaps** (List). Download the packet capture (pcap) file for a vapi call. Returns a 302 redirect to a short-lived presigned URL for the pcap binary file; no JSON response body is returned. Required: id (Call ID, UUID).
- **List all Vapi call logs** (List). Download call logs for a vapi call by id. Redirects (302) to a short-lived presigned URL for the log file rather than returning a structured JSON body. Required: id.
- **List all Vapi chats** (List). List vapi chats with optional filters. Returns: id, assistantId, sessionId, createdAt, updatedAt, cost, duration. Filter by assistantId, squadId, sessionId, previousChatId, or createdAt/updatedAt date ranges.
- **Create a Vapi chat** (Create). Create a new vapi chat, optionally with SMS delivery via the transport field. Returns: id, assistantId, sessionId, createdAt, updatedAt, cost, duration. At least one of assistantId, assistant, sessionId, or previousChatId must be supplied; sessionId and previousChatId are mutually exclusive and sessionId cannot be combined with transport.
- **Get single Vapi chat by ID** (Get). Get a single vapi chat by id. Returns: id, assistantId, sessionId, createdAt, updatedAt, cost, duration. Required: id.
- **Delete a Vapi chat by ID** (Delete). Delete a vapi chat by id. Returns the deleted chat object including id, assistantId, sessionId, createdAt, updatedAt, cost, duration. Required: id.
- **Create a Vapi chat response** (Create). Create a chat response in vapi using the OpenAI-compatible Responses API. Returns a response object whose shape depends on streaming configuration — either a ResponseObject for non-streaming requests or one of the streaming event types (ResponseTextDeltaEvent, ResponseTextDoneEvent, ResponseCompletedEvent, ResponseErrorEvent) for streaming requests; the exact field-level schema follows the OpenAI Responses API spec.
- **List all Vapi campaigns** (List). List vapi campaigns with optional filters. Returns: id, status, createdAt, updatedAt, duration, cost. Supports filtering by id, status, and createdAt/updatedAt date ranges, and sorting by createdAt, duration, or cost.
- **Create a Vapi campaign** (Create). Create a new vapi campaign. Returns the created campaign including id, status, createdAt, updatedAt, duration, and cost.
- **Get single Vapi campaign by ID** (Get). Get a single vapi campaign by id. Returns: id, status, createdAt, updatedAt, duration, cost. Required: id.
- **Update a Vapi campaign by ID** (Update). Update a vapi campaign by id. Returns the updated campaign including id, status, createdAt, updatedAt, duration, and cost. Required: id.
- **Delete a Vapi campaign by ID** (Delete). Delete a vapi campaign by id. Returns the deleted campaign including id, status, createdAt, updatedAt, duration, and cost. Required: id.
- **List all Vapi sessions** (List). List vapi sessions with optional filters for assistant, squad, workflow, customer details, and date ranges. Returns: id, name, assistantId, squadId, workflowId, createdAt, updatedAt, duration, cost. Supports sorting by createdAt, duration, or cost.
- **Create a Vapi session** (Create). Create a new vapi session. Returns the created session object including id, name, assistantId, squadId, workflowId, createdAt, updatedAt, duration, and cost.
- **Get single Vapi session by ID** (Get). Get a single vapi session by id. Returns: id, name, assistantId, squadId, workflowId, createdAt, updatedAt, duration, cost. Required: id.
- **Update a Vapi session by ID** (Update). Update a vapi session by id. Returns the updated session object including id, name, assistantId, squadId, workflowId, createdAt, updatedAt, duration, and cost. Required: id.
- **Delete a Vapi session by ID** (Delete). Delete a vapi session by id. Returns the deleted session object including id, name, assistantId, squadId, workflowId, createdAt, updatedAt, duration, and cost. Required: id.
- **List all Vapi phone numbers** (List). List all vapi phone numbers across supported telephony providers. Returns: id, provider, name, number, createdAt, updatedAt. Supports optional filtering by createdAt and updatedAt date ranges.
- **Create a Vapi phone number** (Create). Create a new vapi phone number backed by a supported telephony provider. Returns: id, provider, name, number, createdAt, updatedAt. Required: provider.
- **Get single Vapi phone number by ID** (Get). Get a single vapi phone number by id. Returns: id, provider, name, number, createdAt, updatedAt. Required: id.
- **Update a Vapi phone number by ID** (Update). Update a vapi phone number by id. Returns: id, provider, name, number, createdAt, updatedAt. Required: id.
- **Delete a Vapi phone number by ID** (Delete). Delete a vapi phone number by id. Returns the deleted phone number object including id, provider, name, number, createdAt, updatedAt. Required: id.
- **List all Vapi tools** (List). List all vapi tools. Returns: id, type, createdAt, updatedAt per item. Supports date range filters on createdAt and updatedAt via eight optional filter parameters.
- **Create a Vapi tool** (Create). Create a new vapi tool. Returns: id, type, createdAt, updatedAt. Required: type (discriminator that selects the tool variant and its associated fields, e.g. apiRequest, function, transferCall, sms, mcp, and others).
- **Get single Vapi tool by ID** (Get). Get a single vapi tool by id. Returns: id, type, createdAt, updatedAt. Required: id.
- **Update a Vapi tool by ID** (Update). Update a vapi tool by id using a partial payload. Returns: id, type, createdAt, updatedAt. Required: id, type.
- **Delete a Vapi tool by ID** (Delete). Delete a vapi tool by id. Returns the deleted tool object including id, type, createdAt, updatedAt. Required: id.
- **List all Vapi files** (List). List files in vapi filtered by purpose. Returns: id, purpose. Required: purpose.
- **Create a Vapi file** (Create). Upload a new file to vapi. Returns: id, purpose of the created file.
- **Get single Vapi file by ID** (Get). Get a vapi file by id. Returns: id, purpose. Required: id.
- **Update a Vapi file by ID** (Update). Update a vapi file by id. Returns: id, purpose of the updated file. Required: id.
- **Delete a Vapi file by ID** (Delete). Delete a vapi file by id. Returns: id, purpose of the deleted file on success (200). Required: id.
- **List all Vapi structured outputs** (List). List vapi structured outputs with optional filtering by id, name, and creation or update date ranges. Returns: id, name, createdAt, updatedAt, duration, cost. Sortable by createdAt, duration, or cost.
- **Create a Vapi structured output** (Create). Create a new structured output in vapi. Returns: id, name, createdAt, updatedAt, duration, cost.
- **Get single Vapi structured output by ID** (Get). Get a single vapi structured output by id. Returns: id, name, createdAt, updatedAt, duration, cost. Required: id.
- **Update a Vapi structured output by ID** (Update). Update a vapi structured output by id. Returns: id, name, createdAt, updatedAt, duration, cost. Required: id, schemaOverride.
- **Delete a Vapi structured output by ID** (Delete). Delete a vapi structured output by id. Returns the deleted structured output including id, name, createdAt, updatedAt, duration, and cost. Required: id.
- **Create a Vapi structured output run** (Create). Run a structured output job in vapi by submitting a StructuredOutputRunDTO payload. Returns a StructuredOutput object. The request body is required; refer to the vapi API docs for the full StructuredOutputRunDTO schema, as field-level details are not enumerated in the available source.
- **List all Vapi reporting insights** (List). List vapi reporting insights. Returns: id, type, createdAt, updatedAt. Supports filtering by createdAt and updatedAt ranges, and sorting by createdAt, duration, or cost.
- **Create a Vapi reporting insight** (Create). Create a new vapi reporting insight of type bar, pie, line, or text. Returns: id, type, createdAt, updatedAt. Required: type.
- **Get single Vapi reporting insight by ID** (Get). Get a single vapi reporting insight by id. Returns: id, type, createdAt, updatedAt. Required: id.
- **Update a Vapi reporting insight by ID** (Update). Update a vapi reporting insight by id. Returns: id, type, createdAt, updatedAt. Required: id.
- **Delete a Vapi reporting insight by ID** (Delete). Delete a vapi reporting insight by id. Returns the deleted insight including id, type, createdAt, updatedAt. Required: id.
- **Create a Vapi run** (Create). Run a vapi insight by id to trigger its report execution. Returns the insight run result. Required: id.
- **Create a Vapi insight preview** (Create). Preview a vapi reporting insight by posting a chart configuration built from call table data. Accepts a discriminated union keyed on type — one of bar, pie, line, or text — each mapping to its own DTO shape. Returns: id and type-specific result attributes. Required: type.
- **List all Vapi evals** (List). List vapi Evals with optional filtering and sorting. Returns a paginated collection of eval records; each record includes id, createdAt, updatedAt, duration, and cost. Filter by id or createdAt/updatedAt date ranges; sort by createdAt, duration, or cost.
- **Create a Vapi eval** (Create). Create a new Eval in vapi. Returns the created eval object including id, createdAt, updatedAt, duration, and cost.
- **Get single Vapi eval by ID** (Get). Get a single vapi Eval by id. Returns: id, createdAt, updatedAt, duration, cost. Required: id.
- **Update a Vapi eval by ID** (Update). Update a vapi Eval by id. Returns the updated eval object including id, createdAt, updatedAt, duration, and cost. Required: id.
- **Delete a Vapi eval by ID** (Delete). Delete a vapi Eval by id. Returns the deleted eval object including id, createdAt, updatedAt, duration, and cost. Required: id.
- **Get single Vapi eval run by ID** (Get). Get a single vapi eval run by id. Returns the eval run object including id, createdAt, updatedAt, duration, and cost. Required: id.
- **Delete a Vapi eval run by ID** (Delete). Delete a vapi eval run by id. Returns the deleted eval run object including id, createdAt, updatedAt, duration, and cost. Required: id.
- **List all Vapi eval runs** (List). List vapi eval runs with optional filtering and sorting. Returns a collection of eval run objects, each including id, createdAt, updatedAt, duration, and cost. Supports filtering by createdAt and updatedAt date ranges and sorting by createdAt, duration, or cost.
- **Create a Vapi eval run** (Create). Create a new vapi eval run. Returns the created eval run object including id, createdAt, updatedAt, duration, and cost.
- **Get single Vapi observability scorecard by ID** (Get). Get a single vapi observability scorecard by id. Returns: id, createdAt, updatedAt, duration, cost. Required: id.
- **Update a Vapi observability scorecard by ID** (Update). Update a vapi observability scorecard by id. Returns the updated scorecard including id, createdAt, updatedAt, duration, and cost. Required: id.
- **Delete a Vapi observability scorecard by ID** (Delete). Delete a vapi observability scorecard by id. Returns the deleted scorecard including id, createdAt, updatedAt, duration, and cost. Required: id.
- **List all Vapi observability scorecards** (List). List vapi observability scorecards with optional filtering by id and date ranges, and sorting by createdAt, duration, or cost. Returns: id, createdAt, updatedAt, duration, cost.
- **Create a Vapi observability scorecard** (Create). Create a new vapi observability scorecard. Returns the created scorecard including id, createdAt, updatedAt, duration, and cost.
- **List all Vapi providers** (List). List vapi provider resources for a specified provider and resource type. Returns: id and provider-specific attributes. Required: provider, resource_name. Supports filtering by createdAt/updatedAt date ranges and sorting by createdAt, duration, or cost.
- **Create a Vapi provider** (Create). Create a new vapi provider resource for the specified provider and resource type. The request body shape is provider-specific. Returns: id and provider-specific attributes. Required: provider, resource_name.
- **Get single Vapi provider by ID** (Get). Get a single vapi provider resource by id. Returns: id and provider-specific attributes. Required: provider, resource_name, id.
- **Update a Vapi provider by ID** (Update). Update a vapi provider resource by id. The request body shape is provider-specific. Returns: id and provider-specific attributes. Required: provider, resource_name, id.
- **Delete a Vapi provider by ID** (Delete). Delete a vapi provider resource by id. Returns the deleted resource including its id and provider-specific attributes. Required: provider, resource_name, id.
- **Create a Vapi analytics** (Create). Create analytics queries in vapi to retrieve aggregated call and usage metrics. Returns an array of query result objects, each containing id and result. Required: queries (array of query objects each specifying table, name, and operations).
- **List all Vapi phone numbers v 2** (List). List phone numbers configured in vapi. Returns: id.
