首页 > 其他分享 >MCP(Model Context Protocol)模型上下文协议 进阶篇3 - 传输

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

时间:2025-01-11 21:04:24浏览次数:3  
标签:Protocol 自定义 传输 进阶篇 Context MCP 连接 服务端 客户端

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远程连接支持进展。

标签:Protocol,自定义,传输,进阶篇,Context,MCP,连接,服务端,客户端
From: https://blog.csdn.net/aiqlcom/article/details/144952374

相关文章

  • LivePusherContext.stop
    LivePusherContext.stop(Objectobject)以Promise风格调用:不支持小程序插件:支持相关文档:live-pusher组件功能描述停止推流,同时停止摄像头预览参数Objectobject属性类型默认值必填说明successfunction否接口调用成功的回调函数failfunction......
  • LivePusherContext.stopBGM
    LivePusherContext.stopBGM(Objectobject)基础库2.4.0开始支持,低版本需做兼容处理。以Promise风格调用:不支持小程序插件:支持相关文档:live-pusher组件功能描述停止背景音参数Objectobject属性类型默认值必填说明successfunction否接口调......
  • LivePusherContext.stopPreview
    LivePusherContext.stopPreview(Objectobject)基础库2.7.0开始支持,低版本需做兼容处理。以Promise风格调用:不支持小程序插件:支持相关文档:live-pusher组件功能描述关闭摄像头预览参数Objectobject属性类型默认值必填说明successfunction否......
  • LivePusherContext.toggleTorch
    LivePusherContext.toggleTorch(Objectobject)基础库2.1.0开始支持,低版本需做兼容处理。以Promise风格调用:不支持小程序插件:支持相关文档:live-pusher组件功能描述切换手电筒参数Objectobject属性类型默认值必填说明successfunction否接......
  • LivePusherContext.switchCamera
    LivePusherContext.switchCamera(Objectobject)以Promise风格调用:不支持小程序插件:支持相关文档:live-pusher组件功能描述切换前后摄像头参数Objectobject属性类型默认值必填说明successfunction否接口调用成功的回调函数failfunction否......
  • LivePusherContext.clearStickers
    LivePusherContext.clearStickers(Objectobject)基础库2.14.0开始支持,低版本需做兼容处理。以Promise风格调用:不支持小程序插件:不支持功能描述清除所有贴纸特效参数Objectobject属性类型默认值必填说明successfunction否接口调用成功的回调函......
  • LivePusherContext.createOffscreenCanvas
    LivePusherContext.createOffscreenCanvas(objectoptions)基础库2.29.0开始支持,低版本需做兼容处理。小程序插件:支持相关文档:live-pusher组件功能描述创建一个能够承接LivePusher采集纹理的离屏Canvas,客户端8.0.31版本开始支持。参数objectoptions同wx.......
  • LivePusherContext.exitPictureInPicture
    LivePusherContext.exitPictureInPicture(Objectobject)基础库2.25.0开始支持,低版本需做兼容处理。以Promise风格调用:不支持小程序插件:支持功能描述退出小窗,该方法可在任意页面调用参数Objectobject属性类型默认值必填说明successfunction否接......
  • LivePusherContext.getMaxZoom
    LivePusherContext.getMaxZoom(Objectobject)基础库2.31.0开始支持,低版本需做兼容处理。以Promise风格调用:不支持小程序插件:支持相关文档:live-pusher组件功能描述获取最大缩放级别参数Objectobject属性类型默认值必填说明successfunction......
  • LivePusherContext.onCustomRendererEvent
    LivePusherContext.onCustomRendererEvent(stringevent,function|functioncallback)基础库2.29.0开始支持,低版本需做兼容处理。小程序插件:支持相关文档:live-pusher组件功能描述开启自定义渲染时,开发者通过此方法订阅相关事件,客户端8.0.31版本开始支持。参数......