
Servidor CLI y MCP que comprueba las versiones de paquetes en busca de vulnerabilidades conocidas en más de 14 ecosistemas, incluidos npm, PyPI, crates.io, módulos de Go y GitHub Actions. Se integra con agentes de IA mediante hooks y skills.
__ __ __
___/ /___ ___ / /________ _______/ /_
/ _ / __ \/ _ \/ __/ ___/ / / / ___/ __/
/ __/ /_/ / __/ /_/ / / /_/ (__ ) /_
\__,_/\____/ .___/\__/_/ \__,_/____/\__/
/_/
deptrust es una CLI que comprueba las versiones de paquetes en busca de vulnerabilidades conocidas en npm, PyPI, crates.io, módulos de Go, RubyGems, NuGet, Maven, Packagist, pub.dev, CocoaPods, Hex.pm, Hackage, GitHub Actions y más.
Funciona localmente como CLI y como servidor MCP. Llama directamente a las APIs públicas de los registros de paquetes y a las de OSV; no hay ningún servicio de deptrust alojado en el que confiar o que configurar.
Esta herramienta nació de la frustración que supone que los agentes de IA utilicen constantemente versiones antiguas.
Ecosistemas compatibles:
@clidey/uxgroupId:artifactIdvendor/packageowner/repo y etiquetas, referencias de rama o SHAs de commit como versionesdeptrust actualmente informa de vulnerabilidades conocidas y ofrece una recomendación sencilla:
| Severidad máxima conocida | Recomendación |
|---|---|
| critical | block |
| high | block |
| medium / unknown | review |
| low | allow |
allow significa que no se encontró ninguna vulnerabilidad conocida bloqueante en las fuentes de datos públicas. No demuestra que un paquete sea seguro.
deptrust también emite señales de riesgo que no son CVEs. Por ejemplo, una versión publicada en las últimas 72 horas se marca para revisión para que un agente no instale a ciegas una versión recién publicada.
Los proveedores de avisos se consultan en paralelo:
La cobertura de proveedores varía según el ecosistema. Si deptrust puede resolver los metadatos del registro pero ningún proveedor de vulnerabilidades configurado es compatible con ese ecosistema, devuelve unknown en lugar de tratar el paquete como seguro.
Cobertura de proveedores:
La salida JSON incluye campos de cobertura de avisos:
checked_providers: los proveedores de vulnerabilidades que deptrust consultó realmenteskipped_providers: los proveedores configurados que se omitieron porque el ecosistema no es compatibleadvisory_coverage: full, partial, none o erroradvisory_coverage_reason: una breve explicación del valor de coberturaregistry_verification: verified cuando los metadatos del registro confirmaron la versión, o unverified cuando una comprobación de versión exacta continuó tras un fallo transitorio del registroregistry_verification_reason: el error del registro cuando la verificación no estuvo disponibleUna comprobación de versión exacta sigue consultando a los proveedores de avisos cuando la verificación del registro no está disponible temporalmente. Ese resultado siempre es no instalable y nunca recibe una recomendación allow. Las comprobaciones de latest, paquetes desconocidos y versiones definitivamente inexistentes siguen requiriendo una resolución satisfactoria del registro.
Las solicitudes HTTP reintentan las respuestas 429, 502, 503 y 504 hasta un máximo de tres intentos. Los reintentos usan breves retardos exponenciales y respetan los valores Retry-After de hasta dos segundos; las esperas más largas solicitadas por el servidor fallan rápidamente para que la CLI no se cuelgue. El agotamiento de los reintentos de avisos hace que el resultado sea incompleto e impide una recomendación allow.
Las solicitudes a la API de GitHub Advisory Database y de GitHub Actions pueden usar un token de GitHub App de corta duración y con privilegios mínimos. En CI, pásalo a través de DEPTRUST_GITHUB_TOKEN:
DEPTRUST_GITHUB_TOKEN="$GITHUB_APP_TOKEN" deptrust check npm lodash 4.17.20
La precedencia de credenciales es DEPTRUST_GITHUB_TOKEN, GITHUB_TOKEN y luego GH_TOKEN. Para uso local, el respaldo opcional de GitHub CLI se habilita explícitamente con DEPTRUST_GITHUB_AUTH=gh deptrust check ...; ejecuta gh auth token sin preguntar. Si no hay ninguna credencial disponible, DepTrust continúa sin autenticación. Un fallo por límite de tasa o por permisos de la API de GitHub produce unknown con diagnósticos y nunca se trata como un éxito solo con OSV.
DepTrust nunca almacena, empaqueta, guarda en caché, registra, hace telemetría ni emite tokens de GitHub. Las cabeceras de autenticación solo se envían a https://api.github.com.
Comprueba una versión exacta:
deptrust check npm lodash 4.17.20
Ejemplo de respuesta normal:
npm [email protected]: 2 known vulnerabilities found
recommendation: block
risk_score: 80
Comprueba la última versión:
deptrust check pypi requests latest
Devuelve JSON:
deptrust check --json cargo serde latest
Comprueba un módulo de Go:
deptrust check go golang.org/x/crypto latest
Comprueba RubyGems, NuGet o Maven:
deptrust check rubygems rails latest
deptrust check nuget Newtonsoft.Json latest
deptrust check maven org.apache.logging.log4j:log4j-core latest
Comprueba Packagist, pub.dev, CocoaPods, Hex.pm, Hackage o 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
Para GitHub Actions, los SHAs de commit completos se tratan como fijados (pinned). Las etiquetas semver completas como v4.2.2 se aceptan sin una señal adicional de fijación. Las etiquetas solo con versión mayor como v4 y las referencias de rama como main son refs válidas, pero deptrust añade una señal de revisión porque pueden moverse.
Ejemplo de respuesta JSON:
{
"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": []
}
Sugiere la última versión solo cuando no se encuentran vulnerabilidades conocidas:
deptrust suggest npm lodash
Si la última versión no está permitida, suggest comprueba las versiones anteriores conocidas y devuelve la versión más reciente con una recomendación allow.
Cuando los avisos incluyen versiones corregidas, suggest comprueba primero esas versiones corregidas notificadas por el proveedor antes de recorrer hacia atrás la lista de versiones del registro.
Compara dos versiones:
deptrust compare npm lodash 4.17.20 4.17.21
Ejemplo de respuesta de comparación:
lodash 4.17.20 -> 4.17.21 improves risk: score 80 to 0.
recommendation: allow
next_action: upgrade_to_target
Muestra la versión instalada:
deptrust version
La vía de instalación más sencilla es npx o pnpx:
npx @clidey/deptrust install
pnpx @clidey/deptrust@latest install
El instalador predeterminado es guiado. Instala el binario, pregunta qué integraciones de agentes configurar, imprime los destinos a nivel de usuario antes de cambiar nada y pide confirmación. El instalador guiado habilita por defecto MCP, el respaldo de skill y los hooks de seguridad de dependencias para Codex y Claude Code. Añade --yes para instalaciones no interactivas solo del binario, o pasa indicadores de integración explícitos.
Volver a ejecutar el instalador es seguro. Deja intacta la configuración de MCP, skill y hooks sin cambios. Si una integración apunta a un binario antiguo de deptrust o su configuración gestionada ha cambiado, el instalador la actualiza automáticamente; los usuarios no necesitan eliminar y volver a añadir manualmente los servidores MCP. Las skills personalizadas se respaldan antes de reemplazarse.
Para eliminar el binario, la skill y las entradas MCP a nivel de usuario:
npx @clidey/deptrust uninstall
pnpx @clidey/deptrust@latest uninstall
Los usuarios de Homebrew pueden instalar desde el tap de Clidey:
brew install clidey/tap/deptrust
O añadir el tap primero y luego instalar y actualizar como es habitual:
brew tap clidey/tap
brew install deptrust
brew upgrade deptrust
Homebrew muestra un recordatorio después de la instalación. Para ejecutar la configuración guiada de Codex y Claude Code usando el propio binario de Homebrew (registros MCP y hooks de seguridad de dependencias):
deptrust setup
La configuración guiada pregunta antes de habilitar MCP y los hooks de seguridad de dependencias. Deja intactos los registros que ya usan el binario actual y reconcilia los registros existentes de DepTrust que apuntan a una ruta de instalación anterior de npm, Homebrew o desde el código fuente.
Los usuarios de Go pueden instalar directamente:
go install github.com/clidey/deptrust/cmd/deptrust@latest
El proyecto ofrece salidas opcionales de Nix flake para usuarios que ya usan Nix. El flake envuelve el binario de la versión precompilada.
# Run without installing
nix run github:clidey/deptrust
# Install into your profile
nix profile install github:clidey/deptrust
El flujo de trabajo de publicación normal genera los hashes de Nix a partir de los mismos archivos que publica, evalúa el flake antes de publicar, luego lo compila y lo ejecuta contra los activos publicados antes de actualizar la rama predeterminada. github:clidey/deptrust puede ir con un pequeño retraso mientras ese flujo de trabajo se está ejecutando. Las etiquetas de publicación apuntan al commit de origen anterior a la actualización generada del flake y pueden seguir referenciando el binario anterior; fija un commit cuyo flake.nix contenga la versión que necesitas cuando la reproducibilidad sea importante.
Para entornos de desarrollo reproducibles, usa 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 restringe la versión de la cadena de herramientas y el devbox.lock confirmado fija las versiones exactas de los paquetes y las revisiones de nixpkgs. Ejecuta devbox update cuando quieras actualizar intencionadamente esas fijaciones.
O instala Devbox mediante Homebrew:
brew install jetify-com/devbox/devbox
Para instalar deptrust y registrar todo lo que el instalador puede configurar sin las indicaciones guiadas:
npx @clidey/deptrust install --all
pnpx @clidey/deptrust@latest install --all
--all instala el binario, registra Codex MCP cuando la CLI codex está disponible, instala el respaldo de skill de Codex, registra Claude Code MCP cuando la CLI claude está disponible e instala los hooks de seguridad de dependencias de Codex y Claude Code.
Los hooks son hooks PreToolUse. Comprueban los comandos de instalación de paquetes antes de que se ejecuten y también comprueban las GitHub Actions añadidas a los archivos de flujo de trabajo mediante las herramientas de edición de archivos del agente. Un hook bloquea la llamada a la herramienta cuando deptrust devuelve review, block o unknown. El instalador solo escribe configuración de hooks a nivel de usuario: ~/.codex/hooks.json para Codex y ~/.claude/settings.json para Claude Code.
Cuando la CLI gh está disponible, la configuración guiada también ofrece usar su inicio de sesión local existente para las comprobaciones de los hooks. Esto escribe solo DEPTRUST_GITHUB_AUTH=gh, nunca un token de GitHub, para que los subprocesos de los hooks puedan evitar los límites de tasa de la API de GitHub sin autenticación.
Usa instalaciones más reducidas si lo prefieres:
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
Después de la configuración de MCP, los agentes comprobarán automáticamente los paquetes antes de recomendar actualizaciones o cambios. El servidor MCP envía instrucciones para examinar todas las versiones de dependencias —incluido responder a preguntas como "¿qué puedo actualizar?" o "qué dependencias son seguras de actualizar"— antes de ofrecer recomendaciones.
Si usas deptrust en un contexto sin MCP, recuerda a tu agente:
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.
Para CI, configura un token de GitHub App de corta duración y con privilegios mínimos como DEPTRUST_GITHUB_TOKEN para el proceso que ejecuta DepTrust. Para la autenticación local con la CLI de GitHub, usa DEPTRUST_GITHUB_AUTH=gh deptrust check .... DepTrust nunca almacena tokens.
Si tu cliente admite servidores MCP por stdio, configúralo para que ejecute:
/absolute/path/to/deptrust mcp
Muchos clientes usan esta forma JSON:
{
"mcpServers": {
"deptrust": {
"command": "/absolute/path/to/deptrust",
"args": ["mcp"]
}
}
}
Para Codex, también puedes añadirlo con:
codex mcp add deptrust -- /absolute/path/to/deptrust mcp
Para Claude Code:
claude mcp add --transport stdio deptrust -- /absolute/path/to/deptrust mcp
En initialize, el servidor devuelve instructions de MCP que indican al agente cuándo recurrir a estas herramientas (antes de añadir, actualizar o recomendar una dependencia, o cuando se le pregunte si una versión es segura de actualizar). Los clientes que muestran las instrucciones del servidor aplicarán esto automáticamente, por lo que el recordatorio manual anterior es opcional en lugar de obligatorio.
check_packageComprueba una versión de paquete y devuelve las vulnerabilidades conocidas más una recomendación.
{
"ecosystem": "npm",
"package": "lodash",
"version": "4.17.20"
}
version puede omitirse o establecerse a latest. Si una versión exacta no existe, deptrust devuelve un error y sugiere la última versión explícita.
La salida de MCP es intencionadamente compacta para que los agentes puedan decidir si instalar una dependencia sin incluir los cuerpos completos de los avisos en el contexto. Si el usuario pide ver todos los detalles, el agente puede ejecutar full_response_command.
Ejemplo de salida estructurada compacta de MCP:
{
"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"
}
La respuesta compacta de MCP omite el array de vulnerabilidades, los details de los avisos y las references repetidas. Los agentes deben usar por defecto los recuentos, la severidad más alta, la cobertura de proveedores, la recomendación y la siguiente acción. Si el usuario pide los detalles completos del aviso, ejecuta full_response_command.
Cuando el acceso a los avisos de GitHub está limitado por tasa o no está disponible, MCP devuelve unknown. El agente debe ofrecer proactivamente configurar un token y reintentar, omitir o aplazar la versión, o continuar solo después de que el usuario acepte explícitamente el riesgo de cobertura de GitHub no resuelto para esa versión exacta. Esa excepción debe seguir claramente etiquetada como incertidumbre aceptada por el usuario; no debe informarse como allow ni como prueba de que la versión es segura.
suggest_safe_versionComprueba primero la última versión. Si la última no está permitida, comprueba primero las versiones corregidas notificadas por el proveedor, luego las versiones anteriores conocidas, y sugiere la versión más reciente con una recomendación allow.
{
"ecosystem": "npm",
"package": "lodash"
}
compare_versionsCompara una versión actual y una versión objetivo, incluidas las vulnerabilidades resueltas y añadidas.
{
"ecosystem": "npm",
"package": "lodash",
"from_version": "4.17.20",
"to_version": "4.17.21"
}
Si no quieres MCP, instala la skill de Codex incluida:
npx @clidey/deptrust skills install
La skill indica a Codex que llame a la CLI deptrust antes de instalar, actualizar o recomendar paquetes de npm, PyPI, Cargo, módulos de Go, RubyGems, NuGet, Maven, Packagist, pub.dev, CocoaPods, Hex.pm, Hackage y GitHub Actions.
Si no se encuentra deptrust:
export PATH="$HOME/.local/bin:$PATH"
Si un cliente MCP no puede iniciar el servidor, encuentra la ruta completa:
which deptrust
Luego pon esa ruta absoluta en la configuración de MCP.
Si una comprobación de paquete devuelve unknown, no trates el paquete como seguro. Significa que deptrust no pudo obtener una respuesta completa de un proveedor de avisos o no pudo verificar la versión exacta con su registro.
| none found |
| allow |
| Ecosistema | Metadatos del registro | OSV | GitHub Advisory DB |
|---|
| npm | sí | sí | sí |
| PyPI | sí | sí | sí |
| Cargo / crates.io | sí | sí | sí |
| Módulos de Go | sí | sí | sí |
| RubyGems | sí | sí | sí |
| NuGet | sí | sí | sí |
| Maven | sí | sí | sí |
| Packagist / Composer | sí | sí | sí |
| pub.dev | sí | sí | sí |
| CocoaPods | sí | no | sí |
| Hex.pm | sí | sí | sí |
| Hackage | sí | sí | no |
| GitHub Actions | sí | sí | sí |