mizcausevic-dev/mcp-tool-schema-fuzzer

GitHub: mizcausevic-dev/mcp-tool-schema-fuzzer

从 MCP 服务器的 tools/list schema 中自动生成带预期判定结果的对抗性测试用例,用于验证服务器是否真正执行了其声明的输入校验规则。

Stars: 0 | Forks: 0

# mcp-tool-schema-fuzzer 从 MCP `tools/list` 生成**对抗性测试用例** —— 包括 `valid-minimal`、`missing-required`、`wrong-type`、`extra-field`、`boundary`(min/max + below/above)、`enum-violation` —— 每个用例都带有**预期的接受/拒绝判定结果**,你可以针对服务器重放这些用例,以检查其输入验证行为。 Lane #1,深度为 5:它将 `mcp-tools-snapshot`(捕获)+ `mcp-registry-risk-scanner`(静态风险)+ `mcp-tool-card-generator`(披露)+ `mcp-tools-diff`(漂移)与 **schema 强制执行测试** 结合在一起。 ## 为什么 MCP 服务器为每个工具声明了一个 `inputSchema`,但客户端没有简单的方法来验证服务器是否实际执行了它。一个声明了 `"required": ["customer_id"]` 但却默默接受缺少该字段的请求的工具,就是一个服务器 bug —— 这是一个偏离正常路径的小问题,在代码审查中很容易被遗漏。这个 fuzzer 会读取 schema,生成*应该*测试每条执行规则的用例,并为每个用例标记服务器应产生的判定结果。然后,单独的测试运行器可以调用这些用例,并对实际结果与预期结果进行 diff。 纯转换 —— 不会调用 MCP 服务器。自然地与 `mcp-tools-snapshot` 配对使用(快照实时状态 → fuzz → 针对服务器重放)。 ## 安装 ``` npm install -g mcp-tool-schema-fuzzer # CLI npm install mcp-tool-schema-fuzzer # library ``` 要求 Node ≥ 20。 ## CLI ``` mcp-tool-schema-fuzzer tools.json --out plan.json # full plan mcp-tool-schema-fuzzer tools.json --summary # counts only mcp-tool-schema-fuzzer tools.json --skip extra-field,enum-violation ``` 退出代码:`0` 成功,`2` 用法/IO 错误。 ## 库 ``` import { fuzz } from "mcp-tool-schema-fuzzer"; const plan = fuzz(toolsList); for (const tool of plan.plans) { for (const c of tool.cases) { // replay against the server, compare to c.expected ("accept" | "reject") } } ``` ## 用例类型 | 类型 | 每项 | 判定结果 | 检查内容 | |---|---|---|---| | `valid-minimal` | tool | accept | 服务器接受最小的有效输入 | | `missing-required` | 必填字段 | reject | 当缺少必填字段时,服务器拒绝请求 | | `wrong-type` | 类型化属性 | reject | 当属性具有错误的 JSON 类型时,服务器拒绝请求 | | `extra-field` | tool | 如果 `additionalProperties: false` 则为 reject,否则为 accept | 严格与宽松的对象强制执行机制对比 | | `boundary-min` / `boundary-max` | 数值/字符串长度字段 | accept | 恰好在声明的 min/max 边界上的值 | | `boundary-below-min` / `boundary-above-max` | 数值/字符串长度字段 | reject | 刚好超出声明边界的值 | | `enum-violation` | enum 字段 | reject | 服务器拒绝不在 enum 中的值 | 生成器是确定性的 —— 对同一个 `tools/list` 运行两次会产生相同的计划,因此快照测试套件在不同运行之间是稳定的。 ## 许可证 AGPL-3.0-or-later — 参见 [许可证](LICENSE)。
标签:API密钥检测, GNU通用公共许可证, MCP协议, MITM代理, Node.js, 数据可视化, 文档结构分析, 暗色界面, 测试工具, 自动化攻击, 输入验证