render
Deploy and operate apps on Render from OpenClaw (Blueprint + Dashboard deeplink, native MCP, or REST). Use when the user wants to deploy, host, or publish an app; create or edit re…
Ojus M Save
@ojusave
Install
$ openclaw skills install @ojusave/deploy-on-renderRender Skill
Deploy apps to Render from OpenClaw. Prefer a Blueprint when the app is more than one service. Prefer native Render MCP for a single web or static site once MCP is connected. Workflows are a separate service type and do not belong in render.yaml yet.
Field names and CLI verbs change. Before emitting YAML or API bodies, fetch Blueprint spec and MCP docs. Official Cursor/Codex skills: render-oss/skills.
When to Use This Skill
Activate when the user wants to:
- Deploy, host, or publish an application on Render
- Create or edit a
render.yamlBlueprint - Add web, static, private, worker, cron, or Workflow services; Postgres; or Key Value
- Connect Render MCP from OpenClaw, or fall back to mcporter / REST
- Validate a Blueprint or get a Dashboard deeplink
Method Selection
Use this rule unless the user names a method.
Direct create (MCP, else REST) when all of these are true:
- One web service or one static site
- No worker, cron, private service, or Workflow
- No Postgres or Key Value at create time
- Simple env vars only (no env groups)
- MCP is connected, or
RENDER_API_KEYis set and the user accepts REST
If this path fits and MCP is not connected, set up MCP first (references/mcp-integration.md). Do not invent a Blueprint unless the user prefers IaC.
Blueprint + push + deeplink when any of these are true:
- Multiple services
- Postgres, Key Value, worker, cron, or private service
- The user wants IaC in the repo
- No MCP and no API key
Dashboard or Render CLI for Workflows. Blueprints cannot create or manage them. See references/workflows.md.
Live actions (required)
Creating services, triggering deploys (API, MCP trigger_deploy, or a deploy hook), replacing env vars, restarting, or destroying resources changes a live Render workspace and can incur cost. Blueprint Apply in the Dashboard is the user’s click; do not also fire API/MCP/hook deploys unless they asked for that too.
Before any mutating call, state in chat and wait for an explicit yes for this action:
- Target workspace (not “whatever is selected”)
- Service or Blueprint name
- Environment: production vs preview vs new
- Plan / that the resource can be billable and persistent
- What will happen (create, redeploy, env replace, destroy)
Do not treat a general “deploy this app” from an earlier turn as consent to redeploy now.
Read-only list/get/logs/metrics are fine once credentials exist.
Credentials: never print RENDER_API_KEY, deploy-hook URLs with secrets, or Authorization headers. Check presence, not value:
[ -n "$RENDER_API_KEY" ] && echo "RENDER_API_KEY is set" || echo "RENDER_API_KEY is not set"
openclaw mcp doctor render --probe
Do not echo headers, curl -v, or MCP probe output that might contain the token. Prefer a test workspace for first-time MCP/REST creates.
Happy Path (New Users)
Happy Path (New Users)
- Git repo (GitHub, GitLab, Bitbucket, or Cursor Origin) vs prebuilt Docker image. Image-backed services are Dashboard/API only; MCP cannot create them. A Blueprint with
runtime: imagestill needsrender.yamlin a Git repo. - Whether Render should provision the database, workers, cron, or Workflow the app actually needs.
Then follow the matching method below.
Prerequisites
- Git remote for Blueprint and MCP Git deploys:
git remote -v. If none, ask the user to create a repo, addorigin, and push. Cursor Origin is in beta; workspace admins connect it in Render Account Settings. - Render CLI (optional) for
render blueprints validateandrender workflows init. Install:brew install renderor the Render CLI. - API key (optional) for MCP, REST, verify, and re-deploy: API Keys. Set
RENDER_API_KEY. Do not commit it.
Security Notes
- Never put secret values in
render.yaml, chat, or logs. Record env names only; usesync: falseand have the user fill values in the Dashboard. - Validate before push:
render blueprints validate render.yamlor the Validate Blueprint API. - Do not
git commit/git pushunless the user asked to deploy or confirmed the Blueprint file. - New Key Value instances:
ipAllowList: []unless the user asked for public access. - Do not set continuous auto-deploy unless the user wants every push to go live.
- Sanitize user-supplied names before writing YAML.
References
references/codebase-analysis.mdreferences/blueprint-spec.mdreferences/workflows.mdreferences/mcp-integration.mdreferences/rest-api-deployment.mdreferences/post-deploy-checks.mdreferences/troubleshooting-basics.mdassets/(node-express, python-web, static-site, web-with-postgres)
Method 1: Blueprint + deeplink
Step 1: Analyze and write render.yaml
Use references/codebase-analysis.md. Put render.yaml at the repo root. sync: false for secrets. Validate before asking for a push.
render blueprints validate render.yaml
Step 2: Commit and push
Render reads the Blueprint from the Git remote.
git add render.yaml
git commit -m "Add Render deployment configuration"
git push origin main
Stop if there is no remote.
Step 3: Dashboard deeplink
git remote get-url origin
Convert SSH to HTTPS and drop .git:
| SSH | HTTPS |
|---|---|
git@github.com:user/repo.git | https://github.com/user/repo |
git@gitlab.com:user/repo.git | https://gitlab.com/user/repo |
git@bitbucket.org:user/repo.git | https://bitbucket.org/user/repo |
Cursor Origin remotes: use the HTTPS URL Render’s Git-provider docs show for that host. Do not guess a hostname.
Deeplink:
https://dashboard.render.com/blueprint/new?repo=<REPO_HTTPS_URL>
User checklist: confirm render.yaml is on the default branch, click the link, finish Git OAuth, fill sync: false vars, Apply.
Step 4: Verify
If MCP is connected, use list_services / list_deploys / list_logs (see references/mcp-integration.md). Else REST (references/post-deploy-checks.md). Expect latest deploy status: "live".
Re-deploy
Only after the Live actions checklist. A deploy hook URL is a production trigger: same confirmation as MCP/REST.
- Push to the linked branch when the user already enabled auto-deploy and wants this commit live.
- MCP:
trigger_deploy(after yes). - REST:
POST https://api.render.com/v1/services/{serviceId}/deployswithAuthorization: Bearer $RENDER_API_KEY. Optional body:{ "clearCache": "do_not_clear" }or"clear". - Deploy hook:
curl -X POST "$RENDER_DEPLOY_HOOK_URL"only if the user provided the hook and confirmed this redeploy. Do not log the URL.
Method 2: Direct create (MCP or REST)
Single web or static site only. Confirm the repo is pushed. Complete Live actions (workspace, plan/cost, explicit yes). Then references/mcp-integration.md (preferred) or references/rest-api-deployment.md.
MCP cannot create: workers, private services, Workflows, image-backed services. Use Blueprint or Dashboard for those.
Set the workspace first (list_workspaces / get_selected_workspace, or ask the user to pick one). Do not create in the first workspace returned without confirmation.
Blueprint snippets
File: render.yaml at repo root (Render can use another path at setup; default is root).
Root keys: services, databases, envVarGroups, projects, ungrouped, previews. Not Workflows.
Service types in YAML: web, pserv, worker, cron, keyvalue. Static site: type: web + runtime: static. Private services: pserv, not private.
Runtimes: node, python, elixir, go, ruby, rust, docker, image, static. Prefer runtime; env is deprecated.
Web
services:
- type: web
name: my-app
runtime: node
plan: free
buildCommand: npm ci
startCommand: npm start
healthCheckPath: /health
envVars:
- key: NODE_ENV
value: production
Python: runtime: python, buildCommand: pip install -r requirements.txt, startCommand: uvicorn app.main:app --host 0.0.0.0 --port $PORT. Bind HTTP to 0.0.0.0:$PORT. Set PYTHON_VERSION / NODE_VERSION when the repo pins them.
Static site
No plan field.
- type: web
name: my-blog
runtime: static
buildCommand: npm ci && npm run build
staticPublishPath: ./dist
Optional: headers, routes.
Env vars
- Literal:
key+value(never secrets). - Postgres:
fromDatabase.name+fromDatabase.property(connectionString). - Key Value / other service:
fromService.type+fromService.name+fromService.property(orfromService.envVarKey). - Secret:
sync: false(service-level only; not inside env groups). - Generated:
generateValue: true. - Shared:
fromGroup: <envVarGroups[].name>.
Env groups cannot use fromDatabase, fromService, or sync: false.
Postgres
databases:
- name: my-db
plan: basic-256mb
databaseName: my_app
user: my_user
region: oregon
postgresMajorVersion: "18"
Plans: free, basic-256mb, basic-1gb, basic-4gb, pro-*, accelerated-*. Free instances expire after 30 days. Confirm the default major version on the spec before pinning. Optional: diskSizeGB, ipAllowList, readReplicas, highAvailability.enabled, storageAutoscalingEnabled, connectionPool.
Key Value
ipAllowList is required. Default to private:
services:
- type: keyvalue
name: my-cache
ipAllowList: []
plan: free
maxmemoryPolicy: allkeys-lru
Public access only if requested: source: 0.0.0.0/0. Reference with fromService.type: keyvalue, property: connectionString. Paid instances persist; see spec for persistenceMode.
Cron
- type: cron
name: my-cron
runtime: python
schedule: "0 * * * *"
buildCommand: "true"
startCommand: python scripts/daily.py
buildCommand is required. Free plan is not available for cron, worker, or pserv.
Env groups
envVarGroups:
- name: app-env
envVars:
- key: CONCURRENCY
value: "2"
- key: APP_SECRET
generateValue: true
services:
- type: web
name: api
envVars:
- fromGroup: app-env
- key: DATABASE_URL
fromDatabase:
name: my-db
property: connectionString
Health, region, scaling, disks, Docker
- Web:
healthCheckPathfor zero-downtime deploys. region:oregon(default),ohio,virginia,frankfurt,singapore. Set at create.preDeployCommandafter build, before start (migrations).- Manual scale:
numInstances. Autoscaling:scaling.minInstances/maxInstances/ CPU or memory targets. Not with persistent disks. - Disk:
disk.name,disk.mountPath,disk.sizeGBon web, pserv, worker. - Monorepo:
rootDir,buildFilter.paths/ignoredPaths. - Docker:
runtime: dockerorruntime: image.dockerCommandinstead ofstartCommandwhen needed.
Previews and projects
previews.generation:off|manual|automatic. Optionalpreviews.expireAfterDays.projectswithenvironmentsfor staging/production.ungroupedfor leftovers.
Service plans
free | starter | standard | pro | pro plus (web/pserv/worker also pro max, pro ultra). Omit to keep an existing plan. Default for new paid-capable services is starter if you skip plan. Free is not available for pserv, worker, cron.
Dashboard: https://dashboard.render.com. New Key Value: https://dashboard.render.com/new/redis.
Checklist
- Choose MCP/REST vs Blueprint vs Workflow CLI using the heuristic above.
- Write
render.yamlwhen using Blueprint:runtime, Key Value astype: keyvalue,ipAllowList: []unless public access was requested. sync: falsefor secrets at service level only.- Validate, commit, push, then the Blueprint deeplink. Or create via MCP after workspace selection.
- Verify deploy
live. Fix fromreferences/troubleshooting-basics.mdbefore a second deploy.
Rules
- Prefer Blueprint for the full app; MCP for one web or static site; Dashboard/CLI for Workflows.
- Never commit API keys or secrets.
- Use
fromServicewith the real type (keyvalue,pserv). - Confirm live docs when a field is missing from this file rather than guessing.
Top skills in this category
Safe Exec
@otttttoSafe command execution for OpenClaw Agents with automatic danger pattern detection, risk assessment, user approval workflow, and audit logging. Use when agen...
MYSQL QUERY
@zenixpQuery project databases with automatic SSH tunnel management. Use when you need to execute SQL queries against configured databases, especially those accessi...
Token Manager
@kelegeleUniversal LLM Token Manager - Monitor usage and provide cost-saving recommendations for Kimi, OpenAI, Anthropic, Gemini, and local models. Features scheduled monitoring, cross-session tracking, and proactive alerts.
A simple Flight Tracker
@xenofex7Flight tracking and scheduling. Track live flights in real-time by region, callsign, or airport using OpenSky Network. Search flight schedules between airports. Use for queries like "What flights are over Switzerland?" or "When do flights from Hamburg arrive in Zurich?" or "Track flight SWR123".
Zyfai Yield Automation
@pauldefiEarn yield on any Ethereum wallet on Ethereum Mainnet, Base, and Arbitrum. Use when a user wants passive DeFi yield on their funds. The first deposit assigns a non-custodial pre-deployed subaccount (Safe) with a signed session key to their EOA, no separate deploy or session-key step.