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

1. 相关总结

总结内容链接
MCP之大模型Function Calling开发与原理https://blog.csdn.net/a82514921/article/details/147860120
MCP概念与server开发及调试-使用Python+SSE传输机制https://blog.csdn.net/a82514921/article/details/147860221
MCP client开发与日志分析-使用Python+SSE传输机制https://blog.csdn.net/a82514921/article/details/147860518
MCP细节与原理分析-使用Python+SSE传输机制https://blog.csdn.net/a82514921/article/details/147860541
MCP server支持在不同Python脚本中实现工具方法https://blog.csdn.net/a82514921/article/details/147860559
MCP client支持同时连接多个MCP server-使用Python开发https://blog.csdn.net/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 文件中创建以上其他类的实例,并调用初始化方法,以创建工具

### 如何使用 Python 实现 MCP 客户端 以下是基于提供的引用以及相关背景知识,关于如何通过 Python 实现 MCP 客户端的信息。 #### 使用 `asyncio` 和自定义模块实现 MCP 客户端 在引用[1]中展示了一个完整的 Python 脚本示例,该脚本利用了异步编程库 `asyncio` 来处理标准输入输出流中的数据通信。此代码片段展示了如何初始化一个 MCP 客户端并与其服务器交互: ```python import asyncio from mcp.types import AnyUrl from mcp.client.session import ClientSession from mcp.client.stdio import StdioServerParameters, stdio_client async def main(): async with stdio_client( StdioServerParameters(command="python", args=["/root/domcp/server2.py"]) ) as (read, write): async with ClientSession(read, write) as session: await session.initialize() # 列举可用资源 resources = await session.list_resources() print(resources) print("----------------------") # 获取特定资源的内容 resource = await session.read_resource(AnyUrl("file:///greeting.txt")) print(resource) asyncio.run(main()) ``` 这段代码实现了以下几个功能[^1]: - 初始化与 MCP 服务的标准 IO 流连接。 - 枚举远程服务器上的可访问资源列表。 - 请求指定路径下的文件内容作为资源读取操作的一部分。 #### 关于 Spring AI 的集成支持 如果考虑将 MCP 客户端的功能嵌入到更大的应用程序框架之中,则可以参考 spring.ai 提供的支持工具包——即 **spring-ai-starter-mcp-client**。这个 starter 帮助开发者更方便地把 MCP 功能加入聊天机器人或其他类型的客户端应用里[^2]。不过需要注意的是,这部分文档主要面向 Java 生态系统的开发人员,因此对于希望采用纯 Python 解决方案的人来说可能并不完全适用。 #### 对 MCP 协议的理解 最后值得一提的是,MCP 是一种开放式的协议,旨在标准化应用程序向大语言模型提供上下文的方式[^3]。就像 USB-C 接口统一了许多电子设备之间的物理接口一样,MCP 协议也试图成为人工智能领域内的通用桥梁,使得不同的数据源和服务能够无缝对接各种机器学习算法或者预训练好的神经网络结构之上运行的任务流程自动化平台等等场景下发挥重要作用。 综上所述,在实际项目当中可以根据具体需求选择合适的实现方法论来完成相应的业务逻辑编码工作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值