MCP 正当时:FunctionAI MCP 开发平台来了!

MCP------AI 时代的"操作系统接口"

2024年11月,Anthropic发布模型上下文协议(MCP),这一开放标准迅速引发开发者社区的"协议觉醒"。其本质是通过标准化接口实现LLM与外部世界的双向交互,正如 USB 协议统一外设接入,MCP 正成为 AI 应用连接数字生态的通用总线。随着 Cursor、Claude 等开发工具相继集成,特别是 OpenAI 宣布全面兼容 MCP 协议,标志着 MCP 从技术实验迈入产业级标准,这一标准化接口正重塑AI与数字世界的交互范式。

截至2025年4月,MCP.so上已经已有超过8000个注册的MCP Server,涵盖数据处理、文件系统、API网关、聊天机器人、数据库等服务类别,这一数量还在迅速增长。

生态爆发期的痛点

尽管 MCP 生态呈现指数级增长,GitHub 仓库星标数半年突破 3.5万,但生产级落地仍面临三重挑战:

  1. 本地化瓶颈:当前绝大多数 MCP server 都采用传统 STDIO 模式,该模式没有鉴权能力(缺乏 OAuth 2.1 标准的双向认证机制、无法实现基于角色的访问控制),在复杂业务场景下暴露出调试困难、网络隔离性差等缺陷,难以实现访问内网环境的数据安全管控,内网穿透导致攻击面扩大;
  2. 弹性困境:MCP 工具调用流量呈现显著的非稳态特征以及"脉冲式"波动,比如智能客服系统的峰谷效应非常明显,传统虚拟机部署造成大量资源浪费;
  3. 开发断层:从本地调试到云端部署需要重构鉴权、变量管理、日志、中间件等基础组件,改造成本高,开发者大量的精力消耗在非业务代码的开发上;

Serverless 是 MCP 托管的最佳解决方案

我们观察到大部分的 MCP server 有以下特点:

  1. 稀疏调用,而且对算力的需求都比较小,0.5c/1G的规格基本能够应对大部分场景;
  2. 代码体积比较小(< 100MB),Nodejs、Python解释型语言是MCP的一等公民,大部分MCP server直接通过npx、uv就能一键运行;
  3. MCP server的迭代非常快,新增、修改或弃用MCP server的场景会非常高频,对MCP server元数据管理的需求非常普遍;

因此灵活部署、弹性扩展的运行时对于 MCP server 的托管非常契合,这恰恰是 Serverless 的最大优势。 以阿里云函数计算为例:

  1. 天然的事件驱动模型,提供毫秒级弹性能力、按量付费、安全沙箱的运行时环境,完美解决了云上托管对于性能、成本、安全的需求;
  2. 官方对于 Nodejs、Python 运行时的支持完善,内置代码包加速能力以及层的扩展,大幅降低代码启动时间;
  3. 控制台、SDK、ServerlessDevs 工具提供丰富的函数元数据的管理能力;

这些能力让 Serverless 正成为托管 MCP 的最优解。作为 MCP 的最佳运行时,函数计算已经支持阿里云百炼 MCP 服务。

Function AI 是基于函数计算构建的 Serverless AI 应用开发平台,基于函数计算的运行时能力上线了完整的 MCP 开发能力,成为真正意义上的MCP 开发平台。您可以进入FunctionAI控制台,快速体验 MCP 服务的能力。

快速部署

方式一:通过模板一键部署

选择MCP模板

进入FunctionAI控制台,选择探索->筛选应用模板(MCP Server),选择一个MCP模板进行部署

填写模板配置,部署项目

查看部署进度

方式二:创建自定义MCP服务

创建空白项目

创建MCP服务

编辑MCP服务配置,完成后点击预览&部署

查看部署进度,等待部署完成

方式三:使用ServerlessDevs工具本地部署

FunctionAI 正式发布了 ServerlessDevs 工具的 MCP 组件,实现本地部署 MCP 工程到 FunctionAI 的能力

安装ServerlessDevs工具:

shell 复制代码
npm install @serverless-devs/s -g

初始化MCP项目

shell 复制代码
s init start-fcai-mcp-nodejs

查看s.yaml

yaml 复制代码
edition: 3.0.0
name: start-mcp-server-nodejs
access: 'default'
vars:
  region: 'cn-hangzhou'
resources:
  nodejs-stdio-hello-world:
    component: fcai-mcp-server
    props:
      region: ${vars.region}
      description: mcp server deployed by devs
      transport: stdio # stidio | sse
      runtime: nodejs20
      cpu: 1
      memorySize: 1024
      rootDir: ./code
      source:
        oss: auto
      build:
        default: #默认构建器
          # 构建环境
          languages:
            - nodejs20
          # 执行步骤
          steps:
            - run: npm install
            - run: npm run build
      startCommand: "node ./dist/index.js" # 启动命令
      instanceQuota: 1 # 实例数配额

执行部署

shell 复制代码
s deploy

登录到控制台,可以查看云端的部署详情

测试 MCP 服务

FunctionAI 支持托管 STDIO/SSE 协议的 MCP server。如果 MCP server 代码采用 STDIO,FunctionAI 会启动一个SSE服务来代理STDIO的请求,客户端访问需要使用SSE方式。

当 MCP 服务部署完成后,平台会生成一个 SSE 的连接地址,并且会生成 MCP server的schema 用于测试。

用户可以直接在控制台上测试连接、测试工具,也可以使用官方的 Inspector 在本地进行测试。

方式1:FunctionAI控制台测试

查看日志和监控

方式2:Inspector本地测试

复制FunctionAI生成的公网访问地址

本地启动inspector,输入访问地址进行调试

shell 复制代码
npx @modelcontextprotocol/inspector

高阶能力

鉴权

MCP 的鉴权只适用于 SSE 的协议,而且必须遵循 OAuth2.1协议标准,对于大量的 STDIO 的 MCP 服务托管的改造难度非常之高,企业落地 MCP 鉴权是一个非常痛点的问题。

FunctionAI 提供了网关侧的 Bearer 鉴权能力,用户只需要开启鉴权功能,使用平台生成的 Bearer Token,就可以让 MCP 服务自带鉴权能力。

使用方式

编辑服务配置,点击开启鉴权,保存并且部署。开启后,平台会对服务生成一个只读的Bearer Token。

测试鉴权生效

使用平台生成的Beaer Token,可以正常访问MCP服务

使用错误的token时,访问失败

使用本地的Inspector,输入服务的token,访问正常。

变量管理

很多的 MCP Server 代码都需要访问第三方服务,比如高德地图、Github 等,需要持有用户的访问秘钥,比如API-Key、AccessToken,这些秘钥通常以环境变量加载或者启动命令参数注入。

FunctionAI 提供了变量管理能力,并且支持敏感变量托管,可以实现 MCP 服务访问秘钥的安全可靠管理。

配置方式:设置服务变量

选择服务->服务变量,添加服务变量的Key和Value

加载方式1:环境变量

FunctionAI上配置的服务变量会默认注入到函数启动的环境变量中,MCP服务代码可以直接通过系统环境变量读取

加载方式2:启动参数

FunctionAI的服务变量支持通过${self.KEY_NAME}的方式引用,可以在启动命令中修改命令行参数,使用变量的引用,在启动阶段注入变量的值。

绑定代码仓库进行持续部署

FunctionAI的MCP服务面向开发态能力,提供以代码仓库托管MCP 服务的能力。

使用方式:

  1. 编辑MCP服务配置,选择代码仓库,目前支持了Github、Gitee、Codeup、GitLab、OSS代码仓库。
  2. 选择仓库分支、MCP工程在代码仓库中的根目录
  3. 选择构建环境:对于多语言的工程,可以选择多个构建环境
  4. 编辑构建命令:例如 npm build、pip install -r requirements.txt
  5. 可选:开启构建缓存,缓存目录根据不同语言可以设置~/.npm(Nodejs) 、~/.cache(Python)、~/.m2、(Java)

绑定Git仓库后,如果指定的分支有push操作,会自动触发服务的持续部署

极速模式

对于延迟敏感性的业务,FunctionAI提供了极速模式,可以提前预留指定数量的实例快照,降低频繁冷启动带来的开销,并且只有在有活跃请求时才会产生vCPU费用,可以实现性能和成本的平衡。

另外由于MCP SSE请求的session机制,同一个session id访问到不同实例会导致上下文丢失,因此建议开启预置快照为1并且实例限额为1,这样可以让SSE请求打到不同弹性实例的概率更小。

:::info FunctionAI后面会上线会话亲和性能力,尽情期待。

:::

开启后,可以在函数监控页面看到预留实例的个数

总结与未来展望

FunctionAI 现在已经支持了完整的 MCP 开发能力,包括:

  • 部署形式上,支持模板直接部署、自定义MCP服务、ServerlessDevs工具本地部署
  • 托管能力上,支持STDIO/SSE的自动托管,无需业务改造既能生成可用于访问的SSE地址
  • 调试能力上,支持控制台直接调试以及Inspector本地调试
  • 二次开发能力上,支持变量管理、鉴权、绑定代码仓库进行持续部署
  • 可观测能力上,支持函数监控、实例监控以及日志
  • 弹性调度上,支持标准模式以及极速模式

MCP 的价值是统一了 Agent 和 LLM 之间的标准化接口,有了 MCP Server 的托管以及开发态能力只是第一步,接下来重要的是做好 MCP 和 Agent 的集成,FunctionAI 即将上线 Agent 开发能力,敬请期待。

更多内容关注 Serverless 微信公众号(ID:serverlessdevs),汇集 Serverless 技术最全内容,定期举办 Serverless 活动、直播,用户最佳实践。

相关推荐
江湖十年33 分钟前
go-multierror: 更方便的处理你的错误列表
后端·面试·go
Pandaconda15 小时前
【新人系列】Golang 入门(十三):结构体 - 下
后端·golang·go·方法·结构体·后端开发·值传递
楽码20 小时前
检查go语言变量内存结构
后端·go·计算机组成原理
快乐源泉1 天前
【设计模式】适配器,已有功能扩展?你猜对了
后端·设计模式·go
zhuyasen1 天前
首个与AI深度融合的Go开发框架sponge,解决Cursor/Trae等工具项目级开发痛点
后端·低代码·go
mayl2 天前
sync.Mutex 原理浅析
go
快乐源泉2 天前
【设计模式】状态模式,为何状态切换会如此丝滑?
后端·设计模式·go
我爱拉臭臭2 天前
趣味编程之go与rust的爱恨情仇
rust·go
迷茫运维路2 天前
K8S+Prometheus+Consul+alertWebhook实现全链路服务自动发现与监控、告警配置实战
运维·kubernetes·go·prometheus·consul