# MCP Server（Hermes / OpenClaw）

TaskPool 提供官方 **MCP Server**，让 Hermes、OpenClaw、Cursor 等 AI Agent **完整接管**任务池：任务、脚本、环境变量、执行与日志。

> OpenAPI ≠ MCP  
> - **OpenAPI**：`/open2api/v1` REST 接口（设置页「启用 OpenAPI」）  
> - **MCP Server**：`/mcp` HTTP 端点，把 OpenAPI 封装成 Agent 可调用的 Tools

## 前置条件

1. 启动后端服务（Docker 或 `taskpool server`）
2. 系统设置 → **启用 OpenAPI** → **生成 Token**
3. Agent 能访问面板地址（如 `http://your-server:8052`）

## 内置 MCP 端点

MCP Server 已**内置在后端服务中**，无需单独进程。启用 OpenAPI 后，MCP 端点自动可用：

```
http://your-server:8052/mcp
```

## Agent 配置

### HTTP 模式（推荐）

远程 Agent 直接访问内置端点，无需本地安装。

```json
{
  "mcpServers": {
    "taskpool": {
      "url": "http://your-server:8052/mcp",
      "headers": {
        "Authorization": "Bearer 你的OpenAPI_Token"
      }
    }
  }
}
```

适用于：Hermes、OpenClaw 等支持 HTTP URL 的 Agent。

### stdio 模式

本地 Agent 需要安装 `taskpool` 二进制。

```json
{
  "mcpServers": {
    "taskpool": {
      "command": "taskpool",
      "args": ["mcp"]
    }
  }
}
```

适用于：Claude Desktop、Cursor 等只支持 stdio 的本地 Agent。

## 工具清单（Tools）

| 分类 | Tool | 说明 |
|------|------|------|
| 连通 | `ping_api` | 校验 URL + Token |
| 任务 | `list_tasks` | 分页列表/筛选 |
| 任务 | `get_task` | 详情 |
| 任务 | `create_task` | 创建 |
| 任务 | `update_task` | 更新 |
| 任务 | `delete_task` | 删除 |
| 任务 | `list_task_tags` | 标签 |
| 执行 | `run_task` | 立即执行 |
| 执行 | `stop_task` | 按 log_id 停止 |
| 执行 | `get_last_results` | 最近结果 |
| 日志 | `list_logs` | 日志列表 |
| 日志 | `get_log` | 日志详情（含输出） |
| 脚本 | `list_scripts` / `get_script` / `create_script` / `update_script` / `delete_script` | 脚本 CRUD |
| 环境变量 | `list_envs` / `list_all_envs` / `get_env` / `create_env` / `update_env` / `delete_env` | 环境变量 CRUD |

## Prompts

- `ops_overview`：巡检任务与失败日志  
- `run_and_check`：执行指定任务并检查日志（参数 `task_id`）

## Skill（可选）

仓库内提供 Agent Skill 文档，便于模型按固定流程操作：

- [`skills/taskpool/SKILL.md`](../../skills/taskpool/SKILL.md)

Skill 是说明书；**真正执行依赖 MCP Tools**。两者一起用效果最好。

## 安全建议

1. Token 等同管理员 OpenAPI 权限，勿提交到 Git  
2. 删除任务/脚本/环境变量前应人工确认  
3. 不要对不可信网络暴露面板与 Token  
4. 生产建议独立 Token，并定期轮换  

## 典型对话

- 「列出所有启用的任务」→ `list_tasks`  
- 「跑一下备份任务并看日志」→ `list_tasks` → `run_task` → `list_logs` → `get_log`  
- 「创建一个每天凌晨执行的清理任务」→ `create_task`  
- 「最近失败的任务是什么原因」→ `list_logs(status=failed)` → `get_log`

## 与项目能力的对应

参考 [项目介绍](./introduction.md) 中的能力边界：

| 面板能力 | MCP 是否覆盖 |
|----------|--------------|
| 任务调度 / 手动执行 | ✅ |
| 脚本管理 | ✅ |
| 环境变量 | ✅ |
| 执行日志 | ✅ |
| 在线终端 | ❌（WebSocket，不适合 MCP 工具化） |
| 语言环境 Mise 安装 | ❌（可后续扩展） |
| 消息推送配置 | ❌（可后续扩展） |
| 远程 Agent 节点 | 间接（任务上指定 agent 后可执行） |

## 故障排查

| 现象 | 处理 |
|------|------|
| `OpenAPI Token 未配置` | 设置页启用 OpenAPI 并生成 Token |
| `无效的 OpenAPI 令牌` | 设置页重新生成 Token |
| 连接失败 | 检查服务器地址、防火墙、容器网络 |
| Agent 看不到 tools | 确认配置正确，Token 有效 |
