MCP 测试与验证

MCP 集成跨越进程、传输、模式和授权边界。仅靠单元测试是不够的;至少保留一个确定性的客户端/服务器测试,完成真实的握手和工具调用。

聚焦框架门

cargo test -p adk-tool --features mcp --lib mcp
cargo test -p adk-tool --features mcp --test mcp_roundtrip_property_tests
cargo test -p adk-tool --features mcp,mcp-sampling --test mcp_sampling_property_tests
cargo clippy -p adk-tool --features mcp,http-transport,mcp-sampling -- -D warnings

采样门是对上游已弃用功能的兼容性覆盖,而不是对新架构的推荐。

编译集成消费者

cargo check -p adk-acp --all-features
cargo check -p adk-computer-use

这些门捕获嵌入或携带 MCP 配置的 crate 之间不匹配的公共 rmcp 类型。

独立示例

cargo check --manifest-path examples/mcp_elicitation/Cargo.toml
cargo check --manifest-path examples/mcp_sampling/Cargo.toml
cargo check --manifest-path examples/mcp_manager/Cargo.toml
cargo run --manifest-path examples/mcp_manager/Cargo.toml

examples/mcp_manager 是确定性的实时门。它通过在夹具模式下执行自己的二进制文件来启动一个真实的 Rust stdio 服务器。该测试不下载包或联系远程端点。

实时示例证明了什么

  • 子进程启动;
  • MCP 初始化和能力协商;
  • 工具发现;
  • 真实的工具请求和结果;
  • 运行时添加、启用、更新、禁用和移除;
  • 注册表序列化和文件持久化;以及
  • 会话关闭。

需要部署特定测试的内容

  • 远程 HTTP 身份和令牌策略;
  • 完整的 MCP OAuth 发现和用户授权;
  • 外部 API 和数据库健康;
  • 进程沙盒强制执行;
  • 租户隔离;
  • 审批 UI 和审计存储;
  • 针对重要工具的重试和幂等行为;以及
  • 应用程序重启后的任务恢复。

测试服务器契约

对于每个服务器,保留以下夹具:

  • 初始化能力准确性;
  • 工具和资源模式;
  • 无效和未经授权的输入;
  • 最大结果大小;
  • 取消和超时行为;
  • 写入操作的幂等重试;以及
  • 凭据和敏感字段的编辑。