Jarvis Osorio Labs

Labs · mcp-pordego · summary on jarvisosorio.com

mcp-pordego documentation

mcp-pordego (pordego is Esperanto for gate) is an open-source security scanner for the Model Context Protocol (MCP) servers your agents already use. It is a scanner, not an MCP server. It audits MCP setups in Claude Desktop, Claude Code, Cursor and VS Code.

Current version: 0.1.1. License: Apache-2.0. Source: github.com/JarvisOsorio/mcp-pordego.

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.

View the GitHub repository Short project page

What it is for

Developers and security-minded teams who already run MCP servers in Claude, Cursor or VS Code and want a local audit of those configs: unpinned packages, inline secrets, prompt-injection in tool descriptions, over-broad filesystem roots, and related issues.

Install

Requires Node.js 20+ and pnpm. The package is not on the npm registry — do not run npx mcp-pordego. Install from the repository or a GitHub Release asset.

git clone https://github.com/JarvisOsorio/mcp-pordego.git
cd mcp-pordego
pnpm install && pnpm build
pnpm scan -- --help

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

Or download the v0.1.1 release asset:

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

Usage

pnpm scan
# or with an explicit config:
node packages/cli/dist/index.js scan --config ./fixtures/configs/bad-mcp.json

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

The scanner exits 1 on high-severity findings (CI-friendly) and 2 on config or integrity errors.

Point at a file or command

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

Live mode spawns servers and calls initialize plus tools/list only — never tools/call.

Output formats

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

What it 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)

RuleSeverity
desc-injection-phraseshigh
desc-hidden-charshigh
desc-exfil-urlhigh
schema-freeform-exechigh
desc-markup-hiddenmedium
desc-cross-tool-refmedium
schema-freeform-pathmedium
schema-freeform-urlmedium
tool-name-collisionmedium
no-readonly-hintlow
desc-oversizedlow

Detection is heuristic. Rules are plain TypeScript modules. The repository includes 42 tests covering static rules, live rules, detectors, discovery and the scan runner (pnpm test).

Roadmap (gateway, not 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).

Limitations

See also SECURITY.md and the Labs changelog.