The Vapi MCP connector routes your AI agent's tool calls to Vapi's own MCP server through Scalekit. Each user connects their own Vapi access token once, and Scalekit sends it with every call, so your agent never handles credentials. It comes with 13 tools.
- Tools
- 13
- What they doRead · write · destructive
- 8 · 5 · 08 read5 write0 destructive
- Users sign in with
- Access token
What you can do
- Manage voice assistants: create, update, and review voice AI assistants and their model and voice settings
- Place outbound calls: start or schedule calls with a chosen assistant and phone number
- Review calls: list calls and fetch a call’s status, duration, and other details
- Manage assistant tools: create, update, and list tools that extend what assistants can do on calls
- Look up phone numbers: list the account’s phone numbers and fetch details for a specific one
Setup
Install the SDK
Terminal window npm install @scalekit-sdk/node dotenvTerminal window pip install scalekit-sdk-python python-dotenvSet your credentials
Add your Scalekit credentials to your
.envfile. Find values in app.scalekit.com > Developers > API Credentials..env SCALEKIT_ENVIRONMENT_URL=<your-environment-url>SCALEKIT_CLIENT_ID=<your-client-id>SCALEKIT_CLIENT_SECRET=<your-client-secret>Create the Vapi MCP connection
In AgentKit > Connections, create a Vapi MCP connection. The name you give it is the
connection_nameyour code passes. See Configure connections.Console steps with screenshots
Register your Vapi API key with Scalekit so it can authenticate and proxy requests to the Vapi MCP server on behalf of your users. Vapi MCP uses bearer token authentication. Scalekit sends the key as
Authorization: Bearer <token>to the Vapi MCP endpoint athttps://mcp.vapi.ai/mcp.-
Get a Vapi API key
-
Go to dashboard.vapi.ai/org/api-keys and sign in or create an account.
-
Under API Keys, copy your Private Key. Use the private key — it authorizes server-side calls to the Vapi API.
-
Treat this key as a secret. Anyone with it can manage your assistants, calls, and phone numbers.
-
-
Create a connection in Scalekit
-
In the Scalekit dashboard, go to AgentKit > Connections. Find Vapi MCP and click Create.
-
Note the Connection name — you use this as
connection_namein your code (for example,vapimcp).
-
-
Add a connected account
Connected accounts link a specific user identifier in your system to a Vapi API key. Add one in the dashboard to test. In production, each user adds their own through the authorization link: they enter their credentials on the page it opens.
In the dashboard, to test
-
Open the connection you created and click the Connected Accounts tab → Add account.
-
Fill in:
- Your User’s ID — a unique identifier for this user in your system (for example,
user_123) - Vapi API key — the private key you copied in step 1
- Your User’s ID — a unique identifier for this user in your system (for example,
-
Click Save.
From your backend, if your app already has the credentials
For example, when users enter them on a settings page in your app:
import { ConnectorStatus } from '@scalekit-sdk/node'const authorizationDetails = {details: {case: 'staticAuth',value: { details: { token: process.env.VAPI_API_KEY } },},};let { connectedAccount } = await scalekit.actions.upsertConnectedAccount({connectionName: 'vapimcp',identifier: 'user_123', // your user's unique IDauthorizationDetails,});// Make sure the account is ACTIVE before the first tool call.if (connectedAccount?.status !== ConnectorStatus.ACTIVE) {({ connectedAccount } = await scalekit.actions.upsertConnectedAccount({connectionName: 'vapimcp',identifier: 'user_123',authorizationDetails,}));}authorization_details = {"static_auth": {"token": os.environ["VAPI_API_KEY"]}}response = scalekit_client.actions.upsert_connected_account(connection_name="vapimcp",identifier="user_123",authorization_details=authorization_details,)# Make sure the account is ACTIVE before the first tool call.if response.connected_account.status != "ACTIVE":response = scalekit_client.actions.upsert_connected_account(connection_name="vapimcp",identifier="user_123",authorization_details=authorization_details,) -
-
Authorize a user and make your first call
quickstart.mts import { ScalekitClient } from '@scalekit-sdk/node'import 'dotenv/config'import { createInterface } from 'node:readline/promises'const scalekit = new ScalekitClient(process.env.SCALEKIT_ENVIRONMENT_URL,process.env.SCALEKIT_CLIENT_ID,process.env.SCALEKIT_CLIENT_SECRET,)const actions = scalekit.actionsconst connector = 'vapimcp'const identifier = 'user_123'// Generate an authorization link for the userconst { link } = await actions.getAuthorizationLink({ connectionName: connector, identifier })console.log('Authorize Vapi MCP:', link)const rl = createInterface({ input: process.stdin, output: process.stdout })await rl.question('Press Enter after authorizing...')rl.close()// Make your first callconst result = await actions.executeTool({connector,identifier,toolName: 'vapimcp_list_assistants',toolInput: { rationale: 'YOUR_RATIONALE' },})console.log(result)Terminal window npx tsx quickstart.mtsquickstart.py import osfrom scalekit import ScalekitClientfrom dotenv import load_dotenvload_dotenv()scalekit_client = ScalekitClient(env_url=os.getenv("SCALEKIT_ENVIRONMENT_URL"),client_id=os.getenv("SCALEKIT_CLIENT_ID"),client_secret=os.getenv("SCALEKIT_CLIENT_SECRET"),)actions = scalekit_client.actionsconnection_name = "vapimcp"identifier = "user_123"# Generate an authorization link for the userlink_response = actions.get_authorization_link(connection_name=connection_name,identifier=identifier,)print("Authorize Vapi MCP:", link_response.link)input("Press Enter after authorizing...")# Make your first callresult = actions.execute_tool(tool_input={"rationale":"YOUR_RATIONALE"},tool_name="vapimcp_list_assistants",connection_name=connection_name,identifier=identifier,)print(result)Terminal window python quickstart.pyEach user opens the link once and enters their Vapi MCP server credentials there. If your app already has a user's credentials, add the account from your backend instead, as the console steps above show. See Authorize a user for the full flow and statuses.
Tools
Pass the exact name toexecute_toolvapimcp_get_assistantRetrieves the full configuration of a specific Vapi assistant by ID, including its LLM, voice, transcription settings, tools, and first message.Read-onlyGet assistant
Retrieves the full configuration of a specific Vapi assistant by ID, including its LLM, voice, transcription settings, tools, and first message.
Inputs
assistantIdstringrequired- ID of the assistant to retrieve
rationalestringrequired- Always provide a brief explanation of why you are calling this tool
vapimcp_get_callRetrieves detailed information about a specific Vapi call by ID, including its status, duration, transcript, recording URL, and associated assistant.Read-onlyGet call
Retrieves detailed information about a specific Vapi call by ID, including its status, duration, transcript, recording URL, and associated assistant.
Inputs
callIdstringrequired- ID of the call to retrieve
rationalestringrequired- Always provide a brief explanation of why you are calling this tool
vapimcp_get_phone_numberRetrieves details of a specific Vapi phone number by ID, including its number, provider, and any assistant or squad configuration attached to it.Read-onlyGet phone number
Retrieves details of a specific Vapi phone number by ID, including its number, provider, and any assistant or squad configuration attached to it.
Inputs
phoneNumberIdstringrequired- ID of the phone number to retrieve
rationalestringrequired- Always provide a brief explanation of why you are calling this tool
vapimcp_get_toolRetrieves the full configuration of a specific Vapi tool by ID, including its type (SMS, transfer call, function, or API request) and associated settings.Read-onlyGet tool
Retrieves the full configuration of a specific Vapi tool by ID, including its type (SMS, transfer call, function, or API request) and associated settings.
Inputs
rationalestringrequired- Always provide a brief explanation of why you are calling this tool
toolIdstringrequired- ID of the Vapi tool to retrieve
vapimcp_list_assistantsLists all Vapi assistants configured in the account.Read-onlyList assistants
Lists all Vapi assistants configured in the account. Returns a list of assistant objects including their IDs, names, configurations, and settings.
Inputs
rationalestringrequired- Always provide a brief explanation of why you are calling this tool
vapimcp_list_callsLists all Vapi calls in the account.Read-onlyList calls
Lists all Vapi calls in the account. Returns call records including their IDs, status, duration, associated assistant, and transcript metadata.
Inputs
rationalestringrequired- Always provide a brief explanation of why you are calling this tool
vapimcp_list_phone_numbersLists all phone numbers provisioned in the Vapi account.Read-onlyList phone numbers
Lists all phone numbers provisioned in the Vapi account. Returns phone number objects including their IDs, numbers, provider, and associated assistant configurations.
Inputs
rationalestringrequired- Always provide a brief explanation of why you are calling this tool
vapimcp_list_toolsLists all Vapi tools configured in the account.Read-onlyList tools
Lists all Vapi tools configured in the account. Vapi tools extend assistant capabilities — types include SMS, transfer call, custom functions, and API request tools.
Inputs
rationalestringrequired- Always provide a brief explanation of why you are calling this tool
vapimcp_create_assistantCreates a new Vapi voice AI assistant with the specified configuration.WriteCreate assistant
Creates a new Vapi voice AI assistant with the specified configuration. Configure the assistant's LLM provider, voice, transcription engine, first message, and any tools it should have access to.
Inputs
namestringrequired- Name of the assistant
rationalestringrequired- Always provide a brief explanation of why you are calling this tool
firstMessagestring- First message the assistant says when a call starts
firstMessageModestring- Whether the assistant speaks first or waits for the user
instructionsstring- System instructions for the assistant. Defaults to 'You are a helpful assistant.'
llmstring- LLM configuration. Defaults to OpenAI gpt-4o.
toolIdsstring- IDs of Vapi tools to attach to this assistant
transcriberstring- Transcription configuration. Defaults to Deepgram nova-3.
voicestring- Voice configuration. Defaults to ElevenLabs 'sarah'.
vapimcp_create_callInitiates or schedules an outbound Vapi call.WriteCreate call
Initiates or schedules an outbound Vapi call. Specify the assistant and phone number to use, the customer's phone number, and optionally a scheduled time. Use assistantOverrides.variableValues to inject dynamic data into the assistant's prompts.
Inputs
rationalestringrequired- Always provide a brief explanation of why you are calling this tool
assistantIdstring- ID of the Vapi assistant to use for the call
assistantOverridesstring- Runtime overrides for the assistant configuration
customerstring- Customer contact information for the outbound call
phoneNumberIdstring- ID of the Vapi phone number to call from
scheduledAtstring- ISO 8601 datetime to schedule the call (e.g. 2025-03-25T22:39:27.771Z). Omit to call immediately.
vapimcp_create_toolCreates a new Vapi tool that can be attached to assistants.WriteCreate tool
Creates a new Vapi tool that can be attached to assistants. Supports four tool types: 'sms' for sending text messages, 'transferCall' for transferring calls to destinations, 'function' for custom server-side functions, and 'apiRequest' for HTTP API integrations.
Inputs
rationalestringrequired- Always provide a brief explanation of why you are calling this tool
typestringrequired- Type of tool to createone of
smstransferCallfunctionapiRequest apiRequeststring- API request tool configuration — provide when type is 'apiRequest'
descriptionstring- Description of what the tool does
functionstring- Function tool configuration — provide when type is 'function'
namestring- Name of the tool
smsstring- SMS configuration — provide when type is 'sms'
transferCallstring- Transfer call configuration — provide when type is 'transferCall'
vapimcp_update_assistantUpdates an existing Vapi assistant's configuration.WriteUpdate assistant
Updates an existing Vapi assistant's configuration. Only fields you provide will be changed; omitted fields retain their current values.
Inputs
assistantIdstringrequired- ID of the assistant to update
rationalestringrequired- Always provide a brief explanation of why you are calling this tool
firstMessagestring- New first message the assistant says when a call starts
firstMessageModestring- New first message mode
instructionsstring- New system instructions for the assistant
llmstring- New LLM configuration
namestring- New name for the assistant
toolIdsstring- New list of Vapi tool IDs for the assistant
transcriberstring- New transcription configuration
voicestring- New voice configuration
vapimcp_update_toolUpdates an existing Vapi tool's configuration.WriteUpdate tool
Updates an existing Vapi tool's configuration. Only fields you provide will be changed. Supports all tool types: sms, transferCall, function, and apiRequest.
Inputs
rationalestringrequired- Always provide a brief explanation of why you are calling this tool
toolIdstringrequired- ID of the Vapi tool to update
apiRequeststring- Updated API request tool configuration
descriptionstring- New description for the tool
functionstring- Updated function tool configuration
namestring- New name for the tool
smsstring- Updated SMS configuration
transferCallstring- Updated transfer call configuration
No tools match.
Workflows
Tool calling
- Use
vapimcp_list_assistantsto discover existing assistants, thenvapimcp_get_assistantto read a specific assistant’s full configuration before changing it. - Use
vapimcp_create_assistantto provision a new voice AI assistant, andvapimcp_update_assistantto change only the fields you pass — omitted fields keep their current values. - Use
vapimcp_list_phone_numbersandvapimcp_get_phone_numberto find the phone number to call from. - Use
vapimcp_create_callto place an outbound call with a chosen assistant and phone number, thenvapimcp_get_callto read its status, duration, and transcript. - Use
vapimcp_create_toolto add SMS, transfer-call, function, or API-request tools, and attach them to an assistant withvapimcp_update_assistant.
const toolResponse = await actions.executeTool({ connector: 'vapimcp', identifier: 'user_123', toolName: 'vapimcp_create_call', toolInput: { assistantId: 'YOUR_ASSISTANT_ID', phoneNumberId: 'YOUR_PHONE_NUMBER_ID', customer: { number: '+15551234567' }, },});console.log('Call started:', toolResponse.data);tool_response = actions.execute_tool( connection_name='vapimcp', identifier='user_123', tool_name='vapimcp_create_call', tool_input={ "assistantId": "YOUR_ASSISTANT_ID", "phoneNumberId": "YOUR_PHONE_NUMBER_ID", "customer": {"number": "+15551234567"}, },)print("Call started:", tool_response)