写点什么

MCP Server On FC 之旅 2: 从 0 到 1-MCP Server 市场构建与存量 OpenAPI 转 MCP Server

  • 2025-05-23
    浙江
  • 本文字数:3770 字

    阅读完需:约 12 分钟

作者:西流、星宇

前言

在系列文章首篇 MCP Server 实践之旅第 1 站:MCP 协议解析与云上适配,我们系统解构了 MCP 协议的核心架构,重点验证了存量 STDIO 协议服务的云端转型方案——通过轻量化改造(前置一个 mcp-proxy)实现向 SSE(Server-Sent Events)协议的实时通信升级。本文将延续技术纵深,聚焦当前企业拥抱 MCP 两大核心痛点:

如何将社区主流 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 的运行时具有安全、成本、弹性等各维度的优势),本文不再赘述。

存量 API 的智能化重生之路

许多公司自己有存量 OpenAPI,怎么让自己的存量的 OpenAPI 转为 MCP Server 服务,从而可以被各种 Agent 调用,进行 AI 应用上的创新是一个不可阻挡的趋势和潮流。但传统 OpenAPI 向 MCP 协议迁移挑战,如何通过一个 OpenApi2MCP 适配器低成本实现存量 OpenAPI 一键转为 MCP Server 服务。


接下来,我们通过两个章节分别依次展开,通过具体的示例代码展示如何解决这两个痛点。

STDIO MCP Server 一键转为 SSE MCP Server

效果

  1. 通过 FunctionAI 平台的模版 https://cap.console.aliyun.com/create-project?template=start-mcp-fast-deploy 进行一键部署,部署成功以后,就获得了一个 web 应用的 url。




  1. 打开这个 web 应用,可以选择 npx 或者 uvx 部署。


a. 我们以高德地图 @amap/amap-maps-mcp-server【1】 为例。


b. 填写完毕,点击 "提交部署" 按钮,等待一会,会显示部署成功,并会显示部署成功以后保留的 mcp 服务 url 和支持这个 MCP 服务计算资源的函数 ARN。



  1. 直接使用 "npx @modelcontextprotocol/inspector" 调试器调试部署成功的 MCP SSE 服务。



  1. 之后,就可以把这个 url 注册到各种 Agent 客户端去消费,比如百练、Cherry Studio 等,以 Cherry Studio 为例。



原理

npx 运行原理


npx -y @modelcontextprotocol/server-github
复制代码


等价于:


echo "{}" > package.jsonnpm 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 章节。


具体源码可以参考:


https://github.com/devsapp/mcp-fast-deploy/blob/main/src/mcp-fast-deploy/fc_utils.py

合作方


如果您想打造自己私有的 MCP Server 广场,可以参考该方案,比如交付物发布到内部的 npm 或者 pypi 仓库,仅仅简单修改上面的 mcp-helper 函数即可以实现。

存量 OpenAPI 转 MCP Server

效果

  1. 通过 FunctionAI 部署模版 https://cap.console.aliyun.com/create-project?template=start-fcai-mcp-openapi,输入 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",}
复制代码


  1. 点击立即部署,即可拉起 MCP 服务。部署完成后,可以在 “服务测试” 标签进行测试,也可以在“访问地址”标签拿到 SSE 协议的服务 URL:




直接使用 "npx @modelcontextprotocol/inspector" 调试器可以调试部署成功的 MCP SSE 服务:



所有 Tool 的参数都为 queryheaderbodypath,数据格式均为 json。测试时,您需要以标准 json 格式输入 Tool 对应的 API 的每个位置的参数。例如,如果 API 的 query 有 param1param2 两个参数,则您需要在 query 的输入框中以如下格式输入:


{  "param1": "xxx",  "param2": "xxx"}
复制代码


  1. 你可以使用访问地址中的 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。

原理

在这个模版中,我们使用自开发的 @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 开源,地址为 https://github.com/Serverless-Devs/openapi-mcp-converter。项目遵循 MIT 协议并持续开放维护,如果你发现任何问题或有改进建议:


  • 欢迎通过 Issues 提交问题报告或功能请求

  • 可直接通过 Pull Requests 提交代码改进

总结

本文通过协议转译 Adapter + 函数计算的解决方案,为 MCP Server 服务化提供了一套企业级、低成本的解决方案,同时为存量 API 的智能化转型开辟了高效率的实践路径。


生态价值


联合阿里云百练、魔搭社区等头部平台,快速构建起 MCP Server 服务市场,加速 AI 应用生态的繁荣与创新。


技术优势


支持主流 npm/pip 生态,实现 MCP Server 的零改造、一键迁移,大幅降低技术迁移成本。


成本与效率


  • 低成本转型:相比传统代码重构,我们的 Serverless Adapter 方案可以实现存量 API 到 MCP Server 的无缝转换,转型成本接近零。

  • 弹性计算:针对 MCP Server 典型的稀疏访问特征,Serverless 架构的毫秒级按量付费模式。


【1】高德地图 @amap/amap-maps-mcp-server


https://www.npmjs.com/package/@amap/amap-maps-mcp-server

发布于: 刚刚阅读数: 5
用户头像

阿里云云原生 2019-05-21 加入

还未添加个人简介

评论

发布
暂无评论
MCP Server On FC之旅2: 从0到1-MCP Server市场构建与存量OpenAPI转MCP Server_阿里云_阿里巴巴云原生_InfoQ写作社区