mirror of
https://gitcode.com/ageerle/ruoyi-ai.git
synced 2026-04-10 18:27:07 +00:00
feat:恢复mcp模块 动态agent
This commit is contained in:
244
ruoyi-modules/ruoyi-chat/docs/frontend-guide.md
Normal file
244
ruoyi-modules/ruoyi-chat/docs/frontend-guide.md
Normal file
@@ -0,0 +1,244 @@
|
||||
# MCP工具管理前端开发指南
|
||||
|
||||
## 前置条件
|
||||
|
||||
- Node.js >= 16.0
|
||||
- Vue 3
|
||||
- Element Plus
|
||||
- ECharts (用于图表展示)
|
||||
- Axios (用于HTTP请求)
|
||||
|
||||
## 安装依赖
|
||||
|
||||
```bash
|
||||
npm install element-plus echarts axios
|
||||
```
|
||||
|
||||
## 项目结构
|
||||
|
||||
```
|
||||
ruoyi-ui/
|
||||
├── src/
|
||||
│ ├── api/
|
||||
│ │ └── mcp/
|
||||
│ │ └── tool.js # API接口
|
||||
│ ├── views/
|
||||
│ │ └── mcp/
|
||||
│ │ ├── tool/
|
||||
│ │ │ └── index.vue # 工具管理页面
|
||||
│ │ ├── market/
|
||||
│ │ │ └── index.vue # 市场管理页面
|
||||
│ │ └── log/
|
||||
│ │ └── index.vue # 调用日志页面
|
||||
│ └── utils/
|
||||
│ └── request.js # Axios封装
|
||||
```
|
||||
|
||||
## 菜单配置
|
||||
|
||||
在系统菜单管理中添加以下菜单:
|
||||
|
||||
### 1. MCP工具管理
|
||||
|
||||
| 字段 | 值 |
|
||||
|------|-----|
|
||||
| 菜单名称 | MCP工具管理 |
|
||||
| 菜单类型 | 目录 |
|
||||
| 显示顺序 | 1 |
|
||||
| 路由地址 | mcp |
|
||||
| 组件路径 | |
|
||||
|
||||
#### 子菜单:工具列表
|
||||
|
||||
| 字段 | 值 |
|
||||
|------|-----|
|
||||
| 菜单名称 | 工具列表 |
|
||||
| 菜单类型 | 菜单 |
|
||||
| 显示顺序 | 1 |
|
||||
| 路由地址 | tool |
|
||||
| 组件路径 | mcp/tool/index |
|
||||
| 权限标识 | mcp:tool:list |
|
||||
|
||||
#### 子菜单:市场管理
|
||||
|
||||
| 字段 | 值 |
|
||||
|------|-----|
|
||||
| 菜单名称 | 市场管理 |
|
||||
| 菜单类型 | 菜单 |
|
||||
| 显示顺序 | 2 |
|
||||
| 路由地址 | market |
|
||||
| 组件路径 | mcp/market/index |
|
||||
| 权限标识 | mcp:market:list |
|
||||
|
||||
#### 子菜单:调用日志
|
||||
|
||||
| 字段 | 值 |
|
||||
|------|-----|
|
||||
| 菜单名称 | 调用日志 |
|
||||
| 菜单类型 | 菜单 |
|
||||
| 显示顺序 | 3 |
|
||||
| 路由地址 | log |
|
||||
| 组件路径 | mcp/log/index |
|
||||
| 权限标识 | mcp:tool:query |
|
||||
|
||||
## 权限配置
|
||||
|
||||
| 权限标识 | 权限名称 | 说明 |
|
||||
|----------|----------|------|
|
||||
| mcp:tool:list | 工具列表 | 查看工具列表 |
|
||||
| mcp:tool:query | 工具查询 | 查看工具详情 |
|
||||
| mcp:tool:add | 工具新增 | 新增工具 |
|
||||
| mcp:tool:edit | 工具修改 | 修改工具 |
|
||||
| mcp:tool:remove | 工具删除 | 删除工具 |
|
||||
| mcp:tool:export | 工具导出 | 导出工具数据 |
|
||||
| mcp:market:list | 市场列表 | 查看市场列表 |
|
||||
| mcp:market:query | 市场查询 | 查看市场详情 |
|
||||
| mcp:market:add | 市场新增 | 新增市场 |
|
||||
| mcp:market:edit | 市场修改 | 修改市场 |
|
||||
| mcp:market:remove | 市场删除 | 删除市场 |
|
||||
|
||||
## 路由配置
|
||||
|
||||
在路由配置文件中添加:
|
||||
|
||||
```javascript
|
||||
{
|
||||
path: '/mcp',
|
||||
component: Layout,
|
||||
redirect: '/mcp/tool',
|
||||
name: 'Mcp',
|
||||
meta: { title: 'MCP工具管理', icon: 'tools' },
|
||||
children: [
|
||||
{
|
||||
path: 'tool',
|
||||
name: 'McpTool',
|
||||
component: () => import('@/views/mcp/tool/index'),
|
||||
meta: { title: '工具列表', icon: 'tool' }
|
||||
},
|
||||
{
|
||||
path: 'market',
|
||||
name: 'McpMarket',
|
||||
component: () => import('@/views/mcp/market/index'),
|
||||
meta: { title: '市场管理', icon: 'shop' }
|
||||
},
|
||||
{
|
||||
path: 'log',
|
||||
name: 'McpLog',
|
||||
component: () => import('@/views/mcp/log/index'),
|
||||
meta: { title: '调用日志', icon: 'document' }
|
||||
}
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
## API请求配置
|
||||
|
||||
确保Axios请求拦截器正确配置:
|
||||
|
||||
```javascript
|
||||
// src/utils/request.js
|
||||
import axios from 'axios'
|
||||
import { ElMessage } from 'element-plus'
|
||||
|
||||
const service = axios.create({
|
||||
baseURL: process.env.VUE_APP_BASE_API,
|
||||
timeout: 30000
|
||||
})
|
||||
|
||||
// 请求拦截器
|
||||
service.interceptors.request.use(
|
||||
config => {
|
||||
// 添加token
|
||||
const token = localStorage.getItem('Admin-Token')
|
||||
if (token) {
|
||||
config.headers['Authorization'] = 'Bearer ' + token
|
||||
}
|
||||
return config
|
||||
},
|
||||
error => {
|
||||
return Promise.reject(error)
|
||||
}
|
||||
)
|
||||
|
||||
// 响应拦截器
|
||||
service.interceptors.response.use(
|
||||
response => {
|
||||
const res = response.data
|
||||
if (res.code !== 200) {
|
||||
ElMessage.error(res.msg || '请求失败')
|
||||
return Promise.reject(new Error(res.msg || '请求失败'))
|
||||
}
|
||||
return res
|
||||
},
|
||||
error => {
|
||||
ElMessage.error(error.message)
|
||||
return Promise.reject(error)
|
||||
}
|
||||
)
|
||||
|
||||
export default service
|
||||
```
|
||||
|
||||
## 开发步骤
|
||||
|
||||
1. **复制代码文件**
|
||||
- 将 `tool.js` 复制到 `src/api/mcp/` 目录
|
||||
- 将 `*.vue` 文件复制到对应的视图目录
|
||||
|
||||
2. **安装依赖**
|
||||
```bash
|
||||
npm install element-plus echarts
|
||||
```
|
||||
|
||||
3. **配置路由**
|
||||
- 在路由配置中添加MCP相关路由
|
||||
|
||||
4. **配置菜单**
|
||||
- 在系统管理中添加菜单
|
||||
|
||||
5. **配置权限**
|
||||
- 在系统管理中添加权限标识
|
||||
|
||||
6. **测试功能**
|
||||
- 启动开发服务器
|
||||
- 测试各项功能
|
||||
|
||||
## 注意事项
|
||||
|
||||
1. **工具类型说明**
|
||||
- BUILTIN: 内置工具(系统自带,不可编辑)
|
||||
- LOCAL: 本地STDIO工具(通过命令行启动)
|
||||
- REMOTE: 远程HTTP工具(通过网络连接)
|
||||
|
||||
2. **配置JSON格式**
|
||||
- LOCAL类型: `{"command": "npx", "args": ["-y", "@example/tool"], "env": {}}`
|
||||
- REMOTE类型: `{"baseUrl": "http://localhost:8080/mcp"}`
|
||||
|
||||
3. **错误处理**
|
||||
- 工具连接测试可能超时,请合理设置超时时间
|
||||
- 删除工具前请确认没有正在运行的Agent使用该工具
|
||||
|
||||
4. **性能优化**
|
||||
- 调用日志数据量大时,建议使用分页加载
|
||||
- 图表数据建议缓存处理,避免频繁请求
|
||||
|
||||
## 常见问题
|
||||
|
||||
### 1. 跨域问题
|
||||
在 `vue.config.js` 中配置代理:
|
||||
```javascript
|
||||
devServer: {
|
||||
proxy: {
|
||||
'/api': {
|
||||
target: 'http://localhost:8080',
|
||||
changeOrigin: true
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### 2. 图表不显示
|
||||
确保ECharts容器有固定高度,并在数据加载后初始化图表。
|
||||
|
||||
### 3. 权限不生效
|
||||
检查菜单权限配置和后端接口权限注解是否一致。
|
||||
336
ruoyi-modules/ruoyi-chat/docs/mcp-api-spec.md
Normal file
336
ruoyi-modules/ruoyi-chat/docs/mcp-api-spec.md
Normal file
@@ -0,0 +1,336 @@
|
||||
# MCP工具管理模块 - API接口文档
|
||||
|
||||
## 概述
|
||||
|
||||
本文档描述了MCP工具管理模块的REST API接口,供前端开发人员参考。
|
||||
|
||||
## 基础信息
|
||||
|
||||
- **Base URL**: `/api/mcp`
|
||||
- **认证方式**: Bearer Token (SaToken)
|
||||
- **响应格式**: JSON
|
||||
|
||||
---
|
||||
|
||||
## 1. MCP工具管理
|
||||
|
||||
### 1.1 查询工具列表(分页)
|
||||
|
||||
**接口**: `GET /tool/list`
|
||||
|
||||
**权限**: `mcp:tool:list`
|
||||
|
||||
**请求参数**:
|
||||
| 参数名 | 类型 | 必填 | 说明 |
|
||||
|--------|------|------|------|
|
||||
| name | String | 否 | 工具名称(模糊查询) |
|
||||
| description | String | 否 | 工具描述(模糊查询) |
|
||||
| type | String | 否 | 工具类型:LOCAL/REMOTE/BUILTIN |
|
||||
| status | String | 否 | 状态:0-启用, 1-禁用 |
|
||||
| pageNum | Integer | 是 | 页码,默认1 |
|
||||
| pageSize | Integer | 是 | 每页数量,默认10 |
|
||||
|
||||
**响应示例**:
|
||||
```json
|
||||
{
|
||||
"rows": [
|
||||
{
|
||||
"id": 1,
|
||||
"name": "ReadFileTool",
|
||||
"description": "读取文件内容工具",
|
||||
"type": "BUILTIN",
|
||||
"status": "0",
|
||||
"configJson": null,
|
||||
"createTime": "2026-03-08 10:00:00",
|
||||
"updateTime": "2026-03-08 10:00:00"
|
||||
}
|
||||
],
|
||||
"total": 1
|
||||
}
|
||||
```
|
||||
|
||||
### 1.2 查询工具列表(不分页)
|
||||
|
||||
**接口**: `GET /tool/all`
|
||||
|
||||
**权限**: `mcp:tool:list`
|
||||
|
||||
**请求参数**:
|
||||
| 参数名 | 类型 | 必填 | 说明 |
|
||||
|--------|------|------|------|
|
||||
| keyword | String | 否 | 关键词 |
|
||||
| type | String | 否 | 工具类型 |
|
||||
| status | String | 否 | 状态 |
|
||||
|
||||
**响应示例**:
|
||||
```json
|
||||
{
|
||||
"tools": [
|
||||
{
|
||||
"id": 1,
|
||||
"name": "ReadFileTool",
|
||||
"description": "读取文件内容工具",
|
||||
"type": "BUILTIN",
|
||||
"status": "0"
|
||||
}
|
||||
],
|
||||
"total": 1
|
||||
}
|
||||
```
|
||||
|
||||
### 1.3 获取工具详情
|
||||
|
||||
**接口**: `GET /tool/{id}`
|
||||
|
||||
**权限**: `mcp:tool:query`
|
||||
|
||||
**路径参数**:
|
||||
| 参数名 | 类型 | 必填 | 说明 |
|
||||
|--------|------|------|------|
|
||||
| id | Long | 是 | 工具ID |
|
||||
|
||||
### 1.4 新增工具
|
||||
|
||||
**接口**: `POST /tool`
|
||||
|
||||
**权限**: `mcp:tool:add`
|
||||
|
||||
**请求体**:
|
||||
```json
|
||||
{
|
||||
"name": "MyMcpTool",
|
||||
"description": "我的MCP工具",
|
||||
"type": "REMOTE",
|
||||
"status": "0",
|
||||
"configJson": "{\"baseUrl\": \"http://localhost:8080/mcp\"}"
|
||||
}
|
||||
```
|
||||
|
||||
### 1.5 修改工具
|
||||
|
||||
**接口**: `PUT /tool`
|
||||
|
||||
**权限**: `mcp:tool:edit`
|
||||
|
||||
**请求体**: 同新增工具
|
||||
|
||||
### 1.6 删除工具
|
||||
|
||||
**接口**: `DELETE /tool/{ids}`
|
||||
|
||||
**权限**: `mcp:tool:remove`
|
||||
|
||||
**路径参数**:
|
||||
| 参数名 | 类型 | 必填 | 说明 |
|
||||
|--------|------|------|------|
|
||||
| ids | String | 是 | 工具ID,多个用逗号分隔 |
|
||||
|
||||
### 1.7 更新工具状态
|
||||
|
||||
**接口**: `PUT /tool/{id}/status`
|
||||
|
||||
**权限**: `mcp:tool:edit`
|
||||
|
||||
**路径参数**:
|
||||
| 参数名 | 类型 | 必填 | 说明 |
|
||||
|--------|------|------|------|
|
||||
| id | Long | 是 | 工具ID |
|
||||
|
||||
**请求参数**:
|
||||
| 参数名 | 类型 | 必填 | 说明 |
|
||||
|--------|------|------|------|
|
||||
| status | String | 是 | 状态:0-启用, 1-禁用 |
|
||||
|
||||
### 1.8 测试工具连接
|
||||
|
||||
**接口**: `POST /tool/{id}/test`
|
||||
|
||||
**权限**: `mcp:tool:query`
|
||||
|
||||
**响应示例**:
|
||||
```json
|
||||
{
|
||||
"success": true,
|
||||
"message": "连接测试成功",
|
||||
"toolCount": 5,
|
||||
"tools": ["tool1", "tool2", "tool3", "tool4", "tool5"]
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 2. MCP市场管理
|
||||
|
||||
### 2.1 查询市场列表
|
||||
|
||||
**接口**: `GET /market/list`
|
||||
|
||||
**权限**: `mcp:market:list`
|
||||
|
||||
**请求参数**:
|
||||
| 参数名 | 类型 | 必填 | 说明 |
|
||||
|--------|------|------|------|
|
||||
| name | String | 否 | 市场名称 |
|
||||
| description | String | 否 | 市场描述 |
|
||||
| status | String | 否 | 状态 |
|
||||
| pageNum | Integer | 是 | 页码 |
|
||||
| pageSize | Integer | 是 | 每页数量 |
|
||||
|
||||
### 2.2 获取市场工具列表
|
||||
|
||||
**接口**: `GET /market/{marketId}/tools`
|
||||
|
||||
**权限**: `mcp:market:query`
|
||||
|
||||
**路径参数**:
|
||||
| 参数名 | 类型 | 必填 | 说明 |
|
||||
|--------|------|------|------|
|
||||
| marketId | Long | 是 | 市场ID |
|
||||
|
||||
**请求参数**:
|
||||
| 参数名 | 类型 | 必填 | 说明 |
|
||||
|--------|------|------|------|
|
||||
| page | Integer | 否 | 页码,默认1 |
|
||||
| size | Integer | 否 | 每页数量,默认10 |
|
||||
|
||||
### 2.3 刷新市场工具
|
||||
|
||||
**接口**: `POST /market/{marketId}/refresh`
|
||||
|
||||
**权限**: `mcp:market:edit`
|
||||
|
||||
**响应示例**:
|
||||
```json
|
||||
{
|
||||
"success": true,
|
||||
"message": "刷新成功",
|
||||
"addedCount": 3,
|
||||
"updatedCount": 5
|
||||
}
|
||||
```
|
||||
|
||||
### 2.4 加载工具到本地
|
||||
|
||||
**接口**: `POST /market/tool/{toolId}/load`
|
||||
|
||||
**权限**: `mcp:market:edit`
|
||||
|
||||
**路径参数**:
|
||||
| 参数名 | 类型 | 必填 | 说明 |
|
||||
|--------|------|------|------|
|
||||
| toolId | Long | 是 | 市场工具ID |
|
||||
|
||||
### 2.5 批量加载工具
|
||||
|
||||
**接口**: `POST /market/tools/batchLoad`
|
||||
|
||||
**权限**: `mcp:market:edit`
|
||||
|
||||
**请求体**:
|
||||
```json
|
||||
{
|
||||
"toolIds": [1, 2, 3]
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 3. 工具调用日志
|
||||
|
||||
### 3.1 查询调用日志
|
||||
|
||||
**接口**: `GET /tool/callLog`
|
||||
|
||||
**权限**: `mcp:tool:query`
|
||||
|
||||
**请求参数**:
|
||||
| 参数名 | 类型 | 必填 | 说明 |
|
||||
|--------|------|------|------|
|
||||
| toolId | Long | 否 | 工具ID |
|
||||
| sessionId | Long | 否 | 会话ID |
|
||||
| startDate | Date | 否 | 开始日期 |
|
||||
| endDate | Date | 否 | 结束日期 |
|
||||
| pageNum | Integer | 是 | 页码 |
|
||||
| pageSize | Integer | 是 | 每页数量 |
|
||||
|
||||
### 3.2 获取工具统计
|
||||
|
||||
**接口**: `GET /tool/{toolId}/metrics`
|
||||
|
||||
**权限**: `mcp:tool:query`
|
||||
|
||||
**响应示例**:
|
||||
```json
|
||||
{
|
||||
"toolId": 1,
|
||||
"toolName": "ReadFileTool",
|
||||
"today": {
|
||||
"callCount": 100,
|
||||
"successCount": 95,
|
||||
"failureCount": 5,
|
||||
"avgDurationMs": 150,
|
||||
"successRate": 95.0
|
||||
},
|
||||
"week": {
|
||||
"callCount": 500,
|
||||
"successCount": 475,
|
||||
"failureCount": 25,
|
||||
"avgDurationMs": 160,
|
||||
"successRate": 95.0
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 4. 状态码说明
|
||||
|
||||
| 状态码 | 说明 |
|
||||
|--------|------|
|
||||
| 200 | 请求成功 |
|
||||
| 401 | 未认证 |
|
||||
| 403 | 无权限 |
|
||||
| 404 | 资源不存在 |
|
||||
| 500 | 服务器错误 |
|
||||
|
||||
---
|
||||
|
||||
## 5. 前端页面需求
|
||||
|
||||
### 5.1 MCP工具管理页面 (`/mcp/tool`)
|
||||
|
||||
**功能**:
|
||||
- 工具列表展示(分页)
|
||||
- 工具搜索和筛选
|
||||
- 新增/编辑/删除工具
|
||||
- 工具状态切换
|
||||
- 工具连接测试
|
||||
|
||||
**表格列**:
|
||||
- 工具名称
|
||||
- 工具描述
|
||||
- 工具类型(标签显示)
|
||||
- 状态(开关)
|
||||
- 创建时间
|
||||
- 操作(编辑、删除、测试)
|
||||
|
||||
### 5.2 MCP市场管理页面 (`/mcp/market`)
|
||||
|
||||
**功能**:
|
||||
- 市场列表展示
|
||||
- 市场工具浏览
|
||||
- 刷新市场工具
|
||||
- 加载工具到本地
|
||||
|
||||
### 5.3 工具调用日志页面 (`/mcp/log`)
|
||||
|
||||
**功能**:
|
||||
- 调用日志列表
|
||||
- 按工具/日期筛选
|
||||
- 成功率统计
|
||||
- 响应时间统计
|
||||
|
||||
**图表**:
|
||||
- 每日调用次数趋势图
|
||||
- 工具调用成功率饼图
|
||||
- 平均响应时间柱状图
|
||||
Reference in New Issue
Block a user