这个项目同时实现了哪些角色？	客户端 (Client) 和服务器 (Server)。
MCP 客户端代码位于哪个文件？	`mcp-client.py` 文件。
MCP 客户端类主要封装了什么？	客户端会话 (Client Session)。
客户端会话 (Client Session) 的作用是什么？	它是与 MCP 服务器的实际连接。
为什么需要一个 MCP 客户端类来封装会话？	为了简化资源清理过程（如使用 `async enter`/`async exit`）。
MCP 客户端对整个代码库的作用是什么？	将服务器的功能（如工具）暴露给代码库的其他部分。
在 MCP 客户端中，我们主要实现了哪两个核心函数？	`list_tools` 和 `call_tool`。
`list_tools` 函数是如何获取工具定义的？	调用 `self.session.list_tools()`。
`call_tool` 函数需要传入哪些参数来执行工具？	工具名称 (tool name) 和工具输入 (tool input)。
如何测试 MCP 客户端的功能？	直接运行 `mcp_client.py` 文件。
