MCP SSE亲和配置

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协议规范。

开启会话亲和

  1. 登录函数计算控制台

  2. 进入函数列表,选择目标函数或创建函数

    创建函数时,可以直接在高级配置区域,找到隔离性、亲和性配置项,进行后续配置后创建
  3. 在函数详情页面,点击配置标签页

  4. 高级配置区域,找到隔离性、亲和性配置项

  5. 点击隔离性、亲和性,展开配置面板

  6. 开启会话亲和开关

选择MCP SSE亲和类型

  1. 在会话亲和配置区域,选择MCP SSE 亲和单选按钮

  2. 系统自动显示MCP SSE亲和的配置选项

配置SSE路径

目的:设置用于建立SSE连接的请求路径。

操作步骤

  1. SSE 路径输入框中,输入SSE连接请求的路径

    • 默认值:/sse

    • 可根据实际需求自定义路径

    • 注意:确保SSE路径与函数代码中的路径一致

配置会话参数

目的:设置单实例可同时处理的Session数量。

操作步骤

  1. 单实例并发 Session 数:设置单实例可同时处理的最大Session

    • 默认值:20

    • 取值范围:1-200

    • 建议:测试场景可设置为较小值(如10);生产环境根据业务需求调整

  2. 点击部署按钮保存配置

重要提示

  • SSE首请求暂不支持携带query参数

  • 开启会话亲和后,系统会自动将单实例并发度调整为200(系统默认值,不可手动调整)

  • MCP SSE亲和需要函数代码实现MCP协议规范,必须使用MCP官方标准ClientSDK

验证MCP SSE亲和功能

请参考 MCP官方文档Build an MCP client,可使用函数计算提供的默认 http 触发器域名或自定义域名,通过标准的 MCP Client向函数发起请求,验证亲和配置。

常见问题

为什么MCP SSE亲和不生效?

可能原因

  1. 未使用MCP官方标准ClientSDK

  2. 函数代码未正确实现MCP协议规范

  3. SSE路径配置与函数代码不一致

排查步骤

  1. 确认使用MCP官方标准ClientSDK

  2. 检查函数代码是否正确实现MCP协议规范

  3. 检查首请求路径、函数侧配置的自定义路径是否一致。

如何选择SSE路径?

建议

  • 默认使用/sse,这是MCP协议的标准路径

  • 如需自定义,确保与函数代码中的路径一致

附:协议剖析(MCP SSE)

事件格式

字段

说明

event

指定事件类型(如 endpoint, message, error

data

包含实际内容的数据体(JSON、文本等)

id(可选)

唯一标识事件,用于断线重连时恢复

retry(可选)

断线后重新连接的时间间隔(毫秒)

示例:

event: endpoint
data: {"sessionId": "abc123", "version": "2025-06-18"}

MCP 如何使用 SSE?

MCP 利用 SSE 实现了 客户端与服务端之间的双向通信通道,其关键在于:

  1. 首次建立 SSE 连接时生成并返回 sessionId

  2. 后续所有请求携带该 sessionId 以实现亲和

  3. 响应结果通过原 SSE 连接推送回客户端

关键点:SSE 是“消息通道”,而 HTTP POST 是“请求通道”

典型 MCP SSE 请求时序图

image.svg

  1. Client 发起 GET /sse → 建立 SSE 长连接(Connection1)

  2. Server 返回 event: endpoint, data: { "sessionId": "abc123" }

  3. Client 使用 sessionId 发起 POST /message?sessionId=abc123 → Connection2

  4. Server 返回 202(无内容),表示已接收

  5. Server 通过 Connection1 推送实际响应消息

  6. Client 发起 POST /initialized?sessionId=abc123 → Connection3

  7. Server 返回 202(无内容)

  8. Client 发起 POST /list tools?sessionId=abc123 → Connection4

  9. Server 返回 202(无内容)

  10. Server 通过 Connection1 推送工具列表

  11. Client 发起 POST /call tool?sessionId=abc123 → Connection5

  12. Server 返回 202(无内容)

  13. Server 通过 Connection1 推送调用结果

图注

  • Connection1:SSE 长连接(用于接收推送)

  • Connection2~5:HTTP POST 请求(用于发送指令)

  • 所有响应均通过原 SSE 连接返回