Files
Mofox-Core/docs/MCP_TOOLS_INTEGRATION.md
subiz 781b7f92a9 没想到吧,我还是没测试()
feat(mcp): 集成MCP SSE协议支持并扩展工具调用能力

新增MCP客户端类型(mcp_ssd),支持通过Model Context Protocol连接外部工具服务器。
更新文档和配置模板,提供完整的MCP接入指南;主程序启动时自动初始化MCP工具提供器,
tool_api 与 tool_use 核心链路新增对MCP工具的检测与调用,实现与既有插件工具的无缝兼容。
同步更新配置模型、模板与帮助文档。
2025-11-19 23:19:01 +08:00

357 lines
8.8 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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