函数计算支持一键托管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请求时序图:
Client端发起一个 GET 请求,建立SSE长连接。(Connection1)
Server端回复
event:endpoint
类型的事件,将sessionId信息放入data 中返回。(Connection1)Client端使用第2步返回的sessionId信息发起首个HTTP POST 请求。(Connection2)
Server端迅速响应202,但无内容。(Connection2)
Server端返回第3步请求的实际消息。(Connection1)
Client端使用第2步返回的sessionId发起HTTP POST请求
initialized
作为确认。(Connection3)Server端迅速响应202,无内容。(Connection3)
Client端使用第2步返回的sessionId发起HTTP POST请求
list tools
。(Connection4)Server端迅速响应202,无内容。(Connection4)
Server端返回第8步请求的实际消息,即工具列表。(Connection1)
Client端使用第2步返回的sessionId发起HTTP POST请求
call tool
。(Connection5)Server端迅速响应202,无内容。(Connection5)
Server端返回第11步请求的实际消息,即工具调用结果。(Connection1)
MCP Client发起的SSE请求目前仅支持通过 /sse
路径进行访问。
函数计算支持 MCP 亲和能力
函数计算适配 MCP SSE 亲和策略
函数计算在系统层面实现了对携带相同sessionId的MCP 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 亲和调度能力。
通过函数计算创建MCP服务
创建函数,函数类型选择Web函数,运行环境选择MCP运行时。
通过Function AI创建MCP服务
通过API开启
调用API CreateFunction - 创建函数或UpdateFunction - 更新函数,通过SessionAffinity字段指定调用请求的亲和策略。SessionAffinity取值说明如下:
MCP_SSE:开启MCP SSE协议的请求亲和功能。
NONE或置空:无亲和效果。按照函数计算系统的默认调度策略路由请求。