MCP 生产实践
本页讨论把本地 MCP 工具带入团队或生产环境时必须补齐的工程能力。协议能统一调用格式,但不会自动赋予工具安全性。
本页属于 AI Harness 工程化专题;初次接入请先阅读 MCP 基础。
本地到远程
| 场景 | 推荐传输 | 关键约束 |
|---|---|---|
| 本机开发工具 | stdio | 进程隔离、stderr 日志、工作区边界 |
| 内网共享服务 | Streamable HTTP | TLS、身份认证、超时、限流 |
| 多租户生产服务 | HTTP 网关 | 租户隔离、审计、配额、回滚 |
MCP 规范在 2026-07-28 版本中强化了无状态核心、授权和可缓存列表结果。升级时不要只替换 SDK:应验证初始化、列表、调用、错误、取消和重连行为。
远程 Server 的安全边界
至少实现:
- TLS 和服务身份校验;
- 用户、服务账号或工作负载身份;
- Tool 级别授权,而不只是 Server 级别授权;
- 每次调用的 request id、用户、工具、参数摘要和结果状态;
- 超时、并发上限、重试预算和熔断;
- 外部系统失败时的清晰错误语义。
工具输入校验
校验路径:
JSON schema -> 业务校验 -> 权限校验 -> 副作用预览 -> 执行 -> 审计例如 write_file 至少要检查:
- 目标路径是否在允许目录;
- 是否命中密钥、生产配置或生成文件;
- 是否需要用户确认;
- 内容大小和编码;
- 是否记录变更前后的摘要。
授权与最小权限
推荐把权限拆成:
read_reposearch_coderun_testswrite_workspaceopen_reviewdeploy_production
默认只授予前几项;最后一项必须独立审批。不要把“模型可以看到工具”误认为“模型有权执行工具”。
生产权限应至少经过三层判断:
- Host/Harness 根据任务、用户和当前阶段裁剪可见工具,并拦截需要审批的候选动作。
- MCP Gateway/Server 校验调用身份、租户、scope、资源范围和参数,不能信任 Client 已经检查过。
- 下游业务系统 执行最终的资源级授权与业务约束,不能因为请求来自 MCP Server 就放行。
一次审批只绑定确定的工具、参数摘要、资源、身份和有效期。参数变化、目标资源变化或审批过期后必须重新确认;审批令牌不能进入模型上下文。
审计、超时与恢复契约
每次调用建议记录以下字段,并对敏感参数做脱敏或摘要:
| 类别 | 最小字段 |
|---|---|
| 关联 | request id、task id、tool call id、trace id |
| 身份 | user/workload、tenant、授权 scope、审批记录 |
| 能力 | Server 与 Tool 名称、schema/version、参数摘要 |
| 执行 | 开始/结束时间、超时、重试次数、结果分类 |
| 副作用 | 目标资源、幂等键、变更摘要、补偿或回滚状态 |
超时必须分层设置:单次下游调用超时小于 Tool 超时,Tool 超时小于 Agent 单步预算,单步预算再小于整个任务预算。Client 取消后,Server 要明确动作是“未开始”“已取消”“已完成但响应丢失”还是“状态未知”,不能简单重试一个可能已经成功的写操作。
恢复流程应依据副作用状态:
无副作用 -> 可在预算内重试
幂等写入且状态可查询 -> 用幂等键查询后决定是否重放
可补偿写入 -> 记录原结果,经策略或审批执行补偿
不可逆或状态未知 -> 停止自动循环,交由人工核对Harness 负责保存任务检查点和决定是否继续,MCP Server 负责返回可判定的调用状态,下游系统负责幂等或事务保证。MCP 本身不会自动补齐这三者。
可靠性
- 幂等 Tool 使用 idempotency key;
- 重试只用于明确的临时错误;
- 长任务支持取消;
- 结果带 trace id;
- Server 重启后能恢复或明确终止任务;
- 列表缓存失效时不会调用过期工具 schema。
迁移检查清单
- 阅读目标协议版本的变更说明。
- 记录当前 Client/Server 的版本矩阵。
- 按协议版本运行固定任务:旧版验证
initialize、list、call、error、cancel;2026-07-28验证无状态请求、Mcp-Method/Mcp-Name、列表缓存、call、error、cancel 和最大往返时间(MRTR)。 - 检查授权 scope 和审计字段。
- 预留回滚配置,不在高峰期首次升级。
除了协议兼容,还应在固定仓库快照或沙箱租户上运行回归任务:只读检索、越权路径拒绝、写操作审批、超时取消、重复幂等调用、Server 重启恢复、schema 变更和审计关联。比较升级前后的成功率、P95 延迟、重试率、人工介入率与权限违规数;任何权限放宽或状态未知都应阻断发布。
练习
- 为
run_tests设计一个允许的命令白名单。 - 为远程
search_repo服务设计租户隔离方案。 - 写一份 MCP Server 升级前后的兼容性测试表。