# 模块 12:MCP 也必须沉淀为能力资产
MCP 不是一条连接地址,也不是把所有外部系统工具都暴露给 Agent。 它是“可被 Agent 调用的外部能力”,因此同样需要清楚的输入输出、权限、审计、失败处理和验证边界。
能力说明
工具契约
权限范围
失败降级
验收夹具
--- # MCP 资产包应包含什么?
```text mcp-assets/ ├── README.md # 接入边界、适用场景与不适用场景 ├── MCP能力契约.template.md # 服务、工具、输入、输出、错误与审计 ├── MCP工具权限与验收清单.md # 最小授权、敏感数据与副作用验证 ├── MCP故障降级清单.md # 超时、鉴权、限流、不可用时的处理 └── fixtures/ # 完整、拒绝、失败与脱敏结果样例 ```
连接配置只说明“连得上”;资产包还要说明“什么时候可以调用、调用后能相信到什么程度”。
--- # 每个 MCP 工具都需要输入输出契约
| 契约字段 | 必须说明的问题 | |---|---| | 工具名称与用途 | 它解决哪一类外部事实或操作? | | 输入 | 必填字段、格式、数据范围和敏感参数处理方式是什么? | | 输出 | 返回哪些已确认字段,哪些字段可能为空或过期? | | 副作用 | 只读、可逆写入,还是不可逆操作? | | 错误 | 鉴权、限流、超时、无结果和服务错误如何区分? | | 审计 | 调用主体、目标对象、时间和结果如何留痕并脱敏? |
工具名叫“查询”不代表一定只读;是否有副作用必须由契约明确,而不是让 Agent 猜测。
--- # Agent 调用 MCP 时,权限要再收一层
| 外部能力类型 | Agent 默认策略 | 必须补充的保护 | |---|---|---| | 读取公开或脱敏信息 | 可按职责开放 | 结果范围、来源时间与引用记录 | | 读取受限业务信息 | 仅在明确授权后调用 | 数据范围、脱敏与审计 | | 创建草稿或临时资源 | 需要用户确认 | 幂等键、撤销方式和可见结果 | | 修改业务状态或数据 | 不作为默认工具权限 | 二次确认、最小范围和回滚路径 | | 删除、发布、外发 | 不交给通用 Agent | 专用流程与人工最终确认 |
自定义 Agent 的工具选择只是第一层;MCP 工具自身仍要定义调用级的权限与确认边界。
--- # MCP 的验收不只检查“调用成功”
| 验收夹具 | 预期行为 | |---|---| | 合法完整请求 | 返回结构符合契约,来源和时间可追溯 | | 缺少必填参数 | 拒绝并说明字段缺口,不自动补造参数 | | 越权请求 | 拒绝或要求确认,不泄露超范围数据 | | 限流、超时或服务不可用 | 区分故障类型,输出降级结论,不伪装成无结果 | | 敏感字段返回 | 按契约脱敏,日志不写入密钥、Token 或完整隐私数据 | | 有副作用的重复调用 | 符合幂等或明确阻止重复执行 |
MCP 失败时,Agent 应该报告“外部事实未取得”,而不是用已有代码或常识补出一个答案。
--- # MCP 能力资产的交付标准
一份 MCP 资产的完成标准,不是 Agent 调用成功,而是能力、契约、权限、故障处置和验证边界均可被复核。
适用边界
工具契约
调用权限
故障降级
验收夹具