SKILL.md
Todoist Automation via Rube MCP
Automate Todoist operations including task creation and management, project organization, section management, filtering, and bulk task workflows through Composio's Todoist toolkit.
Prerequisites
- Rube MCP must be connected (RUBESEARCHTOOLS available)
- Active Todoist connection via
RUBEMANAGECONNECTIONSwith toolkittodoist - Always call
RUBESEARCHTOOLSfirst to get current tool schemas
Setup
Get Rube MCP: Add https://rube.app/mcp as an MCP server in your client configuration. No API keys needed — just add the endpoint and it works.
- Verify Rube MCP is available by confirming
RUBESEARCHTOOLSresponds - Call
RUBEMANAGECONNECTIONSwith toolkittodoist - If connection is not ACTIVE, follow the returned auth link to complete Todoist OAuth
- Confirm connection status shows ACTIVE before running any workflows
Core Workflows
1. Create and Manage Tasks
When to use: User wants to create, update, complete, reopen, or delete tasks
Tool sequence:
TODOISTGETALL_PROJECTS- List projects to find the target project ID [Prerequisite]TODOISTGETALL_SECTIONS- List sections within a project for task placement [Optional]TODOISTCREATETASK- Create a single task with content, due date, priority, labels [Required]TODOISTBULKCREATE_TASKS- Create multiple tasks in one request [Alternative]TODOISTUPDATETASK- Modify task properties (content, due date, priority, labels) [Optional]TODOISTCLOSETASK- Mark a task as completed [Optional]TODOISTREOPENTASK- Restore a previously completed task [Optional]TODOISTDELETETASK- Permanently remove a task [Optional]
Key parameters for CREATE_TASK:
content: Task title (supports markdown and hyperlinks)description: Additional notes (do NOT put due dates here)project_id: Alphanumeric project ID; omit to add to Inboxsection_id: Alphanumeric section ID for placement within a projectparent_id: Task ID for creating subtaskspriority: 1 (normal) to 4 (urgent) -- note: Todoist UI shows p1=urgent, API p4=urgentdue_string: Natural language date like"tomorrow at 3pm","every Friday at 9am"due_date: Specific dateYYYY-MM-DDformatdue_datetime: Specific date+time in RFC3339YYYY-MM-DDTHH:mm:ssZlabels: Array of label name stringsduration+duration_unit: Task duration (e.g.,30+"minute")
Pitfalls:
- Only one
due*field can be used at a time (exceptduelangwhich can accompany any) - Do NOT embed due dates in
contentordescription-- usedue_stringfield - Do NOT embed duration phrases like "for 30 minutes" in
duestring-- useduration+durationunit priorityin API: 1=normal, 4=urgent (opposite of Todoist UI display where p1=urgent)- Task IDs can be numeric or alphanumeric; use the format returned by the API
CLOSETASKmarks complete;DELETETASKpermanently removes -- they are different operations
2. Manage Projects
When to use: User wants to list, create, update, or inspect projects
Tool sequence:
TODOISTGETALL_PROJECTS- List all projects with metadata [Required]TODOISTGETPROJECT- Get details for a specific project by ID [Optional]TODOISTCREATEPROJECT- Create a new project with name, color, view style [Optional]TODOISTUPDATEPROJECT- Modify project properties [Optional]
Key parameters:
name: Project name (required for creation)color: Todoist palette color (e.g.,"blue","red","green","charcoal")view_style:"list"or"board"layoutparent_id: Parent project ID for creating sub-projectsis_favorite/favorite: Boolean to mark as favoriteproject_id: Required for update and get operations
Pitfalls:
- Projects with similar names can lead to selecting the wrong project_id; always verify
CREATEPROJECTusesfavoritewhileUPDATEPROJECTusesis_favorite-- different field names- Use the project
idreturned by API, not thev2_id, for downstream operations - Alphanumeric/URL-style project IDs may cause HTTP 400 in some tools; use numeric ID if available
3. Manage Sections
When to use: User wants to organize tasks within projects using sections
Tool sequence:
TODOISTGETALL_PROJECTS- Find the target project ID [Prerequisite]TODOISTGETALL_SECTIONS- List existing sections to avoid duplicates [Prerequisite]TODOISTCREATESECTION- Create a new section in a project [Required]TODOISTUPDATESECTION- Rename an existing section [Optional]TODOISTDELETESECTION- Permanently remove a section [Optional]
Key parameters:
project_id: Required -- the project to create the section inname: Section name (required for creation)order: Integer position within the project (lower values appear first)section_id: Required for update and delete operations
Pitfalls:
CREATESECTIONrequiresprojectidandname-- omitting project_id causes a 400 error- HTTP 400 "project_id is invalid" can occur if alphanumeric ID is used; prefer numeric ID
- Deleting a section may move or regroup its tasks in non-obvious ways
- Response may include both
idandv2_id; store and reuse the correct identifier consistently - Always check existing sections first to avoid creating duplicates
4. Search and Filter Tasks
When to use: User wants to find tasks by criteria, view today's tasks, or get completed task history
Tool sequence:
TODOISTGETALL_TASKS- Fetch incomplete tasks with optional filter query [Required]TODOISTGETTASK- Get full details of a specific task by ID [Optional]TODOISTGETCOMPLETEDTASKSBYCOMPLETIONDATE- Retrieve completed tasks within a date range [Optional]TODOISTLISTFILTERS- List user's custom saved filters [Optional]
Key parameters for GETALLTASKS:
filter: Todoist filter syntax string
- Keywords: today, tomorrow, overdue, no date, recurring, subtask - Priority: p1 (urgent), p2, p3, p4 (normal) - Projects: #ProjectName (must exist in account) - Labels: @LabelName (must exist in account) - Date ranges: 7 days, -7 days, due before: YYYY-MM-DD, due after: YYYY-MM-DD - Search: search: keyword for content text search - Operators: & (AND), | (OR), ! (NOT)
ids: List of specific task IDs to retrieve
Key parameters for GETCOMPLETEDTASKSBYCOMPLETION_DATE:
since: Start date in RFC3339 format (e.g.,2024-01-01T00:00:00Z)until: End date in RFC3339 formatprojectid,sectionid,parent_id: Optional filterscursor: Pagination cursor from previous responselimit: Max results per page (default 50)
Pitfalls:
GETALLTASKSreturns ONLY incomplete tasks; useGETCOMPLETEDTASKSBYCOMPLETION_DATEfor completed ones- Filter terms must reference ACTUAL EXISTING entities; arbitrary text causes HTTP 400 errors
- Do NOT use
completed,!completed, orcompleted afterin GETALLTASKS filter -- causes 400 error GETCOMPLETEDTASKSBYCOMPLETION_DATElimits date range to approximately 3 months betweensinceanduntil- Search uses
search: keywordsyntax within the filter, not a separate parameter
5. Bulk Task Creation
When to use: User wants to scaffold a project with multiple tasks at once
Tool sequence:
TODOISTGETALL_PROJECTS- Find target project ID [Prerequisite]TODOISTGETALL_SECTIONS- Find section IDs for task placement [Optional]TODOISTBULKCREATE_TASKS- Create multiple tasks in a single request [Required]
Key parameters:
tasks: Array of task objects, each requiring at minimumcontent- Each task object supports:
content,description,projectid,sectionid,parent_id,priority,labels,due(object withstring,date, ordatetime),duration,order
Pitfalls:
- Each task in the array must have at least the
contentfield - The
duefield in bulk create is an object with nested fields (string,date,datetime,lang) -- different structure from CREATE_TASK's flat fields - All tasks can target different projects/sections within the same batch
Common Patterns
ID Resolution
Always resolve human-readable names to IDs before operations:
- Project name -> Project ID:
TODOISTGETALL_PROJECTS, match bynamefield - Section name -> Section ID:
TODOISTGETALLSECTIONSwithprojectid - Task content -> Task ID:
TODOISTGETALL_TASKSwithfilterorsearch: keyword
Pagination
TODOISTGETALL_TASKS: Returns all matching incomplete tasks (no pagination needed)TODOISTGETCOMPLETEDTASKSBYCOMPLETIONDATE: Uses cursor-based pagination; followcursorfrom response until no more resultsTODOISTGETALLPROJECTSandTODOISTGETALLSECTIONS: Return all results (no pagination)
Due Date Handling
- Natural language: Use
due_string(e.g.,"tomorrow at 3pm","every Monday") - Specific date: Use
due_dateinYYYY-MM-DDformat - Specific datetime: Use
due_datetimein RFC3339 format (YYYY-MM-DDTHH:mm:ssZ) - Only use ONE due field at a time (except
due_langwhich can accompany any) - Recurring tasks: Use natural language in
due_string(e.g.,"every Friday at 9am")
Known Pitfalls
ID Formats
- Task IDs can be numeric (
"2995104339") or alphanumeric ("6X4Vw2Hfmg73Q2XR") - Project IDs similarly vary; prefer the format returned by the API
- Some tools accept only numeric IDs; if 400 error occurs, try fetching the numeric
idvia GET_PROJECT - Response objects may contain both
idandv2_id; useidfor API operations
Priority Inversion
- API priority: 1 = normal, 4 = urgent
- Todoist UI display: p1 = urgent, p4 = normal
- This is inverted; always clarify with the user which convention they mean
Filter Syntax
- Filter terms must reference real entities in the user's account
#NonExistentProjector@NonExistentLabelwill cause HTTP 400- Use
search: keywordfor text search, not bare keywords - Combine with
&(AND),|(OR),!(NOT) completedfilters do NOT work on GETALLTASKS endpoint
Rate Limits
- Todoist API has rate limits; batch operations should use
BULKCREATETASKSwhere possible - Space out rapid sequential requests to avoid throttling
Quick Reference
| Task | Tool Slug | Key Params |
|---|---|---|
| List all projects | TODOISTGETALL_PROJECTS |
(none) |
| Get project | TODOISTGETPROJECT |
project_id |
| Create project | TODOISTCREATEPROJECT |
name, color, view_style |
| Update project | TODOISTUPDATEPROJECT |
project_id, name, color |
| List sections | TODOISTGETALL_SECTIONS |
project_id |
| Create section | TODOISTCREATESECTION |
project_id, name, order |
| Update section | TODOISTUPDATESECTION |
section_id, name |
| Delete section | TODOISTDELETESECTION |
section_id |
| Get all tasks | TODOISTGETALL_TASKS |
filter, ids |
| Get task | TODOISTGETTASK |
task_id |
| Create task | TODOISTCREATETASK |
content, projectid, duestring, priority |
| Bulk create tasks | TODOISTBULKCREATE_TASKS |
tasks (array) |
| Update task | TODOISTUPDATETASK |
taskid, content, duestring |
| Complete task | TODOISTCLOSETASK |
task_id |
| Reopen task | TODOISTREOPENTASK |
task_id |
| Delete task | TODOISTDELETETASK |
task_id |
| Completed tasks | TODOISTGETCOMPLETEDTASKSBYCOMPLETIONDATE |
since, until |
| List filters | TODOISTLISTFILTERS |
sync_token |
When to Use
This skill is applicable to execute the workflow or actions described in the overview.
Example
User request:
Automate Todoist task management, projects, sections, filtering, and bulk operations via Rube MCP (Composio).
Limitations
- Use this skill only when the task clearly matches the scope described above.
- Do not treat the output as a substitute for environment-specific validation, testing, or expert review.
- Stop and ask for clarification if required inputs, permissions, safety boundaries, or success criteria are missing.