为什么需要协议级的标准化?
在 MCP 诞生之前,每个大模型框架和应用都在发明自己的工具调用格式:OpenAI Assistants API、LangChain Tools、LlamaIndex Tools 等等。这导致生态碎片化严重,开发者为一个平台写的工具无法移植到另一个平台。
Anthropic 提出的 Model Context Protocol (MCP) 彻底改变了这一局面。它将客户端(Host/Client)与服务端(Server)解耦,使用中立且被广泛验证的 JSON-RPC 2.0 作为基座协议。
1. 全双工通信与生命周期状态机
MCP 协议定义了严格的初始化握手流程:
Client Server
| |
| -------- 1. initialize request ----------------> |
| (clientInfo, capabilities, protocolVer) |
| |
| <------- 2. initialize response --------------- |
| (serverInfo, capabilities, protocolVer) |
| |
| -------- 3. initialized notification ----------> |
| |
| <================ Operational Phase ===========> |
| (tools/list, tools/call, resources) |
在客户端发送 initialized 通知之前,任何业务请求都不会被处理。这确保了双端协议版本与特性协商完成。
2. 核心 Capabilities 协商
双方在初始化请求中声明各自支持的能力:
- Server Capabilities:
tools(是否支持动态更新通知)、resources(是否支持订阅)、prompts、logging。 - Client Capabilities:
roots(客户端支持提供的根目录列表)、sampling(服务端向客户端请求大模型生成能力)。
3. 错误处理与规范码
MCP 继承了 JSON-RPC 2.0 的标准错误码定义,并扩展了专属业务错误,例如入参校验失败 (-32602)、工具未找到 (-32601) 等,保证了跨语言实现的统一异常语义。