Skip to content

acupofespresso/mcp-client

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

3 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

MCP Client

一个基于 Python 的 Model Context Protocol (MCP) 客户端,提供与 Claude AI 的流式交互体验。

功能特性

  • 🤖 流式响应: 实时显示 Claude 的回复,避免长时间等待
  • 🔧 工具调用: 支持 MCP 工具的自动调用和结果处理
  • 💬 动态交互: 打字机效果的实时输出,提升用户体验
  • 🌐 代理支持: 内置代理配置,支持网络受限环境
  • 🎯 多平台支持: 支持 DeepSeek、Kimi 等多个 AI 提供商
  • 📦 易于扩展: 模块化设计,便于添加新功能

安装

环境要求

  • Python 3.12+
  • uv (用于包管理)

安装步骤

  1. 克隆项目
git clone https://github.com/acupofespresso/mcp-client.git
cd mcp-client
  1. 安装依赖
uv sync
  1. 配置环境变量
cp .env.example .env
# 编辑 .env 文件,设置 API 密钥和模型配置

配置

创建 .env 文件并根据您使用的 AI 提供商设置相应变量:

DeepSeek 配置

ANTHROPIC_BASE_URL=https://api.deepseek.com/anthropic
ANTHROPIC_AUTH_TOKEN=sk-xxxxxxxxx    # 替换为您的 API token
ANTHROPIC_MODEL=deepseek-chat

Kimi 配置

ANTHROPIC_BASE_URL=https://api.moonshot.ai/anthropic
ANTHROPIC_AUTH_TOKEN=sk-xxxxxxxxx    # 替换为您的 API token
ANTHROPIC_MODEL=kimi-k2-turbo-preview

Claude 原生配置

ANTHROPIC_API_KEY=sk-ant-xxxxxxxxx   # 替换为您的 API key
ANTHROPIC_MODEL=claude-3-5-sonnet-20241022

使用方法

基本使用

python client.py

启动后,您将看到交互式命令行界面:

Connected to server with tools: ['fetch']
MCP Client Started!
Type your queries or 'quit' to exit.

Query: 帮我获取 https://example.com 的内容

功能演示

客户端会自动:

  1. 显示思考过程:

    🤖 Claude is thinking...
    💬 我来帮您获取网页内容...
    
  2. 执行工具调用:

    🔧 Calling tool fetch...
    🔧 Tool fetch returned: 
    [网页内容]
    
  3. 处理结果:

    🤖 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

工具调用流程

  1. 检测工具调用: 从流式响应中识别 tool_use
  2. 解析参数: 累积 JSON 片段,完整解析工具参数
  3. 执行调用: 通过 MCP session 调用工具
  4. 继续对话: 将工具结果发送给 Claude 继续处理

MCP 服务器配置

当前配置使用 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 服务器

要使用不同的 MCP 服务器,修改 connect_to_server() 方法中的 server_params

server_params = StdioServerParameters(
    command="your-mcp-server-command",
    args=["arg1", "arg2"],
    env=None
)

添加新的 AI 提供商

  1. .env.example 中添加新的配置示例
  2. 确保 API 端点兼容 Anthropic 的接口格式
  3. 测试流式响应和工具调用功能

故障排除

常见问题

  1. 连接超时: 检查代理设置和网络连接
  2. API 密钥错误: 验证 .env 文件中的密钥配置
  3. 工具调用失败: 确认 MCP 服务器正常运行
  4. 编码问题: 确保终端支持 UTF-8 编码

调试模式

取消注释代码中的调试行来查看详细信息:

print(f"\n🔧 Tool {tool_name} returned: \n{tool_result}")

贡献

欢迎提交 Issue 和 Pull Request!

许可证

MIT License

更新日志

v0.1.0

  • ✅ 基础 MCP 客户端功能
  • ✅ 流式响应支持
  • ✅ 工具调用处理
  • ✅ 动态交互效果
  • ✅ 代理支持
  • ✅ 多 AI 提供商支持 (DeepSeek, Kimi)
  • ✅ 完善的文档和配置示例

相关链接

About

mcp client demo

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages