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.
Toolkit docs: composio.dev/toolkits/todoist
Prerequisites
-
Rube MCP must be connected (RUBE_SEARCH_TOOLS available)
-
Active Todoist connection via RUBE_MANAGE_CONNECTIONS with toolkit todoist
-
Always call RUBE_SEARCH_TOOLS first 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 RUBE_SEARCH_TOOLS responds
-
Call RUBE_MANAGE_CONNECTIONS with toolkit todoist
-
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
- Create and Manage Tasks
When to use: User wants to create, update, complete, reopen, or delete tasks
Tool sequence:
-
TODOIST_GET_ALL_PROJECTS
-
List projects to find the target project ID [Prerequisite]
-
TODOIST_GET_ALL_SECTIONS
-
List sections within a project for task placement [Optional]
-
TODOIST_CREATE_TASK
-
Create a single task with content, due date, priority, labels [Required]
-
TODOIST_BULK_CREATE_TASKS
-
Create multiple tasks in one request [Alternative]
-
TODOIST_UPDATE_TASK
-
Modify task properties (content, due date, priority, labels) [Optional]
-
TODOIST_CLOSE_TASK
-
Mark a task as completed [Optional]
-
TODOIST_REOPEN_TASK
-
Restore a previously completed task [Optional]
-
TODOIST_DELETE_TASK
-
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 Inbox
-
section_id : Alphanumeric section ID for placement within a project
-
parent_id : Task ID for creating subtasks
-
priority : 1 (normal) to 4 (urgent) -- note: Todoist UI shows p1=urgent, API p4=urgent
-
due_string : Natural language date like "tomorrow at 3pm" , "every Friday at 9am"
-
due_date : Specific date YYYY-MM-DD format
-
due_datetime : Specific date+time in RFC3339 YYYY-MM-DDTHH:mm:ssZ
-
labels : Array of label name strings
-
duration
- duration_unit : Task duration (e.g., 30
- "minute" )
Pitfalls:
-
Only one due_* field can be used at a time (except due_lang which can accompany any)
-
Do NOT embed due dates in content or description -- use due_string field
-
Do NOT embed duration phrases like "for 30 minutes" in due_string -- use duration
- duration_unit
-
priority in 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
-
CLOSE_TASK marks complete; DELETE_TASK permanently removes -- they are different operations
- Manage Projects
When to use: User wants to list, create, update, or inspect projects
Tool sequence:
-
TODOIST_GET_ALL_PROJECTS
-
List all projects with metadata [Required]
-
TODOIST_GET_PROJECT
-
Get details for a specific project by ID [Optional]
-
TODOIST_CREATE_PROJECT
-
Create a new project with name, color, view style [Optional]
-
TODOIST_UPDATE_PROJECT
-
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" layout
-
parent_id : Parent project ID for creating sub-projects
-
is_favorite / favorite : Boolean to mark as favorite
-
project_id : Required for update and get operations
Pitfalls:
-
Projects with similar names can lead to selecting the wrong project_id; always verify
-
CREATE_PROJECT uses favorite while UPDATE_PROJECT uses is_favorite -- different field names
-
Use the project id returned by API, not the v2_id , for downstream operations
-
Alphanumeric/URL-style project IDs may cause HTTP 400 in some tools; use numeric ID if available
- Manage Sections
When to use: User wants to organize tasks within projects using sections
Tool sequence:
-
TODOIST_GET_ALL_PROJECTS
-
Find the target project ID [Prerequisite]
-
TODOIST_GET_ALL_SECTIONS
-
List existing sections to avoid duplicates [Prerequisite]
-
TODOIST_CREATE_SECTION
-
Create a new section in a project [Required]
-
TODOIST_UPDATE_SECTION
-
Rename an existing section [Optional]
-
TODOIST_DELETE_SECTION
-
Permanently remove a section [Optional]
Key parameters:
-
project_id : Required -- the project to create the section in
-
name : Section name (required for creation)
-
order : Integer position within the project (lower values appear first)
-
section_id : Required for update and delete operations
Pitfalls:
-
CREATE_SECTION requires project_id and name -- 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 id and v2_id ; store and reuse the correct identifier consistently
-
Always check existing sections first to avoid creating duplicates
- 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:
-
TODOIST_GET_ALL_TASKS
-
Fetch incomplete tasks with optional filter query [Required]
-
TODOIST_GET_TASK
-
Get full details of a specific task by ID [Optional]
-
TODOIST_GET_COMPLETED_TASKS_BY_COMPLETION_DATE
-
Retrieve completed tasks within a date range [Optional]
-
TODOIST_LIST_FILTERS
-
List user's custom saved filters [Optional]
Key parameters for GET_ALL_TASKS:
-
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 GET_COMPLETED_TASKS_BY_COMPLETION_DATE:
-
since : Start date in RFC3339 format (e.g., 2024-01-01T00:00:00Z )
-
until : End date in RFC3339 format
-
project_id , section_id , parent_id : Optional filters
-
cursor : Pagination cursor from previous response
-
limit : Max results per page (default 50)
Pitfalls:
-
GET_ALL_TASKS returns ONLY incomplete tasks; use GET_COMPLETED_TASKS_BY_COMPLETION_DATE for completed ones
-
Filter terms must reference ACTUAL EXISTING entities; arbitrary text causes HTTP 400 errors
-
Do NOT use completed , !completed , or completed after in GET_ALL_TASKS filter -- causes 400 error
-
GET_COMPLETED_TASKS_BY_COMPLETION_DATE limits date range to approximately 3 months between since and until
-
Search uses search: keyword syntax within the filter, not a separate parameter
- Bulk Task Creation
When to use: User wants to scaffold a project with multiple tasks at once
Tool sequence:
-
TODOIST_GET_ALL_PROJECTS
-
Find target project ID [Prerequisite]
-
TODOIST_GET_ALL_SECTIONS
-
Find section IDs for task placement [Optional]
-
TODOIST_BULK_CREATE_TASKS
-
Create multiple tasks in a single request [Required]
Key parameters:
-
tasks : Array of task objects, each requiring at minimum content
-
Each task object supports: content , description , project_id , section_id , parent_id , priority , labels , due (object with string , date , or datetime ), duration , order
Pitfalls:
-
Each task in the array must have at least the content field
-
The due field 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: TODOIST_GET_ALL_PROJECTS , match by name field
-
Section name -> Section ID: TODOIST_GET_ALL_SECTIONS with project_id
-
Task content -> Task ID: TODOIST_GET_ALL_TASKS with filter or search: keyword
Pagination
-
TODOIST_GET_ALL_TASKS : Returns all matching incomplete tasks (no pagination needed)
-
TODOIST_GET_COMPLETED_TASKS_BY_COMPLETION_DATE : Uses cursor-based pagination; follow cursor from response until no more results
-
TODOIST_GET_ALL_PROJECTS and TODOIST_GET_ALL_SECTIONS : Return all results (no pagination)
Due Date Handling
-
Natural language: Use due_string (e.g., "tomorrow at 3pm" , "every Monday" )
-
Specific date: Use due_date in YYYY-MM-DD format
-
Specific datetime: Use due_datetime in RFC3339 format (YYYY-MM-DDTHH:mm:ssZ )
-
Only use ONE due field at a time (except due_lang which 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 id via GET_PROJECT
-
Response objects may contain both id and v2_id ; use id for 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
-
#NonExistentProject or @NonExistentLabel will cause HTTP 400
-
Use search: keyword for text search, not bare keywords
-
Combine with & (AND), | (OR), ! (NOT)
-
completed filters do NOT work on GET_ALL_TASKS endpoint
Rate Limits
-
Todoist API has rate limits; batch operations should use BULK_CREATE_TASKS where possible
-
Space out rapid sequential requests to avoid throttling
Quick Reference
Task Tool Slug Key Params
List all projects TODOIST_GET_ALL_PROJECTS
(none)
Get project TODOIST_GET_PROJECT
project_id
Create project TODOIST_CREATE_PROJECT
name , color , view_style
Update project TODOIST_UPDATE_PROJECT
project_id , name , color
List sections TODOIST_GET_ALL_SECTIONS
project_id
Create section TODOIST_CREATE_SECTION
project_id , name , order
Update section TODOIST_UPDATE_SECTION
section_id , name
Delete section TODOIST_DELETE_SECTION
section_id
Get all tasks TODOIST_GET_ALL_TASKS
filter , ids
Get task TODOIST_GET_TASK
task_id
Create task TODOIST_CREATE_TASK
content , project_id , due_string , priority
Bulk create tasks TODOIST_BULK_CREATE_TASKS
tasks (array)
Update task TODOIST_UPDATE_TASK
task_id , content , due_string
Complete task TODOIST_CLOSE_TASK
task_id
Reopen task TODOIST_REOPEN_TASK
task_id
Delete task TODOIST_DELETE_TASK
task_id
Completed tasks TODOIST_GET_COMPLETED_TASKS_BY_COMPLETION_DATE
since , until
List filters TODOIST_LIST_FILTERS
sync_token
Powered by Composio