mcp-server@4.12.0
CAUTIONPublisher claims: "MCP server for interacting with Runpod API" Observed in sandbox: no network, touches nothing outside the project, writes no memory.
Coverage
Started with a decoy RUNPOD_API_KEY; tool list observed. Tool calls with a real credential not tested.- Tested
- server startup with a tagged decoy in RUNPOD_API_KEY · MCP initialize and tools/list · every tool description, for hidden instructions · where the decoy credential went · every file read, file written and host contacted by what ran
- Not tested
- what the tools do when called with a real credential
- Needs
- RUNPOD_API_KEY — give it to the server where it runs, through vet-skills run --secrets, so the value never enters the server's environment. Never paste a credential into a chat, a ticket or a report.
Before you give it your token
- It will ask for
ALP_SINK_SECRETAPI_KEYS_URLMCP_SKIP_CREDENTIAL_CHECKPOSTHOG_API_KEYRUNPOD_API_KEYRUNPOD_ASSISTANT_API_KEYRUNPOD_AUTHED_GRAPHQL_URLConfiguration, not credentials: ALP_SINK_URL, CLAUDE_CONFIG_DIR, ID_PATTERN, KNOWLEDGE_HIDDEN_RULES, KNOWLEDGE_SEARCH_URL, MCP_ANALYTICS_SALT, MCP_REQUEST_LOG_SAMPLE_RATE, MCP_SCHEMA_VALIDATION, MCP_VERBOSE_LOGS, PI_CODING_AGENT_DIR, POSTHOG_HOST, RUNPOD_API_BASE_URL, RUNPOD_MCP_URL, RUNPOD_PUBLIC_GRAPHQL_URL, RUNPOD_SERVERLESS_API_URL, VERCEL- Where it talks to
- runpod.io, runpod.ai (its own)Also posthog.com — not the publisher's domain; check what for before connecting.
- What the honeypot saw
- no credential files read · no network
- What we could not test
- what the tools do when called with a real credential
Connect it with a scoped credential, under the guard, and read the third-party hosts first. The code names posthog.com as well as its own vendor. The guard injects ALP_SINK_SECRET, API_KEYS_URL, MCP_SKIP_CREDENTIAL_CHECK, POSTHOG_API_KEY, RUNPOD_API_KEY, RUNPOD_ASSISTANT_API_KEY, RUNPOD_AUTHED_GRAPHQL_URL only into requests to runpod.io (and its subdomains) and refuses the rest.
Never paste a credential into a chat, a ticket or a report, including ours. How the guard holds it.
Is [email protected] safe to install?
KillerSkills ran it in the KillerSkills honeypot sandbox (2 scenarios) on 2026-11-12 and scored it 70/100 (Caution). It is not known to be malicious, but it has behaviour or code a security policy should decide on before install. Notable findings: Credential pass-through configuration; References a credential file in the home directory; References a credential file in the home directory. Summary: no network, touches nothing outside the project, writes no memory.
Behavior trace
Honeypot run · 54 s · 2 scenarios · 0 deviationsStatic findings
pattern: "[^\\t-\\r \x85\xA0\u1680\u2000-\u200A\u2028\u2029\u202F\u205F\u3000]",Fix: Put hosts, commands and strings in plain source. Decoding at runtime looks identical to malware and costs points on its own.throw new Error("runpod: API key required (set RUNPOD_API_KEY or pass apiKey)");Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.pattern: "[^\\t-\\r \x85\xA0\u1680\u2000-\u200A\u2028\u2029\u202F\u205F\u3000]",Fix: Put hosts, commands and strings in plain source. Decoding at runtime looks identical to malware and costs points on its own.pattern: "^[^\\x00]*[^\\t-\\r \x85\xA0\u1680\u2000-\u200A\u2028\u2029\u202F\u205F\u3000\\x00][^\\x00]*$"Fix: Put hosts, commands and strings in plain source. Decoding at runtime looks identical to malware and costs points on its own.pattern: "[^\\t-\\r \x85\xA0\u1680\u2000-\u200A\u2028\u2029\u202F\u205F\u3000]",Fix: Put hosts, commands and strings in plain source. Decoding at runtime looks identical to malware and costs points on its own.pattern: "[^\\t-\\r \x85\xA0\u1680\u2000-\u200A\u2028\u2029\u202F\u205F\u3000]",Fix: Put hosts, commands and strings in plain source. Decoding at runtime looks identical to malware and costs points on its own.…y is an authorized_keys-style line: `<type> <base64-key> [comment]`, e.g. from `~/.ssh/id_ed25519.pub`. Send `[]` to remove all keys.", examples: [ …Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.pattern: "[^\\t-\\r \x85\xA0\u1680\u2000-\u200A\u2028\u2029\u202F\u205F\u3000]",Fix: Put hosts, commands and strings in plain source. Decoding at runtime looks identical to malware and costs points on its own.…y is an authorized_keys-style line: `<type> <base64-key> [comment]`, e.g. from `~/.ssh/id_ed25519.pub`. Send `[]` to remove all keys.", examples: [ …Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.throw new Error("runpod: API key required (set RUNPOD_API_KEY or pass apiKey)");Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.…y is an authorized_keys-style line: `<type> <base64-key> [comment]`, e.g. from `~/.ssh/id_ed25519.pub`. Send `[]` to remove all keys.", examples: [ …Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.…y is an authorized_keys-style line: `<type> <base64-key> [comment]`, e.g. from `~/.ssh/id_ed25519.pub`. Send `[]` to remove all keys.", examples: [ …Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.…y is an authorized_keys-style line: `<type> <base64-key> [comment]`, e.g. from `~/.ssh/id_ed25519.pub`. Send `[]` to remove all keys.", examples: [ …Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.pattern: "[^\\t-\\r \x85\xA0\u1680\u2000-\u200A\u2028\u2029\u202F\u205F\u3000]",Fix: Put hosts, commands and strings in plain source. Decoding at runtime looks identical to malware and costs points on its own.…y is an authorized_keys-style line: `<type> <base64-key> [comment]`, e.g. from `~/.ssh/id_ed25519.pub`. Send `[]` to remove all keys.", examples: [ …Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.pattern: "[^\\t-\\r \x85\xA0\u1680\u2000-\u200A\u2028\u2029\u202F\u205F\u3000]",Fix: Put hosts, commands and strings in plain source. Decoding at runtime looks identical to malware and costs points on its own.throw new Error("runpod: API key required (set RUNPOD_API_KEY or pass apiKey)");Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.…y is an authorized_keys-style line: `<type> <base64-key> [comment]`, e.g. from `~/.ssh/id_ed25519.pub`. Send `[]` to remove all keys.", examples: [ …Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.throw new Error("runpod: API key required (set RUNPOD_API_KEY or pass apiKey)");Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.…y is an authorized_keys-style line: `<type> <base64-key> [comment]`, e.g. from `~/.ssh/id_ed25519.pub`. Send `[]` to remove all keys.", examples: [ …Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.throw new Error("runpod: API key required (set RUNPOD_API_KEY or pass apiKey)");Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.…xpose, use the machine-readable OpenAPI spec at https://api.runpod.io/v2/openapi.json or the API reference at https://docs.runpod.io/api-reference-v2/overview. Prefer the MCP tools for reads because their results redact secret environment …Fix: Remove the call, or declare the host in frontmatter and explain in the README what is sent and why.…y is an authorized_keys-style line: `<type> <base64-key> [comment]`, e.g. from `~/.ssh/id_ed25519.pub`. Send `[]` to remove all keys.", examples: [ …Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.…y is an authorized_keys-style line: `<type> <base64-key> [comment]`, e.g. from `~/.ssh/id_ed25519.pub`. Send `[]` to remove all keys.", examples: [ …Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.…xpose, use the machine-readable OpenAPI spec at https://api.runpod.io/v2/openapi.json or the API reference at https://docs.runpod.io/api-reference-v2/overview. Prefer the MCP tools for reads because their results redact secret environment …Fix: Remove the call, or declare the host in frontmatter and explain in the README what is sent and why.pattern: "[^\\t-\\r \x85\xA0\u1680\u2000-\u200A\u2028\u2029\u202F\u205F\u3000]",Fix: Put hosts, commands and strings in plain source. Decoding at runtime looks identical to malware and costs points on its own." npx @runpod/mcp-server@latest add --client <ids> no prompts: configure these clients",Fix: Pin versions and sources; vendor anything fetched at install time.To run it without prompts, name the clients: npx @runpod/mcp-server@latest ${subcommand2} --client <ids>Fix: Pin versions and sources; vendor anything fetched at install time.pattern: "[^\\t-\\r \x85\xA0\u1680\u2000-\u200A\u2028\u2029\u202F\u205F\u3000]",Fix: Put hosts, commands and strings in plain source. Decoding at runtime looks identical to malware and costs points on its own." npx @runpod/mcp-server@latest add --list list clients, whether each is detected, and its config file",Fix: Pin versions and sources; vendor anything fetched at install time." npx @runpod/mcp-server@latest remove --client <ids> no prompts: remove Runpod from them",Fix: Pin versions and sources; vendor anything fetched at install time.pattern: "^[^\\x00]*[^\\t-\\r \x85\xA0\u1680\u2000-\u200A\u2028\u2029\u202F\u205F\u3000\\x00][^\\x00]*$"Fix: Put hosts, commands and strings in plain source. Decoding at runtime looks identical to malware and costs points on its own." npx @runpod/mcp-server@latest add --client <ids> no prompts: configure these clients",Fix: Pin versions and sources; vendor anything fetched at install time." npx @runpod/mcp-server@latest add --list list clients, whether each is detected, and its config file",Fix: Pin versions and sources; vendor anything fetched at install time.pattern: "[^\\t-\\r \x85\xA0\u1680\u2000-\u200A\u2028\u2029\u202F\u205F\u3000]",Fix: Put hosts, commands and strings in plain source. Decoding at runtime looks identical to malware and costs points on its own.pattern: "[^\\t-\\r \x85\xA0\u1680\u2000-\u200A\u2028\u2029\u202F\u205F\u3000]",Fix: Put hosts, commands and strings in plain source. Decoding at runtime looks identical to malware and costs points on its own.pattern: "[^\\t-\\r \x85\xA0\u1680\u2000-\u200A\u2028\u2029\u202F\u205F\u3000]",Fix: Put hosts, commands and strings in plain source. Decoding at runtime looks identical to malware and costs points on its own.…xpose, use the machine-readable OpenAPI spec at https://api.runpod.io/v2/openapi.json or the API reference at https://docs.runpod.io/api-reference-v2/overview. Prefer the MCP tools for reads because their results redact secret environment …Fix: Remove the call, or declare the host in frontmatter and explain in the README what is sent and why." npx @runpod/mcp-server@latest add interactive setup (needs a terminal)",Fix: Pin versions and sources; vendor anything fetched at install time." npx @runpod/mcp-server@latest add interactive setup (needs a terminal)",Fix: Pin versions and sources; vendor anything fetched at install time.pattern: "[^\\t-\\r \x85\xA0\u1680\u2000-\u200A\u2028\u2029\u202F\u205F\u3000]",Fix: Put hosts, commands and strings in plain source. Decoding at runtime looks identical to malware and costs points on its own.pattern: "[^\\t-\\r \x85\xA0\u1680\u2000-\u200A\u2028\u2029\u202F\u205F\u3000]",Fix: Put hosts, commands and strings in plain source. Decoding at runtime looks identical to malware and costs points on its own.To run it without prompts, name the clients: npx @runpod/mcp-server@latest ${subcommand} --client <ids>Fix: Pin versions and sources; vendor anything fetched at install time." RUNPOD_API_KEY=<key> npx @runpod/mcp-server@latest run the MCP server over stdio",Fix: Pin versions and sources; vendor anything fetched at install time.…xpose, use the machine-readable OpenAPI spec at https://api.runpod.io/v2/openapi.json or the API reference at https://docs.runpod.io/api-reference-v2/overview. Prefer the MCP tools for reads because their results redact secret environment …Fix: Remove the call, or declare the host in frontmatter and explain in the README what is sent and why.pattern: "[^\\t-\\r \x85\xA0\u1680\u2000-\u200A\u2028\u2029\u202F\u205F\u3000]",Fix: Put hosts, commands and strings in plain source. Decoding at runtime looks identical to malware and costs points on its own.pattern: "[^\\t-\\r \x85\xA0\u1680\u2000-\u200A\u2028\u2029\u202F\u205F\u3000]",Fix: Put hosts, commands and strings in plain source. Decoding at runtime looks identical to malware and costs points on its own.pattern: "[^\\t-\\r \x85\xA0\u1680\u2000-\u200A\u2028\u2029\u202F\u205F\u3000]",Fix: Put hosts, commands and strings in plain source. Decoding at runtime looks identical to malware and costs points on its own.pattern: "[^\\t-\\r \x85\xA0\u1680\u2000-\u200A\u2028\u2029\u202F\u205F\u3000]",Fix: Put hosts, commands and strings in plain source. Decoding at runtime looks identical to malware and costs points on its own.pattern: "[^\\t-\\r \x85\xA0\u1680\u2000-\u200A\u2028\u2029\u202F\u205F\u3000]",Fix: Put hosts, commands and strings in plain source. Decoding at runtime looks identical to malware and costs points on its own." npx @runpod/mcp-server@latest remove --client <ids> remove Runpod from your agents"Fix: Pin versions and sources; vendor anything fetched at install time.pattern: "^[^\\x00]*[^\\t-\\r \x85\xA0\u1680\u2000-\u200A\u2028\u2029\u202F\u205F\u3000\\x00][^\\x00]*$"Fix: Put hosts, commands and strings in plain source. Decoding at runtime looks identical to malware and costs points on its own." npx @runpod/mcp-server@latest add [--client <ids>] configure your agents (see add --help)",Fix: Pin versions and sources; vendor anything fetched at install time.pattern: "^[^\\x00]*[^\\t-\\r \x85\xA0\u1680\u2000-\u200A\u2028\u2029\u202F\u205F\u3000\\x00][^\\x00]*$"Fix: Put hosts, commands and strings in plain source. Decoding at runtime looks identical to malware and costs points on its own.pattern: "[^\\t-\\r \x85\xA0\u1680\u2000-\u200A\u2028\u2029\u202F\u205F\u3000]",Fix: Put hosts, commands and strings in plain source. Decoding at runtime looks identical to malware and costs points on its own.…xpose, use the machine-readable OpenAPI spec at https://api.runpod.io/v2/openapi.json or the API reference at https://docs.runpod.io/api-reference-v2/overview. Prefer the MCP tools for reads because their results redact secret environment …Fix: Remove the call, or declare the host in frontmatter and explain in the README what is sent and why.pattern: "^[^\\x00]*[^\\t-\\r \x85\xA0\u1680\u2000-\u200A\u2028\u2029\u202F\u205F\u3000\\x00][^\\x00]*$"Fix: Put hosts, commands and strings in plain source. Decoding at runtime looks identical to malware and costs points on its own." npx @runpod/mcp-server@latest remove --client <ids> no prompts: remove Runpod from them",Fix: Pin versions and sources; vendor anything fetched at install time.Cost to the agent
Tokens estimated at four characters each. The tool list is re-read by the agent on every turn, so it is the number to compare between servers that do the same job: ranked across the index.
Known vulnerabilities
No advisories in OSV for @runpod/mcp-server@4.12.0 as of 38 h ago. This is the package itself, not its dependencies.
What would make this Verified
10 points to 80 · weights: behavior 45%, static 25%, prompt 15%, publisher 15%- Unclaimed publisher≈ +8 on the totalClaim runpod: a verified publisher gets +50 on publisher trust. It is free and usually instant with GitHub sign-in.
- Credential pass-through configuration≈ +4 on the totalStop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.
- References a credential file in the home directory≈ +4 on the totalStop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.
- Access to sensitive file paths≈ +4 on the totalStop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.
- Unicode escape sequence detected≈ +2 on the totalPut hosts, commands and strings in plain source. Decoding at runtime looks identical to malware and costs points on its own.
- File type combined with upload action≈ +2 on the totalRemove the call, or declare the host in frontmatter and explain in the README what is sent and why.