当前位置: 首页 > article >正文

MCP(Model Context Protocol)模型上下文协议 进阶篇3 - 传输

MCP 目前定义了两种标准的客户端-服务端通信传输机制:

  1. stdio(标准输入输出通信)
  2. HTTP with Server-Sent Events (SSE)(HTTP 服务端发送事件)

客户端应尽可能支持 stdio。此外,客户端和服务端也可以以插件方式实现自定义传输机制。


1. stdio 传输


在 stdio 传输中:

  • 客户端将 MCP 服务端作为子进程启动。
  • 服务端通过标准输入(stdin)接收 JSON-RPC 消息,并通过标准输出(stdout)写入响应。
  • 消息以换行符分隔,且不得包含嵌入的换行符。
  • 服务端可以将 UTF-8 字符串写入标准错误(stderr)以用于日志记录。客户端可以选择捕获、转发或忽略这些日志。
  • 服务端不得向 stdout 写入任何非法的 MCP 消息。
  • 客户端不得向服务端的 stdin 写入任何非法的 MCP 消息。


2. HTTP with SSE 传输


在 SSE 传输中,服务端作为独立进程运行,可以处理多个客户端连接。
服务端必须提供两个端点:

  1. SSE 端点:用于客户端建立连接并接收服务端消息。
  2. HTTP POST 端点:用于客户端向服务端发送消息。

当客户端连接时,服务端必须发送一个包含 URI 的 endpoint 事件,客户端使用该 URI 发送消息。所有后续客户端消息必须通过 HTTP POST 请求发送到此端点。
服务端消息以 SSE 消息事件的形式发送,消息内容以 JSON 编码在事件数据中。


3. 自定义传输 (Custom Transports)


客户端和服务端可以根据需要实现额外的自定义传输机制。MCP 协议与传输方式无关,可以在任何支持双向消息交换的通信通道上实现。
选择支持自定义传输的实现者必须确保其符合 MCP 定义的 JSON-RPC 消息格式和生命周期要求。自定义传输应记录其特定的连接建立和消息交换模式,以促进互操作性。


4. 补充说明:远程 MCP 连接的支持

官方文档中关于传输方式的描述可能会让部分开发者误解,认为 Remote MCP Connections(远程 MCP 连接)已经实现。实际上,当前的客户端和服务端都是在本地运行的。(当前如果需要连接远程服务器,需要在客户端-服务端连接后,由本地服务端再次向远程服务器发起连接)

这一点在官方的 2025 年路线图中有所提及:

实现 Remote MCP Connections是当前MCP项目组的最高优先级,允许客户端通过互联网安全地连接到 MCP 服务端。关键举措包括:

  1. 认证与授权 (Authentication & Authorization):增加标准化的认证能力,特别是专注于 OAuth 2.0 支持。
  2. 服务发现 (Service Discovery):定义客户端如何发现并连接到远程 MCP 服务器。
  3. 无状态操作 (Stateless Operations):探讨 MCP 是否可以支持无服务器环境(serverless environments),在这种环境中,操作需要尽可能无状态。

总结

MCP 目前支持两种标准传输方式:stdio 和 HTTP with SSE,同时也允许自定义传输机制。每种传输方式都有其特定的消息交换模式和实现要求。需要注意的是,当前 MCP 客户端-服务端通信传输机制的实现仅限于本地通信,远程连接的支持计划在 2025 年的路线图中逐步实现,包括认证授权、服务发现和无状态操作等关键功能。开发者可以根据需求选择合适的传输方式,并关注未来的MCP远程连接支持进展。


http://www.kler.cn/a/468499.html

相关文章:

  • 《AI 造梦:解锁虚拟场景与角色逼真丰富密码》
  • 新型大数据架构之湖仓一体(Lakehouse)架构特性说明——Lakehouse 架构(一)
  • 周记-Repeater中的children和item区别
  • CODESYS MODBUS TCP通信(AM400PLC作为主站通信)
  • 03、MySQL安全管理和特性解析(DBA运维专用)
  • 【insert 插入数据语法合集】.NET开源ORM框架 SqlSugar 系列
  • 互动为王:开源AI智能名片链动2+1模式商城小程序在社群运营中的深度应用与价值探索
  • 解锁AI Agent潜能:智能时代的信息处理利器2(18/30)
  • ES-深度分页问题
  • LeetCode题练习与总结:随机翻转矩阵--519
  • 使用FDBatchMove的几个问题总结
  • 数据结构:ArrayList与顺序表
  • 每日一学——日志管理工具(Graylog)
  • C++和OpenGL实现3D游戏编程【连载19】——着色器光照初步(平行光和光照贴图)(附源码)
  • 主从复制(Redis的特性)
  • 深入探索 Kubernetes:从基础概念到实战运维
  • 复杂对象的创建与组装 - 建造者模式(Builder Pattern)
  • flutter在windows平台中运行报错
  • BOOST 库在机器视觉中的应用及示例代码分析
  • 【C++】B2099 矩阵交换行
  • 基于 GitHub Actions 的流程自动化实践
  • Apache Traffic存在SQL注入漏洞(CVE-2024-45387)
  • 感冒之嗓子红肿,咽红且痛,微恶风寒,无浑身疼痛,无清鼻涕
  • Redis数据库笔记—— Hash(哈希)的扩容机制(rehash)
  • Python爬虫基础——requests模块
  • Harmony OS开发-ArkTS语言速成五