Skip to main content
Glama
mcpguards

mcp-lock

by mcpguards

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

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

終了コード:

コード

意味

0

クリーン — すべてのサーバーがロックファイルと一致

1

変更あり — 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 設定を持つリポジトリに追加します。明示的な 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

アクションの入力:

入力

デフォルト

説明

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 フィールドは、ロックファイルの内容全体(正規化されたJSON、ソートされたキー)のSHA-256ハッシュです。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