Orchestrate migration from Heroku to Render using both platforms' MCP servers. Triggers: any mention of migrating from Heroku, moving off Heroku, Heroku to Render migration, or switching from Heroku. Guides through a multi-step migration workflow: inventory Heroku app config, create equivalent Render services, bulk-migrate environment variables, generate database migration commands, and verify deployment health.
Orchestrate migration from Heroku to Render by reading from the Heroku MCP server and writing to the Render MCP server. Both must be connected to the current client.
Before starting, verify both MCP servers are available. Confirm access to:
list_apps toollist_services toolIf either is missing, instruct the user to configure both servers. See the MCP setup guide.
Execute steps in order. Present findings to the user and get confirmation before creating any resources.
Call these Heroku MCP tools and compile results:
list_apps — let user select which app to migrateget_app_info — capture: app name, region, stack, buildpacks, config varslist_addons — identify Postgres, Redis, Scheduler, third-party add-onsps_list — capture dyno types (web, worker, clock), sizes, countsFrom the buildpack URLs, determine runtime. From the config or Procfile, determine start commands. See the buildpack mapping for buildpack-to-runtime and Procfile-to-service mapping.
Present a summary:
App: [name] | Region: [region] | Runtime: [node/python/ruby/etc]
Build command: [inferred from buildpack]
Processes:
web: [command from Procfile] → Render web service
worker: [command] → Render background worker (Blueprint only)
clock: [command] → Render cron job
release: [command] → Append to build command
Add-ons: Heroku Postgres (standard-0), Heroku Data for Redis (mini)
Config vars: 14 total (list names, not values)
Before creating anything, validate the migration plan and present it to the user. Check for:
docker, warn user they need a Dockerfiletype: worker, minimum plan starter), but cannot be created via MCP tools directlyrelease:, suggest appending to build commandstatic.json, or SPA framework deps — use create_static_site instead of create_web_service. See detection rules in the buildpack mapping.release:)Present the full plan as a table:
MIGRATION PLAN — [app-name]
─────────────────────────────────
CREATE (include only items that apply):
✅ Web service ([runtime], starter) — startCommand: [cmd]
✅ Background worker ([runtime], starter) — startCommand: [cmd]
✅ Cron job (starter) — schedule: [cron expr] — command: [cmd]
✅ Postgres (basic-1gb)
✅ Key Value (starter)
METHOD: [Blueprint | MCP Direct Creation]
MANUAL STEPS REQUIRED:
⚠️ Custom domain: [domain] — configure after deploy
⚠️ Replace add-on: [name] → find alternative
ENV VARS: [N] to migrate, [M] filtered out
DATABASE: [size] — pg_dump/pg_restore required
─────────────────────────────────
Proceed? (y/n)
Wait for user confirmation before creating any resources.
After the user approves the pre-flight plan, select the creation method:
Use MCP Direct Creation when ALL are true:
Use Blueprint (recommended for most migrations) when ANY are true:
Most Heroku apps include at least a database, so Blueprint is the default path. If unsure, use Blueprint.
Generate a render.yaml file using the projects/environments pattern to group all migrated resources in a single Render project. See the Blueprint example for a complete example and the Blueprint YAML spec for the full reference.
Use the correct default plan for each service type. Since Heroku has no free tier, default to the cheapest paid Render plan (upgrade if the Heroku plan maps higher):
| Service type | Default plan |
|---|---|
Web service (type: web) | starter |
Static site (runtime: static) | starter |
Background worker (type: worker) | starter |
Cron job (type: cron) | starter |
Key Value (type: keyvalue) | starter |
| Postgres (database) | basic-1gb |
Blueprint structure: