mcpField
M
Migrate to n8n

Migrate to n8n

ローカル
github.com生産性01 週間前に更新

Migrate to n8n について

Migrate to n8nは、MakeのシナリオやZapierのZapを、インポート可能なn8nワークフローに変換し、変換済み・要確認・手動対応の項目を段階ごとに報告します。MCPサーバーまたはコマンドラインツールとして動作し、ファイルはローカルに置かれます。

主な機能

  1. 01Makeのエクスポートをn8nワークフローに変換
  2. 02Zapierのエクスポートをワークフローに変換
  3. 03変換済み・要確認・手動対応を報告
  4. 04インポート前にワークフローの問題を確認
  5. 05任意でn8nにワークフローをアップロード

活用シーン

  1. 01Makeのシナリオをn8nへ移行
  2. 02Zapierのエクスポートから対象のZapを移行
  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。

README(原文)English

プロジェクトの README より

この README の日本語訳はまだありません。以下は英語の原文です。日本語の紹介はページ上部をご覧ください。

migrate-to-n8n

npm downloads ci license

Move your Make scenarios and Zapier zaps to n8n. Give it the export, get an n8n workflow you can import, plus a report on every step: what converted, what you should check, and how to finish the rest.

It works as an MCP server (ask Claude, Cursor, VS Code or any MCP client to "convert this to n8n") and as a plain command-line tool. Free and open source. Your scenarios stay on your computer.

Make blueprint or Zapier export → migrate-to-n8n → n8n workflow and report

What you get

Every step of your scenario ends up in one of three states, and the report lists them all:

What it meansExample
✅ convertedRuns after import. You only reconnect credentials.Webhook, HTTP request, router, iterator, Gmail send
⚠️ reviewConverted, with one named thing to check.A formula with no exact n8n twin, a sheet written by column letter
🛠 manualNo safe automatic equivalent. The step sits in place, disabled, with a sticky note that says what to do.A private Make app: you get a Code node that already collects its inputs

Nothing gets dropped. Manual steps keep the workflow connected, so it imports and runs while you finish them. This is the demo scenario after conversion, opened in n8n 2.44: the private CRM app has no n8n node, so its step waits disabled, with a note on what to do.

The converted demo scenario in the n8n editor

Formulas carry over too: {{formatDate(1.date; "DD.MM.YYYY")}} becomes {{ DateTime.fromISO(String($('Webhook').item.json.body.date)).toFormat('dd.LL.yyyy') }}.

Measured on 2026-10-22 on the public Make blueprints and Zapier exports found on GitHub:

SourceWorkflowsSteps✅ Converted⚠️ To review🛠 ManualBroken outputsTime (median)
Make1,43210,12942.7%40.5%16.7%00.7 ms
Zapier1489107%63.7%29.2%00.3 ms

"Broken outputs" counts workflows that n8n would reject. The test suite also imports a sample of these workflows into real n8n 2.44 and 1.123, and runs some of them through their webhooks to compare the answers with Make. Many public Zapier exports come without step settings or code, which keeps the Zapier numbers lower.

Try it in one minute

You need Node.js 22 or newer.

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

The workflow and the report go to Documents/migrate-to-n8n. Import the .n8n.json file in n8n: Workflows → Import from File.

No export at hand? Try the demo scenario: download it and run the same command on it.

Step by step

1. Export from Make or Zapier
  • Make: open the scenario, click ⋯ at the bottom of the editor, choose Export Blueprint.
  • Zapier: Settings → Security and data → Download my Zap workflows. You get one file with all your zaps. Pick the ones you want with list_zaps (or migrate-to-n8n list-zaps <file>).
2. Connect it to your AI client

Claude Desktop: download migrate-to-n8n.mcpb and open it. Claude Desktop installs it in one click. The settings are optional: an output folder, and your n8n address and API key if you want uploads.

Claude Code:

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

Cursor, VS Code, Windsurf and other clients: add this to the client's MCP config (.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 uses "servers" instead of "mcpServers".

3. Convert

Attach the file in the chat (or give its path) and ask:

Convert this Make scenario to n8n and help me finish what doesn't convert.

The assistant gets the report and walks you through every step marked ⚠️ or 🛠.

4. Import into n8n

Import the .n8n.json file (Workflows → Import from File), pick your credentials in the nodes the report lists, point webhook senders to the new URL, run it once with test data, then activate it.

With N8N_URL and N8N_API_KEY set (n8n → Settings → n8n API), the assistant can upload the workflow for you. It creates a new, inactive workflow named "… (migrated)" and never touches existing ones.

Tools

ToolWhat it does
convert_makeMake blueprint → n8n workflow file + report
convert_zapierZapier export → one workflow file + report per zap
list_zapsThe zaps in a Zapier export: title, steps, apps, on/off
suggest_replacementHow one module or step is handled, and what to use instead
supported_modulesSearch what converts automatically
check_n8n_workflowProblems left in a workflow file: broken links, disabled steps, placeholders, credentials
upload_to_n8nCreate the workflow in your n8n, inactive (only when N8N_URL and N8N_API_KEY are set)

What converts

Flow control converts in full on both sides: routers and paths (every matching route runs, as in Make and Zapier), filters with AND/OR groups, iterators and aggregators, error handlers, schedules, variables, webhooks and responses, HTTP requests, JSON, Formatter, Code, Delay, Storage. About 50 Make formula functions, Make date formats, operators and 25 Zapier Formatter transforms translate to n8n expressions.

Make: 135 modules and steps convert automatically
Module / stepBecomes in n8n
*:makeApiCallHTTP Request (the app's API)
airtable:ActionCreateRecordAirtable: Create
airtable:ActionGetRecordAirtable: Get
airtable:ActionSearchRecordsAirtable: Search
airtable:ActionUpdateRecordsAirtable: Update
airtable:TriggerWatchRecordsAirtable Trigger
anthropic-claude:createAMessageAnthropic: Message a Model
anthropic-claude:simpleTextPromptAnthropic: Message a Model
apify:fetchDatasetItemsHTTP Request (Apify API)
apify:finishedActorRunsWebhook (Apify)
apify:runActorHTTP Request (Apify API)
apify:runActorNewHTTP Request (Apify API)
builtin:BasicAggregatorAggregate
builtin:BasicFeederSplit Out
builtin:BasicFilterNo Operation
builtin:BasicIteratorSplit Out
builtin:BasicRepeaterCode (repeat)
builtin:BasicRouterNo Operation (fan-out)
code:ExecuteCodeCode
csv:ParseCSVCode (parse CSV) + Split Out
datastore:AddRecordData Table: Insert Row
datastore:DeleteRecordData Table: Delete Rows
datastore:ExistRecordData Table: If Row Exists
datastore:GetRecordData Table: Get Rows
datastore:SearchRecordData Table: Get Rows
datastore:UpdateRecordData Table: Update / Upsert
discord:createMessageDiscord: Send Message
dropbox:createShareLinkHTTP Request (Dropbox API)
dropbox:uploadLargeFileDropbox: Upload
email:ActionSendEmailSend Email (SMTP)
email:TriggerNewEmailEmail Trigger (IMAP)
facebook-pages:CreatePostFacebook Graph API: Page Post
facebook-pages:CreatePostWithPhotosFacebook Graph API: Page Photo Post
gateway:CustomWebHookWebhook
gateway:WebhookRespondRespond to Webhook
gemini-ai:createACompletionGeminiProGoogle Gemini: Message a Model
gmail:ActionSendEmailGmail: Send
gmail:sendAnEmailGmail: Send
gmail:TriggerNewEmailGmail Trigger
google-calendar:createAnEventGoogle Calendar: Create Event
google-calendar:deleteAnEventGoogle Calendar: Delete Event
google-calendar:searchEventsGoogle Calendar: Get Many Events
google-docs:createADocumentGoogle Docs: Create
google-docs:createADocumentFromTemplateGoogle Drive: Copy (template)
google-docs:getADocumentGoogle Docs: Get
google-drive:createAFolderGoogle Drive: Create Folder
google-drive:getAFileGoogle Drive: Download
google-drive:moveAFileIntoAFolderGoogle Drive: Move
google-drive:searchForFilesFoldersGoogle Drive: Search
google-drive:shareAFileFolderGoogle Drive: Share
google-drive:uploadAFileGoogle Drive: Upload
google-drive:watchFilesInAFolderGoogle Drive Trigger
google-email:ActionCreateDraftGmail: Create Draft
google-email:ActionSendEmailGmail: Send
google-email:createADraftGmail: Create Draft
google-email:sendAnEmailGmail: Send
google-email:TriggerNewEmailGmail Trigger
google-email:TriggerWatchEmailsGmail Trigger
google-email:triggerWatchNewEmailsGmail Trigger
google-sheets:addRowGoogle Sheets: Append Row
google-sheets:createSpreadsheetGoogle Sheets: Create Spreadsheet
google-sheets:deleteRowGoogle Sheets: Delete Rows
google-sheets:filterRowsGoogle Sheets: Get Rows (+ Filter)
google-sheets:getCellHTTP Request (Sheets API, read a cell)
google-sheets:getSheetContentGoogle Sheets: Get Rows (+ Filter)
google-sheets:searchRowsGoogle Sheets: Get Rows (+ Filter)
google-sheets:searchRowsAdvancedGoogle Sheets: Get Rows (+ Filter)
google-sheets:updateCellHTTP Request (Sheets API, write a cell)
google-sheets:updateRowGoogle Sheets: Update Row
google-sheets:watchRowsGoogle Sheets Trigger (row added)
http:ActionGetFileHTTP Request (file)
http:ActionSendDataHTTP Request
http:ActionSendDataAPIKeyAuthHTTP Request (API key)
http:ActionSendDataBasicAuthHTTP Request (basic auth)
http:DownloadFileHTTP Request (file)
http:MakeRequestHTTP Request
instagram-business:CreateAReelPostFacebook Graph API: Instagram reel + publish
instagram-business:CreatePostPhotoFacebook Graph API: Instagram media + publish
json:AggregateToJSONAggregate + Edit Fields
json:CreateJSONEdit Fields
json:ParseJSONEdit Fields (JSON)
json:TransformToJSONEdit Fields
linkedin:CreateCompanyImagePostLinkedIn: Create Post
linkedin:CreateCompanyPostLinkedIn: Create Post
linkedin:CreatePostLinkedIn: Create Post
linkedin:ShareImageLinkedIn: Create Post
manychat:SetSubscriberCustomFieldHTTP Request (ManyChat API)
markdown:CompileMarkdown → HTML
notion:createAPageNotion: Create Database Page
notion:updateADatabaseItemNotion: Update Database Page
open-router:createAChatCompletionHTTP Request (OpenRouter API)
openai-gpt-3:askAnythingOpenAI: Message a Model
openai-gpt-3:CreateCompletionOpenAI: Message a Model
openai-gpt-3:createModelResponseOpenAI: Message a Model
openai-gpt-3:GenerateImageOpenAI: Generate an Image
openai-gpt-3:messageAssistantAdvancedOpenAI: Message a Model (instructions)
openai-gpt-3:transformTextToStructuredDataOpenAI: Message a Model (JSON)
perplexity-ai:createAChatCompletionHTTP Request (Perplexity API)
placeholder:PlaceholderNo Operation
regexp:HTMLToTextEdit Fields
regexp:ParserCode
regexp:ReplaceEdit Fields
resend:sendAnEmailHTTP Request (Resend API)
rss:ActionReadArticlesRSS Read
rss:TriggerNewArticleRSS Feed Trigger
scenario-service:ReturnDataEdit Fields (sub-workflow output)
slack:CreateMessageSlack: Send Message
slack:InviteUsersSlack: Invite to Channel
supabase:ActionCreateARecordSupabase: Create Row
supabase:createARowSupabase: Create Row
supabase:searchRowsSupabase: Get Many Rows
supabase:upsertARecordSupabase: Create Row
telegram:DownloadFileTelegram: Get File
telegram:SendReplyMessageTelegram: Send Message
telegram:WatchUpdatesTelegram Trigger
twilio:SendSMSTwilio: Send SMS
twitter:createATweetX (Twitter): Create Tweet
typeform:ListResponsesHTTP Request (Typeform API)
typeform:WatchEventsWithResponsesTypeform Trigger
util:ComposeTransformerEdit Fields
util:FunctionAggregator2Aggregate + Edit Fields
util:FunctionIncrementCode (counter)
util:FunctionSleepWait
util:GetVariable2Edit Fields
util:GetVariablesEdit Fields
util:SetMultipleVariablesEdit Fields
util:SetVariable2Edit Fields
util:SetVariablesEdit Fields
util:SleepWait
util:SwitcherEdit Fields
util:TextAggregatorAggregate + Edit Fields
webflow:publishAnItemHTTP Request (Webflow API)
webflow:updateItemWebflow: Update Item
whatsapp-business-cloud:sendMessageWhatsApp: Send Message
xml:ParseXMLXML (to JSON)
Zapier: 98 modules and steps convert automatically
Module / stepBecomes in n8n
AICLIAPI:get_completionOpenAI: Message a Model
AirtableCLIAPI:create_or_update_recordAirtable: Upsert
AirtableCLIAPI:createRecordAirtable: Create
AirtableCLIAPI:newRecordInViewAirtable Trigger
AirtableCLIAPI:updateRecordAirtable: Update
BranchingAPI:branchNo Operation (fan-out)
ChatGPTCLIAPI:chat_completionOpenAI: Message a Model
ChatGPTCLIAPI:chat_completion_memoryOpenAI: Message a Model
ChatGPTCLIAPI:conversationOpenAI: Message a Model
CodeCLIAPI:*Code
DelayAPI:delay_forWait
DelayAPI:delay_untilWait
DelayCLIAPI:delay_forWait
DelayCLIAPI:delay_untilWait
EmailCLIAPI:*Send Email
ExcelCLIAPI:add_rowMicrosoft Excel: Append to Table
ExcelCLIAPI:add_rowsMicrosoft Excel: Append to Table
FilterAPI:filterFilter
FilterCLIAPI:filterFilter
FilterCLIAPI:zapier_filterFilter
GmailAPI:messageGmail: Send (or Gmail Trigger as the first step)
GmailV2API:messageGmail: Send (or Gmail Trigger as the first step)
GoogleMailCLIAPI:messageGmail: Send (or Gmail Trigger as the first step)
GoogleMailV2CLIAPI:messageGmail: Send (or Gmail Trigger as the first step)
GoogleSheetsAPI:add_rowGoogle Sheets: Append Row
GoogleSheetsAPI:add_rowsGoogle Sheets: Append Row
GoogleSheetsCLIAPI:add_rowGoogle Sheets: Append Row
GoogleSheetsCLIAPI:add_rowsGoogle Sheets: Append Row
GoogleSheetsV2API:add_rowGoogle Sheets: Append Row
GoogleSheetsV2API:add_rowsGoogle Sheets: Append Row
GoogleSheetsV2API:new_or_updated_rowGoogle Sheets Trigger
GoogleSheetsV2API:new_rowGoogle Sheets Trigger
GoogleSheetsV2API:new_row_notify_hookGoogle Sheets Trigger
GoogleSheetsV2API:updated_row_notify_hookGoogle Sheets Trigger
GoogleSheetsV2CLIAPI:add_rowGoogle Sheets: Append Row
GoogleSheetsV2CLIAPI:add_rowsGoogle Sheets: Append Row
GoogleSheetsV2CLIAPI:new_or_updated_rowGoogle Sheets Trigger
GoogleSheetsV2CLIAPI:new_rowGoogle Sheets Trigger
GoogleSheetsV2CLIAPI:new_row_notify_hookGoogle Sheets Trigger
GoogleSheetsV2CLIAPI:updated_row_notify_hookGoogle Sheets Trigger
HubSpotCLIAPI:_zap_raw_requestHTTP Request (HubSpot API: API request)
HubSpotCLIAPI:company_crmSearchHTTP Request (HubSpot API: Search companies)
HubSpotCLIAPI:contact_crmSearchHTTP Request (HubSpot API: Search contacts)
HubSpotCLIAPI:create_associationsHTTP Request (HubSpot API: Create an association between two records)
HubSpotCLIAPI:deal_crmSearchHTTP Request (HubSpot API: Search deals)
HubSpotCLIAPI:find_associationsHTTP Request (HubSpot API: Find the associations of a record)
HubSpotCLIAPI:update_crm_dealHTTP Request (HubSpot API: Update a deal)
HubSpotCLIAPI:upsert_contactHubSpot: Create or Update Contact
InterfacesCLIAPI:new_form_submissionn8n Form Trigger
LinearCLIAPI:create_issueLinear: Create Issue
LoopingCLIAPI:*Split Out
NotionCLIAPI:create_database_itemNotion: Create Database Page
OpenAiCLIAPI:send_promptOpenAI: Message a Model
S3API:fileAWS S3: Upload
ScheduleAPI:*Schedule Trigger
SlackAPI:channel_messageSlack: Send Message (or Slack Trigger as the first step)
SlackAPI:direct_messageSlack: Send Message (to a user)
SlackAPI:send_channel_messageSlack: Send Message (or Slack Trigger as the first step)
SlackCLIAPI:channel_messageSlack: Send Message (or Slack Trigger as the first step)
SlackCLIAPI:direct_messageSlack: Send Message (to a user)
SlackCLIAPI:send_channel_messageSlack: Send Message (or Slack Trigger as the first step)
StorageCLIAPI:get_all_valuesCode (static data)
StorageCLIAPI:get_valueCode (static data)
StorageCLIAPI:increment_valueCode (static data)
StorageCLIAPI:remove_valueCode (static data)
StorageCLIAPI:set_valueCode (static data)
TableCLIAPI:create_recordData Table: Insert Row
TableCLIAPI:find_recordData Table: Get Rows
TableCLIAPI:increment_valueCode (increment a Data Table value)
TableCLIAPI:new_or_updated_recordSchedule + Data Table (watch rows)
TableCLIAPI:new_recordSchedule + Data Table (watch rows)
TableCLIAPI:update_recordData Table: Update Row
TableCLIAPI:updated_recordSchedule + Data Table (watch rows)
TallyCLIAPI:responseWebhook (Tally)
TelegramCLIAPI:send_messageTelegram: Send Message
TodoistV2DevAPI:new_taskTodoist: Create Task
WebHookCLIAPI:catch_hookWebhook
WebHookCLIAPI:catch_raw_hookWebhook
WebHookCLIAPI:custom_requestHTTP Request
WebHookCLIAPI:getHTTP Request
WebHookCLIAPI:hookWebhook
WebHookCLIAPI:hook_rawWebhook
WebHookCLIAPI:hook_v2Webhook
WebHookCLIAPI:patchHTTP Request
WebHookCLIAPI:postHTTP Request
WebHookCLIAPI:putHTTP Request
WebhooksCLIAPI:catch_hookWebhook
WebhooksCLIAPI:catch_raw_hookWebhook
WebhooksCLIAPI:custom_requestHTTP Request
WebhooksCLIAPI:getHTTP Request
WebhooksCLIAPI:hookWebhook
WebhooksCLIAPI:hook_rawWebhook
WebhooksCLIAPI:hook_v2Webhook
WebhooksCLIAPI:patchHTTP Request
WebhooksCLIAPI:postHTTP Request
WebhooksCLIAPI:putHTTP Request
ZapierFormatterCLIAPI:*Edit Fields
ZapierMailCLIAPI:outboundSend Email

Anything else still gets a place in the workflow: the closest of 362 n8n app nodes, an HTTP request to the app's API, or a Code node with the inputs already wired, each disabled with a note on how to finish it.

What does not convert, and why

  • Credentials. Make and Zapier never export them. Create them in n8n; the report lists which nodes need one.
  • Data. Make data stores and Zapier Tables become n8n Data Tables (n8n 1.113 or newer) with the same fields, but the rows stay behind.
  • Webhook URLs. n8n gives each webhook a new address. The report names them so you can update the senders.
  • Python code from Zapier or Make. n8n runs Python, but reads inputs differently in 1.x and 2.x: the code is placed in a Code node for you to adapt.
  • Output field names of apps. n8n's app nodes sometimes name results differently. Steps that read them are marked ⚠️ so you can check the field once after a test run.

Command line

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

Development

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

Every node the converter writes is checked against the parameter descriptions of n8n 2.44 and 1.123: names, allowed values and display rules. The n8n catalogs are downloaded for tests only and never ship.

Roadmap

  • Routers inside Make error-handler routes (today the modules of a handler are placed in one line on the error output).
  • More apps, driven by what people convert. Tell me which ones you need.

Contact

Feedback, ideas, job offers or custom projects (n8n, MCP, AI automation): [email protected]. Bug reports and feature requests are welcome in Issues.

License

MIT. Make, Zapier and n8n are trademarks of their owners; this project is not affiliated with them.

コメント

MCP は初めてですか?

プロトコルの概要から最初のサーバーの導入まで、よくある疑問にまとめて答えます。

AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。