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 和审计存储;
- 针对重要工具的重试和幂等行为;以及
- 应用程序重启后的任务恢复。
测试服务器契约
对于每个服务器,保留以下夹具:
- 初始化能力准确性;
- 工具和资源模式;
- 无效和未经授权的输入;
- 最大结果大小;
- 取消和超时行为;
- 写入操作的幂等重试;以及
- 凭据和敏感字段的编辑。