Argus
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Argusscan my local MCP configs and skill folders for anything risky"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Argus of MCP — MCP server & agent-skill supply-chain scanner
Formerly mcpscan. The npm package is now @kurtfrancisco/argus and the command is argus; the mcpscan command, the MCP tool names and mcpscan.policy.json keep working.
Supply-chain security scanner for MCP servers and agent skills (Claude, Cursor, VS Code, Windsurf).
Quickstart
Install (Node.js ≥ 18):
npm install -g @kurtfrancisco/argus # or: npx @kurtfrancisco/argus scanClaude Code
claude mcp add argus -- npx -y @kurtfrancisco/argus@0.2.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": { "argus": { "command": "npx", "args": ["-y", "@kurtfrancisco/argus@0.2.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.
argus 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: yotta-verify-mcp
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 |
argus 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 argus 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 `argus` on PATH
npm link
argus 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
argus [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]
argus list | paths | rules | init-policy | mcpVet a skill before installing:
argus scan --no-default-roots -s .\downloaded-skillVet tool descriptions: save a server's
tools/listresult to JSON, thenargus 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. argus 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)
argus 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 argus -- 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 Argus 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. Argus 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/argus. See CONTRIBUTING.md.
This server cannot be deployed
Related MCP Connectors
Security scanner for MCP servers and skills: Unicode injection, patterns, secrets.
Security scanner for MCP servers. Detect vulnerabilities, prompt injection, and tool poisoning.
Scan AI agent skills and configs for hidden Unicode, prompt injection and exfiltration.
Scan configs, files, or text for leaked secrets and obvious misconfigurations. Nothing stored.
Related MCP Servers
- AlicenseAqualityAmaintenanceSecurity scanner for third-party AI agent-skill files: SKILL.md manifests, hooks, and bundled scripts, exposed via an MCP tool.110 npm1Apache 2.0

yotta-verify-mcpofficial
AlicenseNot gradedqualityBmaintenanceProvides a deterministic pre-install security scan for Agent skills, plugins, and MCP servers via stdio, returning verdicts, audited badges, CI gates, and reports without executing code or making network calls.74 npmMIT- AlicenseAqualityAmaintenanceEnables agents and CI pipelines to audit MCP servers and agent tool-chains by statically scanning repositories, local checkouts, tools/list exports, or live endpoints for risks such as destructive actions without confirmation, mismatched safety annotations, injection surfaces, credential or PII exposure, and unguarded command, path, or URL sinks. All checks are read-only and never execute the scanned code or call tools/call.3MIT
- AlicenseNot gradedqualityAmaintenanceRead-only MCP server that exposes the scan_text and scan_paths tools so AI coding agents can scan text, files, staged Git changes, local history and archives for secrets entirely offline, returning redacted findings with rules, positions and fingerprints and flagging incomplete scans. Results can be emitted as JSON, JSONL or SARIF without ever serializing raw secret values or source snippets.Apache 2.0