作者:封崇
近期,中国第一AI开源社区魔搭(ModelScope)推出全新MCP广场,上架千余款热门的 MCP 服务。从当下火热的高德地图、网页抓取再到独家的支付宝,开发者/机构可以查看近1500种MCP的功能与应用场景,并通过MCP实验场直接上手使用。魔搭的加入无疑对国内 MCP 的发展开启了加速键。
既支持阿里云百炼 MCP服务之后,作为云上托管 MCP 服务的最佳运行时,函数计算 FC 为魔搭(ModelScope) MCP 提供弹性调用能力 ,实现开源 MCP Server 一键托管到云上,函数计算 FC 会准备好计算资源,并以弹性、可靠的方式运行 MCP 服务,按实际调用时长和次数计费,用户可以直接访问函数计算交付的 SSE 服务。欢迎您在魔搭(ModelScope)和函数计算 FC 上体验 MCP 服务。
云上托管 MCP 服务有什么挑战?
要回答这个问题,首先请跟着我在 ModelScope MCP 广场上创建一个 MCP 服务,并测试,对比自建 MCP 服务,你发现了什么?
1.在ModelScope MCP广场,选择一个MCP服务(比如高德地图)
2.输入高德地图的 API-Key,点击链接
大概1s左右时间,魔搭 MCP 就交付了一个SSE地址,可以用于在 client 进行测试
3.添加MCP服务后,去 MCP Playground 上测试
规模化托管多租 MCP 服务的问题
如果你更换一个其他的 MCP 服务或者换个账号,重复这个流程,发现平台生成的 MCP 地址是完全不同的。这说明魔搭的 MCP 服务是多租隔离的,为每个租户的每个 MCP 服务生成一个独立的 SSE 地址。 这个过程看似简单,实际上背后的技术挑战是非常高的,我们提炼下魔搭的具体需求:
1.上架大量的 MCP 服务,大部分都是开源 MCP 并且采用STDIO模式,使用uv、npx命令就能跑起来;
2.每个托管的 MCP 服务都要自动生成独立的 SSE 测试地址,生成速度要足够快。用户点击测试1s 左右就要完成地址的生成;
3.生成好的 MCP 服务地址能够被魔搭的 Playground 调用,要求托管的 MCP 服务稳定可靠;
要满足这些需求,对于底层的计算平台要求非常高,如果采用纯自建的方案:
1.自购服务器:实时弹出服务器时间都是分钟级的,无法满足秒级启动的需求,需要提前创建好一批服务。这样在稀疏调用时会产生极大的资源浪费。另外MCP服务涉及用户的敏感信息需要在启动时加载,因此多个租户复用相同实例来提升利用率的方案是不安全的;
2.自建网关,为每个 MCP 服务创建API并关联后端地址,API需要频繁的创建和销毁,管理API的成本很高;
那么有没有既省资源成本,又省运维成本 ,还能满足需求的解决方案呢?魔搭选择了函数计算作为 MCP 的运行时托管,并且在短时间内上线了MCP市场, 接下来我们揭秘下魔搭选择函数计算的原因。
为什么魔搭会选择函数计算支持MCP服务?
函数计算作为全托管的 Serverless 服务,有以下运行MCP服务的天然优势:
-
事件触发,内置网关,HTTP触发器自动生成公网及内网的http地址:解决MCP网关调用侧需求;
-
毫秒级弹性能力,按请求付费,最小支持0.05 vCPU/128M的实例规格:解决MCP服务弹性调度的需求;
-
运行时支持单实例多并发:一个实例serve多个MCP请求,减少实例频繁冷启动的开销;
-
多租安全隔离:MicroVM安全沙箱,提供虚拟机级别隔离能力;
-
完善的语言支持:Node.js、Python、Java、Golang、C#。对于Node.js、Python解释型语言通过WebIDE可以实现快速的调试和运维;
但是这些对于托管MCP还不够,函数计算上线了完整的 MCP 运行时扩展能力 ,针对MCP的特点又做了如下升级:
发布SSE会话亲和性能力,提升 MCP SSE 访问的可靠性
SSE(Server-Sent Events)是一种基于 HTTP 的服务器到客户端的单向实时通信协议:
-
MCP客户端的connect 回向服务端发送
Get /sse
请求,服务端建立SSE长连接,并且返回带有sessionid的事件流; -
后续的客户端请求通过
post /message?sessionId=xxx
向服务端发送消息,服务端通过SSE的长连接持续向客户端推送数据;
SSE本质上是一种有状态通信,由服务端维护会话的状态,当同一个会话的客户端post请求调度到不同的服务端实例时,由于会话状态不匹配会到导致服务端连接失败,最终影响client的效果。
Serverless 的弹性调度本身是无状态的,其负载均衡不会感知到SSE的会话状态,因此使用Serverless计算环境托管MCP server时,保证SSE会话的亲和性是一个关键挑战,现在社区以及其他厂商也正在攻克:
-
smithery.ai 采用WebSocket替换了SSE,WebSocket作为全双工通信自带会话亲和性能力,即使突增流量弹出新的实例,相同的client始终会连到同一个服务端实例。WebSocket对于 Serverless运行环境的适配确实更加友好,各个云厂商的Serverless平台也都支持WebSocket,但这种方式的缺点是对client有侵入,需要client进行改造;
-
MCP社区上有个关于MCP Hosting的讨论,关于是否引入WebSocket各方的态度不一,以Glama为代表认为SSE在扩展性要更优;
-
MCP 官方3月底推出了最新的Streamable HTTP协议,计划替代旧版 HTTP+SSE,支持双向流式通信,简化端点管理(单一
/mcp
端点),但同样支持主动开启SSE长连接以及旧版SSE协议的向后兼容。
函数计算上线了会话亲和性特性,并且首先支持了MCP SSE策略,保证同一个MCP session请求永远调度到同一个实例。
当开启会话亲和性后,同一个sessionid的请求会被路由到同一个函数实例上

没开启会话亲和性时,突增流量会很容易导致同一个client的sessionid访问到不同实例上,造成5xx错误。

会话亲和性当前处于Beta阶段,目前还在部分region进行灰度,近期会对全部region开放。FaaS环境下的会话亲和性实现非常复杂,不光要考虑session的调度,还要考虑各种场景下的异常行为,函数计算后面会揭秘这部分的技术实现。
函数计算的会话亲和性是针对有状态连接的一种通用能力,并非和MCP SSE完全绑定。官方的Streamable HTTP 针对SSE做了重大升级,但同样支持session的有状态会话,函数计算的会话亲和性后续同样会支持Streamble HTTP的会话亲和性策略。
支持将传统 STDIO 模式的 MCP server 自动转换成SSE服务,业务零改造
通过FunctionAI,可以配置MCP服务的协议类型。当配置STDIO协议时,部署后会自定生成SSE访问地址,函数计算会启动SSE代理,将SSE请求转发到STDIO服务上。


发布Bearer鉴权能力,传统STDIO无鉴权能力的MCP server托管后自带鉴权能力
通过FunctionAI,只需要开启鉴权配置,就可以使用平台提供的只读Token访问MCP 服务,让传统STDIO的服务自带鉴权能力。


发布 Debian12 运行时
函数计算发布了custom.debian12运行时,并且支持了Python3.12/Python3.11/Python3.10、Node.js22/Node.js20/Node.js18、Java11/Java17/Java21 主流运行时版本,内核更小启动速度更快,对于MCP npx/uv直接启动的场景更加友好。
总结
从百炼再到魔搭,越来越多的平台选择了函数计算作为云上MCP托管的解决方案,头部平台的规模化实践印证了 Serverless 在MCP托管领域的技术领先性,函数计算针对MCP做的多项优化价值正在逐渐体现,随着更多的落地案例,函数计算会发布更多AI应用相关的功能,敬请期待。如果您有更多问题与我们交流请添加钉钉群(群号:64970014484)。