← All scanned servers

Trust Card · Static snapshot

jlowin__fastmcp F

37/100 · 49 findings (22 critical) · scope excessive · Ranked #50 of 53 scanned.

Scanned 2026-09-09 · engine v0.1.0 (8 regex rules, OWASP-mapped) · upstream jlowin/fastmcp @ 0796584 (2026-09-09)

Score breakdown

security 0
permissions 20
provenance 75
reliability 85
stability 75

Score constrained by 22 critical and 27 high-severity findings.

Fix first (49 critical/high)

SeverityRuleFindingRemediation
CRITICALAT-SEC-002 (LLM02)Hardcoded Credential or API Secret
docs/fastmcp-analytics.js:6
Evidence: var AMPLITUDE_API_KEY = "c361ed56e7bdc1a48a38773c40120b39";
Move credentials to secure environment variables or a key vault. Never commit API keys.
CRITICALAT-SEC-002 (LLM02)Hardcoded Credential or API Secret
fastmcp_slim/fastmcp/server/auth/oidc_proxy.py:196
Evidence: client_secret="your-oidc-client-secret",
Move credentials to secure environment variables or a key vault. Never commit API keys.
CRITICALAT-SEC-002 (LLM02)Hardcoded Credential or API Secret
fastmcp_slim/fastmcp/server/auth/providers/auth0.py:16
Evidence: client_secret="your-auth0-client-secret",
Move credentials to secure environment variables or a key vault. Never commit API keys.
CRITICALAT-SEC-002 (LLM02)Hardcoded Credential or API Secret
fastmcp_slim/fastmcp/server/auth/providers/auth0.py:76
Evidence: client_secret="your-auth0-client-secret",
Move credentials to secure environment variables or a key vault. Never commit API keys.
CRITICALAT-SEC-002 (LLM02)Hardcoded Credential or API Secret
fastmcp_slim/fastmcp/server/auth/providers/aws.py:17
Evidence: client_secret="your-cognito-client-secret"
Move credentials to secure environment variables or a key vault. Never commit API keys.
CRITICALAT-SEC-002 (LLM02)Hardcoded Credential or API Secret
fastmcp_slim/fastmcp/server/auth/providers/aws.py:116
Evidence: client_secret="your-cognito-client-secret",
Move credentials to secure environment variables or a key vault. Never commit API keys.
CRITICALAT-SEC-002 (LLM02)Hardcoded Credential or API Secret
fastmcp_slim/fastmcp/server/auth/providers/clerk.py:21
Evidence: client_secret="your-clerk-client-secret",
Move credentials to secure environment variables or a key vault. Never commit API keys.
CRITICALAT-SEC-002 (LLM02)Hardcoded Credential or API Secret
fastmcp_slim/fastmcp/server/auth/providers/clerk.py:266
Evidence: client_secret="your-clerk-client-secret",
Move credentials to secure environment variables or a key vault. Never commit API keys.
CRITICALAT-SEC-002 (LLM02)Hardcoded Credential or API Secret
fastmcp_slim/fastmcp/server/auth/providers/discord.py:15
Evidence: client_secret="your-discord-client-secret"
Move credentials to secure environment variables or a key vault. Never commit API keys.
CRITICALAT-SEC-002 (LLM02)Hardcoded Credential or API Secret
fastmcp_slim/fastmcp/server/auth/providers/discord.py:186
Evidence: client_secret="discord-client-secret-abc123...",
Move credentials to secure environment variables or a key vault. Never commit API keys.
CRITICALAT-SEC-002 (LLM02)Hardcoded Credential or API Secret
fastmcp_slim/fastmcp/server/auth/providers/github.py:15
Evidence: client_secret="your-github-client-secret"
Move credentials to secure environment variables or a key vault. Never commit API keys.
CRITICALAT-SEC-002 (LLM02)Hardcoded Credential or API Secret
fastmcp_slim/fastmcp/server/auth/providers/google.py:15
Evidence: client_secret="your-google-client-secret"
Move credentials to secure environment variables or a key vault. Never commit API keys.
CRITICALAT-SEC-002 (LLM02)Hardcoded Credential or API Secret
tests/cli/deploy/test_horizon_client.py:234
Evidence: secret_body = "fmcp_response_secret"
Move credentials to secure environment variables or a key vault. Never commit API keys.
CRITICALAT-SEC-002 (LLM02)Hardcoded Credential or API Secret
tests/client/auth/test_oauth_static_client.py:203
Evidence: client_secret="pre-registered-secret",
Move credentials to secure environment variables or a key vault. Never commit API keys.
CRITICALAT-SEC-002 (LLM02)Hardcoded Credential or API Secret
tests/client/auth/test_oauth_static_client.py:216
Evidence: client_secret="pre-registered-secret",
Move credentials to secure environment variables or a key vault. Never commit API keys.
CRITICALAT-SEC-002 (LLM02)Hardcoded Credential or API Secret
tests/server/auth/test_oauth_consent_flow.py:80
Evidence: upstream_client_secret="test-upstream-secret",
Move credentials to secure environment variables or a key vault. Never commit API keys.
CRITICALAT-SEC-002 (LLM02)Hardcoded Credential or API Secret
tests/server/auth/test_oidc_proxy.py:672
Evidence: client_secret="introspection-secret",
Move credentials to secure environment variables or a key vault. Never commit API keys.
CRITICALAT-SEC-002 (LLM02)Hardcoded Credential or API Secret
tests/server/auth/test_oidc_proxy.py:709
Evidence: client_secret="introspection-secret",
Move credentials to secure environment variables or a key vault. Never commit API keys.
CRITICALAT-SEC-002 (LLM02)Hardcoded Credential or API Secret
tests/server/auth/test_oidc_proxy.py:741
Evidence: client_secret="introspection-secret",
Move credentials to secure environment variables or a key vault. Never commit API keys.
CRITICALAT-SEC-002 (LLM02)Hardcoded Credential or API Secret
tests/server/auth/test_oidc_proxy.py:773
Evidence: client_secret="introspection-secret",
Move credentials to secure environment variables or a key vault. Never commit API keys.
CRITICALAT-SEC-002 (LLM02)Hardcoded Credential or API Secret
tests/server/auth/test_oidc_proxy.py:1062
Evidence: client_secret="introspection-secret",
Move credentials to secure environment variables or a key vault. Never commit API keys.
CRITICALAT-SEC-002 (LLM02)Hardcoded Credential or API Secret
tests/server/auth/test_oidc_proxy_token.py:156
Evidence: client_secret="introspection-secret",
Move credentials to secure environment variables or a key vault. Never commit API keys.
HIGHAT-SEC-006 (LLM06)Unfiltered SSRF / Arbitrary Network Egress
fastmcp_slim/fastmcp/cli/cimd.py:185
Evidence: doc = await fetcher.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).
HIGHAT-SEC-006 (LLM06)Unfiltered SSRF / Arbitrary Network Egress
tests/server/auth/test_cimd.py:238
Evidence: doc = await fetcher.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).
HIGHAT-SEC-006 (LLM06)Unfiltered SSRF / Arbitrary Network Egress
tests/server/auth/test_cimd.py:256
Evidence: first = await fetcher.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).
HIGHAT-SEC-006 (LLM06)Unfiltered SSRF / Arbitrary Network Egress
tests/server/auth/test_cimd.py:257
Evidence: second = await fetcher.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).
HIGHAT-SEC-006 (LLM06)Unfiltered SSRF / Arbitrary Network Egress
tests/server/auth/test_cimd.py:266
Evidence: async def fake_fetch(url: str, **kwargs) -> SSRFFetchResponse:
Define an explicit egress domain allowlist and block private IP ranges (127.0.0.1, 10.0.0.0/8, 169.254.169.254).
HIGHAT-SEC-006 (LLM06)Unfiltered SSRF / Arbitrary Network Egress
tests/server/auth/test_cimd.py:283
Evidence: await fetcher.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).
HIGHAT-SEC-006 (LLM06)Unfiltered SSRF / Arbitrary Network Egress
tests/server/auth/test_cimd.py:303
Evidence: first = await fetcher.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).
HIGHAT-SEC-006 (LLM06)Unfiltered SSRF / Arbitrary Network Egress
tests/server/auth/test_cimd.py:304
Evidence: second = await fetcher.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).
HIGHAT-SEC-006 (LLM06)Unfiltered SSRF / Arbitrary Network Egress
tests/server/auth/test_cimd.py:337
Evidence: first = await fetcher.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).
HIGHAT-SEC-006 (LLM06)Unfiltered SSRF / Arbitrary Network Egress
tests/server/auth/test_cimd.py:338
Evidence: second = await fetcher.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).
HIGHAT-SEC-006 (LLM06)Unfiltered SSRF / Arbitrary Network Egress
tests/server/auth/test_cimd.py:371
Evidence: first = await fetcher.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).
HIGHAT-SEC-006 (LLM06)Unfiltered SSRF / Arbitrary Network Egress
tests/server/auth/test_cimd.py:372
Evidence: second = await fetcher.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).
HIGHAT-SEC-006 (LLM06)Unfiltered SSRF / Arbitrary Network Egress
tests/server/auth/test_cimd.py:400
Evidence: first = await fetcher.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).
HIGHAT-SEC-006 (LLM06)Unfiltered SSRF / Arbitrary Network Egress
tests/server/auth/test_cimd.py:401
Evidence: second = await fetcher.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).
HIGHAT-SEC-006 (LLM06)Unfiltered SSRF / Arbitrary Network Egress
tests/server/auth/test_cimd.py:434
Evidence: first = await fetcher.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).
HIGHAT-SEC-006 (LLM06)Unfiltered SSRF / Arbitrary Network Egress
tests/server/auth/test_cimd.py:435
Evidence: second = await fetcher.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).
HIGHAT-SEC-006 (LLM06)Unfiltered SSRF / Arbitrary Network Egress
tests/server/auth/test_cimd.py:472
Evidence: first = await fetcher.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).
HIGHAT-SEC-006 (LLM06)Unfiltered SSRF / Arbitrary Network Egress
tests/server/auth/test_cimd.py:473
Evidence: second = await fetcher.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).
HIGHAT-SEC-006 (LLM06)Unfiltered SSRF / Arbitrary Network Egress
tests/server/auth/test_cimd.py:474
Evidence: third = await fetcher.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).
HIGHAT-SEC-006 (LLM06)Unfiltered SSRF / Arbitrary Network Egress
tests/server/auth/test_cimd.py:508
Evidence: first = await fetcher.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).
HIGHAT-SEC-006 (LLM06)Unfiltered SSRF / Arbitrary Network Egress
tests/server/auth/test_cimd.py:514
Evidence: second = await fetcher.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).
HIGHAT-SEC-006 (LLM06)Unfiltered SSRF / Arbitrary Network Egress
tests/server/auth/test_cimd.py:515
Evidence: third = await fetcher.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).
HIGHAT-SEC-006 (LLM06)Unfiltered SSRF / Arbitrary Network Egress
tests/server/auth/test_cimd.py:540
Evidence: await fetcher.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).
HIGHAT-SEC-006 (LLM06)Unfiltered SSRF / Arbitrary Network Egress
tests/server/auth/test_cimd.py:549
Evidence: await fetcher.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).
HIGHAT-SEC-006 (LLM06)Unfiltered SSRF / Arbitrary Network Egress
tests/server/auth/test_cimd.py:561
Evidence: await fetcher.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).
HIGHAT-SEC-006 (LLM06)Unfiltered SSRF / Arbitrary Network Egress
tests/server/auth/test_cimd.py:580
Evidence: await fetcher.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).
HIGHAT-SEC-006 (LLM06)Unfiltered SSRF / Arbitrary Network Egress
tests/test_mcp_config.py:1443
Evidence: def fetch(url: str) -> str:
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: enabled · Network egress: yes · File deletion: enabled · Human approval: none

Provenance

License: Apache-2.0 · 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/jlowin/fastmcp. Scores move with every upstream commit; pages refresh weekly. How scoring works.