MCPShield
模型上下文协议(MCP)服务器的供应链安全工具
MCPShield为MCP服务器提供安全扫描、验证和策略执行,防止供应链攻击,并确保第三方服务器的安全集成。
✅ 状态:MVP完成!
MVP功能齐全,实现了所有核心功能:
- ✅ 锁文件管理 -跟踪已验证的服务器
mcp.lock.json - ✅ 工件验证 -下载并验证npm/PyPI包
- ✅ 安全扫描 -检测拼写错误、可疑代码和漏洞
- ✅ CLI命令 -初始化、搜索、添加、验证、扫描
- ✅ 注册表集成 -从MCP注册表获取并验证服务器
- ✅ 测试覆盖率 -E2E+单元测试通过
快速开始
安装
# Clone the repository
git clone https://github.com/kellyclaudeai/mcpshield.git
cd mcpshield
# Install dependencies
pnpm install
# Build the project
pnpm run build要求: Node.js>=22,pnpm>=10
用法
# 1. Initialize in your project
mcp-shield init
# 2. Find an MCP server (optional)
mcp-shield search context7 --type npm
# 3. Add an MCP server
mcp-shield add io.github.user/server-name
# 4. Verify all servers
mcp-shield verify
# 5. Run security scan
mcp-shield scan不克隆运行:
npx @kellyclaude/mcpshield --help特性
🔒 锁文件管理
在中跟踪您的所有MCP服务器 mcp.lock.json:
{
"version": "1.0.0",
"generatedAt": "2026-02-05T14:30:00.000Z",
"servers": {
"io.github.user/server-name": {
"namespace": "io.github.user/server-name",
"version": "1.0.0",
"verified": true,
"verificationMethod": "github",
"verifiedOwner": "user",
"fetchedAt": "2026-02-05T14:30:00.000Z",
"artifacts": [
{
"type": "npm",
"url": "https://registry.npmjs.org/package/-/package-1.0.0.tgz",
"digest": "sha512-...",
"size": 12345
}
]
}
}
}📦 工件验证
- npm包 -下载并验证SHA-512摘要
- PyPI包 -下载Python包(基本支持)
- Docker镜像 -未来实施的占位符
- 摘要计算 -SHA-256和SHA-512支持
- 漂移检测 -检测工件何时发生变化
🔍 安全扫描
综合安全分析:
- 百草枯检测 -Levenshtein与流行套餐的距离
- 相关性分析 -检查可疑的依赖关系
- 代码模式匹配 -检测
eval(),exec(),网络通话 - 安装脚本分析 -标记可疑的生命周期挂钩
- 风险评分 -0-100风险评分(干净/警告/可疑/恶意)
📋 CLI命令
mcp-shield init
在项目中初始化MCPShield:
mcp-shield init创建:
mcp.lock.json-空锁文件policy.yaml-策略配置模板
mcp-shield search
搜索MCP注册表:
mcp-shield search context7 --type npm选项:
--type-按包装类型筛选(npm|pypi|docker|nuget|mcpb)--limit-最大结果(默认值:20)--cursor-上次搜索的分页光标--all-versions-包括非最新版本
mcp-shield add
添加具有完整验证的MCP服务器:
mcp-shield add io.github.modelcontextprotocol/filesystem工作流程:
- 验证命名空间格式
- 从注册表获取元数据
- 验证命名空间所有权
- 下载工件
- 计算并验证摘要
- 运行安全扫描
- 审批提示
- 增加
mcp.lock.json
选项:
-y, --yes-跳过确认提示
mcp-shield verify
重新验证lockfile中的所有服务器:
mcp-shield verify- 从缓存或注册表下载工件
- 验证摘要是否与锁文件匹配
- 报告检测到的任何漂移
选项:
--fix-如果检测到漂移,请重新下载并更新锁文件摘要
mcp-shield scan
所有服务器的安全扫描:
mcp-shield scan输出:
- 风险评分
- 安全调查结果
- 对每台服务器的判决
- 摘要报告
项目结构
mcpshield/
├── packages/
│ ├── core/ # Core functionality
│ │ ├── src/
│ │ │ ├── types.ts # TypeScript types
│ │ │ ├── registry-client.ts # MCP Registry client
│ │ │ ├── namespace-verifier.ts # Namespace verification
│ │ │ ├── lockfile.ts # Lockfile management
│ │ │ └── artifact-resolver.ts # Download/verify artifacts
│ │ └── test/ # Unit tests
│ ├── cli/ # Command-line interface
│ │ ├── src/
│ │ │ ├── cli.ts # CLI entry point
│ │ │ └── commands/ # Command implementations
│ │ └── package.json
│ └── scanner/ # Security scanning
│ ├── src/
│ │ ├── scanner.ts # Security scanner implementation
│ │ └── types.ts # Scanner types
│ └── package.json
├── test/e2e/ # Integration tests
├── schemas/ # JSON schemas
├── docs/ # Documentation
└── examples/ # Example configs发展
先决条件
- Node.js>=22
- pnpm>=10
构建
# Install dependencies
pnpm install
# Build all packages
pnpm run build
# Watch mode (rebuild on changes)
pnpm run build -- --watch测试
# Run all tests
pnpm test
# Run E2E tests only
pnpm run test:e2e
# Run unit tests only
pnpm run test:unit测试单个组件
# Test registry client
node packages/cli/dist/cli.js test-registry
# Test in a clean directory
mkdir /tmp/mcpshield-test
cd /tmp/mcpshield-test
mcp-shield init
mcp-shield add 建筑
Monorepo结构
MCPShield使用npm工作区进行单仓库管理:
- @kellyclaude/mcpshield核心 -共享类型、注册表客户端、工件解析
- @凯勒克劳德/麦普斯希尔德 -面向用户的命令行工具
- @kellyclaude/mcpshield扫描仪 -安全分析引擎
依赖关系流: cli → scanner → core
类型系统
贯穿始终的强TypeScript类型:
interface LockedServer {
namespace: string;
version: string;
verified: boolean;
verificationMethod?: string;
verifiedOwner?: string | null;
fetchedAt: string;
artifacts?: Artifact[];
}
interface ScanResult {
verdict: 'clean' | 'warning' | 'suspicious' | 'malicious' | 'unknown';
riskScore: number; // 0-100
findings: Finding[];
}安全
验证方法
- GitHub命名空间验证
- 格式: io.github.owner/repo - 通过GitHub API验证存储库所有权
- npm包验证
- 检查npm注册表中的包元数据 - 验证完整性哈希
- 摘要验证
- SHA-512(npm包) - SHA-256(回退/自定义) - Base64编码的子资源完整性格式
威胁模型
MCPShield可防止:
- 域名抢注 -类似的包名称
- 命名空间劫持 -声明其他人的命名空间
- 伪影漂移 -批准后的变更
- 恶意代码 -可疑模式
- 依赖混淆 -恶意依赖
- 供应链攻击 -受损的包裹
路线图
第四阶段:云后端(未来)
- 深度扫描流水线
- 信誉数据库
- 社区报道
- 已验证的发布者程序
第五阶段:运行时保护(未来)
- 代理MCP通信
- 运行时的策略执行
- 工具级权限
- 审核日志记录
贡献
欢迎投稿!需要帮助的领域:
- PyPI支持 -完整Python包扫描
- Docker支持 -OCI图像验证
- 更多扫描仪 -SAST,依赖性检查
- CI集成 -GitHub操作,GitLab CI
- 文档 -示例、教程、指南
许可证
MIT许可证-有关详细信息,请参阅许可证文件
参考文献
______________________________________________________________________
内置于❤️ 对于MCP社区
保护供应链,一次一台服务器。
