在MCP(Model Context Protocol)Server场景中,需要确保同一MCP会话的请求路由到同一个函数实例以保持上下文一致性。MCP SSE亲和功能基于MCP SSE协议,系统拦截SSE首个回包的会话ID,将携带相同会话ID的请求路由到已绑定的实例,适用于托管MCP Server的场景。
核心配置
在函数配置页面的高级配置 > 隔离性、亲和性中,开启会话亲和开关,选择MCP SSE 亲和,配置SSE 路径(默认/sse)和单实例并发 Session 数,点击部署即可启用。
使用MCP官方标准Client建立SSE连接后,系统自动提取Session ID并实现亲和路由。
适用范围
通用限制:建议使用前阅读会话亲和通用限制及原理说明
运行时限制:
使用内置运行时 → 不支持 MCP SSE 亲和。
使用 MCP 运行时 → 仅支持 MCP 亲和(含 SSE)。
其他运行时无此限制。
客户端要求:必须使用 MCP 官方标准 Client 或 SDK 发起请求,否则无法建立有效亲和连接。
会话生命周期:最大生命周期等于函数的最大超时时间。超出后,服务端断开连接;重新连接将生成新会话 ID,不再保证路由至原实例。
访问方式限制:仅支持通过 HTTP 触发器 或 自定义域名 访问。
请求限制:
首次 SSE 请求暂不支持携带 query 参数。
单实例可同时处理多个Session(默认20个,最大200个),当单实例下绑定的Session数达到上限时,系统自动创建新实例
SSE长连接占用1个并发度,Message请求占用N个并发度,共享200并发度配额
不支持 SessionAPI 管理。
配置MCP SSE亲和
流程概述
配置MCP SSE亲和包括三个步骤:开启会话亲和、选择MCP SSE类型、配置SSE路径和参数并部署。需要确保函数代码实现MCP协议规范。
开启会话亲和
选择MCP SSE亲和类型
在会话亲和配置区域,选择MCP SSE 亲和单选按钮
系统自动显示MCP SSE亲和的配置选项
配置SSE路径
目的:设置用于建立SSE连接的请求路径。
操作步骤:
在SSE 路径输入框中,输入SSE连接请求的路径
默认值:
/sse可根据实际需求自定义路径
注意:确保SSE路径与函数代码中的路径一致
配置会话参数
目的:设置单实例可同时处理的Session数量。
操作步骤:
单实例并发 Session 数:设置单实例可同时处理的最大Session数
默认值:20
取值范围:1-200
建议:测试场景可设置为较小值(如10);生产环境根据业务需求调整
点击部署按钮保存配置
重要提示:
SSE首请求暂不支持携带query参数
开启会话亲和后,系统会自动将单实例并发度调整为200(系统默认值,不可手动调整)
MCP SSE亲和需要函数代码实现MCP协议规范,必须使用MCP官方标准Client或SDK
验证MCP SSE亲和功能
请参考 MCP官方文档Build an MCP client,可使用函数计算提供的默认 http 触发器域名或自定义域名,通过标准的 MCP Client向函数发起请求,验证亲和配置。
常见问题
为什么MCP SSE亲和不生效?
可能原因:
未使用MCP官方标准Client或SDK
函数代码未正确实现MCP协议规范
SSE路径配置与函数代码不一致
排查步骤:
确认使用MCP官方标准Client或SDK
检查函数代码是否正确实现MCP协议规范
检查首请求路径、函数侧配置的自定义路径是否一致。
如何选择SSE路径?
建议:
默认使用
/sse,这是MCP协议的标准路径如需自定义,确保与函数代码中的路径一致
附:协议剖析(MCP SSE)
事件格式
字段 | 说明 |
| 指定事件类型(如 |
| 包含实际内容的数据体(JSON、文本等) |
| 唯一标识事件,用于断线重连时恢复 |
| 断线后重新连接的时间间隔(毫秒) |
示例:
event: endpoint
data: {"sessionId": "abc123", "version": "2025-06-18"}MCP 如何使用 SSE?
MCP 利用 SSE 实现了 客户端与服务端之间的双向通信通道,其关键在于:
首次建立 SSE 连接时生成并返回 sessionId
后续所有请求携带该 sessionId 以实现亲和
响应结果通过原 SSE 连接推送回客户端
关键点:SSE 是“消息通道”,而 HTTP POST 是“请求通道”
典型 MCP SSE 请求时序图
Client 发起 GET /sse → 建立 SSE 长连接(Connection1)
Server 返回 event: endpoint, data: { "sessionId": "abc123" }
Client 使用 sessionId 发起 POST /message?sessionId=abc123 → Connection2
Server 返回 202(无内容),表示已接收
Server 通过 Connection1 推送实际响应消息
Client 发起 POST /initialized?sessionId=abc123 → Connection3
Server 返回 202(无内容)
Client 发起 POST /list tools?sessionId=abc123 → Connection4
Server 返回 202(无内容)
Server 通过 Connection1 推送工具列表
Client 发起 POST /call tool?sessionId=abc123 → Connection5
Server 返回 202(无内容)
Server 通过 Connection1 推送调用结果
图注:
Connection1:SSE 长连接(用于接收推送)
Connection2~5:HTTP POST 请求(用于发送指令)
所有响应均通过原 SSE 连接返回