在FC函数计算中部署MCP服务并注册至MSE Nacos

本文介绍如何在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 开发为例:

  1. 在工程目录下执行安装依赖。

    pip install "mcp[cli]"
  2. 在工程目录下创建文件 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")
  3. 在工程目录下执行以下命令,启动 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 的统一管理和快速迭代。

  4. 在工程目录下执行命令, 对代码和相关的依赖进行打包,方便之后在函数计算中部署。

    zip -r echo.zip .

在函数计算中部署 MCP Server

  1. 登录函数计算FuntionAI控制台

  2. 选择已有项目或者创建空白项目。

    创建空白项目:单击项目,并点击加号创建空白项目,选择 MCP 场景,输入项目名称,然后单击确定

    image.png

  3. 创建 MCP 服务

    单击加号,并选择 MCP 服务。image.png

  4. 基础配置

    image.png

    • 地域:选择与MSE Nacos实例相同地域。

    • 函数名称:使用自动生成的即可。

    • 函数描述:对 MCP Server 的功能和使用方式进行简单说明

  5. MCP 服务配置image

    • 传输类型:根据实际场景,选择 SSE 协议或者 STIDO协议, 函数计算支持将 STDIO 协议转化为 SSE 协议。在本文案例中,我们选择 SSE 协议。

    • SSE 路径:使用默认值/sse

    • 监听端口:进程实际监听的端口,在本文中我们配置为8080。

    • 开启鉴权:函数计算支持为 MCP Server 配置 token 鉴权, 可以根据实际需要进行开启。本文案例中我们选择关闭鉴权。

    • 运行环境:根据代码实际需要的运行环境进行选择,在本文案例中我们采用 MCP Python SDK 进行的 MCP Server 开发,因此选择 python 3.10 环境。

    • 启动命令:配置启动命令,本文案例中为:python3 main.py

    • 选择仓库:函数计算支持多种代码上传方式,本文案例中我们采用代码包 方式进行上传

    • 代码包:选择我们在代码开发章节中打包的echo.zip文件进行上传。

  6. 网络配置

    在网络配置一栏,打开允许访问VPC开关,选择MSE Nacos实例所在的专有网络交换机安全组,完成网络配置。image.png

  7. 服务注册

    在服务注册一栏,选择注册到 MSE Nacos 实例,选择您需要注册到的企业版MSE Nacos 实例,并填写用户名和密码。用户名为Nacos,密码为 Nacos 开源控制台密码,如果遗忘或者为新创建实例,可以在 MSE Nacos 实例基础信息页面开源控制台密码处进行重置。image如果 MSE Nacos 实例开启了商业化鉴权,请在权限界面配置有访问 MSE Nacos 实例权限的函数角色。image

  8. 部署 MCP Server

    配置完成后,单击确认部署按钮,完成 MCP Server 部署。image.png

  9. 安装依赖

    完成部署后,由于我们采用的是代码包的方式上传的代码,代码包中缺乏本地的依赖,因此第一次启动是不成功的,我们需要在WebIDE中重新把依赖安装一遍:

    点击 WebIDE 标签。
    image.png在控制台中执行依赖安装命令。

    pip install -t . "mcp[cli]"

    image.png依赖安装完成后点击保存按钮,并重新部署。image.png完成以上步骤后, 我们成功在函数计算中部署了 MCP Server 。

  10. 调试 MCP Server

    部署完成后,可以在函数计算控制台上对 MCP Server 进行简单的调试。单击服务测试。并在连接信息页签单击测试连接image.png也可通过执行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 。

  1. 登录MSE注册配置中心控制台,单击目标Nacos实例,在左侧导航栏选择MCP Registry,检查对应的MCP服务是否注册成功。image.png

  2. 单击目标MCP服务,进入MCP服务详情界面,查看服务详情image.pngimage.png可以发现函数计算中 MCP 函数的访问地址成功注册到了对应的服务中。

  3. 对 MCP Server 进行管理

    成功注册到 Nacos 之后, 您即可在 MSE Nacos MCP Registry 中对 MCP 进行动态管理而无需重新部署 MCP Server ,包括工具描述的修改,开启与禁用某个工具。

    在 MCP Server 详情页点击编辑按钮image.png修改对应的工具描述。image.png启动官方 MCP Server 调试工具,并执行 List Tools 命令。

    npx @modelcontextprotocol/inspector 

    image.png发现 对应的工具描述变更成了我们动态调整后内容,而在这个过程中我们并没有重新部署 MCP Server。

此外,也可以将对应的 MCP 服务同步至 AI 网关。也可以通过 Nacos MCP Registry 进行统一的 MCP 服务发现。

常见问题

  1. 服务没有成功注册到 Nacos 中是怎么回事?

    MSE Nacos 中的服务名中不允许存在空格,请检查MCP Server的名称是否符合要求。如果对应的MCP Server 已经在 Nacos 中存在,但是注册的 tool 的入参和 Nacos 中的工具的入参不兼容,也会导致注册失败,请检查函数计算的启动日志。