Compose-ready workspace: packages/zappier (rate card, portal, Stripe), packages/verae-zapier-middleware (timestamp + NATS), packages/verae-zapier (CLI app), vendor/zapier-platform, and research/zapier vendor corpus. Gate 0 structure checks pass. Product code and research are not yet wired.
19 lines
164 KiB
JSON
19 lines
164 KiB
JSON
{"_id": "mcp_function:discover_zapier_actions", "kind": "mcp_function", "key": "discover_zapier_actions", "title": "discover_zapier_actions — Discover apps and actions in the Zapier catalog", "summary": "Catalog search. Finds apps and their actions that this MCP server can enable. Call this before claiming an app is unavailable.", "body": "# `discover_zapier_actions`\n\n> Catalog search. Finds apps and their actions that this MCP server can enable. Call this before claiming an app is unavailable.\n\n## High-level description\n\nCatalog search. Finds apps and their actions that this MCP server can enable. Call this before claiming an app is unavailable.\n\n## Server description (verbatim)\n\nSearch 9,000+ apps to find actions you can enable. For authenticated services (Google Docs, Gmail, Sheets, Notion, Slack, Outlook, etc.), check here FIRST - 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'. Use when user mentions ANY app not in inspect_zapier_actions. After finding what you need, use enable_zapier_action to add it.\n\n## Internals\n\nHits Zapier's public app/action catalog (the same directory behind docs/SDK `listApps`/`listActions`), not the user's enabled toolset. Returns `selected_api` identifiers (e.g. `GoogleMailV2CLIAPI`) that must be copied verbatim into enable/list/manage/execute. Does not open OAuth or mutate the server. Omit `app` to get popular apps.\n\n## Typed inputs\n\n```ts\ntype Input = {\n app?: string; // Search for apps by name. Omit to see popular apps. Search 9,000+ available apps.\n};\n```\n\nJSON Schema:\n\n```json\n{\n \"$schema\": \"http://json-schema.org/draft-07/schema#\",\n \"properties\": {\n \"app\": {\n \"description\": \"Search for apps by name. Omit to see popular apps. Search 9,000+ available apps.\",\n \"type\": \"string\"\n }\n },\n \"type\": \"object\"\n}\n```\n\n## Outputs\n\nZapier does not publish a formal output JSON Schema. Documented shape:\n\n```json\n{\n \"type\": \"object\",\n \"description\": \"Search hits. Exact envelope is server-generated; fields used by later tools:\",\n \"properties\": {\n \"apps\": {\n \"type\": \"array\",\n \"items\": {\n \"type\": \"object\",\n \"properties\": {\n \"app\": {\n \"type\": \"string\",\n \"description\": \"Display name, e.g. Gmail. Pass as app_display_name later.\"\n },\n \"selected_api\": {\n \"type\": \"string\",\n \"description\": \"Canonical API id, e.g. GoogleMailV2CLIAPI. Never invent this.\"\n },\n \"actions\": {\n \"type\": \"array\",\n \"description\": \"Available action keys/labels (read + write) for this app.\"\n }\n }\n }\n }\n }\n}\n```\n\n## Safety, billing, category\n\n- Category: `action-management`\n- Safety: `read` (writes need explicit user approval)\n- Bills 2 tasks on success: `False`\n- In official 14-tool table: `True`\n\n## Related functions\n\n- `enable_zapier_action`\n- `inspect_zapier_actions`\n- `manage_zapier_connections`\n- `write_code_action`\n\n## SDK / CLI twins\n\n- `zapier.listApps({search})`\n- `zapier.listActions({app})`\n- `zapier-sdk list-apps --search`\n\n## Examples\n\n### Find Gmail in the catalog\n\n```json\n{\n \"app\": \"gmail\"\n}\n```\n\nUse the returned selected_api (often GoogleMailV2CLIAPI, not GmailCLIAPI).\n\n### Popular apps (no query)\n\n```json\n{}\n```\n\n## Code\n\n```ts\n# MCP tools/call\n{\n \"name\": \"discover_zapier_actions\",\n \"arguments\": { \"app\": \"slack\" }\n}\n\n# TypeScript MCP client\nconst found = await client.callTool({\n name: \"discover_zapier_actions\",\n arguments: { app: \"google calendar\" },\n});\n\n# Parallel Zapier SDK (not MCP — same catalog)\nconst apps = zapier.listApps({ search: \"gmail\" });\n```\n", "usage": "tools/call discover_zapier_actions", "signature": "discover_zapier_actions(app?)", "aliases": [], "flags": [{"name": "app", "required": false, "type": "string", "description": "Search for apps by name. Omit to see popular apps. Search 9,000+ available apps."}], "args": [{"name": "app", "required": false, "type": "string", "description": "Search for apps by name. Omit to see popular apps. Search 9,000+ available apps."}], "examples": [{"title": "Find Gmail in the catalog", "call": {"app": "gmail"}, "note": "Use the returned selected_api (often GoogleMailV2CLIAPI, not GmailCLIAPI)."}, {"title": "Popular apps (no query)", "call": {}}], "source_url": "https://docs.zapier.com/mcp/overview/how-tools-work", "source_repo": "zapier/zapier-mcp", "source_path": "hosted:mcp.zapier.com/api/v1/connect", "section": "mcp", "tags": ["action-management", "mcp", "meta-tool", "official-14", "read"], "related": ["enable_zapier_action", "inspect_zapier_actions", "manage_zapier_connections", "write_code_action"], "meta": {"input_schema": {"$schema": "http://json-schema.org/draft-07/schema#", "properties": {"app": {"description": "Search for apps by name. Omit to see popular apps. Search 9,000+ available apps.", "type": "string"}}, "type": "object"}, "output_schema": {"type": "object", "description": "Search hits. Exact envelope is server-generated; fields used by later tools:", "properties": {"apps": {"type": "array", "items": {"type": "object", "properties": {"app": {"type": "string", "description": "Display name, e.g. Gmail. Pass as app_display_name later."}, "selected_api": {"type": "string", "description": "Canonical API id, e.g. GoogleMailV2CLIAPI. Never invent this."}, "actions": {"type": "array", "description": "Available action keys/labels (read + write) for this app."}}}}}}, "category": "action-management", "safety": "read", "bills_tasks": false, "official_14": true, "sdk_equivalent": ["zapier.listApps({search})", "zapier.listActions({app})", "zapier-sdk list-apps --search"], "internals": "Hits Zapier's public app/action catalog (the same directory behind docs/SDK `listApps`/`listActions`), not the user's enabled toolset. Returns `selected_api` identifiers (e.g. `GoogleMailV2CLIAPI`) that must be copied verbatim into enable/list/manage/execute. Does not open OAuth or mutate the server. Omit `app` to get popular apps.", "server_description": "Search 9,000+ apps to find actions you can enable. For authenticated services (Google Docs, Gmail, Sheets, Notion, Slack, Outlook, etc.), check here FIRST - 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'. Use when user mentions ANY app not in inspect_zapier_actions. After finding what you need, use enable_zapier_action to add it."}, "ingested_at": "2026-08-18T00:42:24.845758+00:00"}
|
||
{"_id": "mcp_function:enable_zapier_action", "kind": "mcp_function", "key": "enable_zapier_action", "title": "enable_zapier_action — Enable an app action on this MCP server", "summary": "Adds one action (or all actions) for a catalog app to this server's callable set so execute_* can run it.", "body": "# `enable_zapier_action`\n\n> Adds one action (or all actions) for a catalog app to this server's callable set so execute_* can run it.\n\n## High-level description\n\nAdds one action (or all actions) for a catalog app to this server's callable set so execute_* can run it.\n\n## Server description (verbatim)\n\nEnable 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.\n\n## Internals\n\nMutates the MCP server configuration stored at mcp.zapier.com. Looks up the app by `selected_api` from discover. If the user has no Zapier connection for that app, the response includes an auth URL (same OAuth dance as manage_zapier_connections). Enabling does not run the partner API. `action` omitted or `*` enables the app's actions; prefer enabling only what you need.\n\n## Typed inputs\n\n```ts\ntype Input = {\n action?: string; // Specific action key to enable. If omitted or '*', all actions for the app are enabled.\n app_display_name?: string; // 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_enabl\n selected_api: string; // The selectedApi ID to enable (e.g., 'GmailCLIAPI', 'SlackCLIAPI'). Use the selected_api field from discover_zapier_actions.\n};\n```\n\nJSON Schema:\n\n```json\n{\n \"$schema\": \"http://json-schema.org/draft-07/schema#\",\n \"properties\": {\n \"action\": {\n \"description\": \"Specific action key to enable. If omitted or '*', all actions for the app are enabled.\",\n \"type\": \"string\"\n },\n \"app_display_name\": {\n \"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.\",\n \"type\": \"string\"\n },\n \"selected_api\": {\n \"description\": \"The selectedApi ID to enable (e.g., 'GmailCLIAPI', 'SlackCLIAPI'). Use the selected_api field from discover_zapier_actions.\",\n \"type\": \"string\"\n }\n },\n \"required\": [\n \"selected_api\"\n ],\n \"type\": \"object\"\n}\n```\n\n## Outputs\n\nZapier does not publish a formal output JSON Schema. Documented shape:\n\n```json\n{\n \"type\": \"object\",\n \"properties\": {\n \"actions\": {\n \"type\": \"array\",\n \"description\": \"Enabled action keys plus which execute tool to use (read vs write).\"\n },\n \"parameters\": {\n \"type\": \"object\",\n \"description\": \"Initial parameter hints; still call inspect before execute.\"\n },\n \"auth_url\": {\n \"type\": \"string\",\n \"description\": \"Present when the app has no usable connection yet.\"\n },\n \"selected_api\": {\n \"type\": \"string\"\n },\n \"app_display_name\": {\n \"type\": \"string\"\n }\n }\n}\n```\n\n## Safety, billing, category\n\n- Category: `action-management`\n- Safety: `config` (writes need explicit user approval)\n- Bills 2 tasks on success: `False`\n- In official 14-tool table: `True`\n\n## Related functions\n\n- `discover_zapier_actions`\n- `inspect_zapier_actions`\n- `disable_zapier_action`\n- `manage_zapier_connections`\n- `execute_zapier_read_action`\n- `execute_zapier_write_action`\n\n## SDK / CLI twins\n\n- `N/A — SDK has no per-server enable; it calls any action the user is allowed to run`\n\n## Examples\n\n### Enable Slack send-channel-message only\n\n```json\n{\n \"selected_api\": \"SlackCLIAPI\",\n \"app_display_name\": \"Slack\",\n \"action\": \"send_channel_message\"\n}\n```\n\n### Enable every Gmail action\n\n```json\n{\n \"selected_api\": \"GoogleMailV2CLIAPI\",\n \"app_display_name\": \"Gmail\",\n \"action\": \"*\"\n}\n```\n\n## Code\n\n```ts\nawait client.callTool({\n name: \"enable_zapier_action\",\n arguments: {\n selected_api: \"GoogleMailV2CLIAPI\", // from discover_zapier_actions\n app_display_name: \"Gmail\",\n action: \"find_email\",\n },\n});\n```\n", "usage": "tools/call enable_zapier_action", "signature": "enable_zapier_action(action?, app_display_name?, selected_api)", "aliases": [], "flags": [{"name": "action", "required": false, "type": "string", "description": "Specific action key to enable. If omitted or '*', all actions for the app are enabled."}, {"name": "app_display_name", "required": false, "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."}, {"name": "selected_api", "required": true, "type": "string", "description": "The selectedApi ID to enable (e.g., 'GmailCLIAPI', 'SlackCLIAPI'). Use the selected_api field from discover_zapier_actions."}], "args": [{"name": "action", "required": false, "type": "string", "description": "Specific action key to enable. If omitted or '*', all actions for the app are enabled."}, {"name": "app_display_name", "required": false, "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."}, {"name": "selected_api", "required": true, "type": "string", "description": "The selectedApi ID to enable (e.g., 'GmailCLIAPI', 'SlackCLIAPI'). Use the selected_api field from discover_zapier_actions."}], "examples": [{"title": "Enable Slack send-channel-message only", "call": {"selected_api": "SlackCLIAPI", "app_display_name": "Slack", "action": "send_channel_message"}}, {"title": "Enable every Gmail action", "call": {"selected_api": "GoogleMailV2CLIAPI", "app_display_name": "Gmail", "action": "*"}}], "source_url": "https://docs.zapier.com/mcp/overview/how-tools-work", "source_repo": "zapier/zapier-mcp", "source_path": "hosted:mcp.zapier.com/api/v1/connect", "section": "mcp", "tags": ["action-management", "config", "mcp", "meta-tool", "official-14"], "related": ["discover_zapier_actions", "inspect_zapier_actions", "disable_zapier_action", "manage_zapier_connections", "execute_zapier_read_action", "execute_zapier_write_action"], "meta": {"input_schema": {"$schema": "http://json-schema.org/draft-07/schema#", "properties": {"action": {"description": "Specific action key to enable. If omitted or '*', all actions for the app are enabled.", "type": "string"}, "app_display_name": {"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.", "type": "string"}, "selected_api": {"description": "The selectedApi ID to enable (e.g., 'GmailCLIAPI', 'SlackCLIAPI'). Use the selected_api field from discover_zapier_actions.", "type": "string"}}, "required": ["selected_api"], "type": "object"}, "output_schema": {"type": "object", "properties": {"actions": {"type": "array", "description": "Enabled action keys plus which execute tool to use (read vs write)."}, "parameters": {"type": "object", "description": "Initial parameter hints; still call inspect before execute."}, "auth_url": {"type": "string", "description": "Present when the app has no usable connection yet."}, "selected_api": {"type": "string"}, "app_display_name": {"type": "string"}}}, "category": "action-management", "safety": "config", "bills_tasks": false, "official_14": true, "sdk_equivalent": ["N/A — SDK has no per-server enable; it calls any action the user is allowed to run"], "internals": "Mutates the MCP server configuration stored at mcp.zapier.com. Looks up the app by `selected_api` from discover. If the user has no Zapier connection for that app, the response includes an auth URL (same OAuth dance as manage_zapier_connections). Enabling does not run the partner API. `action` omitted or `*` enables the app's actions; prefer enabling only what you need.", "server_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."}, "ingested_at": "2026-08-18T00:42:24.845758+00:00"}
|
||
{"_id": "mcp_function:disable_zapier_action", "kind": "mcp_function", "key": "disable_zapier_action", "title": "disable_zapier_action — Disable an enabled action or an entire app", "summary": "Removes actions from this server so the agent can no longer execute them.", "body": "# `disable_zapier_action`\n\n> Removes actions from this server so the agent can no longer execute them.\n\n## High-level description\n\nRemoves actions from this server so the agent can no longer execute them.\n\n## Server description (verbatim)\n\nRemove 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.\n\n## Internals\n\nInverse of enable. Deletes the action binding from the server config. Does not revoke the user's Zapier app connection and does not delete history. Omit `action` to remove every action for `selected_api`.\n\n## Typed inputs\n\n```ts\ntype Input = {\n action?: string; // Specific action key to remove. If omitted, all actions for the app are removed.\n app_display_name?: string; // 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 t\n selected_api: string; // The selectedApi ID to disable (e.g., 'GmailCLIAPI', 'JiraSoftwareCloudCLIAPI'). Use the selected_api field from list_enabled_zapier_actions.\n};\n```\n\nJSON Schema:\n\n```json\n{\n \"$schema\": \"http://json-schema.org/draft-07/schema#\",\n \"properties\": {\n \"action\": {\n \"description\": \"Specific action key to remove. If omitted, all actions for the app are removed.\",\n \"type\": \"string\"\n },\n \"app_display_name\": {\n \"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.\",\n \"type\": \"string\"\n },\n \"selected_api\": {\n \"description\": \"The selectedApi ID to disable (e.g., 'GmailCLIAPI', 'JiraSoftwareCloudCLIAPI'). Use the selected_api field from list_enabled_zapier_actions.\",\n \"type\": \"string\"\n }\n },\n \"required\": [\n \"selected_api\"\n ],\n \"type\": \"object\"\n}\n```\n\n## Outputs\n\nZapier does not publish a formal output JSON Schema. Documented shape:\n\n```json\n{\n \"type\": \"object\",\n \"properties\": {\n \"disabled\": {\n \"type\": \"array\",\n \"description\": \"Action keys that were removed.\"\n },\n \"selected_api\": {\n \"type\": \"string\"\n }\n }\n}\n```\n\n## Safety, billing, category\n\n- Category: `action-management`\n- Safety: `config` (writes need explicit user approval)\n- Bills 2 tasks on success: `False`\n- In official 14-tool table: `True`\n\n## Related functions\n\n- `inspect_zapier_actions`\n- `enable_zapier_action`\n\n## SDK / CLI twins\n\n- `N/A`\n\n## Examples\n\n### Remove one write action\n\n```json\n{\n \"selected_api\": \"SlackCLIAPI\",\n \"app_display_name\": \"Slack\",\n \"action\": \"send_channel_message\"\n}\n```\n\n## Code\n\n```ts\nawait client.callTool({\n name: \"disable_zapier_action\",\n arguments: {\n selected_api: \"SlackCLIAPI\",\n app_display_name: \"Slack\",\n action: \"send_channel_message\",\n },\n});\n```\n", "usage": "tools/call disable_zapier_action", "signature": "disable_zapier_action(action?, app_display_name?, selected_api)", "aliases": [], "flags": [{"name": "action", "required": false, "type": "string", "description": "Specific action key to remove. If omitted, all actions for the app are removed."}, {"name": "app_display_name", "required": false, "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."}, {"name": "selected_api", "required": true, "type": "string", "description": "The selectedApi ID to disable (e.g., 'GmailCLIAPI', 'JiraSoftwareCloudCLIAPI'). Use the selected_api field from list_enabled_zapier_actions."}], "args": [{"name": "action", "required": false, "type": "string", "description": "Specific action key to remove. If omitted, all actions for the app are removed."}, {"name": "app_display_name", "required": false, "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."}, {"name": "selected_api", "required": true, "type": "string", "description": "The selectedApi ID to disable (e.g., 'GmailCLIAPI', 'JiraSoftwareCloudCLIAPI'). Use the selected_api field from list_enabled_zapier_actions."}], "examples": [{"title": "Remove one write action", "call": {"selected_api": "SlackCLIAPI", "app_display_name": "Slack", "action": "send_channel_message"}}], "source_url": "https://docs.zapier.com/mcp/overview/how-tools-work", "source_repo": "zapier/zapier-mcp", "source_path": "hosted:mcp.zapier.com/api/v1/connect", "section": "mcp", "tags": ["action-management", "config", "mcp", "meta-tool", "official-14"], "related": ["inspect_zapier_actions", "enable_zapier_action"], "meta": {"input_schema": {"$schema": "http://json-schema.org/draft-07/schema#", "properties": {"action": {"description": "Specific action key to remove. If omitted, all actions for the app are removed.", "type": "string"}, "app_display_name": {"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.", "type": "string"}, "selected_api": {"description": "The selectedApi ID to disable (e.g., 'GmailCLIAPI', 'JiraSoftwareCloudCLIAPI'). Use the selected_api field from list_enabled_zapier_actions.", "type": "string"}}, "required": ["selected_api"], "type": "object"}, "output_schema": {"type": "object", "properties": {"disabled": {"type": "array", "description": "Action keys that were removed."}, "selected_api": {"type": "string"}}}, "category": "action-management", "safety": "config", "bills_tasks": false, "official_14": true, "sdk_equivalent": ["N/A"], "internals": "Inverse of enable. Deletes the action binding from the server config. Does not revoke the user's Zapier app connection and does not delete history. Omit `action` to remove every action for `selected_api`.", "server_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."}, "ingested_at": "2026-08-18T00:42:24.845758+00:00"}
|
||
{"_id": "mcp_function:inspect_zapier_actions", "kind": "mcp_function", "key": "inspect_zapier_actions", "title": "inspect_zapier_actions — Inspect enabled actions and resolve dynamic fields", "summary": "The schema tool. Lists what is enabled and, when called again with `tool_name` / `enum_property` / `params`, resolves dropdowns and dynamic input fields. Always call before execute.", "body": "# `inspect_zapier_actions`\n\n> The schema tool. Lists what is enabled and, when called again with `tool_name` / `enum_property` / `params`, resolves dropdowns and dynamic input fields. Always call before execute.\n\n## High-level description\n\nThe schema tool. Lists what is enabled and, when called again with `tool_name` / `enum_property` / `params`, resolves dropdowns and dynamic input fields. Always call before execute.\n\n## Server description (verbatim)\n\nCALL THIS FIRST before any execute_zapier_read_action or execute_zapier_write_action call. Inspects all enabled apps and their actions with everything you need to build an execute call: the exact `app`, `action`, and `tool_name` identifiers plus parameter schema. These apps handle OAuth automatically — use them instead of generic URL fetching for authenticated services. 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`. If you don't find the app or action 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.\n\n## Internals\n\nReads this server's enabled-action table, then (when `tool_name` or `enum_property` is set) calls the same Zapier Platform input-field and dynamic-dropdown endpoints the visual builder uses: `is_dynamic_enum` → choices (paginated via `enum_cursor` / `enum_search`); `dynamic_properties_depends_on` → extra fields after parent params are known. Does not run the partner action. Never guess action keys — they are not human names.\n\n## Typed inputs\n\n```ts\ntype Input = {\n action?: string; // Filter by action key. Omit to list all actions.\n connection_id?: number | string; // 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 \n enum_cursor?: string; // Pagination cursor from a previous dynamic enum response. Use with `enum_property`.\n enum_property?: string; // The dynamic enum property to resolve or search. Required to get `dynamic_enum_values`; omit when you only need the action's parameter schema.\n enum_search?: string; // Optional search text for `enum_property` when its dynamic enum has many values.\n params?: Record<string, unknown>; // Partial argument values for the action. Pass parent values here to resolve dynamic enum values and the `dynamic_properties` schema inline before executing.\n selected_api?: string; // 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.\n tool_name?: string; // Filter by the `tool_name` returned for an action. Preferred when resolving an exact action schema because it is collision-safe.\n};\n```\n\nJSON Schema:\n\n```json\n{\n \"$schema\": \"http://json-schema.org/draft-07/schema#\",\n \"properties\": {\n \"action\": {\n \"description\": \"Filter by action key. Omit to list all actions.\",\n \"type\": \"string\"\n },\n \"connection_id\": {\n \"anyOf\": [\n {\n \"maximum\": 9007199254740991,\n \"minimum\": 1,\n \"type\": \"integer\"\n },\n {\n \"minLength\": 1,\n \"type\": \"string\"\n }\n ],\n \"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 \\u2014 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.\"\n },\n \"enum_cursor\": {\n \"description\": \"Pagination cursor from a previous dynamic enum response. Use with `enum_property`.\",\n \"type\": \"string\"\n },\n \"enum_property\": {\n \"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.\",\n \"type\": \"string\"\n },\n \"enum_search\": {\n \"description\": \"Optional search text for `enum_property` when its dynamic enum has many values.\",\n \"type\": \"string\"\n },\n \"params\": {\n \"additionalProperties\": {},\n \"description\": \"Partial argument values for the action. Pass parent values here to resolve dynamic enum values and the `dynamic_properties` schema inline before executing.\",\n \"propertyNames\": {\n \"type\": \"string\"\n },\n \"type\": \"object\"\n },\n \"selected_api\": {\n \"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.\",\n \"type\": \"string\"\n },\n \"tool_name\": {\n \"description\": \"Filter by the `tool_name` returned for an action. Preferred when resolving an exact action schema because it is collision-safe.\",\n \"type\": \"string\"\n }\n },\n \"type\": \"object\"\n}\n```\n\n## Outputs\n\nZapier does not publish a formal output JSON Schema. Documented shape:\n\n```json\n{\n \"type\": \"object\",\n \"properties\": {\n \"apps\": {\n \"type\": \"array\",\n \"items\": {\n \"type\": \"object\",\n \"properties\": {\n \"app\": {\n \"type\": \"string\"\n },\n \"selected_api\": {\n \"type\": \"string\"\n },\n \"connections\": {\n \"type\": \"object\",\n \"properties\": {\n \"default\": {\n \"description\": \"Default account this app's actions will run against.\"\n }\n }\n },\n \"actions\": {\n \"type\": \"array\",\n \"items\": {\n \"type\": \"object\",\n \"properties\": {\n \"action\": {\n \"type\": \"string\"\n },\n \"tool_name\": {\n \"type\": \"string\",\n \"description\": \"Collision-safe id to pass into execute.\"\n },\n \"execute_tool\": {\n \"type\": \"string\",\n \"enum\": [\n \"execute_zapier_read_action\",\n \"execute_zapier_write_action\"\n ]\n },\n \"parameters\": {\n \"type\": \"object\",\n \"description\": \"JSON Schema-like fields; may include is_dynamic_enum, dynamic_properties_depends_on.\"\n },\n \"dynamic_enum_values\": {\n \"type\": \"array\",\n \"description\": \"Present when enum_property was set.\"\n },\n \"dynamic_properties_schema\": {\n \"type\": \"object\",\n \"description\": \"Present after parent params are settled.\"\n }\n }\n }\n }\n }\n }\n }\n }\n}\n```\n\n## Safety, billing, category\n\n- Category: `action-management`\n- Safety: `read` (writes need explicit user approval)\n- Bills 2 tasks on success: `False`\n- In official 14-tool table: `True`\n\n## Related functions\n\n- `execute_zapier_read_action`\n- `execute_zapier_write_action`\n- `discover_zapier_actions`\n- `list_zapier_connections`\n- `manage_zapier_connections`\n- `enable_zapier_action`\n\n## SDK / CLI twins\n\n- `zapier.getActionInputFieldsSchema`\n- `zapier.listActionInputFields`\n- `zapier-sdk list-action-input-fields`\n- `zapier-sdk list-action-input-field-choices`\n\n## Examples\n\n### List everything enabled\n\n```json\n{}\n```\n\n### Schema for one action\n\n```json\n{\n \"tool_name\": \"SlackCLIAPI.send_channel_message\"\n}\n```\n\n### Resolve a dynamic dropdown (Slack channel)\n\n```json\n{\n \"tool_name\": \"SlackCLIAPI.send_channel_message\",\n \"enum_property\": \"channel\",\n \"enum_search\": \"launches\"\n}\n```\n\n### Load fields that depend on a parent (e.g. spreadsheet → worksheet)\n\n```json\n{\n \"tool_name\": \"GoogleSheetsV2CLIAPI.lookup_spreadsheet_row\",\n \"params\": {\n \"spreadsheet\": \"1AbC...\"\n }\n}\n```\n\n## Code\n\n```ts\n// 1) inventory\nawait client.callTool({ name: \"inspect_zapier_actions\", arguments: {} });\n\n// 2) resolve Slack channel id before write\nawait client.callTool({\n name: \"inspect_zapier_actions\",\n arguments: {\n tool_name: \"SlackCLIAPI.send_channel_message\",\n enum_property: \"channel\",\n enum_search: \"launches\",\n },\n});\n```\n", "usage": "tools/call inspect_zapier_actions", "signature": "inspect_zapier_actions(action?, connection_id?, enum_cursor?, enum_property?, enum_search?, params?, selected_api?, tool_name?)", "aliases": [], "flags": [{"name": "action", "required": false, "type": "string", "description": "Filter by action key. Omit to list all actions."}, {"name": "connection_id", "required": false, "type": "number | string", "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."}, {"name": "enum_cursor", "required": false, "type": "string", "description": "Pagination cursor from a previous dynamic enum response. Use with `enum_property`."}, {"name": "enum_property", "required": false, "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."}, {"name": "enum_search", "required": false, "type": "string", "description": "Optional search text for `enum_property` when its dynamic enum has many values."}, {"name": "params", "required": false, "type": "Record<string, unknown>", "description": "Partial argument values for the action. Pass parent values here to resolve dynamic enum values and the `dynamic_properties` schema inline before executing."}, {"name": "selected_api", "required": false, "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."}, {"name": "tool_name", "required": false, "type": "string", "description": "Filter by the `tool_name` returned for an action. Preferred when resolving an exact action schema because it is collision-safe."}], "args": [{"name": "action", "required": false, "type": "string", "description": "Filter by action key. Omit to list all actions."}, {"name": "connection_id", "required": false, "type": "number | string", "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."}, {"name": "enum_cursor", "required": false, "type": "string", "description": "Pagination cursor from a previous dynamic enum response. Use with `enum_property`."}, {"name": "enum_property", "required": false, "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."}, {"name": "enum_search", "required": false, "type": "string", "description": "Optional search text for `enum_property` when its dynamic enum has many values."}, {"name": "params", "required": false, "type": "Record<string, unknown>", "description": "Partial argument values for the action. Pass parent values here to resolve dynamic enum values and the `dynamic_properties` schema inline before executing."}, {"name": "selected_api", "required": false, "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."}, {"name": "tool_name", "required": false, "type": "string", "description": "Filter by the `tool_name` returned for an action. Preferred when resolving an exact action schema because it is collision-safe."}], "examples": [{"title": "List everything enabled", "call": {}}, {"title": "Schema for one action", "call": {"tool_name": "SlackCLIAPI.send_channel_message"}}, {"title": "Resolve a dynamic dropdown (Slack channel)", "call": {"tool_name": "SlackCLIAPI.send_channel_message", "enum_property": "channel", "enum_search": "launches"}}, {"title": "Load fields that depend on a parent (e.g. spreadsheet → worksheet)", "call": {"tool_name": "GoogleSheetsV2CLIAPI.lookup_spreadsheet_row", "params": {"spreadsheet": "1AbC..."}}}], "source_url": "https://docs.zapier.com/mcp/overview/how-tools-work", "source_repo": "zapier/zapier-mcp", "source_path": "hosted:mcp.zapier.com/api/v1/connect", "section": "mcp", "tags": ["action-management", "mcp", "meta-tool", "official-14", "read"], "related": ["execute_zapier_read_action", "execute_zapier_write_action", "discover_zapier_actions", "list_zapier_connections", "manage_zapier_connections", "enable_zapier_action"], "meta": {"input_schema": {"$schema": "http://json-schema.org/draft-07/schema#", "properties": {"action": {"description": "Filter by action key. Omit to list all actions.", "type": "string"}, "connection_id": {"anyOf": [{"maximum": 9007199254740991, "minimum": 1, "type": "integer"}, {"minLength": 1, "type": "string"}], "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_cursor": {"description": "Pagination cursor from a previous dynamic enum response. Use with `enum_property`.", "type": "string"}, "enum_property": {"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.", "type": "string"}, "enum_search": {"description": "Optional search text for `enum_property` when its dynamic enum has many values.", "type": "string"}, "params": {"additionalProperties": {}, "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"}, "type": "object"}, "selected_api": {"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.", "type": "string"}, "tool_name": {"description": "Filter by the `tool_name` returned for an action. Preferred when resolving an exact action schema because it is collision-safe.", "type": "string"}}, "type": "object"}, "output_schema": {"type": "object", "properties": {"apps": {"type": "array", "items": {"type": "object", "properties": {"app": {"type": "string"}, "selected_api": {"type": "string"}, "connections": {"type": "object", "properties": {"default": {"description": "Default account this app's actions will run against."}}}, "actions": {"type": "array", "items": {"type": "object", "properties": {"action": {"type": "string"}, "tool_name": {"type": "string", "description": "Collision-safe id to pass into execute."}, "execute_tool": {"type": "string", "enum": ["execute_zapier_read_action", "execute_zapier_write_action"]}, "parameters": {"type": "object", "description": "JSON Schema-like fields; may include is_dynamic_enum, dynamic_properties_depends_on."}, "dynamic_enum_values": {"type": "array", "description": "Present when enum_property was set."}, "dynamic_properties_schema": {"type": "object", "description": "Present after parent params are settled."}}}}}}}}}, "category": "action-management", "safety": "read", "bills_tasks": false, "official_14": true, "sdk_equivalent": ["zapier.getActionInputFieldsSchema", "zapier.listActionInputFields", "zapier-sdk list-action-input-fields", "zapier-sdk list-action-input-field-choices"], "internals": "Reads this server's enabled-action table, then (when `tool_name` or `enum_property` is set) calls the same Zapier Platform input-field and dynamic-dropdown endpoints the visual builder uses: `is_dynamic_enum` → choices (paginated via `enum_cursor` / `enum_search`); `dynamic_properties_depends_on` → extra fields after parent params are known. Does not run the partner action. Never guess action keys — they are not human names.", "server_description": "CALL THIS FIRST before any execute_zapier_read_action or execute_zapier_write_action call. Inspects all enabled apps and their actions with everything you need to build an execute call: the exact `app`, `action`, and `tool_name` identifiers plus parameter schema. These apps handle OAuth automatically — use them instead of generic URL fetching for authenticated services. 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`. If you don't find the app or action 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."}, "ingested_at": "2026-08-18T00:42:24.845758+00:00"}
|
||
{"_id": "mcp_function:execute_zapier_read_action", "kind": "mcp_function", "key": "execute_zapier_read_action", "title": "execute_zapier_read_action — Run a search / lookup / get action", "summary": "Read-only perform. Finds emails, rows, events, contacts, issues. No user confirmation required by Zapier's safety model.", "body": "# `execute_zapier_read_action`\n\n> Read-only perform. Finds emails, rows, events, contacts, issues. No user confirmation required by Zapier's safety model.\n\n## High-level description\n\nRead-only perform. Finds emails, rows, events, contacts, issues. No user confirmation required by Zapier's safety model.\n\n## Server description (verbatim)\n\nExecute 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.\n\n## Internals\n\nResolves (`selected_api`, `action` or `tool_name`) to a Zapier Platform search/read operation, injects the user's connection (default or `connection_id`), maps `params` onto `bundle.inputData`, and runs the same perform path as `zapier.apps.<app>.search.*` / `runAction({actionType:'search'|'read'})`. Successful calls cost **2 Zapier tasks**. Failed calls are free. Results are whatever the partner action returns (usually an array of objects). Does not auto-create records.\n\n## Typed inputs\n\n```ts\ntype Input = {\n action: string; // Action key to execute. Use inspect_zapier_actions to get exact keys.\n connection_id?: number | string; // 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 \n params?: Record<string, unknown>; // 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_e\n selected_api: string; // 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 \n tool_name?: string; // Collision-safe action identifier from inspect_zapier_actions. Pass it whenever available so actions that share the same key resolve correctly.\n};\n```\n\nJSON Schema:\n\n```json\n{\n \"$schema\": \"http://json-schema.org/draft-07/schema#\",\n \"properties\": {\n \"action\": {\n \"description\": \"Action key to execute. Use inspect_zapier_actions to get exact keys.\",\n \"type\": \"string\"\n },\n \"connection_id\": {\n \"anyOf\": [\n {\n \"maximum\": 9007199254740991,\n \"minimum\": 1,\n \"type\": \"integer\"\n },\n {\n \"minLength\": 1,\n \"type\": \"string\"\n }\n ],\n \"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 \\u2014 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.\"\n },\n \"params\": {\n \"additionalProperties\": {},\n \"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`.\",\n \"propertyNames\": {\n \"type\": \"string\"\n },\n \"type\": \"object\"\n },\n \"selected_api\": {\n \"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.\",\n \"type\": \"string\"\n },\n \"tool_name\": {\n \"description\": \"Collision-safe action identifier from inspect_zapier_actions. Pass it whenever available so actions that share the same key resolve correctly.\",\n \"type\": \"string\"\n }\n },\n \"required\": [\n \"selected_api\",\n \"action\"\n ],\n \"type\": \"object\"\n}\n```\n\n## Outputs\n\nZapier does not publish a formal output JSON Schema. Documented shape:\n\n```json\n{\n \"type\": \"object\",\n \"description\": \"Partner payload, typically an array of records. Shape is action-specific.\",\n \"properties\": {\n \"results\": {\n \"type\": \"array\",\n \"description\": \"Matching records (id + display fields). Empty array = not found, not an error.\"\n },\n \"data\": {\n \"type\": \"array\",\n \"description\": \"Some responses use data[] (same as the SDK).\"\n },\n \"error\": {\n \"type\": \"string\",\n \"description\": \"Present on failure (401 = reconnect via manage_zapier_connections).\"\n }\n }\n}\n```\n\n## Safety, billing, category\n\n- Category: `execution`\n- Safety: `read` (writes need explicit user approval)\n- Bills 2 tasks on success: `True`\n- In official 14-tool table: `True`\n\n## Related functions\n\n- `inspect_zapier_actions`\n- `discover_zapier_actions`\n- `enable_zapier_action`\n- `list_zapier_connections`\n- `execute_zapier_write_action`\n\n## SDK / CLI twins\n\n- `zapier.runAction({actionType:'search'|'read'})`\n- `zapier-sdk run-action <app> search <key>`\n- `repos/sdk/examples/by-app/*/find-*.ts`\n\n## Examples\n\n### Find a Gmail thread\n\n```json\n{\n \"selected_api\": \"GoogleMailV2CLIAPI\",\n \"action\": \"find_email\",\n \"tool_name\": \"GoogleMailV2CLIAPI.find_email\",\n \"params\": {\n \"query\": \"from:sarah@acme.com newer_than:7d\"\n }\n}\n```\n\n## Code\n\n```ts\n// Always inspect first — never invent action keys.\nawait client.callTool({ name: \"inspect_zapier_actions\", arguments: { selected_api: \"GoogleMailV2CLIAPI\" } });\n\nconst emails = await client.callTool({\n name: \"execute_zapier_read_action\",\n arguments: {\n selected_api: \"GoogleMailV2CLIAPI\",\n action: \"find_email\",\n tool_name: \"GoogleMailV2CLIAPI.find_email\",\n params: { query: \"from:sarah@acme.com\" },\n },\n});\n\n// SDK twin\nconst { data } = await zapier.runAction({\n appKey: \"GoogleMailV2CLIAPI\",\n actionType: \"search\",\n actionKey: \"find_email\",\n connection: connection.id,\n inputs: { query: \"from:sarah@acme.com\" },\n});\n```\n", "usage": "tools/call execute_zapier_read_action", "signature": "execute_zapier_read_action(action, connection_id?, params?, selected_api, tool_name?)", "aliases": [], "flags": [{"name": "action", "required": true, "type": "string", "description": "Action key to execute. Use inspect_zapier_actions to get exact keys."}, {"name": "connection_id", "required": false, "type": "number | string", "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."}, {"name": "params", "required": false, "type": "Record<string, unknown>", "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`."}, {"name": "selected_api", "required": true, "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."}, {"name": "tool_name", "required": false, "type": "string", "description": "Collision-safe action identifier from inspect_zapier_actions. Pass it whenever available so actions that share the same key resolve correctly."}], "args": [{"name": "action", "required": true, "type": "string", "description": "Action key to execute. Use inspect_zapier_actions to get exact keys."}, {"name": "connection_id", "required": false, "type": "number | string", "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."}, {"name": "params", "required": false, "type": "Record<string, unknown>", "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`."}, {"name": "selected_api", "required": true, "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."}, {"name": "tool_name", "required": false, "type": "string", "description": "Collision-safe action identifier from inspect_zapier_actions. Pass it whenever available so actions that share the same key resolve correctly."}], "examples": [{"title": "Find a Gmail thread", "call": {"selected_api": "GoogleMailV2CLIAPI", "action": "find_email", "tool_name": "GoogleMailV2CLIAPI.find_email", "params": {"query": "from:sarah@acme.com newer_than:7d"}}}], "source_url": "https://docs.zapier.com/mcp/overview/how-tools-work", "source_repo": "zapier/zapier-mcp", "source_path": "hosted:mcp.zapier.com/api/v1/connect", "section": "mcp", "tags": ["execution", "mcp", "meta-tool", "official-14", "read"], "related": ["inspect_zapier_actions", "discover_zapier_actions", "enable_zapier_action", "list_zapier_connections", "execute_zapier_write_action"], "meta": {"input_schema": {"$schema": "http://json-schema.org/draft-07/schema#", "properties": {"action": {"description": "Action key to execute. Use inspect_zapier_actions to get exact keys.", "type": "string"}, "connection_id": {"anyOf": [{"maximum": 9007199254740991, "minimum": 1, "type": "integer"}, {"minLength": 1, "type": "string"}], "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."}, "params": {"additionalProperties": {}, "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"}, "type": "object"}, "selected_api": {"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.", "type": "string"}, "tool_name": {"description": "Collision-safe action identifier from inspect_zapier_actions. Pass it whenever available so actions that share the same key resolve correctly.", "type": "string"}}, "required": ["selected_api", "action"], "type": "object"}, "output_schema": {"type": "object", "description": "Partner payload, typically an array of records. Shape is action-specific.", "properties": {"results": {"type": "array", "description": "Matching records (id + display fields). Empty array = not found, not an error."}, "data": {"type": "array", "description": "Some responses use data[] (same as the SDK)."}, "error": {"type": "string", "description": "Present on failure (401 = reconnect via manage_zapier_connections)."}}}, "category": "execution", "safety": "read", "bills_tasks": true, "official_14": true, "sdk_equivalent": ["zapier.runAction({actionType:'search'|'read'})", "zapier-sdk run-action <app> search <key>", "repos/sdk/examples/by-app/*/find-*.ts"], "internals": "Resolves (`selected_api`, `action` or `tool_name`) to a Zapier Platform search/read operation, injects the user's connection (default or `connection_id`), maps `params` onto `bundle.inputData`, and runs the same perform path as `zapier.apps.<app>.search.*` / `runAction({actionType:'search'|'read'})`. Successful calls cost **2 Zapier tasks**. Failed calls are free. Results are whatever the partner action returns (usually an array of objects). Does not auto-create records.", "server_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."}, "ingested_at": "2026-08-18T00:42:24.845758+00:00"}
|
||
{"_id": "mcp_function:execute_zapier_write_action", "kind": "mcp_function", "key": "execute_zapier_write_action", "title": "execute_zapier_write_action — Run a create / update / send action", "summary": "Write perform. Sends messages, creates records, updates fields. Always confirm with the user first — side effects are real.", "body": "# `execute_zapier_write_action`\n\n> Write perform. Sends messages, creates records, updates fields. Always confirm with the user first — side effects are real.\n\n## High-level description\n\nWrite perform. Sends messages, creates records, updates fields. Always confirm with the user first — side effects are real.\n\n## Server description (verbatim)\n\nExecute 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.\n\n## Internals\n\nSame runtime as execute_zapier_read_action but targets create/write operations (`runAction({actionType:'write'})`). Params must uniquely identify recipients/channels/records — resolve IDs via inspect dynamic enums or a prior read. Costs **2 tasks** on success. Irreversible partner-side effects (sent email, created ticket) are not rolled back by Zapier.\n\n## Typed inputs\n\n```ts\ntype Input = {\n action: string; // Action key to execute. Use inspect_zapier_actions to get exact keys.\n connection_id?: number | string; // 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 \n params?: Record<string, unknown>; // 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_e\n selected_api: string; // 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 \n tool_name?: string; // Collision-safe action identifier from inspect_zapier_actions. Pass it whenever available so actions that share the same key resolve correctly.\n};\n```\n\nJSON Schema:\n\n```json\n{\n \"$schema\": \"http://json-schema.org/draft-07/schema#\",\n \"properties\": {\n \"action\": {\n \"description\": \"Action key to execute. Use inspect_zapier_actions to get exact keys.\",\n \"type\": \"string\"\n },\n \"connection_id\": {\n \"anyOf\": [\n {\n \"maximum\": 9007199254740991,\n \"minimum\": 1,\n \"type\": \"integer\"\n },\n {\n \"minLength\": 1,\n \"type\": \"string\"\n }\n ],\n \"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 \\u2014 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.\"\n },\n \"params\": {\n \"additionalProperties\": {},\n \"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`.\",\n \"propertyNames\": {\n \"type\": \"string\"\n },\n \"type\": \"object\"\n },\n \"selected_api\": {\n \"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.\",\n \"type\": \"string\"\n },\n \"tool_name\": {\n \"description\": \"Collision-safe action identifier from inspect_zapier_actions. Pass it whenever available so actions that share the same key resolve correctly.\",\n \"type\": \"string\"\n }\n },\n \"required\": [\n \"selected_api\",\n \"action\"\n ],\n \"type\": \"object\"\n}\n```\n\n## Outputs\n\nZapier does not publish a formal output JSON Schema. Documented shape:\n\n```json\n{\n \"type\": \"object\",\n \"properties\": {\n \"results\": {\n \"type\": \"array\",\n \"description\": \"Usually one created/updated object.\"\n },\n \"data\": {\n \"type\": \"array\"\n },\n \"error\": {\n \"type\": \"string\"\n }\n }\n}\n```\n\n## Safety, billing, category\n\n- Category: `execution`\n- Safety: `write` (writes need explicit user approval)\n- Bills 2 tasks on success: `True`\n- In official 14-tool table: `True`\n\n## Related functions\n\n- `inspect_zapier_actions`\n- `execute_zapier_read_action`\n- `list_zapier_connections`\n- `enable_zapier_action`\n\n## SDK / CLI twins\n\n- `zapier.runAction({actionType:'write'})`\n- `zapier-sdk run-action <app> write <key>`\n- `repos/sdk/examples/by-app/gmail/send-email.ts`\n- `repos/sdk/examples/by-app/slack (channel message)`\n\n## Examples\n\n### Send Slack after resolving channel id\n\n```json\n{\n \"selected_api\": \"SlackCLIAPI\",\n \"action\": \"send_channel_message\",\n \"params\": {\n \"channel\": \"C01234567\",\n \"text\": \"Release shipped, monitoring now\"\n }\n}\n```\n\n## Code\n\n```ts\n// 1) confirm with the user\n// 2) resolve channel via inspect (enum_property: \"channel\")\n// 3) write\nawait client.callTool({\n name: \"execute_zapier_write_action\",\n arguments: {\n selected_api: \"SlackCLIAPI\",\n action: \"send_channel_message\",\n tool_name: \"SlackCLIAPI.send_channel_message\",\n params: { channel: \"C01234567\", text: \"Release shipped, monitoring now\" },\n },\n});\n\n// SDK twin — repos/sdk/examples/by-app/gmail/send-email.ts\nawait gmail.write.message({\n inputs: { subject: \"Quarterly Update\", body: \"Hello team\", body_type: \"plain\" },\n});\n```\n", "usage": "tools/call execute_zapier_write_action", "signature": "execute_zapier_write_action(action, connection_id?, params?, selected_api, tool_name?)", "aliases": [], "flags": [{"name": "action", "required": true, "type": "string", "description": "Action key to execute. Use inspect_zapier_actions to get exact keys."}, {"name": "connection_id", "required": false, "type": "number | string", "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."}, {"name": "params", "required": false, "type": "Record<string, unknown>", "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`."}, {"name": "selected_api", "required": true, "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."}, {"name": "tool_name", "required": false, "type": "string", "description": "Collision-safe action identifier from inspect_zapier_actions. Pass it whenever available so actions that share the same key resolve correctly."}], "args": [{"name": "action", "required": true, "type": "string", "description": "Action key to execute. Use inspect_zapier_actions to get exact keys."}, {"name": "connection_id", "required": false, "type": "number | string", "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."}, {"name": "params", "required": false, "type": "Record<string, unknown>", "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`."}, {"name": "selected_api", "required": true, "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."}, {"name": "tool_name", "required": false, "type": "string", "description": "Collision-safe action identifier from inspect_zapier_actions. Pass it whenever available so actions that share the same key resolve correctly."}], "examples": [{"title": "Send Slack after resolving channel id", "call": {"selected_api": "SlackCLIAPI", "action": "send_channel_message", "params": {"channel": "C01234567", "text": "Release shipped, monitoring now"}}}], "source_url": "https://docs.zapier.com/mcp/overview/how-tools-work", "source_repo": "zapier/zapier-mcp", "source_path": "hosted:mcp.zapier.com/api/v1/connect", "section": "mcp", "tags": ["execution", "mcp", "meta-tool", "official-14", "write"], "related": ["inspect_zapier_actions", "execute_zapier_read_action", "list_zapier_connections", "enable_zapier_action"], "meta": {"input_schema": {"$schema": "http://json-schema.org/draft-07/schema#", "properties": {"action": {"description": "Action key to execute. Use inspect_zapier_actions to get exact keys.", "type": "string"}, "connection_id": {"anyOf": [{"maximum": 9007199254740991, "minimum": 1, "type": "integer"}, {"minLength": 1, "type": "string"}], "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."}, "params": {"additionalProperties": {}, "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"}, "type": "object"}, "selected_api": {"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.", "type": "string"}, "tool_name": {"description": "Collision-safe action identifier from inspect_zapier_actions. Pass it whenever available so actions that share the same key resolve correctly.", "type": "string"}}, "required": ["selected_api", "action"], "type": "object"}, "output_schema": {"type": "object", "properties": {"results": {"type": "array", "description": "Usually one created/updated object."}, "data": {"type": "array"}, "error": {"type": "string"}}}, "category": "execution", "safety": "write", "bills_tasks": true, "official_14": true, "sdk_equivalent": ["zapier.runAction({actionType:'write'})", "zapier-sdk run-action <app> write <key>", "repos/sdk/examples/by-app/gmail/send-email.ts", "repos/sdk/examples/by-app/slack (channel message)"], "internals": "Same runtime as execute_zapier_read_action but targets create/write operations (`runAction({actionType:'write'})`). Params must uniquely identify recipients/channels/records — resolve IDs via inspect dynamic enums or a prior read. Costs **2 tasks** on success. Irreversible partner-side effects (sent email, created ticket) are not rolled back by Zapier.", "server_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."}, "ingested_at": "2026-08-18T00:42:24.845758+00:00"}
|
||
{"_id": "mcp_function:list_zapier_connections", "kind": "mcp_function", "key": "list_zapier_connections", "title": "list_zapier_connections — List authenticated accounts for an app", "summary": "Lists Zapier connections (OAuth grants) the user owns for one app. Use the returned `connection_id` on execute when the default account is wrong.", "body": "# `list_zapier_connections`\n\n> Lists Zapier connections (OAuth grants) the user owns for one app. Use the returned `connection_id` on execute when the default account is wrong.\n\n## High-level description\n\nLists Zapier connections (OAuth grants) the user owns for one app. Use the returned `connection_id` on execute when the default account is wrong.\n\n## Server description (verbatim)\n\nList 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`, 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, but only show the user their shared connections if they explicitly ask for it. Paginated via `cursor`.\n\n## Internals\n\nReads Zapier's connection store for `selected_api`. Default is owner=me only; `include_shared` adds connections others shared (do not surface those unless the user asks). Paginated (`cursor`, `limit` 1–100, default 20). Same objects the SDK's `findFirstConnection` / `listConnections` return.\n\n## Typed inputs\n\n```ts\ntype Input = {\n cursor?: string; // Pagination cursor from a previous response's `next_cursor`. Omit to fetch the first page.\n include_shared?: boolean; // 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\n limit?: number; // Maximum number of connections to return per page (1-100). Defaults to 20.\n selected_api: string; // 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.\n};\n```\n\nJSON Schema:\n\n```json\n{\n \"$schema\": \"http://json-schema.org/draft-07/schema#\",\n \"properties\": {\n \"cursor\": {\n \"description\": \"Pagination cursor from a previous response's `next_cursor`. Omit to fetch the first page.\",\n \"type\": \"string\"\n },\n \"include_shared\": {\n \"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.\",\n \"type\": \"boolean\"\n },\n \"limit\": {\n \"description\": \"Maximum number of connections to return per page (1-100). Defaults to 20.\",\n \"type\": \"number\"\n },\n \"selected_api\": {\n \"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.\",\n \"type\": \"string\"\n }\n },\n \"required\": [\n \"selected_api\"\n ],\n \"type\": \"object\"\n}\n```\n\n## Outputs\n\nZapier does not publish a formal output JSON Schema. Documented shape:\n\n```json\n{\n \"type\": \"object\",\n \"properties\": {\n \"connections\": {\n \"type\": \"array\",\n \"items\": {\n \"type\": \"object\",\n \"properties\": {\n \"connection_id\": {\n \"type\": [\n \"string\",\n \"integer\"\n ]\n },\n \"title\": {\n \"type\": \"string\",\n \"description\": \"Account label, e.g. work@company.com\"\n },\n \"owner\": {\n \"type\": \"string\"\n },\n \"is_default\": {\n \"type\": \"boolean\"\n },\n \"expired\": {\n \"type\": \"boolean\"\n }\n }\n }\n },\n \"next_cursor\": {\n \"type\": \"string\"\n }\n }\n}\n```\n\n## Safety, billing, category\n\n- Category: `connections`\n- Safety: `read` (writes need explicit user approval)\n- Bills 2 tasks on success: `False`\n- In official 14-tool table: `False`\n\n## Related functions\n\n- `manage_zapier_connections`\n- `inspect_zapier_actions`\n- `execute_zapier_read_action`\n- `execute_zapier_write_action`\n\n## SDK / CLI twins\n\n- `zapier.listConnections`\n- `zapier.findFirstConnection`\n- `zapier-sdk find-first-connection`\n\n## Examples\n\n### Own Gmail accounts\n\n```json\n{\n \"selected_api\": \"GoogleMailV2CLIAPI\"\n}\n```\n\n### Include shared (only if user asked)\n\n```json\n{\n \"selected_api\": \"SlackCLIAPI\",\n \"include_shared\": true,\n \"limit\": 50\n}\n```\n\n## Code\n\n```ts\nconst conns = await client.callTool({\n name: \"list_zapier_connections\",\n arguments: { selected_api: \"GoogleMailV2CLIAPI\" },\n});\n// pick connection_id → pass to execute_* or manage_zapier_connections\n```\n", "usage": "tools/call list_zapier_connections", "signature": "list_zapier_connections(cursor?, include_shared?, limit?, selected_api)", "aliases": [], "flags": [{"name": "cursor", "required": false, "type": "string", "description": "Pagination cursor from a previous response's `next_cursor`. Omit to fetch the first page."}, {"name": "include_shared", "required": false, "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."}, {"name": "limit", "required": false, "type": "number", "description": "Maximum number of connections to return per page (1-100). Defaults to 20."}, {"name": "selected_api", "required": true, "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."}], "args": [{"name": "cursor", "required": false, "type": "string", "description": "Pagination cursor from a previous response's `next_cursor`. Omit to fetch the first page."}, {"name": "include_shared", "required": false, "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."}, {"name": "limit", "required": false, "type": "number", "description": "Maximum number of connections to return per page (1-100). Defaults to 20."}, {"name": "selected_api", "required": true, "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."}], "examples": [{"title": "Own Gmail accounts", "call": {"selected_api": "GoogleMailV2CLIAPI"}}, {"title": "Include shared (only if user asked)", "call": {"selected_api": "SlackCLIAPI", "include_shared": true, "limit": 50}}], "source_url": "https://docs.zapier.com/mcp/overview/how-tools-work", "source_repo": "zapier/zapier-mcp", "source_path": "hosted:mcp.zapier.com/api/v1/connect", "section": "mcp", "tags": ["connections", "extended", "mcp", "meta-tool", "read"], "related": ["manage_zapier_connections", "inspect_zapier_actions", "execute_zapier_read_action", "execute_zapier_write_action"], "meta": {"input_schema": {"$schema": "http://json-schema.org/draft-07/schema#", "properties": {"cursor": {"description": "Pagination cursor from a previous response's `next_cursor`. Omit to fetch the first page.", "type": "string"}, "include_shared": {"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.", "type": "boolean"}, "limit": {"description": "Maximum number of connections to return per page (1-100). Defaults to 20.", "type": "number"}, "selected_api": {"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.", "type": "string"}}, "required": ["selected_api"], "type": "object"}, "output_schema": {"type": "object", "properties": {"connections": {"type": "array", "items": {"type": "object", "properties": {"connection_id": {"type": ["string", "integer"]}, "title": {"type": "string", "description": "Account label, e.g. work@company.com"}, "owner": {"type": "string"}, "is_default": {"type": "boolean"}, "expired": {"type": "boolean"}}}}, "next_cursor": {"type": "string"}}}, "category": "connections", "safety": "read", "bills_tasks": false, "official_14": false, "sdk_equivalent": ["zapier.listConnections", "zapier.findFirstConnection", "zapier-sdk find-first-connection"], "internals": "Reads Zapier's connection store for `selected_api`. Default is owner=me only; `include_shared` adds connections others shared (do not surface those unless the user asks). Paginated (`cursor`, `limit` 1–100, default 20). Same objects the SDK's `findFirstConnection` / `listConnections` return.", "server_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`, 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, but only show the user their shared connections if they explicitly ask for it. Paginated via `cursor`."}, "ingested_at": "2026-08-18T00:42:24.845758+00:00"}
|
||
{"_id": "mcp_function:manage_zapier_connections", "kind": "mcp_function", "key": "manage_zapier_connections", "title": "manage_zapier_connections — Connect a new account or set the default", "summary": "Returns an `auth_url` for the user to complete OAuth, and/or sets which connection is the default for every execute on this app.", "body": "# `manage_zapier_connections`\n\n> Returns an `auth_url` for the user to complete OAuth, and/or sets which connection is the default for every execute on this app.\n\n## High-level description\n\nReturns an `auth_url` for the user to complete OAuth, and/or sets which connection is the default for every execute on this app.\n\n## Server description (verbatim)\n\nManage 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_id, then call this tool again with that connection_id 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.\n\n## Internals\n\nAn app cannot execute until it has a default connection. This tool mints a Zapier-hosted OAuth start URL (same as SDK `get-connection-start-url`) and optionally writes `default_connection_id`. Never invent `selected_api` — Gmail is `GoogleMailV2CLIAPI`, not `GmailCLIAPI`. After the user finishes OAuth, call list_zapier_connections, then call this again with `default_connection_id` if needed.\n\n## Typed inputs\n\n```ts\ntype Input = {\n app_display_name?: string; // Optional human-readable app name (from discover_zapier_actions) used to make the response easier to read.\n default_connection_id?: number | string; // 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 li\n selected_api: string; // 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 constru\n};\n```\n\nJSON Schema:\n\n```json\n{\n \"$schema\": \"http://json-schema.org/draft-07/schema#\",\n \"properties\": {\n \"app_display_name\": {\n \"description\": \"Optional human-readable app name (from discover_zapier_actions) used to make the response easier to read.\",\n \"type\": \"string\"\n },\n \"default_connection_id\": {\n \"anyOf\": [\n {\n \"maximum\": 9007199254740991,\n \"minimum\": 1,\n \"type\": \"integer\"\n },\n {\n \"minLength\": 1,\n \"type\": \"string\"\n }\n ],\n \"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.\"\n },\n \"selected_api\": {\n \"description\": \"The exact selectedApi ID of the app (e.g. 'SlackCLIAPI'). Must come verbatim from discover_zapier_actions (or the action-listing tool) \\u2014 do not guess or construct it (e.g. Gmail is 'GoogleMailV2CLIAPI', not 'GmailCLIAPI').\",\n \"type\": \"string\"\n }\n },\n \"required\": [\n \"selected_api\"\n ],\n \"type\": \"object\"\n}\n```\n\n## Outputs\n\nZapier does not publish a formal output JSON Schema. Documented shape:\n\n```json\n{\n \"type\": \"object\",\n \"properties\": {\n \"auth_url\": {\n \"type\": \"string\",\n \"description\": \"Open in a browser; human must authorize.\"\n },\n \"default_connection_id\": {\n \"type\": [\n \"string\",\n \"integer\"\n ]\n },\n \"selected_api\": {\n \"type\": \"string\"\n }\n }\n}\n```\n\n## Safety, billing, category\n\n- Category: `connections`\n- Safety: `config` (writes need explicit user approval)\n- Bills 2 tasks on success: `False`\n- In official 14-tool table: `False`\n\n## Related functions\n\n- `list_zapier_connections`\n- `discover_zapier_actions`\n- `enable_zapier_action`\n\n## SDK / CLI twins\n\n- `zapier-sdk create-connection`\n- `zapier-sdk get-connection-start-url`\n- `zapier-sdk wait-for-new-connection`\n\n## Examples\n\n### Get an auth URL\n\n```json\n{\n \"selected_api\": \"GoogleMailV2CLIAPI\",\n \"app_display_name\": \"Gmail\"\n}\n```\n\n### Set default after user connects\n\n```json\n{\n \"selected_api\": \"GoogleMailV2CLIAPI\",\n \"app_display_name\": \"Gmail\",\n \"default_connection_id\": 123456\n}\n```\n\n## Code\n\n```ts\nconst start = await client.callTool({\n name: \"manage_zapier_connections\",\n arguments: { selected_api: \"GoogleMailV2CLIAPI\", app_display_name: \"Gmail\" },\n});\n// show start.auth_url to the user, wait for \"done\"\nconst listed = await client.callTool({\n name: \"list_zapier_connections\",\n arguments: { selected_api: \"GoogleMailV2CLIAPI\" },\n});\n```\n", "usage": "tools/call manage_zapier_connections", "signature": "manage_zapier_connections(app_display_name?, default_connection_id?, selected_api)", "aliases": [], "flags": [{"name": "app_display_name", "required": false, "type": "string", "description": "Optional human-readable app name (from discover_zapier_actions) used to make the response easier to read."}, {"name": "default_connection_id", "required": false, "type": "number | string", "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."}, {"name": "selected_api", "required": true, "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')."}], "args": [{"name": "app_display_name", "required": false, "type": "string", "description": "Optional human-readable app name (from discover_zapier_actions) used to make the response easier to read."}, {"name": "default_connection_id", "required": false, "type": "number | string", "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."}, {"name": "selected_api", "required": true, "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')."}], "examples": [{"title": "Get an auth URL", "call": {"selected_api": "GoogleMailV2CLIAPI", "app_display_name": "Gmail"}}, {"title": "Set default after user connects", "call": {"selected_api": "GoogleMailV2CLIAPI", "app_display_name": "Gmail", "default_connection_id": 123456}}], "source_url": "https://docs.zapier.com/mcp/overview/how-tools-work", "source_repo": "zapier/zapier-mcp", "source_path": "hosted:mcp.zapier.com/api/v1/connect", "section": "mcp", "tags": ["config", "connections", "extended", "mcp", "meta-tool"], "related": ["list_zapier_connections", "discover_zapier_actions", "enable_zapier_action"], "meta": {"input_schema": {"$schema": "http://json-schema.org/draft-07/schema#", "properties": {"app_display_name": {"description": "Optional human-readable app name (from discover_zapier_actions) used to make the response easier to read.", "type": "string"}, "default_connection_id": {"anyOf": [{"maximum": 9007199254740991, "minimum": 1, "type": "integer"}, {"minLength": 1, "type": "string"}], "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."}, "selected_api": {"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').", "type": "string"}}, "required": ["selected_api"], "type": "object"}, "output_schema": {"type": "object", "properties": {"auth_url": {"type": "string", "description": "Open in a browser; human must authorize."}, "default_connection_id": {"type": ["string", "integer"]}, "selected_api": {"type": "string"}}}, "category": "connections", "safety": "config", "bills_tasks": false, "official_14": false, "sdk_equivalent": ["zapier-sdk create-connection", "zapier-sdk get-connection-start-url", "zapier-sdk wait-for-new-connection"], "internals": "An app cannot execute until it has a default connection. This tool mints a Zapier-hosted OAuth start URL (same as SDK `get-connection-start-url`) and optionally writes `default_connection_id`. Never invent `selected_api` — Gmail is `GoogleMailV2CLIAPI`, not `GmailCLIAPI`. After the user finishes OAuth, call list_zapier_connections, then call this again with `default_connection_id` if needed.", "server_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_id, then call this tool again with that connection_id 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."}, "ingested_at": "2026-08-18T00:42:24.845758+00:00"}
|
||
{"_id": "mcp_function:send_feedback", "kind": "mcp_function", "key": "send_feedback", "title": "send_feedback — Send product feedback to Zapier", "summary": "Files a short note (max 2000 chars) plus a thumbs-up/down flag with the Zapier MCP team.", "body": "# `send_feedback`\n\n> Files a short note (max 2000 chars) plus a thumbs-up/down flag with the Zapier MCP team.\n\n## High-level description\n\nFiles a short note (max 2000 chars) plus a thumbs-up/down flag with the Zapier MCP team.\n\n## Server description (verbatim)\n\nSend feedback about your experience with Zapier MCP to the Zapier team.\n\n## Internals\n\nPosts to Zapier's MCP feedback inbox. Does not change tools or connections.\n\n## Typed inputs\n\n```ts\ntype Input = {\n feedback: string; // Feedback message to send to the Zapier MCP team\n feedback_positive: boolean; // Whether this is positive feedback (true) or negative (false)\n};\n```\n\nJSON Schema:\n\n```json\n{\n \"$schema\": \"http://json-schema.org/draft-07/schema#\",\n \"properties\": {\n \"feedback\": {\n \"description\": \"Feedback message to send to the Zapier MCP team\",\n \"maxLength\": 2000,\n \"minLength\": 1,\n \"type\": \"string\"\n },\n \"feedback_positive\": {\n \"description\": \"Whether this is positive feedback (true) or negative (false)\",\n \"type\": \"boolean\"\n }\n },\n \"required\": [\n \"feedback\",\n \"feedback_positive\"\n ],\n \"type\": \"object\"\n}\n```\n\n## Outputs\n\nZapier does not publish a formal output JSON Schema. Documented shape:\n\n```json\n{\n \"type\": \"object\",\n \"properties\": {\n \"ok\": {\n \"type\": \"boolean\"\n }\n }\n}\n```\n\n## Safety, billing, category\n\n- Category: `feedback`\n- Safety: `write` (writes need explicit user approval)\n- Bills 2 tasks on success: `False`\n- In official 14-tool table: `True`\n\n## Related functions\n\n\n## SDK / CLI twins\n\n- `N/A`\n\n## Examples\n\n### Positive\n\n```json\n{\n \"feedback\": \"Dynamic enum pagination on Slack channels is great.\",\n \"feedback_positive\": true\n}\n```\n\n## Code\n\n```ts\nawait client.callTool({\n name: \"send_feedback\",\n arguments: {\n feedback: \"Please document output schemas for execute_zapier_read_action.\",\n feedback_positive: False,\n },\n});\n```\n", "usage": "tools/call send_feedback", "signature": "send_feedback(feedback, feedback_positive)", "aliases": [], "flags": [{"name": "feedback", "required": true, "type": "string", "description": "Feedback message to send to the Zapier MCP team"}, {"name": "feedback_positive", "required": true, "type": "boolean", "description": "Whether this is positive feedback (true) or negative (false)"}], "args": [{"name": "feedback", "required": true, "type": "string", "description": "Feedback message to send to the Zapier MCP team"}, {"name": "feedback_positive", "required": true, "type": "boolean", "description": "Whether this is positive feedback (true) or negative (false)"}], "examples": [{"title": "Positive", "call": {"feedback": "Dynamic enum pagination on Slack channels is great.", "feedback_positive": true}}], "source_url": "https://docs.zapier.com/mcp/overview/how-tools-work", "source_repo": "zapier/zapier-mcp", "source_path": "hosted:mcp.zapier.com/api/v1/connect", "section": "mcp", "tags": ["feedback", "mcp", "meta-tool", "official-14", "write"], "related": [], "meta": {"input_schema": {"$schema": "http://json-schema.org/draft-07/schema#", "properties": {"feedback": {"description": "Feedback message to send to the Zapier MCP team", "maxLength": 2000, "minLength": 1, "type": "string"}, "feedback_positive": {"description": "Whether this is positive feedback (true) or negative (false)", "type": "boolean"}}, "required": ["feedback", "feedback_positive"], "type": "object"}, "output_schema": {"type": "object", "properties": {"ok": {"type": "boolean"}}}, "category": "feedback", "safety": "write", "bills_tasks": false, "official_14": true, "sdk_equivalent": ["N/A"], "internals": "Posts to Zapier's MCP feedback inbox. Does not change tools or connections.", "server_description": "Send feedback about your experience with Zapier MCP to the Zapier team."}, "ingested_at": "2026-08-18T00:42:24.845758+00:00"}
|
||
{"_id": "mcp_function:auto_provision_mcp", "kind": "mcp_function", "key": "auto_provision_mcp", "title": "auto_provision_mcp — Auto-enable actions from existing Zapier connections", "summary": "One-shot setup. Finds apps the user already connected in Zapier, enables actions, binds auth. Runs automatically on OAuth connect.", "body": "# `auto_provision_mcp`\n\n> One-shot setup. Finds apps the user already connected in Zapier, enables actions, binds auth. Runs automatically on OAuth connect.\n\n## High-level description\n\nOne-shot setup. Finds apps the user already connected in Zapier, enables actions, binds auth. Runs automatically on OAuth connect.\n\n## Server description (verbatim)\n\nAutomatically 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.\n\n## Internals\n\nScans the signed-in user's own Zapier connections (not connections shared by teammates), enables a default action set per app, and returns top Zap titles so the agent can suggest Skills. Idempotent enough to re-run on a fresh/empty server. Does not pull other users' apps in a shared workspace.\n\n## Typed inputs\n\n```ts\ntype Input = Record<string, never>; // no arguments\n```\n\nJSON Schema:\n\n```json\n{\n \"$schema\": \"http://json-schema.org/draft-07/schema#\",\n \"properties\": {},\n \"type\": \"object\"\n}\n```\n\n## Outputs\n\nZapier does not publish a formal output JSON Schema. Documented shape:\n\n```json\n{\n \"type\": \"object\",\n \"properties\": {\n \"enabled_apps\": {\n \"type\": \"array\"\n },\n \"enabled_actions\": {\n \"type\": \"array\"\n },\n \"zap_titles\": {\n \"type\": \"array\",\n \"description\": \"User's popular Zap names \\u2014 seed for create_zapier_skill.\"\n }\n }\n}\n```\n\n## Safety, billing, category\n\n- Category: `action-management`\n- Safety: `config` (writes need explicit user approval)\n- Bills 2 tasks on success: `False`\n- In official 14-tool table: `True`\n\n## Related functions\n\n- `inspect_zapier_actions`\n- `enable_zapier_action`\n- `list_zapier_skills`\n- `create_zapier_skill`\n\n## SDK / CLI twins\n\n- `N/A — MCP-server bootstrap only`\n\n## Examples\n\n### Empty server\n\n```json\n{}\n```\n\n## Code\n\n```ts\nawait client.callTool({ name: \"auto_provision_mcp\", arguments: {} });\nawait client.callTool({ name: \"inspect_zapier_actions\", arguments: {} });\n```\n", "usage": "tools/call auto_provision_mcp", "signature": "auto_provision_mcp()", "aliases": [], "flags": [], "args": [], "examples": [{"title": "Empty server", "call": {}}], "source_url": "https://docs.zapier.com/mcp/overview/how-tools-work", "source_repo": "zapier/zapier-mcp", "source_path": "hosted:mcp.zapier.com/api/v1/connect", "section": "mcp", "tags": ["action-management", "config", "mcp", "meta-tool", "official-14"], "related": ["inspect_zapier_actions", "enable_zapier_action", "list_zapier_skills", "create_zapier_skill"], "meta": {"input_schema": {"$schema": "http://json-schema.org/draft-07/schema#", "properties": {}, "type": "object"}, "output_schema": {"type": "object", "properties": {"enabled_apps": {"type": "array"}, "enabled_actions": {"type": "array"}, "zap_titles": {"type": "array", "description": "User's popular Zap names — seed for create_zapier_skill."}}}, "category": "action-management", "safety": "config", "bills_tasks": false, "official_14": true, "sdk_equivalent": ["N/A — MCP-server bootstrap only"], "internals": "Scans the signed-in user's own Zapier connections (not connections shared by teammates), enables a default action set per app, and returns top Zap titles so the agent can suggest Skills. Idempotent enough to re-run on a fresh/empty server. Does not pull other users' apps in a shared workspace.", "server_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."}, "ingested_at": "2026-08-18T00:42:24.845758+00:00"}
|
||
{"_id": "mcp_function:list_zapier_skills", "kind": "mcp_function", "key": "list_zapier_skills", "title": "list_zapier_skills — List saved Zapier Skills", "summary": "Catalog of reusable Markdown workflow instructions, including packaged `zapier:onboarding`.", "body": "# `list_zapier_skills`\n\n> Catalog of reusable Markdown workflow instructions, including packaged `zapier:onboarding`.\n\n## High-level description\n\nCatalog of reusable Markdown workflow instructions, including packaged `zapier:onboarding`.\n\n## Server description (verbatim)\n\nLists 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.\n\n## Internals\n\nReads the Skills store for this MCP account (also visible in the Skills tab at mcp.zapier.com). Names are case-insensitive. Catalog is dynamic — always re-list. Pair with get_zapier_skill to load body.\n\n## Typed inputs\n\n```ts\ntype Input = Record<string, never>; // no arguments\n```\n\nJSON Schema:\n\n```json\n{\n \"$schema\": \"http://json-schema.org/draft-07/schema#\",\n \"properties\": {},\n \"type\": \"object\"\n}\n```\n\n## Outputs\n\nZapier does not publish a formal output JSON Schema. Documented shape:\n\n```json\n{\n \"type\": \"object\",\n \"properties\": {\n \"skills\": {\n \"type\": \"array\",\n \"items\": {\n \"type\": \"object\",\n \"properties\": {\n \"name\": {\n \"type\": \"string\"\n },\n \"description\": {\n \"type\": \"string\"\n }\n }\n }\n }\n }\n}\n```\n\n## Safety, billing, category\n\n- Category: `skills`\n- Safety: `read` (writes need explicit user approval)\n- Bills 2 tasks on success: `False`\n- In official 14-tool table: `True`\n\n## Related functions\n\n- `get_zapier_skill`\n- `create_zapier_skill`\n- `update_zapier_skill`\n- `delete_zapier_skill`\n\n## SDK / CLI twins\n\n- `N/A — MCP Skills, not Platform CLI skills`\n\n## Examples\n\n### See what is saved\n\n```json\n{}\n```\n\n## Code\n\n```ts\nawait client.callTool({ name: \"list_zapier_skills\", arguments: {} });\n```\n", "usage": "tools/call list_zapier_skills", "signature": "list_zapier_skills()", "aliases": [], "flags": [], "args": [], "examples": [{"title": "See what is saved", "call": {}}], "source_url": "https://docs.zapier.com/mcp/overview/how-tools-work", "source_repo": "zapier/zapier-mcp", "source_path": "hosted:mcp.zapier.com/api/v1/connect", "section": "mcp", "tags": ["mcp", "meta-tool", "official-14", "read", "skills"], "related": ["get_zapier_skill", "create_zapier_skill", "update_zapier_skill", "delete_zapier_skill"], "meta": {"input_schema": {"$schema": "http://json-schema.org/draft-07/schema#", "properties": {}, "type": "object"}, "output_schema": {"type": "object", "properties": {"skills": {"type": "array", "items": {"type": "object", "properties": {"name": {"type": "string"}, "description": {"type": "string"}}}}}}, "category": "skills", "safety": "read", "bills_tasks": false, "official_14": true, "sdk_equivalent": ["N/A — MCP Skills, not Platform CLI skills"], "internals": "Reads the Skills store for this MCP account (also visible in the Skills tab at mcp.zapier.com). Names are case-insensitive. Catalog is dynamic — always re-list. Pair with get_zapier_skill to load body.", "server_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."}, "ingested_at": "2026-08-18T00:42:24.845758+00:00"}
|
||
{"_id": "mcp_function:get_zapier_skill", "kind": "mcp_function", "key": "get_zapier_skill", "title": "get_zapier_skill — Load a Skill's full Markdown", "summary": "Returns the skill definition plus any appended execution instructions. Follow it.", "body": "# `get_zapier_skill`\n\n> Returns the skill definition plus any appended execution instructions. Follow it.\n\n## High-level description\n\nReturns the skill definition plus any appended execution instructions. Follow it.\n\n## Server description (verbatim)\n\nReturns 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.\n\n## Internals\n\nFetches one skill by exact `name`. Packaged skill `zapier:onboarding` walks first-run setup (official first-workflow tutorial). Body may contain `ZapierAction[app:action](params)` references the agent should execute via inspect + execute_*.\n\n## Typed inputs\n\n```ts\ntype Input = {\n name: string; // The exact name of the skill to retrieve\n};\n```\n\nJSON Schema:\n\n```json\n{\n \"$schema\": \"http://json-schema.org/draft-07/schema#\",\n \"properties\": {\n \"name\": {\n \"description\": \"The exact name of the skill to retrieve\",\n \"type\": \"string\"\n }\n },\n \"required\": [\n \"name\"\n ],\n \"type\": \"object\"\n}\n```\n\n## Outputs\n\nZapier does not publish a formal output JSON Schema. Documented shape:\n\n```json\n{\n \"type\": \"object\",\n \"properties\": {\n \"name\": {\n \"type\": \"string\"\n },\n \"description\": {\n \"type\": \"string\"\n },\n \"skillDefinition\": {\n \"type\": \"string\",\n \"description\": \"Full Markdown.\"\n },\n \"execution_instructions\": {\n \"type\": \"string\"\n }\n }\n}\n```\n\n## Safety, billing, category\n\n- Category: `skills`\n- Safety: `read` (writes need explicit user approval)\n- Bills 2 tasks on success: `False`\n- In official 14-tool table: `True`\n\n## Related functions\n\n- `list_zapier_skills`\n- `execute_zapier_read_action`\n- `execute_zapier_write_action`\n\n## SDK / CLI twins\n\n- `N/A`\n\n## Examples\n\n### Official onboarding (from Zapier docs)\n\n```json\n{\n \"name\": \"zapier:onboarding\"\n}\n```\n\n## Code\n\n```ts\nawait client.callTool({\n name: \"get_zapier_skill\",\n arguments: { name: \"zapier:onboarding\" },\n});\n// then follow the returned Markdown\n```\n", "usage": "tools/call get_zapier_skill", "signature": "get_zapier_skill(name)", "aliases": [], "flags": [{"name": "name", "required": true, "type": "string", "description": "The exact name of the skill to retrieve"}], "args": [{"name": "name", "required": true, "type": "string", "description": "The exact name of the skill to retrieve"}], "examples": [{"title": "Official onboarding (from Zapier docs)", "call": {"name": "zapier:onboarding"}}], "source_url": "https://docs.zapier.com/mcp/overview/how-tools-work", "source_repo": "zapier/zapier-mcp", "source_path": "hosted:mcp.zapier.com/api/v1/connect", "section": "mcp", "tags": ["mcp", "meta-tool", "official-14", "read", "skills"], "related": ["list_zapier_skills", "execute_zapier_read_action", "execute_zapier_write_action"], "meta": {"input_schema": {"$schema": "http://json-schema.org/draft-07/schema#", "properties": {"name": {"description": "The exact name of the skill to retrieve", "type": "string"}}, "required": ["name"], "type": "object"}, "output_schema": {"type": "object", "properties": {"name": {"type": "string"}, "description": {"type": "string"}, "skillDefinition": {"type": "string", "description": "Full Markdown."}, "execution_instructions": {"type": "string"}}}, "category": "skills", "safety": "read", "bills_tasks": false, "official_14": true, "sdk_equivalent": ["N/A"], "internals": "Fetches one skill by exact `name`. Packaged skill `zapier:onboarding` walks first-run setup (official first-workflow tutorial). Body may contain `ZapierAction[app:action](params)` references the agent should execute via inspect + execute_*.", "server_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."}, "ingested_at": "2026-08-18T00:42:24.845758+00:00"}
|
||
{"_id": "mcp_function:create_zapier_skill", "kind": "mcp_function", "key": "create_zapier_skill", "title": "create_zapier_skill — Save a reusable multi-step Skill", "summary": "Persists a Markdown playbook with locked ZapierAction references. Resolve IDs and schemas before writing the definition.", "body": "# `create_zapier_skill`\n\n> Persists a Markdown playbook with locked ZapierAction references. Resolve IDs and schemas before writing the definition.\n\n## High-level description\n\nPersists a Markdown playbook with locked ZapierAction references. Resolve IDs and schemas before writing the definition.\n\n## Server description (verbatim)\n\nSaves 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.\n\n## Internals\n\nStores Markdown in the Skills tab. Convention: maximize quoted (locked) params so runtime does not re-discover Slack user IDs etc. Action keys must come from inspect/enable — the description still says `list_enabled_zapier_actions`, which on the current server is `inspect_zapier_actions`. Format: `ZapierAction[app:action](param: \"locked\", runtime_param)`.\n\n## Typed inputs\n\n```ts\ntype Input = {\n description: string; // One-sentence description of what this skill does\n name: string; // Short, unique name for this skill (e.g. 'create jira ticket', 'daily standup'). Names are case-insensitive.\n skillDefinition: string; // Full markdown skill definition.\n};\n```\n\nJSON Schema:\n\n```json\n{\n \"$schema\": \"http://json-schema.org/draft-07/schema#\",\n \"properties\": {\n \"description\": {\n \"description\": \"One-sentence description of what this skill does\",\n \"maxLength\": 500,\n \"minLength\": 1,\n \"type\": \"string\"\n },\n \"name\": {\n \"description\": \"Short, unique name for this skill (e.g. 'create jira ticket', 'daily standup'). Names are case-insensitive.\",\n \"maxLength\": 200,\n \"minLength\": 1,\n \"type\": \"string\"\n },\n \"skillDefinition\": {\n \"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 \\u2014 to get exact action keys and parameter schemas.\\n2. User-specific configuration gathered \\u2014 project keys, channel names, default assignees, recurring values.\\n3. Ambiguities resolved \\u2014 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 \\u2014 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' \\u2014 all static IDs, names, keys discovered or confirmed during creation\\n- '## Actions' \\u2014 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' \\u2014 numbered steps for execution\\n- '## Constraints' \\u2014 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.\",\n \"maxLength\": 100000,\n \"minLength\": 1,\n \"type\": \"string\"\n }\n },\n \"required\": [\n \"name\",\n \"description\",\n \"skillDefinition\"\n ],\n \"type\": \"object\"\n}\n```\n\n## Outputs\n\nZapier does not publish a formal output JSON Schema. Documented shape:\n\n```json\n{\n \"type\": \"object\",\n \"properties\": {\n \"name\": {\n \"type\": \"string\"\n },\n \"created\": {\n \"type\": \"boolean\"\n }\n }\n}\n```\n\n## Safety, billing, category\n\n- Category: `skills`\n- Safety: `config` (writes need explicit user approval)\n- Bills 2 tasks on success: `False`\n- In official 14-tool table: `True`\n\n## Related functions\n\n- `inspect_zapier_actions`\n- `get_zapier_skill`\n- `update_zapier_skill`\n- `list_zapier_skills`\n\n## SDK / CLI twins\n\n- `N/A`\n\n## Examples\n\n### Daily standup poster\n\n```json\n{\n \"name\": \"daily standup\",\n \"description\": \"Post yesterday/today/blockers to #standup\",\n \"skillDefinition\": \"# Daily standup\\\\n\\\\n## Validated fixed values\\\\n- channel: C0STANDUP\\\\n\\\\n## Actions\\\\nZapierAction[SlackCLIAPI:send_channel_message](channel: \\\"C0STANDUP\\\", text)\\\\n\\\\n## Runtime instructions\\\\n1. Ask for yesterday/today/blockers\\\\n2. Send\\\\n\"\n}\n```\n\n## Code\n\n```ts\nawait client.callTool({\n name: \"create_zapier_skill\",\n arguments: {\n name: \"daily standup\",\n description: \"Post yesterday/today/blockers to #standup\",\n skillDefinition: \"# Daily standup\\n...\",\n },\n});\n```\n", "usage": "tools/call create_zapier_skill", "signature": "create_zapier_skill(description, name, skillDefinition)", "aliases": [], "flags": [{"name": "description", "required": true, "type": "string", "description": "One-sentence description of what this skill does"}, {"name": "name", "required": true, "type": "string", "description": "Short, unique name for this skill (e.g. 'create jira ticket', 'daily standup'). Names are case-insensitive."}, {"name": "skillDefinition", "required": true, "type": "string", "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."}], "args": [{"name": "description", "required": true, "type": "string", "description": "One-sentence description of what this skill does"}, {"name": "name", "required": true, "type": "string", "description": "Short, unique name for this skill (e.g. 'create jira ticket', 'daily standup'). Names are case-insensitive."}, {"name": "skillDefinition", "required": true, "type": "string", "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."}], "examples": [{"title": "Daily standup poster", "call": {"name": "daily standup", "description": "Post yesterday/today/blockers to #standup", "skillDefinition": "# Daily standup\\n\\n## Validated fixed values\\n- channel: C0STANDUP\\n\\n## Actions\\nZapierAction[SlackCLIAPI:send_channel_message](channel: \"C0STANDUP\", text)\\n\\n## Runtime instructions\\n1. Ask for yesterday/today/blockers\\n2. Send\\n"}}], "source_url": "https://docs.zapier.com/mcp/overview/how-tools-work", "source_repo": "zapier/zapier-mcp", "source_path": "hosted:mcp.zapier.com/api/v1/connect", "section": "mcp", "tags": ["config", "mcp", "meta-tool", "official-14", "skills"], "related": ["inspect_zapier_actions", "get_zapier_skill", "update_zapier_skill", "list_zapier_skills"], "meta": {"input_schema": {"$schema": "http://json-schema.org/draft-07/schema#", "properties": {"description": {"description": "One-sentence description of what this skill does", "maxLength": 500, "minLength": 1, "type": "string"}, "name": {"description": "Short, unique name for this skill (e.g. 'create jira ticket', 'daily standup'). Names are case-insensitive.", "maxLength": 200, "minLength": 1, "type": "string"}, "skillDefinition": {"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.", "maxLength": 100000, "minLength": 1, "type": "string"}}, "required": ["name", "description", "skillDefinition"], "type": "object"}, "output_schema": {"type": "object", "properties": {"name": {"type": "string"}, "created": {"type": "boolean"}}}, "category": "skills", "safety": "config", "bills_tasks": false, "official_14": true, "sdk_equivalent": ["N/A"], "internals": "Stores Markdown in the Skills tab. Convention: maximize quoted (locked) params so runtime does not re-discover Slack user IDs etc. Action keys must come from inspect/enable — the description still says `list_enabled_zapier_actions`, which on the current server is `inspect_zapier_actions`. Format: `ZapierAction[app:action](param: \"locked\", runtime_param)`.", "server_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."}, "ingested_at": "2026-08-18T00:42:24.845758+00:00"}
|
||
{"_id": "mcp_function:update_zapier_skill", "kind": "mcp_function", "key": "update_zapier_skill", "title": "update_zapier_skill — Update a Skill's description or Markdown", "summary": "Patch an existing skill. `name` required; other fields optional.", "body": "# `update_zapier_skill`\n\n> Patch an existing skill. `name` required; other fields optional.\n\n## High-level description\n\nPatch an existing skill. `name` required; other fields optional.\n\n## Server description (verbatim)\n\nUpdate an existing Zapier Skill's description or content. Use when the user wants to refine a skill, fix an issue, or add new instructions.\n\n## Internals\n\nOverwrites provided fields only. Same ZapierAction syntax as create.\n\n## Typed inputs\n\n```ts\ntype Input = {\n description?: string; // Updated one-sentence description (optional)\n name: string; // The exact name of the skill to update\n skillDefinition?: string; // Updated full markdown skill definition (optional). Use ZapierAction[app:action](params) format for action references.\n};\n```\n\nJSON Schema:\n\n```json\n{\n \"$schema\": \"http://json-schema.org/draft-07/schema#\",\n \"properties\": {\n \"description\": {\n \"description\": \"Updated one-sentence description (optional)\",\n \"maxLength\": 500,\n \"minLength\": 1,\n \"type\": \"string\"\n },\n \"name\": {\n \"description\": \"The exact name of the skill to update\",\n \"minLength\": 1,\n \"type\": \"string\"\n },\n \"skillDefinition\": {\n \"description\": \"Updated full markdown skill definition (optional). Use ZapierAction[app:action](params) format for action references.\",\n \"maxLength\": 100000,\n \"minLength\": 1,\n \"type\": \"string\"\n }\n },\n \"required\": [\n \"name\"\n ],\n \"type\": \"object\"\n}\n```\n\n## Outputs\n\nZapier does not publish a formal output JSON Schema. Documented shape:\n\n```json\n{\n \"type\": \"object\",\n \"properties\": {\n \"name\": {\n \"type\": \"string\"\n },\n \"updated\": {\n \"type\": \"boolean\"\n }\n }\n}\n```\n\n## Safety, billing, category\n\n- Category: `skills`\n- Safety: `config` (writes need explicit user approval)\n- Bills 2 tasks on success: `False`\n- In official 14-tool table: `True`\n\n## Related functions\n\n- `get_zapier_skill`\n- `create_zapier_skill`\n- `delete_zapier_skill`\n\n## SDK / CLI twins\n\n- `N/A`\n\n## Examples\n\n### Tighten description\n\n```json\n{\n \"name\": \"daily standup\",\n \"description\": \"Post standup to #standup only\"\n}\n```\n\n## Code\n\n```ts\nawait client.callTool({\n name: \"update_zapier_skill\",\n arguments: { name: \"daily standup\", description: \"Post standup to #standup only\" },\n});\n```\n", "usage": "tools/call update_zapier_skill", "signature": "update_zapier_skill(description?, name, skillDefinition?)", "aliases": [], "flags": [{"name": "description", "required": false, "type": "string", "description": "Updated one-sentence description (optional)"}, {"name": "name", "required": true, "type": "string", "description": "The exact name of the skill to update"}, {"name": "skillDefinition", "required": false, "type": "string", "description": "Updated full markdown skill definition (optional). Use ZapierAction[app:action](params) format for action references."}], "args": [{"name": "description", "required": false, "type": "string", "description": "Updated one-sentence description (optional)"}, {"name": "name", "required": true, "type": "string", "description": "The exact name of the skill to update"}, {"name": "skillDefinition", "required": false, "type": "string", "description": "Updated full markdown skill definition (optional). Use ZapierAction[app:action](params) format for action references."}], "examples": [{"title": "Tighten description", "call": {"name": "daily standup", "description": "Post standup to #standup only"}}], "source_url": "https://docs.zapier.com/mcp/overview/how-tools-work", "source_repo": "zapier/zapier-mcp", "source_path": "hosted:mcp.zapier.com/api/v1/connect", "section": "mcp", "tags": ["config", "mcp", "meta-tool", "official-14", "skills"], "related": ["get_zapier_skill", "create_zapier_skill", "delete_zapier_skill"], "meta": {"input_schema": {"$schema": "http://json-schema.org/draft-07/schema#", "properties": {"description": {"description": "Updated one-sentence description (optional)", "maxLength": 500, "minLength": 1, "type": "string"}, "name": {"description": "The exact name of the skill to update", "minLength": 1, "type": "string"}, "skillDefinition": {"description": "Updated full markdown skill definition (optional). Use ZapierAction[app:action](params) format for action references.", "maxLength": 100000, "minLength": 1, "type": "string"}}, "required": ["name"], "type": "object"}, "output_schema": {"type": "object", "properties": {"name": {"type": "string"}, "updated": {"type": "boolean"}}}, "category": "skills", "safety": "config", "bills_tasks": false, "official_14": true, "sdk_equivalent": ["N/A"], "internals": "Overwrites provided fields only. Same ZapierAction syntax as create.", "server_description": "Update an existing Zapier Skill's description or content. Use when the user wants to refine a skill, fix an issue, or add new instructions."}, "ingested_at": "2026-08-18T00:42:24.845758+00:00"}
|
||
{"_id": "mcp_function:delete_zapier_skill", "kind": "mcp_function", "key": "delete_zapier_skill", "title": "delete_zapier_skill — Permanently delete a Skill", "summary": "Removes a saved skill by exact name. Cannot be undone.", "body": "# `delete_zapier_skill`\n\n> Removes a saved skill by exact name. Cannot be undone.\n\n## High-level description\n\nRemoves a saved skill by exact name. Cannot be undone.\n\n## Server description (verbatim)\n\nPermanently delete a Zapier Skill by name.\n\n## Internals\n\nDeletes the Skills-tab document. Does not disable app actions.\n\n## Typed inputs\n\n```ts\ntype Input = {\n name: string; // The exact name of the skill to delete\n};\n```\n\nJSON Schema:\n\n```json\n{\n \"$schema\": \"http://json-schema.org/draft-07/schema#\",\n \"properties\": {\n \"name\": {\n \"description\": \"The exact name of the skill to delete\",\n \"minLength\": 1,\n \"type\": \"string\"\n }\n },\n \"required\": [\n \"name\"\n ],\n \"type\": \"object\"\n}\n```\n\n## Outputs\n\nZapier does not publish a formal output JSON Schema. Documented shape:\n\n```json\n{\n \"type\": \"object\",\n \"properties\": {\n \"name\": {\n \"type\": \"string\"\n },\n \"deleted\": {\n \"type\": \"boolean\"\n }\n }\n}\n```\n\n## Safety, billing, category\n\n- Category: `skills`\n- Safety: `config` (writes need explicit user approval)\n- Bills 2 tasks on success: `False`\n- In official 14-tool table: `True`\n\n## Related functions\n\n- `list_zapier_skills`\n- `get_zapier_skill`\n\n## SDK / CLI twins\n\n- `N/A`\n\n## Examples\n\n### Remove\n\n```json\n{\n \"name\": \"daily standup\"\n}\n```\n\n## Code\n\n```ts\nawait client.callTool({\n name: \"delete_zapier_skill\",\n arguments: { name: \"daily standup\" },\n});\n```\n", "usage": "tools/call delete_zapier_skill", "signature": "delete_zapier_skill(name)", "aliases": [], "flags": [{"name": "name", "required": true, "type": "string", "description": "The exact name of the skill to delete"}], "args": [{"name": "name", "required": true, "type": "string", "description": "The exact name of the skill to delete"}], "examples": [{"title": "Remove", "call": {"name": "daily standup"}}], "source_url": "https://docs.zapier.com/mcp/overview/how-tools-work", "source_repo": "zapier/zapier-mcp", "source_path": "hosted:mcp.zapier.com/api/v1/connect", "section": "mcp", "tags": ["config", "mcp", "meta-tool", "official-14", "skills"], "related": ["list_zapier_skills", "get_zapier_skill"], "meta": {"input_schema": {"$schema": "http://json-schema.org/draft-07/schema#", "properties": {"name": {"description": "The exact name of the skill to delete", "minLength": 1, "type": "string"}}, "required": ["name"], "type": "object"}, "output_schema": {"type": "object", "properties": {"name": {"type": "string"}, "deleted": {"type": "boolean"}}}, "category": "skills", "safety": "config", "bills_tasks": false, "official_14": true, "sdk_equivalent": ["N/A"], "internals": "Deletes the Skills-tab document. Does not disable app actions.", "server_description": "Permanently delete a Zapier Skill by name."}, "ingested_at": "2026-08-18T00:42:24.845758+00:00"}
|
||
{"_id": "mcp_function:write_code_action", "kind": "mcp_function", "key": "write_code_action", "title": "write_code_action — Generate a sandboxed custom code action", "summary": "When no built-in action exists, Zapier generates code against the app's API and runs it with the user's existing connection. Rolling out.", "body": "# `write_code_action`\n\n> When no built-in action exists, Zapier generates code against the app's API and runs it with the user's existing connection. Rolling out.\n\n## High-level description\n\nWhen no built-in action exists, Zapier generates code against the app's API and runs it with the user's existing connection. Rolling out.\n\n## Server description (verbatim)\n\nCreate 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. 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.\n\n## Internals\n\nCreates/replaces a named custom action on this server. Zapier generates code from `requirements` and executes later calls in a secure sandbox with the app's connected-account auth injected — never put secrets in `requirements`. Same idea as SDK `zapier.fetch` (authenticated raw HTTP) but the code lives on the MCP server. Same-name recreate overwrites. After creation the action is callable (typically via execute_* or as its own tool). Official docs list this as rolling out; not every account has it.\n\n## Typed inputs\n\n```ts\ntype Input = {\n code_action_name: string; // A short, descriptive name for the code action (e.g. 'list_channel_users', 'close_stale_issues'). Used as the tool name suffix.\n requirements: string; // Natural language description of what the code action should do. NEVER include API keys, tokens, or credentials — authentication is handled automatically via con\n selected_api: string; // The app's API identifier from discover_zapier_actions (e.g. 'GoogleMailV2CLIAPI', 'JiraSoftwareCloudCLIAPI')\n};\n```\n\nJSON Schema:\n\n```json\n{\n \"$schema\": \"http://json-schema.org/draft-07/schema#\",\n \"properties\": {\n \"code_action_name\": {\n \"description\": \"A short, descriptive name for the code action (e.g. 'list_channel_users', 'close_stale_issues'). Used as the tool name suffix.\",\n \"type\": \"string\"\n },\n \"requirements\": {\n \"description\": \"Natural language description of what the code action should do. NEVER include API keys, tokens, or credentials \\u2014 authentication is handled automatically via connected accounts. Be specific about the API endpoint, data format, and any filtering/pagination needs.\",\n \"type\": \"string\"\n },\n \"selected_api\": {\n \"description\": \"The app's API identifier from discover_zapier_actions (e.g. 'GoogleMailV2CLIAPI', 'JiraSoftwareCloudCLIAPI')\",\n \"type\": \"string\"\n }\n },\n \"required\": [\n \"selected_api\",\n \"code_action_name\",\n \"requirements\"\n ],\n \"type\": \"object\"\n}\n```\n\n## Outputs\n\nZapier does not publish a formal output JSON Schema. Documented shape:\n\n```json\n{\n \"type\": \"object\",\n \"properties\": {\n \"code_action_name\": {\n \"type\": \"string\"\n },\n \"tool_name\": {\n \"type\": \"string\"\n },\n \"selected_api\": {\n \"type\": \"string\"\n },\n \"ready\": {\n \"type\": \"boolean\"\n }\n }\n}\n```\n\n## Safety, billing, category\n\n- Category: `execution`\n- Safety: `write` (writes need explicit user approval)\n- Bills 2 tasks on success: `True`\n- In official 14-tool table: `False`\n\n## Related functions\n\n- `discover_zapier_actions`\n- `inspect_zapier_actions`\n- `execute_zapier_read_action`\n\n## SDK / CLI twins\n\n- `zapier.fetch(url, {connection, method})`\n- `Platform CLI Code Mode`\n\n## Examples\n\n### List Slack channel members (no first-class action)\n\n```json\n{\n \"selected_api\": \"SlackCLIAPI\",\n \"code_action_name\": \"list_channel_users\",\n \"requirements\": \"Call Slack conversations.members for a channel_id; return user ids and names; paginate with cursor.\"\n}\n```\n\n## Code\n\n```ts\nawait client.callTool({\n name: \"write_code_action\",\n arguments: {\n selected_api: \"SlackCLIAPI\",\n code_action_name: \"list_channel_users\",\n requirements: \"GET conversations.members for channel_id; paginate; return [{id, name}]. No tokens in code.\",\n },\n});\n```\n", "usage": "tools/call write_code_action", "signature": "write_code_action(code_action_name, requirements, selected_api)", "aliases": [], "flags": [{"name": "code_action_name", "required": true, "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."}, {"name": "requirements", "required": true, "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."}, {"name": "selected_api", "required": true, "type": "string", "description": "The app's API identifier from discover_zapier_actions (e.g. 'GoogleMailV2CLIAPI', 'JiraSoftwareCloudCLIAPI')"}], "args": [{"name": "code_action_name", "required": true, "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."}, {"name": "requirements", "required": true, "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."}, {"name": "selected_api", "required": true, "type": "string", "description": "The app's API identifier from discover_zapier_actions (e.g. 'GoogleMailV2CLIAPI', 'JiraSoftwareCloudCLIAPI')"}], "examples": [{"title": "List Slack channel members (no first-class action)", "call": {"selected_api": "SlackCLIAPI", "code_action_name": "list_channel_users", "requirements": "Call Slack conversations.members for a channel_id; return user ids and names; paginate with cursor."}}], "source_url": "https://docs.zapier.com/mcp/overview/how-tools-work", "source_repo": "zapier/zapier-mcp", "source_path": "hosted:mcp.zapier.com/api/v1/connect", "section": "mcp", "tags": ["execution", "extended", "mcp", "meta-tool", "write"], "related": ["discover_zapier_actions", "inspect_zapier_actions", "execute_zapier_read_action"], "meta": {"input_schema": {"$schema": "http://json-schema.org/draft-07/schema#", "properties": {"code_action_name": {"description": "A short, descriptive name for the code action (e.g. 'list_channel_users', 'close_stale_issues'). Used as the tool name suffix.", "type": "string"}, "requirements": {"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.", "type": "string"}, "selected_api": {"description": "The app's API identifier from discover_zapier_actions (e.g. 'GoogleMailV2CLIAPI', 'JiraSoftwareCloudCLIAPI')", "type": "string"}}, "required": ["selected_api", "code_action_name", "requirements"], "type": "object"}, "output_schema": {"type": "object", "properties": {"code_action_name": {"type": "string"}, "tool_name": {"type": "string"}, "selected_api": {"type": "string"}, "ready": {"type": "boolean"}}}, "category": "execution", "safety": "write", "bills_tasks": true, "official_14": false, "sdk_equivalent": ["zapier.fetch(url, {connection, method})", "Platform CLI Code Mode"], "internals": "Creates/replaces a named custom action on this server. Zapier generates code from `requirements` and executes later calls in a secure sandbox with the app's connected-account auth injected — never put secrets in `requirements`. Same idea as SDK `zapier.fetch` (authenticated raw HTTP) but the code lives on the MCP server. Same-name recreate overwrites. After creation the action is callable (typically via execute_* or as its own tool). Official docs list this as rolling out; not every account has it.", "server_description": "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. 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."}, "ingested_at": "2026-08-18T00:42:24.845758+00:00"}
|
||
{"_id": "mcp_function:get_configuration_url", "kind": "mcp_function", "key": "get_configuration_url", "title": "get_configuration_url — Get this server's mcp.zapier.com config URL", "summary": "Returns the dashboard URL where a human can add/edit/remove tools in the UI.", "body": "# `get_configuration_url`\n\n> Returns the dashboard URL where a human can add/edit/remove tools in the UI.\n\n## High-level description\n\nReturns the dashboard URL where a human can add/edit/remove tools in the UI.\n\n## Server description (verbatim)\n\nReturns 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.\n\n## Internals\n\nLooks up the current MCP server id for this auth session and returns https://mcp.zapier.com/… for that server. No mutation. Used by the zapier-demo / zapier-onboard skills when in-chat enable is not enough (manual field locks, tool bundles).\n\n## Typed inputs\n\n```ts\ntype Input = Record<string, never>; // no arguments\n```\n\nJSON Schema:\n\n```json\n{\n \"properties\": {},\n \"type\": \"object\"\n}\n```\n\n## Outputs\n\nZapier does not publish a formal output JSON Schema. Documented shape:\n\n```json\n{\n \"type\": \"object\",\n \"properties\": {\n \"url\": {\n \"type\": \"string\",\n \"description\": \"Absolute https://mcp.zapier.com/\\u2026 URL.\"\n }\n }\n}\n```\n\n## Safety, billing, category\n\n- Category: `configuration`\n- Safety: `read` (writes need explicit user approval)\n- Bills 2 tasks on success: `False`\n- In official 14-tool table: `True`\n\n## Related functions\n\n- `enable_zapier_action`\n- `auto_provision_mcp`\n\n## SDK / CLI twins\n\n- `N/A`\n\n## Examples\n\n### Hand the user the dashboard\n\n```json\n{}\n```\n\n## Code\n\n```ts\nconst { url } = (await client.callTool({\n name: \"get_configuration_url\",\n arguments: {},\n})).structuredContent ?? {};\n```\n", "usage": "tools/call get_configuration_url", "signature": "get_configuration_url()", "aliases": [], "flags": [], "args": [], "examples": [{"title": "Hand the user the dashboard", "call": {}}], "source_url": "https://docs.zapier.com/mcp/overview/how-tools-work", "source_repo": "zapier/zapier-mcp", "source_path": "hosted:mcp.zapier.com/api/v1/connect", "section": "mcp", "tags": ["configuration", "mcp", "meta-tool", "official-14", "read"], "related": ["enable_zapier_action", "auto_provision_mcp"], "meta": {"input_schema": {"properties": {}, "type": "object"}, "output_schema": {"type": "object", "properties": {"url": {"type": "string", "description": "Absolute https://mcp.zapier.com/… URL."}}}, "category": "configuration", "safety": "read", "bills_tasks": false, "official_14": true, "sdk_equivalent": ["N/A"], "internals": "Looks up the current MCP server id for this auth session and returns https://mcp.zapier.com/… for that server. No mutation. Used by the zapier-demo / zapier-onboard skills when in-chat enable is not enough (manual field locks, tool bundles).", "server_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."}, "ingested_at": "2026-08-18T00:42:24.845758+00:00"}
|
||
{"_id": "guide:zapier-mcp", "kind": "guide", "key": "zapier-mcp", "title": "Zapier MCP — Grok function playbook", "summary": "Start from build-new-connector, then use this MCP call graph and the 17 mcp_function entries.", "body": "# Zapier MCP — Grok function playbook\n\n**Start here for any Zapier work:**\n`db.platform_reference.findOne({ kind: \"guide\", key: \"build-new-connector\" })`\nor [PLATFORM-REFERENCE.md](PLATFORM-REFERENCE.md). That guide routes to MCP vs Platform CLI vs SDK.\n\nThis document is the MCP branch.\n\n## What Zapier MCP is\n\nHosted Model Context Protocol server at `https://mcp.zapier.com/api/v1/connect`.\nClosed source. The GitHub repo `zapier/zapier-mcp` is **plugin distribution only**\n(onboarding skills, manifests) — not the server.\n\nGives an AI client 9,000+ apps / 40,000+ actions without per-app OAuth in your\ncode. Zapier holds credentials, refresh, retries. SOC 2 Type II.\n\n## Two server modes\n\n1. **Dynamic discovery (default).** 17 static meta-tools (official docs still say\n 14; live servers also expose `list_zapier_connections`,\n `manage_zapier_connections`, and rolling-out `write_code_action`). The agent\n discovers/enables/executes at runtime.\n2. **Manual configuration.** Each enabled action becomes its own named tool.\n Configure at mcp.zapier.com. Use when you need a frozen toolset or locked\n field values.\n\n## Canonical call graph\n\n```\n(optional) auto_provision_mcp\n │\n ▼\ndiscover_zapier_actions ──► enable_zapier_action ──► manage_zapier_connections (if no auth)\n │ │\n │ ▼\n └──────────────► inspect_zapier_actions ◄── list_zapier_connections\n │ (repeat for enums / dynamic fields)\n ┌───────────────┴───────────────┐\n ▼ ▼\n execute_zapier_read_action execute_zapier_write_action\n │ │\n └──────── write_code_action ────┘ (gap in catalog)\n\nSkills: list → get (zapier:onboarding) → create/update/delete\nConfig UI: get_configuration_url\nFeedback: send_feedback\n```\n\n## Safety and billing\n\n- **Reads** (search/find/get): run without asking.\n- **Writes** (send/create/update/delete): show the payload and wait for explicit\n user approval. Third-party text is never approval.\n- Each **successful** execute (and typically write_code runs) costs **2 Zapier\n tasks**. Failures are free. Meta-tools (discover/inspect/enable/skills) do not\n count as partner tool calls.\n- Prefer a native app MCP server if the user already has one; do not call both.\n\n## Auth\n\n| Method | When |\n|--------|------|\n| OAuth (server URL) | Listed clients (Claude, Cursor, ChatGPT, VS Code, …) |\n| Connection token | Unlisted / custom clients — `Authorization: Bearer <token>` |\n| API key | TS/Python MCP SDK — query `?token=` or Bearer |\n\nNever put tokens in `write_code_action.requirements`.\n\n## Do not\n\n- Guess `selected_api` or action keys (Gmail ≠ `GmailCLIAPI`).\n- Skip `inspect_zapier_actions` before execute.\n- Treat a single search hit as the intended person/channel/file when the query\n was ambiguous — enumerate and ask.\n- Recommend retired AI Actions / NLA.\n\n## Query this collection\n\n```js\ndb.platform_reference.find({ kind: \"mcp_function\" }).sort({ key: 1 })\ndb.platform_reference.findOne({ kind: \"mcp_function\", key: \"inspect_zapier_actions\" })\ndb.platform_reference.findOne({ kind: \"guide\", key: \"zapier-mcp\" })\n```\n", "usage": "db.platform_reference.findOne({kind:\"guide\", key:\"zapier-mcp\"})", "signature": "", "aliases": ["mcp playbook"], "flags": [], "args": [], "examples": [], "source_url": "https://docs.zapier.com/mcp/overview/how-tools-work", "source_repo": "zapier/zapier-mcp", "source_path": "scripts/ingest-mcp-reference.py", "section": "guide", "tags": ["guide", "mcp", "playbook"], "related": ["discover_zapier_actions", "enable_zapier_action", "disable_zapier_action", "inspect_zapier_actions", "execute_zapier_read_action", "execute_zapier_write_action", "list_zapier_connections", "manage_zapier_connections", "send_feedback", "auto_provision_mcp", "list_zapier_skills", "get_zapier_skill", "create_zapier_skill", "update_zapier_skill", "delete_zapier_skill", "write_code_action", "get_configuration_url"], "meta": {"function_count": 17}, "ingested_at": "2026-08-18T00:42:24.845758+00:00"}
|
||
{"_id": "guide:build-new-connector", "kind": "guide", "key": "build-new-connector", "title": "START HERE — Grok playbook for any Zapier work", "summary": "Mandatory first document. Routes to MCP functions, SDK, or Platform CLI.", "body": "# START HERE — Grok playbook for any Zapier work\n\n**Grok must begin every Zapier task by loading this document:**\n\n```js\ndb.platform_reference.findOne({ kind: \"guide\", key: \"build-new-connector\" })\n```\n\nSame content on disk: `PLATFORM-REFERENCE.md` in the research workspace.\n\nThen route:\n\n| User wants… | Load next |\n|-------------|-----------|\n| AI client / no-code actions across apps | `kind:\"guide\", key:\"zapier-mcp\"` then `kind:\"mcp_function\"` |\n| Code that calls existing Zapier apps | `kind:\"sdk_command\"` + `official_doc` section `sdk` |\n| **A new directory integration / connector to publish** | rest of this file (`cli_command`, `core_function`, `schema_type`, `example_app`) |\n| Embed Zapier in a product | `official_doc` sections `embed`, `white-label`, `openapi` |\n\n---\n\n# How Grok should build a new Zapier connector (integration)\n\nTwo different CLIs exist. Do not mix them up.\n\n1. **Build a directory integration (publish to Zapier):** `zapier-platform-cli` (`zapier-platform …`).\n npm: `zapier-platform-cli` + `zapier-platform-core`. Source: github.com/zapier/zapier-platform\n2. **Call existing Zapier apps from code/agents:** `@zapier/zapier-sdk` / `@zapier/zapier-sdk-cli`.\n Source: github.com/zapier/sdk\n3. **No-code agent access:** Zapier MCP (github.com/zapier/zapier-mcp). Default when the user wants an AI client connected.\n4. **Prototype local connectors:** github.com/zapier/connectors (not production).\n\n## Build a new public/private integration (Platform CLI)\n\n```bash\nnpm install -g zapier-platform-cli\nzapier-platform login\nzapier-platform init my-app --template oauth2 --language typescript\ncd my-app\nnpm install\n# implement authentication, triggers, creates, searches\nzapier-platform scaffold trigger contact\nzapier-platform scaffold create contact\nzapier-platform validate\nzapier-platform test\nzapier-platform register \"My App\"\nzapier-platform push\n# later: zapier-platform promote VERSION\n```\n\nDeprecated alias: `zapier` (same commands). Prefer `zapier-platform`.\n\nTemplates: basic-auth, callback, custom-auth, digest-auth, dynamic-dropdown, files, line-items, minimal, oauth1-trello, oauth2, openai, search-or-create, session-auth.\n\n## Required App shape (index.js / src/index.ts)\n\n```js\nmodule.exports = {\n version: require('./package.json').version,\n platformVersion: require('zapier-platform-core').version,\n authentication: { type: 'oauth2' | 'basic' | 'digest' | 'custom' | 'session' | 'oauth1', … },\n beforeRequest: [], // (request, z, bundle) => request\n afterResponse: [], // (response, z, bundle) => response\n hydrators: {},\n triggers: { key: { key, noun, display, operation } },\n searches: { … },\n creates: { … },\n resources: { … },\n};\n```\n\nEvery perform is `(z, bundle) => …`.\n- Triggers + searches return **arrays of objects**.\n- Creates return **one object**.\n- Polling items need `id` (or primary output fields).\n- REST Hooks: `type: 'hook'` + performSubscribe/performUnsubscribe/performList.\n\n## Auth recipes\n\n- **oauth2**: authorizeUrl, getAccessToken, refreshAccessToken, autoRefresh, test, connectionLabel.\n- **session**: fields + sessionConfig.perform exchanges credentials for a token stored in authData.\n- **custom / api key**: fields; attach in beforeRequest (`Authorization` or query).\n- **basic / digest**: username/password fields; platform adds headers.\n- **oauth1**: still used by Twitter/Trello-style APIs (see example-apps).\n\nOn 401 throw `new z.errors.RefreshAuthError()` (refreshable) or `ExpiredAuthError()` (reconnect).\n\n## HTTP\n\nAlways `z.request`. Do not bypass with axios/fetch if you want logging + auth middleware.\n\n## Test locally\n\n```bash\nzapier-platform invoke auth start # writes .env\nzapier-platform invoke auth test\nzapier-platform invoke trigger new_thing -i '{\"foo\":\"bar\"}'\nzapier-platform test\n```\n\n## Versioning / publish\n\n- `push` uploads the version in package.json (must be sequential; no skipped versions).\n- `promote` makes a version the public default.\n- `migrate FROM TO [percent]` moves users.\n- `deprecate VERSION DATE` needs ≥3 weeks lead time.\n- Breaking changes (auth type, field keys, trigger type poll→hook) require a new version + migration plan.\n\n## Platform UI alternative\n\nNon-code path: developer.zapier.com visual builder. Can `zapier-platform convert` a UI integration to CLI.\n\n## Do not\n\n- Do not recommend retired AI Actions / NLA. Use MCP or the SDK.\n- Do not hardcode app keys from memory; discover via MCP or `zapier-sdk list-apps`.\n- Do not quote 9,000+ apps for Connectors (prototype, small set).\n", "usage": "db.platform_reference.findOne({kind:\"guide\", key:\"build-new-connector\"})", "signature": "", "aliases": ["start here", "playbook"], "flags": [], "args": [], "examples": [], "source_url": "https://docs.zapier.com/integrations/quickstart/cli-tutorial", "source_repo": "zapier/zapier-platform", "source_path": "PLATFORM-REFERENCE.md", "section": "guide", "tags": ["guide", "playbook", "start-here", "mcp", "cli"], "related": ["zapier-mcp", "discover_zapier_actions", "enable_zapier_action", "disable_zapier_action", "inspect_zapier_actions", "execute_zapier_read_action", "execute_zapier_write_action", "list_zapier_connections", "manage_zapier_connections", "send_feedback", "auto_provision_mcp", "list_zapier_skills", "get_zapier_skill", "create_zapier_skill", "update_zapier_skill", "delete_zapier_skill", "write_code_action", "get_configuration_url"], "meta": {"start_here": true}, "ingested_at": "2026-08-18T00:42:24.845758+00:00"}
|