Skip to content
Scalekit Docs
Talk to an Engineer Dashboard

Connect AI agents to the Zapier MCP server

Vendor MCP
Open markdown

The Zapier MCP connector routes your AI agent's tool calls to Zapier's own MCP server through Scalekit. Each user signs in to Zapier once, and Scalekit stores and refreshes their tokens, so your agent never handles credentials. It comes with 17 tools.

Tools
17
What they doRead · write · destructive
7 · 10 · 07 read10 write0 destructive
Users sign in with
OAuth app
Scalekit's or your own

What you can do

  • Execute actions across 8,000+ apps: run read (search/retrieve) and write (create/modify) actions in any app connected to Zapier
  • Discover and enable app actions: search Zapier’s catalog for any app, enable its actions on this MCP server, and disable them when no longer needed
  • Auto-provision from existing connections: automatically set up the MCP server based on the user’s already-connected Zapier accounts
  • Manage Zapier Skills: create, retrieve, update, and delete named reusable workflow documents that define how to accomplish multi-step tasks
  • List enabled actions: inspect which apps and action keys are currently active so the agent always uses correct, up-to-date identifiers
  • Get configuration URL: surface the Zapier MCP configuration page so users can add, edit, or remove connected apps and actions

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 Zapier MCP connection

    In AgentKit > Connections, create a Zapier MCP connection. The name you give it is the connection_name your code passes. See Configure connections.

    Scalekit credentials are available for Zapier MCP server, so you don't need to register an OAuth app.

  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 = 'zapiermcp'
    const identifier = 'user_123'
    // Generate an authorization link for the user
    const { link } = await actions.getAuthorizationLink({ connectionName: connector, identifier })
    console.log('Authorize Zapier 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: 'zapiermcp_discover_zapier_actions',
    toolInput: {},
    })
    console.log(result)
    Terminal window
    npx tsx quickstart.mts

    Each user signs in once. See Authorize a user for the full flow and statuses.

Tools

Pass the exact name to execute_tool
Try in PlaygroundRequest a tool
  • zapiermcp_discover_zapier_actionsSearch 8,000+ Zapier apps to find actions you can enable.Read-only

    Discover Zapier Actions

    Search 8,000+ Zapier apps to find actions you can enable. Returns app IDs and action keys to use with enable_zapier_action.

    Inputs

    appstring
    Search for apps by name. Omit to see popular apps. Search 8,000+ available apps.
  • zapiermcp_execute_zapier_read_actionExecute a search or read action to retrieve data from a connected app.Read-only

    Execute Zapier Read Action

    Execute a search or read action to retrieve data from a connected app. Call list_enabled_zapier_actions first to get the app name and action key.

    Inputs

    actionstringrequired
    Action key to execute. Use list_enabled_zapier_actions to get exact keys.
    appstringrequired
    App identifier. Use list_enabled_zapier_actions to see available apps.
    instructionsstringrequired
    Natural language instructions for the action
    outputstringrequired
    Natural language description of what data you want from the results. Example: 'just the title and created date' or 'only items with status active'. A filter will be automatically generated to extract this data.
    paramsobject
    Optional direct parameter values to pass to the action
  • zapiermcp_get_configuration_urlGet the URL where users can configure this MCP server — adding, editing, or removing actions and connecting accounts.Read-only

    Get Configuration Url

    Get the URL where users can configure this MCP server — adding, editing, or removing actions and connecting accounts.

    Inputs

    This tool takes no inputs.

  • zapiermcp_get_zapier_skillFetch the full markdown content of a Zapier Skill by name.Read-only

    Get Zapier Skill

    Fetch the full markdown content of a Zapier Skill by name. Call this before executing a skill.

    Inputs

    namestringrequired
    The exact name of the skill to retrieve
  • zapiermcp_inspect_zapier_actionsInspects all enabled apps and their actions with everything needed to build an execute call: the exact `app`, `action`, and `tool_name` identifiers plus parameter schema.Read-only

    Inspect Zapier Actions

    Inspects all enabled apps and their actions with everything needed to build an execute call: the exact `app`, `action`, and `tool_name` identifiers plus parameter schema. Call this before any execute_zapier_read_action or execute_zapier_write_action call. Use `tool_name` for exact action details. For a parameter flagged `is_dynamic_enum: true`, call this tool again with `tool_name`, `enum_property`, and any parent values in `params` to resolve values. For actions with `dynamic_properties_depends_on`, settle those parameters first, then call this tool again with `tool_name` and `params` to get `dynamic_properties_schema`.

    Inputs

    actionstring
    Filter by action key. Omit to list all actions.
    connection_idstring
    Optional. The connected account to run this action against. Apps can have multiple connected accounts; by default the action runs against the app's default connection. Set it only when the user's request implies or names a specific account, or asks to switch accounts. Look up the id with list_zapier_connections.
    enum_cursorstring
    Pagination cursor from a previous dynamic enum response. Use with `enum_property`.
    enum_propertystring
    The dynamic enum property to resolve or search. Required to get `dynamic_enum_values`; omit when you only need the action's parameter schema.
    enum_searchstring
    Optional search text for `enum_property` when its dynamic enum has many values.
    paramsobject
    Partial argument values for the action. Pass parent values here to resolve dynamic enum values and the `dynamic_properties` schema inline before executing.
    selected_apistring
    Filter by selectedApi (e.g., 'GoogleMailV2CLIAPI'). Use the `selected_api` from a previous list call or from discover_zapier_actions. Omit to list all apps.
    tool_namestring
    Filter by the `tool_name` returned for an action. Preferred when resolving an exact action schema because it is collision-safe.
  • zapiermcp_list_zapier_connectionsList the Zapier connections (authenticated accounts) available for an app.Read-only

    List Zapier Connections

    List the Zapier connections (authenticated accounts) available for an app. Use the `selected_api` from discover_zapier_actions or inspect_zapier_actions. Returns each connection's `connection_id`, which you can pass to execute_zapier_read_action / execute_zapier_write_action to run with that specific account. By default only the user's own connections are returned; pass `include_shared: true` to also return connections shared with them. Paginated via `cursor`.

    Inputs

    selected_apistringrequired
    The selectedApi ID of the app to list connections for (e.g. 'SlackCLIAPI'). Use the `selected_api` from discover_zapier_actions or inspect_zapier_actions.
    cursorstring
    Pagination cursor from a previous response's `next_cursor`. Omit to fetch the first page.
    include_sharedboolean
    Include connections shared with the user by others. By default only the user's own connections are returned. Only show the user their shared connections if they explicitly ask for it.
    limitnumber
    Maximum number of connections to return per page (1-100). Defaults to 20.
  • zapiermcp_list_zapier_skillsList all saved Zapier Skills with their names and descriptions.Read-only

    List Zapier Skills

    List all saved Zapier Skills with their names and descriptions.

    Inputs

    This tool takes no inputs.

  • zapiermcp_auto_provision_mcpAutomatically set up this MCP server based on the user's existing connected accounts in Zapier.Write

    Auto Provision Mcp

    Automatically set up this MCP server based on the user's existing connected accounts in Zapier.

    Inputs

    This tool takes no inputs.

Workflows

Auto-provision from existing Zapier connections

The fastest way to get started is to auto-provision the MCP server based on apps the user has already connected in Zapier.

// Auto-provisions actions based on the user's existing Zapier accounts
const result = await actions.executeTool({
toolName: 'zapiermcp_auto_provision_mcp',
connector: 'zapiermcp',
identifier: 'user_123',
toolInput: {},
});
console.log(result.data?.result);

After provisioning, call zapiermcp_inspect_zapier_actions to see which apps and action keys are now active.

Discover and enable an app

Search Zapier’s catalog for an app, then enable its actions on the MCP server so the agent can use them.

// Search for apps by name
const apps = await actions.executeTool({
toolName: 'zapiermcp_discover_zapier_actions',
connector: 'zapiermcp',
identifier: 'user_123',
toolInput: { app: 'slack' },
});
// Enable all actions for the app
const enabled = await actions.executeTool({
toolName: 'zapiermcp_enable_zapier_action',
connector: 'zapiermcp',
identifier: 'user_123',
toolInput: { app: 'slack' },
});
console.log(enabled.data?.result);

Pass a specific action key alongside app to enable only one action instead of all.

List enabled actions and execute a read action

Always inspect enabled actions first to get the exact app and action keys before calling execute tools.

// List all enabled actions
const actions_list = await actions.executeTool({
toolName: 'zapiermcp_inspect_zapier_actions',
connector: 'zapiermcp',
identifier: 'user_123',
toolInput: {},
});
// Execute a read action using natural language instructions
const result = await actions.executeTool({
toolName: 'zapiermcp_execute_zapier_read_action',
connector: 'zapiermcp',
identifier: 'user_123',
toolInput: {
app: 'gmail',
action: 'find_email',
instructions: 'Find the latest email from noreply@example.com',
output: 'subject and body of the email',
},
});
console.log(result.data?.result);
Execute a write action

Use zapiermcp_execute_zapier_write_action to create or modify data in a connected app. The instructions and output fields accept natural language.

const result = await actions.executeTool({
toolName: 'zapiermcp_execute_zapier_write_action',
connector: 'zapiermcp',
identifier: 'user_123',
toolInput: {
app: 'slack',
action: 'send_channel_message',
instructions: 'Send a message to #general saying the weekly report is ready',
output: 'confirmation that the message was sent',
},
});
console.log(result.data?.result);
Create and reuse a Zapier Skill

Skills are named, versioned markdown documents that define how to accomplish a multi-step task. Save a workflow once and execute it by name in future calls.

// Save a skill
await actions.executeTool({
toolName: 'zapiermcp_create_zapier_skill',
connector: 'zapiermcp',
identifier: 'user_123',
toolInput: {
name: 'weekly-report',
description: 'Sends the weekly summary to Slack and logs it in Google Sheets',
skillDefinition: '1. Execute slack/send_channel_message to #reports\n2. Execute google-sheets/create_spreadsheet_row',
},
});
// Retrieve and execute the skill later
const skill = await actions.executeTool({
toolName: 'zapiermcp_get_zapier_skill',
connector: 'zapiermcp',
identifier: 'user_123',
toolInput: { name: 'weekly-report' },
});
console.log(skill.data?.result);