小企鹅乐园
47.12M · 2026-02-09
我们第一篇讲了MCP的基础概念、MCP解决的问题以及MCP的架构,我相信大家已经对MCP有了一定的了解,那么接下来让我们深入MCP具体是如何实现的,这一篇我们的重点放在通信协议和数据传输上,让我们一起来看看吧
如果你对前面的内容感兴趣,可以点击这里跳转
MCP (Model Context Protocol) 技术理解 - 第一篇
MCP由两层组成:
从概念上讲,数据层是内层,而传输层是外层。
数据层实现了基于JSON-RPC 2.0交换协议,该协议定义了消息结构和语义。该层包括:
该协议支持实时通知,从而实现服务器和客户端之间的动态更新。例如,当服务器的可用工具发生变化时(当新功能上线或现有工具被修改时),服务器可以发送工具更新通知,告知已连接的客户端这些变化。通知以 JSON-RPC 2.0 通知消息的形式发送(无需响应),使 MCP 服务器能够向已连接的客户端提供实时更新。
简单来说,就和我们配置中心Nacos、Apollo通过订阅-推送机制实现配置热更新差不多
传输层管理客户端和服务器之间的通信通道和身份验证。它处理连接建立、消息帧构建以及MCP参与者之间的安全通信。MCP支持两种传输机制:
传输层将通信细节从协议层中抽象出来,从而实现所有传输机制都采用相同的 JSON-RPC 2.0 消息格式。
ok,这就覆盖到我们上一篇的知识了,为什么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的三大核心原语、生命周期等问题
BaldursGate将改编为HBO剧集-由《最后生还者》主创领衔制作
NeonDoctrine联合创始人推出新开发者服务公司-GoldpactGoblins专注中小团队支
2026-02-09
2026-02-09