Skip to content
Scalekit Docs
Talk to an Engineer Dashboard

Connect AI agents to the Vapi MCP server

Vendor MCP
Open markdown

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

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

  1. Install the SDK

    Terminal window
    npm install @scalekit-sdk/node dotenv
  2. Set your credentials

    Add your Scalekit credentials to your .env file. 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>
  3. Create the Vapi MCP connection

    In AgentKit > Connections, create a Vapi MCP connection. The name you give it is the connection_name your 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 at https://mcp.vapi.ai/mcp.

    1. 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.

    2. 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_name in your code (for example, vapimcp).

    3. 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
      • 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 ID
      authorizationDetails,
      });
      // 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,
      }));
      }
  4. 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.actions
    const connector = 'vapimcp'
    const identifier = 'user_123'
    // Generate an authorization link for the user
    const { 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 call
    const result = await actions.executeTool({
    connector,
    identifier,
    toolName: 'vapimcp_list_assistants',
    toolInput: { rationale: 'YOUR_RATIONALE' },
    })
    console.log(result)
    Terminal window
    npx tsx quickstart.mts

    Each 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 to execute_tool
Try in PlaygroundRequest a tool
  • vapimcp_get_assistantRetrieves the full configuration of a specific Vapi assistant by ID, including its LLM, voice, transcription settings, tools, and first message.Read-only

    Get 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-only

    Get 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-only

    Get 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-only

    Get 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-only

    List 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-only

    List 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-only

    List 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-only

    List 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

Workflows

Tool calling
  • Use vapimcp_list_assistants to discover existing assistants, then vapimcp_get_assistant to read a specific assistant’s full configuration before changing it.
  • Use vapimcp_create_assistant to provision a new voice AI assistant, and vapimcp_update_assistant to change only the fields you pass — omitted fields keep their current values.
  • Use vapimcp_list_phone_numbers and vapimcp_get_phone_number to find the phone number to call from.
  • Use vapimcp_create_call to place an outbound call with a chosen assistant and phone number, then vapimcp_get_call to read its status, duration, and transcript.
  • Use vapimcp_create_tool to add SMS, transfer-call, function, or API-request tools, and attach them to an assistant with vapimcp_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);