Render MCP Server

Create, deploy and troubleshoot Render services, Postgres and Key Value from an AI client

Official · Render OSS Go Remote (hosted) · Streamable HTTPLocal · stdio Cloud platformsDevOps and monitoringDatabases

40 popularity score ★ 194

Connect your client

Remote (hosted)

Add in one click

Opens the app, which asks before it adds the server. Then replace each <NAME> in its settings with your value.

Or add it by command or config

Its sign-in lets no client register itself: a client signs in only with an app (a client ID) registered with its maker first, so these snippets work only after that step.

Claude Codeterminal
claude mcp add --transport http render https://mcp.render.com/mcp --header "Authorization: Bearer <YOUR_API_KEY>"
Codexterminal
codex mcp add render --url https://mcp.render.com/mcp --oauth-client-id codex
Cursor~/.cursor/mcp.json
{ "mcpServers": { "render": { "url": "https://mcp.render.com/mcp", "headers": { "Authorization": "Bearer <YOUR_API_KEY>" } } } }
Claude (desktop and web)Settings → Connectors → Add custom connector
https://mcp.render.com/mcp
Local (container)

Add in one click

Opens the app, which asks before it adds the server. Then replace each <NAME> in its settings with your value.

Or add it by command or config

It needs RENDER_API_KEY. Replace each <NAME> with your value.

Claude CodeTerminal
claude mcp add render -e RENDER_API_KEY=<RENDER_API_KEY> -- docker run -i --rm -e RENDER_API_KEY -v render-mcp-server-config:/config ghcr.io/render-oss/render-mcp-server
Claude Desktopclaude_desktop_config.json
{
  "mcpServers": {
    "render": {
      "command": "docker",
      "args": [
        "run",
        "-i",
        "--rm",
        "-e",
        "RENDER_API_KEY",
        "-v",
        "render-mcp-server-config:/config",
        "ghcr.io/render-oss/render-mcp-server"
      ],
      "env": {
        "RENDER_API_KEY": "<RENDER_API_KEY>"
      }
    }
  }
}
Cursor~/.cursor/mcp.json
{
  "mcpServers": {
    "render": {
      "command": "docker",
      "args": [
        "run",
        "-i",
        "--rm",
        "-e",
        "RENDER_API_KEY",
        "-v",
        "render-mcp-server-config:/config",
        "ghcr.io/render-oss/render-mcp-server"
      ],
      "env": {
        "RENDER_API_KEY": "<RENDER_API_KEY>"
      }
    }
  }
}
VS Code.vscode/mcp.json
{
  "servers": {
    "render": {
      "type": "stdio",
      "command": "docker",
      "args": [
        "run",
        "-i",
        "--rm",
        "-e",
        "RENDER_API_KEY",
        "-v",
        "render-mcp-server-config:/config",
        "ghcr.io/render-oss/render-mcp-server"
      ],
      "env": {
        "RENDER_API_KEY": "<RENDER_API_KEY>"
      }
    }
  }
}
Codex~/.codex/config.toml
[mcp_servers.render]
command = "docker"
args = ["run", "-i", "--rm", "-e", "RENDER_API_KEY", "-v", "render-mcp-server-config:/config", "ghcr.io/render-oss/render-mcp-server"]

[mcp_servers.render.env]
RENDER_API_KEY = "<RENDER_API_KEY>"
Gemini CLITerminal
gemini mcp add --scope user -e RENDER_API_KEY=<RENDER_API_KEY> render docker -- run -i --rm -e RENDER_API_KEY -v render-mcp-server-config:/config ghcr.io/render-oss/render-mcp-server
Local (from source)

Add in one click

Opens the app, which asks before it adds the server. Then replace each <NAME> in its settings with your value.

Or add it by command or config

It needs RENDER_API_KEY. Replace each <NAME> with your value.

FirstTerminal
git clone https://github.com/render-oss/render-mcp-server.git
cd render-mcp-server
go build
Claude CodeTerminal
claude mcp add render -e RENDER_API_KEY=<RENDER_API_KEY> -- '<ABSOLUTE_PATH_TO_CLONE>/render-mcp-server'
Claude Desktopclaude_desktop_config.json
{
  "mcpServers": {
    "render": {
      "command": "<ABSOLUTE_PATH_TO_CLONE>/render-mcp-server",
      "args": [],
      "env": {
        "RENDER_API_KEY": "<RENDER_API_KEY>"
      }
    }
  }
}
Cursor~/.cursor/mcp.json
{
  "mcpServers": {
    "render": {
      "command": "<ABSOLUTE_PATH_TO_CLONE>/render-mcp-server",
      "args": [],
      "env": {
        "RENDER_API_KEY": "<RENDER_API_KEY>"
      }
    }
  }
}
VS Code.vscode/mcp.json
{
  "servers": {
    "render": {
      "type": "stdio",
      "command": "<ABSOLUTE_PATH_TO_CLONE>/render-mcp-server",
      "args": [],
      "env": {
        "RENDER_API_KEY": "<RENDER_API_KEY>"
      }
    }
  }
}
Codex~/.codex/config.toml
[mcp_servers.render]
command = "<ABSOLUTE_PATH_TO_CLONE>/render-mcp-server"
args = []

[mcp_servers.render.env]
RENDER_API_KEY = "<RENDER_API_KEY>"
Gemini CLITerminal
gemini mcp add --scope user -e RENDER_API_KEY=<RENDER_API_KEY> render '<ABSOLUTE_PATH_TO_CLONE>/render-mcp-server'

Settings 4

RENDER_API_KEY secret Required: Render API key from Account Settings, needed for local runs. The hosted endpoint can use OAuth instead.
RENDER_WORKSPACE Optional: Workspace ID to start with, so no select_workspace call is needed.
RENDER_CONFIG_PATH Optional: File where the selected workspace is saved. The Docker image sets /config/mcp-server.yaml. Default ~/.render/mcp-server.yaml.
RENDER_HOST Optional: Render API host to call. Default api.render.com.

In a container, a setting goes in with -e NAME=value after docker run.

What it does

Render MCP Server is Render's own server for its hosting platform, and it works in one Render workspace at a time. From a chat you can look over existing services or create new ones: web services, static sites, cron jobs, Postgres databases and Key Value instances. It can also set a service's environment variables.

The rest is for debugging. Logs can be filtered by labels such as level or status code. Metrics cover CPU and memory along with request counts, latency, bandwidth and connections, and there's a read-only SQL tool for Render Postgres.

Render runs a hosted copy at https://mcp.render.com/mcp over Streamable HTTP, where you sign in with OAuth or send a Render API key as a Bearer header. The same Go program also runs on your machine over stdio with RENDER_API_KEY, either from the ghcr.io/render-oss/render-mcp-server image or as a binary you download or build. Render recommends the hosted copy since it gets new tools as they land.

That gap matters right now. The 0.3.0 release registers 24 tools (see cmd/server.go and the pkg/*/tools.go files at that tag). The README on main adds trigger_deploy and list_events, plus five Blueprint tools in public alpha that sync a render.yaml from a repo. One more difference at 0.3.0: update_environment_variables merges what you send into the existing variables unless you pass replace, while the main README describes a full replacement.

What it needs

To run it yourselfDockerA prebuilt binaryGo
Runs onmacOS, Windows, Linux
RenderFree tierAPI key from Account Settings for local use. Paid plans chosen in create tools are billed, and response-time metrics need a Pro workspace or higher

Pick one way to run it locally: Docker, the release binary (install script on macOS or Linux, or a download from the releases page), or Go to build from source. The hosted endpoint needs only a client that speaks Streamable HTTP. Codex signs in with codex mcp add render --url https://mcp.render.com/mcp --oauth-client-id codex and then a browser flow. Claude Code and Cursor can also add it through Render's plugins, which set up OAuth.

Limits

  • Not covered Creates only web services, static sites, cron jobs, Postgres and Key Value. Other service types and image-backed services are not supported
  • Not covered At 0.3.0, create_web_service and create_cron_job take no Dockerfile path or context, and create_key_value has no persistence setting
  • Read only Cannot delete resources or change scaling. update_web_service, update_static_site and update_cron_job only return a Dashboard link
  • Not covered trigger_deploy, list_events and the Blueprint tools are on main and the hosted server but not in the 0.3.0 release
  • Early release The Blueprint tools (create_blueprint, get_blueprint, plan_blueprint, approve_blueprint, update_blueprint) are public alpha and may change
  • Limit query_render_postgres connects over the external URL, so the database IP allowlist applies. The hosted server has no addresses to allowlist yet
  • Read only SQL queries through query_render_postgres are read-only
  • Size cap Metrics reach back 30 days at most, with a resolution of 30 seconds or more
  • Limit Render does not guarantee that secrets such as connection strings stay out of the assistant's context

It can create only web services, static sites, cron jobs, Postgres and Key Value; other service types are not yet supported, and not every creation option is offered (no image-backed services, no IP allowlists). Existing resources can only be redeployed or have their environment variables replaced; the update_web_service, update_static_site and update_cron_job tools just return a Dashboard link. It cannot delete anything or change scaling. Events cover services only. Postgres queries are read-only and blocked by an IP allowlist; the hosted server has no addresses to allowlist yet. Render does not guarantee secrets such as connection strings stay out of the assistant's context.

Who it suits

Suits developers already hosting on Render who want an assistant to set up services and databases and then read logs and metrics while debugging. It is Render's own server and needs nothing installed when used hosted, which is also the only way to get trigger_deploy, list_events and the Blueprint tools today. It is not a full control plane. Deleting resources, scaling and editing service settings still need the Render Dashboard or REST API. Run the local image or binary when you must query a Postgres database behind an IP allowlist, or when your client cannot reach the hosted endpoint.

Tools 24

17 only read, 6 change things, 1 can delete or overwrite. A ? marks an optional parameter.

list_workspaces
Lists the Render workspaces the account can reach
select_workspace changes
Sets the workspace later calls act onownerID: string
get_selected_workspace
Shows which workspace is selected
list_services
Lists services in the workspaceincludePreviews?: boolean
get_service
Returns one service's detailsserviceId: string
create_web_service changes
Creates a web service from a repo with build and start commandsname: stringrepo?: stringbranch?: stringautoDeploy?: enumruntime: enumplan?: enumbuildCommand: stringstartCommand: stringregion?: enumenvVars?: array
create_static_site changes
Creates a static site with a build command and publish foldername: stringrepo?: stringbranch?: stringautoDeploy?: enumbuildCommand: stringpublishPath?: stringenvVars?: array
create_cron_job changes
Creates a cron job service on a schedulename: stringschedule: stringrepo?: stringbranch?: stringautoDeploy?: enumruntime: enumplan?: enumbuildCommand: stringstartCommand: stringregion?: enumenvVars?: array
update_web_service
Gives a Dashboard link for editing a web service and changes nothingserviceId: string
update_static_site
Gives a Dashboard link for editing a static site and changes nothingserviceId: string
update_cron_job
Gives a Dashboard link for editing a cron job and changes nothingserviceId: string
update_environment_variables deletes
Merges new environment variables into a service, or replaces the whole setserviceId: stringreplace?: booleanenvVars: array
list_deploys
Pages through a service's deploy historyserviceId: stringlimit?: numbercursor?: string
get_deploy
Returns one deploy's detailsserviceId: stringdeployId: string
list_logs
Fetches logs filtered by resource, level, time, text and request fieldsresource: arraylevel?: arraytype?: arrayinstance?: arrayhost?: arraystatusCode?: arraymethod?: arraypath?: arraytext?: arraystartTime?: stringendTime?: stringdirection?: enumlimit?: number
list_log_label_values
Lists the values one log label takes in matching logslabel: stringresource: arraylevel?: arraytype?: arrayinstance?: arrayhost?: arraystatusCode?: arraymethod?: arraypath?: arraytext?: arraystartTime?: stringendTime?: stringdirection?: enum
get_metrics
Fetches CPU, memory, instance, HTTP, bandwidth or connection metrics for a resourceresourceId: stringmetricTypes: arraystartTime?: stringendTime?: stringresolution?: numbercpuUsageAggregationMethod?: stringaggregateHttpRequestCountsBy?: stringhttpLatencyQuantile?: numberhttpHost?: stringhttpPath?: string
list_postgres_instances
Lists Postgres databases in the workspace
get_postgres
Returns one Postgres database's detailspostgresId: string
create_postgres changes
Creates a Postgres database on a chosen plan and regionname: stringplan: enumregion?: enumversion?: numberdiskSizeGb?: number
query_render_postgres
Runs a read-only SQL query on a Render Postgres databasepostgresId: stringsql: string
list_key_value
Lists Key Value instances in the workspace
get_key_value
Returns one Key Value instance's detailskeyValueId: string
create_key_value changes
Creates a Key Value instance with a plan and eviction policyname: stringplan: enumregion?: enummaxmemoryPolicy?: enum

Similar servers