Deploy applications to Render by analyzing codebases, generating render.yaml Blueprints, and providing Dashboard deeplinks. Use when the user wants to deploy, host, publish, or set up their application on Render's cloud platform.
Add this skill
npx mdskills install openai/render-deployComprehensive deployment skill with multiple methods, detailed prerequisites, and strong decision heuristics
1---2name: render-deploy3description: Deploy applications to Render by analyzing codebases, generating render.yaml Blueprints, and providing Dashboard deeplinks. Use when the user wants to deploy, host, publish, or set up their application on Render's cloud platform.4---56# Deploy to Render78Render supports **Git-backed** services and **prebuilt Docker image** services.910This skill covers **Git-backed** flows:111. **Blueprint Method** - Generate render.yaml for Infrastructure-as-Code deployments122. **Direct Creation** - Create services instantly via MCP tools1314Blueprints can also run a **prebuilt Docker image** by using `runtime: image`, but the `render.yaml` still must live in a Git repo.1516If there is no Git remote, stop and ask the user to either:17- Create/push a Git remote (can be minimal if only the Blueprint is needed), or18- Use the Render Dashboard/API to deploy a prebuilt Docker image (MCP cannot create image-backed services).1920## Prerequisites2122- When sandboxing blocks the deployment network calls, rerun with `sandbox_permissions=require_escalated`.23- The deployment might take a few minutes. Use appropriate timeout values.2425## When to Use This Skill2627Activate this skill when users want to:28- Deploy an application to Render29- Create a render.yaml Blueprint file30- Set up Render deployment for their project31- Host or publish their application on Render's cloud platform32- Create databases, cron jobs, or other Render resources3334## Happy Path (New Users)3536Use this short prompt sequence before deep analysis to reduce friction:371. Ask whether they want to deploy from a Git repo or a prebuilt Docker image.382. Ask whether Render should provision everything the app needs (based on what seems likely from the user's description) or only the app while they bring their own infra. If dependencies are unclear, ask a short follow-up to confirm whether they need a database, workers, cron, or other services.3940Then proceed with the appropriate method below.4142## Choose Your Source Path4344**Git Repo Path:** Required for both Blueprint and Direct Creation. The repo must be pushed to GitHub, GitLab, or Bitbucket.4546**Prebuilt Docker Image Path:** Supported by Render via image-backed services. This is **not** supported by MCP; use the Dashboard/API. Ask for:47- Image URL (registry + tag)48- Registry auth (if private)49- Service type (web/worker) and port5051If the user chooses a Docker image, guide them to the Render Dashboard image deploy flow or ask them to add a Git remote (so you can use a Blueprint with `runtime: image`).5253## Choose Your Deployment Method (Git Repo)5455Both methods require a Git repository pushed to GitHub, GitLab, or Bitbucket. (If using `runtime: image`, the repo can be minimal and only contain `render.yaml`.)5657| Method | Best For | Pros |58|--------|----------|------|59| **Blueprint** | Multi-service apps, IaC workflows | Version controlled, reproducible, supports complex setups |60| **Direct Creation** | Single services, quick deployments | Instant creation, no render.yaml file needed |6162### Method Selection Heuristic6364Use this decision rule by default unless the user requests a specific method. Analyze the codebase first; only ask if deployment intent is unclear (e.g., DB, workers, cron).6566**Use Direct Creation (MCP) when ALL are true:**67- Single service (one web app or one static site)68- No separate worker/cron services69- No attached databases or Key Value70- Simple env vars only (no shared env groups)71If this path fits and MCP isn't configured yet, stop and guide MCP setup before proceeding.7273**Use Blueprint when ANY are true:**74- Multiple services (web + worker, API + frontend, etc.)75- Databases, Redis/Key Value, or other datastores are required76- Cron jobs, background workers, or private services77- You want reproducible IaC or a render.yaml committed to the repo78- Monorepo or multi-env setup that needs consistent configuration7980If unsure, ask a quick clarifying question, but default to Blueprint for safety. For a single service, strongly prefer Direct Creation via MCP and guide MCP setup if needed.8182## Prerequisites Check8384When starting a deployment, verify these requirements in order:8586**1. Confirm Source Path (Git vs Docker)**8788If using Git-based methods (Blueprint or Direct Creation), the repo must be pushed to GitHub/GitLab/Bitbucket. Blueprints that reference a prebuilt image still require a Git repo with `render.yaml`.8990```bash91git remote -v92```9394- If no remote exists, stop and ask the user to create/push a remote **or** switch to Docker image deploy.9596**2. Check MCP Tools Availability (Preferred for Single-Service)**9798MCP tools provide the best experience. Check if available by attempting:99```100list_services()101```102103If MCP tools are available, you can skip CLI installation for most operations.104105**3. Check Render CLI Installation (for Blueprint validation)**106```bash107render --version108```109If not installed, offer to install:110- macOS: `brew install render`111- Linux/macOS: `curl -fsSL https://raw.githubusercontent.com/render-oss/cli/main/bin/install.sh | sh`112113**4. MCP Setup (if MCP isn't configured)**114115If `list_services()` fails because MCP isn't configured, ask whether they want to set up MCP (preferred) or continue with the CLI fallback. If they choose MCP, ask which AI tool they're using, then provide the matching instructions below. Always use their API key.116117### Cursor118119Walk the user through these steps:1201211) Get a Render API key:122```123https://dashboard.render.com/u/*/settings#api-keys124```1251262) Add this to `~/.cursor/mcp.json` (replace `<YOUR_API_KEY>`):127```json128{129 "mcpServers": {130 "render": {131 "url": "https://mcp.render.com/mcp",132 "headers": {133 "Authorization": "Bearer <YOUR_API_KEY>"134 }135 }136 }137}138```1391403) Restart Cursor, then retry `list_services()`.141142### Claude Code143144Walk the user through these steps:1451461) Get a Render API key:147```148https://dashboard.render.com/u/*/settings#api-keys149```1501512) Add the MCP server with Claude Code (replace `<YOUR_API_KEY>`):152```bash153claude mcp add --transport http render https://mcp.render.com/mcp --header "Authorization: Bearer <YOUR_API_KEY>"154```1551563) Restart Claude Code, then retry `list_services()`.157158### Codex159160Walk the user through these steps:1611621) Get a Render API key:163```164https://dashboard.render.com/u/*/settings#api-keys165```1661672) Set it in their shell:168```bash169export RENDER_API_KEY="<YOUR_API_KEY>"170```1711723) Add the MCP server with the Codex CLI:173```bash174codex mcp add render --url https://mcp.render.com/mcp --bearer-token-env-var RENDER_API_KEY175```1761774) Restart Codex, then retry `list_services()`.178179### Other Tools180181If the user is on another AI app, direct them to the Render MCP docs for that tool's setup steps and install method.182183### Workspace Selection184185After MCP is configured, have the user set the active Render workspace with a prompt like:186187```188Set my Render workspace to [WORKSPACE_NAME]189```190191**5. Check Authentication (CLI fallback only)**192193If MCP isn't available, use the CLI instead and verify you can access your account:194```bash195# Check if user is logged in (use -o json for non-interactive mode)196render whoami -o json197```198199If `render whoami` fails or returns empty data, the CLI is not authenticated. The CLI won't always prompt automatically, so explicitly prompt the user to authenticate:200201If neither is configured, ask user which method they prefer:202- **API Key (CLI)**: `export RENDER_API_KEY="rnd_xxxxx"` (Get from https://dashboard.render.com/u/*/settings#api-keys)203- **Login**: `render login` (Opens browser for OAuth)204205**6. Check Workspace Context**206207Verify the active workspace:208```209get_selected_workspace()210```211212Or via CLI:213```bash214render workspace current -o json215```216217To list available workspaces:218```219list_workspaces()220```221222If user needs to switch workspaces, they must do so via Dashboard or CLI (`render workspace set`).223224Once prerequisites are met, proceed with deployment workflow.225226---227228# Method 1: Blueprint Deployment (Recommended for Complex Apps)229230## Blueprint Workflow231232### Step 1: Analyze Codebase233234Analyze the codebase to determine framework/runtime, build and start commands, required env vars, datastores, and port binding. Use the detailed checklists in [references/codebase-analysis.md](references/codebase-analysis.md).235236### Step 2: Generate render.yaml237238Create a `render.yaml` Blueprint file following the Blueprint specification.239240Complete specification: [references/blueprint-spec.md](references/blueprint-spec.md)241242**Key Points:**243- Always use `plan: free` unless user specifies otherwise244- Include ALL environment variables the app needs245- Mark secrets with `sync: false` (user fills these in Dashboard)246- Use appropriate service type: `web`, `worker`, `cron`, `static`, or `pserv`247- Use appropriate runtime: [references/runtimes.md](references/runtimes.md)248249**Basic Structure:**250```yaml251services:252 - type: web253 name: my-app254 runtime: node255 plan: free256 buildCommand: npm ci257 startCommand: npm start258 envVars:259 - key: DATABASE_URL260 fromDatabase:261 name: postgres262 property: connectionString263 - key: JWT_SECRET264 sync: false # User fills in Dashboard265266databases:267 - name: postgres268 databaseName: myapp_db269 plan: free270```271272**Service Types:**273- `web`: HTTP services, APIs, web applications (publicly accessible)274- `worker`: Background job processors (not publicly accessible)275- `cron`: Scheduled tasks that run on a cron schedule276- `static`: Static sites (HTML/CSS/JS served via CDN)277- `pserv`: Private services (internal only, within same account)278279Service type details: [references/service-types.md](references/service-types.md)280Runtime options: [references/runtimes.md](references/runtimes.md)281Template examples: [assets/](assets/)282283### Step 2.5: Immediate Next Steps (Always Provide)284285After creating `render.yaml`, always give the user a short, explicit checklist and run validation immediately when the CLI is available:2861. **Authenticate (CLI)**: run `render whoami -o json` (if not logged in, run `render login` or set `RENDER_API_KEY`)2872. **Validate (recommended)**: run `render blueprints validate`288 - If the CLI isn't installed, offer to install it and provide the command.2893. **Commit + push**: `git add render.yaml && git commit -m "Add Render deployment configuration" && git push origin main`2904. **Open Dashboard**: Use the Blueprint deeplink and complete Git OAuth if prompted2915. **Fill secrets**: Set env vars marked `sync: false`2926. **Deploy**: Click "Apply" and monitor the deploy293294### Step 3: Validate Configuration295296Validate the render.yaml file to catch errors before deployment. If the CLI is installed, run the commands directly; only prompt the user if the CLI is missing:297298```bash299render whoami -o json # Ensure CLI is authenticated (won't always prompt)300render blueprints validate301```302303Fix any validation errors before proceeding. Common issues:304- Missing required fields (`name`, `type`, `runtime`)305- Invalid runtime values306- Incorrect YAML syntax307- Invalid environment variable references308309Configuration guide: [references/configuration-guide.md](references/configuration-guide.md)310311### Step 4: Commit and Push312313**IMPORTANT:** You must merge the `render.yaml` file into your repository before deploying.314315Ensure the `render.yaml` file is committed and pushed to your Git remote:316317```bash318git add render.yaml319git commit -m "Add Render deployment configuration"320git push origin main321```322323If there is no Git remote yet, stop here and guide the user to create a GitHub/GitLab/Bitbucket repo, add it as `origin`, and push before continuing.324325**Why this matters:** The Dashboard deeplink will read the render.yaml from your repository. If the file isn't merged and pushed, Render won't find the configuration and deployment will fail.326327Verify the file is in your remote repository before proceeding to the next step.328329### Step 5: Generate Deeplink330331Get the Git repository URL:332333```bash334git remote get-url origin335```336337This will return a URL from your Git provider. **If the URL is SSH format, convert it to HTTPS:**338339| SSH Format | HTTPS Format |340|------------|--------------|341| `git@github.com:user/repo.git` | `https://github.com/user/repo` |342| `git@gitlab.com:user/repo.git` | `https://gitlab.com/user/repo` |343| `git@bitbucket.org:user/repo.git` | `https://bitbucket.org/user/repo` |344345**Conversion pattern:** Replace `git@<host>:` with `https://<host>/` and remove `.git` suffix.346347Format the Dashboard deeplink using the HTTPS repository URL:348```349https://dashboard.render.com/blueprint/new?repo=<REPOSITORY_URL>350```351352Example:353```354https://dashboard.render.com/blueprint/new?repo=https://github.com/username/repo-name355```356357### Step 6: Guide User358359**CRITICAL:** Ensure the user has merged and pushed the render.yaml file to their repository before clicking the deeplink. If the file isn't in the repository, Render cannot read the Blueprint configuration and deployment will fail.360361Provide the deeplink to the user with these instructions:3623631. **Verify render.yaml is merged** - Confirm the file exists in your repository on GitHub/GitLab/Bitbucket3642. Click the deeplink to open Render Dashboard3653. Complete Git provider OAuth if prompted3664. Name the Blueprint (or use default from render.yaml)3675. Fill in secret environment variables (marked with `sync: false`)3686. Review services and databases configuration3697. Click "Apply" to deploy370371The deployment will begin automatically. Users can monitor progress in the Render Dashboard.372373### Step 7: Verify Deployment374375After the user deploys via Dashboard, verify everything is working.376377**Check deployment status via MCP:**378```379list_deploys(serviceId: "<service-id>", limit: 1)380```381Look for `status: "live"` to confirm successful deployment.382383**Check for runtime errors (wait 2-3 minutes after deploy):**384```385list_logs(resource: ["<service-id>"], level: ["error"], limit: 20)386```387388**Check service health metrics:**389```390get_metrics(391 resourceId: "<service-id>",392 metricTypes: ["http_request_count", "cpu_usage", "memory_usage"]393)394```395396If errors are found, proceed to the **Post-deploy verification and basic triage** section below.397398---399400# Method 2: Direct Service Creation (Quick Single-Service Deployments)401402For simple deployments without Infrastructure-as-Code, create services directly via MCP tools.403404## When to Use Direct Creation405406- Single web service or static site407- Quick prototypes or demos408- When you don't need a render.yaml file in your repo409- Adding databases or cron jobs to existing projects410411## Prerequisites for Direct Creation412413**Repository must be pushed to a Git provider.** Render clones your repository to build and deploy services.414415```bash416git remote -v # Verify remote exists417git push origin main # Ensure code is pushed418```419420Supported providers: GitHub, GitLab, Bitbucket421422If no remote exists, stop and ask the user to create/push a remote or switch to Docker image deploy.423424**Note:** MCP does not support creating image-backed services. Use the Dashboard/API for prebuilt Docker image deploys.425426## Direct Creation Workflow427428Use the concise steps below, and refer to [references/direct-creation.md](references/direct-creation.md) for full MCP command examples and follow-on configuration.429430### Step 1: Analyze Codebase431Use [references/codebase-analysis.md](references/codebase-analysis.md) to determine runtime, build/start commands, env vars, and datastores.432433### Step 2: Create Resources via MCP434Create the service (web or static) and any required databases or key-value stores. See [references/direct-creation.md](references/direct-creation.md).435436If MCP returns an error about missing Git credentials or repo access, stop and guide the user to connect their Git provider in the Render Dashboard, then retry.437438### Step 3: Configure Environment Variables439Add required env vars via MCP after creation. See [references/direct-creation.md](references/direct-creation.md).440441Remind the user that secrets can be set in the Dashboard if they prefer not to pass them via MCP.442443### Step 4: Verify Deployment444Check deploy status, logs, and metrics. See [references/direct-creation.md](references/direct-creation.md).445446---447448For service discovery, configuration details, quick commands, and common issues, see [references/deployment-details.md](references/deployment-details.md).449450---451452# Post-deploy verification and basic triage (All Methods)453454Keep this short and repeatable. If any check fails, fix it before redeploying.4554561. Confirm the latest deploy is `live` and serving traffic4572. Hit the health endpoint (or root) and verify a 200 response4583. Scan recent error logs for a clear failure signature4594. Verify required env vars and port binding (`0.0.0.0:$PORT`)460461Detailed checklist and commands: [references/post-deploy-checks.md](references/post-deploy-checks.md)462463If the service fails to start or health checks time out, use the basic triage guide:464[references/troubleshooting-basics.md](references/troubleshooting-basics.md)465466## Troubleshooting467468### Escalated Network Access469470If deployment fails due to network issues (timeouts, DNS errors, connection resets), rerun the deploy with escalated permissions (use `sandbox_permissions=require_escalated`). The deploy requires escalated network access when sandbox networking blocks outbound requests.471472Example guidance to the user:473474```475The deploy needs escalated network access to deploy to Render. I can rerun the command with escalated permissions—want me to proceed?476```477478Optional: If you need deeper diagnostics (metrics/DB checks/error catalog), suggest installing the479`render-debug` skill. It is not required for the core deploy flow.480
Full transparency — inspect the skill content before installing.