托管现有的 MCP Server
介绍
如果你想将只支持本地运行的 MCP Server 部署到云开发,来提供远程 MCP 服务,可以使用云开发托管本地 MCP Server 的功能。
托管后的 MCP Server 具备以下能力:
- 支持远程 SSE/Post 访问
- 支持 ApiKey 认证,保护 MCP Server 代码和密钥信息的安全
- 支持在 Cursor 等支持 MCP 的客户端访问
- 支持在 云开发 Agent 使用,构建复杂的自动化 Agent
- 可提交上架到云开发 MCP 市场,审核通过后即可让更多人来部署使用
本篇文章将会使用社区中的 MongoDB MCP 进行演示
最终代码地址:托管本地 MCP 到云开发服务端示例项目
准备工作
- 在开始前请确保已经开通云开发环境
- 本地具有 Node.js 环境(建议使用 Node.js LTS 版本),用于运行
@cloudbase/cli
命令来部署云托管服务
创建空白 MCP Server
在云开发 AI+ 中创建一个 MCP Server,选择空白模板, 名称和服务名可以根据自己需要进行命名
准备代码
准备一个本地 MCP Server,例如支持 npx、uv 等命令运行的 MCP Server,本文将使用 MongoDB MCP 进行演示
可以下载 托管本地 MCP 到云开发服务端示例项目 来进行测试
其中包含 3 个文件
Dockerfile
:云开发 MCP 服务 Dockerfile 文件DOC.md
:MCP 服务的展示文档(选填,需要上架云开发 MCP 时必填)mcp-meta.json
: 云开发 MCP 服务的配置文件(选填,需要上架云开发 MCP 时必填)
编写 Dockerfile
Dockerfile 内容如下:
# 使用 Node.js 官方 Alpine 镜像作为基础
FROM node:20-alpine
# 配置腾讯云镜像源
RUN npm config set registry https://mirrors.cloud.tencent.com/npm/ \
&& yarn config set registry https://mirrors.cloud.tencent.com/npm/
# 配置 Alpine 国内镜像源
RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.tencent.com/g' /etc/apk/repositories
# 安装 Python(自动创建 python/pip 链接)
RUN apk update \
&& apk add --no-cache python3 py3-pip \
&& apk add curl
# 如果你的项目是一个 python 项目,推荐全局安装,提升运行态的性能
# 例如 RUN pip3 install --break-system-packages mysql-mcp-server
RUN pip3 install --break-system-packages uv
## 全局安装必须的 npm 依赖
## @cloudbase/mcp-transformer 必须安装
## 如果你的项目是一个 npm 包,推荐全局安装,提升运行态的性能
RUN npm install -g @cloudbase/mcp-transformer@1.0.0-beta.10 mongo-mcp
# 固定暴露端口
EXPOSE 80
# 启动命令
## 这里是使用 cloudbase-mcp-transformer 命令来将 Stdio 转换为远程 MCP 服务
## --stdioCmd 是指定需要转换的命令,其中可以引用环境变量,例如 $USER、$PASSWORD、$HOST、$PORT、$DATABASE
## 在创建云托管服务的时候,用户可以指定环境变量
## 如果你的项目依赖环境变量,需要在 mcp-meta.json 中进行声明
## --port 是指定转换后的服务端口,默认为 3000
CMD cloudbase-mcp-transformer stdioToCloudrun --stdioCmd "mongodb-mcp mongodb://$USER:$PASSWORD@$HOST:$PORT/$DATABASE?authSource=admin ./" --port 80
完成 Dockerfile 编写后,我们可以将 MCP Server 部署至云托管了。
部署到云端
部署代码
# 请保证全局安装了 `@cloudbase/cli` 并登录。
npm i -g @cloudbase/cli@latest
# 登录:
tcb login
进入 Dockerfile 所在的目录,运行以下命令进行部署,根据提示输入在准备工作章节中使用的云开发环境 id 及云托管服务名:
tcb cloudrun deploy
配置环境变量
部署完成后可以在云托管服务详情页配置服务依赖的环境变量,例如 mongodb 例子中的 USER
、PASSWORD
、HOST
、PORT
、DATABASE
等环境变量。
如果服务不依赖环境变量就可以运行,可以忽略这个步骤
使用
部署成功后即可在云开发 MCP Server 详情页中进行测试啦。进入 Tools
标签页,即可看到可用工具,并进行调用。
阅读以下文档使用托管的 MCP Server:
发布上架
如果需要将 MCP Server 发布到云开发 MCP 市场,请参考
FAQ
如何验证本地 MCP Server 是否功能可用?
首先我们在本地运行下 MCP Server,验证其功能的可用性。
以 Github MCP 为例,其给出了如下配置:
{
"mcpServers": {
"github": {
"command": "npx",
"args": ["-y", "@modelcontextprotocol/server-github"],
"env": {
"GITHUB_PERSONAL_ACCESS_TOKEN": "<YOUR_TOKEN>"
}
}
}
}
这个配置说明:
- 运行
npx -y @modelcontextprotocol/server-github
来启动 MCP Server - 需要配置环境变量
GITHUB_PERSONAL_ACCESS_TOKEN
为了方便本地调试,我们提供了 @cloudbase/mcp-inspector
调试工具,运行以下命令启动图形界面:
npx -y @cloudbase/mcp-inspector
运行后,可前往 http://127.0.0.1:5173 ,按以下步骤进行操作:
Transport Type
选中STDIO
Command
填入npx
Arguments
填入-y @modelcontextprotocol/server-github
- 前往 https://github.com/settings/tokens 创建 Github Token
- 点击
Environment Variables
,在展开的列表中添加GITHUB_PERSONAL_ACCESS_TOKEN: <Token>
,填入刚刚创建的 Github Token - 点击
Connect
,等待连接后即可测试其提供的工具了
本地测试了一两个工具后,我们可以确认这个 MCP Server 是可用的了。接下来,让我们开始将它转换为远程的 MCP Server。
如何本地调试 MCP Server 转换成 SSE 的效果?
将 Stdio 模式的 MCP Server 转换成支持 SSE 和 Post 的 HTTP 模式非常简单,只需运行:
npx -y cross-env GITHUB_PERSONAL_ACCESS_TOKEN=<YOUR_TOKEN> \
npx -y @cloudbase/mcp-transformer stdioToCloudrun \
--stdioCmd "npx -y @modelcontextprotocol/server-github" --noVerifyAccess --sseRoute local
这串命令挺长的,我们拆分下逐一解释各个部分的作用:
npx -y cross-env GITHUB_PERSONAL_ACCESS_TOKEN=<YOUR_TOKEN>
:设置环境变量npx -y @cloudbase/mcp-transformer stdioToCloudrun
:运行@cloudbase/mcp-transformer
,这是我们提供的命令行工具,能够提供一个服务,将 Stdio 模式的 MCP Server 转换成以 SSE 和 Post 模式运行的 MCP Server。运行后,默认会在 http://127.0.0.1:3000/messages 提供服务--stdioCmd "npx -y @modelcontextprotocol/server-github"
:运行 Stdio 模式的 MCP Server 的命令。@cloudbase/mcp-transformer
会使用此命令运行 Stdio 模式的 MCP Server,并提供 HTTP 服务,以此转换为以 SSE 和 Post 模式运行的 MCP Server--noVerifyAccess
:跳过鉴权的参数。在云托管上运行的 MCP Server 能够拿到调用者的身份,默认情况下会根据身份进行鉴权,仅允许来自超级管理员的调用。此处在本地运行时,为了方便,跳过鉴权--sseRoute local
:控制路由行为的参数,本地运行时需要填入此固定参数
运行后,再次回到 http://127.0.0.1:5173 ,按以下步骤进行操作:
Transport Type
选中SSE
或POST
URL
填入http://127.0.0.1:3000/messages
- 点击
Connect
,等待连接后即可测试其提供的工具了
测试无误,则说明我们已经成功将本地 MCP Server 以 SSE/Post 模式运行了,可以通过 URL 进行远程访问了。