内容
# EasyMCP
EasyMCP 是模型上下文协议(MCP)的完全重写版本,使用Python实现。
## 安装
```bash
uv add easymcp
```
## 使用
高级API公开了一个ClientManager类,可用于管理多个MCP服务器。
```python
import asyncio
from easymcp.client.ClientManager import ClientManager
from easymcp.client.transports.stdio import StdioServerParameters
mgr = ClientManager()
searxng = StdioServerParameters(
command="uvx",
args=["mcp-searxng"],
)
timeserver = StdioServerParameters(
command="uvx",
args=["mcp-timeserver"],
)
servers = {
"searxng": searxng,
"timeserver": timeserver,
}
async def main():
# 初始化客户端管理器
await mgr.init(servers=servers)
# 列出服务器
print(mgr.list_servers())
# 删除一个服务器
await mgr.remove_server("searxng")
# 添加一个服务器
await mgr.add_server("searxng", searxng)
# 列出工具 - 这些工具会自动按服务器名称命名
# {服务器名称}.{工具名称}
print(await mgr.list_tools())
# 调用工具
print(await mgr.call_tool("timeserver.get-current-time", {}))
# 列出资源 - 这些资源会自动按服务器名称命名
# mcp-{服务器名称}+{资源URI}
print(await mgr.list_resources())
# 读取资源
print(await mgr.read_resource("mcp-timeserver+datetime://Africa/Algiers/now"))
await asyncio.Future()
asyncio.run(main())
```
## 核心功能
- 列表工具/资源/提示缓存开箱即用
- 工具/资源/提示更改通知时自动缓存失效
- 开箱即用支持对服务器的并行请求
- 服务器的全生命周期管理
- 动态添加/删除服务器
- 命名空间工具/资源/提示
- 轻量级asyncio原生实现
## 为什么要命名空间工具?
命名空间工具消除了查找正确工具的需要。这意味着:
- 更快的工具调用
- 工具调用可以在多个MCP主机上大规模路由
- MCP服务器不需要全局唯一的工具名称
## 为什么要命名空间资源?
资源被命名空间,以便轻松创建特定服务器的资源URI。您可以:
- 通过检查URI是否以`mcp`开头来检查是否需要通过mcp解析URL
- 检查要解析URI的服务器
- 将资源导入搜索系统,如弹性搜索,无需存储服务器的元数据
- 完全消除通过数据库或查找表将URI映射到服务器的需要
## 类与其他MCP库的比较
| **easyMCP** | **modelcontextprotocol/python-sdk** | |
| -------------- | ----------------------------------- | ---------------------------- |
| ClientManager | | 管理多个MCP服务器 |
| ClientSession | ClientSession | 管理单个MCP服务器 |
| StdioTransport | stdio_client | 原始子进程传输 |
## 许可证
该项目在MIT许可证下许可 - 有关详细信息,请参阅[LICENSE](LICENSE)文件。