mcp-pordego, an open-source MCP security scanner by Jarvis Osorio

mcp-pordego (pordego is Esperanto for gate) is an open-source security scanner for the Model Context Protocol (MCP) servers your agents already use, created by Jarvis Osorio (Jarvis Nelson Osorio). It audits the MCP setups in Claude Desktop, Claude Code, Cursor and VS Code, and flags unpinned packages, inline secrets, prompt-injection in tool descriptions, over-broad filesystem roots, and more.

View the GitHub repository

The project is written in TypeScript, requires Node.js 20 or later and pnpm, and is released under the Apache License 2.0. The current version in the repository is 0.1.0.

v0.1 ships the scanner. A policy gateway, lockfile, redaction proxy, audit log and replay are designed in SPEC.md and the CLI stubs those commands so the surface stays stable, but they are not included in this release. The package is not yet on the npm registry, so do not run npx mcp-pordego. Install from the GitHub repository or the v0.1.0 release asset.

Why

Today, every MCP setup is “give the agent the whole server and hope.” There is no check that a tool description did not smuggle instructions, no alarm when npx floats on @latest, and nothing stopping a PAT from sitting in plaintext in mcp.json.

What v0.1 checks

Static (config only)

RuleSeverityCheck
unpinned-npxhighnpx package without an exact version, or @latest
unpinned-uvxhighuvx / pipx run without ==version
unpinned-dockerhighimage with :latest or no tag / digest
unpinned-githighgit URL without a commit SHA
inline-secrethighsecret-looking value in env / args / headers
remote-http-no-tlshighhttp:// to a non-loopback host
broad-fs-rootmediumfilesystem server rooted at /, ~, or home
shell-servermediumname or package suggests shell or exec capability

Live (--live)

Live mode spawns each stdio server and calls initialize plus tools/list only — never tools/call. High-severity rules include injection phrases, hidden characters, exfil URLs and freeform-exec schemas. Medium and low rules cover hidden markup, cross-tool references, freeform path or URL schemas, tool-name collisions, missing read-only hints and oversized descriptions.

Detection is heuristic. Rules are plain TypeScript modules. The scanner exits 1 on high-severity findings (CI-friendly) and 2 on config or integrity errors.

Quick start

Requires Node.js 20+ and pnpm. From the repository:

git clone https://github.com/JarvisOsorio/mcp-pordego.git
cd mcp-pordego
pnpm install && pnpm build
pnpm scan
# or with an explicit config:
node packages/cli/dist/index.js scan --config ./fixtures/configs/bad-mcp.json

After the build, the CLI is also at node packages/cli/dist/index.js, or the bundled dist/mcp-pordego.cjs from pnpm bundle.

Alternatively, download the v0.1.0 release asset and run it directly:

curl -L -o mcp-pordego.cjs https://github.com/JarvisOsorio/mcp-pordego/releases/download/v0.1.0/mcp-pordego.cjs
node mcp-pordego.cjs scan

The release page is v0.1.0. npm publishing is next; the repository is the source of truth for v0.1.

What it discovers

pnpm scan auto-discovers MCP configs from:

ClientPaths
Claude Desktop~/Library/Application Support/Claude/claude_desktop_config.json (macOS), %APPDATA%/Claude/… (Windows), ~/.config/Claude/… (Linux)
Claude Code.mcp.json, ~/.claude.json
Cursor.cursor/mcp.json, ~/.cursor/mcp.json
VS Code.vscode/mcp.json

Point at a file or command

mcp-pordego scan --config ./fixtures/configs/bad-mcp.json
mcp-pordego scan --server "npx -y @modelcontextprotocol/[email protected] /tmp"
mcp-pordego scan --live --config .mcp.json

From a local clone, use node packages/cli/dist/index.js or node mcp-pordego.cjs in place of mcp-pordego until the package is published.

Output formats

mcp-pordego scan --format text          # default, colored, grouped by server
mcp-pordego scan --format json
mcp-pordego scan --format sarif         # GitHub code scanning
mcp-pordego scan --fail-on medium       # high | medium | low (default: high)
mcp-pordego scan --baseline accepted.json

Roadmap (gateway)

Designed, not yet in this release:

Decisions locked for the v1 gateway: tool pinning on, deny sampling and elicitation by default, and denials returned as MCP results with isError: true (not JSON-RPC errors).

What this is not

The repository includes 39 tests covering static rules, live rules, detectors, discovery and the scan runner (pnpm test). See SECURITY.md and CONTRIBUTING.md.

Source and license

Identity: Jarvis Osorio · Jarvis Nelson Osorio · AI work · Official profiles

Updated: November 13, 2026 (America/New_York)