Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >理解MCP 通信机制

理解MCP 通信机制

作者头像
windealli
发布于 2025-04-21 09:03:40
发布于 2025-04-21 09:03:40
44704
代码可运行
举报
文章被收录于专栏:windealliwindealli
运行总次数:4
代码可运行

一、MCP通信机制全景透视

1. 客户端-服务器架构(Host-Client-Server三级结构)

MCP核心遵循客户端-服务器架构,其中主机应用程序(MCP client)可以连接到多个服务器(MCP Server):

2. 分层设计哲学:协议层与传输层

MCP 在通信机制的设计上,将协议层(**Protocol layer)**与传输层(**Transport layer)**解耦

  • Protocol layer: 协议层定义通信逻辑与消息语义,负责管理交互模式、消息关联性及生命周期。其核心在于标准化AI系统与资源的对话规则
  • Transport layer: 传输层负责客户端与服务器之间的物理通信机制,专注于数据包的实际传输。其核心目标是屏蔽底层传输方式的差异,为上层协议提供统一的数据交换接口

协议层依赖传输层提供的原始字节流,通过JSON-RPC封装为结构化消息,传输层可替换(如从Stdio切换为HTTP-SSE),而协议层逻辑保持不变,实现跨环境复用

通过这种分层设计,MCP既保证了通信的灵活性(如本地/云端场景切换),又实现了语义的统一性(如跨工具的标准请求格式),成为AI系统与数字世界交互的“通用插座”

二、Protocol 层简介

协议层负责消息封装、请求和响应的关联、高级通信模式的管理。

就具体实现而言,就是实现了下面四个接口:

  • 发送请求
  • 发送通知
  • 接收请求
  • 接收通知

Python 为例:

代码语言:javascript
代码运行次数:1
运行
AI代码解释
复制
class Session(BaseSession[RequestT, NotificationT, ResultT]):
    asyncdef send_request(
        self,
        request: RequestT,
        result_type: type[Result]
    ) -> Result:
        """Send request and wait for response. Raises McpError if response contains error."""
        # Request handling implementation

    asyncdef send_notification(
        self,
        notification: NotificationT
    ) -> None:
        """Send one-way notification that doesn't expect response."""
        # Notification handling implementation

    asyncdef _received_request(
        self,
        responder: RequestResponder[ReceiveRequestT, ResultT]
    ) -> None:
        """Handle incoming request from other side."""
        # Request handling implementation

    asyncdef _received_notification(
        self,
        notification: ReceiveNotificationT
    ) -> None:
        """Handle incoming notification from other side."""
        # Notification handling implementation

三、Transport 层简介

MCP 的 Transport layer 负责处理 MCP Client 和 MCP Server 的底层通信,它决定了消息如何发送和接收。

All transports use JSON-RPC 2.0 to exchange messages.

MCP 的 Transport layer 采用 JSON-RPC 2.0 协议 来传输数据,并且支持两种传输模式:

  • stdio:
    • 基于标准输入/输出流(stdio)
    • 适用于本地进程间通信(如IDE插件与本地服务的交互)
  • HTTP-SSE:
    • 客户端→服务端:通过HTTP POST发送请求
    • 服务端→客户端:使用Server-Sent Events(SSE)实现服务端推送(如云端API调用)
    • 满足真实的使用场景

消息格式与 JSON-RPC 2.0

MCP 使用 JSON-RPC 2.0 协议 作为传输数据的格式。 ****MCP 的传输层(Transports)负责处理底层通信细节,具体包括:

  • 编码转换: 将 MCP 协议消息(如请求或响应)转换为符合 JSON-RPC 2.0 格式的消息,以便通过 HTTP、WebSocket 等传输协议发送。
  • 解码转换: 将接收到的 JSON-RPC 消息解析并还原为 MCP 协议消息,供客户端或服务器处理。

传输层的转换过程确保了 MCP 协议的抽象性与传输无关性,即 MCP 可灵活适配多种传输方式而不影响其核心逻辑。

三种主要的消息类型

MCP 定义了三种主要的消息类型

Request

代码语言:javascript
代码运行次数:2
运行
AI代码解释
复制
{
  jsonrpc: "2.0",
  id: number | string,
  method: string,
  params?: object
}

Response

代码语言:javascript
代码运行次数:1
运行
AI代码解释
复制
{
  jsonrpc: "2.0",
  id: number | string,
  result?: object,
  error?: {
    code: number,
    message: string,
    data?: unknown
  }
}

Notifications

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
{
  jsonrpc: "2.0",
  method: string,
  params?: object
}

Stdio 模式: 本地交互的“极简之道”

模式简介

stdio模式是MCP协议定义的两种标准传输机制之一,采用同步阻塞模型进行通信。该模式通过操作系统的管道机制实现数据交换,主要面向本地批处理任务或简单工具调用场景。其优势在于实现简单、低延迟且无需网络配置,但仅限本地使用,不支持分布式部署。

核心思想

MCP Server 作为 MCP Client 的一个子进程启动,通过进程的标准输入(stdin)和标准输出(stdout)传输数据,客户端和服务端通过管道(Pipe)或文件描述符直接交换信息。

工作机制

  1. 进程管理机制
    1. 客户端将MCP服务端作为子进程启动,通过fork/exec等系统调用建立进程间通信管道
    2. 服务端运行期间,客户端负责监控进程状态并处理异常终止。
  2. 消息传输规范
    1. 使用UTF-8编码的JSON-RPC 2.0格式
    2. 消息以换行符\n分隔,且禁止包含嵌入换行符
    3. 严格区分标准输出(stdout)与标准错误(stderr),前者仅传输协议消息,后者用于日志输出
  3. 错误处理机制
    1. 服务端通过stderr输出日志信息,客户端可选择捕获、转发或忽略这些日志。若检测到非法消息格式,通信双方应立即终止连接。

交互流程

适用场景

  • 构建命令行工具
  • 本地集成
  • 简单的进程通信
  • 与 Shell 脚本一起工作

SSE模式:远程通信的“流式革命”

模式简介

SSE(Server-Sent Events)是MCP协议中基于HTTP协议实现的远程传输模式,通过HTTP长连接实现服务端到客户端的实时单向数据推送,配合HTTP POST完成双向通信。该模式主要解决AI应用场景中对话式会话状态保持、流式输出等需求,适用于需要远程访问或实时数据推送的场景,如云服务调用、多客户端监控等。

工作机制

SSE 模式通过 两个独立通道 实现双向通信:

  1. SSE 通道(服务器→客户端)
    • 客户端通过 HTTP GET 请求建立长连接(如 /sse 端点),接收服务器推送的 JSON-RPC 格式事件流。
    • 数据以 text/event-stream 格式传输,支持自动重连机制。
  2. HTTP POST 通道(客户端→服务器)
    • 客户端通过向指定端点(如 /messages)发送 JSON-RPC 请求,触发服务器执行操作(如调用工具、查询资源)。
    • 请求与响应通过 会话 ID(session_id)请求 ID(request_id) 关联,确保异步处理的准确性。

关键特性

  • 伪双工通信:通过分离的 HTTP 请求和 SSE 流模拟双向交互,而非 WebSocket 的单一全双工通道。
  • 无状态与异步:服务器接收 POST 请求后立即返回 202 状态码(仅确认接收),处理结果通过 SSE 流异步返回。

交互流程

以下为一次完整会话的步骤(以调用远程工具为例):

连接建立

  • 客户端向 /sse 发送 GET 请求,建立 SSE 长连接。
  • 服务端生成唯一 session_id 并通过 SSE 流推送至客户端。

请求发送

  • 客户端构造 JSON-RPC 请求(包含 methodparamsrequest_id),通过 HTTP POST 发送至 /messages 端点,并在 Header 中携带 session_id
  • 示例请求格式: { "jsonrpc": "2.0", "id": 1, "method": "get_weather", "params": { "city": "北京" } }

服务端处理

  • 服务端返回 HTTP 202(Accepted),仅表示请求已接收,不包含处理结果。
  • 异步执行请求(如调用天气查询工具),完成后将结果封装为 JSON-RPC 响应,通过 SSE 通道推送。

结果推送与匹配

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
{
  "jsonrpc": "2.0",
  "id": 1,
  "result": {
    "temperature": 25,
    "humidity": "60%"
  }
}
  • 客户端根据 request_id 将响应与原始请求关联。
  • 服务端通过 SSE 流发送响应,包含与请求匹配的 request_id

连接终止

  • 客户端主动关闭 SSE 连接,或服务端在空闲超时后终止会话。

应用场景

  • 实时监控 AI 工具调用进度(如长文本生成)。
  • 多客户端共享远程资源(如集中式数据库查询服务)。
  • 浏览器兼容性要求高的实时交互应用(如 Web 端 AI 助手)。
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2025-04-21,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 海天二路搬砖工 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
MCP、传统API与函数调用的解析
传统API通过预定义端点暴露功能,客户端需严格遵循接口规范进行交互。其核心特征包括:
蝉羽
2025/06/04
2230
MCP、传统API与函数调用的解析
工良出品 | 长文讲解 MCP 和案例实战
示例项目地址:https://github.com/whuanle/mcpdemo
郑子铭
2025/06/07
2290
工良出品 | 长文讲解 MCP 和案例实战
智能体间协作的"巴别塔困境"如何破解?解读Agent通信4大协议:MCP/ACP/A2A/ANP
AI 智能体的兴起触发了AI应用协作的新领域。这些智能体不再局限于被动的聊天机器人或独立的系统,它们现在被设计用于推理、计划和协作ーー跨任务、跨域甚至跨组织。但随着这一愿景成为现实,一个挑战很快浮出水面: 智能体如何以一种安全、可伸缩和可互操作的方式可靠地相互交流、共享上下文并共同做出决策?
半吊子全栈工匠
2025/05/19
3150
智能体间协作的"巴别塔困境"如何破解?解读Agent通信4大协议:MCP/ACP/A2A/ANP
一文详解模型上下文协议MCP
Anthropic 公司在 2024 年 11 月发布了模型上下文协议 (Model Context Protocol, MCP)。开发者社区最初对此反应积极,但很少有人意识到它的全部潜力。 快进到 2025 年 3 月,MCP 突然成为了人工智能领域最热门的话题。
致Great
2025/04/19
7600
一文详解模型上下文协议MCP
一文看懂Google的A2A协议以及与MCP的区别
谷歌最近发布了 Agent-to-Agent(A2A)开放协议,旨在实现智能体之间的互操作性,弥合不透明智能体系统之间的差距。此前,模型上下文协议(MCP)已经成为连接大型语言模型(LLM)与数据、资源和工具的新标准,简化了不同模型和框架之间的“功能调用”,并创建了一个工具服务生态系统,降低了智能体与工具之间连接的复杂性。随着越来越多的平台采用 MCP,这一趋势有望继续发展。如果还不了解MCP协议的同学,可查看我们上一篇文章一文读懂 MCP!大模型如何用它连接世界,打造更智能的 AI Agent?。
AgenticAI
2025/04/18
3930
一文看懂Google的A2A协议以及与MCP的区别
一文读懂 MCP!大模型如何用它连接世界,打造更智能的 AI Agent?
最近,MCP[1](模型上下文协议,Model Context Protocol)在 AI 圈子里火了起来。然而,很多人对它的概念仍然感到困惑,包括我在最初接触时也是如此。
AgenticAI
2025/03/19
1.3K0
一文读懂 MCP!大模型如何用它连接世界,打造更智能的 AI Agent?
什么是MCP协议?MCP的技术架构与核心原理是什么?MCP封装了哪些协议?
在现代 AI 的发展中,模型与外部数据源和工具的交互变得越来越复杂。为了解决这个问题,Model Context Protocol (MCP) 被提出,它是一种开放标准,旨在为 AI 模型与外部资源之间提供统一的连接方式。由 Anthropic 于 2024 年推出,MCP 希望能够像 USB-C 接口一样成为 AI 系统与各种数据源和工具之间的“通用接口”。这意味着,不同的 AI 应用可以轻松与多种数据源、工具进行“即插即用”的连接,无需再为每种不同的数据源开发独立的集成方法。
猫头虎
2025/03/23
2.3K0
什么是MCP协议?MCP的技术架构与核心原理是什么?MCP封装了哪些协议?
成熟工程师 1 天完成调试,AI 工程实践被 MCP 彻底颠覆?
去年 11 月,Anthropic 发布了模型上下文协议 (MCP),这是 AI 应用程序组件与外部系统或工具之间通信的新标准。开发者社区迅速采用了该协议,并部署了超过 1000 个 MCP 服务器。如今,随着 AWS、GitHub 等巨头公司,甚至 Anthropic 的“竞争对手”OpenAI 也正式采用 MCP,MCP 在商业领域也获得了越来越多的关注。
深度学习与Python
2025/06/08
1230
成熟工程师 1 天完成调试,AI 工程实践被 MCP 彻底颠覆?
JSON-RPC 2.0 规范(中文版)
JSON-RPC是一个无状态且轻量级的远程过程调用(RPC)协议。 本规范主要定义了一些数据结构及其相关的处理规则。它允许运行在基于socket,http等诸多不同消息传输环境的同一进程中。其使用JSON(RFC 4627)作为数据格式。
耕耘实录
2021/12/07
4.6K0
大模型应用系列:两万字解读MCP
【引】AI Agent的实际效能高度依赖于其可集成的工具生态。当Agent无法接入关键数据源或功能接口时,其应用价值将大幅受限。这一核心挑战直接决定了Agent能否在真实场景中发挥作用。
半吊子全栈工匠
2025/04/26
91.2K55
大模型应用系列:两万字解读MCP
MCP协议从原理到开发:一文读懂大模型交互的标准化革命!
本文系统介绍了MCP协议在大模型交互标准化中的创新应用,通过技术解析+实践案例的方式,阐述了MCP协议的架构设计、开发实现原理及实际应用效果。重点探讨了MCP如何解决AI工具调用碎片化问题,并通过企业微信机器人开发实例展示MCP服务端/客户端开发全流程,干货满满点赞收藏!
腾讯云开发者
2025/04/18
2.8K1
MCP协议从原理到开发:一文读懂大模型交互的标准化革命!
工良出品 | 长文讲解 MCP 和案例实战
示例项目地址:https://github.com/whuanle/mcpdemo
痴者工良
2025/04/22
1.7K1
工良出品 | 长文讲解 MCP 和案例实战
​【刘文彬】以太坊RPC机制与API实例
原文链接:醒者呆的博客园,https://www.cnblogs.com/Evsward/p/eth-rpc.html
圆方圆学院
2018/12/24
1.9K0
一口气讲清楚:FC、MCP、A2A
前面几篇文章中,我介绍了AI大模型领域常见的几种专业术语,分别是:AGI、RAG、AIGC、LLM、MCP、EMB、向量库、训练集、多模态。了解基础概念和专业术语之后,有助于我们在工作和生活中深入学习和应用AI。
老_张
2025/05/12
3040
一口气讲清楚:FC、MCP、A2A
第十六章 分布式爬虫--准备工作
2. 分布式架构: 每个业务模块部署多个节点, 同一个模块之间节点是如何通信的. 不同模块之间节点是如何通信的
用户7798898
2020/09/27
1K1
第十六章   分布式爬虫--准备工作
构建基于 SSE 协议通信的 MCP Server 和 Client
在之前的系列教程中,我们编写的 MCP 服务器与 MCP 客户端是通过 stdio(Standard Input/Output,标准输入输出)来进行交互的。客户端通过启动服务器子进程,并利用标准输入(stdin)和标准输出(stdout)建立双向通信。这种模式导致 MCP 客户端与服务器之间存在强耦合,且每个服务器进程只能与启动它的客户端通信(1:1 的关系)。
Se7en258
2025/05/21
4260
构建基于 SSE 协议通信的 MCP Server 和 Client
MCP 协议更新详解:从 HTTP+SSE 到 Streamable HTTP
这一变更在解决原有方案中连接不可恢复、服务端长连接压力大等问题的同时,依然保留了
陈明勇
2025/04/18
2.5K5
大语言模型交互协议 MCP SDK Go-MCP 正式开源!
今天,ThinkInAI 团队(前身为 GoCN 团队)自豪地宣布,基于 Go 语言的大模型交互协议(Model Context Protocol)SDK —— Go-MCP 正式开源!
深度学习与Python
2025/04/10
1.5K0
大语言模型交互协议 MCP SDK Go-MCP 正式开源!
在浏览器使用 MCP,纯边缘函数实现 MCP Client & Server
下面是一个在线示例:https://mcp-on-edge.edgeone.site/?from=eo
EdgeOne 小助手
2025/05/09
5230
MCP(Model Context Protocol)好比大模型外挂!
最近Anthropic主导发布了MCP(Model Context Protocol,模型上下文协议)后,着实真真火了一把。熟悉AI大模型的人对Anthropic应该不会陌生,Claude 3.5 Sonnet模型就是他们发布的,包括现在的最强编程AI模型 3.7 Sonnet。今天我们来刨析下什么是MCP,AI大模型下,需要MCP吗?
有一只柴犬
2025/03/23
7962
MCP(Model Context Protocol)好比大模型外挂!
推荐阅读
相关推荐
MCP、传统API与函数调用的解析
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验