⚠️ This snapshot is over 30 days old — treat the grade as stale until the next refresh. Re-scan locally to verify.
Trust Card · Static snapshot
mcp-use__mcp-use F
37/100 · 52 findings (22 critical) · scope excessive · Ranked #51 of 53 scanned.
Scanned 2026-09-09 · engine v0.1.0 (8 regex rules, OWASP-mapped) · upstream mcp-use/mcp-use @ 2ef6367 (2026-09-08)
Score breakdown
Score constrained by 22 critical and 23 high-severity findings.
Fix first (45 critical/high)
| Severity | Rule | Finding | Remediation |
|---|---|---|---|
| CRITICAL | AT-SEC-002 (LLM02) | Hardcoded Credential or API Secretlibraries/python/mcp_use/telemetry/telemetry.py:131Evidence: PROJECT_API_KEY = "phc_lyTtbYwvkdSbrcMQNPiKiiRWrrM1seyKIMjycSvItEI" | Move credentials to secure environment variables or a key vault. Never commit API keys. |
| CRITICAL | AT-SEC-004 (ASI05) | eval() / Function Constructor Invocationlibraries/python/tests/unit/test_code_executor.py:153Evidence: code = "eval('1 + 1')" | Eliminate eval(). Use safe AST parsers or isolated sandboxes (e.g. E2B Firecracker microVMs). |
| CRITICAL | AT-SEC-003 (ASI02) | Unbounded Dynamic Shell Executionlibraries/typescript/packages/cli/src/commands/load-client.ts:241Evidence: const child = spawn(command, args, { | Strictly restrict shell execution to an immutable allowlist of binary commands with explicit argument arrays, or execute inside microVM sandboxes. |
| CRITICAL | AT-SEC-003 (ASI02) | Unbounded Dynamic Shell Executionlibraries/typescript/packages/client/src/auth/node.ts:602Evidence: const child = spawn(cmd, args, { stdio: "ignore", detached: true }); | Strictly restrict shell execution to an immutable allowlist of binary commands with explicit argument arrays, or execute inside microVM sandboxes. |
| CRITICAL | AT-SEC-002 (LLM02) | Hardcoded Credential or API Secretlibraries/typescript/packages/client/src/telemetry/telemetry.ts:50Evidence: const PROJECT_API_KEY = "phc_lyTtbYwvkdSbrcMQNPiKiiRWrrM1seyKIMjycSvItEI"; | Move credentials to secure environment variables or a key vault. Never commit API keys. |
| CRITICAL | AT-SEC-004 (ASI05) | eval() / Function Constructor Invocationlibraries/typescript/packages/client/tests/unit/client/executor-e2b-shim.test.ts:28Evidence: const run = new Function("global", "console", shim); | Eliminate eval(). Use safe AST parsers or isolated sandboxes (e.g. E2B Firecracker microVMs). |
| CRITICAL | AT-SEC-004 (ASI05) | eval() / Function Constructor Invocationlibraries/typescript/packages/client/tests/unit/client/executor-e2b-shim.test.ts:47Evidence: expect(() => new Function(shim)).not.toThrow(); | Eliminate eval(). Use safe AST parsers or isolated sandboxes (e.g. E2B Firecracker microVMs). |
| CRITICAL | AT-SEC-004 (ASI05) | eval() / Function Constructor Invocationlibraries/typescript/packages/client/tests/unit/client/executor-e2b-shim.test.ts:62Evidence: expect(() => new Function(shim)).not.toThrow(); | Eliminate eval(). Use safe AST parsers or isolated sandboxes (e.g. E2B Firecracker microVMs). |
| CRITICAL | AT-SEC-004 (ASI05) | eval() / Function Constructor Invocationlibraries/typescript/packages/client/tests/unit/client/executor-e2b-shim.test.ts:78Evidence: expect(() => new Function(shim)).not.toThrow(); | Eliminate eval(). Use safe AST parsers or isolated sandboxes (e.g. E2B Firecracker microVMs). |
| CRITICAL | AT-SEC-004 (ASI05) | eval() / Function Constructor Invocationlibraries/typescript/packages/client/tests/unit/inject-openai-file-apis.test.ts:18Evidence: new Function(script!.textContent!)(); | Eliminate eval(). Use safe AST parsers or isolated sandboxes (e.g. E2B Firecracker microVMs). |
| CRITICAL | AT-SEC-002 (LLM02) | Hardcoded Credential or API Secretlibraries/typescript/packages/client/tests/unit/transport/stdio-env.test.ts:5Evidence: const SECRET_KEY = "MCP_USE_STDIO_ENV_LEAK_PROBE"; | Move credentials to secure environment variables or a key vault. Never commit API keys. |
| CRITICAL | AT-SEC-002 (LLM02) | Hardcoded Credential or API Secretlibraries/typescript/packages/inspector/tests/e2e/fixtures/google-emulate-server.ts:16Evidence: const STATIC_CLIENT_SECRET = "GOCSPX-mcp-emulate-test-secret"; | Move credentials to secure environment variables or a key vault. Never commit API keys. |
| CRITICAL | AT-SEC-003 (ASI02) | Unbounded Dynamic Shell Executionlibraries/typescript/packages/inspector/tests/e2e/scripts/run-python-e2e.mjs:55Evidence: const proc = spawn(command, args, { | Strictly restrict shell execution to an immutable allowlist of binary commands with explicit argument arrays, or execute inside microVM sandboxes. |
| CRITICAL | AT-SEC-003 (ASI02) | Unbounded Dynamic Shell Executionlibraries/typescript/packages/inspector/tests/e2e/scripts/run-python-e2e.mjs:81Evidence: const proc = spawn(command, args, { | Strictly restrict shell execution to an immutable allowlist of binary commands with explicit argument arrays, or execute inside microVM sandboxes. |
| CRITICAL | AT-SEC-003 (ASI02) | Unbounded Dynamic Shell Executionlibraries/typescript/packages/inspector/tests/e2e/scripts/run-test-matrix.mjs:77Evidence: const proc = spawn(command, args, { | Strictly restrict shell execution to an immutable allowlist of binary commands with explicit argument arrays, or execute inside microVM sandboxes. |
| CRITICAL | AT-SEC-003 (ASI02) | Unbounded Dynamic Shell Executionlibraries/typescript/packages/inspector/tests/e2e/scripts/run-test-matrix.mjs:104Evidence: const proc = spawn(command, args, { | Strictly restrict shell execution to an immutable allowlist of binary commands with explicit argument arrays, or execute inside microVM sandboxes. |
| CRITICAL | AT-SEC-003 (ASI02) | Unbounded Dynamic Shell Executionlibraries/typescript/packages/inspector/tests/e2e/scripts/run-tunnel-test.mjs:72Evidence: const proc = spawn(command, args, { | Strictly restrict shell execution to an immutable allowlist of binary commands with explicit argument arrays, or execute inside microVM sandboxes. |
| CRITICAL | AT-SEC-003 (ASI02) | Unbounded Dynamic Shell Executionlibraries/typescript/packages/inspector/tests/e2e/scripts/run-tunnel-test.mjs:101Evidence: const proc = spawn(command, args, { | Strictly restrict shell execution to an immutable allowlist of binary commands with explicit argument arrays, or execute inside microVM sandboxes. |
| CRITICAL | AT-SEC-003 (ASI02) | Unbounded Dynamic Shell Executionlibraries/typescript/packages/server/examples/verify-examples.mjs:617Evidence: const child = spawn(command, args, { | Strictly restrict shell execution to an immutable allowlist of binary commands with explicit argument arrays, or execute inside microVM sandboxes. |
| CRITICAL | AT-SEC-002 (LLM02) | Hardcoded Credential or API Secretlibraries/typescript/packages/server/tests/oauth-direct-providers.test.ts:422Evidence: const secret = "0123456789abcdef0123456789abcdef"; | Move credentials to secure environment variables or a key vault. Never commit API keys. |
| CRITICAL | AT-SEC-002 (LLM02) | Hardcoded Credential or API Secretlibraries/typescript/packages/server/tests/oauth-direct-providers.test.ts:505Evidence: const secret = "0123456789abcdef0123456789abcdef"; | Move credentials to secure environment variables or a key vault. Never commit API keys. |
| CRITICAL | AT-SEC-002 (LLM02) | Hardcoded Credential or API Secretlibraries/typescript/packages/server/tests/oauth-direct-providers.test.ts:523Evidence: const secret = "0123456789abcdef0123456789abcdef"; | Move credentials to secure environment variables or a key vault. Never commit API keys. |
| HIGH | AT-SEC-005 (ASI02) | Unrestricted Recursive File Deletion / Modificationexamples/typescript/excalidraw/src/checkpoint-store.ts:82Evidence: fs.promises.unlink(path.join(this.dir, f.name)).catch(() => {}) | Enforce strict jail/root directories and require explicit human-in-the-loop confirmation before file deletions. |
| HIGH | AT-SEC-005 (ASI02) | Unrestricted Recursive File Deletion / Modificationlibraries/python/tests/unit/test_client.py:64Evidence: os.unlink(temp_path) | Enforce strict jail/root directories and require explicit human-in-the-loop confirmation before file deletions. |
| HIGH | AT-SEC-005 (ASI02) | Unrestricted Recursive File Deletion / Modificationlibraries/python/tests/unit/test_client.py:84Evidence: os.unlink(temp_path) | Enforce strict jail/root directories and require explicit human-in-the-loop confirmation before file deletions. |
| HIGH | AT-SEC-005 (ASI02) | Unrestricted Recursive File Deletion / Modificationlibraries/python/tests/unit/test_client.py:196Evidence: os.unlink(temp_path) | Enforce strict jail/root directories and require explicit human-in-the-loop confirmation before file deletions. |
| HIGH | AT-SEC-005 (ASI02) | Unrestricted Recursive File Deletion / Modificationlibraries/python/tests/unit/test_config.py:35Evidence: os.unlink(temp_path) | Enforce strict jail/root directories and require explicit human-in-the-loop confirmation before file deletions. |
| HIGH | AT-SEC-006 (LLM06) | Unfiltered SSRF / Arbitrary Network Egresslibraries/typescript/packages/agent/src/llm/providers/google.ts:202Evidence: const res = await fetch(url, { | Define an explicit egress domain allowlist and block private IP ranges (127.0.0.1, 10.0.0.0/8, 169.254.169.254). |
| HIGH | AT-SEC-006 (LLM06) | Unfiltered SSRF / Arbitrary Network Egresslibraries/typescript/packages/agent/src/llm/providers/google.ts:278Evidence: const res = await fetch(url, { | Define an explicit egress domain allowlist and block private IP ranges (127.0.0.1, 10.0.0.0/8, 169.254.169.254). |
| HIGH | AT-SEC-006 (LLM06) | Unfiltered SSRF / Arbitrary Network Egresslibraries/typescript/packages/cli/src/commands/screenshot.ts:732Evidence: const response = await fetch(url); | Define an explicit egress domain allowlist and block private IP ranges (127.0.0.1, 10.0.0.0/8, 169.254.169.254). |
| HIGH | AT-SEC-006 (LLM06) | Unfiltered SSRF / Arbitrary Network Egresslibraries/typescript/packages/client/examples/conformance/src/oauth-retry-fetch.ts:142Evidence: let response = await innerFetch(input, init); | Define an explicit egress domain allowlist and block private IP ranges (127.0.0.1, 10.0.0.0/8, 169.254.169.254). |
| HIGH | AT-SEC-006 (LLM06) | Unfiltered SSRF / Arbitrary Network Egresslibraries/typescript/packages/client/examples/conformance/src/oauth-retry-fetch.ts:230Evidence: response = await innerFetch(url, newInit); | Define an explicit egress domain allowlist and block private IP ranges (127.0.0.1, 10.0.0.0/8, 169.254.169.254). |
| HIGH | AT-SEC-005 (ASI02) | Unrestricted Recursive File Deletion / Modificationlibraries/typescript/packages/client/src/code-mode/executor-e2b.ts:88Evidence: fs.unlinkSync(resultPath); // Clean up | Enforce strict jail/root directories and require explicit human-in-the-loop confirmation before file deletions. |
| HIGH | AT-SEC-006 (LLM06) | Unfiltered SSRF / Arbitrary Network Egresslibraries/typescript/packages/client/src/telemetry/tel-fetch.ts:5Evidence: export async function telFetch(url: string, init?: RequestInit): Promise<void> { | Define an explicit egress domain allowlist and block private IP ranges (127.0.0.1, 10.0.0.0/8, 169.254.169.254). |
| HIGH | AT-SEC-006 (LLM06) | Unfiltered SSRF / Arbitrary Network Egresslibraries/typescript/packages/client/src/telemetry/tel-fetch.ts:7Evidence: await fetch(url, init); | Define an explicit egress domain allowlist and block private IP ranges (127.0.0.1, 10.0.0.0/8, 169.254.169.254). |
| HIGH | AT-SEC-006 (LLM06) | Unfiltered SSRF / Arbitrary Network Egresslibraries/typescript/packages/client/src/transport/http.ts:176Evidence: return baseFetch(input, { ...init, signal: deadlineSignal }); | Define an explicit egress domain allowlist and block private IP ranges (127.0.0.1, 10.0.0.0/8, 169.254.169.254). |
| HIGH | AT-SEC-006 (LLM06) | Unfiltered SSRF / Arbitrary Network Egresslibraries/typescript/packages/client/src/transport/http.ts:194Evidence: return await baseFetch(input, { ...init, signal: controller.signal }); | Define an explicit egress domain allowlist and block private IP ranges (127.0.0.1, 10.0.0.0/8, 169.254.169.254). |
| HIGH | AT-SEC-006 (LLM06) | Unfiltered SSRF / Arbitrary Network Egresslibraries/typescript/packages/client/src/transport/http.ts:658Evidence: const response = await baseFetch(input, init); | Define an explicit egress domain allowlist and block private IP ranges (127.0.0.1, 10.0.0.0/8, 169.254.169.254). |
| HIGH | AT-SEC-006 (LLM06) | Unfiltered SSRF / Arbitrary Network Egresslibraries/typescript/packages/inspector/src/client/auth/manufact-auth.ts:247Evidence: const res = await fetch(url.toString(), { | Define an explicit egress domain allowlist and block private IP ranges (127.0.0.1, 10.0.0.0/8, 169.254.169.254). |
| HIGH | AT-SEC-006 (LLM06) | Unfiltered SSRF / Arbitrary Network Egresslibraries/typescript/packages/inspector/src/server/proxy/oauth-proxy.ts:728Evidence: async function safeFetch(url: URL, init: RequestInit): Promise<Response> { | Define an explicit egress domain allowlist and block private IP ranges (127.0.0.1, 10.0.0.0/8, 169.254.169.254). |
| HIGH | AT-SEC-006 (LLM06) | Unfiltered SSRF / Arbitrary Network Egresslibraries/typescript/packages/inspector/src/server/proxy/oauth-proxy.ts:729Evidence: return fetch(url, init); | Define an explicit egress domain allowlist and block private IP ranges (127.0.0.1, 10.0.0.0/8, 169.254.169.254). |
| HIGH | AT-SEC-006 (LLM06) | Unfiltered SSRF / Arbitrary Network Egresslibraries/typescript/packages/inspector/tests/e2e/connection.test.ts:1047Evidence: const response = await fetch(url, { | Define an explicit egress domain allowlist and block private IP ranges (127.0.0.1, 10.0.0.0/8, 169.254.169.254). |
| HIGH | AT-SEC-005 (ASI02) | Unrestricted Recursive File Deletion / Modificationlibraries/typescript/packages/server/examples/views/excalidraw/src/checkpoint-store.ts:82Evidence: fs.promises.unlink(path.join(this.dir, f.name)).catch(() => {}) | Enforce strict jail/root directories and require explicit human-in-the-loop confirmation before file deletions. |
| HIGH | AT-SEC-006 (LLM06) | Unfiltered SSRF / Arbitrary Network Egresslibraries/typescript/packages/server/tests/oauth-introspection.test.ts:338Evidence: return fetch(url, { | Define an explicit egress domain allowlist and block private IP ranges (127.0.0.1, 10.0.0.0/8, 169.254.169.254). |
| HIGH | AT-SEC-006 (LLM06) | Unfiltered SSRF / Arbitrary Network Egresslibraries/typescript/scripts/release-channel.mjs:281Evidence: const response = await fetch(url, { | Define an explicit egress domain allowlist and block private IP ranges (127.0.0.1, 10.0.0.0/8, 169.254.169.254). |
| MEDIUM | AT-SEC-007 (LLM02) | Raw Secret Leakage in Debug Logginglibraries/typescript/packages/client/examples/node/auth/oauth-flow.ts:96Evidence: console.log("authorization URL:", url); | Implement PII/secret redaction masks before writing to log streams. |
| MEDIUM | AT-SEC-007 (LLM02) | Raw Secret Leakage in Debug Logginglibraries/typescript/packages/client/examples/node/auth/oauth-flow.ts:122Evidence: console.log("OAuth flow complete:", tokens.token_type, tokens.expires_in); | Implement PII/secret redaction masks before writing to log streams. |
| MEDIUM | AT-SEC-007 (LLM02) | Raw Secret Leakage in Debug Logginglibraries/typescript/packages/inspector/src/client/components/OAuthCallback.tsx:18Evidence: console.log("[OAuthCallback] Component mounted, handling authorization..."); | Implement PII/secret redaction masks before writing to log streams. |
| MEDIUM | AT-SEC-007 (LLM02) | Raw Secret Leakage in Debug Logginglibraries/typescript/packages/inspector/src/client/components/OAuthCallback.tsx:24Evidence: console.log("[OAuthCallback] Authorization successful"); | Implement PII/secret redaction masks before writing to log streams. |
| MEDIUM | AT-SEC-007 (LLM02) | Raw Secret Leakage in Debug Logginglibraries/typescript/packages/inspector/src/client/hooks/useAutoConnect.ts:389Evidence: console.log(`[useAutoConnect] Pre-stored OAuth tokens for ${url}`); | Implement PII/secret redaction masks before writing to log streams. |
| MEDIUM | AT-SEC-007 (LLM02) | Raw Secret Leakage in Debug Logginglibraries/typescript/packages/inspector/start-auth-servers.ts:34Evidence: console.log(" API Key: Authorization: Bearer test-api-key-12345"); | Implement PII/secret redaction masks before writing to log streams. |
| MEDIUM | AT-SEC-007 (LLM02) | Raw Secret Leakage in Debug Logginglibraries/typescript/packages/inspector/start-auth-servers.ts:35Evidence: console.log(" Custom Header: X-Custom-Auth: custom-auth-token-xyz"); | Implement PII/secret redaction masks before writing to log streams. |
Permissions
Scope: excessive · Shell: enabled · Network egress: yes · File deletion: enabled · Human approval: none
Provenance
License: MIT · Lockfile: no · Security policy: yes · Signals: unverified origin
Independently scanned by the AgentTrust registry (not self-reported by the project). Static analysis only — no code executed, findings need human triage, counts may include test/example code. Static snapshot; re-scan before relying on it: npx @eulogik/agenttrust scan https://github.com/mcp-use/mcp-use. Scores move with every upstream commit; pages refresh weekly. How scoring works.