菜单

传输机制

相关源文件

目的与范围

本文概述了 MCP-Go 库中可用的传输机制。传输机制作为 MCP 客户端和服务器之间的通信层,负责处理 JSON-RPC 消息的交换。本页涵盖了传输接口、架构和可用实现。有关特定传输实现的详细信息,请参阅SSE 传输Stdio 传输

传输层架构

MCP-Go 中的传输层抽象了客户端和服务器之间的通信细节。这种抽象允许客户端和服务器使用不同的协议进行通信,同时保持相同的核心 API 接口。

来源:client/transport/interface.go10-27 client/interface.go10-109

传输接口

传输层由 Interfacetransport 包中定义,它指定了任何传输实现必须提供的方法

来源:client/transport/interface.go10-27

传输接口提供以下关键功能

  • 连接管理:建立、维护和关闭连接的方法
  • 请求-响应通信:发送 JSON-RPC 请求并接收响应
  • 通知处理:支持来自服务器的异步通知
  • 错误处理:正确传播通信错误

请求-响应流程

下图说明了典型的请求-响应流如何通过传输层工作

来源:client/transport/interface.go15-23

JSON-RPC 消息结构

客户端和服务器之间的所有通信均使用 JSON-RPC 2.0 消息执行,其结构如下

请求

{
  "jsonrpc": "2.0",
  "id": 1234,
  "method": "methodName",
  "params": { ... }
}

响应

{
  "jsonrpc": "2.0",
  "id": 1234,
  "result": { ... }
}

或在出现错误时

{
  "jsonrpc": "2.0",
  "id": 1234,
  "error": {
    "code": -32000,
    "message": "Error description",
    "data": { ... }
  }
}

通知

{
  "jsonrpc": "2.0",
  "method": "notification",
  "params": { ... }
}

来源:client/transport/interface.go29-45

可用传输机制

MCP-Go 提供两种主要的传输实现

传输描述用例连接类型
SSE(服务器发送事件)基于 HTTP 的传输,使用服务器发送事件进行双向通信Web 应用程序,通过 HTTP 暴露的服务基于网络的
Stdio使用标准输入/输出流进行通信命令行工具,嵌入式进程基于进程的

来源:client/transport/interface.go10-27

SSE 传输

SSE(服务器发送事件)传输提供了一种在客户端和服务器之间进行基于 HTTP 通信的机制。它使用 HTTP 进行客户端请求,并使用服务器发送事件进行服务器响应和通知。

主要功能

  • 通过 HTTP 进行双向通信
  • 支持长连接
  • 内置对异步通知的支持
  • 适用于基于 Web 的应用程序

有关 SSE 传输实现的详细信息,请参阅SSE 传输

标准输入输出传输

Stdio 传输使用标准输入和输出流进行通信。这对于嵌入式场景或当客户端和服务器在同一台机器上作为独立进程运行时特别有用。

主要功能

  • 简单的基于进程的通信
  • 无需网络配置
  • 与基于网络的传输相比开销更低
  • 适用于命令行工具和嵌入式进程

有关 Stdio 传输实现的详细信息,请参阅Stdio 传输

传输选择与初始化

选择合适的传输方式取决于部署场景和应用需求。下图说明了不同传输选项的初始化流程

来源:client/transport/interface.go10-27

传输层中的错误处理

传输层负责处理各种类型的错误

  1. 连接错误:建立或维护连接时出现的问题
  2. 协议错误:格式错误的消息或协议违规
  3. 超时错误:请求超出指定的超时时间
  4. 服务器错误:服务器在 JSON-RPC 响应中返回的错误

错误处理通常遵循此模式

来源:client/transport/interface.go15-16

与客户端接口集成

传输层是 MCP 客户端接口用于与服务器通信的关键组件。下表显示了客户端接口方法如何映射到传输操作

客户端方法传输操作
初始化SendRequest,方法为 "initialize"
列出资源SendRequest,方法为 "list_resources"
调用工具SendRequest,方法为 "call_tool"
订阅SendRequest,方法为 "subscribe"
接收通知SetNotificationHandler 以注册通知回调

来源:client/interface.go10-109 client/transport/interface.go10-27

结论

MCP-Go 中的传输层为客户端-服务器通信提供了灵活的抽象。通过支持多种传输机制(SSE 和 Stdio),该库可以在各种部署场景中使用,同时保持一致的 API。

在实现自定义客户端或服务器,或扩展现有功能时,了解传输层至关重要,因为它构成了 MCP 生态系统中所有通信的基础。

有关 SSE 和 Stdio 传输实现的具体细节,请参考其专用页面:SSE 传输Stdio 传输