EasyMCP 使用说明
项目简介
EasyMCP 是一个用 Python 编写的 Model Context Protocol (MCP) 客户端库,旨在简化与多个 MCP 服务器的交互。它提供了一个高级 API,用于管理资源、工具和 Prompt 模板,并支持多种传输协议,帮助开发者轻松构建基于 MCP 的 LLM 应用。
主要功能点
- 多服务器管理: 'ClientManager' 类允许同时管理多个 MCP 服务器连接。
- 资源管理: 支持列出和读取由 MCP 服务器托管的资源。
- 工具调用: 支持列出和调用 MCP 服务器注册的工具。
- Prompt 模板: 支持列出和读取 MCP 服务器定义的 Prompt 模板。
- 缓存机制: 内置工具、资源和 Prompt 列表的缓存,提高性能。
- 异步支持: 基于 'asyncio' 实现,支持高并发操作。
- 多种传输协议: 支持 Stdio, SSE, Docker 等多种 MCP 服务器连接方式。
- 动态服务器管理: 支持运行时动态添加和移除 MCP 服务器连接。
- 命名空间: 工具和资源自动按服务器名称进行命名空间隔离,避免命名冲突。
安装步骤
- 确保已安装 Python 3.7 或更高版本。
- 使用 'uv' 包管理器安装 EasyMCP:
uv add easymcp
服务器配置
EasyMCP 客户端需要配置要连接的 MCP 服务器信息。配置信息以 JSON 格式提供,您需要在客户端代码中定义 'StdioServerParameters' 或其他类型的 'ServerParameters' 对象来描述每个服务器。
以下是使用 'StdioServerParameters' 配置 MCP 服务器的示例 (JSON 格式,用于 MCP 客户端代码配置):
{ "servers": { "timeserver": { # 服务器名称,可以自定义 "command": "uvx", # 启动 MCP 服务器的命令,通常是 uvx 或 python "args": ["mcp-timeserver"] # 命令参数,例如 mcp-timeserver 表示运行时间服务器 // "env": {"环境变量名称": "环境变量值"} // (可选) 环境变量配置 // "cwd": "/path/to/server" // (可选) 服务器启动的工作目录 // "log_stderr": true // (可选) 是否记录服务器错误输出,默认为 true }, "searxng": { # 另一个服务器配置示例 "command": "uvx", "args": ["mcp-searxng"] } // 可以添加更多服务器配置 } }
配置说明:
- '"servers"': 包含所有服务器配置的 JSON 对象。
- '"服务器名称"': 您为服务器定义的名称,例如 '"timeserver"' 或 '"searxng"',用于在客户端代码中引用。
- '"command"': 启动 MCP 服务器的可执行命令。 通常,如果使用 'uv' 运行 MCP 服务器,则命令为 '"uvx"';如果直接运行 Python 脚本,则可能是 '"python"' 或 '"python3"'。
- '"args"': 传递给 'command' 的参数列表。 这通常包括 MCP 服务器的入口脚本名称 (例如 '"mcp-timeserver"') 或其他必要的配置参数。
- '"env"' (可选): 一个 JSON 对象,用于设置服务器进程的环境变量。
- '"cwd"' (可选): 服务器进程的工作目录。
- '"log_stderr"' (可选): 布尔值,指示是否将服务器进程的标准错误输出记录到客户端日志。
请根据您要连接的 MCP 服务器的实际情况,修改上述 JSON 配置信息。 您需要知道 MCP 服务器的启动命令和所需的参数。 这些信息通常由 MCP 服务器的提供者提供。
基本使用方法
以下代码展示了如何使用 EasyMCP 客户端库连接和操作 MCP 服务器:
import asyncio from easymcp.client.ClientManager import ClientManager from easymcp.client.transports.stdio import StdioServerParameters mgr = ClientManager() timeserver_config = StdioServerParameters( command="uvx", args=["mcp-timeserver"], ) servers = { "timeserver": timeserver_config, } async def main(): await mgr.init(servers=servers) # 初始化客户端管理器,连接到配置的服务器 print(mgr.list_servers()) # 列出已连接的服务器 tools = await mgr.list_tools() # 列出所有服务器的工具 print(tools) result = await mgr.call_tool("timeserver.get-current-time", {}) # 调用 timeserver 服务器的 get-current-time 工具 print(result) resources = await mgr.list_resources() # 列出所有服务器的资源 print(resources) resource_content = await mgr.read_resource("mcp-timeserver+datetime://Asia/Shanghai/now") # 读取 timeserver 服务器的指定资源 print(resource_content) await mgr.stop_all_servers() # (可选) 停止所有服务器连接 asyncio.run(main())
代码说明:
- 导入必要的模块: 'asyncio', 'ClientManager', 'StdioServerParameters'。
- 创建 'ClientManager' 实例: 'mgr = ClientManager()' 用于管理 MCP 服务器连接。
- 配置服务器参数: 使用 'StdioServerParameters' 定义服务器的启动命令和参数。 请根据实际情况修改 'command' 和 'args'。
- 初始化 'ClientManager': 'await mgr.init(servers=servers)' 建立与配置服务器的连接。
- 列出服务器: 'mgr.list_servers()' 返回已连接的服务器名称列表。
- 列出工具: 'await mgr.list_tools()' 获取所有服务器提供的工具列表。
- 调用工具: 'await mgr.call_tool("timeserver.get-current-time", {})' 调用指定服务器的工具,工具名称需要包含服务器名称前缀 (例如 '"服务器名称.工具名称"' )。
- 列出资源: 'await mgr.list_resources()' 获取所有服务器提供的资源列表。
- 读取资源: 'await mgr.read_resource("mcp-timeserver+...")' 读取指定服务器的资源,资源 URI 需要使用 'mcp-服务器名称+资源URI' 的格式。
- 停止服务器连接 (可选): 'await mgr.stop_all_servers()' 关闭所有服务器连接。
请根据您的实际需求,参考示例代码,使用 EasyMCP 客户端库与 MCP 服务器进行交互。
信息
分类
开发者工具