mcp-lock
mcp-lock
npm ci para tus servidores MCP.
Cada vez que tu herramienta de codificación por IA se inicia,
npx -y @scope/mcp-serverdescarga silenciosamente la última versión de cada servidor MCP. Sin fijación de versión. Sin comprobación de hash. Sin registro de lo que se ejecutó ayer.
mcp-locksoluciona esto. Registra la versión exacta y el hash de integridad del tarball de cada servidor MCP en la primera ejecución, y verifica que nada haya cambiado en cada ejecución posterior.
El problema
// Your .mcp.json — right now
{
"mcpServers": {
"filesystem": {
"command": "npx",
"args": ["-y", "@modelcontextprotocol/server-filesystem"]
// ^^^
// Downloads whatever is latest. Every. Single. Time.
}
}
}El ataque a la cadena de suministro de axios de marzo de 2026 comprometió una actualización de versión menor (1.14.1). Todos los que usaban ^1.14.0 se actualizaron automáticamente de forma silenciosa. El malware se ejecutó antes de que nadie se diera cuenta.
Los servidores MCP enfrentan un riesgo idéntico. Son paquetes npm. Se ejecutan con tus credenciales. Acceden a tu sistema de archivos y a tus API. Y ningún escáner existente rastrea si el paquete que estás ejecutando hoy es el mismo que revisaste la semana pasada.
Related MCP server: mcp-shield
Instalación y inicio rápido
# 1. Lock all your MCP servers (one time)
npx @mcpguards/mcp-lock init
# 2. Commit the lockfile
git add .mcp.lock && git commit -m "chore: add mcp-lock lockfile"
# 3. Verify on every CI run (exits 1 if anything changed)
npx @mcpguards/mcp-lock verifyEso es todo. Si un paquete cambia entre ejecuciones, lo sabrás antes de que tu agente de IA lo ejecute.
Comandos
mcp-lock init
Descubre todas las configuraciones de MCP en tu máquina, resuelve cada servidor a su paquete npm y registra la versión exacta + el hash de integridad del tarball.
$ mcp-lock init
Found 4 server(s) across 2 config(s)
✔ filesystem 2026.1.1 sha512-xK3z… ✔ attestation
✔ github 2026.1.1 sha512-9mRq… ✔ attestation
✔ memory 2025.11.18 sha512-pL2t… ○ no attestation
~ python-server pypi registry — not lockable
─────────────────────────────────────────────────────────────────
3 locked 1 skipped
✔ Lockfile written to .mcp.lock
Tip: Run with --pin to add version pins to your MCP configs.Opciones:
--config <path> Scan a specific config file
--pin Rewrite configs to add @version pins
--force Overwrite existing lockfile
--global Write to ~/.mcp.lockmcp-lock verify
Compara tus paquetes instalados con el archivo de bloqueo (lockfile). Devuelve 1 si algo ha cambiado.
$ mcp-lock verify
mcp-lock .mcp.lock
────────────────────────────────────────────────────────────────
✔ filesystem
✔ github
⚠ memory INTEGRITY-CHANGED
integrity sha512-pL2t… → sha512-XXXX…
version 2025.11.18 → 2025.11.19
ACTION REQUIRED: Run `mcp-lock update memory` after manual review.
────────────────────────────────────────────────────────────────
2 clean 1 changed 0 skipped
✖ 1 server(s) changed since last lock.
Run 'mcp-lock update <server>' to review and accept changes.Opciones:
--sarif <path> Write SARIF 2.1.0 report for GitHub Security tab
--json Output as JSON
--global Check against ~/.mcp.lockCódigos de salida:
Código | Significado |
| Limpio: todos los servidores coinciden con el archivo de bloqueo |
| Cambiado: uno o más servidores cambiaron, o el archivo de bloqueo fue manipulado |
| Falta el archivo de bloqueo: ejecuta |
| Error de red / registro |
| Argumentos no válidos |
mcp-lock update <server>
Muestra exactamente qué cambió, solicita confirmación y actualiza el archivo de bloqueo.
$ mcp-lock update memory
memory
version 2025.11.18 → 2025.11.19
integrity sha512-pL2t… →
sha512-XXXX…
Accept update for memory? [y/N] y
✔ Updated 1 server(s) in .mcp.lockOpciones:
--all Update all servers
--to <version> Update to a specific version
--yes Skip confirmation prompt (for CI)
--pin Also update version pin in the MCP configmcp-lock list
Muestra todos los servidores bloqueados.
$ mcp-lock list
mcp-lock list scope: project
────────────────────────────────────────────────────────────────
✔ filesystem @modelcontextprotocol/server-filesystem 2026.1.1
✔ github @modelcontextprotocol/server-github 2026.1.1
○ memory @modelcontextprotocol/server-memory 2025.11.18
────────────────────────────────────────────────────────────────
3 servers generated 4/16/2026GitHub Action
Añádelo a cualquier repositorio que tenga una configuración .mcp.json. Hace fallar la PR si un servidor cambió sin una actualización explícita de mcp-lock update:
# .github/workflows/mcp-lock.yml
name: MCP Lock
on: [push, pull_request]
jobs:
verify:
runs-on: ubuntu-latest
permissions:
contents: read
security-events: write # for SARIF upload
steps:
- uses: actions/checkout@v4
- uses: mcpguards/mcp-lock@v0.1.1
with:
sarif-output: mcp-lock.sarif
- uses: github/codeql-action/upload-sarif@v3
if: always()
with:
sarif_file: mcp-lock.sarifLos hallazgos aparecen en la pestaña Security → Code Scanning:
mcp-lock: server 'memory' integrity changed
The tarball integrity hash changed since last lock.
Run: mcp-lock update memoryEntradas de la acción:
Entrada | Predeterminado | Descripción |
| (auto-descubrimiento) | Ruta a la configuración de MCP |
|
| Fallar si no existe un archivo de bloqueo |
| (ninguno) | Ruta para escribir el informe SARIF |
El archivo de bloqueo (lockfile)
.mcp.lock es un archivo JSON que confirmas en tu repositorio. Registra:
{
"lockfileVersion": 1,
"generatedBy": "mcp-lock@0.1.0",
"generatedAt": "2026-04-16T12:00:00.000Z",
"scope": "project",
"servers": {
"filesystem": {
"source": {
"command": "npx",
"args": ["-y", "@modelcontextprotocol/server-filesystem"],
"configPath": "/abs/path/.mcp.json"
},
"resolved": {
"registry": "npm",
"name": "@modelcontextprotocol/server-filesystem",
"version": "2026.4.10",
"tarball": "https://registry.npmjs.org/...tgz",
"integrity": "sha512-AbC...==",
"shasum": "a1b2c3...",
"publishedAt": "2026-04-10T09:12:33.000Z"
},
"attestation": {
"present": true,
"predicateTypes": ["https://slsa.dev/provenance/v1"]
},
"lockedAt": "2026-04-16T12:00:00.000Z"
}
},
"checksum": "sha256-9f86d081..."
}El campo checksum es un SHA-256 de todo el contenido del archivo de bloqueo (JSON canónico, claves ordenadas). Si el archivo se edita manualmente sin ejecutar mcp-lock update, verify lo detectará.
Clientes MCP compatibles
Auto-descubiertos en tu máquina:
Cliente | Ruta de configuración |
Claude Desktop (macOS) |
|
Claude Code |
|
Cursor |
|
VS Code |
|
Windsurf |
|
Amazon Q |
|
Nivel de proyecto |
|
En qué se diferencia de otras herramientas
Herramienta | Comprueba paquetes npm | Hash de integridad | Detecta cambios de versión | SBOM | Lockfile |
Snyk Agent Scan | ❌ | ❌ | ❌ | ❌ | ❌ |
Cisco mcp-scanner | ❌ | ❌ | ❌ | ❌ | ❌ |
MCPWatch | ❌ | ❌ | ❌ | ❌ | ❌ |
mcp-lock | ✅ | ✅ | ✅ | ✅ | ✅ |
Las otras escanean descripciones de herramientas y configuraciones en busca de inyección de prompts. mcp-lock trata a los servidores MCP como artefactos de la cadena de suministro de software y aplica la verificación de integridad de paquetes, el mismo enfoque que utiliza npm ci.
Requisitos
Node.js >= 18.3.0
Funciona con Claude Code, Cursor, VS Code Copilot, Windsurf, Amazon Q y cualquier herramienta que utilice la especificación MCP
Licencia
MIT © Vamshidhar Reddy Parupally
This server cannot be deployed
Maintenance
Related MCP Connectors
Scan any MCP server for tool-poisoning, security, auth & license. Trust score before install.
Cloud-hosted MCP server for durable AI memory
Pre-flight MCP security. Blocks compromised deps + tool drift. HMAC-signed. Dredd judges.
Security scanner for MCP servers. Detect vulnerabilities, prompt injection, and tool poisoning.
Related MCP Servers
- AlicenseNot gradedqualityAmaintenanceScans MCP servers for prompt injection, supply chain attacks, excessive permissions, and code execution risks. Includes an offline blacklist that catches known-compromised packages like LiteLLM 1.82.7/1.82.8 and Trivy with zero latency.19MIT
- AlicenseAqualityDmaintenanceThe MCP ecosystem is growing fast. Not every server on npm is safe. mcp-shield lets Claude audit any MCP server — local or from npm — before you trust it with your files, keys, and context.460 npm2MIT
- AlicenseNot gradedqualityCmaintenanceMCP server that vets package installations and shell commands to block dangerous actions by AI coding agents.7 npm1MIT
- AlicenseNot gradedqualityDmaintenanceAn account-free MCP server that checks AI-written changes before they are committed, detecting nonexistent packages, dependency risk shapes, and hardcoded secrets.MIT