vet-mcp
Enables scanning of container images for vulnerabilities and malicious packages, supporting both remote registry images and local image tarballs.
Integrates with GitHub repositories for scanning dependencies and enforcing security policies. Provides OpenSSF Scorecard integration for repository security assessment.
Provides security scanning for GitHub Actions workflows with zero-config security guardrails against vulnerabilities and malicious packages in CI/CD pipelines.
Offers enterprise-grade scanning through GitLab CI components to detect security vulnerabilities and enforce policy compliance in GitLab CI/CD pipelines.
Scans npm packages for vulnerabilities and malicious code, detecting security issues in JavaScript/Node.js dependencies.
Analyzes PHP dependencies for vulnerabilities and malicious code within PHP projects.
Analyzes Python packages from PyPI for vulnerabilities and malicious code, supporting requirements.txt and wheel files.
Scans Ruby packages and Gemfile.lock files for vulnerabilities and security issues in Ruby dependencies.
Provides vulnerability and malicious package detection for Rust crates and dependencies.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@vet-mcpscan my project for malicious packages"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Install • Docs • Commands • Policy • Discord
This branch is vet v2, in alpha. vet v1 is onmain
and stays the latest release. The v2.0.0 release notes map each
v1 command and flag to v2.
Why vet
Your dependencies, your GitHub Actions workflows and your AI agent configs run code that you did not write. vet finds the risk in them.
Malicious packages. vet checks each package against SafeDep Threat Intel. Threat Intel analyzes new package versions when the registries publish them.
Known vulnerabilities, with the fixed version to upgrade to.
Risky workflows. Dangerous triggers, template injection, exposed secrets and actions with no pinned commit SHA.
Lockfile tampering and fresh versions. Entries from an untrusted registry, and versions inside the cooldown window.
Policy as code. Rules in CEL decide when a scan fails. You can test a rule on a saved scan.
AI and crypto inventory. vet lists the AI libraries and the crypto algorithms that your code calls, and writes a CycloneDX xBOM and CBOM.
vet needs no account and sends no source code.
Related MCP server: npm-guardian
Quick start
brew install --cask safedep/tap/vet@edge
vet scanvet scan --fail-on high # exit 1 on a high or critical finding
vet scan --base-ref origin/main --fail-on high # report only what a pull request changes
vet report show --report sarif=vet.sarif # write SARIF from the saved scan, with no new scanInstall
Channel | Command |
Homebrew |
|
mise |
|
Go |
|
Container |
|
mise installs a release one day after its publication. install.md has the command for the newest build, the release binaries and the build attestations.
What vet scans
Target | Example |
A directory (the default) |
|
A git repository |
|
A container image |
|
An SBOM (CycloneDX or SPDX) |
|
One package |
|
The tools on this machine |
|
vet reads the lockfiles and manifests of npm, PyPI, Go, Maven, Gradle, Cargo, RubyGems, NuGet, Packagist, Pub and more. It also reads the GitHub Actions workflows and the AI agent configs of the target. It does not install or run any of them. Controls turn this data into findings. See controls.md.
Policy
A policy decides when a scan fails. Save this file as vet-policy.yml:
version: 2
rules:
- id: no-malware
description: A malicious or suspicious package fails the build.
when: finding.family == "malware"
action: fail
- id: no-workflow-injection
when: finding.control_id in ["dangerous-trigger", "template-injection"]
action: fail
- id: no-critical-vulnerability
when: finding.control_id == "vulnerability" && finding.severity == "critical"
action: fail
- id: new-dependency-age
description: A pull request cannot add a version that is less than 14 days old.
when: package.change == "ADDED" && has(package.days_since_publish) && package.days_since_publish < 14
action: fail
suppressions:
- purl: pkg:npm/lodash@4.17.20
reason: The upgrade to 4.18.1 is in pull request 42.
expires: 2026-12-31Test it on the last scan, with no new scan. Then apply it to a pull request:
vet report show last --policy vet-policy.yml
vet scan --base-ref origin/main --policy vet-policy.ymlAfter its expiry date, the suppression no longer hides the finding. Read policy.md for the rule fields, more rules and the Agent Skill that writes a policy for you.
Use cases
Pull request check. The vet GitHub Action comments on a pull request that adds a package, a workflow or a finding, and fails the check on an attack.
vet ci initadds it to a repository.CI gate. Exit codes, SARIF for GitHub code scanning, GitLab and Bitbucket reports. See ci.md.
Pull request review.
--base-refreports only the packages and workflows that a change adds.xBOM and CBOM. A CycloneDX 1.7 inventory of the AI libraries and the crypto that your code uses. See inventory.md.
AI agents. vet finds Claude Code and other agents, and then writes JSON and never prompts.
Endpoint audit.
vet endpoint auditlists the AI tools, MCP servers, editor extensions and global npm packages on a developer machine, and checks them for malware.
Documentation
Page | Read it for |
All channels and how to verify a release | |
Every command, its flags and its exit codes | |
The controls and their options | |
Rules, suppressions and the gate | |
Report formats, saved scans and configuration | |
GitHub Actions, GitLab, Bitbucket and agent mode | |
Code usage, AI and crypto, xBOM and CBOM |
Privacy
vet sends the identity of each package (its ecosystem, name and version) to SafeDep to get the data about it. vet sends no source code and no file content.
Community
Ask questions and share ideas on Discord or in GitHub Discussions.
Report a bug in the issue tracker.
Read the contributing guide before you open a pull request.
vet also runs in the cloud. SafeDep Cloud runs vet on your repositories, with no infrastructure to manage.
This server cannot be deployed
Maintenance
Related MCP Connectors
Audit GitHub repos for malicious and supply-chain code before you depend on them.
Check packages for CVEs, slopsquatting, and CISA KEV before your AI agent installs them.
Protects AI coding agents from installing malicious open source packages. Every npm and PyPI package is checked against SafeDep’s real-time threat intelligence before installation.
Supply chain risk scoring for npm, PyPI, Cargo, and Go. 9 tools. Behavioral signals.
Related MCP Servers
- AlicenseAqualityCmaintenanceSupply chain risk scoring for npm, PyPI, and GitHub repos841 npm8MIT
- AlicenseNot gradedqualityCmaintenanceAudits npm packages for supply-chain attacks (typosquatting, malicious install scripts, credential exfiltration) before installation, returning a SAFE/SUSPICIOUS/DANGEROUS verdict.MIT
- AlicenseNot gradedqualityDmaintenanceAudits your package-lock.json for supply-chain attacks before install. Cross-checks every resolved entry against the live npm registry to detect integrity mismatches, new install scripts, and other malicious signals.MIT
- AlicenseAqualityFmaintenanceDependency security & health auditing for AI agents with no account or API key required.22MIT