illiahaidar/mcptrustchecker

GitHub: illiahaidar/mcptrustchecker

一款针对 Model Context Protocol 服务器的本地确定性安全扫描器,通过深度分析发布源码检测工具投毒与毒性数据流并给出信任评级。

Stars: 79 | Forks: 3

# 🛡️ MCP Trust Checker ### 本地优先、确定性的 MCP 服务器安全扫描器 **在将 Model Context Protocol 服务器连接到您的数据*之前*,了解它是否安全。** [![License: MIT](https://img.shields.io/badge/License-MIT-blue.svg)](LICENSE) [![Node](https://img.shields.io/badge/node-%E2%89%A520-3c873a.svg)](package.json) [![Methodology](https://img.shields.io/badge/methodology-mcptrustchecker--1.0-6f42c1.svg)](docs/methodology.md) [![Tests](https://img.shields.io/badge/tests-294%20passing-brightgreen.svg)](test) [![Rules](https://img.shields.io/badge/rules-78-orange.svg)](docs/rules.md) [![No account](https://img.shields.io/badge/account-not%20required-brightgreen.svg)](#why-this-is-different) [![Offline](https://img.shields.io/badge/runs-100%25%20offline-brightgreen.svg)](#why-this-is-different)
MCP Trust Checker terminal output: an MCP server graded D with a detected toxic-flow trifecta
``` npx mcptrustchecker # 🔍 scan every MCP server you already have installed — zero config ``` · 离线 · 确定性 · 无需账号 · 针对受保护服务器的 OAuth 浏览器登录 · 读取真实发布的 npm/PyPI 源码 · 一个新颖的核心 ·
## 算法的独特之处 **Capability-Flow Trust Model**(方法 `mcptrustchecker-1.0`)是由 [Illia Haidar](https://github.com/illiahaidar) **为该项目从零开始设计的原创算法** —— 它不是任何现有扫描器或方法的包装器或衍生品。它拥有专属命名、版本控制,在 [docs/methodology.md](docs/methodology.md) 中有完整规范,并可通过 [CITATION.cff](CITATION.cff) 进行引用。 MCP Trust Checker 评估 MCP 服务器的方式与**攻击者**的推理方式一致 —— 它不是一堆 regex 匹配结果的集合,而是一个 **Capability-Flow Trust Model**。每个工具都被还原为其在实际中可能扮演的角色 —— *不可信输入入口 (untrusted-input ingress)*、*敏感数据源 (sensitive-data source)*、*外部/执行接收器 (external / exec sink)* —— 这些角色是从行为中推导出来的,**绝不**依据服务器自身的(可被攻击者控制的)注解。这些角色被连接到一个**跨工具毒性流图 (cross-tool toxic-flow graph)** 中,用于追踪*致命三角 (lethal trifecta)*:即不可信内容、私有数据和数据外传路径在一个 agent 会话中共存的时刻 —— 无论是在单个工具内部,还是跨越多个工具与客户端内置功能组合而成。这正是现实世界中 MCP 数据外传漏洞背后的具体形态,而 MCP Trust Checker **以静态方式**证明了该原语的存在,并通过可靠的置信度划分确保:单工具完成读取为 `confirmed`,而跨工具组合读取为 `strong` —— 绝不夸大其词。 在这个图谱之下还有三个特性: - **解码,而非剥离。** Unicode Tags-block 和变体选择器 (variation-selector) 负载会被*恢复并作为证据打印给您*,因此隐藏的“读取 `~/.ssh/id_rsa` 并密送给攻击者”会变成可见的文本,而不是一个隐形的标记。 - **内置 Rug-pull 完整性验证。** 规范化接口被哈希并锁定;工具定义在批准后的任何突变都会触发带有单工具差异对比的 `confirmed` 发现。 - **0–100 Trust Score 的每一分都是可审计、确定性的惩罚向量** —— 固定的严重性权重、置信度乘数、边际递减效应、按类别的分数上限以及最薄弱环节门限。完全可重构,每次运行结果一致,无人可以作弊。**闭环中无 LLM,无遥测,无需账号。** **跳转至:** [为何与众不同](#why-this-is-different) · [快速开始](#quick-start) · [算法](#the-algorithm-the-capability-flow-trust-model) · [覆盖范围](#coverage-the-full-catalog-of-mcp-attack-techniques) · [评分](#the-trust-score-is-auditable-by-construction) · [作为库嵌入](#embed-the-exact-same-engine-marketplaces--platforms) · [CI / GitHub](#ci--github-integration) · [规则](docs/rules.md) ## 数百万 MCP 用户无法回答的那个问题 MCP 服务器向 AI 助手提供了一组*工具*。这些工具描述由模型读取,而不是由您读取 —— 这是隐藏指令的绝佳位置。一个能够*读取文件*并*发起 HTTP 请求*的服务器就已经是一种数据外传武器了。而且一个服务器在第一天看起来可能毫无害处,然后在您批准后悄悄重新定义其工具。MCP Trust Checker 将所有这一切转化为您可以据以行动的透明字母评级。 ``` ╭────────────╮ │ GRADE D │ Trust Score 69/100 ╰────────────╯ methodology mcptrustchecker-1.0 Toxic flows (untrusted-input → sensitive-source → external-sink) [critical] The three trifecta roles are co-present across tools; a prompt-injected agent can chain them. ``` ## 为何与众不同 MCP Trust Checker 的利器是**准确性 + 可解释性 + 隐私性**,并带有一个真正新颖的核心 —— 跨工具毒性流图。以下所有特性都集中在一个单一的离线二进制文件中 —— 无需账号,闭环中无 LLM,无遥测: - 🔒 **默认离线** —— 无需账号、token、API key 或托管服务;您的数据永远不会离开本机。 - 🔐 **扫描受保护的远程服务器** —— `--login` 运行完整的 **OAuth 2.0 浏览器登录**流程(discovery → dynamic client registration → PKCE → token),因此它可以审计受身份验证保护的远程 MCP endpoint,而不仅仅是公开的端点 —— 这是大多数扫描器做不到的。(或者传入静态的 `--header "Authorization: Bearer …"`。)Token 仅在扫描期间保留在内存中。 - 🎯 **确定性** —— 相同的输入 ⇒ 每次运行、每台机器上的评分在字节上完全一致。 - 🕸️ **跨工具毒性流图** —— 静态证明跨越工具组合的致命三角,而不仅仅是在单个工具内。 - 🔬 **审查代码,而不仅仅是声明** —— 它根据实现*所做的事情*进行评级(eval / shell-spawn / 硬编码的出口流量 / 凭据读取 / 混淆的 payload),因此有毒的服务器无法躲在看似老实的工具描述背后。在一次确定性的扫描中同时覆盖元数据**和**实现。 - 📥 **深度扫描实际发布的包** —— `scan --online` 获取 npm/PyPI 制品,根据 registry 声明的哈希值对其进行验证,并在 `npx`/`pip` 将要安装的确切字节上运行完整的源码分析引擎 —— **在内存中进行,无需安装或执行任何操作**。也可以直接扫描打包的 release 制品:`scan ./server.tgz`, `.whl`, `.zip`。 - 🧬 **字节级 Rug-pull 检测** —— 经过验证的制品的 SHA-256 被锁定在 lockfile 中;如果*相同版本*被重新发布且字节不同,重新扫描将引发 `critical`、`confirmed` 级别的发现 (`MTC-TOFU-002`) —— 这是一种工具接口保持不变即可躲避所有仅针对元数据的检查的攻击。 - 🔎 **解码,而非剥离** —— 隐藏的 Unicode 负载(Tags block / 变体选择器)会被恢复并作为证据展示。 - 📌 **Rug-pull 完整性** —— 完整的工具接口被哈希并锁定;批准后的任何漂移都会触发带有按工具差异对比的 `confirmed` 级别发现。 - 🧾 **可审计的 Trust Score** —— 每一分都是已发布、可重现的惩罚向量。 - ⚙️ **SARIF + GitHub Action + CI 门限** —— 开箱即用的机器可读输出和通过/失败阈值。 - 📦 **可嵌入的库** —— 应用市场可以在站内复用的相同、带版本号的引擎。 - 🪶 **MIT 许可证,纯数据规则** —— 每一条规则都是透明的,且欢迎贡献。 ## 经过测量的准确率 大多数扫描器*声称*自己的误报率很低。而这个工具是**测量**出来的。一个由恶意和良性 MCP 服务器组成的标注语料库位于 [`benchmark/`](benchmark/);`npm run benchmark` 会对其进行评分并报告数据(如果发生回归则会导致 CI 失败): | 指标 | 分数 | | --- | :---: | | Precision | **100%** | | Recall | **100%** | | F1 | **100%** | | 误报率 | **0%** | *(64 个已标注服务器,标记了留出的测试用例;“令人担忧” := Trust 评级为 C 或更低。使用 `npm run benchmark` 复现。)* 该语料库是诚实且带版本控制的 —— 它随着每次校准案例而增长,并且 CI 门限保持 Precision/Recall ≥ 90%。 ## 安装 ``` npx mcptrustchecker scan ./tools.json # zero-install npm i -g mcptrustchecker # CLI everywhere npm i mcptrustchecker # embed the engine in your app ``` 需要 Node ≥ 20。实时扫描使用官方的 [`@modelcontextprotocol/sdk`](https://www.npmjs.com/package/@modelcontextprotocol/sdk)。 ## 快速开始 **零配置 —— 一条命令,扫描您已安装的所有内容:** ``` npx mcptrustchecker # auto-discovers Claude Desktop/Code, Cursor, Windsurf, Continue, VS Code configs ``` **或者指向任何目标:** ``` mcptrustchecker scan ./tools.json # an offline manifest (deterministic) mcptrustchecker scan ./path/to/mcp-server # a local package dir — analyzes the CODE too mcptrustchecker scan --command "npx -y @some/mcp-server" # a local stdio server (sandboxed) mcptrustchecker scan https://mcp.example.com/mcp # a live HTTP/SSE endpoint mcptrustchecker scan https://mcp.example.com/mcp --login # an OAuth-protected endpoint (browser sign-in) mcptrustchecker scan https://mcp.example.com/mcp --header "Authorization: Bearer " # static auth mcptrustchecker scan @modelcontextprotocol/server-filesystem --online # fetches + verifies + reads the PUBLISHED source mcptrustchecker scan mcp-server-fetch --online --registry pypi # same for PyPI (sdist/wheel) mcptrustchecker scan ./server-1.2.0.tgz # a packed release artifact (.tgz/.whl/.zip) — offline ``` **输出与 CI 门限:** ``` mcptrustchecker scan ./tools.json --sarif > mcptrustchecker.sarif # GitHub code scanning mcptrustchecker scan ./tools.json --md > report.md # PR comment mcptrustchecker scan ./tools.json --json > report.json # machine-readable mcptrustchecker scan ./tools.json --badge > badge.json # shields.io endpoint mcptrustchecker scan ./tools.json --fail-under 80 # exit 1 below a threshold mcptrustchecker scan ./tools.json --min-grade B # exit 1 below a grade ``` 终端报告**默认显示详细信息** —— 每个发现都会打印其完整描述(问题**是什么**以及**为什么**重要)、确切位置、违规的**证据**、**修复方案**及其 OWASP 映射,并按最严重的优先顺序分组。添加 `--details` 可查看外部参考,或者使用 `--quiet` 仅输出评级行。 ## 算法:Capability-Flow Trust Model 在**规范化的、传输无关的接口**(工具、prompts、resources、服务器指令、transport、包元数据)上运行的 9 阶段流水线。每个阶段都会发出发现结果;评分器会将它们转化为可审计的评级。 ``` INPUT ─ manifest.json │ live stdio/http │ client config │ package name │ ▼ [0] SAFE ACQUISITION allow-listed command (bare-name only) · scrubbed env · timeouts · SSRF guard ▼ [1] UNICODE INTEGRITY decode Tags/variation-selector payloads; BiDi; zero-width; homoglyph; ANSI ▼ [2] INJECTION HEURISTICS tool-poisoning · line-jumping · shadowing · secrecy · exfil · embedded secrets ▼ [3] CAPABILITY EXTRACTION tag tools (untrusted-input / sensitive-source / sink / exec / write); │ annotation mismatch; sampling/elicitation; schema injection preconditions ▼ [4] TOXIC-FLOW GRAPH ★ the lethal trifecta across tools AND client built-ins; + name-collision ▼ [5] SUPPLY-CHAIN typosquat/combosquat/homoglyph · install-scripts · provenance · unpinned · deps ▼ [6] TRANSPORT POSTURE stdio-RCE · plaintext HTTP · 0.0.0.0 · DNS-rebinding · known-CVE version matcher ▼ [7] RUG-PULL INTEGRITY SHA-256 pin of the full schema → diff on every rescan ▼ [8] SCORING deterministic penalties · diminishing returns · category caps · hard gates ▼ OUTPUT ─ terminal │ JSON │ SARIF 2.1.0 │ Markdown │ badge ``` **★ 旗舰功能 —— 跨工具毒性流分析。** 最危险的 MCP 故障不是单个糟糕的工具;而是一个看似无害的*组合*。给一个 agent 提供 (1) 暴露于**不可信内容**,(2) 访问**敏感数据**,以及 (3) 一种**与外部通信**的方式,您就拥有了一个数据外传原语。MCP Trust Checker 从行为中(而不是从其自我声明、可被攻击者控制的 `annotations` 中)推导出每个工具的角色,并检查这三者是否在每个工具、每个服务器以及可选的客户端自身内置功能 (`--include-builtins`) 之间是共同可达的。一个工具包含全部三者 → **critical, confirmed**;角色分布在多个工具中 → **critical, strong**。 完整深度解析:**[docs/methodology.md](docs/methodology.md)**。 ## 覆盖范围:MCP 攻击技术全目录 MCP Trust Checker 在一次离线扫描中涵盖了已知 MCP 攻击技术的完整目录 —— 从工具污染和 Unicode 走私到供应链风险和跨工具毒性流 —— 此外还在此基础上提供了流图、解码器、完整性锁定和可审计的评分。★ 标记表示该检查超越了静态扫描器通常能捕获的范围。
📋 完整的 技术到规则 覆盖映射图 (37 种技术 —— 点击展开)
| 攻击 / 技术 | MCP Trust Checker 规则 | | --- | --- | | 工具污染(描述中的隐藏指令) | `MTC-INJ-AUTH-*`, `MTC-INJ-SECRECY-*`, `MTC-INJ-TARGET-*`, `MTC-INJ-POISON` | | Prompt 注入 / 指令覆盖 | `MTC-INJ-AUTH-2`, `MTC-INJ-SECRECY-1` | | Line jumping (预调用植入) | `MTC-INJ-SEQ-1` | | 通过描述重定向进行工具影子化 | `MTC-INJ-SHADOW-1` | | 跨**服务器**的工具名称冲突 / 同形异义名 | `MTC-INJ-SHADOW-2` ★ | | 工具选择排序操纵 | `MTC-INJ-SHADOW-3` ★ | | 不可见-Unicode 通道(零宽/BiDi/Tags/VS) | `MTC-UNI-001..008` (已解码) ★ | | 同形异义 / 混合脚本 | `MTC-UNI-009` | | ANSI 终端转义欺骗 | `MTC-UNI-010` ★ | | 编码负载走私(base64 + 解码) | `MTC-INJ-ENC-1/2` | | 文本中的 Shell/命令注入字符串 | `MTC-INJ-CMD-1`, `MTC-CAP-001` | | 命令/代码执行能力 | `MTC-CAP-001` | | 文件系统变异能力 | `MTC-CAP-002` | | 注解欺骗(readOnly/destructive 谎言) | `MTC-CAP-003` | | openWorldHint + 敏感读取(致命三角信号) | `MTC-CAP-004` ★ | | **毒性流分析 / 致命三角** | `MTC-FLOW-001..005` ★ | | 命令注入接收器先决条件 (schema) | `MTC-CAP-006` ★ | | SSRF 云元数据接收器先决条件 (schema) | `MTC-CAP-007` ★ | | 路径遍历先决条件 (schema) | `MTC-CAP-008` ★ | | Sampling 能力滥用 | `MTC-CAP-009` ★ (静态代理) | | Elicitation 滥用 / 同意钓鱼 | `MTC-CAP-010` ★ (静态代理) | | Rug pull / 静默的工具定义突变 | `MTC-TOFU-001` + lockfile | | 未锁定 / @latest 自动更新(Rug-pull 的促成因素) | `MTC-SUP-013` ★ | | Typosquat / combosquat / 同形异义抢注 | `MTC-SUP-001..006` | | 安装脚本 / 来源风险 | `MTC-SUP-010/011/012` | | 依赖抢注 / 漏洞通报匹配 | `MTC-SUP-014` ★ | | 已知 CVE 版本匹配 | `MTC-NET-001` | | stdio-RCE(未列入白名单的命令) | `MTC-NET-002` + 沙箱化获取 | | 明文 HTTP / 0.0.0.0 绑定 | `MTC-NET-003/004` | | Localhost transport 上的 DNS 重绑定 | `MTC-NET-006` ★ | | 元数据中嵌入的凭据值 | `MTC-INJ-SECRET-1` ★ | | 空/畸形的接口 ≠ 干净 | `MTC-META-001` ★ | | 跨 MCP 客户端的配置发现 | 客户端配置解析器 + 零配置自动发现 | | 工具元数据中的恶意 URL / 数据外传 endpoint | `MTC-INJ-URL-1` ★ | | **实现级接收器** —— eval / shell-spawn / 硬编码的出口流量 / 反序列化 | `MTC-SRC-001…007` ★ | | 服务器代码中的凭据路径读取 / 环境变量导出 | `MTC-SRC-006` ★ | | 服务器源码中硬编码的密钥(不仅仅是元数据) | `MTC-SRC-008` ★ |
**刻意排除在范围之外**(为了信守确定性、离线、无账号的承诺):LLM-as-judge 语义分类、托管型威胁情报、运行时防护*代理*、实时的身份验证/重放/签名探测以及 OAuth endpoint 源码分析。对于只有运行时才能发现的类别,如果存在静态代理 —— 即*声明的* sampling/elicitation 能力、*无限制的* URL/命令/路径参数 —— MCP Trust Checker 会离线标记出该先决条件。 完整列表:**[docs/rules.md](docs/rules.md)** · 运行 `mcptrustchecker rules`。 ## 两个轴线:Trust(评级)和 Capability(影响范围) 一个单一的数字无法回答“我应该使用这个服务器吗?” —— 因为**“强大”和“恶意”是不同的问题。** 一个合法的网络爬虫确实需要获取不可信的页面并对其进行操作;这是一个很大的*影响范围*,而不是它是恶意行为者的证据。因此,MCP Trust Checker 会报告两件独立的事情: - **Trust —— A–F 评级。** 由*威胁*信号驱动:带有隐藏行为的 prompt 注入、嵌入的密钥、Unicode 走私、typosquatting、已知 CVE、rug-pull 漂移、注解谎言、构建为数据外传原语的单个工具。回答**“是否有迹象表明该服务器是恶意或疏忽的?”** - **Capability —— 级别(Minimal → Critical)。** 由服务器*能做什么*驱动:代码执行、文件系统写入、网络出口、跨工具毒性流接口。回答**“如果驱动它的模型被操纵,会造成多大的破坏?”** —— 这是一个用于衡量访问权限的事实,**而不是**针对该服务器的扣分项。 ``` firecrawl Trust B (81/100) Capability CRITICAL → trustworthy, but huge blast radius — grant carefully poisoned Trust F Capability HIGH → actual malice signals — avoid memory Trust A (100) Capability MINIMAL → safe and low-power ``` 这就是为什么 MCP Trust Checker 不会将每个功能强大的服务器都评为“F”(这会使评级变得毫无意义)。受欢迎程度永远不是输入因素 —— 受欢迎的包也会被攻破 —— 但一个合法且功能强大的服务器会保持较高的 Trust 评级,同时其 Capability 会被如实呈现出来。 ## Trust 评级在构建上就是可审计的 ``` TrustScore = clamp( 100 − Σ_categories min(CategoryCap, Σ penalty), 0, 100 ) penalty = severity_weight × confidence_multiplier × diminishing_factor (threat findings only) ``` | 严重性 | 权重 | | 置信度 | × | | --- | ---: | --- | --- | ---: | | Critical | 45 | | Confirmed | 1.0 | | High | 22 | | Strong | 0.7 | | Medium | 9 | | Heuristic | 0.4 | | Low | 3 | | Speculative | 0.2 | - **边际递减效应** (`1 · ½ · ¼ · …`),因此 40 个同一种挑剔问题无法拖垮一个服务器,而良性的通过项也无法稀释一个 critical 问题。 - **按类别的分数上限**(注入 50,数据外传 50,权限 35,供应链 30,网络 25,安全卫生 10)。 - **硬性门限**(最薄弱环节):**confirmed critical → F**;**任何** critical → 最多为 **D**;一个 confirmed high → 最多为 **C**;两个 → **D**。大多数门限仅在 `confirmed` 的发现上触发,因此猜测绝不会强制触发上限 —— 但任何置信度的 critical 问题得分都不能超过 D。 - **分数区间:** A 90–100 · B 80–89 · C 70–79 · D 60–69 · F 0–59。 每份报告都会提供完整的、逐项列出的 `vector` 和 `methodologyVersion`。**相同的方法版本 + 相同的目标 ⇒ 字节级完全一致的评分。** 详情:**[docs/scoring.md](docs/scoring.md)**。 ## 嵌入完全相同的引擎(应用市场与平台) MCP Trust Checker 首先是一个库。应用市场可以使用**与用户在 GitHub 上审计的完全相同、带版本号的开源引擎**来审查每个列出的服务器 —— 从而让“我们在每个 MCP 服务器上运行了独有的安全检查”成为一个*可验证的*声明。 ``` import { surfaceFromManifest, scanSurface, renderBadge } from 'mcptrustchecker'; const surface = surfaceFromManifest(toolsJson, 'acme/weather-mcp'); const report = await scanSurface(surface); report.score.grade; // 'A' … 'F' report.score.score; // 0 … 100 report.score.methodologyVersion; // 'mcptrustchecker-1.0' ← pin & display this report.toxicFlows; // enumerated exfiltration primitives renderBadge(report); // shields.io endpoint JSON for a live trust badge ``` `scanSurface` 是纯粹的、确定性的且离线的。参见 **[examples/programmatic.ts](examples/programmatic.ts)**。 ## Rug-pull 保护(首次使用信任 / Trust On First Use) ``` mcptrustchecker pin ./tools.json # writes mcptrustchecker.lock — commit it to git mcptrustchecker diff ./tools.json # exits non-zero if the surface changed ``` 一个在您批准后悄悄重写其描述的工具(MCPoison / rug-pull 类别)将显示为带有可读差异的**漂移 (drift)**,并且需要重新批准。 ## CI / GitHub 集成 ``` # .github/workflows/mcptrustchecker.yml name: MCP Trust Checker on: [push, pull_request] jobs: scan: runs-on: ubuntu-latest permissions: { contents: read, security-events: write } steps: - uses: actions/checkout@v4 - uses: illiahaidar/mcptrustchecker@v0 with: target: ./tools.json min-grade: B sarif: true # uploads to the Security tab ``` 参见 **[docs/ci-integration.md](docs/ci-integration.md)** 和 **[action.yml](action.yml)**。 ## 安全性:扫描本身就是一个攻击面 连接到 MCP 配置可能会运行任意命令。MCP Trust Checker 的获取操作默认在沙箱中进行: - stdio 命令**通过纯名称进行白名单过滤**(`npx, uvx, python, python3, node, docker, deno`) —— 带有**路径限定符**的命令(例如 `/tmp/evil/node`)会被拒绝,从而关闭了基础名称欺骗绕过的漏洞。 - 子进程环境变量会被**清洗**,去除可能劫持执行的变量(`NODE_OPTIONS`, `LD_PRELOAD`, `DYLD_*`, `PYTHON*`, `()`-functions) —— 已列入白名单的 runtime 无法被重定向。 - 客户端配置中的服务器**不会被 spawn**,除非您传入 `--run`;从配置派生的 HTTP 目标受 **SSRF 防护**(私有/环回/链路本地地址被阻止)。 - HTTP 目标会进行 scheme/host 验证;响应有大小限制;所有连接都有超时限制。 ## 配置 `mcptrustchecker.config.json`(自动发现)会覆盖任何默认值 —— 参见 [examples/mcptrustchecker.config.json](examples/mcptrustchecker.config.json)。有两个值得一提的采用特性: - **基线 / 抑制** —— 带着理由豁免特定工具上的特定发现(`suppress: [{ rule, tool?, field?, reason }]`),或者在您的 repo 中放入一个独立的 `.mtcignore` JSON 数组。范围限定的豁免可以让 CI 保持通过(变绿),而不会在每个地方都让某条规则静默。 - **策略即代码 (Policy-as-code)** —— 声明一次什么是“可接受的”,并以此为每一次扫描设置门限:`policy: { minGrade, maxCapability, denyRules, denyCapabilities }`。违规行为将被打印出来并导致运行失败。 ## MCP Trust Checker *不是*什么 - 不是运行时代理/防火墙 —— 它分析的是声明的接口,而不是位于请求路径中。 - 静态分析证明存在毒性流**原语**,而不是某个攻击链**将会执行**。 - 它不测试服务器端的身份验证/授权(已注明,未声明支持)。 - 启发式方法存在误报;每个发现都带有 `confidence`,并且评级门限仅在 `confirmed` 的发现上触发 —— 因此猜测绝不会强制改变评级。[报告误报](.github/ISSUE_TEMPLATE/false-positive.md);规则是开放的。 ## 文档 - **[docs/methodology.md](docs/methodology.md)** —— 深入了解每个流水线阶段 - **[docs/scoring.md](docs/scoring.md)** —— 评分模型与可重现性契约 - **[docs/rules.md](docs/rules.md)** —— 完整的 78 条规则目录 - **[docs/architecture.md](docs/architecture.md)** —— 代码布局与扩展方法 - **[docs/ci-integration.md](docs/ci-integration.md)** —— Action、SARIF、基线 - **[SECURITY.md](SECURITY.md)** · **[CONTRIBUTING.md](CONTRIBUTING.md)** ## 贡献 欢迎提交 Issues、规则和 PR —— 参见 [CONTRIBUTING.md](CONTRIBUTING.md)。新的检测器只需实现一个微小的接口;新的威胁数据是一个包含测试的、纯文本的可审查数据文件。 ## 许可证 [MIT](LICENSE) © Illia Haidar · [mcptrustchecker.com](https://mcptrustchecker.com) · [support@mcptrustchecker.com](mailto:support@mcptrustchecker.com). 由 **[Illia Haidar](https://github.com/illiahaidar)** —— Capability-Flow Trust Model 的作者创建并维护。
标签:CISA项目, GNU通用公共许可证, GraphQL安全矩阵, MCP, MITM代理, Node.js, SARIF, 图数据库, 安全扫描器, 暗色界面, 自动化攻击, 错误基检测, 静态代码分析