MCP (Model Context Protocol) 技术理解 - 第二篇

引言

我们第一篇讲了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(包括名称、描述、数据格式等)给客户端

json 复制代码
// 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的三大核心原语、生命周期等问题

相关推荐
我没胡说八道6 小时前
高校论文AI检测优化工具对比研究与实测分析(2026)
人工智能·深度学习·机器学习·计算机视觉·aigc·论文
星辰徐哥7 小时前
Spring Boot 微服务架构设计与实现
spring boot·后端·微服务
星辰徐哥7 小时前
Spring Boot 数据导入导出与报表生成
spring boot·后端·ui
明夜之约7 小时前
Spring Boot 自动装配源码
java·spring boot·后端
Leaton Lee7 小时前
Spring Boot分层架构详解:从Controller到Service再到Mapper的完整流程
java·spring boot·后端·架构
Micro麦可乐7 小时前
Spring Boot 实战:从零设计一个短链系统(含完整代码与数据库设计)
数据库·spring boot·后端·哈希算法·雪花算法·短链系统
Jinkxs7 小时前
Resilience4j- 与 Spring Boot 快速集成:自动配置与基础注解使用
java·spring boot·后端
毕设源码_郑学姐7 小时前
计算机毕业设计springboot网络相册设计与实现 基于Spring Boot框架的在线相册管理系统开发与应用 Spring Boot驱动的网络影集设计与实践
spring boot·后端·课程设计
辣机小司7 小时前
【踩坑记录:Spring Boot 配置文件读取值不一致?警惕 YAML 的“八进制陷阱”与 SnakeYAML 版本之谜】
java·spring boot·后端·yaml·踩坑记录
码农阿豪7 小时前
从零到一:Spring Boot快速接入金仓数据库实战
数据库·spring boot·后端