MCP | LLM | Python类型的Stdio/SSE/HTTP模式的简单示例
当前测试环境:MACOS+Python3(conda)+uv+CherryStudio+LLM(Deepseek-chat)
Python类Stdio/SSE/HTTP形式MCP实例
1. 安装Python
不赘述Python的安装,如有需要,可移步文章列表搜索,常用的有这三种安装方式
- Python官网下载Python安装文件进行安装
- 使用venv虚拟环境进行安装
- 下载Anaconda,使用conda进行安装
2.安装uv
首先说明一下,uv是个包管理工具,就和pip做的事情一样,但是速度快10倍以上且依赖问题处理的很好.
所以你得先安装好Python环境,不论是用venv还是conda,必须将Python环境装好后再来装uv。
curl -LsSf https://astral.sh/uv/install.sh | sh
# 或者
pip install uv
# 或者
conda install uv# 删除旧版本安装新版本
pip uninstall uv && pip install uv
conda remove uv && conda install uv# 检查UV是否安装成功
uv --version

3. 安装MCP能力
# 创建MCP包文件夹
mkdir mcp_compute_tools
cd mcp_compute_tools
# uv安装当前MCP的Python版本
uv python install 3.13
uv init . -p 3.13
# 添加mcp[cli]包安装
uv add "mcp[cli]"
4. 测试工具安装
最简单的下载使用 cherry studio
后续可以使用vscode、cursor、dify等等各类方式进行集成MCP功能
5. 配置大模型LLM
使用deepseek作为测试展示
- 点击右上角的设置
- 在deepseek的key管理界面申请新的key 点击获取
- 将获取的key秘钥复制粘贴到cherry studio的API秘钥输入框中
- 点击右侧检测,只要网络OK,正常都会成功


6. 配置Cherry Studio的MCP【stdio模式本地调用】
即LLM调用的是和LLM在同一台服务器上的
1. 编写MCP Python代码
# 实现一个加减乘除的MCP工具例子
from mcp.server.fastmcp import FastMCPmcp = FastMCP()@mcp.tool()
def multi_add(numbers: list[float]) -> float:"""多个float数据相加,返回结果"""return sum(numbers)# @mcp.tool()
# def add(a: float, b: float) -> float:
# return a + b@mcp.tool()
def subtract(a: float, b: float) -> float:"""多个float数据相减,返回结果"""return a - b@mcp.tool()
def multiply(a: float, b: float) -> float:"""多个float数据相减,返回结果"""return a * b@mcp.tool()
def divide(a: float, b: float) -> float:"""多个float数据相除,返回结果"""if b != 0:return a / belse:return -1.0if __name__ == "__main__":# 注意用什么模式打开什么方法## STDIO模式mcp.run(transport="stdio")## SSE模式## mcp.run(transport="sse")## streamable-http模式##mcp.run(transport="streamable-http")
2. 配置CherryStudio的MCP服务
# 参数
--directory
/Users/XXX/Documents/tools/mcp_server/mcp_compute_tools (注意换成自己的绝对路径)
run
main.py

如果配置没有问题,勾选右上角的启用按钮,会看见我们写的Python MCP的工具方法就展现出来了

3.测试MCP工具是否正常调用
测试数据
名称 金额
物品01 1808959852.86
物品02 1288908696.69
物品03 1534470414.07
物品04 93302173.07
物品05 6466439.24
物品06 7491706.72
物品07 425385493.21
物品08 1643581076.38
物品09 1149940723.23
物品10 1220336240.95
物品11 79472959.81
物品12 4516915.52
物品13 6249018.51
物品14 375123086.81
物品15 143317623.37 统计总金额。

可以看到,LLM通过分析我们的需求有金额加和的时候,调用了计算器MCP中的multi_add工具完成了金额相加计算,符合预期。

7. 配置Cherry Studio的MCP【SSE服务形式调用】
SSE模式下,需要运行Python环境,启动一个web服务能力,LLM就可以通过远程服务发现的方式进行能力使用。
1. 代码改造
# 1. 注意我们添加了FastMCP的Port和Host
# 2. 注意我们有多添加了工具方法:square和cubefrom mcp.server.fastmcp import FastMCPmcp = FastMCP(port=8000,host='127.0.0.1')@mcp.tool()
def multi_add(numbers: list[float]) -> float:"""多个float数据相加,返回结果"""return sum(numbers)# @mcp.tool()
# def add(a: float, b: float) -> float:
# return a + b@mcp.tool()
def subtract(a: float, b: float) -> float:"""多个float数据相减,返回结果"""return a - b@mcp.tool()
def multiply(a: float, b: float) -> float:"""多个float数据相减,返回结果"""return a * b@mcp.tool()
def divide(a: float, b: float) -> float:"""多个float数据相除,返回结果"""if b != 0:return a / belse:return -1.0@mcp.tool()
def square(a: float) -> float:return a * a@mcp.tool()
def cube(a: float) -> float:""""""return a * a * aif __name__ == "__main__":# 注意用什么模式打开什么方法# STDIO模式# mcp.run(transport="stdio")# SSE模式mcp.run(transport="sse")# streamable-http模式#mcp.run(transport="streamable-http")
2. 服务启动
# 切换Python执行环境,我这里是conda,大家按照自己使用的情况进行切换# 如果没有环境记得初始化一个,然后注意回到顶部第一步安装uv和uv安装mcp[cli]
# conda create -n py312 python=3.12conda activate py312
python main.py

3. 配置CherryStudio的MCP服务
- 注意选择
SSE模式 - 粘贴启动URL后面加 /sse

- 激活检查MCP服务是否正常(比stdio模式多了我们新加的square、cube服务,说明SSE模式获取正常)

4. Cherry Studio配置测试
注意对话框的 锤子 按钮点开后,清空一下,再选择新建的MCP服务,测试LLM调用了MCP工具进行了处理,符合预期。

8. 配置Cherry Studio的MCP【HTTP Stream模式调用】
类比参考7.
到这里,你已经成功掌握了Python MCP的Stdio/SSE/HTTP的应用,实际项目中,只需要斟酌MCP的Python方法需要实现什么样的功能,对应的函数名和方法注释写的尽量贴切详细;
注意:函数名、函数说明、入参变量名和类型、return类型一定要定义好,因为LLM是通过语义解析后发现工具并调用相关能力,我们得让LLM发现、理解、调用合适的工具。
That’s all.
