revert(mcp): 移除MCP SSE客户端及工具集成支持

This commit is contained in:
明天好像没什么
2025-10-25 16:16:23 +08:00
parent 91021275c7
commit 0381320859
13 changed files with 24 additions and 1384 deletions

View File

@@ -1,175 +0,0 @@
# MCP工具集成 - 简化指南
## ✅ 已完成的工作
MCP (Model Context Protocol) 工具支持已经完全集成到MoFox Bot**AI现在可以自动发现并调用MCP工具了**。
## 🎯 快速开始
### 步骤1: 启动MCP服务器
首先你需要一个MCP服务器。最简单的方式是使用官方提供的文件系统服务器
```bash
# 安装需要Node.js
npm install -g @modelcontextprotocol/server-filesystem
# 启动服务器,允许访问指定目录
mcp-server-filesystem --port 3000 /path/to/your/project
```
### 步骤2: 配置Bot
编辑 `config/bot_config.toml`,在文件末尾添加:
```toml
[[mcp_servers]]
name = "filesystem"
url = "http://localhost:3000"
api_key = "" # 如果服务器不需要认证就留空
timeout = 30
enabled = true
```
### 步骤3: 启动Bot
```bash
python bot.py
```
启动后你会看到:
```
[INFO] 连接MCP服务器: filesystem (http://localhost:3000)
[INFO] 从filesystem获取5个工具
[INFO] MCP工具提供器初始化成功
```
### 步骤4: AI自动使用工具
现在AI可以自动调用MCP工具了
**示例对话:**
```
用户: 帮我读取README.md文件的内容
AI: [内部决策: 需要读取文件 → 调用 filesystem_read_file 工具]
README.md的内容是...
用户: 列出当前目录下的所有文件
AI: [调用 filesystem_list_directory 工具]
当前目录包含以下文件:
- README.md
- bot.py
- ...
```
## 🔧 工作原理
```
用户消息
AI决策系统 (ToolExecutor)
获取可用工具列表
【包含Bot内置工具 + MCP工具】 ← 自动合并
AI选择需要的工具
执行工具调用
返回结果给用户
```
## 📝 配置多个MCP服务器
```toml
# 文件系统工具
[[mcp_servers]]
name = "filesystem"
url = "http://localhost:3000"
enabled = true
# Git工具
[[mcp_servers]]
name = "git"
url = "http://localhost:3001"
enabled = true
# 数据库工具
[[mcp_servers]]
name = "database"
url = "http://localhost:3002"
api_key = "your-secret-key"
enabled = true
```
每个服务器的工具会自动添加名称前缀:
- `filesystem_read_file`
- `git_status`
- `database_query`
## 🛠️ 可用的MCP服务器
官方提供的MCP服务器
1. **@modelcontextprotocol/server-filesystem** - 文件系统操作
2. **@modelcontextprotocol/server-git** - Git操作
3. **@modelcontextprotocol/server-github** - GitHub API
4. **@modelcontextprotocol/server-sqlite** - SQLite数据库
5. **@modelcontextprotocol/server-postgres** - PostgreSQL数据库
你也可以开发自定义MCP服务器
## 🐛 常见问题
### Q: 如何查看AI是否使用了MCP工具
查看日志,会显示:
```
[INFO] [工具执行器] 正在执行工具: filesystem_read_file
[INFO] 调用MCP工具: filesystem_read_file
```
### Q: MCP服务器连接失败怎么办
检查:
1. MCP服务器是否正在运行
2. URL配置是否正确注意端口号
3. 防火墙是否阻止连接
### Q: 如何临时禁用MCP工具
在配置中设置 `enabled = false`
```toml
[[mcp_servers]]
name = "filesystem"
url = "http://localhost:3000"
enabled = false # 禁用
```
## 📚 相关文档
- **详细集成文档**: [MCP_TOOLS_INTEGRATION.md](./MCP_TOOLS_INTEGRATION.md)
- **MCP SSE客户端**: [MCP_SSE_USAGE.md](./MCP_SSE_USAGE.md)
- **MCP协议官方文档**: https://github.com/anthropics/mcp
## 🎉 总结
MCP工具支持已经完全集成你只需要
1. ✅ 启动MCP服务器
2. ✅ 在`bot_config.toml`中配置
3. ✅ 启动Bot
**AI会自动发现并使用工具无需任何额外代码**
---
**实现方式**: 通过修改`tool_api.py``tool_use.py`将MCP工具无缝集成到现有工具系统
**版本**: v1.0.0
**日期**: 2025-10-05

View File

@@ -1,175 +0,0 @@
# MCP SSE 集成完成报告
## ✅ 集成状态:已完成
MCP (Model Context Protocol) SSE (Server-Sent Events) 客户端已完全集成到 MoFox Bot 框架中。
## 📋 完成的工作
### 1. 依赖管理
- ✅ 在 `pyproject.toml` 中添加 `mcp>=0.9.0``sse-starlette>=2.2.1`
- ✅ 在 `requirements.txt` 中同步添加依赖
### 2. 客户端实现
- ✅ 创建 `src/llm_models/model_client/mcp_sse_client.py`
- ✅ 实现完整的MCP SSE协议支持
- ✅ 支持流式响应、工具调用、多模态内容
- ✅ 实现中断处理和Token统计
### 3. 配置系统集成
- ✅ 在 `src/config/api_ada_configs.py` 中添加 `"mcp_sse"``client_type``Literal` 类型
- ✅ 在 `src/llm_models/model_client/__init__.py` 中注册客户端
- ✅ 通过 `@client_registry.register_client_class("mcp_sse")` 装饰器完成自动注册
### 4. 配置模板
- ✅ 在 `template/model_config_template.toml` 中添加 MCP Provider 配置示例
- ✅ 添加 MCP 模型配置示例
- ✅ 提供详细的配置注释
### 5. 文档
- ✅ 创建 `docs/MCP_SSE_USAGE.md` - 详细使用文档
- ✅ 创建 `docs/MCP_SSE_QUICKSTART.md` - 快速配置指南
- ✅ 创建 `docs/MCP_SSE_INTEGRATION.md` - 集成完成报告(本文档)
### 6. 任务追踪
- ✅ 更新 `TODO.md`,标记"添加MCP SSE支持"为已完成
## 🔧 配置示例
### Provider配置
```toml
[[api_providers]]
name = "MCPProvider"
base_url = "https://your-mcp-server.com"
api_key = "your-api-key"
client_type = "mcp_sse" # 关键使用MCP SSE客户端
timeout = 60
max_retry = 2
```
### 模型配置
```toml
[[models]]
model_identifier = "claude-3-5-sonnet-20241022"
name = "mcp-claude"
api_provider = "MCPProvider"
force_stream_mode = true
```
### 任务配置
```toml
[model_task_config.replyer]
model_list = ["mcp-claude"]
temperature = 0.7
max_tokens = 800
```
## 🎯 功能特性
### 支持的功能
- ✅ 流式响应SSE协议
- ✅ 多轮对话
- ✅ 工具调用Function Calling
- ✅ 多模态内容(文本+图片)
- ✅ 中断信号处理
- ✅ Token使用统计
- ✅ 自动重试和错误处理
- ✅ API密钥轮询
### 当前限制
- ❌ 不支持嵌入Embedding功能
- ❌ 不支持音频转录功能
## 📊 架构集成
```
MoFox Bot
├── src/llm_models/
│ ├── model_client/
│ │ ├── base_client.py # 基础客户端接口
│ │ ├── openai_client.py # OpenAI客户端
│ │ ├── aiohttp_gemini_client.py # Gemini客户端
│ │ ├── mcp_sse_client.py # ✨ MCP SSE客户端新增
│ │ └── __init__.py # 客户端注册(已更新)
│ └── ...
├── src/config/
│ └── api_ada_configs.py # ✨ 添加mcp_sse类型已更新
├── template/
│ └── model_config_template.toml # ✨ 添加MCP配置示例已更新
├── docs/
│ ├── MCP_SSE_USAGE.md # ✨ 使用文档(新增)
│ ├── MCP_SSE_QUICKSTART.md # ✨ 快速配置指南(新增)
│ └── MCP_SSE_INTEGRATION.md # ✨ 集成报告(本文档)
└── pyproject.toml # ✨ 添加依赖(已更新)
```
## 🚀 使用流程
1. **安装依赖**
```bash
uv sync
```
2. **配置Provider和模型**
- 编辑 `model_config.toml`
- 参考 `template/model_config_template.toml` 中的示例
3. **使用MCP模型**
- 在任何 `model_task_config` 中引用配置的MCP模型
- 例如:`model_list = ["mcp-claude"]`
4. **启动Bot**
- 正常启动MCP客户端会自动加载
## 🔍 验证方法
### 检查客户端注册
启动Bot后查看日志确认MCP SSE客户端已加载
```
[INFO] 已注册客户端类型: mcp_sse
```
### 测试配置
发送测试消息确认MCP模型正常响应。
### 查看日志
```
[INFO] MCP-SSE客户端: 正在处理请求...
[DEBUG] SSE流: 接收到内容块...
```
## 📚 相关文档
- **快速开始**: [MCP_SSE_QUICKSTART.md](./MCP_SSE_QUICKSTART.md)
- **详细使用**: [MCP_SSE_USAGE.md](./MCP_SSE_USAGE.md)
- **配置模板**: [model_config_template.toml](../template/model_config_template.toml)
- **MCP协议**: [https://github.com/anthropics/mcp](https://github.com/anthropics/mcp)
## 🐛 已知问题
目前没有已知问题。
## 📝 更新日志
### v0.8.1 (2025-10-05)
- ✅ 添加MCP SSE客户端支持
- ✅ 集成到配置系统
- ✅ 提供完整文档和配置示例
## 👥 贡献者
- MoFox Studio Team
## 📞 技术支持
如遇到问题:
1. 查看日志文件中的错误信息
2. 参考文档排查配置问题
3. 提交Issue到项目仓库
4. 加入QQ交流群寻求帮助
---
**集成完成时间**: 2025-10-05
**集成版本**: v0.8.1
**状态**: ✅ 生产就绪

View File

@@ -1,178 +0,0 @@
# MCP SSE 快速配置指南
## 什么是MCP SSE
MCP (Model Context Protocol) SSE (Server-Sent Events) 是一种支持流式通信的协议允许MoFox Bot通过SSE与兼容MCP协议的AI服务进行交互。
## 快速开始
### 步骤1: 安装依赖
```bash
# 使用uv推荐
uv sync
# 或使用pip
pip install mcp>=0.9.0 sse-starlette>=2.2.1
```
### 步骤2: 编辑配置文件
打开或创建 `model_config.toml` 文件,添加以下配置:
#### 2.1 添加MCP Provider
```toml
[[api_providers]]
name = "MCPProvider" # Provider名称可自定义
base_url = "https://your-mcp-server.com" # 你的MCP服务器地址
api_key = "your-mcp-api-key" # 你的API密钥
client_type = "mcp_sse" # 必须设置为 "mcp_sse"
timeout = 60 # 超时时间(秒)
max_retry = 2 # 最大重试次数
```
#### 2.2 添加MCP模型
```toml
[[models]]
model_identifier = "claude-3-5-sonnet-20241022" # 模型ID
name = "mcp-claude" # 模型名称,用于引用
api_provider = "MCPProvider" # 使用上面配置的Provider
force_stream_mode = true # MCP建议使用流式模式
price_in = 3.0 # 输入价格(可选)
price_out = 15.0 # 输出价格(可选)
```
#### 2.3 在任务中使用MCP模型
```toml
# 例如使用MCP模型作为回复模型
[model_task_config.replyer]
model_list = ["mcp-claude"] # 引用上面定义的模型名称
temperature = 0.7
max_tokens = 800
```
### 步骤3: 验证配置
启动MoFox Bot查看日志确认MCP SSE客户端是否正确加载
```
[INFO] MCP-SSE客户端: 正在初始化...
[INFO] 已加载模型: mcp-claude (MCPProvider)
```
## 完整配置示例
```toml
# ===== MCP SSE Provider配置 =====
[[api_providers]]
name = "MCPProvider"
base_url = "https://api.anthropic.com" # Anthropic的Claude支持MCP
api_key = "sk-ant-xxx..."
client_type = "mcp_sse"
timeout = 60
max_retry = 2
retry_interval = 10
# ===== MCP模型配置 =====
[[models]]
model_identifier = "claude-3-5-sonnet-20241022"
name = "mcp-claude-sonnet"
api_provider = "MCPProvider"
force_stream_mode = true
price_in = 3.0
price_out = 15.0
[[models]]
model_identifier = "claude-3-5-haiku-20241022"
name = "mcp-claude-haiku"
api_provider = "MCPProvider"
force_stream_mode = true
price_in = 1.0
price_out = 5.0
# ===== 任务配置使用MCP模型 =====
# 回复生成使用Sonnet高质量
[model_task_config.replyer]
model_list = ["mcp-claude-sonnet"]
temperature = 0.7
max_tokens = 800
# 小型任务使用Haiku快速响应
[model_task_config.utils_small]
model_list = ["mcp-claude-haiku"]
temperature = 0.5
max_tokens = 500
# 工具调用使用Sonnet
[model_task_config.tool_use]
model_list = ["mcp-claude-sonnet"]
temperature = 0.3
max_tokens = 1000
```
## 支持的MCP服务
目前已知支持MCP协议的服务
-**Anthropic Claude** (推荐)
- ✅ 任何实现MCP SSE协议的自定义服务器
- ⚠️ 其他服务需验证是否支持MCP协议
## 常见问题
### Q: 我的服务器不支持MCP怎么办
A: 确保你的服务器实现了MCP SSE协议规范。如果是标准OpenAI API请使用 `client_type = "openai"` 而不是 `"mcp_sse"`
### Q: 如何测试MCP连接是否正常
A: 启动Bot后在日志中查找相关信息或尝试发送一条测试消息。
### Q: MCP SSE与OpenAI客户端有什么区别
A:
- **MCP SSE**: 使用Server-Sent Events协议支持更丰富的流式交互
- **OpenAI**: 使用标准OpenAI API格式
- **选择建议**: 如果你的服务明确支持MCP使用MCP SSE否则使用OpenAI客户端
### Q: 可以混合使用不同类型的客户端吗?
A: 可以你可以在同一个配置文件中定义多个providers使用不同的 `client_type`
```toml
# OpenAI Provider
[[api_providers]]
name = "OpenAIProvider"
client_type = "openai"
# ...
# MCP Provider
[[api_providers]]
name = "MCPProvider"
client_type = "mcp_sse"
# ...
# Gemini Provider
[[api_providers]]
name = "GoogleProvider"
client_type = "aiohttp_gemini"
# ...
```
## 下一步
- 查看 [MCP_SSE_USAGE.md](./MCP_SSE_USAGE.md) 了解详细API使用
- 查看 [template/model_config_template.toml](../template/model_config_template.toml) 查看完整配置模板
- 参考 [README.md](../README.md) 了解MoFox Bot的整体架构
## 技术支持
如遇到问题,请:
1. 检查日志文件中的错误信息
2. 确认MCP服务器地址和API密钥正确
3. 验证服务器是否支持MCP SSE协议
4. 提交Issue到项目仓库

View File

@@ -1,356 +0,0 @@
# MCP工具集成完整指南
## 概述
MoFox Bot现在完全支持MCP (Model Context Protocol),包括:
1. **MCP SSE客户端** - 与支持MCP的LLM如Claude通信
2. **MCP工具提供器** - 将MCP服务器的工具集成到Bot让AI能够调用
## 架构说明
```
┌─────────────────────────────────────────┐
│ MoFox Bot AI系统 │
│ ┌───────────────────────────────────┐ │
│ │ AI决策层 (ToolExecutor) │ │
│ │ - 分析用户请求 │ │
│ │ - 决定调用哪些工具 │ │
│ └───────────────┬───────────────────┘ │
│ │ │
│ ┌───────────────▼───────────────────┐ │
│ │ 工具注册表 (ComponentRegistry) │ │
│ │ - Bot内置工具 │ │
│ │ - MCP动态工具 ✨ │ │
│ └───────────────┬───────────────────┘ │
│ │ │
│ ┌───────────────▼───────────────────┐ │
│ │ MCP工具提供器插件 │ │
│ │ - 连接MCP服务器 │ │
│ │ - 动态注册工具 │ │
│ └───────────────┬───────────────────┘ │
└──────────────────┼───────────────────────┘
┌──────────────▼──────────────┐
│ MCP连接器 │
│ - tools/list │
│ - tools/call │
│ - resources/list (未来) │
└──────────────┬──────────────┘
┌──────────────▼──────────────┐
│ MCP服务器 │
│ - 文件系统工具 │
│ - Git工具 │
│ - 数据库工具 │
│ - 自定义工具... │
└─────────────────────────────┘
```
## 完整配置步骤
### 步骤1: 启动MCP服务器
首先你需要一个运行中的MCP服务器。这里以官方的文件系统MCP服务器为例
```bash
# 安装MCP服务器以filesystem为例
npm install -g @modelcontextprotocol/server-filesystem
# 启动服务器
mcp-server-filesystem --port 3000 /path/to/allowed/directory
```
或使用其他MCP服务器
- **Git MCP**: 提供Git操作工具
- **数据库MCP**: 提供数据库查询工具
- **自定义MCP服务器**: 你自己开发的MCP服务器
### 步骤2: 配置MCP工具提供器插件
编辑配置文件 `config/plugins/mcp_tools_provider.toml`
```toml
[plugin]
enabled = true # 启用插件
# 配置MCP服务器
[[mcp_servers]]
name = "filesystem" # 服务器标识名
url = "http://localhost:3000" # MCP服务器地址
api_key = "" # API密钥如果需要
timeout = 30 # 超时时间
enabled = true # 是否启用
# 可以配置多个MCP服务器
[[mcp_servers]]
name = "git"
url = "http://localhost:3001"
enabled = true
```
### 步骤3: 启动Bot
```bash
python bot.py
```
启动后,你会在日志中看到:
```
[INFO] MCP工具提供器插件启动中...
[INFO] 发现 1 个MCP服务器配置
[INFO] 正在连接MCP服务器: filesystem (http://localhost:3000)
[INFO] 从MCP服务器 'filesystem' 获取到 5 个工具
[INFO] ✓ 已注册MCP工具: filesystem_read_file
[INFO] ✓ 已注册MCP工具: filesystem_write_file
[INFO] ✓ 已注册MCP工具: filesystem_list_directory
...
[INFO] MCP工具提供器插件启动完成共注册 5 个工具
```
### 步骤4: AI自动调用MCP工具
现在AI可以自动发现并调用这些工具例如
**用户**: "帮我读取项目根目录下的README.md文件"
**AI决策过程**:
1. 分析用户请求 → 需要读取文件
2. 查找可用工具 → 发现 `filesystem_read_file`
3. 调用工具 → `filesystem_read_file(path="README.md")`
4. 获取结果 → 文件内容
5. 生成回复 → "README.md的内容是..."
## 工具命名规则
MCP工具会自动添加服务器名前缀避免冲突
- 原始工具名: `read_file`
- 注册后: `filesystem_read_file`
如果有多个MCP服务器提供相同名称的工具它们会被区分开
- 服务器A: `serverA_search`
- 服务器B: `serverB_search`
## 配置示例
### 示例1: 本地文件操作
```toml
[[mcp_servers]]
name = "local_fs"
url = "http://localhost:3000"
enabled = true
```
**可用工具**:
- `local_fs_read_file` - 读取文件
- `local_fs_write_file` - 写入文件
- `local_fs_list_directory` - 列出目录
### 示例2: Git操作
```toml
[[mcp_servers]]
name = "git"
url = "http://localhost:3001"
enabled = true
```
**可用工具**:
- `git_status` - 查看Git状态
- `git_commit` - 提交更改
- `git_log` - 查看提交历史
### 示例3: 多服务器配置
```toml
[[mcp_servers]]
name = "filesystem"
url = "http://localhost:3000"
enabled = true
[[mcp_servers]]
name = "database"
url = "http://localhost:3002"
api_key = "db-secret-key"
enabled = true
[[mcp_servers]]
name = "api_tools"
url = "https://mcp.example.com"
api_key = "your-api-key"
timeout = 60
enabled = true
```
## 开发自定义MCP服务器
你可以开发自己的MCP服务器来提供自定义工具
```javascript
// 简单的MCP服务器示例 (Node.js)
const express = require('express');
const app = express();
app.use(express.json());
// 列出工具
app.post('/tools/list', (req, res) => {
res.json({
tools: [
{
name: 'custom_tool',
description: '自定义工具描述',
inputSchema: {
type: 'object',
properties: {
param1: {
type: 'string',
description: '参数1'
}
},
required: ['param1']
}
}
]
});
});
// 执行工具
app.post('/tools/call', async (req, res) => {
const { name, arguments: args } = req.body;
if (name === 'custom_tool') {
// 执行你的逻辑
const result = await doSomething(args.param1);
res.json({
content: [
{
type: 'text',
text: result
}
]
});
}
});
app.listen(3000, () => {
console.log('MCP服务器运行在 http://localhost:3000');
});
```
## 常见问题
### Q: MCP服务器连接失败
**检查**:
1. MCP服务器是否正在运行
2. URL配置是否正确
3. 防火墙是否阻止连接
4. 查看日志中的具体错误信息
### Q: 工具注册成功但AI不调用
**原因**:
- 工具描述不够清晰
- 参数定义不明确
**解决**:
在MCP服务器端优化工具的`description``inputSchema`
### Q: 如何禁用某个MCP服务器
在配置中设置:
```toml
[[mcp_servers]]
enabled = false # 禁用
```
### Q: 如何查看已注册的MCP工具
查看启动日志或在Bot运行时检查组件注册表。
## MCP协议规范
MCP服务器必须实现以下端点
### 1. POST /tools/list
列出所有可用工具
**响应**:
```json
{
"tools": [
{
"name": "tool_name",
"description": "工具描述",
"inputSchema": {
"type": "object",
"properties": { ... },
"required": [...]
}
}
]
}
```
### 2. POST /tools/call
执行工具
**请求**:
```json
{
"name": "tool_name",
"arguments": { ... }
}
```
**响应**:
```json
{
"content": [
{
"type": "text",
"text": "执行结果"
}
]
}
```
## 高级功能
### 动态刷新工具列表
工具列表默认缓存5分钟。如果MCP服务器更新了工具Bot会自动在下次缓存过期后刷新。
### 错误处理
MCP工具调用失败时会返回错误信息给AIAI可以据此做出相应处理或提示用户。
### 性能优化
- 工具列表有缓存机制
- 支持并发工具调用
- 自动重试机制
## 相关文档
- [MCP SSE使用指南](./MCP_SSE_USAGE.md)
- [MCP协议官方文档](https://github.com/anthropics/mcp)
- [插件开发文档](../README.md)
## 更新日志
### v1.0.0 (2025-10-05)
- ✅ 完整的MCP工具集成
- ✅ 动态工具注册
- ✅ 多服务器支持
- ✅ 自动错误处理
---
**集成状态**: ✅ 生产就绪
**版本**: v1.0.0
**更新时间**: 2025-10-05