Skip to main content
Glama
mcpguards

mcp-lock

by mcpguards

mcp-lock

npm ci para tus servidores MCP.

Cada vez que tu herramienta de codificación por IA se inicia, npx -y @scope/mcp-server descarga 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-lock soluciona 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 verify

Eso 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.lock

mcp-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.lock

Códigos de salida:

Código

Significado

0

Limpio: todos los servidores coinciden con el archivo de bloqueo

1

Cambiado: uno o más servidores cambiaron, o el archivo de bloqueo fue manipulado

2

Falta el archivo de bloqueo: ejecuta mcp-lock init

3

Error de red / registro

4

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.lock

Opciones:

--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 config

mcp-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/2026

GitHub 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.sarif

Los 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 memory

Entradas de la acción:

Entrada

Predeterminado

Descripción

config-path

(auto-descubrimiento)

Ruta a la configuración de MCP

fail-on-missing-lock

true

Fallar si no existe un archivo de bloqueo

sarif-output

(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)

~/Library/Application Support/Claude/claude_desktop_config.json

Claude Code

~/.claude/settings.json

Cursor

~/.cursor/mcp.json

VS Code

~/Library/Application Support/Code/User/settings.json

Windsurf

~/.codeium/windsurf/mcp_config.json

Amazon Q

~/.aws/amazonq/mcp.json

Nivel de proyecto

.mcp.json en el directorio actual


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

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    A
    maintenance
    Scans 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.
    19
    MIT
  • A
    license
    A
    quality
    D
    maintenance
    The 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.
    4
    60 npm
    2
    MIT
  • A
    license
    Not graded
    quality
    C
    maintenance
    MCP server that vets package installations and shell commands to block dangerous actions by AI coding agents.
    7 npm
    1
    MIT
  • A
    license
    Not graded
    quality
    D
    maintenance
    An account-free MCP server that checks AI-written changes before they are committed, detecting nonexistent packages, dependency risk shapes, and hardcoded secrets.
    MIT