mcp-lock
mcp-lock
MCPサーバーのための npm ci
AIコーディングツールが起動するたびに、
npx -y @scope/mcp-serverはすべてのMCPサーバーの最新バージョンをサイレントにダウンロードします。バージョン固定も、ハッシュチェックも、昨日何が実行されたかの記録もありません。
mcp-lockはこれを解決します。初回実行時にすべてのMCPサーバーの正確なバージョンとtarball整合性ハッシュを記録し、それ以降の実行で何も変更されていないことを検証します。
問題点
// Your .mcp.json — right now
{
"mcpServers": {
"filesystem": {
"command": "npx",
"args": ["-y", "@modelcontextprotocol/server-filesystem"]
// ^^^
// Downloads whatever is latest. Every. Single. Time.
}
}
}2026年3月のaxiosサプライチェーン攻撃では、マイナーバージョンアップ(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以上です。実行間でパッケージが変更された場合、AIエージェントが実行される前にそれを知ることができます。
コマンド
mcp-lock init
マシン上のすべてのMCP設定を検出し、各サーバーをnpmパッケージに解決し、正確なバージョンと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.オプション:
--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
インストールされているパッケージをロックファイルと比較します。変更があれば 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終了コード:
コード | 意味 |
| クリーン — すべてのサーバーがロックファイルと一致 |
| 変更あり — 1つ以上のサーバーが変更されたか、ロックファイルが改ざんされた |
| ロックファイルが見つからない — |
| ネットワーク / レジストリエラー |
| 無効な引数 |
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 設定を持つリポジトリに追加します。明示的な mcp-lock update なしにサーバーが変更された場合、PRを失敗させます:
# .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 フィールドは、ロックファイルの内容全体(正規化されたJSON、ソートされたキー)のSHA-256ハッシュです。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