mcpField
M
Migrate to n8n

Migrate to n8n

本地服务
github.com生产力01 周前更新

关于 Migrate to n8n

Migrate to n8n 将 Make 场景和 Zapier 自动化转换为可导入的 n8n 工作流,并逐步报告已转换、待检查和需手动处理的项目。它可作为 MCP 服务或命令行工具运行,场景文件保留在本地。

主要功能

  1. 01将 Make 导出文件转换为 n8n 工作流
  2. 02将 Zapier 导出内容转换为工作流
  3. 03报告已转换、待检查及手动步骤
  4. 04导入前检查工作流问题
  5. 05可选上传工作流至 n8n

适用场景

  1. 01将 Make 场景迁移至 n8n
  2. 02从 Zapier 导出文件迁移指定自动化
  3. 03检查需要手动处理的步骤
  4. 04将转换后的工作流上传为未激活状态

MCP 相关

其 MCP 服务向 MCP 客户端提供转换、检查、替换建议和可选上传工具。上传需要设置 N8N_URL 和 N8N_API_KEY;创建的工作流保持未激活。

配置

本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。

mcp.json · 通用配置
{
"mcpServers": {
"kotiniiqq-migrate-to-n8n": {
"command": "npx",
"args": [
"-y",
"migrate-to-n8n"
],
"env": {
"MIGRATE_OUTPUT_DIR": "<MIGRATE_OUTPUT_DIR>",
"N8N_URL": "<N8N_URL>",
"N8N_API_KEY": "<N8N_API_KEY>"
}
}
}
}
启动命令npx -y migrate-to-n8n
需要配置的环境变量
MIGRATE_OUTPUT_DIRFolder for converted workflows and reports (default: Documents/migrate-to-n8n)
N8N_URLYour n8n address, to upload results (optional)
N8N_API_KEY密钥n8n API key, to upload results (optional)

本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。

安装包
npmmigrate-to-n8n0.2.0

工具

6

收录的工具列表 · 更新于 4 天前

参数类型必填说明
jsonstring否用户粘贴或附加文件而非提供路径时,填写导出文件的完整内容。path 和 json 二选一,不要同时提供。
pathstring否此计算机上导出文件的绝对路径(~ 表示主目录)。path 和 json 二选一,不要同时提供。
outputDirstring否写入结果的文件夹;若不存在则创建;保留现有文件,并为新文件名添加 " (2)"、" (3)"……。默认值:主目录下的 Documents/migrate-to-n8n。

详细介绍

migrate-to-n8n

npm downloads ci license

将 Make 场景和 Zapier zaps 迁移到 n8n。提供导出文件,即可获得可导入的 n8n 工作流,以及一份逐步报告:哪些内容已转换、需要检查什么,以及如何完成剩余部分。

它既可作为 MCP 服务使用(让 Claude、Cursor、VS Code 或任何 MCP 客户端帮你“将此内容转换为 n8n”),也可作为普通的命令行工具使用。免费且开源。你的场景会保留在自己的电脑上。

Make 蓝图或 Zapier 导出文件 → migrate-to-n8n → n8n 工作流和报告

你将获得什么

场景中的每个步骤最终都会处于以下三种状态之一,报告会列出所有步骤:

含义示例
✅ 已转换导入后即可运行。你只需重新连接凭据。Webhook、HTTP 请求、路由器、迭代器、Gmail 发送
⚠️ 需检查已转换,但有一项明确内容需要检查。没有完全对应 n8n 功能的公式、按列字母写入的工作表
🛠 手动处理没有安全的自动转换方式。该步骤会保留在原位并处于禁用状态,附带便笺说明要如何处理。私有 Make 应用:你会获得一个已收集好其输入的 Code 节点

不会丢弃任何内容。手动处理的步骤会保留工作流连接,因此工作流可以导入并运行,你可以之后再完成这些步骤。 这是 演示场景 转换后在 n8n 2.44 中打开的效果:私有 CRM 应用没有对应的 n8n 节点,因此该步骤会处于禁用状态,并附有操作说明。

在 n8n 编辑器中打开的转换后演示场景

公式也会一并转换:{{formatDate(1.date; "DD.MM.YYYY")}} 会变为 {{ DateTime.fromISO(String($('Webhook').item.json.body.date)).toFormat('dd.LL.yyyy') }}。

统计数据基于 2026-10-22 在 GitHub 上找到的公开 Make 蓝图和 Zapier 导出文件:

来源工作流步骤✅ 已转换⚠️ 需检查🛠 手动处理损坏的输出时间(中位数)
Make1,43210,12942.7%40.5%16.7%00.7 ms
Zapier1489107%63.7%29.2%00.3 ms

“损坏的输出”统计 n8n 会拒绝的工作流数量。测试套件还会将部分工作流导入真实的 n8n 2.44 和 1.123,并通过它们的 webhook 运行其中一些,与 Make 的结果进行比较。许多公开的 Zapier 导出文件不包含步骤设置或代码,因此 Zapier 的数据较低。

一分钟上手

你需要 Node.js 22 或更高版本。

npx migrate-to-n8n convert my-scenario.blueprint.json

工作流和报告会保存到 Documents/migrate-to-n8n。在 n8n 中导入 .n8n.json 文件: 工作流 → 从文件导入。

手边没有导出文件?试试演示场景:下载后运行相同的命令即可。

操作步骤

1. 从 Make 或 Zapier 导出
  • Make:打开场景,点击编辑器底部的 ⋯,选择 Export Blueprint。
  • Zapier:设置 → 安全与数据 → 下载我的 Zap 工作流。你会获得一个包含所有 zaps 的文件。 使用 list_zaps(或 migrate-to-n8n list-zaps <file>)选择所需的 zaps。
2. 将其连接到 AI 客户端

Claude Desktop:下载 migrate-to-n8n.mcpb 并打开。Claude Desktop 会一键安装。设置为可选项:输出文件夹,以及用于上传的 n8n 地址和 API 密钥。

Claude Code:

claude mcp add migrate-to-n8n -- npx -y migrate-to-n8n serve

Cursor、VS Code、Windsurf 和其他客户端:将以下内容添加到客户端的 MCP 配置中 (.cursor/mcp.json、.vscode/mcp.json……):

{
  "mcpServers": {
    "migrate-to-n8n": {
      "command": "npx",
      "args": ["-y", "migrate-to-n8n", "serve"],
      "env": { "N8N_URL": "", "N8N_API_KEY": "" }
    }
  }
}

VS Code 使用 "servers",而不是 "mcpServers"。

3. 转换

在聊天中附加文件(或提供其路径),然后提出请求:

将此 Make 场景转换为 n8n,并帮助我完成无法转换的部分。

助手会获取报告,并引导你完成所有标记为 ⚠️ 或 🛠 的步骤。

4. 导入 n8n

导入 .n8n.json 文件(工作流 → 从文件导入),在报告列出的节点中选择凭据, 将 Webhook 发送方指向新的 URL,使用测试数据运行一次,然后激活工作流。

设置 N8N_URL 和 N8N_API_KEY 后(n8n → 设置 → n8n API),助手可以为你上传工作流。 它会创建一个名为“……(已迁移)”的新工作流,并将其设为非活动状态;绝不会修改现有工作流。

工具

工具功能
convert_makeMake 蓝图 → n8n 工作流文件 + 报告
convert_zapierZapier 导出文件 → 每个 zap 对应一个工作流文件 + 报告
list_zaps列出 Zapier 导出文件中的 zap:标题、步骤、应用、开/关状态
suggest_replacement说明如何处理某个模块或步骤,以及可用什么替代
supported_modules搜索可自动转换的内容
check_n8n_workflow检查工作流文件中遗留的问题:断开的链接、已禁用的步骤、占位符、凭据
upload_to_n8n在你的 n8n 中创建工作流并设为非活动状态(仅当设置了 N8N_URL 和 N8N_API_KEY 时)

可转换内容

两边的流程控制都可完整转换:路由器和路径(与 Make 和 Zapier 一样,运行所有匹配的路由)、 带 AND/OR 组的筛选器、迭代器和聚合器、错误处理程序、计划、变量、Webhook 和响应、HTTP 请求、 JSON、Formatter、Code、Delay、Storage。约 50 个 Make 公式函数、Make 日期格式、运算符以及 25 种 Zapier Formatter 转换都会转换为 n8n 表达式。

Make:135 个模块和步骤可自动转换 | 模块 / 步骤 | 在 n8n 中对应 | |---|---| | `*:makeApiCall` | HTTP Request(应用的 API) | | `airtable:ActionCreateRecord` | Airtable:创建 | | `airtable:ActionGetRecord` | Airtable:获取 | | `airtable:ActionSearchRecords` | Airtable:搜索 | | `airtable:ActionUpdateRecords` | Airtable:更新 | | `airtable:TriggerWatchRecords` | Airtable 触发器 | | `anthropic-claude:createAMessage` | Anthropic:向模型发送消息 | | `anthropic-claude:simpleTextPrompt` | Anthropic:向模型发送消息 | | `apify:fetchDatasetItems` | HTTP Request(Apify API) | | `apify:finishedActorRuns` | Webhook(Apify) | | `apify:runActor` | HTTP Request(Apify API) | | `apify:runActorNew` | HTTP Request(Apify API) | | `builtin:BasicAggregator` | 聚合 | | `builtin:BasicFeeder` | 拆分输出 | | `builtin:BasicFilter` | 无操作 | | `builtin:BasicIterator` | 拆分输出 | | `builtin:BasicRepeater` | Code(重复执行) | | `builtin:BasicRouter` | 无操作(扇出) | | `code:ExecuteCode` | Code | | `csv:ParseCSV` | Code(解析 CSV)+ 拆分输出 | | `datastore:AddRecord` | Data Table:插入行 | | `datastore:DeleteRecord` | Data Table:删除行 | | `datastore:ExistRecord` | Data Table:检查行是否存在 | | `datastore:GetRecord` | Data Table:获取行 | | `datastore:SearchRecord` | Data Table:获取行 | | `datastore:UpdateRecord` | Data Table:更新 / 插入或更新 | | `discord:createMessage` | Discord:发送消息 | | `dropbox:createShareLink` | HTTP Request(Dropbox API) | | `dropbox:uploadLargeFile` | Dropbox:上传 | | `email:ActionSendEmail` | 发送电子邮件(SMTP) | | `email:TriggerNewEmail` | 电子邮件触发器(IMAP) | | `facebook-pages:CreatePost` | Facebook Graph API:发布主页帖子 | | `facebook-pages:CreatePostWithPhotos` | Facebook Graph API:发布主页照片帖子 | | `gateway:CustomWebHook` | Webhook | | `gateway:WebhookRespond` | 响应 Webhook | | `gemini-ai:createACompletionGeminiPro` | Google Gemini:向模型发送消息 | | `gmail:ActionSendEmail` | Gmail:发送 | | `gmail:sendAnEmail` | Gmail:发送 | | `gmail:TriggerNewEmail` | Gmail 触发器 | | `google-calendar:createAnEvent` | Google Calendar:创建活动 | | `google-calendar:deleteAnEvent` | Google Calendar:删除活动 | | `google-calendar:searchEvents` | Google Calendar:获取多个活动 | | `google-docs:createADocument` | Google Docs:创建 | | `google-docs:createADocumentFromTemplate` | Google Drive:复制(模板) | | `google-docs:getADocument` | Google Docs:获取 | | `google-drive:createAFolder` | Google Drive:创建文件夹 | | `google-drive:getAFile` | Google Drive:下载 | | `google-drive:moveAFileIntoAFolder` | Google Drive:移动 | | `google-drive:searchForFilesFolders` | Google Drive:搜索 | | `google-drive:shareAFileFolder` | Google Drive:共享 | | `google-drive:uploadAFile` | Google Drive:上传 | | `google-drive:watchFilesInAFolder` | Google Drive 触发器 | | `google-email:ActionCreateDraft` | Gmail:创建草稿 | | `google-email:ActionSendEmail` | Gmail:发送 | | `google-email:createADraft` | Gmail:创建草稿 | | `google-email:sendAnEmail` | Gmail:发送 | | `google-email:TriggerNewEmail` | Gmail 触发器 | | `google-email:TriggerWatchEmails` | Gmail 触发器 | | `google-email:triggerWatchNewEmails` | Gmail 触发器 | | `google-sheets:addRow` | Google Sheets:追加行 | | `google-sheets:createSpreadsheet` | Google Sheets:创建电子表格 | | `google-sheets:deleteRow` | Google Sheets:删除行 | | `google-sheets:filterRows` | Google Sheets:获取行(+ 筛选) | | `google-sheets:getCell` | HTTP Request(Sheets API,读取单元格) | | `google-sheets:getSheetContent` | Google Sheets:获取行(+ 筛选) | | `google-sheets:searchRows` | Google Sheets:获取行(+ 筛选) | | `google-sheets:searchRowsAdvanced` | Google Sheets:获取行(+ 筛选) | | `google-sheets:updateCell` | HTTP Request(Sheets API,写入单元格) | | `google-sheets:updateRow` | Google Sheets:更新行 | | `google-sheets:watchRows` | Google Sheets 触发器(新增行) | | `http:ActionGetFile` | HTTP Request(文件) | | `http:ActionSendData` | HTTP Request | | `http:ActionSendDataAPIKeyAuth` | HTTP Request(API 密钥) | | `http:ActionSendDataBasicAuth` | HTTP Request(基本身份验证) | | `http:DownloadFile` | HTTP Request(文件) | | `http:MakeRequest` | HTTP Request | | `instagram-business:CreateAReelPost` | Facebook Graph API:Instagram Reels + 发布 | | `instagram-business:CreatePostPhoto` | Facebook Graph API:Instagram 媒体 + 发布 | | `json:AggregateToJSON` | 聚合 + 编辑字段 | | `json:CreateJSON` | 编辑字段 | | `json:ParseJSON` | 编辑字段(JSON) | | `json:TransformToJSON` | 编辑字段 | | `linkedin:CreateCompanyImagePost` | LinkedIn:创建帖子 | | `linkedin:CreateCompanyPost` | LinkedIn:创建帖子 | | `linkedin:CreatePost` | LinkedIn:创建帖子 | | `linkedin:ShareImage` | LinkedIn:创建帖子 | | `manychat:SetSubscriberCustomField` | HTTP Request(ManyChat API) | | `markdown:Compile` | Markdown → HTML | | `notion:createAPage` | Notion:创建数据库页面 | | `notion:updateADatabaseItem` | Notion:更新数据库页面 | | `open-router:createAChatCompletion` | HTTP Request(OpenRouter API) | | `openai-gpt-3:askAnything` | OpenAI:向模型发送消息 | | `openai-gpt-3:CreateCompletion` | OpenAI:向模型发送消息 | | `openai-gpt-3:createModelResponse` | OpenAI:向模型发送消息 | | `openai-gpt-3:GenerateImage` | OpenAI:生成图像 | | `openai-gpt-3:messageAssistantAdvanced` | OpenAI:向模型发送消息(指令) | | `openai-gpt-3:transformTextToStructuredData` | OpenAI:向模型发送消息(JSON) | | `perplexity-ai:createAChatCompletion` | HTTP Request(Perplexity API) | | `placeholder:Placeholder` | 无操作 | | `regexp:HTMLToText` | 编辑字段 | | `regexp:Parser` | Code | | `regexp:Replace` | 编辑字段 | | `resend:sendAnEmail` | HTTP Request(Resend API) | | `rss:ActionReadArticles` | RSS 阅读 | | `rss:TriggerNewArticle` | RSS Feed 触发器 | | `scenario-service:ReturnData` | 编辑字段(子工作流输出) | | `slack:CreateMessage` | Slack:发送消息 | | `slack:InviteUsers` | Slack:邀请加入频道 | | `supabase:ActionCreateARecord` | Supabase:创建行 | | `supabase:createARow` | Supabase:创建行 | | `supabase:searchRows` | Supabase:获取多行 | | `supabase:upsertARecord` | Supabase:创建行 | | `telegram:DownloadFile` | Telegram:获取文件 | | `telegram:SendReplyMessage` | Telegram:发送消息 | | `telegram:WatchUpdates` | Telegram 触发器 | | `twilio:SendSMS` | Twilio:发送短信 | | `twitter:createATweet` | X (Twitter):创建推文 | | `typeform:ListResponses` | HTTP Request(Typeform API) | | `typeform:WatchEventsWithResponses` | Typeform 触发器 | | `util:ComposeTransformer` | 编辑字段 | | `util:FunctionAggregator2` | 聚合 + 编辑字段 | | `util:FunctionIncrement` | Code(计数器) | | `util:FunctionSleep` | 等待 | | `util:GetVariable2` | 编辑字段 | | `util:GetVariables` | 编辑字段 | | `util:SetMultipleVariables` | 编辑字段 | | `util:SetVariable2` | 编辑字段 | | `util:SetVariables` | 编辑字段 | | `util:Sleep` | 等待 | | `util:Switcher` | 编辑字段 | | `util:TextAggregator` | 聚合 + 编辑字段 | | `webflow:publishAnItem` | HTTP Request(Webflow API) | | `webflow:updateItem` | Webflow:更新项目 | | `whatsapp-business-cloud:sendMessage` | WhatsApp:发送消息 | | `xml:ParseXML` | XML(转为 JSON) |
Zapier:98 个模块和步骤自动转换
| 模块 / 步骤 | 在 n8n 中对应 | |---|---| | `AICLIAPI:get_completion` | OpenAI:向模型发送消息 | | `AirtableCLIAPI:create_or_update_record` | Airtable:新增或更新 | | `AirtableCLIAPI:createRecord` | Airtable:创建 | | `AirtableCLIAPI:newRecordInView` | Airtable 触发器 | | `AirtableCLIAPI:updateRecord` | Airtable:更新 | | `BranchingAPI:branch` | 无操作(分流) | | `ChatGPTCLIAPI:chat_completion` | OpenAI:向模型发送消息 | | `ChatGPTCLIAPI:chat_completion_memory` | OpenAI:向模型发送消息 | | `ChatGPTCLIAPI:conversation` | OpenAI:向模型发送消息 | | `CodeCLIAPI:*` | 代码 | | `DelayAPI:delay_for` | 等待 | | `DelayAPI:delay_until` | 等待 | | `DelayCLIAPI:delay_for` | 等待 | | `DelayCLIAPI:delay_until` | 等待 | | `EmailCLIAPI:*` | 发送邮件 | | `ExcelCLIAPI:add_row` | Microsoft Excel:追加到表格 | | `ExcelCLIAPI:add_rows` | Microsoft Excel:追加到表格 | | `FilterAPI:filter` | 筛选 | | `FilterCLIAPI:filter` | 筛选 | | `FilterCLIAPI:zapier_filter` | 筛选 | | `GmailAPI:message` | Gmail:发送(或作为第一步的 Gmail 触发器) | | `GmailV2API:message` | Gmail:发送(或作为第一步的 Gmail 触发器) | | `GoogleMailCLIAPI:message` | Gmail:发送(或作为第一步的 Gmail 触发器) | | `GoogleMailV2CLIAPI:message` | Gmail:发送(或作为第一步的 Gmail 触发器) | | `GoogleSheetsAPI:add_row` | Google Sheets:追加行 | | `GoogleSheetsAPI:add_rows` | Google Sheets:追加行 | | `GoogleSheetsCLIAPI:add_row` | Google Sheets:追加行 | | `GoogleSheetsCLIAPI:add_rows` | Google Sheets:追加行 | | `GoogleSheetsV2API:add_row` | Google Sheets:追加行 | | `GoogleSheetsV2API:add_rows` | Google Sheets:追加行 | | `GoogleSheetsV2API:new_or_updated_row` | Google Sheets 触发器 | | `GoogleSheetsV2API:new_row` | Google Sheets 触发器 | | `GoogleSheetsV2API:new_row_notify_hook` | Google Sheets 触发器 | | `GoogleSheetsV2API:updated_row_notify_hook` | Google Sheets 触发器 | | `GoogleSheetsV2CLIAPI:add_row` | Google Sheets:追加行 | | `GoogleSheetsV2CLIAPI:add_rows` | Google Sheets:追加行 | | `GoogleSheetsV2CLIAPI:new_or_updated_row` | Google Sheets 触发器 | | `GoogleSheetsV2CLIAPI:new_row` | Google Sheets 触发器 | | `GoogleSheetsV2CLIAPI:new_row_notify_hook` | Google Sheets 触发器 | | `GoogleSheetsV2CLIAPI:updated_row_notify_hook` | Google Sheets 触发器 | | `HubSpotCLIAPI:_zap_raw_request` | HTTP 请求(HubSpot API:API 请求) | | `HubSpotCLIAPI:company_crmSearch` | HTTP 请求(HubSpot API:搜索公司) | | `HubSpotCLIAPI:contact_crmSearch` | HTTP 请求(HubSpot API:搜索联系人) | | `HubSpotCLIAPI:create_associations` | HTTP 请求(HubSpot API:在两条记录之间创建关联) | | `HubSpotCLIAPI:deal_crmSearch` | HTTP 请求(HubSpot API:搜索交易) | | `HubSpotCLIAPI:find_associations` | HTTP 请求(HubSpot API:查找记录的关联) | | `HubSpotCLIAPI:update_crm_deal` | HTTP 请求(HubSpot API:更新交易) | | `HubSpotCLIAPI:upsert_contact` | HubSpot:创建或更新联系人 | | `InterfacesCLIAPI:new_form_submission` | n8n 表单触发器 | | `LinearCLIAPI:create_issue` | Linear:创建问题 | | `LoopingCLIAPI:*` | 拆分 | | `NotionCLIAPI:create_database_item` | Notion:创建数据库页面 | | `OpenAiCLIAPI:send_prompt` | OpenAI:向模型发送消息 | | `S3API:file` | AWS S3:上传 | | `ScheduleAPI:*` | 定时触发器 | | `SlackAPI:channel_message` | Slack:发送消息(或作为第一步的 Slack 触发器) | | `SlackAPI:direct_message` | Slack:发送消息(给用户) | | `SlackAPI:send_channel_message` | Slack:发送消息(或作为第一步的 Slack 触发器) | | `SlackCLIAPI:channel_message` | Slack:发送消息(或作为第一步的 Slack 触发器) | | `SlackCLIAPI:direct_message` | Slack:发送消息(给用户) | | `SlackCLIAPI:send_channel_message` | Slack:发送消息(或作为第一步的 Slack 触发器) | | `StorageCLIAPI:get_all_values` | 代码(静态数据) | | `StorageCLIAPI:get_value` | 代码(静态数据) | | `StorageCLIAPI:increment_value` | 代码(静态数据) | | `StorageCLIAPI:remove_value` | 代码(静态数据) | | `StorageCLIAPI:set_value` | 代码(静态数据) | | `TableCLIAPI:create_record` | 数据表:插入行 | | `TableCLIAPI:find_record` | 数据表:获取行 | | `TableCLIAPI:increment_value` | 代码(递增数据表中的值) | | `TableCLIAPI:new_or_updated_record` | 定时 + 数据表(监视行) | | `TableCLIAPI:new_record` | 定时 + 数据表(监视行) | | `TableCLIAPI:update_record` | 数据表:更新行 | | `TableCLIAPI:updated_record` | 定时 + 数据表(监视行) | | `TallyCLIAPI:response` | Webhook(Tally) | | `TelegramCLIAPI:send_message` | Telegram:发送消息 | | `TodoistV2DevAPI:new_task` | Todoist:创建任务 | | `WebHookCLIAPI:catch_hook` | Webhook | | `WebHookCLIAPI:catch_raw_hook` | Webhook | | `WebHookCLIAPI:custom_request` | HTTP 请求 | | `WebHookCLIAPI:get` | HTTP 请求 | | `WebHookCLIAPI:hook` | Webhook | | `WebHookCLIAPI:hook_raw` | Webhook | | `WebHookCLIAPI:hook_v2` | Webhook | | `WebHookCLIAPI:patch` | HTTP 请求 | | `WebHookCLIAPI:post` | HTTP 请求 | | `WebHookCLIAPI:put` | HTTP 请求 | | `WebhooksCLIAPI:catch_hook` | Webhook | | `WebhooksCLIAPI:catch_raw_hook` | Webhook | | `WebhooksCLIAPI:custom_request` | HTTP 请求 | | `WebhooksCLIAPI:get` | HTTP 请求 | | `WebhooksCLIAPI:hook` | Webhook | | `WebhooksCLIAPI:hook_raw` | Webhook | | `WebhooksCLIAPI:hook_v2` | Webhook | | `WebhooksCLIAPI:patch` | HTTP 请求 | | `WebhooksCLIAPI:post` | HTTP 请求 | | `WebhooksCLIAPI:put` | HTTP 请求 | | `ZapierFormatterCLIAPI:*` | 编辑字段 | | `ZapierMailCLIAPI:outbound` | 发送邮件 |

其他内容也会纳入工作流:从 362 个 n8n 应用节点中选择最接近的节点、向应用 API 发送 HTTP 请求,或使用输入已连线的 Code 节点;这些内容都会被禁用,并附上完成配置的说明。

哪些内容无法转换,以及原因

  • 凭据。 Make 和 Zapier 从不导出凭据。请在 n8n 中创建凭据;报告会列出需要凭据的节点。
  • 数据。 Make 数据存储和 Zapier Tables 会转换为 n8n Data Tables(n8n 1.113 或更高版本),并保留相同的字段,但数据行不会一并迁移。
  • Webhook URL。 n8n 会为每个 webhook 分配新地址。报告会列出这些地址,以便你更新发送方。
  • 来自 Zapier 或 Make 的 Python 代码。 n8n 可以运行 Python,但在 1.x 和 2.x 中读取输入的方式不同:代码会放入 Code 节点,供你调整。
  • 应用的输出字段名称。 n8n 的应用节点有时会使用不同的结果名称。读取这些结果的步骤会标记为 ⚠️,以便你在测试运行后检查一次字段。

命令行

migrate-to-n8n convert <file> [-o <folder>] [--zap <id or title>]...
migrate-to-n8n list-zaps <file>
migrate-to-n8n supported [text] [--source make|zapier]
migrate-to-n8n check <workflow.json>
migrate-to-n8n upload <workflow.json>      # needs N8N_URL and N8N_API_KEY
migrate-to-n8n serve                       # MCP server over stdio

开发

npm install
npm run n8n-types     # n8n's node catalogs, for the tests (kept out of the package)
npm test              # unit tests, golden conversions, checks against n8n's own node descriptions
npm run corpus -- download && npm run corpus -- stats    # measure on public exports (needs gh)
docker compose -f docker-compose.e2e.yml up -d && npm run e2e   # real n8n 2.x and 1.x

转换器写入的每个节点都会根据 n8n 2.44 和 1.123 的参数说明进行检查:包括名称、允许的值和显示规则。n8n 目录仅为测试而下载,不会随项目发布。

路线图

  • Make 错误处理路由中的路由器(目前,处理程序的模块会被放在错误输出上的同一行)。
  • 根据用户的转换需求支持更多应用。告诉我你需要哪些应用。

联系方式

欢迎提供反馈、想法、工作机会或定制项目(n8n、MCP、AI 自动化):[email protected]。 欢迎通过 Issues 提交错误报告和功能请求。

许可证

MIT。Make、Zapier 和 n8n 是其各自所有者的商标;本项目与这些公司无关。

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。