Runpod MCP server

Manage Runpod GPU Pods, Serverless endpoints, jobs, volumes and billing from an MCP client

Official · Runpod TypeScript Remote (hosted) · Streamable HTTPLocal · stdio Cloud platformsAI and MLDevOps and monitoring

67 popularity score ★ 86 ↓ 13k/wk

Connect your client

Remote (hosted)

Add in one click

Opens the app, which asks before it adds the server.

Or add it by command or config

Claude Codeterminal
claude mcp add --transport http runpod -s user https://mcp.runpod.io/
Codex~/.codex/config.toml
[mcp_servers.runpod]
url = "https://mcp.runpod.io/"
bearer_token_env_var = "RUNPOD_API_KEY"
Cursor~/.cursor/mcp.json
{
  "mcpServers": {
    "runpod": {
      "url": "https://mcp.runpod.io/"
    }
  }
}
VS Code.vscode/mcp.json
{
  "servers": {
    "runpod": {
      "type": "http",
      "url": "https://mcp.runpod.io/"
    }
  }
}
Claude (desktop and web)Settings → Connectors → Add custom connector
https://mcp.runpod.io/
Local (npm)

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 RUNPOD_API_KEY. Replace each <NAME> with your value.

Claude CodeTerminal
claude mcp add runpod -e RUNPOD_API_KEY=<RUNPOD_API_KEY> -- npx -y @runpod/mcp-server@latest
Claude Desktopclaude_desktop_config.json
{
  "mcpServers": {
    "runpod": {
      "command": "npx",
      "args": [
        "-y",
        "@runpod/mcp-server@latest"
      ],
      "env": {
        "RUNPOD_API_KEY": "<RUNPOD_API_KEY>"
      }
    }
  }
}
Cursor~/.cursor/mcp.json
{
  "mcpServers": {
    "runpod": {
      "command": "npx",
      "args": [
        "-y",
        "@runpod/mcp-server@latest"
      ],
      "env": {
        "RUNPOD_API_KEY": "<RUNPOD_API_KEY>"
      }
    }
  }
}
VS Code.vscode/mcp.json
{
  "servers": {
    "runpod": {
      "type": "stdio",
      "command": "npx",
      "args": [
        "-y",
        "@runpod/mcp-server@latest"
      ],
      "env": {
        "RUNPOD_API_KEY": "<RUNPOD_API_KEY>"
      }
    }
  }
}
Codex~/.codex/config.toml
[mcp_servers.runpod]
command = "npx"
args = ["-y", "@runpod/mcp-server@latest"]

[mcp_servers.runpod.env]
RUNPOD_API_KEY = "<RUNPOD_API_KEY>"
Gemini CLITerminal
gemini mcp add --scope user -e RUNPOD_API_KEY=<RUNPOD_API_KEY> runpod npx -- -y @runpod/mcp-server@latest

Settings 6

RUNPOD_API_KEY secret Required: Runpod API key from the console's user settings. The local server exits without it.
RUNPOD_API_BASE_URL Optional: REST v2 management API host, given without /v2. Default https://api.runpod.io.
RUNPOD_SERVERLESS_API_URL Optional: Serverless runtime host for job tools. Default https://api.runpod.ai/v2. For run-endpoint, get-job-status, stream-job.
RUNPOD_PUBLIC_GRAPHQL_URL Optional: GraphQL host for capacity, Hub and public endpoint lookups. Default https://api.runpod.io/graphql.
RUNPOD_AUTHED_GRAPHQL_URL Optional: GraphQL host for writes that carry your key. Point it only at a trusted host. Default https://api.runpod.io/graphql.
RUNPOD_MCP_URL Optional: Hosted server that local search-docs sends your query and key to. Default https://mcp.getrunpod.io. For search-docs.

What it does

This is Runpod's own MCP server for the Runpod cloud. A client can use it to create, change, start, stop and delete GPU or CPU Pods, build and scale Serverless endpoints, send jobs to them and watch the output. It also handles templates, network volumes, secrets, registry credentials, AWS ECR pull delegations, SSH keys and Instant Clusters. On the read side it covers GPU and CPU types, data centers, live capacity, billing history, the Runpod Hub and Runpod's guides.

Most of the tools are generated from Runpod's REST v2 OpenAPI spec. A smaller hand-written set covers the Serverless runtime, log streaming, the Hub and GraphQL lookups. Counted at v4.6.0, the local build serves 85 tools: 62 generated, 21 hand-written, plus search-docs and describe-tool (src/specgen/server.ts and generated/tools.gen.ts). The README lists none of them by count. Five more tools for feedback and a journal (report_feedback, save_to_journal, ask_question, read_journal, report_how_user_found_runpod) send notes to Runpod for review. They show up only on the hosted server, and only when its operator turns them on.

You can use the copy Runpod hosts at https://mcp.runpod.io/, where the client signs in with Runpod through OAuth or sends an API key as a bearer header. Or you run it locally from npm as a stdio process with your own key. The package also has an add/remove installer that writes client configs. Every tool carries read-only and destructive hints, so a client can ask first before something like delete-pod or purge-endpoint-queue.

What it needs

To run it yourselfNode.js 20+
Runs onmacOS, Windows, Linux
RunpodPaid planPods, clusters, endpoints, jobs and volumes it creates are billed to the account

Local use needs a Runpod API key from the console's user settings, set as RUNPOD_API_KEY. The hosted endpoint needs a client that can do OAuth sign-in, or an Authorization: Bearer header with your API key. With OAuth, the key is made for whichever account or team profile is selected in the Runpod console when you approve. Codex can trip the hosted firewall during OAuth, so its snippet reads the key from RUNPOD_API_KEY, which must be exported in the shell that starts Codex.

Limits

  • Size cap Job output from run-endpoint, runsync-endpoint, get-job-status and stream-job is not size-capped and can overflow the context window.
  • Size cap list-pods and list-endpoint-releases return up to 1000 items when no limit is given, list-endpoint-builds up to 100.
  • Limit list-endpoints and list-templates return 20 items per page by default, up to 100 with limit.
  • Not covered An endpoint's type (QUEUE or LOAD_BALANCER) has no default and cannot be changed after creation.
  • Rate limit The hosted firewall can block an IP for up to an hour after many unsigned requests, often from Codex signing in. Requests with an API key header avoid it.
  • Limit At v4.6.0 local search-docs still calls https://mcp.getrunpod.io by default (RUNPOD_MCP_URL in src/_shared/hosts.ts), the old hosted address.
  • Not covered The feedback and journal tools exist only on the hosted server, and only when its operator configures them.
  • Limit v4 renamed eight 3.x tools and folded start-pod, stop-pod and restart-pod into pod-action. The REST v1 API is no longer supported.
  • Cost Pods, clusters and endpoints it creates are billed from creation.

The local server exits at start, with code 1, when RUNPOD_API_KEY is unset (src/stdio.ts). Job output from run-endpoint, runsync-endpoint, get-job-status and stream-job is not size-capped and can overflow the context window. list-pods returns up to 1000 items when no limit is given; list-endpoints and list-templates return 20 per page by default, up to 100. The endpoint type (QUEUE or LOAD_BALANCER) cannot be changed after creation. v4 renamed eight 3.x tools and folded start-pod, stop-pod and restart-pod into pod-action. The REST v1 API is no longer supported.

Who it suits

Suits developers who already rent GPUs on Runpod and want an assistant to launch Pods, deploy and scale Serverless endpoints, run jobs or check spend without opening the console. Pick the hosted endpoint to keep no key on disk. Pick the local npx way when you want management calls to go straight from your machine to Runpod's API with no analytics events recorded. It acts with the full rights of the key or signed-in account and can delete resources and spend money, so it fits best with a client that confirms destructive calls. It works only on Runpod and is no use for other GPU clouds.

Tools 60 of 85

32 only read, 19 change things, 9 can delete or overwrite. A ? marks an optional parameter.

list-pods
List the account's PodsincludeClusterPods?: booleancursor?: stringlimit?: integer
get-pod
Show one Pod's settings and stateid: string
create-pod changes
Start a new GPU or CPU Pod from an image or templatebody: object
update-pod changes
Change a Pod's image, disk, ports or environmentid: stringbody: object
pod-action changes
Start, stop or restart a Podid: stringbody: object
delete-pod deletes
Terminate a Pod and lose its container diskid: string
stream-pod-logs
Fetch or stream a Pod's container logspodId: string
list-endpoints
List Serverless endpoints, one page at a timecursor?: stringlimit?: integer
get-endpoint
Show one endpoint, including its request URLsid: string
create-endpoint changes
Create a queue or load-balancing Serverless endpointbody: object
update-endpoint changes
Change an endpoint's image, workers or scalingid: stringbody: object
delete-endpoint deletes
Delete a Serverless endpointid: string
set-endpoint-gpus changes
Set which GPU types an endpoint may useendpointId: stringgpuIds?: stringpools?: arrayexcludeGpuTypeIds?: arraygpuCount?: integerminCudaVersion?: stringallowedCudaVersions?: string
list-endpoint-workers
List an endpoint's workersid: string
stream-worker-logs
Fetch or stream a Serverless worker's logsendpointId: stringworkerId: string
list-endpoint-builds
List an endpoint's image buildsid: stringcursor?: stringlimit?: integer
endpoint-health
Show an endpoint's queue and worker countsendpointId: string
run-endpoint changes
Submit an asynchronous job to an endpointendpointId: stringinput: objectwebhook?: stringpolicy?: objects3Config?: object
runsync-endpoint changes
Submit a job and wait for its resultendpointId: stringinput: objectwait?: numberwebhook?: stringpolicy?: objects3Config?: object
get-job-status
Check a job's status and outputendpointId: stringjobId: stringwait?: number
stream-job
Read a job's streamed outputendpointId: stringjobId: string
cancel-job changes
Cancel a queued or running jobendpointId: stringjobId: string
retry-job changes
Re-run a failed jobendpointId: stringjobId: string
purge-endpoint-queue deletes
Drop every queued job on an endpointendpointId: string
list-public-endpoints
List Runpod's ready-made public model endpointscursor?: stringlimit?: integersearchTerm?: stringmodality?: stringowner?: stringincludeOffline?: boolean
list-hub-repos
Browse repositories on the Runpod HubsearchTerm?: stringcategory?: stringtype?: stringrepoOwner?: stringincludeConfig?: boolean
deploy-hub-repo changes
Deploy a Hub repository as a Serverless endpointrepo?: stringhubReleaseId?: stringname?: stringenv?: objectgpuIds?: stringgpuCount?: integercontainerDiskInGb?: integerworkersMin?: integerworkersMax?: integeridleTimeout?: integerscalerType?: stringscalerValue?: numberexecutionTimeoutMs?: integerflashboot?: string
list-templates
List templates, one page at a timecursor?: stringlimit?: integer
list-public-templates
List public templates shared on Runpodsource?: string
get-template
Show one templateid: string
create-template changes
Create a Pod or Serverless templatebody: object
update-template changes
Change a templateid: stringbody: object
delete-template deletes
Delete a templateid: string
list-network-volumes
List network volumescursor?: stringlimit?: integer
create-network-volume changes
Create a network volume in a data centerbody: object
update-network-volume changes
Rename or resize a network volumeid: stringbody: object
delete-network-volume deletes
Delete a network volumeid: string
list-secrets
List stored secretsname?: string
create-secret changes
Store a new secretbody: object
update-secret deletes
Replace a stored secret's valueid: stringbody: object
create-registry changes
Save credentials for a private image registrybody: object
create-delegation changes
Grant Runpod scoped pull access to an AWS ECR repositorybody: object
revoke-delegation deletes
Revoke an ECR pull delegationid: string
get-ssh-keys
Read the account's SSH public keys
update-ssh-keys deletes
Replace the account's SSH public keysbody: object
list-clusters
List Instant Clusterscursor?: stringlimit?: integer
create-cluster changes
Create a multi-node Instant Clusterbody: object
delete-cluster deletes
Delete an Instant Clusterid: string
list-gpu-types
List GPU types with prices and pool namesinclude?: arrayproduct?: arraycount?: integercloud?: stringcountryCodes?: arraycudaVersions?: arrayminCudaVersion?: string
get-gpu-type
Show one GPU type's details and stockid: stringinclude?: arrayproduct?: arraycount?: integercloud?: stringcountryCodes?: arraycudaVersions?: arrayminCudaVersion?: string
list-cpu-types
List CPU instance typesinclude?: arrayproduct?: arrayvcpuCount?: integer
list-data-centers
List data centers and what each offersinclude?: arrayregions?: arraynetworkVolumeTypes?: arraycompliance?: arrayglobalNetwork?: boolean
get-capacity
Check live GPU stock by type and regioncudaVersions?: arrayincludeUnavailable?: booleangpuTypeIds?: arraygpuCount?: integersecureCloudOnly?: boolean
list-billing
Read account billing history by time bucketstartTime?: stringendTime?: stringbucketSize?: stringlastN?: integer
list-guides
List the bundled Runpod guides and golden pathskind?: stringquery?: stringconcept?: string
read-guide
Read one bundled Runpod guideid: string
lookup-concept
Explain one Runpod term with its public sourceconcept: string
search-concepts
Search Runpod concepts by keywordsquery: stringlimit?: integer
search-docs
Search Runpod docs, support answers, blog and site pagesquery: stringnamespaces?: arraylimit?: integer
describe-tool
Return the full argument schema of another toolname: string

Resources 1

runpod://guides/{id}
The bundled Runpod guides, one resource per guide

Similar servers