MCP Chatbot
这个聊天机器人示例展示了如何将模型上下文协议(MCP)集成到一个简单的CLI聊天机器人中。该实现通过MCP服务器支持多个工具,展示了MCP的灵活性,并且兼容任何遵循OpenAI API标准的LLM提供者。
如果你觉得这个项目有帮助,别忘了给仓库点个⭐,或者给我买杯☕咖啡。
主要特性
- LLM提供者灵活性:兼容任何遵循OpenAI API标准的LLM(已测试Groq上的Llama 3.2 90b和GitHub Marketplace上的GPT-4o mini)。
- 动态工具集成:工具在系统提示中声明,确保在不同LLM之间最大兼容性。
- 服务器配置:通过类似Claude桌面应用的简单JSON配置文件支持多个MCP服务器。
要求
- Python 3.10
python-dotenvrequestsmcpuvicorn
安装
-
克隆仓库:
git clone https://github.com/3choff/mcp-chatbot.git cd mcp-chatbot -
安装依赖:
pip install -r requirements.txt -
设置环境变量:
在根目录创建
.env文件并添加你的API密钥:LLM_API_KEY=your_api_key_here -
配置服务器:
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" } } } }
使用
-
运行客户端:
python main.py -
与助手交互:
助手将自动检测可用工具,并根据配置服务器提供的工具来响应查询。
-
退出会话:
输入
quit或exit结束会话。
架构
- 工具发现:从配置服务器自动发现工具。
- 系统提示:工具动态包含在系统提示中,使LLM理解可用功能。
- 服务器集成:支持任何MCP兼容服务器,已测试包括Uvicorn和Node.js在内的各种服务器实现。
类结构
- Configuration:管理环境变量和服务器配置
- Server:处理MCP服务器初始化、工具发现和执行
- Tool:表示单个工具及其属性和格式
- 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
-
初始化:
- 配置加载环境变量和服务器设置
- 服务器与其对应工具初始化
- 工具发现并格式化为LLM理解
-
运行时流程:
- 接收用户输入
- 带有可用工具上下文将输入发送给LLM
- LLM响应解析:
- 如果是工具调用→执行工具并返回结果
- 如果是直接响应→返回给用户
- 将工具结果发送回LLM进行解释
- 向用户展示最终响应
-
工具集成:
- 工具从MCP服务器动态发现
- 工具描述自动包含在系统提示中
- 工具执行通过标准化的MCP协议处理
贡献
欢迎反馈和贡献。如果你遇到任何问题或有改进建议,请在GitHub仓库创建新问题。
如果你希望为项目开发做出贡献,欢迎提交包含你修改的pull请求。
许可证
本项目根据MIT许可证授权。