MCP SSE亲和配置

更新时间:
复制 MD 格式

在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官方标准Client或SDK

验证MCP SSE亲和功能

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

常见问题

为什么MCP SSE亲和不生效?

可能原因:

  1. 未使用MCP官方标准Client或SDK

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

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

排查步骤:

  1. 确认使用MCP官方标准Client或SDK

  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 连接返回