大语言模型MCP学习04-将自定义mcp服务部署到百炼平台01

一、文档

https://www.youtube.com/watch?v=55FbKvc9nSI

https://www.datawhale.cn/learn/content/163/3932

https://bailian.console.aliyun.com/?tab=doc#/doc/?type=app&url=https%3A%2F%2Fhelp.aliyun.com%2Fdocument_detail%2F2879604.html

二、实施步骤

2.1 跑通本地MCP服务

1
2
3
4
5
6
7
8
9
#创建目录manipulate_mysql
E:\Hdisk\学习\06_AI学习\13_LatestTechKnowledge\01_MCP\try01>uv init hello_mcp
E:\Hdisk\学习\06_AI学习\13_LatestTechKnowledge\01_MCP\try01>cd hello_mcp
#使用uv创建虚拟python环境
E:\Hdisk\学习\06_AI学习\13_LatestTechKnowledge\01_MCP\try01\hello_mcp>uv venv
#激活此虚拟python环境
E:\Hdisk\学习\06_AI学习\13_LatestTechKnowledge\01_MCP\try01\hello_mcp>.venv\Scripts\activate
#安装MCP Python SDK
(hello_mcp) E:\Hdisk\学习\06_AI学习\13_LatestTechKnowledge\01_MCP\try01\hello_mcp>uv add "mcp[cli]==1.9.0" httpx

以一个简单的代码main.py来演示MCP服务使用:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
from mcp.server.fastmcp import FastMCP
import random

mcp = FastMCP("Demo")

# 尽量加description,让AI更好理解函数的功能
@mcp.tool(description="这是一个超级聪明的AI,能回答你的一切问题")
def chat(message: str) -> str: # 变量名尽量要体现出函数的功能,让AI更好理解,同时可以在函数定义出显式提示该函数的输入输出格式,如这里就指明输入输出都是字符串str
"""输入一个问题,返回一个回答"""
replies = ["你好!", "今天天气不错!", "你想聊些什么呢?", "我很好,你呢?", "再见!"]
return random.choice(replies)

if __name__ == "__main__":
mcp.run(transport='sse') # 连接端点为 host:port/sse
#mcp.run(transport="streamable-http") # 连接端点为 host:port/mcp/,这个过于先进,阿里云还不支持
#mcp.run() # 本地使用

直接以python解析器运行上述py文件,如下是正常与成功时的显示内容:

image-20250525105852989

2.2 在本地测试MCP服务

上述cmd窗口及其中运行的python main.py进程不要停止,打开另外一个cmd窗口并执行如下操作:

1
2
#执行如下命令连接与调试mcp服务
(hello_mcp) E:\Hdisk\学习\06_AI学习\13_LatestTechKnowledge\01_MCP\try01\hello_mcp>mcp dev main.py
image-20250525110408073

在自己本地浏览器中访问http://127.0.0.1:6274,可以如下界面,然后按下图中注释进行操作:

image-20250525110921418

image-20250525111647637

2.3 用阿里云函数计算部署自定义MCP server

从技术上来说,除了阿里云函数计算,其实还有可以使用云服务器(应该是其他厂商的云服务器也可以,但因为要使用百炼平台,所以使用阿里云服务器应该最好)。如果自己已经购买了阿里云服务器,直接使用即可;但如果目前还没有购买,不建议为了测试与试用“在云服务器上部署MCP服务”而购买阿里云服务器,因为有更实惠的选择,它就是阿里云函数计算。

这是阿里云函数的官网: https://www.aliyun.com/product/fc 。 官方对其的定义与介绍是:函数计算(Function Compute,简称FC)是事件驱动的全托管计算服务。使用函数计算,您无需采购与管理服务器等基础设施,只需编写并上传代码或镜像。函数计算为您准备好计算资源,可靠地运行任务,通过弹性伸缩应对流量峰谷,并提供日志查询、性能监控和报警等功能。 函数计算提供了一种事件驱动的计算模型。您可以在指定函数中创建触发器,该触发器描述了一组规则,当某个事件满足这些规则,事件源就会触发关联的函数

使用Serverless架构的函数计算,只需聚焦于业务本身,平台为用户准备好计算资源,可靠地运行任务,并通过弹性伸缩应对流量峰谷,用户只需为任务实际消耗的资源付费。

打开阿里云函数计算概览界面: https://fcnext.console.aliyun.com/overview ,点击左侧的“FunctionAI” 功能按钮,进入“云原生应用开发平台 CAP 控制台”页面,然后点击此页面左侧的“MCP广场”,进入“MCP广场|FunctionAI”页面后,点击右上角的“创建自定义 MCP Server”按钮,

image-20250525143522255
image-20250525143755752

MCP服务基础配置:

image-20250525144447989

MCP服务配置:

image-20250525145147575

我上传的hello_mcp.zip内的文件结构如下:

image-20250525150700920

资源配置:

image-20250525145611059

确认部署:

image-20250525145708962

(日志服务sls的开通好像需要一点缓冲的时间,如上图是未开通的。但过了几十秒后就提示我开通了)我第一次执行部署时失败了,稍等几十秒后(不知道期间发生了什么),再次部署就成功了。此时部署虽然成功了,但其中相关服务确是启动失败了:

image-20250525151013082

根据日志提示,”没有找到一个叫做mcp的模块“,那么尝试通过WebIDE安装配置看看:

image-20250525151354708

依次点击此编辑器”Terminal->New Terminal“,打开一个Terminal窗口:

image-20250525151547595
image-20250525152308258

然后重新部署,但服务还是启动失败,报销如下:

image-20250525161330765

然后我依次做了下操作:

(1)在WebIDE的编辑器的Terminal窗口中执行了命令“pip install uvicorn -t .”,保存后重新部署。

(2)在WebIDE的编辑器中,将“.python-version、pyproject.toml”这两个文件中的python3.11改成python3.10,保存后重新部署。

但都还是失败。最后参照如下“此文2.6.1 章节”所述方法即可解决。解决后,服务部署成功,测试成功:

image-20250525162814568
image-20250525163839738


将此MCP服务的公网访问地址复制备用:

1
https://syjiangv-rnmcfk-dekkcmnyuu.cn-hangzhou.fcapp.run/sse
image-20250525164004059

2.4 百炼平台MCP管理创建自定义MCP服务

image-20250525181919182
image-20250525164811941

2.5 百炼平台智能体应用中使用上述自定义MCP服务

image-20250525165100643
image-20250525165150273
image-20250525170915386
image-20250525171814715

2.6 问题与处理

2.6.1 服务部署时一直报错“Function instance health check failed on port 8000 in 120 seconds.”

2.6.1.1 错误描述

使用上述操作在FC中创建MCP与函数后,服务一直运行失败。自己最终使用如下操作重新创建一个工程目录hello_mcp02,其中使用python3.10,同时未再指定mcp版本。main.py文件内容还是一样

1
2
3
4
5
6
7
8
9
#创建目录manipulate_mysql
E:\Hdisk\学习\06_AI学习\13_LatestTechKnowledge\01_MCP\try01>uv init hello_mcp02 --python 3.10
E:\Hdisk\学习\06_AI学习\13_LatestTechKnowledge\01_MCP\try01>cd hello_mcp02
#使用uv创建虚拟python环境
E:\Hdisk\学习\06_AI学习\13_LatestTechKnowledge\01_MCP\try01\hello_mcp02>uv venv
#激活此虚拟python环境
E:\Hdisk\学习\06_AI学习\13_LatestTechKnowledge\01_MCP\try01\hello_mcp02>.venv\Scripts\activate
#安装MCP Python SDK
(hello_mcp02) E:\Hdisk\学习\06_AI学习\13_LatestTechKnowledge\01_MCP\try01\hello_mcp02>uv add "mcp[cli]" httpx

以一个简单的代码main.py来演示MCP服务使用:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
from mcp.server.fastmcp import FastMCP
import random

mcp = FastMCP("Demo")

# 尽量加description,让AI更好理解函数的功能
@mcp.tool(description="这是一个超级聪明的AI,能回答你的一切问题")
def chat(message: str) -> str: # 变量名尽量要体现出函数的功能,让AI更好理解,同时可以在函数定义出显式提示该函数的输入输出格式,如这里就指明输入输出都是字符串str
"""输入一个问题,返回一个回答"""
replies = ["你好!", "今天天气不错!", "你想聊些什么呢?", "我很好,你呢?", "再见!"]
return random.choice(replies)

if __name__ == "__main__":
mcp.run(transport='sse') # 连接端点为 host:port/sse
#mcp.run(transport="streamable-http") # 连接端点为 host:port/mcp/,这个过于先进,阿里云还不支持
#mcp.run() # 本地使用

将此main.py文件打包压缩成main.zip重新上传到上述“代码包”配置项,重新部署。

还是失败

image-20250525161341966

2.6.1.2 解决办法

做了如下修改:

  • 源码main.py,尝试读取FC_SERVER_HOST 与FC_SERVER_PORT系统变量,没有找到时优先使用0.0.0.0、9000,并尝试在创建FastMCP实例时传递 根据配置报错来看,FC_SERVER_PORT是有默认值的,是9000
  • 函数计算MCP服务配置界面的监听端口配置成9000
  • 重新部署服务。成功时的日志如下。
image-20250525162814568

大语言模型MCP学习04-将自定义mcp服务部署到百炼平台01
https://jiangsanyin.github.io/2025/05/25/大语言模型MCP学习04-将自定义mcp服务部署到百炼平台01/
作者
sanyinjiang
发布于
2025年5月25日
许可协议