MCP | LLM | Python类型的Stdio/SSE/HTTP模式的简单示例

Python MCP三种调用模式详解

当前测试环境:MACOS+Python3(conda)+uv+CherryStudio+LLM(Deepseek-chat)

Python类Stdio/SSE/HTTP形式MCP实例

1. 安装Python

不赘述Python的安装,如有需要,可移步文章列表搜索,常用的有这三种安装方式

  1. Python官网下载Python安装文件进行安装
  2. 使用venv虚拟环境进行安装
  3. 下载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作为测试展示

  1. 点击右上角的设置
  2. 在deepseek的key管理界面申请新的key 点击获取
  3. 将获取的key秘钥复制粘贴到cherry studio的API秘钥输入框中
  4. 点击右侧检测,只要网络OK,正常都会成功
    在这里插入图片描述在这里插入图片描述

6. 配置Cherry Studio的MCP【stdio模式本地调用】

即LLM调用的是和LLM在同一台服务器上的

1. 编写MCP Python代码

# 实现一个加减乘除的MCP工具例子
from mcp.server.fastmcp import FastMCP

mcp = 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 / b
		else:
				return -1.0

if __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和cube

from mcp.server.fastmcp import FastMCP

mcp = 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 / b
		else:
				return -1.0

@mcp.tool()
def square(a: float) -> float:
    return a * a

@mcp.tool()
def cube(a: float) -> float:
    """
    """
    return a * a * a

if __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.12

conda activate py312
python main.py

在这里插入图片描述

3. 配置CherryStudio的MCP服务

  1. 注意选择SSE模式
  2. 粘贴启动URL后面加 /sse
    在这里插入图片描述
  3. 激活检查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.

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

AITyson

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值