mcp-lock
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.lockmcp-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Коды завершения:
Код | Значение |
| Чисто — все серверы соответствуют файлу блокировки |
| Изменено — один или несколько серверов изменились, или файл блокировки был изменен |
| Файл блокировки отсутствует — запустите |
| Ошибка сети / реестра |
| Неверные аргументы |
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 configmcp-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/2026GitHub 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Входные данные действия:
Входной параметр | По умолчанию | Описание |
| (автообнаружение) | Путь к конфигурации MCP |
|
| Провалить, если файл блокировки отсутствует |
| (нет) | Путь для записи отчета 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) |
|
Claude Code |
|
Cursor |
|
VS Code |
|
Windsurf |
|
Amazon Q |
|
Уровень проекта |
|
Чем он отличается от других инструментов
Инструмент | Проверяет 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
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