MCP聊天机器人

一个基于模型上下文协议(MCP)的CLI聊天机器人,支持多种工具集成和兼容OpenAI API标准的LLM提供商。

  • by DeathSingeR1331
  • Python
  • 本地部署
  • 更新于
在 GitHub 查看 DeathSingeR1331/MCP-Chatbot

使用说明

MCP聊天机器人

这个聊天机器人示例演示了如何将模型上下文协议(MCP)集成到一个简单的CLI聊天机器人中。该实现通过MCP服务器支持多种工具,展示了MCP的灵活性,并与遵循OpenAI API标准的任何LLM提供商兼容。

如果你觉得这个项目有帮助,别忘了⭐ 明星 仓库 或者给我买个☕ 咖啡.

主要特点

  • LLM提供商灵活性:适用于遵循OpenAI API标准的任何LLM(在Groq上使用Llama 3.2 90b进行测试,在GitHub Marketplace上使用GPT-4o mini进行测试)。
  • 动态工具集成:工具在系统提示符中声明,确保不同LLM之间的最大兼容性。
  • 服务器配置:通过简单的JSON配置文件(如Claude Desktop App)支持多个MCP服务器。

需求

  • Python 3.10
  • python-dotenv
  • requests
  • mcp
  • uvicorn

安装

  1. 克隆存储库:

    git clone https://github.com/3choff/mcp-chatbot.git
    cd mcp-chatbot
    
  2. 安装依赖项:

    pip install -r requirements.txt
    
  3. 设置环境变量:

    创建一个 .env 文件,并添加您的API密钥:

    LLM_API_KEY=your_api_key_here
    
  4. 配置服务器:

    这 servers_config.json 遵循与Claude Desktop相同的结构,允许轻松集成多个服务器。 这里有一个例子:

    {
      "mcpServers": {
        "sqlite": {
          "command": "uvx",
          "args": ["mcp-server-sqlite", "--db-path", "./test.db"]
        },
        "puppeteer": {
          "command": "npx",
          "args": ["-y", "@modelcontextprotocol/server-puppeteer"]
        }
      }
    }
    

    也支持环境变量。像使用Claude桌面应用程序一样传递它们。

    例子:

    {
      "mcpServers": {
        "server_name": {
          "command": "uvx",
          "args": ["mcp-server-name", "--additional-args"],
          "env": {
            "API_KEY": "your_api_key_here"
          }
        }
      }
    }
    

用法

  1. 运行客户端:

    python main.py
    
  2. 与助手互动:

    助手将自动检测可用工具,并可以根据配置的服务器提供的工具对查询做出响应。

  3. 退出会话:

    类型 quit 或 exit 结束会议。

建筑

  • 工具发现:从配置的服务器中自动发现工具。
  • 系统提示:工具动态包含在系统提示中,使LLM能够了解可用功能。
  • 服务器集成:支持任何与MCP兼容的服务器,经过包括Uvicorn和Node.js在内的各种服务器实现测试。

阶级结构

  • 配置:管理环境变量和服务器配置
  • 服务器:处理MCP服务器初始化、工具发现和执行
  • 工具:表示单个工具及其属性和格式
  • LLM客户:管理与LLM提供商的通信
  • 聊天会话:协调用户、LLM和工具之间的交互

逻辑流程

flowchart TD
    A[Start] --> B[Load Configuration]
    B --> C[Initialize Servers]
    C --> D[Discover Tools]
    D --> E[Format Tools for LLM]
    E --> F[Wait for User Input]
    
    F --> G{User Input}
    G --> H[Send Input to LLM]
    H --> I{LLM Decision}
    I -->|Tool Call| J[Execute Tool]
    I -->|Direct Response| K[Return Response to User]
    
    J --> L[Return Tool Result]
    L --> M[Send Result to LLM]
    M --> N[LLM Interprets Result]
    N --> O[Present Final Response to User]
    
    K --> O
    O --> F
  1. 初始化:

    • 配置加载环境变量和服务器设置
    • 服务器使用各自的工具进行初始化
    • 为LLM理解而发现和格式化工具
  2. 运行时流程:

    • 接收用户输入
    • 输入与可用工具的上下文一起发送给LLM
    • LLM响应已解析:
      • 如果是工具调用→ 执行工具并返回结果
      • 如果这是直接的回应→ 返回给用户
    • 工具结果被发送回LLM进行解释
    • 最终响应呈现给用户
  3. 工具集成:

    • 从MCP服务器动态发现工具
    • 工具说明会自动包含在系统提示中
    • 通过标准化的MCP协议处理工具执行

贡献

欢迎提供反馈和意见。如果您遇到任何问题或有改进建议,请创建一个新的 问题 在GitHub存储库上。

如果你想为项目的开发做出贡献,可以随时提交一个包含你的更改的pull请求。

许可证

该项目根据 MIT许可证.