feat: MCP 管理进后台 UI (v2.1) — 开关/Token 即时生效无需重启
- settings 表新增 mcp_enabled / mcp_token,鉴权中间件动态读库,后台改动即时生效(实测验证:关->503、开->200、换 token 旧401新200,均不重启) - 首次启动自动把 TONAV_MCP_TOKEN 环境变量迁移进数据库(兼容旧部署,systemd 现有 token 无感切换) - 后台新增 API:GET /admin/api/mcp/status(token 掩码)、POST /admin/api/mcp/token(重新生成+自动启用,仅一次明文展示)、POST /admin/api/mcp/enabled - 后台设置弹窗新增 MCP Server 区块:开关 checkbox、token 掩码展示、一键重新生成 - README 同步
This commit is contained in:
@@ -35,7 +35,7 @@
|
||||
### MCP Server(AI 集成)
|
||||
- 🤖 **原生 MCP Server v2** — Streamable HTTP 双端点:`POST /mcp`(请求-响应) + `GET /mcp`(SSE 流式)
|
||||
- 📡 **服务端主动推送** — 服务/分类变更时通过 SSE 推送 `notifications/tools/list_changed`
|
||||
- 🔑 **Bearer Token 鉴权** — 通过 `TONAV_MCP_TOKEN` 环境变量配置;**未设置时 MCP 端点禁用(返回 503),无默认兜底**
|
||||
- 🔑 **Bearer Token 鉴权** — 开关与 Token 存于 settings 表,**后台 UI 管理,改动即时生效无需重启**(环境变量 TONAV_MCP_TOKEN 首次启动自动迁移进数据库)
|
||||
- 🧰 **7 个工具** — 添加服务 / 创建分类 / 列出分类 / 列出服务 / 搜索服务 / 更新服务 / 删除服务
|
||||
- 🔎 **全文搜索** — `tonav_search_services` 独立搜索工具,按名称>标签>描述>URL 相关度排序
|
||||
- 📝 **智能添加** — 添加服务不传名称时自动抓取目标网页 `<title>` 与 meta description,图标默认取 favicon
|
||||
@@ -118,7 +118,7 @@ docker compose up -d
|
||||
| `TONAV_PORT` | `9520` | 监听端口 |
|
||||
| `TONAV_DB` | `/app/data/tonav.db` | 数据库路径 |
|
||||
| `TONAV_SECRET` | 内置密钥 | Cookie 签名密钥(生产环境务必修改) |
|
||||
| `TONAV_MCP_TOKEN` | **未设置则 MCP 禁用** | MCP 接口鉴权 Token(必须配置,无默认值) |
|
||||
| `TONAV_MCP_TOKEN` | 无 | **仅首启初始化用**:有值则迁移进数据库并自动启用 MCP;之后以后台设置为准 |
|
||||
| `TZ` | `Asia/Shanghai` | 时区 |
|
||||
|
||||
**数据持久化:**
|
||||
@@ -175,7 +175,7 @@ chmod +x tonav-go-ctl.sh
|
||||
| `TONAV_PORT` | `9520` | 监听端口 |
|
||||
| `TONAV_DB` | `tonav.db` | 数据库文件路径 |
|
||||
| `TONAV_SECRET` | 内置密钥 | Cookie 签名密钥 |
|
||||
| `TONAV_MCP_TOKEN` | **未设置则 MCP 禁用** | MCP 接口鉴权 Token(必须配置) |
|
||||
| `TONAV_MCP_TOKEN` | 无 | 仅首启初始化用,之后以后台设置为准 |
|
||||
|
||||
### 默认账号
|
||||
|
||||
@@ -210,6 +210,9 @@ chmod +x tonav-go-ctl.sh
|
||||
| GET | `/admin/api/backup/list` | 列出云端备份 |
|
||||
| DELETE | `/admin/api/backup/delete?name=xxx` | 删除云端备份 |
|
||||
| POST | `/admin/api/backup/restore?name=xxx` | 恢复云端备份 |
|
||||
| GET | `/admin/api/mcp/status` | MCP 状态(Token 掩码) |
|
||||
| POST | `/admin/api/mcp/token` | 重新生成 MCP Token(自动启用) |
|
||||
| POST | `/admin/api/mcp/enabled` | 开启/关闭 MCP |
|
||||
|
||||
### MCP 接口(Bearer Token 鉴权)
|
||||
| 方法 | 路径 | 说明 |
|
||||
@@ -217,8 +220,9 @@ chmod +x tonav-go-ctl.sh
|
||||
| POST | `/mcp` | MCP Streamable HTTP 端点(JSON-RPC 2.0 请求-响应) |
|
||||
| GET | `/mcp` | MCP SSE 流式端点(服务端主动推送通知) |
|
||||
|
||||
- 鉴权:请求头 `Authorization: Bearer <TONAV_MCP_TOKEN>`,缺失或错误返回 401
|
||||
- **未配置 `TONAV_MCP_TOKEN` 时端点返回 503(MCP 禁用),启动日志会警告**
|
||||
- 鉴权:请求头 `Authorization: Bearer <token>`,缺失或错误返回 401
|
||||
- **开关与 Token 在后台设置页管理(⚙️ 系统设置 → MCP Server),动态读数据库,改动即时生效无需重启**
|
||||
- 开关关闭或未生成 Token 时端点返回 503
|
||||
- POST 支持 `initialize` / `ping` / `tools/list` / `tools/call` 方法;通知类请求返回 202
|
||||
- POST 支持单条与批量 JSON-RPC 请求
|
||||
- GET 为 SSE 流:首个事件 `endpoint: /mcp`(握手),后续 `message` 事件推送 `notifications/tools/list_changed`(服务/分类增删时触发),每 30s keepalive
|
||||
|
||||
Reference in New Issue
Block a user