开发MCP服务

您可以通过Function AI内置的MCP服务模板快速体验部署或基于空白项目自定义部署MCP服务。当MCP服务部署完成后,平台会生成一个SSE连接地址,并且会生成MCP服务的Schema用于测试。

创建MCP服务

函数计算提供支持SSE协议且具备并发能力的MCP运行时,存量STDIO模式的MCP服务无需任何改动即可转换为符合SSE协议的远端服务。通过函数计算创建MCP服务时,创建的函数自带MCP SSE亲和调度能力。

方式一:通过模板一键部署MCP服务

  1. 登录Function AI控制台,在探索页面,勾选MCP Server模板分类,选择任意一个MCP模板,单击模板所在卡片。本文以高德地图为例。

  2. 在模板详情页面,单击立即部署,进入服务配置页面,填写从高德开放平台获取的API-KEY,然后单击部署项目

    image

方式二:基于空白项目创建自定义MCP服务

  1. 登录Function AI控制台,在项目页面,选择创建项目 > 创建空白项目,然后自定义名称和描述。

  2. 单击空白项目,在项目部署页面,选择新建服务 > MCP 服务

  3. MCP服务配置页面,设置以下选项,然后单击预览&部署

    • MCP服务配置

      配置项

      说明

      本文示例

      传输类型

      支持托管STDIOSSE协议的MCP服务。如果MCP服务代码采用STDIO协议,Function AI会启动一个SSE服务来代理STDIO的请求,客户端访问需要使用SSE方式。

      SSE 协议

      开启鉴权

      开启鉴权后,Function AI平台会为MCP服务生成一个只读的Bearer Token,使用此Bearer Token可以让您的MCP服务自带鉴权能力。

      打开开关

      运行环境

      使用官方提供Node.js、PythonJava运行时,无需修改代码即可实现一键云上托管MCP服务。

      若需容器化部署,也可以选择自定义容器作为运行环境,然后根据界面提示,选择您托管在ACR的镜像开始构建。

      Node.js > Node.js 20

      选择仓库

      • 使用平台内置代码包

        您可以使用Function AI平台内置的运行时代码包Hello World,简化部署流程。后续可以在目标服务页面的WebIDE页签在线编写和调试代码。

      • 绑定代码仓库进行持续部署

        您也可以绑定代码仓库托管MCP服务,本文以GitHub仓库为例,绑定Git仓库后,如果指定的分支有push操作,会自动触发服务的持续部署。

        参数说明如下:

        • 构建环境:对于多语言的工程,可以选择多个构建环境。

        • 构建命令:npm buildpip install -t . -r requirements.txt

        • 构建缓存:可选,Node.js、PythonJava运行环境的缓存目录分别可以设置为~/.npm~/.cache~/.m2

      image

    • 资源配置

      配置项

      说明

      本文示例

      实例规格

      根据业务情况,选择或手动输入合理的资源项规格组合。

      • vCPU:1

      • 内存:2 GB

      弹性策略

      • 默认模式

        成本最优模式,此模式下函数计算系统自动为函数分配和释放实例,支持实例缩容至0。适用于流量无明显规律且波动较大的场景,需要接受一定程度的冷启动。

      • 极速模式

        成本与性能均衡模式,有效避免了冷启动问题,此模式可以通过设置预置快照数提前锁定弹性资源,实现极速弹性伸缩。并且只有在处理请求时才会产生vCPU使用费用,实现性能和成本的平衡。适用于对延迟较敏感的场景。

      说明

      由于MCP SSE请求依赖于session会话机制,若同一个session id的请求被分配到不同实例会导致上下文丢失,因此建议开启极速模式,并预置1个快照,实例限额设置为1,确保SSE请求优先分配至同一实例,降低SSE请求分配到不同弹性实例的概率。

      极速模式

    • 网络配置

      配置项

      说明

      本文示例

      允许访问 VPC

      是否允许函数访问VPC内资源。更多信息,请参见配置网络

      开启

      专有网络

      允许访问 VPC选择时必填。创建新的VPC或在下拉列表中选择要访问的VPC ID。

      fc.auto.create.vpc.1632317****

      交换机

      允许访问 VPC选择时必填。创建新的交换机或在下拉列表中选择交换机ID。

      fc.auto.create.vswitch.vpc-bp1p8248****

      安全组

      允许访问 VPC选择时必填。创建新的安全组或在下拉列表中选择安全组。

      fc.auto.create.SecurityGroup.vsw-bp15ftbbbbd****

      禁用公网访问 URL

      开关开启后,您将仅能通过VPC内网访问MCP服务,而无法使用公网访问。

      开启

      仅允许指定 VPC 调用 MCP 服务

      如果您希望MCP服务仅可以通过特定的VPC来调用,而无法通过公网和其他VPC调用,则需要开启此功能开关并绑定指定的VPC。

      开启

测试MCP服务

MCP服务部署完成后,平台会生成一个SSE连接地址,用于MCP服务连接测试。您可以通过Function AI控制台进行测试,或使用官方的Inspector进行本地测试。

方式一:Function AI控制台测试

  1. 在上一步创建的MCP服务详情页面,选择服务测试页签,单击测试连接测试成功后单击测试工具进行测试。

    由于使用方式二创建MCP服务时,开启了鉴权认证,测试服务时自动填充Function AI平台生成的Bearer Token。

    image

    如果使用错误的Bearer Token,则测试失败。

    image

  2. 测试成功后,选择监控日志页签查看服务测试结果。

方式二:Inspector本地测试

  1. 在上一步创建的MCP服务详情页面,选择访问地址页签,获取公网访问地址

    image

  2. 执行以下命令,本地启动inspector工具。

    npx @modelcontextprotocol/inspector
  3. inspector工具界面的URL输入框,填写获取的公网访问地址进行测试。

    image

重要

测试完成后,请及时单击Disconnect断开SSE连接,防止持续请求产生函数计算侧的资源使用费用。

接入MCP服务

在函数计算中创建MCP服务后,您可以通过在阿里云百炼控制台部署自定义 MCP 服务将您的MCP服务注册到百炼,然后接入智能体应用或工作流应用。

创建自定义MCP服务

  1. 登录Function AI控制台,找到上一步创建的MCP服务,在项目详情页面,选择访问地址页签,获取公网访问地址用于后期测试。

    image

  2. 登录阿里云百炼控制台MCP管理页面,选择自定义服务页签,单击右上角的+创建MCP服务,选择使用脚本部署,然后单击部署服务

  3. 创建MCP服务页面,设置服务名称,选择安装方式http,填写MCP服务配置,然后单击提交部署

    MCP服务配置示例如下,其中https://****.cn-hangzhou.fcapp.run/sse需替换为您在步骤1获取的公网访问地址。

    {
      "mcpServers": {
        "test-sse": {
          "url": "https://****.cn-hangzhou.fcapp.run/sse"
        }
      }
    }

    image

接入智能体应用

  1. 登录阿里云百炼应用管理页面,选择+创建应用 > 智能体应用,单击立即创建

  2. 在智能体应用页面,选择模型,添加上一步创建的MCP服务,开始试用。

    本位以选择通义千问-Max模型为例。您可以添加多个MCP服务,包括阿里云百炼预置的MCP服务和您自定义的MCP服务。

    image

测试MCP服务

  • 大模型应用:智能体应用

  • 外部工具:自定义地址位置服务工具get_geolocation

30513E17-8A27-4A8D-97E8-C555D90A073C

变量管理

MCP服务通常需要访问第三方服务,例如高德地图或GitHub等,因此需要使用访问密钥,例如API-KEYToken,这些密钥信息建议以环境变量加载或者启动命令参数注入。Function AI平台提供了变量管理功能,支持敏感变量托管,可以实现MCP服务访问密钥的安全可靠管理。更多关于变量的信息,请参见使用变量跨服务管理配置

配置服务变量

image

加载服务变量

方式一:通过系统环境变量读取

Function AI平台配置的服务变量默认注入到函数启动的环境变量中,MCP服务代码可以直接通过系统环境变量读取。

image

方式二:通过启动参数注入

Function AI平台配置的服务变量支持通过${self.变量名称}的方式引用,您可以在启动命令中修改命令行参数,在启动阶段注入变量的值。

image