本文概述了 MCP-Go 库中可用的传输机制。传输机制作为 MCP 客户端和服务器之间的通信层,负责处理 JSON-RPC 消息的交换。本页涵盖了传输接口、架构和可用实现。有关特定传输实现的详细信息,请参阅SSE 传输 和Stdio 传输。
MCP-Go 中的传输层抽象了客户端和服务器之间的通信细节。这种抽象允许客户端和服务器使用不同的协议进行通信,同时保持相同的核心 API 接口。
来源:client/transport/interface.go10-27 client/interface.go10-109
传输层由 Interface 在 transport 包中定义,它指定了任何传输实现必须提供的方法
来源:client/transport/interface.go10-27
传输接口提供以下关键功能
下图说明了典型的请求-响应流如何通过传输层工作
来源:client/transport/interface.go15-23
客户端和服务器之间的所有通信均使用 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(服务器发送事件)传输提供了一种在客户端和服务器之间进行基于 HTTP 通信的机制。它使用 HTTP 进行客户端请求,并使用服务器发送事件进行服务器响应和通知。
主要功能
有关 SSE 传输实现的详细信息,请参阅SSE 传输。
Stdio 传输使用标准输入和输出流进行通信。这对于嵌入式场景或当客户端和服务器在同一台机器上作为独立进程运行时特别有用。
主要功能
有关 Stdio 传输实现的详细信息,请参阅Stdio 传输。
选择合适的传输方式取决于部署场景和应用需求。下图说明了不同传输选项的初始化流程
来源:client/transport/interface.go10-27
传输层负责处理各种类型的错误
错误处理通常遵循此模式
来源: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 生态系统中所有通信的基础。