自定义 MCPServer 函数制作流程
概述
CFC 上线MCPServer 托管功能,您可以使用 CFC 内置的 MCP 热门模板一键部署热门 MCPServer,或者基于模板制作并发布自己的MCPServer。
使用模板创建 MCP 函数
操作步骤
- 登录 函数计算控制台。
- 依次点击『函数列表』->『创建函数』->『模板创建 MCP 服务』->『基础模板』/『热门 MCP 模板』
- 以热门模板为例,选择『github』热门模板,点击下一步
- 填写函数名称、github apikey,点击下一步
- 使用模板创建的 MCP 函数,触发器都默认配置好,点击提交即可以完成MCP 函数创建。
- 进入函数详情页,选择『触发器』
- 复制第一个触发器的URL 路径(/sse 结尾)就可以在 Cursor 等Agent 等配置使用。
MCP 函数使用
- 在 Cursor 中配置 MCPServer
1{
2 "mcpServers": {
3 "cfc-github": {
4 "url": "https://xxxxx.cfc-execute.su.baidubce.com/sse"
5 }
6 }
7}
- 配置完成后,在 Cursor 的 MCP 中可以看到配置的 github MCPServer 已经起作用
- 然后使用大模型提问『查询 app-builder 相关的 github 仓库』
- 大模型会提示是否要调用 mcp 工具
- 点击调用后大模型会根据 MCPServer 返回的结果组织回答,给出答案
自定义 MCP 函数
以基础 MCP 模板『mcp multiply』为例,这里展示下如何基于现有模板制作自己的 MCP 函数
下载函数模板
- 先参照上面的步骤,使用基础模板『mcp multiply』为例创建 MCP 函数
- 创建完成之后,进入函数详情页-函数代码
- 点击下载完整 zip 包程序,下载函数模板代码
制作新的模板
模板详解
- 下载完成后,在本地解压 zip 文件,进入解压后的目录
-
主要目录结构如下
- bootstrap:函数启动入口文件(不能改动)
- start.sh:函数启动脚本,包含函数环境变量以及启动命令
- index-sse.py:sse 模式函数代码
- index-stdio.py:stdio 模式函数代码
- dep:python 依赖包
- node_modules:nodejs 相关依赖包(主要是 supergateway 等组件)
该项目为使用 python mcp 标准库制作的的 mcpserver,包含了 stdio 与 sse 两种模式的示例代码。index-sse.py 和 index-stdio.py 都包含了一个简单 mcp 乘法工具。
1@mcp.tool()
2def multiply(a: int, b: int) -> int:
3 """
4 计算两个数字的乘积
5
6 Args:
7 a: 第一个数字
8 b: 第二个数字
9
10 Returns:
11 两个数字相乘的结果
12 """
13 return a * b
所不同的是 index-sse.py 会启动一个 MCP 服务器(sse 模式)。
1# sse 模式
2mcp = FastMCP("Demo SSE Server", port=8080)
3if __name__ == "__main__":
4 mcp.run(transport="sse")
5
6# stdio 模式
7mcp = FastMCP("Demo SSE Server")
8if __name__ == "__main__":
9 mcp.run(transport="stdio")
如果使用 stdio 模式启动 mcpserver,需要通过 supergateway 组件将其进行转换 sse模式对外暴露服务,才能让 MCP 函数对外可以提供访问。下面将具体讲解如何实现。
模板制作
Stdio 模式
- 对于Stdio 模式,首先在 index-stdio.py 中修改或者增加自己的 mcpserver 工具
- 使用如下命令将 python 的依赖包安装到本地(注意需要使用 python3.10及以上版本)
1python -m pip install mcp --target=./dep --upgrade
这里仅为安装 mcp 包的示例,如果有其他依赖包也需要一起安装到本地
- 安装 supergateway 到本地依赖
1npm install supergateway
-
设置环境变量:在 start.sh 中设置NODE_PATH和 PYTHON_PATH 指向依赖包目录
- 函数中的这两个变量路径可以直接使用模板中配置好的路径,无需改动
- 如果是需要本地调试,可以先设置为本地路径
- 设置启动命令:在 start.sh 中设置 mcpserver 完整的启动命令
1./node_modules/supergateway/dist/index.js --stdio "python3 index-stdio.py" --port 8080 --ssePath /sse --messagePath /messages/
11. 整个命令表示以 supergateway 启动一个 mcpserver,--stdio 表示真实的 mcpserver 启动命令为 python3 index-stdio.py
22. --port 表示 MCPServer 服务的端口,函数环境固定队外暴露8080端口,**该参数不能修改**
33. --ssePath、--messagePath 等配置表示 sse 和 message 请求的 path,需要与函数 http 触发器的路径对应,否则会导致无法访问 mcpserver,**这里建议不要修改**
SSE 模式
- 对于 sse 模式,首先在 index-sse.py 中修改或者增加自己的 mcpserver 工具
- 使用如下命令将 python 的依赖包安装到本地(注意需要使用 python3.10及以上版本)
1python -m pip install mcp --target=./dep --upgrade
这里仅为安装 mcp 包的示例,如果有其他依赖包也需要一起安装到本地
-
设置环境变量:在 start.sh 中设置NODE_PATH和 PYTHON_PATH 指向依赖包目录
- 函数中的这两个变量路径可以直接使用模板中配置好的路径,无需改动
- 如果是需要本地调试,可以先设置为本地路径
- 然后修改 start.sh 中的启动命令,改为直接启动 index-sse.py 脚本
1python3 index-sse.py
11. 这样就直接启动了一个 python 的 mcpserver,标准 mcp 库暴露的 sse和 message 路径就是/see 和/messages/,这和函数 http 触发器的路径是对应的,无需改动
22. 标准 mcp 库可以设置 mcpserver 的端口,这里默认设置为8080,也不能修改
说明
其他 MCP 函数支持
上面的方法主要是通过修改代码模板,增加功能的方式来实现新的 MCPServer 函数。如果想制作完全新的 MCPServer 函数,例如想部署一个开源的 MCPServer,按照如下的流程即可:
- 将开源 MCPServer 的代码安装到代码目录
- 安装上对应的依赖包
- 在启动脚本中配置启动命令和环境变量即可
整个流程和上面制作模板的流程是一样的。
其他语言支持
目前 CFC 支持的 MCPServer 函数环境为 Python 和 Nodejs,但是在实际的函数运行环境中,python 和 nodejs 环境都可以使用,只要在启动脚本中设置到对应的环境变量即可加载到对应的环境。如果是其他语言编写的 MCPServer,例如 golang,可以将其编译为可执行文件,然后在脚本中直接启动,或者通过 supergateway 代理都可以。
打包代码
参考:https://cloud.baidu.com/doc/CFC/s/9jzqubw7f
文件格式要求
代码格式要求为 zip 格式。用于压缩或解压的工具,在 Windows 平台下可使用例如 7-Zip 工具,在 Linux 平台下可使用 zip 命令行工具,在 macOS 平台下也可以使用 zip 命令行工具。
打包方式
打包时,需要对文件打包,而不是对文件外的目录打包;打包完成后,入口函数文件需要位于包内的根目录。
Windows 平台下,您可以使用图形界面打开函数代码目录,挨个选择需要打包的文件以后,单击鼠标右键,选择“压缩为 zip 包”。用 WinRAR、7-Zip 等工具打开 zip 包时,应该直接能显示入口文件。
Linux 和 macOS 平台下,打开终端程序,例如系统自带的终端或者 iTerm2,cd 进入函数代码目录,调用 zip 命令打包所需文件,打包命令应该是:
1cd mcpserver_code
2zip -ry xxx.zip .
切记不可直接将代码目录打包成 zip,否则会导致函数代码解析和运行出错。
打包完成后,可以再解压验证下,目录下的 start.sh 是否有执行权限,如果打包方式不对,造成入口脚本可执行权限丢失的话,函数执行时会报错。
更新代码
- 进入函数列表,点击函数名称,进入函数详情。
- 点击函数代码,进行更新。
测试 MCPServer
云端测试
创建完函数之后,通过暴露的 sse 链接可以使用以下两种方式进行测试
- 配置在Cursor、Cluade 等支持 MCP 的智能体中使用(可以协同大模型一起测试,但是一般有调用次数的限制)
- 使用 MCP Inspector 进行本地测试(仅测试MCP 协议,无调用次数限制)
以 MCP Inspector 为例,测试方法如下
- 在本地运行以下指令启动 Inspector
1npx -y @modelcontextprotocol/inspector
- 浏览器打开 http://127.0.0.1:6274
选择 SSE 模式,填写函数触发器中的 sse 连接,然后点击 Connect
连接成功后,点击 ListTools 获取MCP 函数的工具列表
选择一个具体的工具,然后输入参数,点击 RunTool 获取结果,返回正确结果即表示测试成功
本地测试
如果在本地修改了 MCP 模板的代码,想先进行测试验证,可以在 start.sh 中将NODE_PATH和 PYTHON_PATH 指向本地包目录,即可在本地启动 MCPServer,然后使用 Inspector 先进行本地测试验证。验证通过之后,恢复NODE_PATH和 PYTHON_PATH 等环境变量,再将代码打包更新到函数中运行。