Unofficial · MIT · No telemetry

render-useful-mcp

A Model Context Protocol server that gives an AI assistant the whole Render Public API — services, deploys, cron jobs, Postgres, Key Value, disks, environment groups, logs and metrics. Every tool is generated from Render's own OpenAPI document, so coverage is complete by construction and stays that way.

Install

Claude Code — globally

claude mcp add render --scope user \
  -e RENDER_API_KEY=rnd_your_key \
  -- npx -y render-useful-mcp

--scope user is the part that matters. Claude Code defaults to local scope, which registers the server for the current directory only — so it works where you installed it and is missing everywhere else. That is the usual reason a freshly added MCP server seems to disappear. Confirm with claude mcp list from an unrelated directory.

ScopeFlagWhere it livesAvailable in
User (global) --scope user your user configuration every project, every directory
Project --scope project .mcp.json, committed anyone who checks the repo out
Local none (default) per-directory user state the directory it was added from

Claude Code — as a plugin

Wires up the server and its docs in one step. Plugins are installed for your user, so this is global by nature.

/plugin marketplace add LuSrodri/render-useful-mcp
/plugin install render-useful-mcp@lusrodri-render

Export RENDER_API_KEY in the shell that launches Claude Code; the plugin reads it from the environment rather than storing it.

Claude Desktop, and any client using mcpServers

{
  "mcpServers": {
    "render": {
      "command": "npx",
      "args": ["-y", "render-useful-mcp"],
      "env": {
        "RENDER_API_KEY": "rnd_your_key_here",
        "RENDER_WORKSPACE_ID": "tea_your_workspace_id"
      }
    }
  }
}

Claude for macOS and Windows — desktop extension

Download the .mcpb bundle from the latest release and open it. Claude installs it and asks for the API key in a form. The bundle ships its own dependencies, so it needs neither npm nor a Node install.

Get an API key from Render Dashboard → Account Settings → API Keys. Everything except the desktop extension needs Node.js 20.11 or newer. Setting RENDER_WORKSPACE_ID is optional but recommended: many Render endpoints need an ownerId the model cannot guess, and setting it removes a lookup from nearly every session.

Creating a Docker cron job

The case models most often got wrong, and the one this server works hardest to make obvious. A Render cron job is a service, so it is created with render_create_service:

{
  "type": "cron_job",
  "name": "nightly-report",
  "ownerId": "tea-…",
  "repo": "https://github.com/acme/reports",
  "branch": "main",
  "serviceDetails": {              // the cronJobDetailsPOST branch
    "runtime": "docker",
    "schedule": "0 3 * * *",       // five-field cron, UTC, required
    "plan": "starter",
    "region": "oregon",
    "envSpecificDetails": {        // dockerDetails, because runtime is docker
      "dockerfilePath": "./Dockerfile",
      "dockerContext": ".",
      "dockerCommand": "python report.py"
    }
  }
}

For a prebuilt image instead of a build, drop repo/branch, set image to {"ownerId": "tea-…", "imagePath": "docker.io/acme/reports:latest"}, use "runtime": "image", and give envSpecificDetails only the dockerCommand. Change the schedule later with render_update_service; trigger an off-schedule run with render_run_cron_job. render_create_job is a different thing — a one-off command on an existing service.

Built to be used by a model

A generated tool is only as good as what the spec says about it, and Render's spec describes shapes rather than usage. Three things close that gap.

oneOf branches keep their names

Inlining a $ref normally discards the schema's name, leaving serviceDetails as five anonymous, structurally similar objects. Each branch now carries its name from Render's spec, so cron_jobcronJobDetailsPOST is a decision a model can actually make.

Hand-written usage notes

A small set of operations carry an appended Usage: paragraph — a full worked example for creating a service, a warning that env-var updates replace the whole set. The build fails if a note names an operation Render has withdrawn.

Server instructions

Id prefixes, resolve-the-name-first, which workflow tool replaces which raw sequence — sent once at initialize, rather than duplicated into every tool description that needs it.

Toolsets

Every toolset is enabled by default — the server exposes everything your API key is allowed to reach. Toolsets exist to narrow the surface on purpose, via RENDER_MCP_TOOLSETS, not to gate it. RENDER_MCP_READ_ONLY=true hides every mutating tool outright.

ToolsetToolsCovers
services42Services, deploys, custom domains, one-off jobs, cron job runs and events
metrics23CPU, memory, bandwidth, HTTP, disk and connection metrics, plus metrics streams
postgres21Postgres instances, users, exports, recovery and query insights
workflows15Render Workflows and workflow tasks (public beta)
env-groups13Environment groups, their variables and secret files
projects12Projects and environments
webhooks11Webhooks and notification settings/overrides
logs10Log queries, label discovery and log stream configuration
static-sites9Header rules and redirect/rewrite routes for static sites
deprecated8Legacy Redis endpoints that Render has superseded by the Key Value API
key-value8Key Value (Redis-compatible) instances and connection info
workspaces8Workspaces, members, the authenticated user and audit logs
disks7Persistent disks and their snapshots
blueprints6Blueprints and Blueprint syncs
network5Dedicated outbound IP sets
registry5Container registry credentials
maintenance4Scheduled maintenance runs

Workflow tools

Always available, in any toolset configuration. They exist because the equivalent raw sequence is several calls a model usually gets wrong on the first try.

ToolWhat it does
render_find_serviceResolves a service name — including a partial or approximate one — to a single Render service, returning its id plus close alternatives.
render_recent_logsFetches recent log lines for a service, resolving the service name and workspace id for you.
render_service_statusOne-call triage for a service: its configuration, latest deploys, running instances and most recent error-level logs.
render_toolsetsLists every Render toolset with its tool count and whether it is currently enabled.
render_wait_for_deployPolls a deploy until it reaches a terminal state (live, build_failed, update_failed, canceled, deactivated) or the timeout expires.

Configuration

VariableDefaultDescription
RENDER_API_KEYRequired. Your Render API key.
RENDER_WORKSPACE_IDWorkspace id used wherever an ownerId is needed and none was given.
RENDER_MCP_TOOLSETSallNarrow the surface to a comma-separated list of toolsets.
RENDER_MCP_READ_ONLYfalseExpose only non-mutating tools.
RENDER_MCP_DYNAMIC_TOOLSETStrueRegister render_toolsets, which reports the toolsets and their state.
RENDER_MCP_TIMEOUT_MS60000Per-request timeout.
RENDER_MCP_MAX_RETRIES3Retries for rate limits and transient server errors.
RENDER_MCP_MAX_RESPONSE_BYTES400000Larger tool results are truncated with a note.
RENDER_MCP_LOG_LEVELinfodebug, info, warn, error, silent. Logs go to stderr.
RENDER_API_BASE_URLhttps://api.render.com/v1Override for proxies or testing.

Questions

Why did my MCP server disappear after I changed directory?

It was installed in local scope, which is Claude Code's default and is per-directory. Re-run the install with --scope user to register it globally.

Is this official?

No. It is an independent open-source project and is not affiliated with Render. Render publishes its own Claude Code plugin at render-oss/render-plugin-claude-code, which takes a different approach — hand-written skills and agents for common workflows. This one is generated from Render's OpenAPI document and exposes the complete API surface, so the two are complementary rather than alternatives.

Where does my API key go?

To Render, and nowhere else. The server runs on your machine and contacts exactly one host. The key is read from the environment, never written to disk, and redacted from log output. No telemetry, no analytics, no backend — see PRIVACY.md.

How does it keep up with the Render API?

A scheduled GitHub Actions workflow re-fetches Render's published API description daily, regenerates the tool catalogue and this documentation, and opens a pull request when the set of tools actually changes — with a summary of what was added, removed or reshaped. Nothing merges automatically, because a new Render endpoint can be a breaking change.

Can I stop an agent from changing anything?

Set RENDER_MCP_READ_ONLY=true. Mutating tools are then not exposed at all, rather than merely discouraged. Short of that, every tool carries MCP readOnlyHint, destructiveHint and idempotentHint annotations derived from real HTTP semantics, so a client can make sensible auto-approval decisions.

For AI agents

This site publishes llms.txt and llms-full.txt, and registers WebMCP tools in supporting browsers so an agent reading this page can search the tool catalogue, produce an install command, or fetch a worked example directly. All of it is generated from the same catalogue the server ships.