一个基于 Python 的 Model Context Protocol (MCP) 客户端,提供与 Claude AI 的流式交互体验。
- 🤖 流式响应: 实时显示 Claude 的回复,避免长时间等待
- 🔧 工具调用: 支持 MCP 工具的自动调用和结果处理
- 💬 动态交互: 打字机效果的实时输出,提升用户体验
- 🌐 代理支持: 内置代理配置,支持网络受限环境
- 🎯 多平台支持: 支持 DeepSeek、Kimi 等多个 AI 提供商
- 📦 易于扩展: 模块化设计,便于添加新功能
- Python 3.12+
- uv (用于包管理)
- 克隆项目
git clone https://github.com/acupofespresso/mcp-client.git
cd mcp-client- 安装依赖
uv sync- 配置环境变量
cp .env.example .env
# 编辑 .env 文件,设置 API 密钥和模型配置创建 .env 文件并根据您使用的 AI 提供商设置相应变量:
ANTHROPIC_BASE_URL=https://api.deepseek.com/anthropic
ANTHROPIC_AUTH_TOKEN=sk-xxxxxxxxx # 替换为您的 API token
ANTHROPIC_MODEL=deepseek-chatANTHROPIC_BASE_URL=https://api.moonshot.ai/anthropic
ANTHROPIC_AUTH_TOKEN=sk-xxxxxxxxx # 替换为您的 API token
ANTHROPIC_MODEL=kimi-k2-turbo-previewANTHROPIC_API_KEY=sk-ant-xxxxxxxxx # 替换为您的 API key
ANTHROPIC_MODEL=claude-3-5-sonnet-20241022python client.py启动后,您将看到交互式命令行界面:
Connected to server with tools: ['fetch']
MCP Client Started!
Type your queries or 'quit' to exit.
Query: 帮我获取 https://example.com 的内容
客户端会自动:
-
显示思考过程:
🤖 Claude is thinking... 💬 我来帮您获取网页内容... -
执行工具调用:
🔧 Calling tool fetch... 🔧 Tool fetch returned: [网页内容] -
处理结果:
🤖 Processing tool result... 💬 根据获取的内容,我可以看到...
输入 quit 退出程序。
MCPClient
├── connect_to_server() # 连接 MCP 服务器
├── process_query() # 处理查询和流式响应
├── print_streaming_text() # 打字机效果输出
└── chat_loop() # 交互式聊天循环
# 处理不同类型的流式块
for chunk in stream:
if chunk.type == "content_block_delta":
if chunk.delta.type == "text_delta":
# 实时输出文本
self.print_streaming_text(chunk.delta.text)
elif chunk.delta.type == "input_json_delta":
# 累积工具参数
current_tool_input += chunk.delta.partial_json- 检测工具调用: 从流式响应中识别
tool_use块 - 解析参数: 累积 JSON 片段,完整解析工具参数
- 执行调用: 通过 MCP session 调用工具
- 继续对话: 将工具结果发送给 Claude 继续处理
当前配置使用 mcp-server-fetch 服务器:
server_params = StdioServerParameters(
command="uvx",
args=[
"mcp-server-fetch",
"--ignore-robots-txt",
"--proxy-url", "http://127.0.0.1:7897" # 根据需要调整代理地址
],
env=None
)- fetch: 获取网页内容,支持多种格式和选项
- 其他 MCP 服务器提供的工具
项目支持通过代理访问网络,适合网络受限环境:
"--proxy-url", "http://127.0.0.1:7897"可根据您的网络环境修改代理地址。常见代理端口:
- Clash:
http://127.0.0.1:7890 - V2ray:
http://127.0.0.1:1081 - 自定义代理: 根据实际配置修改
mcp-client/
├── client.py # 主客户端代码
├── pyproject.toml # 项目配置和依赖
├── .env # 环境变量 (需要创建)
├── .env.example # 环境变量示例
├── .python-version # Python 版本
├── .gitignore # Git 忽略文件
├── uv.lock # 依赖锁定文件
└── README.md # 项目说明
anthropic>=0.64.0: Claude API 客户端,支持流式响应mcp>=1.13.1: Model Context Protocol 库python-dotenv>=1.1.1: 环境变量管理openai>=1.102.0: 兼容其他 AI 提供商
要使用不同的 MCP 服务器,修改 connect_to_server() 方法中的 server_params:
server_params = StdioServerParameters(
command="your-mcp-server-command",
args=["arg1", "arg2"],
env=None
)- 在
.env.example中添加新的配置示例 - 确保 API 端点兼容 Anthropic 的接口格式
- 测试流式响应和工具调用功能
- 连接超时: 检查代理设置和网络连接
- API 密钥错误: 验证
.env文件中的密钥配置 - 工具调用失败: 确认 MCP 服务器正常运行
- 编码问题: 确保终端支持 UTF-8 编码
取消注释代码中的调试行来查看详细信息:
print(f"\n🔧 Tool {tool_name} returned: \n{tool_result}")欢迎提交 Issue 和 Pull Request!
- ✅ 基础 MCP 客户端功能
- ✅ 流式响应支持
- ✅ 工具调用处理
- ✅ 动态交互效果
- ✅ 代理支持
- ✅ 多 AI 提供商支持 (DeepSeek, Kimi)
- ✅ 完善的文档和配置示例