DevTask Mcp
by KanoCifer
README.md
# DevTaskMcp
Agent 原生的 dev 任务看板 — 把需求调研成规格清晰的任务,端到端执行并验证验收条件。基于 Pocock 的 frontier 模式,含 spec/slug/dependency 字段和 scope 分类。
## 技能列表
| 技能 | 用途 | 触发 |
| ------------------ | --------------------------------------------------- | -------------------------------------------------------- |
| `devtask-setup` | 初始化项目:检查环境、写 CLAUDE.md 引导、可选落库 | 首次引入 devtask / "初始化 devtask" / "setup devtask" |
| `devtask` | 需求 → 落库任务,全规模路由:单点修复 / 批量分类 / Keep-Kill-Pivot / spec+subtasks | 用户说"我想做个…" / "加个功能" / "修个 bug" / "plan this out" |
| `devtask-doit` | 端到端执行任务,自检验收条件,verify 通过后标记完成 | 用户说"做 task-N" / "执行任务" / "work on the next task" |
| `devtask-review` | 验收条件 + 四视角清理审查 + 正确性审查,能修就修 | 用户说"review task-N" / "verify task-N" / "验收 task-N" |
## 安装
### Claude Code Plugin(推荐)
单 plugin 包含 MCP server + 3 个技能,一次安装即可:
```bash
# 添加市场
claude plugins marketplace add KanoCifer/DevTaskMcp
# 安装插件
claude plugins install devtask@devtask
```
安装后 3 个技能均自动可用。MCP server 走 `.mcp.json` 定义的远程 URL —— 部署后把 `.mcp.json` 里的域名和 token 换成真实值,本地即通过远程实例提供服务。
或在 Claude 对话框中交互完成:
```
/plugin marketplace add KanoCifer/DevTaskMcp
/plugin install devtask@devtask
```
本地开发加载:
```bash
claude --plugin-dir /path/to/DevTaskMcp
```
默认通过 `uv run` 启动 server,自动解析依赖。如果机器上没有 `uv`,参考下方「无 uv」章节。
### 手动安装(不用 plugin)
把技能目录链接到 Claude Code 的技能路径,并手动配置 MCP server:
```bash
# 1. 配置 MCP server(添加到 ~/.claude.json 或项目 .mcp.json,指向已部署的远程实例)
# "type": "http",
# "url": "https://你的域名/mcp/",
# "headers": { "Authorization": "Bearer 你的MCP_AUTH_TOKEN" }
# 2. 链接技能目录
# 作为 user-level 技能(全局可用)
ln -s /path/to/DevTaskMcp/skills/devtask-setup ~/.claude/skills/devtask-setup
ln -s /path/to/DevTaskMcp/skills/devtask ~/.claude/skills/devtask
ln -s /path/to/DevTaskMcp/skills/devtask-doit ~/.claude/skills/devtask-doit
ln -s /path/to/DevTaskMcp/skills/devtask-review ~/.claude/skills/devtask-review
# 或作为 project-level 技能(放在项目 .claude/skills/ 下)
mkdir -p .claude/skills
ln -s /path/to/DevTaskMcp/skills/devtask-setup .claude/skills/devtask-setup
ln -s /path/to/DevTaskMcp/skills/devtask .claude/skills/devtask
ln -s /path/to/DevTaskMcp/skills/devtask-doit .claude/skills/devtask-doit
ln -s /path/to/DevTaskMcp/skills/devtask-review .claude/skills/devtask-review
```
注意:手动安装时技能不带有 `devtask:` 命名空间前缀。
### 无 uv
如果机器上没有 `uv`,两种方式准备 Python 环境:
**方式 A — 初始化脚本(推荐):**
```bash
scripts/setup.sh # 创建 .venv 并安装依赖
# 或指定解释器:
PYTHON=python3.11 scripts/setup.sh
```
**方式 B — 手动 pip install:**
```bash
python3 -m venv .venv
.venv/bin/pip install -e .
```
然后在 `.mcp.json` 中指向远程实例(同「手动安装」第 1 步的 URL 配置)。
## 远程部署(streamable-http)
`devtask_mcp.server` 以 **streamable-http** transport 运行:一个长驻进程服务所有调用方,供外部 agent(Claude Code remote、Cursor 等)通过 URL 调用。
**1. 构建并启动(本机验证)**
```bash
cp .env.example .env # 填 DEVTASK_API_KEY、MCP_AUTH_TOKEN
docker compose up --build
```
compose 只把端口绑到 `127.0.0.1:8003` —— 服务不直接暴露公网。
**2. 反向代理 + TLS(Nginx/Caddy 等,自行部署)**
把 `127.0.0.1:8003` 转发到 `https://你的域名/mcp/`(streamable-http 的标准端点路径是 `/mcp/`)。请求头必须原样透传,尤其是 `Authorization` 和 streamable-http 需要的 `Mcp-Session-Id`。
**3. 客户端连接**
```json
{
"mcpServers": {
"devtask": {
"type": "http",
"url": "https://你的域名/mcp/",
"headers": { "Authorization": "Bearer 你的MCP_AUTH_TOKEN" }
}
}
}
```
> `MCP_AUTH_TOKEN` 留空时服务不启用应用层鉴权 —— 生产务必设置,并在反代层额外加 IP 白名单/限流。
## 配置
```bash
cp .env.example .env
# 填写 DEVTASK_API_KEY(必填)和 DEVTASK_API_BASE(可选)
```
`DEVTASK_API_KEY` 是 kanocifer-chat API 的 Bearer <REDACTED> 为空时 server 启动会报错。
远程部署时还需配置:
- `MCP_AUTH_TOKEN` — 外部 MCP 客户端调用时携带的 Bearer token。留空则关闭应用层鉴权(仅本地/内网)。
- `MCP_HOST` / `MCP_PORT` — HTTP 监听地址与端口,默认 `0.0.0.0:8003`。
## 使用
技能以 plugin 名命名空间:
```
/devtask:devtask-setup # 初始化:检查环境 + 写 CLAUDE.md 引导
/devtask:devtask # 需求 → 落库任务(自动按规模路由)
/devtask:devtask-doit # 领取 frontier 最前排任务执行
/devtask:devtask-doit task-42 # 执行指定 slug 的任务
/devtask:devtask-review task-42 # 验收条件 + 四视角代码审查
```
## 工作流程
```
/devtask:devtask-setup ← 首次:初始化 + 写引导
│
▼
需求描述
│
▼
/devtask:devtask
│ 按规模路由:单点修复 / 批量分类 / spec+subtasks → 创建任务
▼
/devtask:devtask-doit [task-N]
│ 端到端执行 → 自检验收条件 → /devtask:devtask-review
▼
/devtask:devtask-review [task-N]
│ 验收条件 + 四视角清理审查 + 正确性审查
▼
标记已完成
```
## 任务模型(v3 — Task Document)
v3 把所有长文本统一到一个 **Task Document**。`detail` 是唯一长文本字段,
正文必须使用固定章节:Goal / Plan / Acceptance Criteria / Constraints /
Context Pointers(外加 Decisions / Out of Scope)。其它结构化字段保持不变。
### MCP 工具
| 工具 | 用途 |
| ---------------------------------- | ------------------------------------------------------- |
| `create_task` | 内联参数创建任务,长文放 `detail`(取代旧的两个工具) |
| `update_task` | 修改状态字段 + 可选 detail 正文;`slugs=[]` 批量完成 |
| `get_task(slug, view=...)` | `summary` / `full` |
| `list_children` | 永远返回 summary 记录 |
### 视图
| view | 返回内容 |
| ---------- | ------------------------------------------------------- |
| `summary` | 结构化字段,不包含 detail |
| `full` | 原始任务对象(含完整 detail) |
默认 `view=summary`,防止 agent 误把长文拉进上下文。
### 字段表
| 字段 | 必填 | 含义 | 形式 |
| -------------- | ---- | --------------------------------------- | -------------- |
| `slug` | 自动 | `task-ID`,人类可读,单调递增 | — |
| `title` | 是 | 一行摘要,动词开头 | plain |
| `type` | 是 | `问题` / `功能需求` / `优化` / `技术债` | — |
| `priority` | 是 | `P0 紧急` / `P1 高` / `P2 中` / `P3 低` | — |
| `scope` | 是 | `<层>-<技术>` 自由格式 | — |
| `kind` | 否 | `spec` / `subtask` | — |
| `parent_slug` | 否 | 子任务归属的 spec slug | — |
| `due_date` | 否 | ISO-8601 截止日期 | — |
| `blocked_by` | 否 | 同层前置依赖 | — |
| `for_agent` | 是 | Agent 可认领标志 | — |
| `detail` | 否 | Task Document 渲染后的 Markdown | Markdown |
枚举值使用 Go 后端期望的**中文字面量**——不要使用英文键。详细 Task Document
规范见 `docs/task-document-v1.md`。
## 目录结构
```
DevTaskMcp/
├── .claude-plugin/
│ ├── plugin.json # Plugin 清单(元数据 + MCP server 引用)
│ └── marketplace.json # 市场发布配置(3 个技能)
├── .mcp.json # MCP server 定义(plugin 自动加载)
├── skills/
│ ├── devtask-setup/SKILL.md # 初始化:检查环境 + 写 CLAUDE.md 引导
│ ├── devtask/references/grill.md # frontier 访谈协议(渐进披露)
│ ├── devtask/SKILL.md # 需求 → 落库任务(全规模路由)
│ ├── devtask-doit/SKILL.md # 端到端执行 + verify 门控
│ └── devtask-review/SKILL.md # 验收条件 + 四视角清理审查 + 正确性审查
├── src/devtask_mcp/ # MCP server Python 包
│ ├── __init__.py
│ ├── client.py # HTTP client,信封剥离
│ ├── models.py # Pydantic 模型 + 中文枚举
│ └── server.py # FastMCP,6 个工具注册(已 slug 化)
├── Dockerfile # 容器镜像(uv slim + 锁文件)
├── docker-compose.yml # 单服务编排,端口回环绑定 8003
├── pyproject.toml
├── CLAUDE.md
└── README.md
```
## 架构备注
- **边界剥离信封:** Go 后端用 `{code, message, data}` 包裹响应;`client._unwrap` 在边界剥离,MCP 工具不会浪费 token 在包装字段上。
- **错误原样传播:** 非 2xx 或 `code != 0` 抛出 `DevTaskAPIError`,错误信息原样呈现给 agent。
- **`per_page` 上限 20**,无论调用方传入多大值。
- **HTTP 超时:** 15.0 秒。
- **单例长连接 client** 在模块级别——streamable-http 下单个长驻进程服务所有调用方,client 无会话状态,共享安全。
- **Slug 是规范的人类 ID**——在所有 UI、对话和 MCP 工具引用中使用 `task-N`。后端已全面 slug 化,不再接受 ObjectID 输入。
- **`kind` / `parent_slug` 语义分离:** `parent_slug` 承载子→父的结构归属(`devtask_list_children` 走此索引),`blocked_by` 只承载同层前置依赖(执行顺序)。
## License
[MIT](LICENSE)
TDQS
A4.4/5.0
Scored across 6 tools
Disambiguation5/5
All six tools have clearly distinct purposes: create, get by ObjectID, get by slug, get frontier tasks, list with filters, and update. No functional overlap.
Naming Consistency5/5
All tool names follow a consistent verb_noun snake_case pattern (e.g., create_dev_task, get_dev_task_by_slug, list_dev_tasks), making it easy to predict behavior.
Tool Count5/5
Six tools strike a good balance, covering core CRUD plus a specialized frontier query without being too many or too few for a task management MCP server.
Completeness4/5
The tools cover creation, reading (multiple variants), listing, and updating. The only notable gap is the absence of a dedicated delete tool, though soft-delete is supported via list filtering.
Maintenance
ActivityMaintained
ResponsivenessNo issues