菜单

SSE 传输

相关源文件

SSE (Server-Sent Events) 传输通过 Server-Sent Events 协议,在 HTTP 上提供 MCP 客户端和服务器之间的实时双向通信。此传输支持持久连接和服务器发起的通信能力,非常适合需要实时更新和通知的应用。

有关其他传输机制的信息,请参阅 传输机制。有关基于 stdio 的通信,请参阅 Stdio 传输。有关基于 HTTP 会话的传输,请参阅 HTTP 传输

架构概述

SSE 传输实现了双端点架构,其中客户端建立持久的 SSE 连接以接收消息,并使用单独的 HTTP 端点发送请求。

来源:server/sse.go118-137 client/sse.go24-33 client/transport/sse.go

服务器端实现

基本服务器设置

SSEServer 提供了一个基于 HTTP 的 MCP 服务器,具备实时功能。

服务器可以通过最少的配置进行创建和启动。

来源:server/sse.go260-277 server/sse.go288-308

端点管理

SSE 服务器公开两个主要端点:

端点目的方法描述
/sse事件流GET建立持久的 SSE 连接
/message请求处理POST处理 JSON-RPC 请求

服务器通过 GetMessageEndpointForClient() 自动处理端点路径解析。

来源:server/sse.go449-464 server/sse.go331-447 server/sse.go466-537

会话管理

每个 SSE 连接都会创建一个 sseSession,它实现了多个会话接口。

会话会被自动注册和管理。

来源:server/sse.go22-116 server/sse.go350-369 server/sse.go77-96

客户端实现

客户端创建

SSE 客户端使用 NewSSEMCPClient() 函数创建。

客户端会自动处理 SSE 连接生命周期和消息路由。

来源:client/sse.go23-33

传输配置

SSE 传输支持各种配置选项。

可以静态或动态设置自定义标头。

来源:client/sse.go11-22 client/sse_test.go283-292

配置选项

服务器配置

SSE 服务器支持通过函数选项进行广泛配置。

选项目的示例
WithBaseURL设置服务器的基本 URLWithBaseURL("https://api.example.com")
WithStaticBasePath设置静态路径前缀WithStaticBasePath("/mcp")
WithDynamicBasePath动态路径生成WithDynamicBasePath(func(r *http.Request, sessionID string) string {...})
WithMessageEndpoint自定义消息端点路径WithMessageEndpoint("/api/message")
WithSSEEndpoint自定义 SSE 端点路径WithSSEEndpoint("/api/events")
WithKeepAlive启用心跳 pingWithKeepAlive(true)
WithKeepAliveInterval心跳频率WithKeepAliveInterval(30*time.Second)

来源:server/sse.go139-258

动态路径配置

对于多租户应用等高级场景,可以配置动态基本路径。

来源:server/sse.go181-194 server/sse_test.go884-996

实时功能

心跳机制

SSE 传输包含一个可选的心跳系统,它会发送周期性的 ping 消息。

心跳在服务器创建时配置。

来源:server/sse.go393-423 server/sse.go239-250

通知传递

服务器发起的通知通过 SSE 连接传递。

来源:server/sse.go371-391 server/sse.go559-585

高级用法模式

自定义 HTTP 处理程序

对于复杂的路由场景,SSE 服务器提供了独立的处理程序。

来源:server/sse.go636-692

上下文定制

自定义上下文函数允许注入与请求相关的数据。

来源:server/sse.go252-258 server/sse_test.go555-710

错误处理

SSE 传输提供强大的错误处理,并附带适当的 JSON-RPC 错误响应。

来源:server/sse.go539-557 server/sse.go474-483