migrate-to-n8n
Converts Make scenario blueprints into n8n workflows, providing a generated workflow file and a report classifying every step as converted, needing review, or manual.
Generates importable n8n workflow files, checks them for issues like broken links or placeholders, and can upload them as inactive workflows to an n8n instance via its API.
Converts Zapier zap exports into n8n workflows, generating a workflow file and report per zap, and supports listing zaps within an export.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@migrate-to-n8nConvert this Make blueprint to n8n and tell me what I need to finish by hand."
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
migrate-to-n8n
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.
What you get
Every step of your scenario ends up in one of three states, and the report lists them all:
What it means | Example | |
✅ converted | Runs after import. You only reconnect credentials. | Webhook, HTTP request, router, iterator, Gmail send |
⚠️ review | Converted, with one named thing to check. | A formula with no exact n8n twin, a sheet written by column letter |
🛠 manual | No 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.

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-21 on the public Make blueprints and Zapier exports found on GitHub:
Source | Workflows | Steps | ✅ Converted | ⚠️ To review | 🛠 Manual | Broken outputs | Time (median) |
Make | 1,432 | 10,129 | 42% | 38.1% | 19.9% | 0 | 1.1 ms |
Zapier | 148 | 910 | 7% | 63.7% | 29.2% | 0 | 0.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.
Related MCP server: N8N MCP Server
Try it in one minute
You need Node.js 22 or newer.
npx migrate-to-n8n convert my-scenario.blueprint.jsonThe 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(ormigrate-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 serveCursor, 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
Tool | What it does |
| Make blueprint → n8n workflow file + report |
| Zapier export → one workflow file + report per zap |
| The zaps in a Zapier export: title, steps, apps, on/off |
| How one module or step is handled, and what to use instead |
| Search what converts automatically |
| Problems left in a workflow file: broken links, disabled steps, placeholders, credentials |
| Create the workflow in your n8n, inactive (only when |
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.
Module / step | Becomes in n8n |
| HTTP Request (the app's API) |
| Airtable: Create |
| Airtable: Get |
| Airtable: Search |
| Airtable: Update |
| Airtable Trigger |
| Anthropic: Message a Model |
| Anthropic: Message a Model |
| HTTP Request (Apify API) |
| Webhook (Apify) |
| HTTP Request (Apify API) |
| Aggregate |
| Split Out |
| No Operation |
| Split Out |
| Code (repeat) |
| No Operation (fan-out) |
| Code |
| Data Table: Insert Row |
| Data Table: If Row Exists |
| Data Table: Get Rows |
| Data Table: Get Rows |
| Data Table: Update / Upsert |
| Discord: Send Message |
| HTTP Request (Dropbox API) |
| Dropbox: Upload |
| Send Email (SMTP) |
| Webhook |
| Respond to Webhook |
| Google Gemini: Message a Model |
| Gmail: Send |
| Gmail: Send |
| Gmail Trigger |
| Google Calendar: Create Event |
| Google Calendar: Get Many Events |
| Google Docs: Create |
| Google Drive: Copy (template) |
| Google Drive: Create Folder |
| Google Drive: Download |
| Google Drive: Move |
| Google Drive: Search |
| Google Drive: Share |
| Google Drive: Upload |
| Google Drive Trigger |
| Gmail: Send |
| Gmail: Create Draft |
| Gmail: Send |
| Gmail Trigger |
| Gmail Trigger |
| Gmail Trigger |
| Google Sheets: Append Row |
| Google Sheets: Delete Rows |
| Google Sheets: Get Rows (+ Filter) |
| HTTP Request (Sheets API, read a cell) |
| Google Sheets: Get Rows (+ Filter) |
| Google Sheets: Get Rows (+ Filter) |
| Google Sheets: Get Rows (+ Filter) |
| HTTP Request (Sheets API, write a cell) |
| Google Sheets: Update Row |
| Google Sheets Trigger (row added) |
| HTTP Request (file) |
| HTTP Request |
| HTTP Request (API key) |
| HTTP Request (basic auth) |
| HTTP Request (file) |
| HTTP Request |
| Aggregate + Edit Fields |
| Edit Fields |
| Edit Fields (JSON) |
| Edit Fields |
| LinkedIn: Create Post |
| LinkedIn: Create Post |
| LinkedIn: Create Post |
| LinkedIn: Create Post |
| Markdown → HTML |
| Notion: Create Database Page |
| OpenAI: Message a Model |
| OpenAI: Message a Model |
| OpenAI: Generate an Image |
| OpenAI: Message a Model (instructions) |
| OpenAI: Message a Model (JSON) |
| HTTP Request (Perplexity API) |
| No Operation |
| Edit Fields |
| Code |
| Edit Fields |
| HTTP Request (Resend API) |
| RSS Read |
| RSS Feed Trigger |
| Edit Fields (sub-workflow output) |
| Slack: Send Message |
| Slack: Invite to Channel |
| Supabase: Create Row |
| Supabase: Get Many Rows |
| Supabase: Create Row |
| Telegram: Get File |
| Telegram: Send Message |
| Telegram Trigger |
| Twilio: Send SMS |
| Typeform Trigger |
| Edit Fields |
| Code (counter) |
| Wait |
| Edit Fields |
| Edit Fields |
| Edit Fields |
| Edit Fields |
| Edit Fields |
| Edit Fields |
| Aggregate + Edit Fields |
| WhatsApp: Send Message |
Module / step | Becomes in n8n |
| OpenAI: Message a Model |
| Airtable: Upsert |
| Airtable: Create |
| Airtable Trigger |
| Airtable: Update |
| No Operation (fan-out) |
| OpenAI: Message a Model |
| OpenAI: Message a Model |
| OpenAI: Message a Model |
| Code |
| Wait |
| Wait |
| Wait |
| Wait |
| Send Email |
| Microsoft Excel: Append to Table |
| Microsoft Excel: Append to Table |
| Filter |
| Filter |
| Filter |
| Gmail: Send (or Gmail Trigger as the first step) |
| Gmail: Send (or Gmail Trigger as the first step) |
| Gmail: Send (or Gmail Trigger as the first step) |
| Gmail: Send (or Gmail Trigger as the first step) |
| Google Sheets: Append Row |
| Google Sheets: Append Row |
| Google Sheets: Append Row |
| Google Sheets: Append Row |
| Google Sheets: Append Row |
| Google Sheets: Append Row |
| Google Sheets Trigger |
| Google Sheets Trigger |
| Google Sheets Trigger |
| Google Sheets Trigger |
| Google Sheets: Append Row |
| Google Sheets: Append Row |
| Google Sheets Trigger |
| Google Sheets Trigger |
| Google Sheets Trigger |
| Google Sheets Trigger |
| HTTP Request (HubSpot API: API request) |
| HTTP Request (HubSpot API: Search companies) |
| HTTP Request (HubSpot API: Search contacts) |
| HTTP Request (HubSpot API: Create an association between two records) |
| HTTP Request (HubSpot API: Search deals) |
| HTTP Request (HubSpot API: Find the associations of a record) |
| HTTP Request (HubSpot API: Update a deal) |
| HubSpot: Create or Update Contact |
| n8n Form Trigger |
| Linear: Create Issue |
| Split Out |
| Notion: Create Database Page |
| OpenAI: Message a Model |
| AWS S3: Upload |
| Schedule Trigger |
| Slack: Send Message (or Slack Trigger as the first step) |
| Slack: Send Message (to a user) |
| Slack: Send Message (or Slack Trigger as the first step) |
| Slack: Send Message (or Slack Trigger as the first step) |
| Slack: Send Message (to a user) |
| Slack: Send Message (or Slack Trigger as the first step) |
| Code (static data) |
| Code (static data) |
| Code (static data) |
| Code (static data) |
| Code (static data) |
| Data Table: Insert Row |
| Data Table: Get Rows |
| Code (increment a Data Table value) |
| Schedule + Data Table (watch rows) |
| Schedule + Data Table (watch rows) |
| Data Table: Update Row |
| Schedule + Data Table (watch rows) |
| Webhook (Tally) |
| Telegram: Send Message |
| Todoist: Create Task |
| Webhook |
| Webhook |
| HTTP Request |
| HTTP Request |
| Webhook |
| Webhook |
| Webhook |
| HTTP Request |
| HTTP Request |
| HTTP Request |
| Webhook |
| Webhook |
| HTTP Request |
| HTTP Request |
| Webhook |
| Webhook |
| Webhook |
| HTTP Request |
| HTTP Request |
| HTTP Request |
| Edit Fields |
| Send 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 stdioDevelopment
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.xEvery 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): kotiniiqq@gmail.com. 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.
This server cannot be deployed
Maintenance
Related MCP Connectors
n8n MCP — query your own n8n instance (BYO).
Security scanner for n8n workflows + live MCP Trust-Check. 18 rules, OWASP mapped. Paid x402 API.
Open-source Zapier/n8n alternative as an MCP server: agents build, run and debug your workflows.
MCP connector that lets ChatGPT list, search, and run your Apple Shortcuts via a local Mac agent
Related MCP Servers
- -licenseNot gradedqualityNot gradedmaintenanceProvides seamless integration between MCP-compatible AI assistants and n8n workflow automation, enabling intelligent management and automation of n8n workflows through natural language.5-
- AlicenseNot gradedqualityDmaintenanceEnables management of multiple N8N workflow automation instances through MCP. Supports listing, creating, updating, deleting, executing workflows and monitoring their executions across different N8N environments.53 npmMIT
- AlicenseBqualityDmaintenanceA comprehensive MCP server that provides full control over n8n automation workflows through natural language. It offers 43 tools for managing workflows, executions, credentials, and data tables, with safety features like write-mode protection and double-validated workflow creation.431MIT
- AlicenseAqualityCmaintenanceEnables management of n8n workflows, executions, credentials, tags, and variables via MCP tools. Supports stdio, Claude Code, and Claude Web with optional Authentik OAuth.22MIT