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
- 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
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 Zapier MCP connection
In AgentKit > Connections, create a Zapier MCP connection. The name you give it is the
connection_nameyour code passes. See Configure connections.Scalekit credentials are available for Zapier MCP server, so you don't need to register an OAuth app.
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 = 'zapiermcp'const identifier = 'user_123'// Generate an authorization link for the userconst { 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 callconst result = await actions.executeTool({connector,identifier,toolName: 'zapiermcp_discover_zapier_actions',toolInput: {},})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 = "zapiermcp"identifier = "user_123"# Generate an authorization link for the userlink_response = actions.get_authorization_link(connection_name=connection_name,identifier=identifier,)print("Authorize Zapier MCP:", link_response.link)input("Press Enter after authorizing...")# Make your first callresult = actions.execute_tool(tool_input={},tool_name="zapiermcp_discover_zapier_actions",connection_name=connection_name,identifier=identifier,)print(result)Terminal window python quickstart.pyEach user signs in once. See Authorize a user for the full flow and statuses.
Tools
Pass the exact name toexecute_toolzapiermcp_discover_zapier_actionsSearch 8,000+ Zapier apps to find actions you can enable.Read-onlyDiscover 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-onlyExecute 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-onlyGet 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-onlyGet 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-onlyInspect 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-onlyList 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-onlyList 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.WriteAuto Provision Mcp
Automatically set up this MCP server based on the user's existing connected accounts in Zapier.
Inputs
This tool takes no inputs.
zapiermcp_create_zapier_skillSave a workflow as a reusable Zapier Skill.WriteCreate Zapier Skill
Save a workflow as a reusable Zapier Skill. A skill is a named, versioned markdown document that defines how to accomplish a task using Zapier actions.
Inputs
descriptionstringrequired- One-sentence description of what this skill does
namestringrequired- Short, unique name for this skill (e.g. 'create jira ticket', 'daily standup'). Names are case-insensitive.
skillDefinitionstringrequired- Full markdown content of the skill. IMPORTANT: Before creating, ask the user about their specific configuration — project keys, channel names, default assignees, recurring parameters — so those get baked in as fixed values. Reference each MCP tool the skill uses with a ```mcp-tool\n<tool_name>\n``` code fence. Include step-by-step instructions and any fixed parameter values.
zapiermcp_delete_zapier_skillPermanently delete a Zapier Skill by name.WriteDelete Zapier Skill
Permanently delete a Zapier Skill by name.
Inputs
namestringrequired- The exact name of the skill to delete
zapiermcp_disable_zapier_actionRemove an app's actions from this MCP server.WriteDisable Zapier Action
Remove an app's actions from this MCP server. Use list_enabled_zapier_actions to see which apps are currently enabled.
Inputs
appstringrequired- App name to remove (e.g., 'gmail', 'jira', 'slack'). Accepts short names or full IDs. Use list_enabled_zapier_actions to see enabled apps.
actionstring- Specific action key to remove. If omitted, all actions for the app are removed.
zapiermcp_enable_zapier_actionEnable an app's actions on this MCP server.WriteEnable Zapier Action
Enable an app's actions on this MCP server. Use discover_zapier_actions to find the app name first.
Inputs
appstringrequired- App name or identifier (e.g., 'gmail', 'jira', 'slack'). Accepts short names or full IDs from discover_zapier_actions.
actionstring- Specific action key to enable. If omitted or '*', all actions for the app are enabled.
zapiermcp_execute_zapier_write_actionExecute a write or create action in a connected app.WriteExecute Zapier Write Action
Execute a write or create action in 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_manage_zapier_connectionsManage an app's Zapier connections.WriteManage Zapier Connections
Manage an app's Zapier connections. Returns a URL the user can open to connect a new account, and optionally sets the app's default connection. An app requires a default connection before any of its actions can run. `selected_api` must come verbatim from discover_zapier_actions or inspect_zapier_actions - never guess or construct it (e.g. Gmail is `GoogleMailV2CLIAPI`, not `GmailCLIAPI`). To set the default account every action for this app should use, pass `default_connection_id` (look it up with list_zapier_connections).
Inputs
selected_apistringrequired- The exact selectedApi ID of the app (e.g. 'SlackCLIAPI'). Must come verbatim from discover_zapier_actions (or inspect_zapier_actions) - do not guess or construct it (e.g. Gmail is 'GoogleMailV2CLIAPI', not 'GmailCLIAPI').
app_display_namestring- Optional human-readable app name (from discover_zapier_actions) used to make the response easier to read.
default_connection_idstring- Optional. Set this connection as the app's default so every action for the app runs against it without passing `connection_id` each time. Look up the id with list_zapier_connections. Omit to only get a URL for connecting a new account.
zapiermcp_send_feedbackSend feedback about your Zapier MCP experience to the Zapier team.WriteSend Feedback
Send feedback about your Zapier MCP experience to the Zapier team.
Inputs
feedbackstringrequired- Feedback message to send to the Zapier MCP team
feedback_positivebooleanrequired- Whether this is positive feedback (true) or negative (false)
zapiermcp_update_zapier_skillUpdate an existing Zapier Skill's description or content by name.WriteUpdate Zapier Skill
Update an existing Zapier Skill's description or content by name.
Inputs
namestringrequired- The exact name of the skill to update
descriptionstring- Updated one-sentence description (optional)
skillDefinitionstring- Updated full markdown content (optional)
zapiermcp_write_code_actionCreate or update a custom code action for an app.WriteWrite Code Action
Create or update a custom code action for an app. Use this when inspect_zapier_actions does not have the action you need and the app's service API should support it. The code is generated from your requirements and executes in a secure sandbox with authenticated API access. Never include API keys, tokens, passwords, or other credentials in the requirements - code actions authenticate automatically through Zapier's connected accounts. If a code action with the same name already exists, it will be regenerated with the new requirements. After creation, the action is immediately available as a tool.
Inputs
code_action_namestringrequired- A short, descriptive name for the code action (e.g. 'list_channel_users', 'close_stale_issues'). Used as the tool name suffix.
requirementsstringrequired- Natural language description of what the code action should do. Never include API keys, tokens, or credentials - authentication is handled automatically via connected accounts. Be specific about the API endpoint, data format, and any filtering/pagination needs.
selected_apistringrequired- The app's API identifier from discover_zapier_actions (e.g. 'GoogleMailV2CLIAPI', 'JiraSoftwareCloudCLIAPI').
No tools match.
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 accountsconst result = await actions.executeTool({ toolName: 'zapiermcp_auto_provision_mcp', connector: 'zapiermcp', identifier: 'user_123', toolInput: {},});console.log(result.data?.result);result = actions.execute_tool( tool_name="zapiermcp_auto_provision_mcp", connection_name="zapiermcp", identifier="user_123", tool_input={},)print(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 nameconst apps = await actions.executeTool({ toolName: 'zapiermcp_discover_zapier_actions', connector: 'zapiermcp', identifier: 'user_123', toolInput: { app: 'slack' },});
// Enable all actions for the appconst enabled = await actions.executeTool({ toolName: 'zapiermcp_enable_zapier_action', connector: 'zapiermcp', identifier: 'user_123', toolInput: { app: 'slack' },});console.log(enabled.data?.result);# Search for apps by nameapps = actions.execute_tool( tool_name="zapiermcp_discover_zapier_actions", connection_name="zapiermcp", identifier="user_123", tool_input={"app": "slack"},)
# Enable all actions for the appenabled = actions.execute_tool( tool_name="zapiermcp_enable_zapier_action", connection_name="zapiermcp", identifier="user_123", tool_input={"app": "slack"},)print(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 actionsconst actions_list = await actions.executeTool({ toolName: 'zapiermcp_inspect_zapier_actions', connector: 'zapiermcp', identifier: 'user_123', toolInput: {},});
// Execute a read action using natural language instructionsconst 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);# List all enabled actionsactions_list = actions.execute_tool( tool_name="zapiermcp_inspect_zapier_actions", connection_name="zapiermcp", identifier="user_123", tool_input={},)
# Execute a read action using natural language instructionsresult = actions.execute_tool( tool_name="zapiermcp_execute_zapier_read_action", connection_name="zapiermcp", identifier="user_123", tool_input={ "app": "gmail", "action": "find_email", "instructions": "Find the latest email from noreply@example.com", "output": "subject and body of the email", },)print(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);result = actions.execute_tool( tool_name="zapiermcp_execute_zapier_write_action", connection_name="zapiermcp", identifier="user_123", tool_input={ "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", },)print(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 skillawait 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 laterconst skill = await actions.executeTool({ toolName: 'zapiermcp_get_zapier_skill', connector: 'zapiermcp', identifier: 'user_123', toolInput: { name: 'weekly-report' },});console.log(skill.data?.result);# Save a skillactions.execute_tool( tool_name="zapiermcp_create_zapier_skill", connection_name="zapiermcp", identifier="user_123", tool_input={ "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 laterskill = actions.execute_tool( tool_name="zapiermcp_get_zapier_skill", connection_name="zapiermcp", identifier="user_123", tool_input={"name": "weekly-report"},)print(skill.data["result"])