Todokan — Kanban Task Management
Todokan is a kanban-style task manager. You can manage the user's tasks, boards, and projects through MCP tools.
Prerequisites
- - A Todokan MCP server must be available (see README for setup)
- Required env vars:
TODOKAN_API_KEY, TODOKAN_MCP_URL (declared in skill metadata)
Trigger — When to Activate This Skill
Activate the Todokan skill when the user has one of the following intents:
| Intent | Example |
|---|
| Create / edit / delete a task | "Create a task: review PR" |
| Show boards or tasks |
"Show me my tasks", "What's on the dev board?" |
| Change status | "Mark task X as done" |
| Save research results | "Save this as a task / document in Todokan" |
| Briefing / summary from tasks | "Give me a briefing of my open tasks" |
| Attach a document to a task | "Write a note on task X" |
| Search topics across boards | "What did I note about the investor meeting?" |
| Retrieve changes since last check | "What's new since this morning?" |
Do not activate when the user is just talking about tasks in general without referencing Todokan.
Tool Ordering
Follow this order to achieve consistent results:
Reading (always orient first)
CODEBLOCK0
Writing (only after orientation + confirmation)
CODEBLOCK1
AI-Assisted (optional)
CODEBLOCK2
Golden rule: Never write blindly. Always call list_boards first to discover IDs — never guess UUIDs.
Mandatory Checks
Before executing write actions, clarify the following:
Before create_task
- - [ ] Board: Which board? (If unclear → show
list_boards, let the user choose) - [ ] Title: Short, precise, imperative (max 80 characters)
- [ ] Priority: low / normal / high — default to
normal if unclear - [ ] Due date: Only set if mentioned by the user
Before update_task
- - [ ] Correct task? State the title + board for confirmation
- [ ] Which fields? Only change the fields the user requested
Before delete_task
- - [ ] Always ask for explicit confirmation — "Should I permanently delete task '[Title]' on board '[Board]'? This cannot be undone."
Before create_document
- - [ ] Clarify format: markdown, text, or html
- [ ] Link: Attach to which task (or standalone)?
Guardrails
No Hallucination
- - Use only real data from MCP tool responses. Never fabricate task IDs, board names, or content.
- If a tool call fails or returns empty data: inform the user, do not improvise.
- When in doubt, show the actual results and ask.
No Sensitive Data
- - Do not store passwords, API keys, tokens, or personal data in task titles or descriptions.
- If the user mentions sensitive information, warn them: "This may contain sensitive data — should I really store it in Todokan?"
Source Attribution
- - When storing content from external research (web, files, other tools) in Todokan, note the source in the task description or document:
CODEBLOCK3
Scope Awareness
- - Worker endpoint (
/mcp-worker): Read-only + comments (add_comment). No task/board CUD, no document creation. - Planner endpoint (
/mcp): Full access. Still ask before destructive actions. - On scope errors: explain to the user that the current endpoint does not have the required permissions.
Idempotency
- - On network errors: do not blindly retry the same action. First check whether the action was already performed (
list_tasks).
Output Format
Briefing (summary of existing tasks)
CODEBLOCK4
Draft (preview before task creation)
CODEBLOCK5
Document Draft
CODEBLOCK6
Data Model
CODEBLOCK7
- - Habitats group boards. A user can have multiple habitats.
- Boards are kanban boards. Type
task for actionable items, thought for ideas/notes. - Tasks live on a board and move through status columns.
- Documents are rich text attached to tasks.
Status Values
| Status | Meaning |
|---|
| INLINECODE15 | Not started |
| INLINECODE16 |
In progress |
|
done | Completed |
Priority Values
| Priority | Meaning |
|---|
| INLINECODE18 | Low priority |
| INLINECODE19 |
Default priority |
|
high | High/urgent priority |
Available MCP Tools
Reading Data
- -
list_habitats — List all workspaces - INLINECODE22 — List all boards (returns id, name, version)
- INLINECODE23 — List tasks with filters:
boardId, status, label/labels, limit, INLINECODE29 - INLINECODE30 — Full-text search over habitats/boards/tasks in one call
- INLINECODE31 — Unified feed since timestamp (task events + comments + documents)
- INLINECODE32 — Get unique labels on a board with usage counts
- INLINECODE33 — Get documents attached to a task
- INLINECODE34 — Read a document's content
- INLINECODE35 — List comments on a task
Creating & Modifying (Planner endpoint only)
- -
create_habitat — Create a new workspace (name) - INLINECODE38 — Create a new board (
name, optional habitatId, boardType) - INLINECODE42 — Create a task (
title, boardId or boardName, optional description, dueDate, priority, labels) - INLINECODE50 — Update a task by ID (
taskId, plus fields to change) - INLINECODE52 — Update a task by exact title match (
titleExact, boardId or boardName) - INLINECODE56 — Permanently delete a task (
taskId) - INLINECODE58 — Create a document (optional
relatedTaskId to attach) - INLINECODE60 — Attach a new document to a task
- INLINECODE61 — Add a comment to a task
AI-Assisted Creation
- -
propose_task_variants — Generate 2-3 task variants (short/standard/detailed) from a rough description - INLINECODE63 — Preview a variant's fields before creating it
AI Visibility Gate
By default, the MCP server only returns tasks where aiEnabled: true. Tasks with aiEnabled: false are invisible to MCP agents — they will not appear in list_tasks, search_across_habitats, get_events_since, or get_task.
Users control this via a "Send to AI" button on each task card. When clicked, it sets aiEnabled: true, assignee: 'ai', and status: 'doing'.
- - To see only AI-assigned tasks: INLINECODE73
- To see all AI-enabled tasks:
list_tasks {} (default — only AI-enabled tasks are returned) - To explicitly include non-AI tasks:
list_tasks { "aiEnabled": false } (override, useful for reporting)
OAuth & Authentication
- - OAuth 2.1 with PKCE (RS256 JWT)
- Token lifetime: 30 days, no refresh token
- Planner (
/mcp): Full CRUD access — all scopes - Worker (
/mcp-worker): boards:read, tasks:read, labels:read, docs:read, comments:read, INLINECODE83 - No rate limiting — still be conservative with calls
- Activity logging: Every tool call is logged server-side
Common Workflows
List all tasks on a board
- 1.
list_boards to find the board ID - INLINECODE85 with
boardId to get tasks
Create a task
CODEBLOCK8
Move a task to done
CODEBLOCK9
Add labels to a task
CODEBLOCK10
Find tasks by label
CODEBLOCK11
Search across all habitats
CODEBLOCK12
Poll event feed (agent loop)
CODEBLOCK13
Tips
- - Always call
list_boards first to discover available board IDs — don't guess UUIDs. - Use
boardName instead of boardId when the user refers to boards by name. - Due dates use
YYYY-MM-DD format. - Task titles are max 80 characters, descriptions max 500 characters.
- Labels are free-form strings (max 10 per task).
- The
update_task tool requires the task's UUID. Use list_tasks to find it, or update_task_by_title if you only know the title.
Todokan — 看板任务管理
Todokan 是一款看板风格的任务管理器。您可以通过 MCP 工具管理用户的任务、看板和项目。
前置条件
- - 必须有一个可用的 Todokan MCP 服务器(参见 README 进行配置)
- 所需环境变量:TODOKANAPIKEY、TODOKANMCPURL(在技能元数据中声明)
触发条件 — 何时激活此技能
当用户有以下意图之一时,激活 Todokan 技能:
| 意图 | 示例 |
|---|
| 创建/编辑/删除任务 | 创建一个任务:审查 PR |
| 显示看板或任务 |
显示我的任务、开发看板上有什么? |
| 更改状态 | 将任务 X 标记为已完成 |
| 保存研究结果 | 将此保存为 Todokan 中的任务/文档 |
| 从任务生成简报/摘要 | 给我一份未完成任务简报 |
| 为任务附加文档 | 在任务 X 上写一条备注 |
| 跨看板搜索主题 | 关于投资者会议我记了什么? |
| 检索自上次检查以来的变更 | 今天早上以来有什么新内容? |
不要在用户只是泛泛谈论任务而未提及 Todokan 时激活。
工具调用顺序
按以下顺序操作以获得一致结果:
读取(始终先进行定位)
- 1. listhabitats → 存在哪些工作区?
- listboards → 存在哪些看板?(注意 ID)
- listtasks → 看板上的任务(可带筛选条件)
- searchacrosshabitats → 跨看板/工作区全文搜索
- geteventssince → 检索自某个时间戳以来的变更
- listboardlabels → 可用的标签及使用次数
- listtaskdocuments → 附加到任务的文档
- readdocument → 文档内容
写入(仅在定位和确认之后)
- 9. createtask / createboard / createhabitat
- updatetask / updatetaskbytitle
- createdocument / adddocumenttotask
- deletetask → 仅在明确确认后
AI 辅助(可选)
- 13. proposetaskvariants → 生成 2-3 个变体
- confirmtaskfields → 创建前预览字段
黄金法则: 绝不盲目写入。始终先调用 list_boards 发现 ID — 绝不猜测 UUID。
强制检查
在执行写入操作前,明确以下内容:
在 create_task 之前
- - [ ] 看板:哪个看板?(如果不明确 → 显示 list_boards,让用户选择)
- [ ] 标题:简短、精确、祈使句(最多 80 个字符)
- [ ] 优先级:低 / 普通 / 高 — 如果不明确则默认为 normal
- [ ] 截止日期:仅在用户提及时才设置
在 update_task 之前
- - [ ] 任务正确吗? 陈述标题和看板以确认
- [ ] 哪些字段? 仅更改用户要求的字段
在 delete_task 之前
- - [ ] 始终要求明确确认 — 是否永久删除看板[看板名称]上的任务[标题]?此操作不可撤销。
在 create_document 之前
- - [ ] 明确格式:markdown、text 或 html
- [ ] 链接:附加到哪个任务(或独立文档)?
护栏
禁止幻觉
- - 仅使用 MCP 工具响应中的真实数据。绝不捏造任务 ID、看板名称或内容。
- 如果工具调用失败或返回空数据:告知用户,不要即兴发挥。
- 如有疑问,显示实际结果并询问。
禁止敏感数据
- - 不要在任务标题或描述中存储密码、API 密钥、令牌或个人数据。
- 如果用户提及敏感信息,警告他们:这可能包含敏感数据 — 确定要存储在 Todokan 中吗?
来源归属
- - 将外部研究(网络、文件、其他工具)的内容存储到 Todokan 时,在任务描述或文档中注明来源:
来源:[URL 或文件名]
创建者:Agent 于 [日期]
范围意识
- - Worker 端点(/mcp-worker):只读 + 评论(add_comment)。无任务/看板 CUD,无文档创建。
- Planner 端点(/mcp):完全访问。破坏性操作前仍需询问。
- 范围错误时:向用户解释当前端点没有所需权限。
幂等性
- - 网络错误时:不要盲目重试相同操作。首先检查操作是否已执行(list_tasks)。
输出格式
简报(现有任务摘要)
markdown
简报:[看板名称] — [日期]
待办(todo): X 个任务
进行中(doing): Y 个任务
已完成(done): Z 个任务
紧急(高优先级)
- - [ ] [任务标题] — 截止 [日期]
- [ ] [任务标题] — 截止 [日期]
进行中
下一步
[基于数据的 1-2 句建议]
草稿(任务创建前预览)
markdown
任务草稿
[标题,最多 80 字符] |
| 描述 | [描述,最多 500 字符] |
| 状态 | todo |
| 优先级 | [低 / 普通 / 高] |
| 截止日期 | [YYYY-MM-DD 或 —] |
| 标签 | [标签1, 标签2] |
是否创建此任务?
文档草稿
markdown
文档草稿
标题: [标题]
格式: markdown
链接到: [看板名称] 上的 [任务标题]
[文档内容]
是否创建此文档?
数据模型
工作区(工作区/项目)
└── 看板(看板,类型:task 或 thought)
└── 任务(单个项目,含状态、优先级、标签、截止日期)
└── 文档(markdown、text 或 html 格式的附加笔记/文档)
- - 工作区 对看板进行分组。一个用户可以有多个工作区。
- 看板 是看板。类型 task 用于可操作项,thought 用于想法/笔记。
- 任务 位于看板上,在不同状态列之间移动。
- 文档 是附加到任务的富文本。
状态值
进行中 |
| done | 已完成 |
优先级值
默认优先级 |
| high | 高/紧急优先级 |
可用的 MCP 工具
读取数据
- - listhabitats — 列出所有工作区
- listboards — 列出所有看板(返回 id、name、version)
- listtasks — 使用筛选条件列出任务:boardId、status、label/labels、limit、cursor
- searchacrosshabitats — 一次调用跨工作区/看板/任务全文搜索
- geteventssince — 自时间戳以来的统一事件流(任务事件 + 评论 + 文档)
- listboardlabels — 获取看板上唯一的标签及其使用次数
- listtaskdocuments — 获取附加到任务的文档
- readdocument — 读取文档内容
- listtaskcomments — 列出任务上的评论
创建与修改(仅 Planner 端点)
- - createhabitat — 创建新工作区(name)
- createboard — 创建新看板(name,可选 habitatId、boardType)
- createtask — 创建任务(title、boardId 或 boardName,可选 description、dueDate、priority、labels)
- updatetask — 按 ID 更新任务(taskId,加上