Tool

Check package dependencies for known vulnerabilities

CLI and MCP server that checks package versions across npm, PyPI, Cargo, Go, and more for known vulnerabilities, with a block/review/allow recommendation.

Works with npmpypicargomavenrubygems

90
Spark score
out of 100
Updated 6 days ago
Version 0.14.0
Models
universal

Add to Favorites

Why it matters

Prevent AI agents and developers from installing packages with known security vulnerabilities by checking versions against public vulnerability databases (OSV, GitHub Advisory) across 14+ package ecosystems before installation.

Outcomes

What it gets done

01

Query OSV and GitHub Advisory databases to find CVEs and security advisories for exact package versions

02

Recommend block, review, or allow actions based on vulnerability severity (critical/high/medium/low)

03

Suggest the newest safe version when the requested version has known vulnerabilities

04

Compare two package versions to determine if upgrading reduces security risk

Install

Add it to your toolbox

Run in your project directory:

curl -fsSL https://spark.entire.vc/get/clidey-deptrust | bash

Overview

Deptrust

A CLI tool and MCP server that checks a package version across npm, PyPI, Cargo, Go modules, and a dozen other ecosystems against OSV and the GitHub Advisory Database, returning a compact block, review, or allow recommendation so an AI agent can decide whether to install it without pulling full advisory text into context. Use it before an AI agent installs or upgrades a dependency, to catch known vulnerabilities and freshly published, unreviewed releases. A none-found or allow result means no blocking vulnerability was found in public data, not proof the package is safe.

What it does

deptrust is a CLI and MCP server that checks package versions for known vulnerabilities across npm, PyPI, Cargo/crates.io, Go modules, RubyGems, NuGet, Maven, Packagist, pub.dev, CocoaPods, Hex.pm, Hackage, and GitHub Actions. It calls public registry and OSV/GitHub Advisory Database APIs directly, with no hosted deptrust service in the loop, and was built specifically because AI agents keep installing outdated package versions on their own. Every check returns a simple recommendation, block, review, or allow, based on the highest known severity found, plus non-CVE risk signals like a version published in the last 72 hours, which gets flagged for review so an agent doesn't blindly install something brand new.

When to use - and when NOT to

Use it as a gate before an agent, or a human, installs or upgrades a dependency, to catch known critical or high-severity vulnerabilities before they land in a project, or to compare a current and target version to see exactly what vulnerabilities would be added or resolved by upgrading. An allow result means no blocking vulnerability was found in the queried public sources, it is explicitly not proof the package is safe, and coverage varies by ecosystem: CocoaPods has no OSV coverage, Hackage has no GitHub Advisory DB coverage; when deptrust can resolve a package but no configured provider covers its ecosystem, it returns unknown rather than defaulting to safe. When GitHub advisory access is rate-limited or unavailable, the tool returns unknown and expects the agent to offer configuring a token, skip the check, or get explicit user acceptance of the uncertainty, never silently report allow.

Inputs and outputs

deptrust check npm lodash 4.17.20

The CLI accepts an ecosystem, package name, and version (or latest), and prints a short verdict with a risk score; --json returns the full structured response. The check_package MCP tool takes the same ecosystem, package name, and optional version, defaulting to latest, and returns a compact JSON response: safe_to_use, should_install, risk_score, recommendation, vulnerability counts by severity, highest_severity, which providers were checked versus skipped, and a full_response_command to pull complete advisory details only if the agent or user actually needs them. suggest_safe_version checks the latest version first, then provider-reported fixed versions, then older known versions, returning the newest one with an allow recommendation. compare_versions reports vulnerabilities resolved and added between two versions of the same package. Failed HTTP requests retry up to three times with short exponential backoff, and exhausted advisory retries make a result incomplete rather than silently returning allow.

Integrations

Optional GitHub API authentication, DEPTRUST_GITHUB_TOKEN, falling back to GITHUB_TOKEN or GH_TOKEN, or a local gh auth token fallback, raises GitHub Advisory Database and GitHub Actions rate limits; deptrust never stores, caches, logs, or telemeters that token, and sends it only to api.github.com. Installation is guided via npx or pnpx, npx @clidey/deptrust install, Homebrew, brew install clidey/tap/deptrust, a Nix flake, or go install, with the guided installer offering to configure MCP registration, a skill-based fallback, and dependency-safety hooks for Codex and Claude Code automatically, and safely reconciling or updating existing registrations on reinstall. The dependency-safety hooks are PreToolUse hooks that check package install commands, and GitHub Actions added through agent file-edit tools, before they run, blocking the tool call outright when deptrust returns review, block, or unknown.

Who it's for

Developers and AI coding agent workflows that need an automated gate against installing known-vulnerable or suspiciously fresh package versions, across a wide range of language ecosystems, without standing up a hosted vulnerability-scanning service.

Source README

deptrust

     __           __                  __
 ___/ /___  ___  / /________  _______/ /_
/ _  / __ \/ _ \/ __/ ___/ / / / ___/ __/
/  __/ /_/ /  __/ /_/ /  / /_/ (__  ) /_
\__,_/\____/ .___/\__/_/   \__,_/____/\__/
           /_/

deptrust is a CLI that checks package versions for known vulnerabilities across npm, PyPI, crates.io, Go modules, RubyGems, NuGet, Maven, Packagist, pub.dev, CocoaPods, Hex.pm, Hackage, GitHub Actions, and more.

It runs locally as a CLI and as an MCP server. It calls public package registry and OSV APIs directly; there is no hosted deptrust service to trust or configure.

This tool was born out of the frustration that is AI agents constantly using old versions.

Contents

Scope

Supported ecosystems:

  • npm, including scoped packages like @clidey/ux
  • PyPI
  • Cargo / crates.io
  • Go modules
  • RubyGems
  • NuGet
  • Maven, using groupId:artifactId package names
  • Packagist / Composer, using vendor/package package names
  • pub.dev
  • CocoaPods
  • Hex.pm
  • Hackage
  • GitHub Actions, using owner/repo package names and tags, branch refs, or commit SHAs as versions

deptrust currently reports known vulnerabilities and gives a simple recommendation:

Highest known severity Recommendation
critical block
high block
medium / unknown review
low allow
none found allow

allow means no blocking known vulnerability was found in the public data sources. It does not prove that a package is safe.

deptrust also emits risk signals that are not CVEs. For example, a version published in the last 72 hours is marked for review so an agent does not blindly install a brand-new release.

Advisory providers are queried in parallel:

  • OSV
  • GitHub Advisory Database, including reviewed advisories and malware advisories

Provider coverage varies by ecosystem. If deptrust can resolve registry metadata but no configured vulnerability provider supports that ecosystem, it returns unknown instead of treating the package as safe.

Provider coverage:

Ecosystem Registry metadata OSV GitHub Advisory DB
npm yes yes yes
PyPI yes yes yes
Cargo / crates.io yes yes yes
Go modules yes yes yes
RubyGems yes yes yes
NuGet yes yes yes
Maven yes yes yes
Packagist / Composer yes yes yes
pub.dev yes yes yes
CocoaPods yes no yes
Hex.pm yes yes yes
Hackage yes yes no
GitHub Actions yes yes yes

The JSON output includes advisory coverage fields:

  • checked_providers: vulnerability providers deptrust actually queried
  • skipped_providers: configured providers skipped because the ecosystem is unsupported
  • advisory_coverage: full, partial, none, or error
  • advisory_coverage_reason: short explanation for the coverage value
  • registry_verification: verified when registry metadata confirmed the version, or unverified when an exact-version check continued after a transient registry failure
  • registry_verification_reason: the registry error when verification was unavailable

An exact-version check still queries advisory providers when registry verification is temporarily unavailable. That result is always non-installable and never receives an allow recommendation. Checks for latest, unknown packages, and definitively nonexistent versions still require successful registry resolution.

HTTP requests retry 429, 502, 503, and 504 responses up to three total attempts. Retries use short exponential delays and honor Retry-After values up to two seconds; longer server-requested waits fail fast so the CLI does not hang. Exhausted advisory retries make the result incomplete and prevent an allow recommendation.

GitHub API authentication

GitHub Advisory Database and GitHub Actions API requests can use a short-lived, least-privilege GitHub App token. In CI, pass it through DEPTRUST_GITHUB_TOKEN:

DEPTRUST_GITHUB_TOKEN="$GITHUB_APP_TOKEN" deptrust check npm lodash 4.17.20

The credential precedence is DEPTRUST_GITHUB_TOKEN, GITHUB_TOKEN, then GH_TOKEN. For local use, the optional GitHub CLI fallback is enabled explicitly with DEPTRUST_GITHUB_AUTH=gh deptrust check ...; it runs gh auth token without prompting. If no credential is available, DepTrust continues unauthenticated. A GitHub API rate-limit or permission failure produces unknown with diagnostics and is never treated as an OSV-only success.

DepTrust never stores, bundles, caches, logs, telemeters, or emits GitHub tokens. Authentication headers are sent only to https://api.github.com.

CLI Usage

Check an exact version:

deptrust check npm lodash 4.17.20

Example normal response:

npm lodash@4.17.20: 2 known vulnerabilities found
recommendation: block
risk_score: 80

Check the latest version:

deptrust check pypi requests latest

Return JSON:

deptrust check --json cargo serde latest

Check a Go module:

deptrust check go golang.org/x/crypto latest

Check RubyGems, NuGet, or Maven:

deptrust check rubygems rails latest
deptrust check nuget Newtonsoft.Json latest
deptrust check maven org.apache.logging.log4j:log4j-core latest

Check Packagist, pub.dev, CocoaPods, Hex.pm, Hackage, or GitHub Actions:

deptrust check packagist monolog/monolog latest
deptrust check pub http latest
deptrust check cocoapods AFNetworking latest
deptrust check hex plug latest
deptrust check hackage aeson latest
deptrust check github-actions actions/checkout v7.0.0
deptrust check github-actions actions/checkout main

For GitHub Actions, full commit SHAs are treated as pinned. Full semver tags such as v4.2.2 are accepted without an extra pinning signal. Major-only tags such as v4 and branch refs such as main are valid refs, but deptrust adds a review signal because they can move.

Example JSON response:

{
  "ecosystem": "npm",
  "package": "lodash",
  "version": "4.17.20",
  "latest_version": "4.17.21",
  "known_vulnerabilities_found": true,
  "safe_to_use": false,
  "should_install": false,
  "risk_score": 80,
  "recommendation": "block",
  "classification": "vulnerable",
  "reason": "Found 2 known vulnerability records.",
  "next_action": "do_not_install; use suggest_safe_version or compare_versions to choose a safer version",
  "summary": "lodash 4.17.20 has 2 known vulnerabilities, including high severity. Block this exact version and prefer a fixed release.",
  "signals": [],
  "checked_providers": [
    "OSV",
    "GitHub Advisory DB"
  ],
  "skipped_providers": [],
  "advisory_coverage": "full",
  "advisory_coverage_reason": "all configured vulnerability providers were checked",
  "registry_verification": "verified",
  "vulnerabilities": [
    {
      "id": "GHSA-35jh-r3h4-6jhm",
      "aliases": [
        "CVE-2021-23337"
      ],
      "cve_ids": [
        "CVE-2021-23337"
      ],
      "ghsa_ids": [
        "GHSA-35jh-r3h4-6jhm"
      ],
      "summary": "Command Injection in lodash",
      "severity": "high",
      "source": "OSV",
      "advisory_url": "https://github.com/advisories/GHSA-35jh-r3h4-6jhm",
      "affected_ranges": [
        "SEMVER: introduced 0, fixed 4.17.21"
      ],
      "fixed_versions": [
        "4.17.21"
      ],
      "references": [
        {
          "type": "ADVISORY",
          "url": "https://github.com/advisories/GHSA-35jh-r3h4-6jhm"
        }
      ]
    }
  ],
  "provider_errors": []
}

Suggest the latest version only when no known vulnerabilities are found:

deptrust suggest npm lodash

If the latest version is not allowed, suggest checks older known versions and returns the newest version with an allow recommendation.

When advisories include fixed versions, suggest checks those provider-reported fixed versions first before walking back through the registry version list.

Compare two versions:

deptrust compare npm lodash 4.17.20 4.17.21

Example compare response:

lodash 4.17.20 -> 4.17.21 improves risk: score 80 to 0.
recommendation: allow
next_action: upgrade_to_target

Show the installed version:

deptrust version

Install

The easiest install path is npx or pnpx:

npx @clidey/deptrust install
pnpx @clidey/deptrust@latest install

The default installer is guided. It installs the binary, asks which agent integrations to configure, prints the user-level destinations before changing anything, and asks for confirmation. The guided installer defaults to enabling MCP, the skill fallback, and dependency safety hooks for Codex and Claude Code. Add --yes for non-interactive binary-only installs, or pass explicit integration flags.

Rerunning the installer is safe. It silently leaves unchanged MCP, skill, and hook configuration alone. If an integration points at an old deptrust binary or its managed configuration has changed, the installer updates it automatically; users do not need to manually remove and re-add MCP servers. Customized skills are backed up before replacement.

To remove the user-level binary, skill, and MCP entries:

npx @clidey/deptrust uninstall
pnpx @clidey/deptrust@latest uninstall

Homebrew users can install from the Clidey tap:

brew install clidey/tap/deptrust

Or tap first, then install and upgrade as usual:

brew tap clidey/tap
brew install deptrust
brew upgrade deptrust

Homebrew prints a reminder after installation. To run the guided Codex and Claude Code setup using the Homebrew binary itself (MCP registrations and dependency safety hooks):

deptrust setup

The guided setup asks before enabling MCP and dependency safety hooks. It leaves registrations that already use the current binary alone, and reconciles existing DepTrust registrations that point to an older npm, Homebrew, or source-install path.

Go users can install directly:

go install github.com/clidey/deptrust/cmd/deptrust@latest

Nix

The project provides optional Nix flake outputs for users who already use Nix. The flake wraps the prebuilt release binary.

# Run without installing
nix run github:clidey/deptrust

# Install into your profile
nix profile install github:clidey/deptrust

The normal release workflow generates the Nix
hashes from the same archives it publishes, evaluates the flake before
publishing, then builds and runs it against the published assets before updating
the default branch. github:clidey/deptrust may briefly lag while that workflow
is running. Release tags point to the source commit from before the generated
flake update and may still reference the previous binary; pin a commit whose
flake.nix contains the version you need when reproducibility matters.

Devbox

For reproducible development environments, use Devbox:

# Install Devbox first (if not already installed)
curl -fsSL https://get.jetify.dev/devbox | bash

# Initialize the environment
devbox shell

# Build the project
devbox run build

devbox.json constrains the toolchain version and the committed devbox.lock
pins the exact package versions and nixpkgs revisions. Run devbox update when
you intentionally want to refresh those pins.

Or install Devbox via Homebrew:

brew install jetify-com/devbox/devbox

Agent Setup

To install deptrust and register everything the installer can configure without the guided prompts:

npx @clidey/deptrust install --all
pnpx @clidey/deptrust@latest install --all

--all installs the binary, registers Codex MCP when the codex CLI is available, installs the Codex skill fallback, registers Claude Code MCP when the claude CLI is available, and installs the Codex and Claude Code dependency safety hooks.

The hooks are PreToolUse hooks. They check package install commands before they run, and they also check GitHub Actions added to workflow files through agent file-edit tools. A hook blocks the tool call when deptrust returns review, block, or unknown. The installer writes user-level hook config only: ~/.codex/hooks.json for Codex and ~/.claude/settings.json for Claude Code.

When the gh CLI is available, guided setup also offers to use its existing local login for hook checks. This writes only DEPTRUST_GITHUB_AUTH=gh, never a GitHub token, so hook subprocesses can avoid unauthenticated GitHub API rate limits.

Use narrower installs when preferred:

npx @clidey/deptrust install --codex-mcp
npx @clidey/deptrust install --claude-code-mcp
npx @clidey/deptrust skills install
pnpx @clidey/deptrust@latest install --codex-mcp
pnpx @clidey/deptrust@latest install --claude-code-mcp
pnpx @clidey/deptrust@latest skills install

After MCP setup, agents will automatically check packages before recommending updates or changes. The MCP server sends instructions to vet all dependency versions - including answering questions like "what can I update" or "which dependencies are safe to upgrade" - before providing recommendations.

If using deptrust in a non-MCP context, remind your agent:

Before listing, comparing, or recommending specific package versions, check them with deptrust. This includes answering "what can I update" — do not provide version recommendations until after checking for known vulnerabilities.

For CI, configure a short-lived least-privilege GitHub App token as DEPTRUST_GITHUB_TOKEN for the process running DepTrust. For local GitHub CLI authentication, use DEPTRUST_GITHUB_AUTH=gh deptrust check .... DepTrust never stores tokens.

Manual MCP Setup

If your client supports stdio MCP servers, configure it to run:

/absolute/path/to/deptrust mcp

Many clients use this JSON shape:

{
  "mcpServers": {
    "deptrust": {
      "command": "/absolute/path/to/deptrust",
      "args": ["mcp"]
    }
  }
}

For Codex, you can also add it with:

codex mcp add deptrust -- /absolute/path/to/deptrust mcp

For Claude Code:

claude mcp add --transport stdio deptrust -- /absolute/path/to/deptrust mcp

On initialize, the server returns MCP instructions telling the agent when to reach for these tools (before adding, bumping, or recommending a dependency, or when asked whether a version is safe to update). Clients that surface server instructions will apply this automatically, so the manual reminder above is optional rather than required.

MCP Tools

check_package

Checks a package version and returns known vulnerabilities plus a recommendation.

{
  "ecosystem": "npm",
  "package": "lodash",
  "version": "4.17.20"
}

version may be omitted or set to latest. If an exact version does not exist, deptrust returns an error and suggests the latest explicit version.

MCP output is intentionally compact so agents can decide whether to install a dependency without pulling full advisory bodies into context. If the user asks to see full details, the agent can run the full_response_command.

Example compact MCP structured output:

{
  "ecosystem": "npm",
  "package": "vite",
  "version": "7.0.0",
  "latest_version": "8.0.16",
  "known_vulnerabilities_found": true,
  "safe_to_use": false,
  "should_install": false,
  "risk_score": 80,
  "classification": "vulnerable",
  "recommendation": "block",
  "reason": "Found 7 known vulnerability records.",
  "next_action": "do_not_install; use suggest_safe_version or compare_versions to choose a safer version",
  "summary": "vite 7.0.0 has 7 known vulnerabilities, including high severity. Block this exact version and prefer a fixed release.",
  "vulnerability_count": 7,
  "vulnerability_counts": {
    "critical": 0,
    "high": 2,
    "medium": 3,
    "low": 2,
    "unknown": 0
  },
  "highest_severity": "high",
  "checked_providers": [
    "OSV",
    "GitHub Advisory DB"
  ],
  "skipped_providers": [],
  "advisory_coverage": "full",
  "advisory_coverage_reason": "all configured vulnerability providers were checked",
  "registry_verification": "verified",
  "full_response_command": "deptrust check --json npm vite 7.0.0"
}

The compact MCP response omits the vulnerability array, advisory details, and repeated references. Agents should use the counts, highest severity, provider coverage, recommendation, and next action by default. If the user asks for full advisory details, run the full_response_command.

When GitHub advisory access is rate-limited or unavailable, MCP returns unknown. The agent should proactively offer to configure a token and retry, skip or defer the version, or proceed only after the user explicitly accepts the unresolved GitHub coverage risk for that exact version. That exception must remain clearly labeled as user-accepted uncertainty; it must not be reported as allow or as proof that the version is safe.

suggest_safe_version

Checks the latest version first. If latest is not allowed, checks provider-reported fixed versions first, then older known versions, and suggests the newest version with an allow recommendation.

{
  "ecosystem": "npm",
  "package": "lodash"
}

compare_versions

Compares a current version and target version, including resolved and added vulnerabilities.

{
  "ecosystem": "npm",
  "package": "lodash",
  "from_version": "4.17.20",
  "to_version": "4.17.21"
}

Skill-Only Use

If you do not want MCP, install the bundled Codex skill:

npx @clidey/deptrust skills install

The skill tells Codex to call the deptrust CLI before installing, updating, or recommending npm, PyPI, Cargo, Go module, RubyGems, NuGet, Maven, Packagist, pub.dev, CocoaPods, Hex.pm, Hackage, and GitHub Actions packages.

Troubleshooting

If deptrust is not found:

export PATH="$HOME/.local/bin:$PATH"

If an MCP client cannot start the server, find the full path:

which deptrust

Then put that absolute path in the MCP config.

If a package check returns unknown, do not treat the package as safe. It means deptrust could not get a complete answer from an advisory provider or could not verify the exact version with its registry.

FAQ

Common questions

Discussion

Questions & comments · 0

Sign In Sign in to leave a comment.