MCP Server Testing 已碎片化。我为 Record、Replay、Mock、Audit 和 CI 构建了一个 CLI
Source: Dev.to
请提供您希望翻译的完整文本(除代码块、URL 和上述来源链接外),我将按照要求把内容翻译成简体中文并保留原有的 Markdown 格式。
Source:
MCP 服务器测试的问题
构建 MCP 服务器相对简单,但端到端的测试却很零散。
- 你可以手动测试或编写少量脚本,部署服务器后再更改某些内容(输入模式、响应格式、依赖项),却没有任何回归安全网。
- 同事们需要 API 密钥和正在运行的实例才能针对你的服务器进行开发。
- CI 流水线往往没有验证服务器是否真的可用。
- 对恶意内容的审计工具描述几乎没有自动化。
这些痛点各有对应的解决方案,但将它们拼接在一起往往需要大量粘合代码,而这些代码很少能进入生产环境。
现有工具(快速调查)
| 工具 | 优势 | 限制 |
|---|---|---|
| MCP Inspector (Anthropic) | 交互式调试和探索 | 不适用于 CI 或自动化测试 |
| MCP‑Scan (Invariant Labs / Snyk) | 安全扫描(工具投毒、拉地毯检测) | 仅专注于安全 |
| Promptfoo | LLM 红队测试,近期支持 MCP | 主要是提示层面的测试,而非完整服务器工作流 |
| MCP Protocol Validator | 规范合规性检查 | 范围狭窄 |
| Ad‑hoc SDK scripts | 完全自定义 | 无法扩展;所有内容都需自行维护 |
这些工具都未覆盖完整的循环:record → replay → mock → audit → score → CI.
介绍 MCPSpec
MCPSpec 是一个开源 CLI,旨在通过在单一工具中处理整个测试生命周期来弥合这一差距。
核心特性
- 记录 与服务器的真实交互会话。
- 回放 会话到新版本服务器,并获取每个响应的差异。
- Mock 生成:生成可在 CI 中使用的独立 JavaScript Mock 服务器,无需 API 密钥或真实实例。
- 审计 安全问题,如工具投毒、过度代理、路径遍历、注入等。
- 评分 服务器在文档、模式质量、错误处理、响应速度和安全性方面的表现。
- CI 集成:自动生成 GitHub Actions、GitLab CI 或 Shell 脚本,运行记录/回放、审计和评分检查。
- 可选的基于 YAML 的测试集合,支持 10 种断言类型、环境变量、标签和并行执行。
记录和重放会话
# Record a session against the current server
mcpspec record start "npx my-server"
# ...interactively call tools, then save the session
mcpspec record save my-session
# Replay the recorded session against a new version
mcpspec record replay my-session "npx my-server-v2"
示例输出
Replaying 3 steps...
1/3 get_user (id=1)... [OK] 42ms
2/3 list_items... [CHANGED] 38ms
3/3 create_item (name=test) [OK] 51ms
Summary: 2 matched, 1 changed, 0 added, 0 removed
生成模拟服务器
mcpspec mock my-session --generate ./mocks/server.js
生成的 server.js 仅依赖 @modelcontextprotocol/sdk。将其提交到你的仓库,并在 CI 或本地开发中使用,无需任何外部依赖。
安全问题审计
# Passive mode (metadata only, safe for production)
mcpspec audit "npx my-server"
# Active mode (sends test payloads, skips destructive tools)
mcpspec audit "npx my-server" --mode active
审计运行八条规则,检测真实问题,包括:
- 工具投毒 – 隐藏的指令,LLM 可能会盲目执行。
- 过度自主 – 工具可以在未确认的情况下执行破坏性操作。
- 路径遍历、注入、输入验证、信息泄露、资源耗尽、身份验证绕过。
为服务器评分
# 在五个类别中获取 0‑100 分数
mcpspec score "npx my-server"
# 强制最低分数(例如,如果低于 80 则使 CI 失败)
mcpspec score "npx my-server" --min-score 80
该分数可以在你的 README 中显示为徽章,或用于控制合并。
CI 集成
mcpspec ci-init
此命令会搭建 GitHub Actions 工作流、GitLab CI 配置或通用 shell 脚本,以自动运行记录/回放、审计和评分步骤。
安装与快速开始
npm install -g mcpspec
运行预构建的测试集合,无需任何设置:
mcpspec test examples/collections/servers/filesystem.yaml
MCPSpec 附带 70 个可直接运行的测试,覆盖七个流行的 MCP 服务器(filesystem、memory、time、fetch、everything、GitHub、Chrome DevTools)。
同时提供网页仪表盘:
mcpspec ui
所有这些 免费、快速、可重复且遵循 MIT 许可证。
接下来是什么?
未来的工作包括:
- 合同快照 – 自动检测破坏性的模式更改。
- 模式漂移检测 用于 CI 流水线。
欢迎提供想法和反馈!