mcp-lock
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.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 설정이 있는 모든 저장소에 추가하세요. 명시적인 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 memoryAction 입력값:
입력 | 기본값 | 설명 |
| (자동 검색) | MCP 설정 경로 |
|
| 잠금 파일이 없으면 실패 처리 |
| (없음) | 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) |
|
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