⚠️ 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
getsentry__sentry-mcp D
43/100 · 19 findings (4 critical) · scope excessive · Ranked #43 of 53 scanned.
Scanned 2026-09-09 · engine v0.1.0 (8 regex rules, OWASP-mapped) · upstream getsentry/sentry-mcp @ 26a5040 (2026-09-08)
Score breakdown
Score constrained by 4 critical and 11 high-severity findings.
Fix first (15 critical/high)
| Severity | Rule | Finding | Remediation |
|---|---|---|---|
| CRITICAL | AT-SEC-002 (LLM02) | Hardcoded Credential or API Secretpackages/mcp-cloudflare/src/server/lib/approval-dialog.test.ts:37Evidence: const TEST_SECRET = "test-cookie-secret-32-chars-long"; | Move credentials to secure environment variables or a key vault. Never commit API keys. |
| CRITICAL | AT-SEC-002 (LLM02) | Hardcoded Credential or API Secretpackages/mcp-cloudflare/src/server/oauth/callback.test.ts:38Evidence: const COOKIE_SECRET = "test-cookie-secret-key-for-hmac"; | Move credentials to secure environment variables or a key vault. Never commit API keys. |
| CRITICAL | AT-SEC-003 (ASI02) | Unbounded Dynamic Shell Executionpackages/mcp-cloudflare/worker-configuration.d.ts:2279Evidence: exec(input?: (string | URLPatternInit), baseURL?: string): URLPatternResult | null; | 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 Executionpackages/mcp-server/src/auth/device-code-flow.ts:165Evidence: exec(`cmd.exe /c start "" ${JSON.stringify(url)}`); | Strictly restrict shell execution to an immutable allowlist of binary commands with explicit argument arrays, or execute inside microVM sandboxes. |
| HIGH | AT-SEC-006 (LLM06) | Unfiltered SSRF / Arbitrary Network Egresspackages/mcp-cloudflare/src/server/mcp.test.ts:318Evidence: return originalFetch(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 Egresspackages/mcp-cloudflare/src/server/mcp.test.ts:400Evidence: return originalFetch(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 Egresspackages/mcp-cloudflare/src/server/mcp.test.ts:451Evidence: return originalFetch(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 Egresspackages/mcp-cloudflare/worker-configuration.d.ts:238Evidence: fetch(input: RequestInfo | URL, init?: RequestInit<RequestInitCfProperties>): 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 Egresspackages/mcp-cloudflare/worker-configuration.d.ts:334Evidence: declare function fetch(input: RequestInfo | URL, init?: RequestInit<RequestInitCfProperties>): 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 Egresspackages/mcp-cloudflare/worker-configuration.d.ts:1469Evidence: fetch(input: RequestInfo | 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 Egresspackages/mcp-core/src/api-client/client.ts:791Evidence: 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 Egresspackages/mcp-core/src/internal/fetch-utils.ts:18Evidence: 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 Egresspackages/mcp-server/src/auth/device-code-flow.ts:37Evidence: const resp = 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 Egresspackages/mcp-server/src/auth/device-code-flow.ts:84Evidence: const resp = 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 Egresspackages/smoke-tests/src/smoke.test.ts:57Evidence: 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 Loggingpackages/mcp-core/scripts/measure-token-cost.ts:219Evidence: console.log(`✅ Token stats written to: ${absolutePath}`); | Implement PII/secret redaction masks before writing to log streams. |
| MEDIUM | AT-SEC-007 (LLM02) | Raw Secret Leakage in Debug Loggingpackages/mcp-server/src/cli/commands/auth.ts:73Evidence: console.log(`Logged out (removed cached token for ${cached.user_email}).`); | Implement PII/secret redaction masks before writing to log streams. |
| MEDIUM | AT-SEC-007 (LLM02) | Raw Secret Leakage in Debug Loggingpackages/mcp-test-client/src/index.ts:117Evidence: console.log(chalk.gray("OPENAI_API_KEY=your_openai_api_key")); | Implement PII/secret redaction masks before writing to log streams. |
| MEDIUM | AT-SEC-007 (LLM02) | Raw Secret Leakage in Debug Loggingpackages/mcp-test-client/src/index.ts:118Evidence: console.log(chalk.gray("OPENROUTER_API_KEY=your_openrouter_api_key")); | Implement PII/secret redaction masks before writing to log streams. |
Permissions
Scope: excessive · Shell: enabled · Network egress: yes · File deletion: none · Human approval: none
Provenance
License: MIT · Lockfile: yes · Security policy: no · 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/getsentry/sentry-mcp. Scores move with every upstream commit; pages refresh weekly. How scoring works.