最终版标准轨道
摘要
本 SEP 提议对模型上下文协议 (MCP) 规范进行结构性重构。核心变化是将请求的负载(例如CallToolRequest)定义为独立的定义,并让 RPC 方法定义引用这些模型。这将数据负载的定义与传输它的远程过程定义解耦,从而产生更清晰、更模块化且更易维护的规范。
动机
当前的 MCP 规范将请求的数据负载与传输它的 JSON-RPC 方法紧密耦合。这种设计带来了几个挑战:- 清晰度降低: 它迫使开发者在理解交换的核心数据之前,必须在心理上解析 JSON-RPC 传输结构。这增加了认知负荷,使得规范难以阅读和正确实现。
- 阻碍可维护性: 内联定义数据结构阻止了它们在不同方法间的复用,导致冗余,并使协议的未来更新更加复杂且容易出错。
- 与 JSON-RPC 紧密耦合: 最关键的是,这种与 JSON-RPC 的紧密耦合是为其他传输协议定义绑定的主要障碍。为了支持像 gRPC 这样的传输(这是目前 社区热门需求),需要对其请求和响应消息进行与传输无关的定义。当前的结构使得这实际上不可能。
规范
该提议引入了以下原则:所有用作 RPC 方法参数 (params) 或结果 (result) 的数据结构应定义为独立的、命名的模式。RPC 方法定义将随后使用对这些模式的引用。当前方法(内联定义):
RPC 方法定义包含其参数和结果的完整结构。提议方法(解耦定义):
首先,请求和响应的数据模型被定义为顶层模式。理由
所选的提议解决方案——将负载定义与 RPC 方法分离——是实现动机中概述目标的最直接且非破坏性的路径。 这种方法在两个不同的关注点之间建立了清晰的架构边界:- 数据层: 与传输无关的负载定义(例如
CallToolRequestParams),代表交换的核心信息。 - 传输层: 特定于协议的包装器(例如 JSON-RPC
CallToolRequest对象),描述数据如何发送。