Todoist MCP Server
Provides task management capabilities through Todoist's API, enabling AI assistants to interact with projects and tasks in a Todoist account
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Todoist MCP Server add a task to buy groceries tomorrow at 5pm"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Todoist MCP Server
A TypeScript-based Model Context Protocol (MCP) server that provides Todoist task management capabilities to AI assistants. This MCP server is built for use with Claude Desktop and operates over stdio.
Note: This MCP server is tailored to my specific workflow with Todoist and may not align with how others use the tool.
Getting Started
Prerequisites
Node.js 18+
Todoist account with API access
Install
git clone <repository-url>
cd todoist-mcp
npm ciConfigure
cp env.example .env
# Add your Todoist API token to .envConnect to Claude Desktop
1. Configure Claude Desktop
Edit your Claude Desktop configuration file:
macOS:
~/Library/Application Support/Claude/claude_desktop_config.jsonWindows:
%APPDATA%/Claude/claude_desktop_config.json
2. Add MCP Server Configuration
{
"mcpServers": {
"todoist": {
"command": "$PATH_TO_REPO/start-mcp.sh",
"args": [],
"env": {}
}
}
}Replace $PATH_TO_REPO with the absolute path of where you cloned this repo.
3. Restart Claude Desktop
Restart Claude Desktop completely for the changes to take effect.
4. Verify Connection
Test the connection by asking Claude to list your Todoist projects or tasks.
Available Tools
33 toolscomplete_becky_taskB
Complete a Brian shared task (assigned to Brian from Becky) by setting due date to today, adding a completion comment, and moving it to Becky inbox project
Inputs: task_id (required).
complete_taskC
Complete a task by its ID
Inputs: task_id (required).
create_project_labelA
Create a new project label in Todoist. The label name must start with "PROJECT: " (with a space after the colon). The label will be created with charcoal color.
Inputs: project_name (required).
create_taskC
Create a new Todoist task with title, description, project, labels, priority, and due date. Only title is required.
Inputs: title (required), description, project_id, labels, +2 more.
create_task_commentB
Create a new comment on a specific Todoist task. The comment will automatically include a signature indicating it was created using Claude.
Inputs: task_id (required), content (required).
get_areas_of_focusB
Get all tasks from the "Areas of focus" project in Todoist. Returns structured JSON data with task details including id, content, description, priority, due date, labels, and more.
Inputs: no named parameters.
get_brian_only_projectsB
Get projects that belong only to Brian and are NOT shared
Inputs: no named parameters.
get_chores_due_todayA
Get all chores due today or overdue from Todoist using the filter "(today | overdue) & ##Chores". Returns structured JSON data with chore details including id, content, due date, project_id, and labels.
Inputs: no named parameters.
get_context_labelsA
Get all context labels from Todoist. Context labels are labels that start with "context:" and are used to organize tasks by context (e.g., context:home, context:office, context:mobile).
Inputs: no named parameters.
get_inbox_projectsB
Get the three inbox projects: Inbox, Brian inbox - per Becky, and Becky inbox - per Brian
Inputs: no named parameters.
get_recent_mediaA
Get all media tasks created in the last 30 days from Todoist, excluding subtasks and watched items. Returns structured JSON data with task details including id, content, description, completion status, labels, priority, due date, and comment count.
Inputs: no named parameters.
get_shopping_listB
Get all tasks from the "Shopping list" project in Todoist. Returns structured JSON data with task details including id, content, description, priority, due date, labels, and more.
Inputs: no named parameters.
get_task_commentsA
Get all comments for a specific Todoist task. Returns structured JSON data with comment details including id, content, posted date, user ID, and any attachments.
Inputs: task_id (required).
get_tasks_due_this_weekA
Get all tasks due this week (next 7 days) from Todoist, excluding various project categories. Returns structured JSON data with task details including id, content, due date, project id, and labels.
Inputs: no named parameters.
get_tasks_due_tomorrowA
Get all tasks due tomorrow from Todoist, excluding various project categories like Tickler, Chores, and baby-related projects. Returns structured JSON data with task details including id, content, due date, project id, and labels.
Inputs: no named parameters.
get_tasks_with_labelA
Get all tasks with a specific label that are not part of the "Brian projects" or "Projects" projects. Returns structured JSON data with task details including id, content, description, completion status, labels, priority, due date, and comment count.
Inputs: label (required).
get_tickler_tasksA
Get all tickler tasks that are due today or overdue from Todoist. Tickler tasks are tasks with labels #Tickler, #Ansonia Tickler, or #Brian tickler. Returns structured JSON data with task details including id, content, description, completion status, labels, priority, due date, and comment count.
Inputs: no named parameters.
get_waiting_tasksA
Get all waiting tasks from Todoist using the filter "#Waiting | #Brian waiting | #Ansonia Waiting". Returns structured JSON data with task details including id, content, description, completion status, labels, priority, due date, and comment count.
Inputs: no named parameters.
list_becky_inbox_per_brian_tasksA
List all Becky inbox per Brian tasks from Todoist using the ##Becky inbox - per Brian filter. Returns structured JSON data with task details including id, content, description, completion status, labels, priority, due date, and comment count.
Inputs: no named parameters.
list_becky_time_sensitive_tasksA
List all Becky time sensitive tasks from Todoist using the ##Becky time sensitive \(per BK\) & !subtask filter. Returns structured JSON data with task details including id, content, description, completion status, labels, priority, due date, and comment count.
Inputs: no named parameters.
list_brian_inbox_per_becky_tasksA
List all Brian inbox per Becky tasks from Todoist using the ##Brian inbox - per Becky filter. Returns structured JSON data with task details including id, content, description, completion status, labels, priority, due date, and comment count.
Inputs: no named parameters.
list_brian_time_sensitive_tasksA
List all Brian time sensitive tasks from Todoist using the ##Brian time sensitive \(per BP\) & !subtask filter. Returns structured JSON data with task details including id, content, description, completion status, labels, priority, due date, and comment count.
Inputs: no named parameters.
list_gtd_projectsA
List all GTD projects from Todoist using the (#Projects | #Brian projects | #Ansonia Projects) & !subtask filter, excluding baby-related projects. Returns structured JSON data with task details including id, content, description, completion status, labels, priority, due date, and comment count.
Inputs: no named parameters.
list_next_actionsA
List all next actions from Todoist using the (##Next actions | ##Brian acknowledged) & !subtask filter. Returns structured JSON data with task details including id, content, description, completion status, labels, priority, due date, and comment count.
Inputs: no named parameters.
list_personal_inbox_tasksA
List all personal inbox tasks from Todoist using the ##Inbox filter. Returns structured JSON data with task details including id, content, description, completion status, labels, priority, due date, and comment count.
Inputs: no named parameters.
move_taskC
Move a task from one project to another
Inputs: task_id (required), project_id (required).
search_tasksA
Search for tasks in Todoist using the search filter. This is one of three search tools: basic search (single term), AND search (all terms must match), and OR search (any term can match). Supports three search syntax options: basic text search (meeting), wildcard search (report), and exact phrase search ("buy groceries"). Returns structured JSON data with task details including id, content, description, completion status, labels, priority, due date, and comment count.
Inputs: query (required).
search_tasks_using_andA
Search for tasks in Todoist using AND logic - all search terms must be present. Search query examples: meeting (basic text search), report (wildcard search), "buy groceries" (quoted, exact phrase search). Returns structured JSON data with task details including id, content, description, completion status, labels, priority, due date, and comment count.
Inputs: search_terms (required).
search_tasks_using_orA
Search for tasks in Todoist using OR logic - any search term can match. Search query examples: meeting (basic text search), report (wildcard search), "buy groceries" (quoted, exact phrase search). Returns structured JSON data with task details including id, content, description, completion status, labels, priority, due date, and comment count.
Inputs: search_terms (required).
uncomplete_taskC
Uncomplete (reopen) a task by its ID
Inputs: task_id (required).
update_taskB
Update a Todoist task with new title, description, labels, priority, or due string. All fields are optional - only provided fields will be updated.
Inputs: task_id (required), title, description, labels, +2 more.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 33 tools
Multiple tools have overlapping purposes, causing confusion. For example, there are three separate search tools (search_tasks, search_tasks_using_and, search_tasks_using_or) that could be consolidated, and several 'list_' tools (e.g., list_brian_time_sensitive_tasks, list_becky_time_sensitive_tasks) are very similar in function but differ only by user or filter. This overlap makes it difficult for an agent to choose the right tool without deep context.
The naming is mixed but somewhat readable. Most tools use snake_case and start with verbs like 'get_', 'list_', 'create_', 'update_', 'complete_', which is consistent. However, there are inconsistencies such as 'complete_becky_task' vs. 'complete_task' (one is specific, the other general) and 'search_tasks' vs. 'search_tasks_using_and' vs. 'search_tasks_using_or' (redundant naming). Overall, the pattern is discernible but not fully uniform.
With 33 tools, the count is excessive for a Todoist server, indicating poor scoping. Many tools are highly specific (e.g., get_chores_due_today, get_tickler_tasks) and could be generalized into fewer, more flexible tools. This bloated set increases complexity and reduces usability, as agents must navigate numerous similar tools for basic operations.
The tool surface covers core Todoist operations well, including CRUD for tasks (create, update, complete, uncomplete), project and label management, and various querying functions. However, there are minor gaps, such as no direct tool for deleting tasks or managing project settings beyond labels, which might require workarounds but doesn't severely hinder functionality.
Maintenance
Related MCP Connectors
Manage Superlist tasks and lists in plain language from any MCP-compatible AI agent.
Official Todoist MCP server. Manage tasks and projects. Hosted, no API key needed.
Simple, fast todo app: manage tasks, projects and tags from Claude and other MCP clients.
Manage Redbooth tasks, task lists, comments, tags and files from Claude and other AI assistants.
Related MCP Servers
- AlicenseNot gradedqualityCmaintenanceA Model Context Protocol server that enables advanced task and project management in Todoist via Claude Desktop and other MCP-compatible clients.94 npm2MIT
- AlicenseAqualityDmaintenanceEnables natural language task management with Todoist, supporting tasks, projects, sections, labels, smart search, and batch operations for efficient workflow integration with Claude and other MCP-compatible LLMs.1916 npmMIT
- AlicenseAqualityDmaintenanceConnect AI agents to your Todoist tasks via the Model Context Protocol (MCP).281MIT
- AlicenseNot gradedqualityFmaintenanceEnables language models to manage Todoist tasks, projects, sections, labels, comments, and collaborators through natural language via the Model Context Protocol.MIT