Vapi MCP for Cursor
This project implements a Model Context Protocol (MCP) server for integrating Vapi's voice AI capabilities with Cursor.
Setup Instructions
1. Project Structure
The Vapi MCP server is structured as follows:
vapi-mcp-server/
- Main server code
src/
- TypeScript source files
dist/
- Compiled JavaScript output
.env
- Environment variables for API keys
2. Environment Configuration
Create a .env
file in the vapi-mcp-server
directory with the following variables:
# Vapi API Keys
VAPI_ORG_ID=your-org-id
VAPI_PRIVATE_KEY=your-private-key
VAPI_KNOWLEDGE_ID=your-knowledge-id
VAPI_JWT_PRIVATE=your-jwt-private
# Environment
NODE_ENV=development
3. Building the Server
To build the server:
cd vapi-mcp/vapi-mcp-server
npm install
npm run build
4. Configuration in Cursor
Important: Avoiding "Client Closed" Errors
When configuring the Vapi MCP server in Cursor's MCP settings, pay attention to the following crucial details:
Working Directory : The cwd
parameter is required to ensure the server runs in the correct directory and can access the .env
file properly.
Environment Variables : Must be explicitly provided in the configuration, even if they exist in the .env
file.
Module Type : The server uses ES modules, so the package.json
must include "type": "module"
.
Here's the correct configuration for .cursor/mcp.json
:
"Vapi Voice AI Tools": {
"command": "node",
"type": "stdio",
"args": [
"/Users/matthewcage/Documents/AA-GitHub/MCP/vapi-mcp/vapi-mcp-server/dist/index.js"
],
"cwd": "/Users/matthewcage/Documents/AA-GitHub/MCP/vapi-mcp/vapi-mcp-server",
"env": {
"VAPI_ORG_ID": "your-org-id",
"VAPI_PRIVATE_KEY": "your-private-key",
"VAPI_KNOWLEDGE_ID": "your-knowledge-id",
"VAPI_JWT_PRIVATE": "your-jwt-private",
"NODE_ENV": "development"
}
}
Troubleshooting
"Client Closed" Error in Cursor
If you see "Client Closed" in the Cursor MCP Tools panel:
Check Working Directory : Ensure the cwd
parameter is set correctly in your mcp.json
Verify Environment Variables : Make sure all required environment variables are passed in the configuration
Check Module Type : Ensure package.json
has "type": "module"
Inspect Permissions : Make sure the dist/index.js file is executable (chmod +x dist/index.js
)
Test Server Directly : Run the server manually to check for errors:
cd vapi-mcp/vapi-mcp-server
node --trace-warnings dist/index.js
Module Not Found Errors
If you get "Error: Cannot find module" when running:
- Check Working Directory : Are you running from the correct directory?
- Rebuild : Try rebuilding the project with
npm run build
- Dependencies : Ensure all dependencies are installed with
npm install
Available Tools
The Vapi MCP server provides the following tools:
- vapi_call - Make outbound calls using Vapi's voice AI
- vapi_assistant - Manage voice assistants (create, get, list, update, delete)
- vapi_conversation - Retrieve conversation details from calls
Lessons Learned
- When integrating with Cursor's MCP:
* Always specify the `cwd` parameter to ensure the server runs in the correct directory
* Pass all required environment variables directly in the MCP configuration
* For ES modules, ensure package.json has `"type": "module"` and tsconfig.json uses appropriate module settings
* Test the server directly before configuring in Cursor
The server command path must be absolute and correctly formed in the Cursor MCP config
Using stdio transport type is required for proper integration with Cursor