
Pre-install security for AI agents, npm packages, and MCP servers. Zero-dep local static analysis; normal scans never execute package code.
Inspect an npm package or MCP server before you install or connect to it, and
get a deterministic, evidence-backed SAFE, REVIEW, or BLOCK verdict.
Local, zero-dependency static analysis — normal scans never execute package code.
Website · Documentation · Calibration · Report a bug
Real runs: guard clears [email protected], then blocks a sample modeled on the 2024 @solana/web3.js compromise.
1. Quick start · 2. What it scans & detects · 3. Verdicts · 4. Usage · 5. Integrations · 6. How it compares · 7. Documentation
AI coding assistants install packages and connect to MCP servers at machine
speed, often without a human reading the code. Sonatype identified more than
454,600 new malicious open-source packages across monitored ecosystems in
2025, over 99% of them on npm
(Sonatype).
npm audit asks does this have a known CVE?; pkgxray also asks what does the
code actually do — before anything installs.
1. Scan a known-benign package (no install of pkgxray needed):
npx --yes [email protected] guard npm:[email protected]
It stages the tarball in quarantine and runs the static and supply-chain checks
— no npm install, no lifecycle scripts, no package code executed.
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)
2. Read the verdict:
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 [email protected] --file examples/onboarding-malicious.json --format markdown
The fixture is inert source text modeling 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
guardandauditscans are static — package code is never executed. Enumerating an MCP server may spawn it andmcp-proxyruns it behind a gate; the opt-incanaryis the one deliberate exception that executes the package in a sandbox to confirm behavior — it can confirm malice but never prove a package safe. Full boundary: SECURITY.md.
Scans — pkgxray guard npm:name@version, github:owner/repo, a local
directory, whole lockfiles (npm, yarn, pnpm), 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),
obfuscated computed-arg execution, known CVEs (via OSV, before
download), npm↔GitHub artifact divergence, trojaned updates (recheck), and MCP
capability-surface abuse.
The full coverage matrix — and the known download-later blind spot — is in the threat model; a side-by-side comparison table is on the website.
| Verdict | You should |
|---|---|
SAFE | Install. Only safe promotes out of quarantine by default. |
REVIEW | Inspect the quarantined copy before promoting. |
BLOCK | Do not install. Every finding names the file and evidence. |
Exit codes are stable and CI-friendly: 0 safe/allow · 2 block ·
3 review.
pkgxray guard npm:[email protected] [--format json] # vet a package before install
pkgxray mcp --package npm:[email protected] npx some-mcp-server # vet an MCP server; --recheck catches the rug-pull
pkgxray audit package-lock.json [--deep] # also: yarn.lock, pnpm-lock.yaml, package.json
pkgxray recheck package-lock.json # scheduled: non-zero only on a regression
One optional .pkgxray.json (read by every surface) tunes policy; zero config
means maximum strictness. CVEs can never be allowed away, every loosening is
printed, and a scan that errors fails closed to review. Schema and invariants:
configuration.md · .pkgxray.example.json.
One engine behind every entry point. "Works with" means a documented setup guide, not a vendor-endorsed integration.
Run pkgxray alongside npm audit / OSV-Scanner, not instead of them — they
answer "known CVE?". Against tools in the same lane (behavioral supply-chain
vetting — Socket.dev, OpenSSF Package Analysis, Cisco MCP Scanner), the full
capability comparison is in docs/comparison.md and on the
website.
The zero-heuristic-false-block calibration on the top-1000 most-downloaded packages is regression-gated in CI (scope & methodology), and the published runs live at pkgxray.ca/stats. That claim is scoped to the most-installed set — not a claim of zero false blocks on every package.
Start at the documentation index.
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. Report vulnerabilities privately per SECURITY.md. Releases publish to npm with provenance (SLSA attestation), gated on tests, the calibration benchmark, and pkgxray's own supply-chain guard.
| Verdict | Exit | Meaning |
|---|
SAFE | 0 | No high- or medium-risk indicators; default policy permits promotion. |
REVIEW | 3 | Evidence is incomplete or a privileged capability needs human review. |
BLOCK | 2 | High-severity cited evidence — reject or investigate. |
| Where | What it does | Guide |
|---|
| Coding agents — Codex, Claude Code, Cursor, Windsurf | Gate installs and expose the audit tools to the agent | coding-agents.md |
| MCP clients | Vet a server before connect; run pkgxray itself as an MCP server | mcp.md |
| GitHub Actions / CI | Fail a build when a dependency crosses policy | github-actions.md |
| Install gate — Hookshot | Run guard on every package an agent tries to install | examples/hookshot/ |
| Runtime MCP gate | Proxy a live MCP server and gate every tool call | mcp-proxy |
| Dependency monitoring | Re-vet installed deps and pre-vet upgrades on a schedule | recheck |
| Doc | What it covers |
|---|
| architecture.md · design.md | Pipeline, surfaces, principles |
| threat-model.md | Scope, blind spots, prompt-injection stance |
| mcp.md · mcp-registry.md | MCP vetting, runtime proxy, registry entry |
| canary-threat-model.md | The opt-in behavioral canary |
| configuration.md · reference.md | .pkgxray.json, severity policy, recheck, cache server |
| benchmark.md · comparison.md | Calibration and how it compares |
| compatibility.md · json-schema.md | 1.0 contract, --format json schema |