uvicorn ASGI服务器 部署 fastmcp服务 --踩坑记录
1、基础部署
fastmcp 本身提供基础部署方案,如下:
from fastmcp import FastMCP
mcp = FastMCP(name="MyServer")
@mcp.tool
def hello(name: str) -> str:
return f"Hello, {name}!"
if __name__ == "__main__":
mcp.run()
# 指定运行端口、协议、监听地址
# mcp.run(host="0.0.0.0", port=12389, transport="streamable-http")
这种方案有一个弊端,当llm发起并发调用工具时,部分请求会超时,如下图(实测超过4个并发就很容易有部分请求超时):

因此这种基础方案只适用于本地测试用,如果上产环境会有很大隐患
2、ASGI 服务器部署
根据官网文档,fastmcp支持使用asgi服务器部署
参考链接:https://gofastmcp.com/deployment/asgi
参考代码:
from fastmcp import FastMCP
import uvicorn
mcp = FastMCP("MyServer")
http_app = mcp.http_app()
if __name__ == "__main__":
uvicorn.run(http_app, host="0.0.0.0", port=8000)
命令行:
uvicorn path.to.your.app:http_app --host 0.0.0.0 --port 8000
到这看似一切正确,但是使用过 uvicorn 部署方案方案的同学都因该清楚,uvicorn 部署时可以填写 workers (进程数),如果不填写默认就是1, 1个进程
如果workers=1 还是单进程部署,那就失去了使用 uvicorn的意义
坑点:
当你尝试添加 workers, 使用mcp client时会报错,无法正常使用 | 连接 mcp server
uvicorn.run("main:http_app", host="0.0.0.0", port=8080, workers=4)
启动正常

通过cherry studio 添加 mcp 服务报错,无法正常使用 mcp server


浙公网安备 33010602011771号