Argus
Scans VS Code/VSCodium MCP configuration files and settings for risky MCP server definitions, including dangerous commands, hardcoded secrets, unpinned packages, excessive filesystem access, and insecure transports.
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.
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.1 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.1", "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.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
This server cannot be deployed
Related MCP Connectors
Scan AI agent skills, MCP server packages and MCP configs before you install them. Static analysis.
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.
Related MCP Servers
- AlicenseAqualityBmaintenanceSecurity scanner for third-party AI agent-skill files: SKILL.md manifests, hooks, and bundled scripts, exposed via an MCP tool.186 npm3Apache 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.610 npmMIT- AlicenseAqualityBmaintenanceEnables 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 gradedqualityBmaintenanceA read-only MCP server that lets an agent audit its own environment by discovering local MCP configurations and skill folders on Windows, macOS, and Linux and running offline static checks for prompt injection, hidden instructions, hardcoded secrets, dangerous commands, unpinned packages, and excessive filesystem or transport permissions. It exposes tools to scan everything discovered, list configurations, vet a single skill, or analyze supplied text, returning text, JSON, SARIF, or HTML findings with CI-friendly severity levels.8 npmMIT