PluginBench
MCP Server
Active
MIT

pkgxray MCP Server

io.github.adamsjack711-ux/pkgxray

Pre-install security scans for npm packages, MCP servers, and AI agents with cited verdict evidence.

What is the pkgxray MCP server?

pkgxray is a static security scanner that analyzes npm packages, PyPI packages, and MCP servers before installation or connection, returning a SAFE, REVIEW, or BLOCK verdict backed by cited evidence. It detects credential theft, exfiltration, persistence mechanisms, prompt injection, and other supply-chain threats without executing package code.

pkgxray stages packages in quarantine and performs static analysis to identify malicious or suspicious code patterns before you install them. It's designed for the AI agent era—vetting packages and MCP servers that coding assistants like Claude and Cursor might install automatically, with fixed rules that cannot be steered by planted text.

How to install pkgxray

Copy-paste configuration for popular MCP clients.

transport: stdio
Config generated by PluginBench — verify against the source before use.
~/Library/Application Support/Claude/claude_desktop_config.json
{
  "mcpServers": {
    "pkgxray": {
      "command": "npx",
      "args": [
        "-y",
        "pkgxray",
        "mcp-server"
      ]
    }
  }
}

Tools & capabilities

Tools this server exposes to the agent.

  • guard — Scan a single npm or PyPI package before install, returning SAFE/REVIEW/BLOCK with cited evidence.
  • audit — Scan resolved dependencies in lockfiles (package-lock.json, yarn.lock, pnpm-lock.yaml, requirements.txt, poetry.lock, Pipfile.lock, pyproject.toml) against OSV and source patterns.
  • mcp — Vet an MCP server before connecting, with optional --recheck to catch supply-chain regressions.
  • recheck — Scheduled re-audit of installed dependencies to detect trojaned updates or regressions.
  • enforced-install — Install packages from a scanned lockfile with scripts disabled and offline verification of tarball integrity.

Use cases

  • Gate package installs in AI coding assistants (Cursor, Claude Code, Windsurf) to prevent malicious dependencies from being installed automatically.
  • Scan MCP servers before connecting them to Claude or other MCP clients to verify they don't exfiltrate credentials or inject prompts.
  • Monitor installed dependencies on a schedule to detect when a previously-safe package is trojaned or compromised in a new version.
  • Integrate into CI/CD pipelines to fail builds when dependencies cross security policy thresholds.
  • Analyze lockfiles across npm and PyPI ecosystems to identify supply-chain risks before development or deployment.

pkgxray MCP server FAQ

What does pkgxray detect?

Credential theft (including split-fragment paths), cloud metadata harvesting, prompt injection, Unicode smuggling, base64 payloads, exfiltration, persistence (shell profiles, OS schedulers, CI/CD workflows), self-deleting droppers, registry worms, install-time execution hooks, obfuscated code, hallucinated package names, known CVEs, npm↔GitHub artifact divergence, trojaned updates, and MCP capability-surface abuse.

Is pkgxray free?

Yes, pkgxray is MIT-licensed open-source software available on npm.

How do I install and use it in Cursor or Claude?

Install via npm: `npm install pkgxray`. For Cursor/Claude integration, configure it as an MCP server or use it as a gate for agent-driven installs; see the coding-agents.md integration guide in the documentation.

Does pkgxray execute package code?

No. Normal `guard` and `audit` scans are static—they read tarballs as bytes without executing any code. An optional `canary` mode runs packages in a sandbox for behavioral confirmation, but static scans never execute.

What are the verdict meanings?

SAFE (exit 0): no high- or medium-risk indicators found. REVIEW (exit 3): evidence is incomplete or a privileged capability needs human review. BLOCK (exit 2): high-severity cited evidence—do not install without investigation.

Can I use pkgxray alongside npm audit?

Yes. npm audit checks for published CVEs; pkgxray analyzes what package code does. Run both together for comprehensive coverage.

README (reference)

Source of truth, from the repository.

<div align="center"> <img src="docs/banner.png" alt="pkgxray — analyze packages before you install them" width="820">

pkgxray — pre-install security for npm packages, MCP servers, and AI agents

Inspect an npm package or MCP server before you install it or connect to it. You get a SAFE, REVIEW, or BLOCK verdict, decided by fixed rules and backed by cited evidence. The analysis is static and runs on your machine without installing npm dependencies. A pinned MIT-licensed Acorn parser is bundled. Normal scans never execute package code.

npm version npm downloads tests calibration benchmark license: MIT

Website · Documentation · Calibration · Report a bug

<img src="docs/demo/hero.gif" alt="pkgxray guard clearing express@4.21.0 with a SAFE A+ verdict, then blocking a trojaned sample with a BLOCK F verdict and a HIGH credential-access finding" width="820">

<sub>Real runs: <code>guard</code> clears <code>express@4.21.0</code>, then blocks a sample modeled on the 2024 <code>@solana/web3.js</code> compromise.</sub>

</div>

Highlights

  • No npm dependency installation — local Node analysis with a bundled, pinned JavaScript parser.
  • Install approved bytes — pkgxray install scans the npm lockfile, installs held archives offline with scripts disabled, and verifies the resulting files.
  • Normal scans never execute package code — the tarball is read as bytes in quarantine.
  • Cited verdicts from fixed rules — every finding names the file and the evidence. No model decides the verdict, so text planted in a package cannot steer it.
  • Built for the agent era — check MCP servers before you connect, gate the installs an agent runs, and re-audit live MCP traffic.
  • Adversarial gaps tracked openly — 200 additional synthetic cases track detected attacks and benign contrasts; this is internal testing, not an independent audit.
  • Regression gates — calibration and adversarial corpora run in CI; historical top-1000 results remain available for comparison.

1. Quick start · 2. What it scans & detects · 3. Verdicts · 4. Usage · 5. Integrations · 6. How it compares · 7. Documentation

Why

AI coding assistants install packages and connect to MCP servers quickly, and often no person reads the code first. Sonatype counted more than 454,600 new malicious open-source packages across monitored ecosystems in 2025, over 99% of them on npm (Sonatype). npm audit asks whether a package has a known CVE. pkgxray also asks what the code does, before anything installs.

Quick start

1. Scan a known-benign package (no install of pkgxray needed):

npx --yes pkgxray@1.0.5 guard npm:express@4.21.0

It stages the tarball in quarantine and runs the static and supply-chain checks. There is no npm install, no lifecycle script, and no package code executed.

<details> <summary>Sample output</summary>
Decision: SAFE   Grade: A+ (99/100)
No high- or medium-risk indicators were found in the provided evidence.

Notes:
- INFO npm-vs-github-clean — npm tarball matches the linked GitHub repo at the
  published version. (15/16 files match GitHub @4.21.0)
</details>

2. Read the verdict:

VerdictExitMeaning
SAFE0No high- or medium-risk indicators; default policy permits promotion.
REVIEW3Evidence is incomplete or a privileged capability needs human review.
BLOCK2High-severity cited evidence — reject or investigate.

SAFE is not a proof that a package is harmless; static analysis cannot see a payload downloaded only at runtime. See the threat model.

3. See a BLOCK on the supplied inert fixture:

npx --yes pkgxray@1.0.5 --file examples/onboarding-malicious.json --format markdown

The fixture is inert source text that models a split-string SSH-key read and exfiltration. It is never executed. It returns BLOCK (exit 2) with the cited file and evidence.

4. Add it to your workflow — rechecks & CI, MCP, Hookshot install gate.

Two execution models. Default guard and audit scans are static, so package code is never executed. Three surfaces are different: listing an MCP server's tools may spawn it, mcp-proxy runs it behind a gate, and the opt-in canary executes the package in a sandbox to confirm what it does. The canary can confirm that a package is malicious, but it can never prove one is safe. Full boundary: SECURITY.md.

What it scans & detects

Scans — pkgxray guard npm:name@version or pypi:name@version, github:owner/repo, a local directory, whole lockfiles across two ecosystems (npm: package-lock.json, yarn.lock, pnpm-lock.yaml, package.json; PyPI: requirements.txt, poetry.lock, Pipfile.lock, pyproject.toml), MCP servers, and AI-agent extensions.

Detects — credential theft (incl. split-fragment paths), cloud instance-metadata and secret-store harvesting, prompt injection, Unicode smuggling, base64 payloads and stage-2 loaders, exfiltration, persistence (shell profile, OS scheduler, and injected CI/CD workflows), self-deleting droppers, registry worm replication (install-time npm publish), npm install-hook and PyPI setup.py install-time execution, obfuscated computed-arg execution, hallucinated / slopsquat names (a lockfile pin the registry never published), known CVEs (via OSV, before download), npm↔GitHub artifact divergence, trojaned updates (recheck), and MCP capability-surface abuse.

The full coverage matrix is in the threat model, along with the known blind spot: a package that downloads its payload later. A side-by-side comparison table is on the website.

Verdicts

VerdictYou should
SAFENo blocking findings within the reported checks. Review coverage before installing.
REVIEWInspect the quarantined copy before promoting.
BLOCKDo not install. Every finding names the file and evidence.

Exit codes are stable and CI-friendly: 0 safe/allow · 2 block · 3 review.

Usage

pkgxray guard npm:some-package@1.2.3 [--format json]   # vet a package before install
pkgxray guard pypi:some-package@1.2.3                  # same, for a PyPI package (sdist staged + scanned)
pkgxray mcp --package npm:some-mcp-server@1.4.2 npx some-mcp-server   # vet an MCP server; --recheck catches the rug-pull
pkgxray audit package-lock.json [--deep-all]               # also: yarn.lock, pnpm-lock.yaml, package.json
pkgxray audit requirements.txt [--deep]                # PyPI: also poetry.lock, Pipfile.lock, pyproject.toml
pkgxray recheck package-lock.json                      # scheduled: non-zero only on a regression

audit checks resolved dependencies against OSV. --deep adds source scans for blocked dependencies; --deep-all requests source scans for all resolved dependencies. Failed deep scans and incomplete source collection return REVIEW unless already BLOCK. guard --deps includes direct-dependency findings in its decision; only exact pins are checked, with ranges and other unresolved sources left at REVIEW. Guard output lists completed, partial, disabled and failed checks so a passing verdict does not imply checks that never ran. PyPI scans cover source-distribution manifests, vulnerability metadata, and text-level injection checks; they do not provide full Python module behavioral analysis or wheel inspection. Python source adds an unsupported-behavior REVIEW finding. Behavioral coverage gaps cannot be muted or promoted with allow-review; a pinned artifact approval remains an explicit operator override. Archives containing links or special files are rejected.

One optional .pkgxray.json tunes policy on the Node-based surfaces. The browser extension scans supplied evidence using engine defaults and cannot read project configuration. No config means the strictest settings. Config can never allow a CVE away, every loosening is printed, and a scan that errors fails closed to review. Schema and rules: configuration.md · .pkgxray.example.json.

Integrations

One engine behind every entry point. "Works with" means a documented setup guide, not a vendor-endorsed integration.

WhereWhat it doesGuide
Coding agents — Codex, Claude Code, Cursor, WindsurfGate installs and expose the audit tools to the agentcoding-agents.md
MCP clientsVet a server before connect; run pkgxray itself as an MCP servermcp.md
GitHub Actions / CIFail a build when a dependency crosses policygithub-actions.md
Install gate — HookshotRun guard on every package an agent tries to installexamples/hookshot/
Runtime MCP gateProxy a live MCP server and gate every tool callmcp-proxy
Dependency monitoringRe-vet installed deps and pre-vet upgrades on a schedulerecheck

How it compares

npm audit and OSV-Scanner check for published CVEs, and pkgxray does not replace them. Run it alongside them. The tools in the same lane are Socket.dev, OpenSSF Package Analysis, and Cisco MCP Scanner, which also analyze what package code does. The full capability comparison is in docs/comparison.md and on the website.

Evidence

Historical top-1000 runs and their scope and methodology remain available at pkgxray.ca/stats. Those results predate the parser-based flow engine and have not been rerun for this change. The current engine passes all 270 internal synthetic calibration/challenge fixtures without a malicious SAFE or benign BLOCK; many malicious cases produce REVIEW. This is regression evidence, not a real-world detection-rate estimate.

Documentation

DocWhat it covers
architecture.md · design.mdPipeline, surfaces, principles
threat-model.mdScope, blind spots, prompt-injection stance
mcp.md · mcp-registry.mdMCP vetting, runtime proxy, registry entry
canary-threat-model.mdThe opt-in behavioral canary
configuration.md · reference.md.pkgxray.json, severity policy, recheck, cache server
benchmark.md · comparison.mdCalibration and how it compares
compatibility.md · json-schema.md1.0 contract, --format json schema

Start at the documentation index.

Contributing

npm test                 # zero-dep node --test suite
npm run benchmark        # calibration corpus: precision/recall + 0-false-block gate
npm run validate:website # regenerate + validate the calibration pages

Pull requests are welcome. Read CONTRIBUTING.md and the Code of Conduct first. Report vulnerabilities privately, as SECURITY.md describes. Releases publish to npm with provenance (SLSA attestation), and each one is gated on the tests, the calibration benchmark, and pkgxray's own supply-chain guard.

<div align="center"> <sub>Built by <a href="https://github.com/adamsjack711-ux">Jack Adams-Lovell</a> · <a href="LICENSE">MIT</a> · <a href="https://pkgxray.ca">pkgxray.ca</a></sub> </div>

Related MCP servers

AI infrastructure cartographer & MCP server: fingerprints, graphs & watches live infra for agents

0
Python
Apache-2.0
View repository →

Pin files and websites to IPFS from Claude. x402 USDC payments on Base — no account needed.

View repository →

Reference MCP stdio server for observing Vercel projects and deployments.

0
TypeScript
MIT
View repository →

Query Sonatype Nexus Repository (OSS/Pro) for Maven, Python, and Docker artifacts

1
Python
View repository →

OAuth 2.1 short-link tools for AI agents with scoped tokens, approvals, audit logs, and revocation.

View repository →

Read your team's end-of-day reports and roster from Eodly.

View repository →