作者:封崇

近期,中国第一 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 服务(比如高德地图)

  1. 输入高德地图的 API-Key,点击链接

大概 1s 左右时间,魔搭 MCP 就交付了一个 SSE 地址,可以用于在 client 进行测试

  1. 添加 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 服务的天然优势:

  1. 事件触发,内置网关,HTTP 触发器自动生成公网及内网的 http 地址:解决 MCP 网关调用侧需求;
  2. 毫秒级弹性能力,按请求付费,最小支持 0.05 vCPU/128M 的实例规格:解决 MCP 服务弹性调度的需求;
  3. 运行时支持单实例多并发:一个实例 serve 多个 MCP 请求,减少实例频繁冷启动的开销;
  4. 多租安全隔离:MicroVM 安全沙箱,提供虚拟机级别隔离能力;
  5. 完善的语言支持: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【1】 采用 WebSocket 替换了 SSE,WebSocket 作为全双工通信自带会话亲和性能力,即使突增流量弹出新的实例,相同的 client 始终会连到同一个服务端实例。WebSocket 对于 Serverless 运行环境的适配确实更加友好,各个云厂商的 Serverless 平台也都支持 WebSocket,但这种方式的缺点是对 client 有侵入,需要 client 进行改造;
  • MCP 社区上有个关于 MCP Hosting【2】 的讨论,关于是否引入 WebSocket 各方的态度不一,以 Glama【3】 为代表认为 SSE 在扩展性要更优;
  • MCP 官方 3 月底推出了最新的 Streamable HTTP【4】协议,计划替代旧版 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【5】,可以配置 MCP 服务的协议类型。当配置 STDIO 协议时,部署后会自定生成 SSE 访问地址,函数计算会启动 SSE 代理,将 SSE 请求转发到 STDIO 服务上。

发布 Bearer 鉴权能力,传统 STDIO 无鉴权能力的 MCP server 托管后自带鉴权能力

通过 FunctionAI【6】,只需要开启鉴权配置,就可以使用平台提供的只读 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)。

【1】smithery.ai

https://smithery.ai/

【2】MCP Hosting

https://github.com/modelcontextprotocol/modelcontextprotocol/discussions/220#discussioncomment-12857800

【3】Glama

https://glama.ai/playground/ioeJMKTys2

【4】Streamable HTTP

https://modelcontextprotocol.io/specification/2025-03-26/basi...

【5】Function AI

https://help.aliyun.com/zh/functioncompute/fc-3-0/what-is-a-s...

【6】Function AI

https://help.aliyun.com/zh/functioncompute/fc-3-0/what-is-a-s...


阿里云云原生
1.1k 声望317 粉丝