MCP server支持在不同Python脚本中实现工具方法

部署运行你感兴趣的模型镜像

1. 相关总结

总结内容链接
MCP之大模型Function Calling开发与原理https://blog.youkuaiyun.com/a82514921/article/details/147860120
MCP概念与server开发及调试-使用Python+SSE传输机制https://blog.youkuaiyun.com/a82514921/article/details/147860221
MCP client开发与日志分析-使用Python+SSE传输机制https://blog.youkuaiyun.com/a82514921/article/details/147860518
MCP细节与原理分析-使用Python+SSE传输机制https://blog.youkuaiyun.com/a82514921/article/details/147860541
MCP server支持在不同Python脚本中实现工具方法https://blog.youkuaiyun.com/a82514921/article/details/147860559
MCP client支持同时连接多个MCP server-使用Python开发https://blog.youkuaiyun.com/a82514921/article/details/147860587

2. 前言

MCP 提供的 Python SDK 开发的 server 代码示例使用@mcp.tool 方式注册工具,这种方式支持在当前 Python 脚本中注册工具

在实际开发过程中,可能需要使用多个 Python 脚本实现 MCP server 工具,可参考以下方式实现

3. 实现方式

3.1. 代码示例

以下示例代码可参考 https://github.com/Adrninistrator/MCP-DEMO

在主 Python 文件中创建 mcp.server.fastmcp.server.FastMCP 对象,并调用 run 方法启动

mcp = FastMCP(name="high_speed_railQuerySystem",
                host="0.0.0.0",
                port=8000,
                sse_path="/sse",
                message_path="/messages/")

mcpServer1A: MCPServer1A = MCPServer1A(mcp)
mcpServer1A.initialize()
mcpServer1B: MCPServer1B = MCPServer1B(mcp)
mcpServer1B.initialize()

if __name__ == "__main__":
    MCPClientBase.init_logger(__file__)
    MCPClientBase.set_sse_server_log_level()
    mcp.run(transport="sse")

在其他多个 Python 文件中分别实现工具方法

class MCPServer1A:
    def __init__(self, mcp: FastMCP):
        self.mcp = mcp

    def initialize(self):
        self.mcp.add_tool(self.get_all_lines, name="get_all_lines",
                          description="获取所有高铁线路编号,需要首先调用当前接口")
        self.mcp.add_tool(self.query_stations, description="根据高铁线路编号查询起始站点名称,可用于判断指定线路是否能从某个站点到达另一个站点")

    def get_all_lines(self) -> list:
        return railway_data.get_all_lines()

    def query_stations(self, line_name: str = Field(..., description="高铁线路编号如 G1/G2")) -> Dict:
        return railway_data.query_stations(line_name)
class MCPServer1B:
    def __init__(self, mcp: FastMCP):
        self.mcp = mcp

    def initialize(self):
        self.mcp.add_tool(self.query_duration, description="根据高铁线路编号查询运行时长")
        self.mcp.add_tool(self.query_ticket_price, description="根据高铁线路编号查询最低票价")

    def query_duration(self, line_name_request: LineNameRequest1 = Field(..., description="高铁线路编号请求类 1")) -> Dict:
        return railway_data.query_duration(line_name_request)

    def query_ticket_price(self, line_name_request: LineNameRequest2 = Field(..., description="高铁线路编号请求类 2")) -> Dict:
        return railway_data.query_ticket_price(line_name_request)

3.2. 实现说明

@mcp.tool 对应的方法为 mcp.server.fastmcp.server.FastMCP.tool(),该方法会调用 mcp.server.fastmcp.server.FastMCP.add_tool() 方法

add_tool() 方法用于添加工具,与 tool() 方法的参数一致

因此可以将调用@mcp.tool 添加工具的方法修改为调用 add_tool() 方法

在其他需要创建 MCP 工具的类(mcp_demo.server_sse.server_sse_multi_part_1_a.MCPServer1A、mcp_demo.server_sse.server_sse_multi_part_1_b.MCPServer1B)的构造函数中接收 FastMCP 对象,并提供(initialize)初始化方法,用于调用 FastMCP 对象实例的 add_tool() 方法创建工具

首先在主 Python 文件中创建好 mcp.server.fastmcp.server.FastMCP 对象

再在主 Python 文件中创建以上其他类的实例,并调用初始化方法,以创建工具

您可能感兴趣的与本文相关的镜像

Python3.10

Python3.10

Conda
Python

Python 是一种高级、解释型、通用的编程语言,以其简洁易读的语法而闻名,适用于广泛的应用,包括Web开发、数据分析、人工智能和自动化脚本

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值