MCP 生产实践
本页讨论把本地 MCP 工具带入团队或生产环境时必须补齐的工程能力。协议能统一调用格式,但不会自动赋予工具安全性。
本地到远程
| 场景 | 推荐传输 | 关键约束 |
|---|---|---|
| 本机开发工具 | stdio | 进程隔离、stderr 日志、工作区边界 |
| 内网共享服务 | Streamable HTTP | TLS、身份认证、超时、限流 |
| 多租户生产服务 | HTTP 网关 | 租户隔离、审计、配额、回滚 |
MCP 规范在 2026-07-28 版本中强化了无状态核心、授权和可缓存列表结果。升级时不要只替换 SDK:应验证初始化、列表、调用、错误、取消和重连行为。
远程 Server 的安全边界
至少实现:
- TLS 和服务身份校验;
- 用户、服务账号或工作负载身份;
- Tool 级别授权,而不只是 Server 级别授权;
- 每次调用的 request id、用户、工具、参数摘要和结果状态;
- 超时、并发上限、重试预算和熔断;
- 外部系统失败时的清晰错误语义。
工具输入校验
校验路径:
text
JSON schema -> 业务校验 -> 权限校验 -> 副作用预览 -> 执行 -> 审计例如 write_file 至少要检查:
- 目标路径是否在允许目录;
- 是否命中密钥、生产配置或生成文件;
- 是否需要用户确认;
- 内容大小和编码;
- 是否记录变更前后的摘要。
授权与最小权限
推荐把权限拆成:
read_reposearch_coderun_testswrite_workspaceopen_reviewdeploy_production
默认只授予前几项;最后一项必须独立审批。不要把“模型可以看到工具”误认为“模型有权执行工具”。
可靠性
- 幂等 Tool 使用 idempotency key;
- 重试只用于明确的临时错误;
- 长任务支持取消;
- 结果带 trace id;
- Server 重启后能恢复或明确终止任务;
- 列表缓存失效时不会调用过期工具 schema。
迁移检查清单
- 阅读目标协议版本的变更说明。
- 记录当前 Client/Server 的版本矩阵。
- 用固定任务验证 initialize、list、call、error、cancel。
- 检查授权 scope 和审计字段。
- 预留回滚配置,不在高峰期首次升级。
练习
- 为
run_tests设计一个允许的命令白名单。 - 为远程
search_repo服务设计租户隔离方案。 - 写一份 MCP Server 升级前后的兼容性测试表。
