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 서버의 정확한 버전과 타볼 무결성 해시를 기록하고, 이후 실행 시 변경된 사항이 없는지 검증합니다.


문제점

// 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 서버도 동일한 위험에 직면해 있습니다. 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 패키지로 확인하며, 정확한 버전과 타볼 무결성 해시를 기록합니다.

$ 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 설정이 있는 모든 저장소에 추가하세요. 명시적인 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

Action 입력값:

입력

기본값

설명

config-path

(자동 검색)

MCP 설정 경로

fail-on-missing-lock

true

잠금 파일이 없으면 실패 처리

sarif-output

(없음)

SARIF 보고서를 작성할 경로


잠금 파일(Lockfile)

.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