MCP SSE亲和性调度

函数计算支持一键托管MCP Server,并通过深度适配MCP SSE协议,提供了一种即开即用的Serverless亲和调度能力,帮助您实现MCP服务的Serverless托管能力。

MCP SSE协议剖析

SSE(Server-Sent Events)是一种基于HTTP的技术,允许服务器实时向客户端推送事件或数据更新。在接收到订阅请求后,服务器会保持连接开启,并通过HTTP流向客户端推送事件。每个事件包含以下内容:

  • event:通过事件字段指定事件类型。

  • data:通过数据字段传递实际内容。

  • id(可选):用于唯一标识事件。

  • retry(可选):通过重试字段指定在断线后重新连接的时间间隔。

MCP基于SSE协议实现了客户端与服务端之间的请求交互及亲和路由策略。在MCP客户端首次发送SSE请求时,MCP服务会通过event:endpoint事件将sessionId放入data中并返回给客户端。后续客户端请求需携带该sessionId,以确保MCP服务能识别客户端的请求。

以下是一个最简单的典型MCP SSE请求时序图:

image.png

  1. Client端发起一个 GET 请求,建立SSE长连接。(Connection1)

  2. Server端回复event:endpoint类型的事件,将sessionId信息放入data 中返回。(Connection1)

  3. Client端使用第2步返回的sessionId信息发起首个HTTP POST 请求。(Connection2)

  4. Server端迅速响应202,但无内容。(Connection2)

  5. Server端返回第3步请求的实际消息。(Connection1)

  6. Client端使用第2步返回的sessionId发起HTTP POST请求initialized作为确认。(Connection3)

  7. Server端迅速响应202,无内容。(Connection3)

  8. Client端使用第2步返回的sessionId发起HTTP POST请求list tools(Connection4)

  9. Server端迅速响应202,无内容。(Connection4)

  10. Server端返回第8步请求的实际消息,即工具列表。(Connection1)

  11. Client端使用第2步返回的sessionId发起HTTP POST请求call tool(Connection5)

  12. Server端迅速响应202,无内容。(Connection5)

  13. Server端返回第11步请求的实际消息,即工具调用结果。(Connection1)

说明

MCP Client发起的SSE请求目前仅支持通过 /sse 路径进行访问。

函数计算支持 MCP 亲和能力

函数计算适配 MCP SSE 亲和策略

函数计算在系统层面实现了对携带相同sessionIdMCP Client请求的亲和。针对MCP Client发起的首个SSE请求,系统会拦截第一个event: endpoint类型的事件,并解析出数据中携带的sessionId信息,进而绑定sessionId与实例的映射关系。对于后续携带相同sessionId的请求,系统将路由到已绑定的实例,实现亲和行为。

MCP Session Quota 策略

MCP场景中,一个sessionId的完整生命周期内,SSE请求始终占用函数实例的一个并发配额,同时可以存在多个并发的call tool类业务请求。因此,一个sessionId在任意时刻需要至少2个或更多的并发配额,以满足业务需求。在函数计算的单实例多并发模式下,如果客户端同时发起多个SSE请求而占满一个实例的并发配额,会导致客户端将无法发起业务请求。为避免这类问题,函数计算引入Session Quota策略,即结合函数实例的并发度配置,限制每个实例最多绑定Round(函数单实例多并发配置 / 10) Session。

亲和策略异常行为

  • 当函数实例发生OOM(内存溢出)或崩溃等异常情况导致调度失败时,平台将返回500错误,客户端需捕获该异常并进行重连处理。

  • 当实例绑定的多个Session关联的总并发超出函数实例并发度限制时,平台将返回429限流错误。如有相关高并发需求,请联系我们申请。

  • 当执行UpdateFunction时,如果旧实例上仍有绑定的Session未释放,则关联Session的请求仍会路由至旧实例,直至所有Session连接断开后,系统才会回收旧实例。

开启MCP SSE亲和功能

通过函数计算控制台开启

通过函数计算控制台MCP运行时开发MCP服务或通过Function AI创建MCP服务时,创建的函数自带 MCP SSE 亲和调度能力。

通过API开启

调用API CreateFunction - 创建函数UpdateFunction - 更新函数,通过SessionAffinity字段指定调用请求的亲和策略。SessionAffinity取值说明如下:

  • MCP_SSE:开启MCP SSE协议的请求亲和功能。

  • NONE或置空:无亲和效果。按照函数计算系统的默认调度策略路由请求。