构建Testlink MCP并集成到Copilot(四)
在前面几篇文章记录中,已经可以通过提示词与testlink交互了。更多的功能之后再加,现在需要部署一下mcp server让其他人也能用到。
部署有两种方式,一种是打包上传pypi,然后在本地mcp.json中以uvx运行,比如jira的mcp就是这样做的。
一种是类似常规web项目那样部署在服务器。对于内网的访问就只能用后者了。
fastmcp官方文档有推荐使用uvicorn。
之前的app.run可以替换为下面的:
http_app = app.http_app(path="/mcp-testlink") # 这里方便用uvicorn调用,也方便指定url后缀
if __name__ == "__main__":
uvicorn.run("server:http_app", host="0.0.0.0", port=8000, workers=4, reload=True)
也可以移除__name__=="__main__",不用执行python server.py,直接用命令:
uvicorn server:http_app --host 0.0.0.0 --port 8000 --workers 4 --reload
正式环境要移除reload参数。
这里有几个情况要说明。
之前的文章有写过gunicorn,可以支持通过将一些参数放进配置py文件,以这个文件可以方便地运行在后台。但是uvicorn并不支持这样的方式。因此在服务器那里需要指定用上nohup,避免退出后进程无法持续。
nohup uvicorn server:http_app --host 0.0.0.0 --port 8000 --workers 4 > ./uvicorn.log 2>&1 &
用ps命令检查到进程了,那么在nginx中加一点配置,重启nginx即可。
location ~ /mcp-testlink {
proxy_pass http://127.0.0.1:8000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
问题又出现了,部署时用nginx且uvicorn指定了workers参数会出现400 bad request,https://github.com/modelcontextprotocol/python-sdk/issues/1275
于是启动命令换成这个:
nohup uvicorn server:http_app --host 0.0.0.0 --port 8000 > ./uvicorn.log &
现在能正常访问了。并且从多台电脑上都能用提示词与内网testlink交互。