Search knowledge across your apps and execute real-world actions by connecting Claude with the 9,000 apps on Zapier. Run workflows like sending emails, updating CRMs, scheduling meetings, and more, all within Claude.
Protocol
MCP 2026-07-28
Server version
1.0.0
Supports
Tools
Overall score
B
Overall quality score: 80 out of 10080/100
Server metadata
5 of 8 fields60/1006 / 10 pts
Identity, discovery, and usage metadata advertised during the MCP handshake.
This server connects you to 9,000+ apps via Zapier.
IMPORTANT: Before calling any tool, ensure you have loaded the available tools from this server (tools/list).
If the user seems new or has no tools enabled, retrieve the "zapier:onboarding" skill using get_zapier_skill and follow its instructions.
Use list_zapier_skills to discover other saved workflows.
## Managing what's enabled
- `inspect_zapier_actions({ selected_api?, action?, tool_name?, params? })` — inspect enabled actions and resolve action parameter schemas. **Returns everything you need to build an execute call**: each action's `app` (display name), `selected_api`, `action` key, `action_type` (exact SDK type), `tool_name`, `params`, inline dynamic enum values when resolvable, and `dynamic_properties_schema` when parent values in `params` are sufficient.
- `discover_zapier_actions({ app? })` — search the Zapier app catalog for actions to enable (`app` is a free-text search query).
- `enable_zapier_action({ selected_api, app_display_name?, action? })` — add an action. Pass the `selected_api` returned by `discover_zapier_actions`.
- `disable_zapier_action({ selected_api, app_display_name?, action? })` — remove an action. Pass the `selected_api` from `inspect_zapier_actions`.
## Executing an action
Always call `inspect_zapier_actions` first to retrieve the action's exact `selected_api`, `action` key, `tool_name`, parameter schema, and any dynamic-argument guidance. Then:
1. If a parameter has `dynamic_enum_values`, use one of those `value` fields. If it has `dynamic_enum_missing_dependencies` or no usable value yet, set the dependency params you know and call `inspect_zapier_actions({ tool_name, params })` again. Use `enum_property`, `enum_search`, and `enum_cursor` with the same tool when you need to search or page one dynamic enum.
2. If the action includes `dynamic_properties_depends_on`, settle those parameters' values, then call `inspect_zapier_actions({ tool_name, params })` again. Put keys from
Protocol
Pass100/10020 / 20 pts
Connection, authentication, and protocol compatibility.
How to fix: On each tool, declare annotations.readOnlyHint, annotations.destructiveHint, and annotations.openWorldHint as booleans. The policy review separately assesses whether their values match the tool's actual behavior.
How to fix: For Claude directory submission, declare the applicable annotations.readOnlyHint or annotations.destructiveHint value as a boolean on every tool.
The title clearly communicates the tool’s action and subject. Keep it concise.
Description81/100
Search 9,000+ apps to find actions you can enable. For authenticated services (Google Docs, Gmail, Sheets, Notion, Slack, Outlook, etc.), check here - generic web fetch tools cannot authenticate with these services. ALWAYS call this before saying 'I can't access X' or 'that app isn't available'. Call inspect_zapier_actions first: it lists the apps already enabled, and THEN call this tool to discover and enable any apps and actions that you need but that are not returned by the inspect call. After finding what you need, use enable_zapier_action to add it.
Describe the returned information so the agent knows whether it will answer the request.
Inputs93/100
Input documentation gives an agent enough context to populate the arguments.
app
Search for apps by name. Omit to see popular apps. Search 9,000+ available apps.
Clear enough to supply this argument.
Annotations25/100
Declare destructiveHint, idempotentHint, openWorldHint based on the tool’s actual behavior.
No output schema is declared. Add one for structured results so clients can interpret returned fields.
Not declared
Original tool metadata
{
"name": "discover_zapier_actions",
"description": "Search 9,000+ apps to find actions you can enable. For authenticated services (Google Docs, Gmail, Sheets, Notion, Slack, Outlook, etc.), check here - generic web fetch tools cannot authenticate with these services. ALWAYS call this before saying 'I can't access X' or 'that app isn't available'. Call inspect_zapier_actions first: it lists the apps already enabled, and THEN call this tool to discover and enable any apps and actions that you need but that are not returned by the inspect call. After finding what you need, use enable_zapier_action to add it.",
"inputSchema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"app": {
"type": "string",
"description": "Search for apps by name. Omit to see popular apps. Search 9,000+ available apps."
}
}
},
"annotations": {
"title": "Discover Actions",
"readOnlyHint": true
}
}
Name the specific action and subject instead of using a generic label such as ‘manage’ or ‘tool’.
Description98/100
Enable an app's actions on this MCP server. Use discover_zapier_actions first to get the exact selected_api ID, then pass it here. Always pass app_display_name from the app field returned by discover_zapier_actions so confirmations show a friendly name rather than the raw selected_api ID. Returns action details including the execute tool to use (execute_zapier_read_action or execute_zapier_write_action) and parameters. If authentication is required, also returns a URL to authenticate the app.
The description explains the capability, when to use it, and what to expect.
Inputs97/100
Input documentation gives an agent enough context to populate the arguments.
selected_api
The selectedApi ID to enable (e.g., 'GmailCLIAPI', 'SlackCLIAPI'). Use the selected_api field from discover_zapier_actions.
Clear enough to supply this argument.
app_display_name
Human-readable app name for display purposes (e.g., 'Gmail', 'Slack'). Always populate this from the app field returned by discover_zapier_actions or list_enabled_zapier_actions. Used to render friendly confirmation messages instead of the raw selected_api ID.
Clear enough to supply this argument.
action
Specific action key to enable. If omitted or '*', all actions for the app are enabled.
Clear enough to supply this argument.
Annotations0/100
Declare readOnlyHint, destructiveHint, idempotentHint, openWorldHint based on the tool’s actual behavior.
{
"title": "Enable Action"
}
Output schema0/100
No output schema is declared. Add one for structured results so clients can interpret returned fields.
Not declared
Original tool metadata
{
"name": "enable_zapier_action",
"description": "Enable an app's actions on this MCP server. Use discover_zapier_actions first to get the exact selected_api ID, then pass it here. Always pass app_display_name from the app field returned by discover_zapier_actions so confirmations show a friendly name rather than the raw selected_api ID. Returns action details including the execute tool to use (execute_zapier_read_action or execute_zapier_write_action) and parameters. If authentication is required, also returns a URL to authenticate the app.",
"inputSchema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"selected_api"
],
"properties": {
"action": {
"type": "string",
"description": "Specific action key to enable. If omitted or '*', all actions for the app are enabled."
},
"selected_api": {
"type": "string",
"description": "The selectedApi ID to enable (e.g., 'GmailCLIAPI', 'SlackCLIAPI'). Use the selected_api field from discover_zapier_actions."
},
"app_display_name": {
"type": "string",
"description": "Human-readable app name for display purposes (e.g., 'Gmail', 'Slack'). Always populate this from the app field returned by discover_zapier_actions or list_enabled_zapier_actions. Used to render friendly confirmation messages instead of the raw selected_api ID."
}
}
},
"annotations": {
"title": "Enable Action"
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description84/100
Remove an app's actions from this MCP server. Use inspect_zapier_actions to see which apps are enabled and their selected_api values. Always pass app_display_name (the human-readable app name from inspect_zapier_actions) so confirmations show a friendly name rather than the raw selected_api ID. Optionally specify an action key to remove only that specific action.
Explain mutations, irreversible effects, or prerequisites that matter before calling this tool.
Inputs98/100
Input documentation gives an agent enough context to populate the arguments.
selected_api
The selectedApi ID to disable (e.g., 'GmailCLIAPI', 'JiraSoftwareCloudCLIAPI'). Use the selected_api field from list_enabled_zapier_actions.
Clear enough to supply this argument.
app_display_name
Human-readable app name for display purposes (e.g., 'Gmail', 'Zendesk'). Always populate this from the app field returned by list_enabled_zapier_actions. Used to render friendly confirmation messages instead of the raw selected_api ID.
Clear enough to supply this argument.
action
Specific action key to remove. If omitted, all actions for the app are removed.
Clear enough to supply this argument.
Annotations0/100
Declare readOnlyHint, destructiveHint, idempotentHint, openWorldHint based on the tool’s actual behavior.
{
"title": "Disable Action"
}
Output schema0/100
No output schema is declared. Add one for structured results so clients can interpret returned fields.
Not declared
Original tool metadata
{
"name": "disable_zapier_action",
"description": "Remove an app's actions from this MCP server. Use inspect_zapier_actions to see which apps are enabled and their selected_api values. Always pass app_display_name (the human-readable app name from inspect_zapier_actions) so confirmations show a friendly name rather than the raw selected_api ID. Optionally specify an action key to remove only that specific action.",
"inputSchema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"selected_api"
],
"properties": {
"action": {
"type": "string",
"description": "Specific action key to remove. If omitted, all actions for the app are removed."
},
"selected_api": {
"type": "string",
"description": "The selectedApi ID to disable (e.g., 'GmailCLIAPI', 'JiraSoftwareCloudCLIAPI'). Use the selected_api field from list_enabled_zapier_actions."
},
"app_display_name": {
"type": "string",
"description": "Human-readable app name for display purposes (e.g., 'Gmail', 'Zendesk'). Always populate this from the app field returned by list_enabled_zapier_actions. Used to render friendly confirmation messages instead of the raw selected_api ID."
}
}
},
"annotations": {
"title": "Disable Action"
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description95/100
Call `inspect_zapier_actions` first when you create a workflow or automation, before configuring a trigger or action for Gmail, Google Sheets, Google Drive, Slack, or any other app the user has connected, and before any execute_zapier_read_action or execute_zapier_write_action call. Call `inspect_zapier_actions` with no arguments first to list every enabled app with its exact `selected_api`; then call it again with one `selected_api` from that listing for the app's actions (`action`, `action_type`, `tool_name`), including the read action that samples a trigger, then with `tool_name` for one action's parameter schema. These apps handle OAuth automatically — use them instead of generic URL fetching for authenticated services. For a parameter flagged `is_dynamic_enum: true`, call `inspect_zapier_actions` 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`. To learn what an action returns, call `inspect_zapier_actions` with its `tool_name`, the same `params`, and `include_output_schema: true`; `output_schema` is the declared shape of the records, nested to match them. For a trigger, type the workflow's trigger input from it when a sample read returns no records. Sampled records win where they disagree, and declared types are advisory: a field declared as a string can arrive as a list. If the unfiltered listing has no entry for the app you need, you MUST call discover_zapier_actions next — NEVER say 'I can't do that' without checking discover_zapier_actions first. When you resolve a value from the user's request, matching a single record is not proof it is the one they meant: if their input is partial or ambiguous (e.g. a first name, or a search with several close matches), enumerate the candidates and let the user pick before passing a value to an execute call. Each app's `connections.default` names the account its actions run against. If that account doesn't fit the apparent context of the request (e.g. a personal address on a work task), flag it to the user before executing and note the account can be switched per action by passing a different `connection_id` (list the options with list_zapier_connections, or connect the right account via manage_zapier_connections) — do this even when only one account is connected.
The description explains the capability, when to use it, and what to expect.
Inputs97/100
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
selected_api
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.
Clear enough to supply this argument.
action
Filter by action key. Omit to list all actions.
Clear enough to supply this argument.
tool_name
Filter by the `tool_name` returned for an action. Preferred when resolving an exact action schema because it is collision-safe.
Clear enough to supply this argument.
enum_property
The dynamic enum property to resolve or search. Required to get `dynamic_enum_values`; omit when you only need the action's parameter schema.
Clear enough to supply this argument.
enum_search
Optional search text for `enum_property` when its dynamic enum has many values.
Clear enough to supply this argument.
enum_cursor
Pagination cursor from a previous dynamic enum response. Use with `enum_property`.
Clear enough to supply this argument.
connection_id
Optional. The connected account to run this action against. Apps can have multiple connected accounts, and by default the action runs against the app's default connection — so you normally do NOT need to set this, and should not ask the user which account to use on every call. Set it only when the user's request implies or names a specific account, or asks to switch accounts: call `list_zapier_connections` for this app, pick the matching `connection_id`, and if more than one plausibly fits, confirm with the user before executing. If the user references an account that isn't connected yet, offer to connect it via manage_zapier_connections instead of refusing. Change the default connection anytime with manage_zapier_connections.
Clear enough to supply this argument.
include_output_schema
Set to true together with `tool_name` to also get `output_schema`: the declared shape of the records the action returns, nested to match them, each field tagged with its Zapier key as `x-zapier-key`. Pass the same `params` you would execute with, since some apps (such as spreadsheet columns) only declare their fields once those are set.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
Annotations25/100
Declare destructiveHint, idempotentHint, openWorldHint based on the tool’s actual behavior.
No output schema is declared. Add one for structured results so clients can interpret returned fields.
Not declared
Original tool metadata
{
"name": "inspect_zapier_actions",
"description": "Call `inspect_zapier_actions` first when you create a workflow or automation, before configuring a trigger or action for Gmail, Google Sheets, Google Drive, Slack, or any other app the user has connected, and before any execute_zapier_read_action or execute_zapier_write_action call. Call `inspect_zapier_actions` with no arguments first to list every enabled app with its exact `selected_api`; then call it again with one `selected_api` from that listing for the app's actions (`action`, `action_type`, `tool_name`), including the read action that samples a trigger, then with `tool_name` for one action's parameter schema. These apps handle OAuth automatically — use them instead of generic URL fetching for authenticated services. For a parameter flagged `is_dynamic_enum: true`, call `inspect_zapier_actions` 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`. To learn what an action returns, call `inspect_zapier_actions` with its `tool_name`, the same `params`, and `include_output_schema: true`; `output_schema` is the declared shape of the records, nested to match them. For a trigger, type the workflow's trigger input from it when a sample read returns no records. Sampled records win where they disagree, and declared types are advisory: a field declared as a string can arrive as a list. If the unfiltered listing has no entry for the app you need, you MUST call discover_zapier_actions next — NEVER say 'I can't do that' without checking discover_zapier_actions first. When you resolve a value from the user's request, matching a single record is not proof it is the one they meant: if their input is partial or ambiguous (e.g. a first name, or a search with several close matches), enumerate the candidates and let the user pick before passing a value to an execute call. Each app's `connections.default` names the account its actions run against. If that account doesn't fit the apparent context of the request (e.g. a personal address on a work task), flag it to the user before executing and note the account can be switched per action by passing a different `connection_id` (list the options with list_zapier_connections, or connect the right account via manage_zapier_connections) — do this even when only one account is connected.",
"inputSchema": {
"type": "object",
"$defs": {
"__schema0": {
"anyOf": [
{
"type": "string"
},
{
"type": "number"
},
{
"type": "boolean"
},
{
"type": "null"
},
{
"type": "array",
"items": {
"$ref": "#/$defs/__schema0"
}
},
{
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {
"$ref": "#/$defs/__schema0"
}
}
]
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"action": {
"type": "string",
"description": "Filter by action key. Omit to list all actions."
},
"params": {
"type": "object",
"description": "Partial argument values for the action. Pass parent values here to resolve dynamic enum values and the `dynamic_properties` schema inline before executing.",
"propertyNames": {
"type": "string"
},
"additionalProperties": {
"$ref": "#/$defs/__schema0"
}
},
"tool_name": {
"type": "string",
"description": "Filter by the `tool_name` returned for an action. Preferred when resolving an exact action schema because it is collision-safe."
},
"enum_cursor": {
"type": "string",
"description": "Pagination cursor from a previous dynamic enum response. Use with `enum_property`."
},
"enum_search": {
"type": "string",
"description": "Optional search text for `enum_property` when its dynamic enum has many values."
},
"selected_api": {
"type": "string",
"description": "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."
},
"connection_id": {
"anyOf": [
{
"type": "integer",
"maximum": 9007199254740991,
"minimum": 1
},
{
"type": "string",
"minLength": 1
}
],
"description": "Optional. The connected account to run this action against. Apps can have multiple connected accounts, and by default the action runs against the app's default connection — so you normally do NOT need to set this, and should not ask the user which account to use on every call. Set it only when the user's request implies or names a specific account, or asks to switch accounts: call `list_zapier_connections` for this app, pick the matching `connection_id`, and if more than one plausibly fits, confirm with the user before executing. If the user references an account that isn't connected yet, offer to connect it via manage_zapier_connections instead of refusing. Change the default connection anytime with manage_zapier_connections."
},
"enum_property": {
"type": "string",
"description": "The dynamic enum property to resolve or search. Required to get `dynamic_enum_values`; omit when you only need the action's parameter schema."
},
"include_output_schema": {
"type": "boolean",
"description": "Set to true together with `tool_name` to also get `output_schema`: the declared shape of the records the action returns, nested to match them, each field tagged with its Zapier key as `x-zapier-key`. Pass the same `params` you would execute with, since some apps (such as spreadsheet columns) only declare their fields once those are set."
}
}
},
"annotations": {
"title": "Inspect Zapier Actions",
"readOnlyHint": true
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description83/100
Execute a search or read action to get data from a connected app. REQUIRED: You MUST call inspect_zapier_actions first to get the exact action key, tool_name, and parameter schema. NEVER guess action names — they are NOT intuitive and WILL fail. If the app isn't enabled, use discover_zapier_actions then enable_zapier_action first. Pass exact argument values in `params`. For dynamic enum parameters, call inspect_zapier_actions again with `tool_name`, `enum_property`, and parent values in `params`. For actions with `dynamic_properties_depends_on`, call inspect_zapier_actions again with `tool_name` and settled parent params to learn `dynamic_properties_schema`. Before executing, be confident that every value in `params` correctly and uniquely identifies what the user asked for — especially fields naming a person, recipient, channel, account, record, or file. If the user gave only partial or ambiguous information (e.g. just a first name, or a term that could match several entities), do NOT assume a lookup that returns a single match is the right one: many lookups return one 'best' match even when others exist. Enumerate the candidates first — prefer a search or list action that can return multiple matches, or widen your query — and when more than one plausibly fits, present the options and let the user choose rather than guessing.
The description explains the capability, when to use it, and what to expect.
Inputs94/100
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
selected_api
The selectedApi ID of the app to execute against (e.g. 'SlackCLIAPI'). Use the `selected_api` from inspect_zapier_actions. Required so the action resolves to a single app when the same action key exists for more than one app.
Clear enough to supply this argument.
action
Action key to execute. Use inspect_zapier_actions to get exact keys.
Clear enough to supply this argument.
tool_name
Collision-safe action identifier from inspect_zapier_actions. Pass it whenever available so actions that share the same key resolve correctly.
Clear enough to supply this argument.
connection_id
Optional. The connected account to run this action against. Apps can have multiple connected accounts, and by default the action runs against the app's default connection — so you normally do NOT need to set this, and should not ask the user which account to use on every call. Set it only when the user's request implies or names a specific account, or asks to switch accounts: call `list_zapier_connections` for this app, pick the matching `connection_id`, and if more than one plausibly fits, confirm with the user before executing. If the user references an account that isn't connected yet, offer to connect it via manage_zapier_connections instead of refusing. Change the default connection anytime with manage_zapier_connections.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
Annotations25/100
Declare destructiveHint, idempotentHint, openWorldHint based on the tool’s actual behavior.
No output schema is declared. Add one for structured results so clients can interpret returned fields.
Not declared
Original tool metadata
{
"name": "execute_zapier_read_action",
"description": "Execute a search or read action to get data from a connected app. REQUIRED: You MUST call inspect_zapier_actions first to get the exact action key, tool_name, and parameter schema. NEVER guess action names — they are NOT intuitive and WILL fail. If the app isn't enabled, use discover_zapier_actions then enable_zapier_action first. Pass exact argument values in `params`. For dynamic enum parameters, call inspect_zapier_actions again with `tool_name`, `enum_property`, and parent values in `params`. For actions with `dynamic_properties_depends_on`, call inspect_zapier_actions again with `tool_name` and settled parent params to learn `dynamic_properties_schema`. Before executing, be confident that every value in `params` correctly and uniquely identifies what the user asked for — especially fields naming a person, recipient, channel, account, record, or file. If the user gave only partial or ambiguous information (e.g. just a first name, or a term that could match several entities), do NOT assume a lookup that returns a single match is the right one: many lookups return one 'best' match even when others exist. Enumerate the candidates first — prefer a search or list action that can return multiple matches, or widen your query — and when more than one plausibly fits, present the options and let the user choose rather than guessing.",
"inputSchema": {
"type": "object",
"$defs": {
"__schema0": {
"anyOf": [
{
"type": "string"
},
{
"type": "number"
},
{
"type": "boolean"
},
{
"type": "null"
},
{
"type": "array",
"items": {
"$ref": "#/$defs/__schema0"
}
},
{
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {
"$ref": "#/$defs/__schema0"
}
}
]
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"selected_api",
"action"
],
"properties": {
"action": {
"type": "string",
"description": "Action key to execute. Use inspect_zapier_actions to get exact keys."
},
"params": {
"type": "object",
"description": "Exact argument values for the action, keyed by parameter name. Use `inspect_zapier_actions` to learn the parameter schema. For a parameter flagged `is_dynamic_enum`, resolve its value first by calling `inspect_zapier_actions` again with `tool_name`, `enum_property`, and any known parent values in `params`. For actions with `dynamic_properties_depends_on`, settle those parameters then call `inspect_zapier_actions` again with `tool_name` and `params` to learn the `dynamic_properties_schema`, then nest the resolved keys under a `dynamic_properties` object inside `params`.",
"propertyNames": {
"type": "string"
},
"additionalProperties": {
"$ref": "#/$defs/__schema0"
}
},
"tool_name": {
"type": "string",
"description": "Collision-safe action identifier from inspect_zapier_actions. Pass it whenever available so actions that share the same key resolve correctly."
},
"selected_api": {
"type": "string",
"description": "The selectedApi ID of the app to execute against (e.g. 'SlackCLIAPI'). Use the `selected_api` from inspect_zapier_actions. Required so the action resolves to a single app when the same action key exists for more than one app."
},
"connection_id": {
"anyOf": [
{
"type": "integer",
"maximum": 9007199254740991,
"minimum": 1
},
{
"type": "string",
"minLength": 1
}
],
"description": "Optional. The connected account to run this action against. Apps can have multiple connected accounts, and by default the action runs against the app's default connection — so you normally do NOT need to set this, and should not ask the user which account to use on every call. Set it only when the user's request implies or names a specific account, or asks to switch accounts: call `list_zapier_connections` for this app, pick the matching `connection_id`, and if more than one plausibly fits, confirm with the user before executing. If the user references an account that isn't connected yet, offer to connect it via manage_zapier_connections instead of refusing. Change the default connection anytime with manage_zapier_connections."
}
}
},
"annotations": {
"title": "Execute Read Action",
"readOnlyHint": true
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description88/100
Execute a write or create action in a connected app. REQUIRED: You MUST call inspect_zapier_actions first to get the exact action key, tool_name, and parameter schema. NEVER guess action names — they are NOT intuitive and WILL fail. If the app isn't enabled, use discover_zapier_actions then enable_zapier_action first. Pass exact argument values in `params`. For dynamic enum parameters, call inspect_zapier_actions again with `tool_name`, `enum_property`, and parent values in `params`. For actions with `dynamic_properties_depends_on`, call inspect_zapier_actions again with `tool_name` and settled parent params to learn `dynamic_properties_schema`. Before executing, be confident that every value in `params` correctly and uniquely identifies what the user asked for — especially fields naming a person, recipient, channel, account, record, or file. If the user gave only partial or ambiguous information (e.g. just a first name, or a term that could match several entities), do NOT assume a lookup that returns a single match is the right one: many lookups return one 'best' match even when others exist. Enumerate the candidates first — prefer a search or list action that can return multiple matches, or widen your query — and when more than one plausibly fits, present the options and let the user choose rather than guessing. Write actions have real, often irreversible side effects (sending messages, creating or modifying records), so confirm the target whenever there is any doubt.
The description explains the capability, when to use it, and what to expect.
Inputs94/100
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
selected_api
The selectedApi ID of the app to execute against (e.g. 'SlackCLIAPI'). Use the `selected_api` from inspect_zapier_actions. Required so the action resolves to a single app when the same action key exists for more than one app.
Clear enough to supply this argument.
action
Action key to execute. Use inspect_zapier_actions to get exact keys.
Clear enough to supply this argument.
tool_name
Collision-safe action identifier from inspect_zapier_actions. Pass it whenever available so actions that share the same key resolve correctly.
Clear enough to supply this argument.
connection_id
Optional. The connected account to run this action against. Apps can have multiple connected accounts, and by default the action runs against the app's default connection — so you normally do NOT need to set this, and should not ask the user which account to use on every call. Set it only when the user's request implies or names a specific account, or asks to switch accounts: call `list_zapier_connections` for this app, pick the matching `connection_id`, and if more than one plausibly fits, confirm with the user before executing. If the user references an account that isn't connected yet, offer to connect it via manage_zapier_connections instead of refusing. Change the default connection anytime with manage_zapier_connections.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
Annotations0/100
Declare readOnlyHint, destructiveHint, idempotentHint, openWorldHint based on the tool’s actual behavior.
{
"title": "Execute Write Action"
}
Output schema0/100
No output schema is declared. Add one for structured results so clients can interpret returned fields.
Not declared
Original tool metadata
{
"name": "execute_zapier_write_action",
"description": "Execute a write or create action in a connected app. REQUIRED: You MUST call inspect_zapier_actions first to get the exact action key, tool_name, and parameter schema. NEVER guess action names — they are NOT intuitive and WILL fail. If the app isn't enabled, use discover_zapier_actions then enable_zapier_action first. Pass exact argument values in `params`. For dynamic enum parameters, call inspect_zapier_actions again with `tool_name`, `enum_property`, and parent values in `params`. For actions with `dynamic_properties_depends_on`, call inspect_zapier_actions again with `tool_name` and settled parent params to learn `dynamic_properties_schema`. Before executing, be confident that every value in `params` correctly and uniquely identifies what the user asked for — especially fields naming a person, recipient, channel, account, record, or file. If the user gave only partial or ambiguous information (e.g. just a first name, or a term that could match several entities), do NOT assume a lookup that returns a single match is the right one: many lookups return one 'best' match even when others exist. Enumerate the candidates first — prefer a search or list action that can return multiple matches, or widen your query — and when more than one plausibly fits, present the options and let the user choose rather than guessing. Write actions have real, often irreversible side effects (sending messages, creating or modifying records), so confirm the target whenever there is any doubt.",
"inputSchema": {
"type": "object",
"$defs": {
"__schema0": {
"anyOf": [
{
"type": "string"
},
{
"type": "number"
},
{
"type": "boolean"
},
{
"type": "null"
},
{
"type": "array",
"items": {
"$ref": "#/$defs/__schema0"
}
},
{
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {
"$ref": "#/$defs/__schema0"
}
}
]
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"selected_api",
"action"
],
"properties": {
"action": {
"type": "string",
"description": "Action key to execute. Use inspect_zapier_actions to get exact keys."
},
"params": {
"type": "object",
"description": "Exact argument values for the action, keyed by parameter name. Use `inspect_zapier_actions` to learn the parameter schema. For a parameter flagged `is_dynamic_enum`, resolve its value first by calling `inspect_zapier_actions` again with `tool_name`, `enum_property`, and any known parent values in `params`. For actions with `dynamic_properties_depends_on`, settle those parameters then call `inspect_zapier_actions` again with `tool_name` and `params` to learn the `dynamic_properties_schema`, then nest the resolved keys under a `dynamic_properties` object inside `params`.",
"propertyNames": {
"type": "string"
},
"additionalProperties": {
"$ref": "#/$defs/__schema0"
}
},
"tool_name": {
"type": "string",
"description": "Collision-safe action identifier from inspect_zapier_actions. Pass it whenever available so actions that share the same key resolve correctly."
},
"selected_api": {
"type": "string",
"description": "The selectedApi ID of the app to execute against (e.g. 'SlackCLIAPI'). Use the `selected_api` from inspect_zapier_actions. Required so the action resolves to a single app when the same action key exists for more than one app."
},
"connection_id": {
"anyOf": [
{
"type": "integer",
"maximum": 9007199254740991,
"minimum": 1
},
{
"type": "string",
"minLength": 1
}
],
"description": "Optional. The connected account to run this action against. Apps can have multiple connected accounts, and by default the action runs against the app's default connection — so you normally do NOT need to set this, and should not ask the user which account to use on every call. Set it only when the user's request implies or names a specific account, or asks to switch accounts: call `list_zapier_connections` for this app, pick the matching `connection_id`, and if more than one plausibly fits, confirm with the user before executing. If the user references an account that isn't connected yet, offer to connect it via manage_zapier_connections instead of refusing. Change the default connection anytime with manage_zapier_connections."
}
}
},
"annotations": {
"title": "Execute Write Action"
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description99/100
List the Zapier connections (authenticated accounts) available for an app. Use the `selected_api` from discover_zapier_actions or the action-listing tool. Returns each connection's `connection_id` field. Pass that value as the `connection_id` argument 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, but only show the user their shared connections if they explicitly ask for it. Paginated via `cursor`.
The description explains the capability, when to use it, and what to expect.
Inputs94/100
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
selected_api
The selectedApi ID of the app to list connections for (e.g. 'SlackCLIAPI'). Use the `selected_api` from discover_zapier_actions or the action-listing tool.
Clear enough to supply this argument.
cursor
Pagination cursor from a previous response's `next_cursor`. Omit to fetch the first page.
Clear enough to supply this argument.
limit
Maximum number of connections to return per page (1-100). Defaults to 20.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
include_shared
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.
Clear enough to supply this argument.
Annotations25/100
Declare destructiveHint, idempotentHint, openWorldHint based on the tool’s actual behavior.
No output schema is declared. Add one for structured results so clients can interpret returned fields.
Not declared
Original tool metadata
{
"name": "list_zapier_connections",
"description": "List the Zapier connections (authenticated accounts) available for an app. Use the `selected_api` from discover_zapier_actions or the action-listing tool. Returns each connection's `connection_id` field. Pass that value as the `connection_id` argument 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, but only show the user their shared connections if they explicitly ask for it. Paginated via `cursor`.",
"inputSchema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"selected_api"
],
"properties": {
"limit": {
"type": "number",
"description": "Maximum number of connections to return per page (1-100). Defaults to 20."
},
"cursor": {
"type": "string",
"description": "Pagination cursor from a previous response's `next_cursor`. Omit to fetch the first page."
},
"selected_api": {
"type": "string",
"description": "The selectedApi ID of the app to list connections for (e.g. 'SlackCLIAPI'). Use the `selected_api` from discover_zapier_actions or the action-listing tool."
},
"include_shared": {
"type": "boolean",
"description": "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."
}
}
},
"annotations": {
"title": "List Zapier Connections",
"readOnlyHint": true
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description97/100
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. If the user has no default connection for the app they want to use, share the returned `auth_url` with them and ask them to tell you once they have added the connection; after they confirm, call list_zapier_connections to find the new connection's `connection_id`, then call this tool again with that value as `default_connection_id` to set it as the default. `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`). If you don't already have it, call discover_zapier_actions first. To set the default account every action for this app should use, pass `default_connection_id` (look it up with list_zapier_connections). Share the returned `auth_url` with the user; after they finish, call list_zapier_connections to see the new connection.
The description explains the capability, when to use it, and what to expect.
Inputs97/100
Input documentation gives an agent enough context to populate the arguments.
selected_api
The exact selectedApi ID of the app (e.g. 'SlackCLIAPI'). Must come verbatim from discover_zapier_actions (or the action-listing tool) — do not guess or construct it (e.g. Gmail is 'GoogleMailV2CLIAPI', not 'GmailCLIAPI').
Clear enough to supply this argument.
app_display_name
Optional human-readable app name (from discover_zapier_actions) used to make the response easier to read.
Clear enough to supply this argument.
default_connection_id
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.
Clear enough to supply this argument.
Annotations0/100
Declare readOnlyHint, destructiveHint, idempotentHint, openWorldHint based on the tool’s actual behavior.
{
"title": "Manage Zapier Connections"
}
Output schema0/100
No output schema is declared. Add one for structured results so clients can interpret returned fields.
Not declared
Original tool metadata
{
"name": "manage_zapier_connections",
"description": "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. If the user has no default connection for the app they want to use, share the returned `auth_url` with them and ask them to tell you once they have added the connection; after they confirm, call list_zapier_connections to find the new connection's `connection_id`, then call this tool again with that value as `default_connection_id` to set it as the default. `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`). If you don't already have it, call discover_zapier_actions first. To set the default account every action for this app should use, pass `default_connection_id` (look it up with list_zapier_connections). Share the returned `auth_url` with the user; after they finish, call list_zapier_connections to see the new connection.",
"inputSchema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"selected_api"
],
"properties": {
"selected_api": {
"type": "string",
"description": "The exact selectedApi ID of the app (e.g. 'SlackCLIAPI'). Must come verbatim from discover_zapier_actions (or the action-listing tool) — do not guess or construct it (e.g. Gmail is 'GoogleMailV2CLIAPI', not 'GmailCLIAPI')."
},
"app_display_name": {
"type": "string",
"description": "Optional human-readable app name (from discover_zapier_actions) used to make the response easier to read."
},
"default_connection_id": {
"anyOf": [
{
"type": "integer",
"maximum": 9007199254740991,
"minimum": 1
},
{
"type": "string",
"minLength": 1
}
],
"description": "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."
}
}
},
"annotations": {
"title": "Manage Zapier Connections"
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description96/100
Automatically set up this MCP server based on the user's existing connected accounts. Finds apps the user has authenticated, enables their actions, and binds authentication — all in one call. Also returns the user's top Zap workflow titles so you can suggest relevant skills. Run this when the user has no tools enabled yet, or when they ask to set up their MCP server quickly.
Explain mutations, irreversible effects, or prerequisites that matter before calling this tool.
Inputs100/100
This tool declares no inputs, so argument descriptions are not needed.
No input fields.
Annotations0/100
Declare readOnlyHint, destructiveHint, idempotentHint, openWorldHint based on the tool’s actual behavior.
{
"title": "Auto-Provision MCP"
}
Output schema0/100
No output schema is declared. Add one for structured results so clients can interpret returned fields.
Not declared
Original tool metadata
{
"name": "auto_provision_mcp",
"description": "Automatically set up this MCP server based on the user's existing connected accounts. Finds apps the user has authenticated, enables their actions, and binds authentication — all in one call. Also returns the user's top Zap workflow titles so you can suggest relevant skills. Run this when the user has no tools enabled yet, or when they ask to set up their MCP server quickly.",
"inputSchema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {}
},
"annotations": {
"title": "Auto-Provision MCP"
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description91/100
Lists the user's saved Zapier Skills with descriptions. Skills are reusable markdown instructions for tasks the user runs through their connected apps — useful when a request resembles a known workflow (e.g. 'onboard me'). The catalog is dynamic and may have changed since a previous call. Pair with get_zapier_skill to load a skill's full content, or create_zapier_skill to save a new workflow.
The description explains the capability, when to use it, and what to expect.
Inputs100/100
This tool declares no inputs, so argument descriptions are not needed.
No input fields.
Annotations75/100
Declare idempotentHint based on the tool’s actual behavior.
No output schema is declared. Add one for structured results so clients can interpret returned fields.
Not declared
Original tool metadata
{
"name": "list_zapier_skills",
"description": "Lists the user's saved Zapier Skills with descriptions. Skills are reusable markdown instructions for tasks the user runs through their connected apps — useful when a request resembles a known workflow (e.g. 'onboard me'). The catalog is dynamic and may have changed since a previous call. Pair with get_zapier_skill to load a skill's full content, or create_zapier_skill to save a new workflow.",
"inputSchema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {}
},
"annotations": {
"title": "List Zapier Skills",
"readOnlyHint": true,
"openWorldHint": false,
"destructiveHint": false
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description98/100
Returns the full markdown definition of a saved Zapier Skill by name, along with any appended execution instructions. Typically paired with list_zapier_skills, which surfaces available skill names. The catalog includes an "zapier:onboarding" skill that walks new users through setting up their Zapier MCP server.
The description explains the capability, when to use it, and what to expect.
Inputs50/100
Clarify units, where to obtain this value, or conventions not already expressed in the schema.
name
The exact name of the skill to retrieve
Clarify units, where to obtain this value, or conventions not already expressed in the schema.
Annotations75/100
Declare idempotentHint based on the tool’s actual behavior.
No output schema is declared. Add one for structured results so clients can interpret returned fields.
Not declared
Original tool metadata
{
"name": "get_zapier_skill",
"description": "Returns the full markdown definition of a saved Zapier Skill by name, along with any appended execution instructions. Typically paired with list_zapier_skills, which surfaces available skill names. The catalog includes an \"zapier:onboarding\" skill that walks new users through setting up their Zapier MCP server.",
"inputSchema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"name"
],
"properties": {
"name": {
"type": "string",
"description": "The exact name of the skill to retrieve"
}
}
},
"annotations": {
"title": "Get Zapier Skill",
"readOnlyHint": true,
"openWorldHint": false,
"destructiveHint": false
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description84/100
Saves a workflow as a reusable Zapier Skill — a good fit for multi-step workflows the user runs repeatedly or tool calls that always use the same parameters. For a high-quality skill: (1) action keys and parameter schemas should come from list_enabled_zapier_actions, (2) static values should be resolved up front (e.g. an email to a Slack user ID), (3) any ambiguity about targets, recipients, or scope should be resolved with the user before creation, (4) known parameter values are pre-filled; only runtime-computed parameters are left bare. Re-using results from earlier in the conversation avoids redundant calls.
The description explains the capability, when to use it, and what to expect.
Inputs75/100
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
name
Short, unique name for this skill (e.g. 'create jira ticket', 'daily standup'). Names are case-insensitive.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
description
One-sentence description of what this skill does
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
skillDefinition
Full markdown skill definition.
BEFORE writing this definition, ensure the following have been done (skip any step whose results are already available from earlier in this conversation):
1. list_enabled_zapier_actions called for each app involved — to get exact action keys and parameter schemas.
2. User-specific configuration gathered — project keys, channel names, default assignees, recurring values.
3. Ambiguities resolved — if the workflow has unclear targets, recipients, or scope, ASK the user before proceeding. E.g. 'DM the user in the list, or DM you?', 'Which Jira project?', 'Send to the channel or to you directly?'
4. Static values resolved and validated — e.g. email resolved to a Slack user ID via a lookup action.
If any of these were already done earlier in the conversation, reuse those results. Do NOT repeat calls you have already made.
STRUCTURE the skill definition with these sections:
- Title and one-line description
- '## Validated fixed values' — all static IDs, names, keys discovered or confirmed during creation
- '## Actions' — each ZapierAction reference with the FULL parameter signature. Quote every param value that is known and fixed. Leave bare only params that must be computed at runtime.
- '## Runtime instructions' — numbered steps for execution
- '## Constraints' — what the agent must NOT do (e.g. do not re-resolve known IDs)
Reference each Zapier action inline with:
ZapierAction[app:action](param: "locked_value", dynamic_param)
Use the exact `app` and `key` values from list_enabled_zapier_actions.
Quoted param values are locked and forwarded directly at execution.
Bare param names are filled by skill logic at runtime.
IMPORTANT: Maximize locked params. Every param that CAN be resolved at creation time MUST be quoted. The goal is zero unnecessary API calls at runtime. Leverage any action results, user IDs, or parameter values already obtained in this conversation.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
Annotations0/100
Declare readOnlyHint, destructiveHint, idempotentHint, openWorldHint based on the tool’s actual behavior.
{
"title": "Create Zapier Skill"
}
Output schema0/100
No output schema is declared. Add one for structured results so clients can interpret returned fields.
Not declared
Original tool metadata
{
"name": "create_zapier_skill",
"description": "Saves a workflow as a reusable Zapier Skill — a good fit for multi-step workflows the user runs repeatedly or tool calls that always use the same parameters. For a high-quality skill: (1) action keys and parameter schemas should come from list_enabled_zapier_actions, (2) static values should be resolved up front (e.g. an email to a Slack user ID), (3) any ambiguity about targets, recipients, or scope should be resolved with the user before creation, (4) known parameter values are pre-filled; only runtime-computed parameters are left bare. Re-using results from earlier in the conversation avoids redundant calls.",
"inputSchema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"name",
"description",
"skillDefinition"
],
"properties": {
"name": {
"type": "string",
"maxLength": 200,
"minLength": 1,
"description": "Short, unique name for this skill (e.g. 'create jira ticket', 'daily standup'). Names are case-insensitive."
},
"description": {
"type": "string",
"maxLength": 500,
"minLength": 1,
"description": "One-sentence description of what this skill does"
},
"skillDefinition": {
"type": "string",
"maxLength": 100000,
"minLength": 1,
"description": "Full markdown skill definition.\n\nBEFORE writing this definition, ensure the following have been done (skip any step whose results are already available from earlier in this conversation):\n1. list_enabled_zapier_actions called for each app involved — to get exact action keys and parameter schemas.\n2. User-specific configuration gathered — project keys, channel names, default assignees, recurring values.\n3. Ambiguities resolved — if the workflow has unclear targets, recipients, or scope, ASK the user before proceeding. E.g. 'DM the user in the list, or DM you?', 'Which Jira project?', 'Send to the channel or to you directly?'\n4. Static values resolved and validated — e.g. email resolved to a Slack user ID via a lookup action.\n\nIf any of these were already done earlier in the conversation, reuse those results. Do NOT repeat calls you have already made.\n\nSTRUCTURE the skill definition with these sections:\n- Title and one-line description\n- '## Validated fixed values' — all static IDs, names, keys discovered or confirmed during creation\n- '## Actions' — each ZapierAction reference with the FULL parameter signature. Quote every param value that is known and fixed. Leave bare only params that must be computed at runtime.\n- '## Runtime instructions' — numbered steps for execution\n- '## Constraints' — what the agent must NOT do (e.g. do not re-resolve known IDs)\n\nReference each Zapier action inline with:\nZapierAction[app:action](param: \"locked_value\", dynamic_param)\n\nUse the exact `app` and `key` values from list_enabled_zapier_actions.\nQuoted param values are locked and forwarded directly at execution.\nBare param names are filled by skill logic at runtime.\n\nIMPORTANT: Maximize locked params. Every param that CAN be resolved at creation time MUST be quoted. The goal is zero unnecessary API calls at runtime. Leverage any action results, user IDs, or parameter values already obtained in this conversation."
}
}
},
"annotations": {
"title": "Create Zapier Skill"
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description96/100
Create or update a custom code action for an app. Before creating one, use inspect_zapier_actions to check enabled actions, then use discover_zapier_actions to search for an existing action to enable. Only use this when no Zapier action supports the required operation 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. IMPORTANT: 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.
The description explains the capability, when to use it, and what to expect.
Inputs95/100
Input documentation gives an agent enough context to populate the arguments.
selected_api
The app's API identifier from discover_zapier_actions (e.g. 'GoogleMailV2CLIAPI', 'JiraSoftwareCloudCLIAPI')
Clear enough to supply this argument.
code_action_name
A short, descriptive name for the code action (e.g. 'list_channel_users', 'close_stale_issues'). Used as the tool name suffix.
Clear enough to supply this argument.
requirements
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.
Clear enough to supply this argument.
Annotations0/100
Declare readOnlyHint, destructiveHint, idempotentHint, openWorldHint based on the tool’s actual behavior.
{
"title": "Write Code Action"
}
Output schema0/100
No output schema is declared. Add one for structured results so clients can interpret returned fields.
Not declared
Original tool metadata
{
"name": "write_code_action",
"description": "Create or update a custom code action for an app. Before creating one, use inspect_zapier_actions to check enabled actions, then use discover_zapier_actions to search for an existing action to enable. Only use this when no Zapier action supports the required operation 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. IMPORTANT: 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.",
"inputSchema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"selected_api",
"code_action_name",
"requirements"
],
"properties": {
"requirements": {
"type": "string",
"description": "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_api": {
"type": "string",
"description": "The app's API identifier from discover_zapier_actions (e.g. 'GoogleMailV2CLIAPI', 'JiraSoftwareCloudCLIAPI')"
},
"code_action_name": {
"type": "string",
"description": "A short, descriptive name for the code action (e.g. 'list_channel_users', 'close_stale_issues'). Used as the tool name suffix."
}
}
},
"annotations": {
"title": "Write Code Action"
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description94/100
Returns the URL where users can configure this MCP server - adding, editing, or removing actions. Provide this URL to users who want to customize their available tools.
The description explains the capability, when to use it, and what to expect.
Inputs100/100
This tool declares no inputs, so argument descriptions are not needed.
No input fields.
Annotations25/100
Declare destructiveHint, idempotentHint, openWorldHint based on the tool’s actual behavior.
No output schema is declared. Add one for structured results so clients can interpret returned fields.
Not declared
Original tool metadata
{
"name": "get_configuration_url",
"title": "Get Configuration URL",
"description": "Returns the URL where users can configure this MCP server - adding, editing, or removing actions. Provide this URL to users who want to customize their available tools.",
"inputSchema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {}
},
"annotations": {
"title": "Get Configuration URL",
"readOnlyHint": true
}
}
Loading score analytics…
Put your MCP to the test
A few tasks worth trying with this server, chosen from its reviewed tools. These have not been run.
01Get Zapier SkillReturns the full markdown definition of a saved Zapier Skill by name, along with any appended execution instructions.
02List Zapier SkillsLists the user's saved Zapier Skills with descriptions.
03List Zapier ConnectionsList the Zapier connections (authenticated accounts) available for an app.
04Inspect Zapier ActionsCall `inspect_zapier_actions` first when you create a workflow or automation, before configuring a trigger or action for Gmail, Google Sheets, Google Drive,…
05Get Configuration URLReturns the URL where users can configure this MCP server - adding, editing, or removing actions.
Want to run these tasks against your MCP server with us?
Zapier MCP setup, tools, quality score, publishing readiness, and alternatives.
How do I add Zapier MCP to Claude, ChatGPT, or Cursor?
Add Zapier MCP to Claude, ChatGPT, or Cursor by connecting its remote MCP URL in each client's MCP settings. In Claude, add a custom connector. In ChatGPT, add an MCP app. In Cursor, add an MCP server under Settings. The MCP URL is https://mcp.zapier.com/api/v1/connect. This server requires OAuth, so complete the login prompt after you connect.
Is Zapier MCP MCP ready for ChatGPT and Claude?
As of October 14, 2026, Zapier MCP scores 84/100 on Manufact's MCP publishing checklist. The scan does not yet meet ChatGPT publishing checks and does not yet meet Claude publishing checks. Passing these checks does not guarantee marketplace approval.
How clear is Zapier MCP's MCP tool documentation?
As of October 14, 2026, Zapier MCP scores 75/100 in Manufact's review of tool titles, descriptions, input and output schemas, and behavior annotations. The review covers 17 of 17 discovered tools. The quality score measures documentation clarity; runtime behavior and marketplace readiness require separate checks.
What are the best alternatives to Zapier MCP?
As of October 20, 2026, alternatives to Zapier MCP in automation-workflows on the Manufact MCP leaderboard include Sidewave Maggiordomo, Corsair Cloud, Fleet Workspace, Whalesync, and typenode-mcp.
Does Zapier MCP MCP require authentication?
Zapier MCP requires authentication. Connect it in Claude, ChatGPT, or Cursor and complete the OAuth login prompt.
How can Zapier MCP improve its MCP documentation?
disable_zapier_action is the lowest-scoring reviewed tool at 68/100. Declare readOnlyHint, destructiveHint, idempotentHint, openWorldHint based on the tool’s actual behavior. Open its review for feedback and a copyable fix prompt, then rerun the documentation review after updating your tool metadata.
Who develops Zapier MCP?
Zapier MCP is developed by Zapier. It is listed as partner on the Claude connector directory.
Not your MCP?
Review any public or OAuth MCP server for protocol compatibility, tool documentation, and ChatGPT and Claude publishing readiness. No account required.