security
Security
Every MCP risk signal in one place — CVEs, tool safety, drift, naming, licenses. Heuristic: review signals, not verdicts. New here? The Risk tab gives an at-a-glance composite grade per server; the Code Analysis tab shows what the static scanner found in published source.
91 CRITICAL
7960 HIGH
2859 MEDIUM
4790 LOW
16 NONE
Static code-analysis findings — hidden prompt content in shipped skill files, committed secrets, dynamic-exec sinks, and suspicious call-home endpoints — across the analyzed catalogue. Heuristic, pure, no code executed; every row deep-links to its source. Click a kind to filter.
15407 analyzed
8150 re-analysis due
2806 not analyzable
2 not yet analyzed
3168 source gone
not analyzable
2,359 no source 447 too large
Running analyzer v28. The scanner changelog explains what each version detects and when it changed.
- hidden prompt 123
- committed secret 1049
- dynamic exec 3644
- obfuscation 683
- suspicious endpoint 3695
- token-log 220
- oauth-scope 975
- skill-script 87
- ide-extension 16
- skill file 74315
- MEDIUM suspicious endpoint sergezuber/FABULA-LLM-5 169.254.169.254 (cloud metadata)
expect(checkUrlSync("http://169.254.169.254/latest/meta-data/").blocked).toBe(true) - MEDIUM suspicious endpoint sergezuber/FABULA-LLM-5 169.254.169.254 (cloud metadata)
expect(scanCode("python", "import urllib.request; urllib.request.urlopen('http://169.254.169.254/')").blocked).toBe(true) - HIGH dynamic exec sergezuber/FABULA-LLM-5 indirect eval
const res = await _page.evaluate((e: string) => { try { return JSON.stringify((0, eval)(e)) } catch (err: any) { return "eval error: " + err.message } }, args.eval) - MEDIUM suspicious endpoint sergezuber/FABULA-LLM-5 169.254.169.254 (cloud metadata)
res.writeHead(302, { Location: "http://169.254.169.254/latest/meta-data/" }); res.end(); return - MEDIUM suspicious endpoint sergezuber/FABULA-LLM-5 169.254.169.254 (cloud metadata)
await expectBlocked("web_fetch", { url: "http://169.254.169.254/latest/meta-data/" }, "ssrf") - MEDIUM suspicious endpoint sergezuber/FABULA-LLM-5 169.254.169.254 (cloud metadata)
expect(out(await T.browser_navigate.execute({ url: "http://169.254.169.254/", description: "x" }))).toContain("BLOCKED") - MEDIUM suspicious endpoint sergezuber/FABULA-LLM-5 8.8.8.8
expect(checkUrlSync("https://8.8.8.8/").blocked).toBe(false) - MEDIUM suspicious endpoint sergezuber/FABULA-LLM-5 169.254.169.254 (cloud metadata)
expect(checkUrlSync("http://169.254.169.254/latest/meta-data/").code).toBe("cloud_metadata") - MEDIUM suspicious endpoint sergezuber/FABULA-LLM-5 169.254.169.254 (cloud metadata)
await expectBlocked("web_fetch", { url: "http://169.254.169.254/latest/meta-data/" }, "ssrf:cloud_metadata") - LOW obfuscation sergezuber/FABULA-LLM-5 dynamic require()/import()
const mod = await import(`../fabula-reliability?${tag}`) - MEDIUM suspicious endpoint sergezuber/FABULA-LLM-5 169.254.169.254 (cloud metadata)
["cloud metadata IP", "python", "import urllib.request\nurllib.request.urlopen('http://169.254.169.254/latest/meta-data/')", "cloud_metadata"], - MEDIUM suspicious endpoint sergezuber/FABULA-LLM-5 us.i.posthog.com (telemetry)
const response = await fetch("https://us.i.posthog.com/i/v0/e/", { - MEDIUM suspicious endpoint sergezuber/FABULA-LLM-5 169.254.169.254 (cloud metadata)
headers: { Location: "http://169.254.169.254/latest/meta-data/" }, - MEDIUM suspicious endpoint sergezuber/FABULA-LLM-5 93.184.216.34
await expect(assertSafeUrl("http://93.184.216.34/")).resolves.toBeUndefined() - MEDIUM suspicious endpoint sergezuber/FABULA-LLM-5 172.32.0.1
await expect(assertSafeUrl("http://172.32.0.1/")).resolves.toBeUndefined()