Skills todokan
Manage tasks, boards, thoughts, and reviews in Todokan via MCP
install
source · Clone the upstream repo
git clone https://github.com/openclaw/skills
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/openclaw/skills "$T" && mkdir -p ~/.claude/skills && cp -r "$T/skills/banatealab/todokan" ~/.claude/skills/openclaw-skills-todokan && rm -rf "$T"
OpenClaw · Install into ~/.openclaw/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/openclaw/skills "$T" && mkdir -p ~/.openclaw/skills && cp -r "$T/skills/banatealab/todokan" ~/.openclaw/skills/openclaw-skills-todokan && rm -rf "$T"
manifest:
skills/banatealab/todokan/SKILL.mdsource content
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
(declared in skill metadata)TODOKAN_MCP_URL
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)
1. list_habitats → Which workspaces exist? 2. list_boards → Which boards exist? (note the IDs) 3. list_tasks → Tasks on a board (with filters) 4. search_across_habitats → Full-text search across boards/habitats 5. get_events_since → Retrieve changes since a timestamp 6. list_board_labels → Available labels + usage counts 7. list_task_documents → Documents attached to a task 8. read_document → Content of a document
Writing (only after orientation + confirmation)
9. create_task / create_board / create_habitat 10. update_task / update_task_by_title 11. create_document / add_document_to_task 12. delete_task → Only after explicit confirmation
AI-Assisted (optional)
13. propose_task_variants → Generate 2-3 variants 14. confirm_task_fields → Review fields before creation
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
create_task- Board: Which board? (If unclear → show
, let the user choose)list_boards - Title: Short, precise, imperative (max 80 characters)
- Priority: low / normal / high — default to
if unclearnormal - Due date: Only set if mentioned by the user
Before update_task
update_task- Correct task? State the title + board for confirmation
- Which fields? Only change the fields the user requested
Before delete_task
delete_task- Always ask for explicit confirmation — "Should I permanently delete task '[Title]' on board '[Board]'? This cannot be undone."
Before create_document
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:
Source: [URL or filename] Created by: Agent on [date]
Scope Awareness
- Worker endpoint (
): Read-only + comments (/mcp-worker
). No task/board CUD, no document creation.add_comment - Planner endpoint (
): Full access. Still ask before destructive actions./mcp - 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)
## Briefing: [Board Name] — [Date] **Open (todo):** X tasks **In progress (doing):** Y tasks **Completed (done):** Z tasks ### Urgent (high priority) - [ ] [Task Title] — due [Date] - [ ] [Task Title] — due [Date] ### In Progress - [~] [Task Title] — since [Date] ### Next Steps [1-2 sentences recommendation based on the data]
Draft (preview before task creation)
## Task Draft | Field | Value | |-------------|-------------------------------| | Board | [Board Name] | | Title | [Title, max 80 chars] | | Description | [Description, max 500 chars] | | Status | todo | | Priority | [low / normal / high] | | Due | [YYYY-MM-DD or —] | | Labels | [label1, label2] | Should I create this task?
Document Draft
## Document Draft **Title:** [Title] **Format:** markdown **Linked to:** [Task Title] on [Board Name] --- [Document content] --- Should I create this document?
Data Model
Habitat (workspace/project) └── Board (kanban board, type: "task" or "thought") └── Task (individual item with status, priority, labels, due date) └── Document (attached notes/docs in markdown, text, or html)
- Habitats group boards. A user can have multiple habitats.
- Boards are kanban boards. Type
for actionable items,task
for ideas/notes.thought - Tasks live on a board and move through status columns.
- Documents are rich text attached to tasks.
Status Values
| Status | Meaning |
|---|---|
| Not started |
| In progress |
| Completed |
Priority Values
| Priority | Meaning |
|---|---|
| Low priority |
| Default priority |
| High/urgent priority |
Available MCP Tools
Reading Data
— List all workspaceslist_habitats
— List all boards (returns id, name, version)list_boards
— List tasks with filters:list_tasks
,boardId
,status
/label
,labels
,limitcursor
— Full-text search over habitats/boards/tasks in one callsearch_across_habitats
— Unified feed since timestamp (task events + comments + documents)get_events_since
— Get unique labels on a board with usage countslist_board_labels
— Get documents attached to a tasklist_task_documents
— Read a document's contentread_document
— List comments on a tasklist_task_comments
Creating & Modifying (Planner endpoint only)
— Create a new workspace (create_habitat
)name
— Create a new board (create_board
, optionalname
,habitatId
)boardType
— Create a task (create_task
,title
orboardId
, optionalboardName
,description
,dueDate
,priority
)labels
— Update a task by ID (update_task
, plus fields to change)taskId
— Update a task by exact title match (update_task_by_title
,titleExact
orboardId
)boardName
— Permanently delete a task (delete_task
)taskId
— Create a document (optionalcreate_document
to attach)relatedTaskId
— Attach a new document to a taskadd_document_to_task
— Add a comment to a taskadd_comment
AI-Assisted Creation
— Generate 2-3 task variants (short/standard/detailed) from a rough descriptionpropose_task_variants
— Preview a variant's fields before creating itconfirm_task_fields
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:
list_tasks { "assignee": "ai" } - To see all AI-enabled tasks:
(default — only AI-enabled tasks are returned)list_tasks {} - To explicitly include non-AI tasks:
(override, useful for reporting)list_tasks { "aiEnabled": false }
OAuth & Authentication
- OAuth 2.1 with PKCE (RS256 JWT)
- Token lifetime: 30 days, no refresh token
- Planner (
): Full CRUD access — all scopes/mcp - Worker (
):/mcp-worker
,boards:read
,tasks:read
,labels:read
,docs:read
,comments:readcomments:write - 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
to find the board IDlist_boards
withlist_tasks
to get tasksboardId
Create a task
create_task { "title": "Review PR #42", "boardName": "Development", "priority": "high", "dueDate": "2026-03-01" }
Move a task to done
update_task { "taskId": "<uuid>", "status": "done" }
Add labels to a task
update_task { "taskId": "<uuid>", "labels": ["bug", "frontend"] }
Find tasks by label
list_tasks { "boardId": "<uuid>", "labels": ["bug"] }
Search across all habitats
search_across_habitats { "query": "investor meeting", "limit": 20 }
Poll event feed (agent loop)
get_events_since { "since": "2026-02-24T08:00:00Z", "limit": 200 }
Tips
- Always call
first to discover available board IDs — don't guess UUIDs.list_boards - Use
instead ofboardName
when the user refers to boards by name.boardId - Due dates use
format.YYYY-MM-DD - Task titles are max 80 characters, descriptions max 500 characters.
- Labels are free-form strings (max 10 per task).
- The
tool requires the task's UUID. Useupdate_task
to find it, orlist_tasks
if you only know the title.update_task_by_title