SteveMonsway/mcp-trust
GitHub: SteveMonsway/mcp-trust
MCP Trust 是一款针对 MCP 服务器的预检安全扫描器,通过静态代码与运行时分析给出基于证据的风险决策。
Stars: 1 | Forks: 0
# MCP Trust
用于 Model Context Protocol (MCP) 服务器的基于证据的预检扫描器。
在你的 AI agent 使用 MCP 服务器之前对其进行检查。
本仓库涵盖 **Phase 0 → Phase 4**:一个可用的 CLI、一个确定性规则
引擎(30 条规则)加上 12 条 Semgrep AST 规则、配置/静态/元数据扫描、真正的
`@modelcontextprotocol/sdk` 内省与 Docker 沙箱(Level 2)、
JSON / Markdown / **HTML** / **SARIF** 报告,配备 **GitHub Action**(Code Scanning + PR 评论),
以及一个针对真实 MCP 服务器的**公开基准测试**(参见 [`docs/benchmark.md`](docs/benchmark.md))。
## 快速开始
从 npm 安装(无需克隆):
```
# 一次性运行,无需安装:
npx @mcp-trust/cli scan github:owner/repo
# 或者全局安装:
npm install -g @mcp-trust/cli
mcp-trust scan github:owner/repo # scan a public GitHub repo
mcp-trust scan npm:@org/mcp-server # scan npm package metadata
mcp-trust scan ./claude_desktop_config.json # scan a local MCP config
mcp-trust scan ./path/to/repo --format json,md,html,sarif
```
**报告输出位置:** 文件将写入 `./reports/.{json,md,html,sarif}`
(使用 `--output ` 更改文件夹)。在浏览器中打开 `.html`,或阅读 `.md`。
当检查结果满足 `--fail-on`(默认为 `high`)时,退出代码为非零,因此它可以作为 CI 门禁。
## GitHub Action
在每个 pull request 上运行 MCP Trust —— 将 SARIF 上传到 Code Scanning,发布
总结评论,并在超过严重性阈值时使作业失败 (TZ §11):
```
name: MCP Trust Scan
on: [pull_request]
jobs:
mcp-trust:
runs-on: ubuntu-latest
permissions:
contents: read
security-events: write # SARIF upload
pull-requests: write # PR comment
steps:
- uses: actions/checkout@v4
- uses: SteveMonsway/mcp-trust/packages/action@v0.5.0 # or @main
with:
fail-on: high # low|medium|high|critical
upload-sarif: true
comment-pr: true
```
输入:`target`(默认:workspace)、`fail-on`、`output`(`sarif,md,json`)、
`upload-sarif`、`comment-pr`、`no-semgrep`。输出:`decision`、`risk`、`score`、
`sarif-file`、`exceeded`。Action 定义:[`packages/action/action.yml`](packages/action/action.yml)。
## 公开基准测试
MCP Trust 提供了一个针对 **452 个真实的公开 MCP 服务器**的可复现基准测试
(JavaScript / TypeScript / Python;`registry-seed/seed-targets.yml`)。最新运行结果:
**32 BLOCK · 91 NEEDS_REVIEW · 112 APPROVE_WITH_RESTRICTIONS · 217 APPROVE**。
```
pnpm scan:seed # clone + static + Semgrep for each seed target
pnpm reports:public # → public-reports/.{md,html} + index.json
```
每个目标都会获得一份 Markdown + 独立 HTML 报告;`public-reports/index.json`
是机器可读的索引(每个目标的 decision / risk / score / findings + 运行
摘要)。**BLOCK 是基于 *runtime* 代码的能力证据,而不是恶意软件判定** ——
测试、示例和构建脚本中的发现严重性受到限制,因此它们不会导致
错误的 BLOCK,而 MCP Trust 无法分析的代码(Go、Rust、……)会被标记上
**⚠️ 限制**说明,因此 APPROVE 绝不会被误读为完全无风险的证明。
**浏览报告:** [`public-reports/index.html`](public-reports/index.html)(可搜索/过滤)或 [`public-reports/`](public-reports/README.md)(按服务器 /
公司名称) · 分析文章:[`docs/benchmark.md`](docs/benchmark.md) · 方法论:
[`docs/blog/mcp-trust-public-benchmark.md`](docs/blog/mcp-trust-public-benchmark.md)。
## MCP Trust 检查内容
- **安装/配置风险** —— 未锁定的 `npx`/`uvx`、`curl | sh`、`sudo`、内联 shell、
内嵌 secret、敏感路径、明文 HTTP endpoint、广泛的 home/root 访问权限。
- **代码风险(regex/AST-lite)** —— `child_process.exec`、`execSync`、`eval`/`Function`、
Python `subprocess(shell=True)`/`os.system`、任意文件写入/删除、secret 环境访问。
- **工具/提示元数据(工具投毒)** —— 指令覆盖、隐藏、
数据外泄和针对系统提示的措辞、隐藏/编码内容。
- **能力映射** —— 推断的 filesystem / shell / network / credential 能力,
来自 runtime 内省(可信 fixtures)或静态推断。
- **供应链** —— 缺失仓库、仓库/包不匹配、安装脚本、
配置中的浮动版本、缺失安全策略。
## MCP Trust **不**做的事情
MCP Trust 是一个**风险评估工具,不能保证**服务器是安全的。它不能
取代代码审查、沙箱隔离、endpoint 安全或供应商风险管理。
设计使然:
- 它**绝不**在沙箱之外执行不受信任的代码。在主机上,runtime
内省**仅**针对受信任的 fixture 路径(`fixtures/mcp/…`、
`examples/…`、`mock-mcp-servers/…`)运行;真正的目标**仅**在 Docker
沙箱(`--sandbox docker`,Level 2)内运行。否则,能力映射将以静态方式构建。
- 覆盖范围如实报告 —— 每份报告都会显示评估过和未评估的内容。
## 评分与决策
单一事实来源位于 `packages/core/src/scoring/thresholds.ts`:
| Score | 风险等级 | Decision |
|---|---|---|
| 0–29 | LOW | APPROVE |
| 30–59 | MEDIUM | APPROVE_WITH_RESTRICTIONS |
| 60–79 | HIGH | NEEDS_REVIEW |
| 80–100 | CRITICAL | BLOCK |
严重性覆盖可以**提高**(绝不会降低)决策 —— 例如,确信的 critical
发现会强制要求 `BLOCK`;`curl | sh` / `sudo` / 内嵌 secret 至少强制要求
`NEEDS_REVIEW`。参见 [docs/scoring.md](docs/scoring.md)。
## 命令
```
mcp-trust scan [--format console,json,md,html,sarif] [--output dir] [--fail-on high] \
[--introspect] [--sandbox docker] [--no-semgrep] [--timeout 30s]
mcp-trust bench scan [--out dir] # scan a seed list of public servers
mcp-trust bench render [--out dir] # render md/html per target + index.json
mcp-trust rules list
mcp-trust explain
mcp-trust version
```
退出代码:`0` ok · `1` 超出阈值 · `2` 扫描器错误 · `3` 目标错误 · `5` 沙箱失败。
## 规则
Phase 1 中实现了 30 条规则。有关完整的目录(已实现 + 计划中),请参见 [docs/rule-catalog.md](docs/rule-catalog.md)
。
## 路线图
以下是简短版本;完整的用户/公司路线图请见 [ROADMAP.md](ROADMAP.md)。
- **Phase 1–4(已完成):** CLI、30+12 条规则、Docker 沙箱、`@modelcontextprotocol/sdk`
内省、JSON/MD/**HTML**/**SARIF**、GitHub Action,以及 452 个服务器的公开基准测试。
- **下一步(免费):** 策略文件(`--policy`)、更多语言的规则、npm 发布。
- **未来(付费,团队版):** 托管 API、控制台、私有/持续扫描、Slack、GitHub App。
## 开发
```
pnpm install
pnpm build # turbo build all packages
pnpm test # vitest (159 tests)
pnpm typecheck # tsc --noEmit across packages
```
## 免责声明
MCP Trust 提供基于证据的风险评估。它不保证服务器是
安全或恶意的。请将结果作为安全审查、沙箱隔离和策略决策的输入。
## License
Apache-2.0。
从源码构建(面向贡献者)
``` pnpm install && pnpm build pnpm --filter @mcp-trust/cli dev scan ./fixtures/repos/js-exec --format json,md,sarif ```标签:GitHub Action, GraphQL安全矩阵, LNA, MCP, MITM代理, 后端开发, 安全扫描器, 请求拦截, 错误基检测, 静态代码分析