MCP 集成
状态:混合。各章节状态如下:stdio 传输 (状态:运行中 (Running)),远程传输 (状态:已准入愿景 (Admitted-vision))。
MCP (模型上下文协议) 在 Nimi 中被准入为协议适配器源。它不具备运行时 (Runtime) 的语义权威。运行时负责适配器准入、服务器生命周期、工具发现、白名单管理、模式漂移处理以及隔离语义——MCP 传输对象不会成为公共运行时本体。
权责划分
| 关注点 | 负责方 |
|---|---|
| MCP 适配器准入 + 提供者配置文件绑定 | 运行时 (K-DELEG-100..K-DELEG-110) |
| 服务器生命周期 (启动、连接、监控、超时、关闭) | 运行时 |
| 工具发现 + 白名单管理 | 运行时 |
| 工具模式漂移检测 | 运行时 |
| 工具调用准入 + 隔离 | 运行时 + 委托输出防火墙 |
| MCP 传输对象语义 | 仅限适配器——不成为运行时本体 |
任何桌面、Avatar、Web、应用、模组或 nimi-hook 层都不得直接实例化 MCP 客户端或服务器会话。运行时拥有其所有权。
Stdio 传输 (状态:运行中 (Running))
Wave-2 准入 stdio_command 作为生产环境 MCP 传输类别。这是当前正在运行并已交付的接口。
| 属性 | 值 |
|---|---|
| 传输类型 | stdio_command |
| 执行位置 | 运行时拥有的本地网关 |
| 服务器生命周期 | 运行时启动 / 连接 / 监控 / 关闭 |
| 工具列表 | 运行时通过官方适配器调用 MCP 发现 |
远程传输 (状态:已准入愿景 (Admitted-vision))
远程 HTTP 传输被准入为发展方向。它们需要后续的准入包来证明目标资源授权、凭证保管、超时行为以及针对委托 MCP 适配器契约的响应隔离。在该准入包完成之前,远程 HTTP 路径不会交付。
官方 SDK 适配器依赖
运行时的 MCP 实现使用官方的 github.com/modelcontextprotocol/go-sdk 包作为协议适配器依赖。该依赖仅作为实现适配器;它不定义 Nimi 提供者身份、请求/结果词汇、审批状态、防火墙裁决、审计保留或代理映射语义。这些仍属于运行时的关注点。
提供者配置文件绑定
每个 MCP 提供者都必须绑定到运行时委托的提供者配置文件 (K-DELEG-002)。绑定字段如下:
| 字段 | 必需 | 语义 |
|---|---|---|
provider_id | 是 | 运行时委托的提供者身份 |
provider_kind | 是 | 必须是 MCP_TOOL_PROVIDER |
transport_kind | 是 | 已准入的 MCP 传输类别 |
allowed_tools | 是 | 运行时拥有的工具白名单 |
trust_tier | 是 | 继承自 K-DELEG-004 |
credential_ref | 有条件 | 连接器 / 密钥源 / 授权机构的引用 |
没有 allowed_tools 的提供者配置文件将被拒绝。不存在隐式的“所有工具”允许。
工具白名单管理
只有白名单中的工具才能从发现中返回或被调用。来自 MCP 服务器的未知工具在列表生成时可能会被静默忽略,但它们绝不能成为可调用或作为可用委托能力可见的工具。
模式漂移检测
如果一个允许的工具包含预期的输入模式摘要,运行时必须在工具调用之前比较当前的 MCP 工具输入模式摘要。模式漂移:
| 结果 | 行动 |
|---|---|
| 匹配 | 工具调用通过委托防火墙 |
| 不匹配 | 工具调用被拒绝;提供者会话可能根据委托能力规则被隔离 |
漂移不会静默地继续。平台拒绝操作自准入以来接口已更改的工具。
MCP 传输对象为何不进入运行时本体
MCP 传输对象代表提供者定义的语义,提供者可以单方面更改这些语义。如果这些传输对象成为运行时本体,那么提供者的每一次更改都将需要运行时契约修订——更糟糕的是,运行时语义将受制于提供者的实现选择。
相反,运行时会将 MCP 输出规范化为已准入的 K-DELEG-001..K-DELEG-099 契约接口,然后才由后续的防火墙阶段将它们准入到模型上下文、映射或行动路径。适配器边界正是保护运行时本体的关键。
读者场景:模组作者接入 MCP 工具提供者
一位模组作者希望向其代理暴露一个由 MCP 支持的工具。
- 提供者配置文件。 模组清单声明一个 MCP 提供者配置文件绑定,其中包含
provider_kind: MCP_TOOL_PROVIDER、transport_kind: stdio_command、一个明确的allowed_tools列表以及一个信任层级。 - 运行时准入。 运行时在其自己的生命周期下启动 MCP 服务器会话。
- 发现。 运行时通过官方适配器调用 MCP 工具列表;将每个列出的工具规范化为运行时网关凭证;并与
allowed_tools进行匹配。 - 工具暴露。 允许的工具可通过运行时的委托能力网关访问;模组的代理可以通过已准入的 SDK 路径请求它们。
- 工具调用。 每次调用都会通过委托输出防火墙,然后任何结果才能进入模型上下文或行动路径。
- 审计。 审计记录调用、防火墙裁决以及随后的任何行动。
该模组没有自行发明 MCP 集成。运行时拥有适配器;模组消费了已准入的运行时网关凭证。
读者场景:工具模式漂移导致提供者被隔离
一个 MCP 提供者在会话中途更新了其某个工具的模式。
- 请求工具调用。 运行时将当前的 MCP 工具输入模式摘要与已准入的摘要进行比对。
- 检测到漂移。 摘要不匹配。
- 工具调用被拒绝。 运行时返回一个类型化的拒绝信息。
- 提供者被隔离。 根据委托能力规则,提供者状态变为
QUARANTINED。提供者的K-DELEG-*生命周期反映了这一点。 - 无静默继续。 平台不会假装漂移没有发生;操作员会看到类型化的原因。
MCP 集成不做什么
- 它不允许 MCP 传输对象成为运行时本体。
- 它不允许
nimi-hook/ 桌面 / Avatar / 模组直接打开 MCP 会话。 - 它不允许工具调用绕过委托输出防火墙。
- 它不允许远程 HTTP 传输在没有后续准入包的情况下交付。
- 它不允许官方 SDK 适配器定义 Nimi 语义权威。
边界总结
| 关注点 | 负责方 | 接口 |
|---|---|---|
| 适配器依赖 | 适配器包 (仅限实现) | go-sdk |
| 提供者配置文件 + 白名单 | 运行时 | K-DELEG-100..110 |
| 服务器会话生命周期 | 运行时 | K-DELEG-104 |
| 工具发现 + 漂移 | 运行时 | K-DELEG-105,K-DELEG-107 |
| 工具调用准入 + 防火墙 | 运行时 + 委托输出防火墙 | K-DELEG-001..099 |
| 结果进入模型上下文 / 映射 / 行动路径 | 运行时 + 防火墙 | (后续阶段准入) |