Zapier SDK MCP服务器
Zapier SDK的MCP(模型上下文协议)服务器实现,允许AI助手通过标准化协议与Zapier的api进行交互。
什么是MCP?
这个 模型上下文协议(MCP) 是Anthropic开发的一种协议,它使像Claude和Cursor这样的人工智能助手能够通过标准化接口与外部工具和数据源进行交互。这个包创建一个MCP服务器,将所有Zapier SDK功能公开为MCP工具。
安装
这个包是Zapier SDK monorepo的一部分,在安装CLI时自动安装:
npm install -D @zapier/zapier-sdk-cli
使用
启动MCP服务器
通过命令行启动MCP服务器:
# Start the MCP server
npx zapier-sdk mcp
# Enable debug logging
npx zapier-sdk mcp --debug
使用Claude Code
要与Claude Code一起使用此MCP服务器,请将其添加到您的MCP配置中:
{
"mcpServers": {
"zapier-sdk": {
"command": "npx",
"args": ["zapier-sdk", "mcp"]
}
}
}
编程式的使用
您也可以通过编程方式使用服务器:
import { createZapierMcpServer, startMcpServer } from "@zapier/zapier-sdk-mcp";
// Create and configure the server
const server = createZapierMcpServer({ debug: true });
// Or start it directly
await startMcpServer({ debug: true });
稳定
每个工具都属于三个稳定性层之一。稳定的工具默认是暴露的;选择更广泛的层与 ZapierMcpServerOptions.stability, --stability <level> 在 zapier-sdk mcp,或者 ZAPIER_STABILITY=<level> 在环境中。
| 层 | 合同 |
|---|---|
| 稳定的 | 我们打算保留的地表。虽然SDK处于开放测试版(0。X),突破性的更改仍然可以在小版本中登陆;我们会在可能的情况下首先弃用,并且会在变更日志中以迁移注释的形式标注出来。 |
| β | 功能齐全,准备构建,但形状仍然可能改变,因为它沉淀。更改在次要版本中发布,并附有更改日志迁移说明,没有弃用期。 |
| 实验 | 仍在设计中;可能在任何释放中改变形状或消失,恕不另行通知。 |
不稳定的工具描述以 [Beta] / [Experimental] 所以代理看到的是内联层。
它是如何工作的
MCP服务器:
- 动态地发现 所有可用的Zapier SDK功能都来自SDK的内部注册表
- 转换函数模式 从Zod格式(SDK内部使用)到JSON模式格式(MCP需要)
- 将功能公开为MCP工具 用烤肉串命名(例如:
listApps变成了list-apps) - 处理工具执行 通过验证输入、调用适当的SDK函数和返回结果
可用的工具
所有Zapier SDK功能都自动公开为MCP工具:
list-apps-列出可用的Zapier应用程序list-actions-列出特定应用程序的操作get-action-获取特定操作的详细信息run-action-执行Zapier动作list-connections-列出你的关系- 还有更多……
错误处理
服务器提供全面的错误处理:
- 验证错误 包括预期的输入模式
- 未知的工具 列出所有可用的替代方案
- 执行错误 提供关于哪个函数失败的上下文
- 调试模式 提供详细的错误日志记录
体系结构
AI Assistant (Claude)
↓ MCP Protocol
MCP Server (@zapier/zapier-sdk-mcp)
↓ Function Calls
Zapier SDK (@zapier/zapier-sdk)
↓ HTTP Requests
Zapier APIs
MCP服务器充当适配器,在MCP协议和Zapier SDK的基于功能的接口之间进行转换。
开发
建筑
pnpm build
测试
pnpm test
目录表
- 安装
- 使用
- 稳定
- 可用的工具
- 账户
- 行动
- 应用程序
- 客户端凭证
- 连接
- HTTP请求
- 人为输入(实验)
- Next Gen Zaps (Beta版)
cancel-durable-runcreate-workflowcreate-workflow-draftdelete-workflowdisable-workflowdiscard-workflow-draftenable-workflowget-durable-runget-trigger-runget-workflowget-workflow-draftget-workflow-runget-workflow-versionimport-workflowlist-durable-runslist-workflow-draftslist-workflow-runslist-workflow-versionslist-workflowspublish-workflow-draftpublish-workflow-versionrun-durablerun-workflowrun-workflow-drafttrigger-workflowupdate-workflowupdate-workflow-draftvalidate-workflow
- Next Gen Zaps(实验)
- 表
- 触发器
ack-trigger-inbox-messagescreate-trigger-inboxdelete-trigger-inboxensure-trigger-inboxget-trigger-inboxget-trigger-input-fields-schemalease-trigger-inbox-messageslist-trigger-inbox-messageslist-trigger-inboxeslist-trigger-input-field-choiceslist-trigger-input-fieldslist-triggerspause-trigger-inboxrelease-trigger-inbox-messagesresume-trigger-inboxupdate-trigger-inbox
- 虚拟文件系统(实验)
可用的工具
所有SDK功能都使用串式命名自动公开为MCP工具。
账户
您的Zapier用户帐户,即SDK登录时使用的帐户。用这个来确认是谁。
get-profile
获取当前用户的配置文件信息
行动
动作是应用程序可以做的事情,比如发送电子邮件或创建联系人。使用这些工具来查找应用程序的操作,查看它们需要什么输入,并直接在Zap之外运行它们。
create-action-run
启动操作运行并返回其ID,而无需等待结果。操作的运行是异步的:这将立即返回一个运行ID,并且 getActionRun 获取结果。当您想要开始工作并稍后收集它时,请使用这一对(多次运行,将ID交给另一个进程,在重新启动时幸存下来)。 runAction 是启动运行并等待其结果的单调用形式。
get-action
获取有关特定操作的详细信息
get-action-input-fields-schema
获取操作输入字段的JSON Schema表示形式。返回一个JSON Schema对象,该对象描述操作输入参数的结构、类型和验证规则。
get-action-run
开始运行的操作的当前状态 createActionRun。这是一个立即返回的时间点读取:Zapier尚未完成执行的运行返回状态 waiting,因此再次调用以检查结果。 runAction 开始运行并在一次调用中等待其结果。结果将在创建运行后存储7天。
list-action-input-field-choices
获取动态下拉输入字段的可用选项
list-action-input-fields
获取特定操作所需的输入字段
list-actions
列出特定应用程序的所有操作
run-action
使用给定的输入执行一个操作并等待其结果。每个结果页都包含meta.id中的操作运行ID。
应用程序
应用程序是一种与Zapier连接的网络服务,就像Gmail或Slack一样。使用这些键来查找应用程序和其他方法用来引用它们的键。
get-app
获取特定应用程序的详细信息
list-apps
列出所有可选过滤的可用应用程序
客户端凭证
SDK客户端凭证是一个客户端ID和客户端密钥,用于向Zapier SDK验证您的代码,与验证应用程序的连接分开。使用这些来创建、列出和撤销它们。
create-client-credentials
为经过身份验证的用户创建新的客户端凭据
delete-client-credentials
根据客户端ID删除客户端凭据
list-client-credentials
列出经过身份验证的用户的客户端凭据
连接
连接是Zapier和你在应用程序(比如你公司的Slack工作区)中的账户之间通过OAuth或API密钥建立的身份验证链接。使用它们来查找现有连接或创建新连接,以供操作、触发器和API请求使用。
create-connection
创建一个新的端到端应用程序连接。通过生成起始URL get-connection-start-url,将其打印到stderr,在看起来安全的时候在浏览器中打开它(默认跳过CI / SSH / headless-Linux) - pass --browser always 力, --browser never 压制),然后投票通过 wait-for-new-connection 直到用户完成OAuth并出现新的连接。返回连接。
对于大多数调用者来说,这是正确的命令。当您需要以下任何一种方式时,请使用较低级别的构建块:(a)交出URL和 不 Block on completion -调用 get-connection-start-url 独自一人,没有 wait-for-new-connection 或者(b)在生成URL和等待调用之间做一些自定义的事情 get-connection-start-url,做你的工作(电子邮件或DM URL,渲染QR码等),然后 wait-for-new-connection.
find-first-connection
查找符合条件的第一个连接
find-unique-connection
查找符合条件的唯一连接
get-connection
获取特定连接的详细信息
get-connection-start-url
创建一个短暂的URL,它开始一个由sdk发起的连接流。该URL由zapier.com签名并绑定到当前用户/帐户-在不同的浏览器会话中打开它将无法通过绑定检查。将URL作为数据返回,以便调用者决定如何处理它。
直接使用这个(而不是更高级的) create-connection),当您需要以下任何一种方式时:(a)交出URL和 不 Block等待完成-单独调用它,跳过 wait-for-new-connection 或者(b)在生成URL和等待连接之间做一些自定义的事情——调用它,然后将URL发送电子邮件或DM,将其呈现为移动登录的QR码,等等,然后调用 wait-for-new-connection。对于通常的情况,你只是连续打印和投票, create-connection 是一个电话。
搭配 wait-for-new-connection 要检测完成:通过 startedAt 这里直接返回(这是服务器的起始时间,因此轮询不受客户端时钟倾斜的影响)。例子(JS):
const {
data: { url, app, startedAt },
} = await zapier.getConnectionStartUrl({ app: "slack" });
// hand `url` off — print it, DM it, email it, render a button, whatever
const { data: conn } = await zapier.waitForNewConnection({ app, startedAt });
list-connections
列出可选过滤的可用连接
wait-for-new-connection
等待一个新的连接出现在给定的应用程序。轮询连接列表,直到最新的匹配行 date 在起始时间戳处或之后,然后返回它。搭配 get-connection-start-url -这将生成用户打开的URL,这将等待生成的连接着陆。在配置的超时(默认为5分钟)之后出现超时错误。例子(JS):
const {
data: { url, app, startedAt },
} = await zapier.getConnectionStartUrl({ app: "slack" });
// show `url` to the user via the channel they're reading from
const { data: conn } = await zapier.waitForNewConnection({ app, startedAt });
HTTP请求
通过Zapier的API代理向应用的API发出经过身份验证的请求,使用连接的凭据,这样你的代码就不会处理令牌或密钥。当应用程序的操作不能满足你的需求时,它很有用。
fetch
通过Zapier向任何API发出经过身份验证的HTTP请求。传递connectionId以自动将用户存储的凭据(OAuth令牌、API密钥等)注入到传出请求中。用附加的zapier特定选项镜像本地fetch(url, init?)签名。
人为输入(实验)
从使用Zapier表格的人那里收集信息。使用这些来创建表单并共享其链接以收集响应。
ℹ️ 实验。 仍在设计中;可能在任何释放中改变形状或消失,恕不另行通知。通过
--stability experimental来zapier-sdk mcp,或设置ZAPIER_STABILITY=experimental在环境中,要使用这些工具。
create-form 🧪 实验
从标题和可选字段创建Zapier表单。表单默认发布并返回一个可共享对象 hosted_url;集 draft 保存而不发布。
Next Gen Zaps (Beta版)
Next Gen Zaps是基于代码运行的新版本Zaps,这使得代理和人工智能工具更容易理解它们。使用这些工具构建、测试、发布和运行Next Gen Zaps,并检查它们的运行情况。
ℹ️ β。 功能齐全,准备构建,但形状仍然可能改变,因为它沉淀。更改在次要版本中发布,并附有更改日志迁移说明,没有弃用期。通过
--stability beta来zapier-sdk mcp,或设置ZAPIER_STABILITY=beta在环境中,要使用这些工具。
cancel-durable-run 🧪 β
在初始化或启动状态下取消一次运行的持久运行。如果运行已经结束,返回409。
create-workflow 🧪 β
创建持久的工作流容器。启动禁用,没有版本;发布一个版本以添加代码。
create-workflow-draft 🧪 β
从工作流当前的活动版本派生一个新的草稿(或者在第一次发布之前的一个空白存根)
delete-workflow 🧪 β
删除持久工作流。抛出 ZapierNotFoundError 如果工作流不存在;想要幂等的调用者应该自己抓住这一点。
disable-workflow 🧪 β
禁用持久工作流,使其停止接受触发器
discard-workflow-draft 🧪 β
丢弃打开的工作流草案(软删除)。草案未发表的编辑停止解决;已发表的版本没有改动。
enable-workflow 🧪 β
启用持久工作流,使其接受触发器
get-durable-run 🧪 β
获取一次运行持久运行的完整状态,包括其操作日志
get-trigger-run 🧪 β
获取与已部署工作流的触发器关联的工作流运行。在触发触发器后立即有用,当您有触发器ID但还没有运行ID时。与 waitSeconds,读也等待运行创建和结束。
get-workflow 🧪 β
获取具有当前版本详细信息和触发器索赔状态的持久工作流
get-workflow-draft 🧪 β
获取包括源文件在内的工作流草案的完整详细信息
get-workflow-run 🧪 β
获取工作流运行的当前状态——已发布的工作流版本的实时运行,或通过 runWorkflowDraft ( kind Field说的是哪个)
get-workflow-version 🧪 β
获取工作流版本(包括源文件)的完整详细信息
import-workflow 🧪 β
将现有的Zap转换为持久的工作流。转换Zap的最新发布版本(只有当Zap从未发布过时才回退到其草稿),并将生成的源代码放入开放的草稿中。工作流的创建是禁用的,没有发布版本,所以发布草稿以使其生效。原来的Zap没有动过,一直在跑。
list-durable-runs 🧪 β
列出经过身份验证的帐户的一次持久运行,最新的放在第一位
list-workflow-drafts 🧪 β
列出工作流的草稿,首先是最近编辑的草稿(默认是打开的草稿)
list-workflow-runs 🧪 β
列出特定工作流的工作流运行情况,最新的优先。实时运行(发布版本)和草案运行共享一个列表;通过 kind 缩小到一个。
list-workflow-versions 🧪 β
列出工作流的已发布版本,最新版本优先
list-workflows 🧪 β
列出已验证帐户的所有活动持久工作流
publish-workflow-draft 🧪 β
将未完成的草稿发布为新的不可变工作流版本。推进工作流的活动指针并丢弃草稿-发布消耗它,因此开放的草稿总是意味着未发布的工作。继续编辑,创建一个新的草稿,从刚刚发布的版本派生出来。
publish-workflow-version 🧪 β
发布持久工作流的新版本。默认情况下启用工作流。
run-durable 🧪 β
将工作流的完整源文件映射作为在代码-基板-运行器上运行一次的持久运行(不需要部署工作流)。发送工作流需要的每个文件,而不仅仅是它的入口点。立即返回运行ID;通过getDurableRun轮询终端状态。
run-workflow 🧪 β
运行已发布的工作流并等待其结果:作为身份验证帐户触发工作流的触发器,然后在完成、失败或取消后返回运行 output 完成时设置。等待60秒,除非 waitSeconds 否则说。一场没有结束的长跑 waitSeconds 返回当前状态;再次使用getWorkflowRun和等待 waitSeconds.
run-workflow-draft 🧪 β
启动一个草案测试运行:执行草案的当前源代码,而不发布它。草稿的有效负载在创建时被快照到运行中,因此以后的编辑(或丢弃草稿)永远不会改变运行所执行的内容。草稿运行是免费的(不收取任务费用),并且每个用户的速率有限。没有 waitSeconds 跑步立刻又回来了, initialized; 接着是 getWorkflowRun,或通过 listWorkflowRuns 与 kind: "draft". 与 waitSeconds,则在运行结束时返回运行(或在等待结束时返回运行),使用 output 完成时设置。
trigger-workflow 🧪 β
查找工作流的触发器URL并手动触发它,作为经过身份验证的帐户。
update-workflow 🧪 β
更新持久工作流的名称和/或描述
update-workflow-draft 🧪 β
更新(自动保存)打开的工作流草案
validate-workflow 🧪 β
验证持久工作流源,但不发布它。返回源诊断;问题类型是可扩展的,客户端可能不熟悉。
Next Gen Zaps(实验)
Next Gen Zaps是基于代码运行的新版本Zaps,这使得代理和人工智能工具更容易理解它们。使用这些工具构建、测试、发布和运行Next Gen Zaps,并检查它们的运行情况。
ℹ️ 实验。 仍在设计中;可能在任何释放中改变形状或消失,恕不另行通知。通过
--stability experimental来zapier-sdk mcp,或设置ZAPIER_STABILITY=experimental在环境中,要使用这些工具。
disable-agentic-management 🧪 实验
停止代理管理在一个工作流上工作。它的设置被保留,而不是被删除:模式和自动批准选项保留在文件中,因此稍后调用enableAgenticManagement时会恢复这些设置,而不是默认设置。
enable-agentic-management 🧪 实验
在代理管理下放置一个工作流。先前禁用的工作流将带着模式和自动批准选项返回,除非您在这里传递新的选项。
get-agentic-management-config 🧪 实验
阅读一个工作流的代理管理配置。
get-agentic-management-intent 🧪 实验
阅读为一个工作流版本记录的意图:该版本的工作流要做什么的简单语言描述。
update-agentic-management-config 🧪 实验
更改工作流运行的模式,无论是未经批准应用修复,还是两者兼而有之。一个 modes List替换整个当前集合,而不是添加。
update-agentic-management-intent 🧪 实验
记录一个工作流版本要做什么。对相同版本的再次写入将替换已经存储的文本,因此不存在单独的创建和更新。
表
Tables是Zapier用于存储和管理数据的数据库工具。使用这些工具来管理表、表中的字段和表中的记录。
create-table
创建一个新表
create-table-fields
在表中创建一个或多个字段
create-table-records
在表中创建一条或多条记录
delete-table
根据表的ID删除表
delete-table-fields
从表中删除一个或多个字段
delete-table-records
从表中删除一条或多条记录
get-table
获取关于特定表的详细信息
get-table-record
按ID从表中获取一条记录
list-table-fields
列出表的字段
list-table-records
通过可选的过滤和排序在表中列出记录
list-tables
列出已验证用户可用的表
update-table-records
更新表中的一条或多条记录
触发器
触发器是应用程序中启动自动化的事件,比如收到的新电子邮件。使用这些来查找应用程序的触发器并直接在代码中接收它们的事件,而不是在Zap中。
ack-trigger-inbox-messages
确认来自租约的消息。已添加的邮件将从收件箱中删除;当租约到期时,未绑定的将返回到可用池中。
create-trigger-inbox
创建一个新的触发器收件箱订阅。总是创建一个新的收件箱;使用ensureTriggerInbox获取或创建一个稳定的密钥。
delete-trigger-inbox
标记要删除的触发器收件箱
ensure-trigger-inbox
按键获取或创建触发器收件箱。幂等on (user, account, key):如果注册了匹配的订阅,则返回现有的收件箱,否则创建一个新收件箱。如果该键存在,则抛出ZapierConflictError。
get-trigger-inbox
按ID获取触发器收件箱的详细信息
get-trigger-input-fields-schema
获取触发器输入字段的JSON Schema表示形式。返回一个JSON Schema对象,该对象描述了触发器输入参数的结构、类型和验证规则。
lease-trigger-inbox-messages
从一个触发器收件箱中租用最多N条邮件。返回消息和租约ID;在租赁窗口内确认以从收件箱中删除。
list-trigger-inbox-messages
列出触发器收件箱中的消息(没有有效负载,只有状态)
list-trigger-inboxes
列出经过身份验证的用户的所有触发器收件箱
list-trigger-input-field-choices
获取触发器上动态下拉输入字段的可用选项
list-trigger-input-fields
获取特定触发器所需的输入字段
list-triggers
列出特定应用程序的所有触发器
pause-trigger-inbox
暂停触发收件箱;事件停止收集
release-trigger-inbox-messages
将来自租约的消息释放回收件箱而不确认它们。发布的消息立即可以重新发布。租约尝试仍然计入每条消息的租约限制;释放不退还尝试。
resume-trigger-inbox
恢复暂停的触发收件箱;事件恢复收集
update-trigger-inbox
更新现有触发器收件箱上的设置
虚拟文件系统(实验)
虚拟文件系统是由Zapier托管的文件存储。使用这些工具来读取、写入和组织文件和文件夹。
ℹ️ 实验。 仍在设计中;可能在任何释放中改变形状或消失,恕不另行通知。通过
--stability experimental来zapier-sdk mcp,或设置ZAPIER_STABILITY=experimental在环境中,要使用这些工具。
append-vfs-file 🧪 实验
向Zapier虚拟文件系统(VFS)中的文件追加内容。如果文件不存在,则创建该文件;丢失的父目录将自动创建。比读取和重写文件更安全-附加到服务器端而不需要读写往返。路径是绝对的(例如: /Mine/log.md)。
copy-vfs-file 🧪 实验
将文件复制到Zapier虚拟文件系统(VFS)中的新路径。两个 from 和 to 是绝对文件路径(例如: /Mine/notes.md),而不是目录。
create-vfs-directory 🧪 实验
在Zapier虚拟文件系统(VFS)中创建一个目录。路径是绝对的(例如: /Mine/notes). 幂等的-可以安全地调用现有目录。
delete-vfs-path 🧪 实验
删除Zapier VFS (Virtual file System)中的文件或目录。两者都适用;路径是绝对的(例如: /Mine/notes.md). 删除是可恢复的-联系Zapier支持恢复条目。
list-vfs-directory 🧪 实验
在Zapier虚拟文件系统(VFS)中列出目录的一页内容。路径是绝对的(例如: /Mine). 通过前一页的 nextCursor 早在 cursor 取下一页。
move-vfs-path 🧪 实验
移动(重命名)Zapier虚拟文件系统(VFS)中的文件或目录。两个 from 和 to 是绝对路径(例如: /Mine/notes.md). 如果条目已经存在,则失败 to —先删除或重命名。
read-vfs-file 🧪 实验
从Zapier虚拟文件系统(VFS)读取一个文件,该文件存储在上下文存储库后面。路径是绝对的,例如: /Mine/notes.md。以UTF-8字符串形式返回内容及其大小、版本和最后修改时间。
stat-vfs-path 🧪 实验
在Zapier虚拟文件系统(VFS)中检查元数据中的任何路径(文件、目录、快捷方式或流)。路径是绝对的(例如: /Mine/notes.md). 检查 type 字段,然后读取仅为某些类型存在的字段。
write-vfs-file 🧪 实验
在Zapier虚拟文件系统(VFS)中写入(创建或覆盖)文件。路径是绝对的(例如: /Mine/notes.md); 丢失的父目录将自动创建。