MCP (Model Context Protocol) 技术理解 - 第二篇
本文深入探讨了MCP(Model Context Protocol)的实现细节,重点解析其通信协议与数据传输机制。MCP采用分层架构:数据层基于JSON-RPC 2.0协议,负责生命周期管理、服务器/客户端功能交互及实时通知;传输层抽象通信细节,支持Stdio和HTTP两种传输方式,统一消息格式。通过工具发现示例展示了标准JSON-RPC交互流程,揭示了MCP实现跨平台互通的核心机制——传输层标准
引言
我们第一篇讲了MCP的基础概念、MCP解决的问题以及MCP的架构,我相信大家已经对MCP有了一定的了解,那么接下来让我们深入MCP具体是如何实现的,这一篇我们的重点放在通信协议和数据传输上,让我们一起来看看吧
如果你对前面的内容感兴趣,可以点击这里跳转
MCP (Model Context Protocol) 技术理解 - 第一篇
MCP的层级
MCP由两层组成:
- 数据层:定义了基于 JSON-RPC 的客户端-服务器通信协议,包括生命周期管理和核心原语,如工具、资源、提示和通知。
- 传输层:定义了客户端和服务器之间进行数据交换的通信机制和通道,包括特定于传输的连接建立、消息帧和授权。
从概念上讲,数据层是内层,而传输层是外层。
MCP的数据层
数据层实现了基于JSON-RPC 2.0交换协议,该协议定义了消息结构和语义。该层包括:
- 生命周期管理:处理客户端和服务器之间的连接初始化、能力协商和连接终止。
- 服务器功能:使服务器能够提供核心功能,包括用于 AI 操作的工具、上下文数据资源以及来自客户端和与客户端交互的模板提示。
- 客户端功能:使服务器能够请求客户端从主机LLM进行采样、获取用户输入以及向客户端记录消息。
- 实用功能:支持实时更新通知和长时间运行操作的进度跟踪等附加功能
该协议支持实时通知,从而实现服务器和客户端之间的动态更新。例如,当服务器的可用工具发生变化时(当新功能上线或现有工具被修改时),服务器可以发送工具更新通知,告知已连接的客户端这些变化。通知以 JSON-RPC 2.0 通知消息的形式发送(无需响应),使 MCP 服务器能够向已连接的客户端提供实时更新。
简单来说,就和我们配置中心Nacos、Apollo通过订阅-推送机制实现配置热更新差不多
MCP的传输层
传输层管理客户端和服务器之间的通信通道和身份验证。它处理连接建立、消息帧构建以及MCP参与者之间的安全通信。MCP支持两种传输机制:
- Stdio 传输:使用标准输入/输出流在同一台机器上的本地进程之间进行直接进程通信,提供最佳性能,且无网络开销。
- 可流式 HTTP 传输:使用 HTTP POST 请求进行客户端到服务器的消息通信,并可选使用服务器通过SSE来实现流式传输功能。此传输方式支持远程服务器通信,并支持包括持有者令牌、API 密钥和自定义标头在内的标准 HTTP 身份验证方法。MCP 建议使用 OAuth 获取身份验证令牌。
传输层将通信细节从协议层中抽象出来,从而实现所有传输机制都采用相同的 JSON-RPC 2.0 消息格式。
ok,这就覆盖到我们上一篇的知识了,为什么MCP可以统一数据格式和传输,同时可以预制模板,原因就在于传输层抽象成了统一的标准,无论是什么传输机制,大家只要按照这一标准来传输数据即可实现互通。
通信协议与数据传输在MCP里面是什么样子的
我们来一个图来展示通信协议与数据传输在MCP的充当的角色

展示一下数据格式,我们以STDIO (标准输入/输出)为例子
连接建立后,客户端可以通过发送tools/list请求来发现可用的工具。此请求是 MCP 工具发现机制的基础——它允许客户端在尝试使用工具之前了解服务器上有哪些工具可用
然后服务端就返回可调用的tools(包括名称、描述、数据格式等)给客户端
// Request
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/list",
"params": {}
}
// Response
{
"jsonrpc": "2.0",
"id": 1,
"result": {
"tools": [
{
"name": "search_flights",
"description": "Search for available flights",
"inputSchema": {
"type": "object",
"properties": {
"origin": {"type": "string"},
"destination": {"type": "string"},
"date": {"type": "string", "format": "date"}
},
"required": ["origin", "destination", "date"]
}
}
]
}
}
小结
在这一篇中,我们主要讲解了MCP它实现的通信协议和数据格式,这就给我们前面MCP如何实现的抽象和数据如何传输的问题解了惑。
下一篇我们讲讲MCP的三大核心原语、生命周期等问题
更多推荐



所有评论(0)