mcpscan
This server does not currently have a deployable release on Glama. Follow the repository's setup instructions to install and configure it for your MCP client, including any required credentials and local dependencies.
Moved: this project has been renamed to Argus of MCP and now lives at https://github.com/fpavia111-creator/argus.
Install the new package:
npm i @kurtfrancisco/argus.@kurtfrancisco/mcpscanis deprecated and gets no further updates; the old commands, env vars and license keys still work in Argus of MCP.
mcpscan — MCP server & agent-skill supply-chain scanner (MVP)
Supply-chain security scanner for MCP servers and agent skills (Claude, Cursor, VS Code, Windsurf).
Quickstart
Install (Node.js ≥ 18):
npm install -g @kurtfrancisco/mcpscan # or: npx @kurtfrancisco/mcpscan scanClaude Code
claude mcp add mcpscan -- npx -y @kurtfrancisco/mcpscan@0.1.0 mcpCursor — add to ~/.cursor/mcp.json (global) or .cursor/mcp.json (project). The same snippet works for Claude Desktop, VS Code and Windsurf:
{ "mcpServers": { "mcpscan": { "command": "npx", "args": ["-y", "mcpscan@0.1.0", "mcp"] } } }Restart the client and the tools appear. Full details below.
Teams install third-party MCP servers and agent skills (Claude Code skills, plugin skills, Cursor skills) the same way they once installed random npm packages: copy a JSON snippet, run npx -y something, and trust it. Those components can be dead, over-privileged, or can hide prompt injection in a SKILL.md or a tool description.
mcpscan is a zero-dependency Node.js CLI that finds every MCP config and skill folder on a machine (Windows, macOS, Linux), runs offline static checks, and writes text / JSON / SARIF / HTML reports with CI-friendly exit codes. It can also run as a read-only MCP server so an agent can audit its own environment.
Status: MVP. Static, pattern-based analysis. Read Limitations before relying on it.
Related MCP server: mcp-audit
What it finds
Rule | Default sev. | Check |
MCP001 | high | Prompt injection / hidden instructions ("ignore previous instructions", "do not tell the user", |
MCP002 | high / critical | Zero-width, bidi-override, and Unicode tag characters (tag text is decoded and shown) |
MCP003 | critical | Instructions to send data to an external endpoint or harvest credentials |
MCP004 | high / critical | Dangerous commands in scripts, SKILL.md code blocks, and server command lines: |
MCP005 | high | Credential paths: |
MCP006 | medium | Large base64 blobs (possible obfuscated payloads) |
MCP007 | high / critical | Hardcoded secrets in |
MCP008 | low–high | Unpinned packages: |
MCP009 | high (info for localhost) | Plain |
MCP010 | medium / high | Excessive filesystem roots ( |
MCP011 / MCP012 | high / medium | Policy deny-list hit / not on allow list |
MCP013–016 | varies |
|
MCP017 | low | Config file could not be parsed |
MCP018 | info | SKILL.md missing |
mcpscan rules prints the catalog.
Where it looks
Client | Windows | macOS | Linux |
Claude Desktop |
|
|
|
Claude Code |
|
| same |
Cursor |
|
| same |
VS Code (+ Insiders, VSCodium) |
|
|
|
Windsurf |
|
| same |
Project |
| same | same |
Skills |
|
| same |
Run mcpscan paths to see the exact paths checked on your OS. JSONC (comments, trailing commas) is supported. Symlinks are never followed.
Install & use
Needs Node.js 18 or newer. No runtime dependencies, so you don't have to run npm install to use it.
Windows (PowerShell)
# from the folder you copied (e.g. C:\path\to\mcpscan)
cd $env:USERPROFILE\mcp-skill-scanner
node .\bin\mcpscan.js paths # where it will look
node .\bin\mcpscan.js scan # user configs + current folder
node .\bin\mcpscan.js scan -p C:\code\my-repo -f html -o "$env:TEMP\mcpscan.html"
Start-Process "$env:TEMP\mcpscan.html"
npm test # run the test suite (offline)
# optional: put `mcpscan` on PATH
npm link
mcpscan scan --fail-on critical
$LASTEXITCODE # 0 = clean, 1 = findings, 2 = errorIf PowerShell blocks the mcpscan.ps1 shim that npm link creates, run Set-ExecutionPolicy -Scope CurrentUser RemoteSigned, or keep calling node .\bin\mcpscan.js.
macOS / Linux
node bin/mcpscan.js scan
node bin/mcpscan.js scan -p ~/code/app -f sarif -o mcpscan.sarifOptions
mcpscan [scan] [-p dir]... [-c config.json]... [-s skillsDir]... [-t tools.json]...
[-f text|json|sarif|html] [-o file] [--fail-on critical|high|medium|low|info|none]
[--min-severity sev] [--policy file] [--online] [--root home] [--platform win32|darwin|linux]
[--no-default-roots] [--no-color]
mcpscan list | paths | rules | init-policy | mcpVet a skill before installing:
mcpscan scan --no-default-roots -s .\downloaded-skillVet tool descriptions: save a server's
tools/listresult to JSON, thenmcpscan scan --no-default-roots -t tools.jsonExit codes:
0= nothing at or above--fail-on(defaulthigh, orfailOnfrom the policy),1= findings,2= usage/runtime error.
CI (GitHub Actions + code scanning)
- run: node bin/mcpscan.js scan --no-default-roots -p . -f sarif -o mcpscan.sarif --fail-on high
- uses: github/codeql-action/upload-sarif@v3
if: always()
with: { sarif_file: mcpscan.sarif }Policy file (mcpscan.policy.json)
Loaded from the current directory, or pass --policy path. mcpscan init-policy writes a starter file.
{
"version": 1,
"failOn": "high",
"requireAllowList": false,
"allow": { "servers": [], "packages": ["@modelcontextprotocol/*"], "hosts": ["mcp.linear.app"], "skills": [] },
"deny": { "servers": [], "packages": ["*-mcp-free-*"], "hosts": ["*.ngrok-free.app"], "skills": [] },
"ignore": [ { "rule": "MCP018" }, { "rule": "MCP008", "target": "internal-*" } ],
"severityOverrides": { "MCP014": "low" }
}* is a wildcard. When requireAllowList is true, any server or skill that isn't allow-listed raises MCP012.
MCP server mode (read-only)
mcpscan mcp runs a stdio MCP server (JSON-RPC 2.0, protocol 2025-06-18) with four tools, each annotated readOnlyHint: true: scan_all, list_discovered, scan_skill, scan_text. None of them writes files or touches the network.
{ "mcpServers": { "mcpscan": { "command": "node", "args": ["C:\\path\\to\\mcpscan\\bin\\mcpscan.js", "mcp"] } } }Claude Code: claude mcp add mcpscan -- node /path/to/mcpscan/bin/mcpscan.js mcp
Claude Code skill
skills/mcpscan/ holds a ready-made skill (SKILL.md + reference.md). Copy the folder into %USERPROFILE%\.claude\skills\ (Windows) or ~/.claude/skills/ (macOS/Linux), or into a repo's .claude/skills/:
Copy-Item -Recurse .\skills\mcpscan "$env:USERPROFILE\.claude\skills\mcpscan"Competitors and prior art
mcp-scan / Snyk Agent Scan by Invariant Labs, acquired by Snyk on June 24, 2025. It discovers MCP servers and skills and scans tool descriptions for tool poisoning, rug pulls, and cross-origin escalation. It connects to servers and sends tool names and descriptions to a remote analysis API. Snyk also offers a background mode that reports to Snyk Evo for company-wide monitoring.
Cisco AI Defense mcp-scanner, which scans MCP servers for threats: https://github.com/cisco-ai-defense/mcp-scanner
How mcpscan differs: it runs fully offline by default and sends no tool descriptions to a third party. It has zero dependencies, so it's easy to audit. It covers supply-chain hygiene (pinning, secrets, filesystem scope, transport, liveness) as well as injection. It produces native SARIF for CI, applies a simple policy file, and covers Windows paths explicitly. Its trade-off: no LLM-based semantic analysis, and it doesn't connect to live servers.
Limitations
Detection is regex/heuristic. Expect false positives. Skills that legitimately say "do not tell the user X" get flagged MCP001. Expect false negatives too: paraphrased or translated injections, payloads split across files, and obfuscation beyond base64 and hidden Unicode get through.
Tool descriptions are only checked when they appear in a config, or when you pass a
tools/listdump with-t. mcpscan doesn't launch or connect to servers, so it can't detect rug pulls (description changes over time).--onlinechecks npm and GitHub only. PyPI and Docker Hub liveness aren't implemented, and unauthenticated GitHub API calls are rate-limited (60 requests/hour).Config paths cover the clients' current documented defaults. Portable installs, custom
CLAUDE_CONFIG_DIR, and enterprise-managed settings aren't discovered automatically; pass them with-c/-s.Homoglyph and confusable-character detection isn't implemented.
The MCP server mode implements tools only (no resources or prompts) over stdio.
Development
npm run build # syntax-check all files, load modules, validate policy JSON
npm test # node:test, fully offline (fetch is stubbed to throw)
npm run demo # scan the bundled malicious fixtures
node scripts/make-fixtures.js # regenerate fixtures (all secrets are fake)License
MIT © 2026 Kurt Francisco. See LICENSE.
Contributing
Issues and pull requests are welcome at https://github.com/fpavia111-creator/mcpscan. See CONTRIBUTING.md.
Related MCP Connectors
Scan AI agent skills, MCP server packages and MCP configs before you install them. Static analysis.
Security scanner for MCP servers. Detect vulnerabilities, prompt injection, and tool poisoning.
Audit your MCP servers for poisoned tools and leaked secrets, and check AI-generated code for flaws.
Security scanner for MCP servers and skills: Unicode injection, patterns, secrets.
Related MCP Servers
- AlicenseCqualityDmaintenanceSecurity scanner and MCP server that catches dangerous patterns in MCP servers and AI agent projects, such as leaked secrets, shell execution, and prompt-injection text. Runs as both a CLI and MCP server with CI-friendly severity gates.21MIT
- AlicenseNot gradedqualityAmaintenanceAudits MCP server configurations for security risks including capability inventory, SSRF, prompt injection, and drift detection. Works in read-only mode and can also be used as an MCP server to let AI agents audit their own attack surface.259 PyPI4MIT
- AlicenseNot gradedqualityCmaintenanceEnables authorized security auditing of AI-agent supply chains and agent-facing surfaces: deterministic local skill-bundle audits against eight attack patterns, secrets scanning, and scope-gated read-only recon of agent endpoints and MCP surfaces.MIT
- AlicenseNot gradedqualityAmaintenanceA read-only MCP server that lets agents scan a project's AI agent setup — Claude Code, Codex, Cursor, MCP servers and instruction files — and surface security findings such as the lethal trifecta, broad permissions, exposed secrets and unpinned packages.78 npmMIT