Kubernetes MCP Server
Manage Kubernetes and OpenShift clusters from an assistant through the cluster's API
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
Opens the app, which asks before it adds the server.
claude mcp add --transport http runpod -s user https://mcp.runpod.io/[mcp_servers.runpod]
url = "https://mcp.runpod.io/"
bearer_token_env_var = "RUNPOD_API_KEY"{
"mcpServers": {
"runpod": {
"url": "https://mcp.runpod.io/"
}
}
}{
"servers": {
"runpod": {
"type": "http",
"url": "https://mcp.runpod.io/"
}
}
}https://mcp.runpod.io/Opens the app, which asks before it adds the server. Then replace each <NAME> in its settings with your value.
It needs RUNPOD_API_KEY. Replace each <NAME> with your value.
claude mcp add runpod -e RUNPOD_API_KEY=<RUNPOD_API_KEY> -- npx -y @runpod/mcp-server@latest{
"mcpServers": {
"runpod": {
"command": "npx",
"args": [
"-y",
"@runpod/mcp-server@latest"
],
"env": {
"RUNPOD_API_KEY": "<RUNPOD_API_KEY>"
}
}
}
}{
"mcpServers": {
"runpod": {
"command": "npx",
"args": [
"-y",
"@runpod/mcp-server@latest"
],
"env": {
"RUNPOD_API_KEY": "<RUNPOD_API_KEY>"
}
}
}
}{
"servers": {
"runpod": {
"type": "stdio",
"command": "npx",
"args": [
"-y",
"@runpod/mcp-server@latest"
],
"env": {
"RUNPOD_API_KEY": "<RUNPOD_API_KEY>"
}
}
}
}[mcp_servers.runpod]
command = "npx"
args = ["-y", "@runpod/mcp-server@latest"]
[mcp_servers.runpod.env]
RUNPOD_API_KEY = "<RUNPOD_API_KEY>"gemini mcp add --scope user -e RUNPOD_API_KEY=<RUNPOD_API_KEY> runpod npx -- -y @runpod/mcp-server@latestRUNPOD_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. |
RUNPOD_SERVERLESS_API_URL |
Optional: Serverless runtime host for job tools. |
RUNPOD_PUBLIC_GRAPHQL_URL |
Optional: GraphQL host for capacity, Hub and public endpoint lookups. |
RUNPOD_AUTHED_GRAPHQL_URL |
Optional: GraphQL host for writes that carry your key. Point it only at a trusted host. |
RUNPOD_MCP_URL |
Optional: Hosted server that local search-docs sends your query and key to. |
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.
| To run it yourself | Node.js 20+ |
|---|---|
| Runs on | macOS, Windows, Linux |
| Runpod | Paid 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.
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.
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.
32 only read, 19 change things, 9 can delete or overwrite. A ? marks an optional parameter.
list-podsincludeClusterPods?: booleancursor?: stringlimit?: integerget-podid: stringcreate-pod changesbody: objectupdate-pod changesid: stringbody: objectpod-action changesid: stringbody: objectdelete-pod deletesid: stringstream-pod-logspodId: stringlist-endpointscursor?: stringlimit?: integerget-endpointid: stringcreate-endpoint changesbody: objectupdate-endpoint changesid: stringbody: objectdelete-endpoint deletesid: stringset-endpoint-gpus changesendpointId: stringgpuIds?: stringpools?: arrayexcludeGpuTypeIds?: arraygpuCount?: integerminCudaVersion?: stringallowedCudaVersions?: stringlist-endpoint-workersid: stringstream-worker-logsendpointId: stringworkerId: stringlist-endpoint-buildsid: stringcursor?: stringlimit?: integerendpoint-healthendpointId: stringrun-endpoint changesendpointId: stringinput: objectwebhook?: stringpolicy?: objects3Config?: objectrunsync-endpoint changesendpointId: stringinput: objectwait?: numberwebhook?: stringpolicy?: objects3Config?: objectget-job-statusendpointId: stringjobId: stringwait?: numberstream-jobendpointId: stringjobId: stringcancel-job changesendpointId: stringjobId: stringretry-job changesendpointId: stringjobId: stringpurge-endpoint-queue deletesendpointId: stringlist-public-endpointscursor?: stringlimit?: integersearchTerm?: stringmodality?: stringowner?: stringincludeOffline?: booleanlist-hub-repossearchTerm?: stringcategory?: stringtype?: stringrepoOwner?: stringincludeConfig?: booleandeploy-hub-repo changesrepo?: stringhubReleaseId?: stringname?: stringenv?: objectgpuIds?: stringgpuCount?: integercontainerDiskInGb?: integerworkersMin?: integerworkersMax?: integeridleTimeout?: integerscalerType?: stringscalerValue?: numberexecutionTimeoutMs?: integerflashboot?: stringlist-templatescursor?: stringlimit?: integerlist-public-templatessource?: stringget-templateid: stringcreate-template changesbody: objectupdate-template changesid: stringbody: objectdelete-template deletesid: stringlist-network-volumescursor?: stringlimit?: integercreate-network-volume changesbody: objectupdate-network-volume changesid: stringbody: objectdelete-network-volume deletesid: stringlist-secretsname?: stringcreate-secret changesbody: objectupdate-secret deletesid: stringbody: objectcreate-registry changesbody: objectcreate-delegation changesbody: objectrevoke-delegation deletesid: stringget-ssh-keysupdate-ssh-keys deletesbody: objectlist-clusterscursor?: stringlimit?: integercreate-cluster changesbody: objectdelete-cluster deletesid: stringlist-gpu-typesinclude?: arrayproduct?: arraycount?: integercloud?: stringcountryCodes?: arraycudaVersions?: arrayminCudaVersion?: stringget-gpu-typeid: stringinclude?: arrayproduct?: arraycount?: integercloud?: stringcountryCodes?: arraycudaVersions?: arrayminCudaVersion?: stringlist-cpu-typesinclude?: arrayproduct?: arrayvcpuCount?: integerlist-data-centersinclude?: arrayregions?: arraynetworkVolumeTypes?: arraycompliance?: arrayglobalNetwork?: booleanget-capacitycudaVersions?: arrayincludeUnavailable?: booleangpuTypeIds?: arraygpuCount?: integersecureCloudOnly?: booleanlist-billingstartTime?: stringendTime?: stringbucketSize?: stringlastN?: integerlist-guideskind?: stringquery?: stringconcept?: stringread-guideid: stringlookup-conceptconcept: stringsearch-conceptsquery: stringlimit?: integersearch-docsquery: stringnamespaces?: arraylimit?: integerdescribe-toolname: stringrunpod://guides/{id}