引言

我们第一篇讲了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的三大核心原语、生命周期等问题

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐