模块 V —— MCP、技能与能力管理
模块 V 是 能力管理叠加层(capability management overlay):它治理你的代理的工具与能力—— 哪个 MCP 服务器暴露哪个工具、它的传输、作用域与配置是什么、哪个发起方接入了哪项能力、 它的版本历史,以及它的基本连接健康状况。它位于 管理层(Management layer),且 没有任何执行面: 它编目、治理并审计,但绝不运行工具,也绝不改动一个活跃的 MCP 运行时。
本模块是 构建于 模块 I 的被动发现与连接器的内省 之上 的一个叠加层。它 不 重新实现 MCP 客户端,并且刻意 不 重新物化清单(inventory)已经拥有的核心实体(MCP 服务器、技能、工具与资源记录)。 相反,它读取那些核心实体,只存储它 自己 的叠加内容,以连接器已脱敏的自然引用为键, 并在读取时解析为核心实体——这是一种单写者(single-writer)纪律,使它不会与清单的物化器竞争。
这与模块 III 不同。模块 V 回答 “某个代理连接到了哪项能力”; 模块 III 回答 “某个发起方读取或写入了哪个资源”。 它们是各自独立的视图,本产品绝不将二者混为一谈。
它的契约与实体
Section titled “它的契约与实体”模块 V 拥有四个叠加实体(每个都以 capabilities. 为前缀):
| 实体 | 它持有什么 |
|---|---|
mcp_config | 一个 MCP 服务器的受管配置——传输、作用域、一个端点 引用 与若干 密钥引用。不存在任何能持有可用凭据的列。 |
config_revision | 每个配置版本一份只追加(append-only)的快照——不可变的版本历史,在配置被删除后仍然留存。 |
wiring | 能力连接图:一条 发起方 → 能力 的边,以自然引用存储,绝不以核心实体 id 存储。 |
health | 一项能力最后观察到的连接信号(connected / degraded / down / unknown)——这是一个基本信号,不是 SLA。 |
有两条契约属性不可商量。MCP 工具注解不被信任:一个工具的
readOnlyHint/destructiveHint 是来自服务器的 声明性 提示,MCP 规范规定客户端必须将其视为不可信——
每一次工具投射都携带一个明确的“不可信”标志,绝不是一枚安全徽章。传输中不携带密钥值:
配置以名称、类型与一个掩码提示来引用密钥;后端会拒绝端点或规格中的内联凭据,而非存储它们。
最小化数据是线格式的一项属性,而非事后补救。
读取目录受 RBAC 门控且按租户限定作用域。更改一个配置——以及它所引用的密钥——是一次 特权变更(privileged change),记录于只追加、哈希链式的账本,并归因到真实的主体(principal)。
它消费什么、产出什么
Section titled “它消费什么、产出什么”模块 V 由 事件总线 供给,而非自行轮询。它对两个通道作出反应:
edge.observed—— 运行时的能力使用变为wiring边。Source字段区分 观测到的(observed) 信号(otel)与 声明的(declared) 信号(mcp_annotation),而一个较新的配置发现供给器 会用config来源标记静态声明的能力。finding.reported—— 连接器的连接健康发现为health叠加层的最后信号状态供给。
它不产出自己的任何事件,也不向活跃基础设施分派任何东西;它的输出由管理 UI 以及其它模块通过其类型化路由读取。