Skip to main content
Glama
mcpguards

mcp-lock

by mcpguards

mcp-lock

npm ci для ваших MCP-серверов.

Каждый раз, когда запускается ваш ИИ-инструмент для программирования, npx -y @scope/mcp-server молча загружает последнюю версию каждого MCP-сервера. Никакой фиксации версии. Никакой проверки хеша. Никаких записей о том, что запускалось вчера.

mcp-lock исправляет это. Он записывает точную версию и хеш целостности архива каждого MCP-сервера при первом запуске и проверяет, что ничего не изменилось при каждом последующем запуске.


Проблема

// Your .mcp.json — right now
{
  "mcpServers": {
    "filesystem": {
      "command": "npx",
      "args": ["-y", "@modelcontextprotocol/server-filesystem"]
      //        ^^^
      //        Downloads whatever is latest. Every. Single. Time.
    }
  }
}

Атака на цепочку поставок axios в марте 2026 года скомпрометировала минорное обновление версии (1.14.1). Все, кто использовал ^1.14.0, молча обновились автоматически. Вредоносное ПО сработало до того, как кто-либо заметил.

MCP-серверы сталкиваются с идентичным риском. Это npm-пакеты. Они работают с вашими учетными данными. Они получают доступ к вашей файловой системе и API. И ни один существующий сканер не отслеживает, является ли пакет, который вы запускаете сегодня, тем же самым, который вы проверяли на прошлой неделе.


Related MCP server: mcp-shield

Установка и быстрый старт

# 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

Это всё. Если пакет изменится между запусками, вы узнаете об этом до того, как его запустит ваш ИИ-агент.


Команды

mcp-lock init

Обнаруживает все конфигурации MCP на вашем компьютере, сопоставляет каждый сервер с его npm-пакетом, записывает точную версию + хеш целостности архива.

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

Опции:

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

Сравнивает установленные пакеты с файлом блокировки (lockfile). Завершается с кодом 1, если что-то изменилось.

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

Опции:

--sarif <path>    Write SARIF 2.1.0 report for GitHub Security tab
--json            Output as JSON
--global          Check against ~/.mcp.lock

Коды завершения:

Код

Значение

0

Чисто — все серверы соответствуют файлу блокировки

1

Изменено — один или несколько серверов изменились, или файл блокировки был изменен

2

Файл блокировки отсутствует — запустите mcp-lock init

3

Ошибка сети / реестра

4

Неверные аргументы


mcp-lock update <server>

Показывает, что именно изменилось, запрашивает подтверждение, обновляет файл блокировки.

$ 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

Опции:

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

Показывает все заблокированные серверы.

$ 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

Добавьте в любой репозиторий, имеющий конфигурацию .mcp.json. Проваливает PR, если сервер был изменен без явного вызова 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

Результаты появляются на вкладке Security → Code Scanning:

mcp-lock: server 'memory' integrity changed
  The tarball integrity hash changed since last lock.
  Run: mcp-lock update memory

Входные данные действия:

Входной параметр

По умолчанию

Описание

config-path

(автообнаружение)

Путь к конфигурации MCP

fail-on-missing-lock

true

Провалить, если файл блокировки отсутствует

sarif-output

(нет)

Путь для записи отчета SARIF


Файл блокировки

.mcp.lock — это JSON-файл, который вы фиксируете в своем репозитории. Он записывает:

{
  "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..."
}

Поле checksum — это SHA-256 всего содержимого файла блокировки (канонический JSON, отсортированные ключи). Если файл будет отредактирован вручную без запуска mcp-lock update, verify обнаружит это.


Поддерживаемые MCP-клиенты

Автоматически обнаруживаются на вашем компьютере:

Клиент

Путь к конфигурации

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

Уровень проекта

.mcp.json в текущей директории


Чем он отличается от других инструментов

Инструмент

Проверяет npm-пакеты

Хеш целостности

Обнаруживает изменения версий

SBOM

Файл блокировки

Snyk Agent Scan

❌

❌

❌

❌

❌

Cisco mcp-scanner

❌

❌

❌

❌

❌

MCPWatch

❌

❌

❌

❌

❌

mcp-lock

✅

✅

✅

✅

✅

Другие инструменты сканируют описания инструментов и конфигурации на предмет инъекций промптов. mcp-lock рассматривает MCP-серверы как артефакты цепочки поставок программного обеспечения и применяет проверку целостности пакетов — тот же подход, который использует npm ci.


Требования

  • Node.js >= 18.3.0

  • Работает с Claude Code, Cursor, VS Code Copilot, Windsurf, Amazon Q и любым инструментом, использующим спецификацию MCP


Лицензия

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