本文介绍如何在FC函数计算中部署MCP服务并将服务动态注册到MSE Nacos实例。
背景信息
目前,MSE Nacos 与 函数计算在 MCP Server 管理方面进行了功能打通。通过将 MCP Server 部署至函数计算,用户可以在不修改任何代码的情况下,自动将 MCP Server 注册至 MSE Nacos 。函数计算 MSE Nacos 企业版支持 MCP Registry 功能, 用户可以在 MSE Nacos 中对注册的 MCP Server 进行统一管理,包括以下功能:
-
服务动态管理:通过 MCP 服务列表增删改查服务信息。
-
描述动态生效:工具描述、参数定义等元信息支持运行时热更新,无需重启服务。
-
MCP Server Tools 动态开关:支持 MCP Server 服务 Tools 运行时动态开启和关闭,无需重启服务。
-
全链路集成:服务注册信息自动同步至 Nacos 配置中心与服务发现模块,适配 AI Agent 调用需求。
前提条件
代码开发
函数计算目前支持部署 STIDO 和 SSE 协议的 MCP Server, 您可以通过 MCP 社区提供的 SDK 或者 Spring Ai Alibaba 等框架进行MCP Server 开发。 以通过 MCP Python SDK 进行标准 MCP Server 开发为例:
-
在工程目录下执行安装依赖。
pip install "mcp[cli]" -
在工程目录下创建文件 main.py, 使用 FastMCP 快速开发一个 标准 SSE 协议的 MCP Server。
""" FastMCP Echo Server """ from mcp.server.fastmcp import FastMCP # Create server mcp = FastMCP("Echo Server",port=8080,host="0.0.0.0") @mcp.tool() def echo_tool(text: str) -> str: """Echo the input text""" return text @mcp.resource("echo://static") def echo_resource() -> str: return "Echo!" @mcp.resource("echo://{text}") def echo_template(text: str) -> str: """Echo the input text""" return f"Echo: {text}" @mcp.prompt("echo") def echo_prompt(text: str) -> str: return text if __name__ == "__main__": mcp.run("sse") -
在工程目录下执行以下命令,启动 MCP Server。
python main.py出现如下输出,代表 MCP Server 成功启动。
INFO: Started server process [24172] INFO: Waiting for application startup. INFO: Application startup complete. INFO: Uvicorn running on http://0.0.0.0:8080 (Press CTRL+C to quit)截止目前,我们完成了一个标准 MCP Server 开发,通过将 MCP Server 部署至函数计算,可以基于函数计算实现 MCP Server 的自动弹性和扩容,聚焦于业务逻辑;同时在不修改任何代码的情况下,自动将 MCP Server 注册至 MSE Nacos MCP Registry , 实现对于 MCP Server 的统一管理和快速迭代。
-
在工程目录下执行命令, 对代码和相关的依赖进行打包,方便之后在函数计算中部署。
zip -r echo.zip .
在函数计算中部署 MCP Server
-
选择已有项目或者创建空白项目。
创建空白项目:单击项目,并点击加号创建空白项目,选择 MCP 场景,输入项目名称,然后单击确定。
-
创建 MCP 服务
单击加号,并选择 MCP 服务。
-
基础配置
-
地域:选择与MSE Nacos实例相同地域。
-
函数名称:使用自动生成的即可。
-
函数描述:对 MCP Server 的功能和使用方式进行简单说明
-
-
MCP 服务配置
-
传输类型:根据实际场景,选择 SSE 协议或者 STIDO协议, 函数计算支持将 STDIO 协议转化为 SSE 协议。在本文案例中,我们选择 SSE 协议。
-
SSE 路径:使用默认值
/sse。 -
监听端口:进程实际监听的端口,在本文中我们配置为8080。
-
开启鉴权:函数计算支持为 MCP Server 配置 token 鉴权, 可以根据实际需要进行开启。本文案例中我们选择关闭鉴权。
-
运行环境:根据代码实际需要的运行环境进行选择,在本文案例中我们采用 MCP Python SDK 进行的 MCP Server 开发,因此选择 python 3.10 环境。
-
启动命令:配置启动命令,本文案例中为:
python3 main.py。 -
选择仓库:函数计算支持多种代码上传方式,本文案例中我们采用代码包 方式进行上传。
-
代码包:选择我们在代码开发章节中打包的
echo.zip文件进行上传。
-
-
网络配置
在网络配置一栏,打开允许访问VPC开关,选择MSE Nacos实例所在的专有网络、交换机和安全组,完成网络配置。
-
服务注册
在服务注册一栏,选择注册到 MSE Nacos 实例,选择您需要注册到的企业版MSE Nacos 实例,并填写用户名和密码。用户名为Nacos,密码为 Nacos 开源控制台密码,如果遗忘或者为新创建实例,可以在 MSE Nacos 实例基础信息页面开源控制台密码处进行重置。如果 MSE Nacos 实例开启了商业化鉴权,请在权限界面配置有访问 MSE Nacos 实例权限的函数角色。在函数角色下拉列表中选择已有角色,或单击创建角色前往 RAM 控制台新建。创建角色时,需要选择阿里云服务作为受信实体,并将受信服务设置为函数计算。
-
部署 MCP Server
配置完成后,单击确认部署按钮,完成 MCP Server 部署。
-
安装依赖
完成部署后,由于我们采用的是代码包的方式上传的代码,代码包中缺乏本地的依赖,因此第一次启动是不成功的,我们需要在WebIDE中重新把依赖安装一遍:
点击 WebIDE 标签。
在控制台中执行依赖安装命令。pip install -t . "mcp[cli]"在 WebIDE 底部的终端(TERMINAL)面板中执行上述命令。依赖安装完成后点击保存按钮,并重新部署。完成以上步骤后, 我们成功在函数计算中部署了 MCP Server 。
-
调试 MCP Server
部署完成后,可以在函数计算控制台上对 MCP Server 进行简单的调试。单击服务测试。并在连接信息页签单击测试连接。连接成功后,在调试信息区域的Tools页签中可查看已注册的工具(如echo_tool),单击测试工具可进行调试。也可通过执行curl命令访问函数的公网访问地址,调试并预热刚才部署的MCP Server。返回类似以下内容,则MCP服务函数部署成功。
id:3d3ba0d9-4d10-4a4e-ae08-a4a92f95d88a event:endpoint data:/mcp/message?sessionId=3d3ba0d9-4d10-4a4e-ae08-a4a92f95d88a
在 MSE Nacos 中查看和管理注册的 MCP Server
在函数计算中完成 MCP Server 的部署并配置相关的服务注册选项后,用户即可在 MSE Nacos 实例中查看和管理对应的 MCP Server 。
-
登录MSE注册配置中心控制台,单击目标Nacos实例,在左侧导航栏选择MCP Registry,检查对应的MCP服务是否注册成功。注册成功后,服务列表中将显示对应的 MCP 服务名称(如Echo-Server)、服务分组及健康实例数等信息。
-
单击目标MCP服务,进入MCP服务详情界面,查看服务详情。其中显示了 MCP 服务的基本信息,包括服务类型、MCP 协议类型(mcp-sse)、服务地址和服务端口等,以及MCP 工具列表和对应的开关状态。在提供者信息页签中可查看已注册实例的地址和健康状态。可以发现函数计算中 MCP 函数的访问地址成功注册到了对应的服务中。
-
对 MCP Server 进行管理
成功注册到 Nacos 之后, 您即可在 MSE Nacos MCP Registry 中对 MCP 进行动态管理而无需重新部署 MCP Server ,包括工具描述的修改,开启与禁用某个工具。
在 MCP Server 详情页点击编辑按钮修改对应的工具描述。例如将工具描述修改为Echo the input text, modified by Nacos,然后单击保存。启动官方 MCP Server 调试工具,并执行 List Tools 命令。
npx @modelcontextprotocol/inspector发现 对应的工具描述变更成了我们动态调整后内容,而在这个过程中我们并没有重新部署 MCP Server。
此外,也可以将对应的 MCP 服务同步至 AI 网关。也可以通过 Nacos MCP Registry 进行统一的 MCP 服务发现。
常见问题
-
服务没有成功注册到 Nacos 中是怎么回事?
MSE Nacos 中的服务名中不允许存在空格,请检查MCP Server的名称是否符合要求。如果对应的MCP Server 已经在 Nacos 中存在,但是注册的 tool 的入参和 Nacos 中的工具的入参不兼容,也会导致注册失败,请检查函数计算的启动日志。