1. 前言
在系列文章首篇 MCP Server 实践之旅第 1 站:MCP 协议解析与云上适配,我们系统解构了 MCP 协议的核心架构,重点验证了存量 STDIO 协议服务的云端转型方案——通过轻量化改造(前置一个 mcp-proxy)实现向 SSE(Server-Sent Events)协议的实时通信升级。本文将延续技术纵深,聚焦当前企业拥抱 MCP 两大核心痛点:
1.1 如何将社区主流 STDIO MCP Server 一键转为企业内可插拔 Remote MCP Server?
在当前市面已经公开的各种 MCP Server,基本都是基于 STDIO 的实现,并且打包为独立的二进制可执行文件进行分发。其中 Node.js 和 python 占据了绝大多数,Node.js 生态通常通过 npx 提供,例如"npx -y @amap/amap-maps-mcp-server",Python 生态则以 uvx 提供,例如"uvx mcp-server-time --local-timezone=Asia/Shanghai",这种做法显然是十分明智。既迎合了不同技术栈同学开发 MCP Server 的习惯,也充分利用了极其可靠成熟的 npm 源,pypi 源进行 MCP Server 交付物的分发,同时这种交付方式不仅简化了部署流程,还显著降低了环境依赖和配置的复杂性,使得跨平台部署变得极其轻量和高效。
因此,将社区主流 STDIO MCP Server 一键转为自己的 MCP Server 是一个非常有价值的事情。至于为什么选择函数计算作为 MCP Server 托管运行时在 MCP Server 实践之旅第 1 站:MCP 协议解析与云上适配上已经有深入的阐述(总结下来就是函数计算作为 MCP Server 的运行时具有安全、成本、弹性等各维度的优势),本文不再赘述。
1.2 存量 API 的智能化重生之路
许多公司自己有存量 OpenAPI,怎么让自己的存量的 OpenAPI 转为 MCP Server 服务,从而可以被各种 Agent 调用,进行 AI 应用上的创新是一个不可阻挡的趋势和潮流。但传统 OpenAPI 向 MCP 协议迁移挑战,如何通过一个 OpenApi2MCP 适配器低成本实现存量 OpenAPI 一键转为 MCP Server 服务。
接下来,我们通过两个章节分别依次展开,通过具体的示例代码展示如何解决这两个痛点。
2. STDIO MCP Server 一键转为 SSE MCP Server
2.1 效果
1. 通过 FunctionAI 平台的模版 链接 进行一键部署,部署成功以后,就获得了一个 web 应用的 url。
3. 直接使用 "npx @modelcontextprotocol/inspector" 调试器调试部署成功的 MCP SSE 服务。
4. 之后,就可以把这个 url 注册到各种 Agent 客户端去消费,比如百练、Cherry Studio 等,以 Cherry Studio 为例。
2.2 原理
npx 运行原理
npx -y @modelcontextprotocol/server-github
等价于:
echo "{}" > package.json npm install @modelcontextprotocol/server-github ./node_modules/.bin/mcp-server-github
uvx 运行原理
uvx mcp-server-time
等价于:
pip install -t ./python mcp-server-time ./python/bin/mcp-server-time
"提交部署"按钮做的事情, 整体流程如下图:
1. mcp-helper 函数干的事情,就是把对应的依赖包下载下来,zip 上传到一个 oss bucket 上,函数计算支持使用 oss bucket 上的 object(zip 文件)创建函数,并且找到对应的启动命令。
2. 使用 supergateway 将启动 stdio server 的命令 expose 成 sse server 服务,有关 supergateway 在 FC 上的实践可以参考 MCP Server 实践之旅第 1 站:MCP 协议解析与云上适配 MCP Porxy 章节。
具体源码可以参考: 链接
2.3 合作方
- 宜搭: 钉钉客户端创建 ai 助理的技能正在灰度中
如果您想打造自己私有的 MCP Server 广场,可以参考该方案,比如交付物发布到内部的 npm 或者 pypi 仓库,仅仅简单修改上面的 mcp-helper 函数即可以实现。
3. 存量 OpenAPI 转 MCP Server
3.1 效果
1. 通过 FunctionAI 部署模版 链接,输入 JSON 格式的存量服务的 OpenAPI Spec 以及包含权限信息的请求头(如果有的话)。
⚠ 只有 OpenAPI Spec 中存在 securitySchemes
才需要填写 OpenApi 安全配置。
目前支持以下三种鉴权配置:
- API Key 认证
OpenAPI 示例定义如下:
components: securitySchemes: ApiKeyAuth: type: apiKey name: X-API-KEY in: header
需要填入的 “OpenApi 安全配置” 内容格式如下:
{ // 对应 apiKey 类型的 securityScheme 名称 "ApiKeyAuth": "your_api_key_here", }
- HTTP Basic 认证
OpenAPI 示例定义如下:
components: securitySchemes: BasicAuth: type: http scheme: basic
需要填入的 “OpenApi 安全配置” 内容格式如下:
{ // Basic Auth 配置(username:password 格式) "basic": "username:password", }
- OAuth 2.0
OpenAPI 示例定义如下:
components: securitySchemes: OAuth2: type: oauth2 flows: authorizationCode: authorizationUrl: https://example.com/oauth/authorize tokenUrl: https://example.com/oauth/token
需要填入的 “OpenApi 安全配置” 内容格式如下:
{ // OAuth2 配置(Bearer token) "oauth2": "your_bearer_token_here", }
2. 点击立即部署,即可拉起 MCP 服务。部署完成后,可以在 “服务测试” 标签进行测试,也可以在“访问地址”标签拿到 SSE 协议的服务 URL:
直接使用 "npx @modelcontextprotocol/inspector" 调试器可以调试部署成功的 MCP SSE 服务:
所有 Tool 的参数都为 query
,header
,body
,path
,数据格式均为 json
。测试时,您需要以标准 json 格式输入 Tool 对应的 API 的每个位置的参数。例如,如果 API 的 query
有 param1
,param2
两个参数,则您需要在 query
的输入框中以如下格式输入:
{ "param1": "xxx", "param2": "xxx" }
3. 你可以使用访问地址中的 SSE URL 接入到 Cursor,Cherry Studio 等支持 SSE 协议的 MCP Client 中使用。如果 Client 只需要 SSE 的 URL(以 Cherry Studio 为例),输入“公网访问”的 URL 即可:
若需要输入 JSON 格式的 MCP 配置,则配置方式如下:
{ "mcpServers": { "server-name": { "url": "<您的服务URL>", } } }
随后,向 LLM 提问与你的服务相关的问题,LLM 便会自动调用部署好的 MCP Tool 并获取结果:
⚠️ FAQ
1. 点击部署报错提示 “s.yaml not found in response” 怎么办?
请确保您的 OpenAPI Spec 中不存在 {{}} 双花括号结构。若存在,请删除后重试。
2. 部署不成功。日志中显示 “Status Code is not 200”。
请检查您的 OpenAPI Spec 是否规范,且确保其中的
servers
字段不为空且包含了您的服务的真实 endpoint。
3.2 原理
在这个模版中,我们使用自开发的 @serverless-devs/openapi-mcp-converter
库实现了从 OpenAPI 规范数据到 MCP Server 实例的互转:
import fs from 'fs'; import { OpenApiMCPSeverConverter } from '../index.js'; import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js'; import path from 'path'; import { fileURLToPath } from 'url'; const openApiDoc = JSON.parse( fs.readFileSync( path.join( path.dirname( fileURLToPath(import.meta.url) ), 'openapi.json' ), 'utf8' )); const converter = new OpenApiMCPSeverConverter( openApiDoc, { timeout: 100000, security: { apiKey: 'my-api-key' } }); const server = converter.getServer();
这个库会分析 OpenAPI 中的接口信息,自动转化为 MCP Server 所需的 JSON Schema,并利用官方 SDK 生成一个 Server 实例。整体流程如下:
转化库的代码已在 Github 开源,地址。项目遵循 MIT 协议并持续开放维护,如果你发现任何问题或有改进建议:
- 欢迎通过 Issues 提交问题报告或功能请求
- 可直接通过 Pull Requests 提交代码改进
4. 总结
本文通过协议转译 Adapter + 函数计算的解决方案,为 MCP Server 服务化提供了一套企业级、低成本的解决方案,同时为存量 API 的智能化转型开辟了高效率的实践路径。
生态价值
联合阿里云百练、魔搭社区等头部平台,快速构建起 MCP Server 服务市场,加速 AI 应用生态的繁荣与创新。
技术优势
支持主流 npm/pip 生态,实现 MCP Server 的零改造、一键迁移,大幅降低技术迁移成本。
成本与效率
- 低成本转型:相比传统代码重构,我们的 Serverless Adapter 方案可以实现存量 API 到 MCP Server 的无缝转换,转型成本接近零。
- 弹性计算:针对 MCP Server 典型的稀疏访问特征,Serverless 架构的毫秒级按量付费模式。