⚠️ 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
neondatabase__mcp-server-neon D
50/100 · 11 findings (8 critical) · scope excessive · Ranked #39 of 53 scanned.
Scanned 2026-09-09 · engine v0.1.0 (8 regex rules, OWASP-mapped) · upstream neondatabase/mcp-server-neon @ be54e78 (2026-09-07)
Score breakdown
Score constrained by 8 critical and 3 high-severity findings.
Fix first (11 critical/high)
| Severity | Rule | Finding | Remediation |
|---|---|---|---|
| CRITICAL | AT-SEC-002 (LLM02) | Hardcoded Credential or API Secretmcp/__tests__/transport-dynamic-tools.integration.test.ts:239Evidence: const oauthToken = 'oauth-client-application'; | Move credentials to secure environment variables or a key vault. Never commit API keys. |
| CRITICAL | AT-SEC-002 (LLM02) | Hardcoded Credential or API Secretmcp/__tests__/transport-dynamic-tools.integration.test.ts:317Evidence: const oauthToken = 'oauth-unclassified-dcr'; | Move credentials to secure environment variables or a key vault. Never commit API keys. |
| CRITICAL | AT-SEC-002 (LLM02) | Hardcoded Credential or API Secretmcp/__tests__/transport-dynamic-tools.integration.test.ts:397Evidence: const oauthToken = 'oauth-handshake-wins'; | Move credentials to secure environment variables or a key vault. Never commit API keys. |
| CRITICAL | AT-SEC-002 (LLM02) | Hardcoded Credential or API Secretmcp/__tests__/transport-dynamic-tools.integration.test.ts:543Evidence: const oauthToken = 'oauth-unscoped-with-query'; | Move credentials to secure environment variables or a key vault. Never commit API keys. |
| CRITICAL | AT-SEC-004 (ASI05) | eval() / Function Constructor Invocationmcp/oauth/refresh-lock.ts:216Evidence: redis.eval(HEARTBEAT_LUA, { | Eliminate eval(). Use safe AST parsers or isolated sandboxes (e.g. E2B Firecracker microVMs). |
| CRITICAL | AT-SEC-004 (ASI05) | eval() / Function Constructor Invocationmcp/oauth/refresh-lock.ts:238Evidence: redis.eval(RELEASE_WITH_TRANSIENT_LUA, { | Eliminate eval(). Use safe AST parsers or isolated sandboxes (e.g. E2B Firecracker microVMs). |
| CRITICAL | AT-SEC-004 (ASI05) | eval() / Function Constructor Invocationmcp/oauth/refresh-lock.ts:246Evidence: redis.eval(RELEASE_LUA, { keys: [lkey], arguments: [owner] }), | Eliminate eval(). Use safe AST parsers or isolated sandboxes (e.g. E2B Firecracker microVMs). |
| CRITICAL | AT-SEC-004 (ASI05) | eval() / Function Constructor Invocationmcp/oauth/refresh-lock.ts:338Evidence: redis.eval(RELEASE_LUA, { keys: [key], arguments: [owner] }), | Eliminate eval(). Use safe AST parsers or isolated sandboxes (e.g. E2B Firecracker microVMs). |
| HIGH | AT-SEC-006 (LLM06) | Unfiltered SSRF / Arbitrary Network Egresslib/oauth/client.ts:191Evidence: return globalThis.fetch(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 Egresslib/oauth/client.ts:193Evidence: return globalThis.fetch(input, { | 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 Egressmcp/tools/handlers/docs.ts:52Evidence: 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). |
Permissions
Scope: excessive · Shell: disabled · Network egress: yes · File deletion: none · Human approval: none
Provenance
License: MIT · Lockfile: yes · Security policy: no · Signals: present (documentary, not a safety verdict)
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/neondatabase/mcp-server-neon. Scores move with every upstream commit; pages refresh weekly. How scoring works.