返回市场
MCP聊天机器人服务器

MCP聊天机器人服务器

作者:3choff240 星标更新:2024-12-06

项目介绍

MCP Chatbot

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

如果你发现这个项目有用,请不要忘记在仓库上给它⭐星,或者买我一杯☕咖啡

主要特性

  • LLM提供商灵活性:与遵循OpenAI API标准的任何LLM兼容(已测试Llama 3.2 90b在Groq和GPT-4o mini在GitHub Marketplace上的表现)。
  • 动态工具集成:工具在系统提示中声明,确保跨不同LLM的最大兼容性。
  • 服务器配置:通过简单的JSON配置文件支持多个MCP服务器,类似于Claude桌面应用。

需求

  • 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桌面相同的结构,允许轻松集成多个服务器。 这是一个示例:

    {
      "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. 退出会话:

    输入quitexit以结束会话。

架构

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

类结构

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

逻辑流程

flowchart TD
    A[开始] --> B[加载配置]
    B --> C[初始化服务器]
    C --> D[发现工具]
    D --> E[为LLM格式化工具]
    E --> F[等待用户输入]
    
    F --> G{用户输入}
    G --> H[发送输入到LLM]
    H --> I{LLM决策}
    I -->|调用工具| J[执行工具]
    I -->|直接响应| K[返回响应给用户]
    
    J --> L[返回工具结果]
    L --> M[将结果发送到LLM]
    M --> N[LLM解释结果]
    N --> O[向用户呈现最终响应]
    
    K --> O
    O --> F
  1. 初始化

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

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

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

贡献

欢迎反馈和贡献。如果你遇到任何问题或有改进建议,请在GitHub仓库上创建一个新的问题

如果你想为项目的开发做出贡献,请自由提交包含更改的拉取请求。

许可证

本项目根据MIT许可证授权。