Todoist MCP Server
The Todoist MCP Server enables natural language-based task and project management in Todoist through Claude. Key capabilities include:
Task Management: Create, read, update, delete, and complete tasks with support for attributes like descriptions, due dates, priorities, labels, and project assignments.
Subtask Management: Create, convert, promote, and organize subtasks, with hierarchical task structures.
Bulk Operations: Efficiently manage multiple tasks at once based on search criteria.
Comment System: Add and retrieve comments for tasks and projects, including optional file attachments.
Label Management: Full CRUD operations for labels, including usage statistics.
Project and Section Organization: Create and manage projects and sections, including moving tasks between them.
Smart Discovery: Find tasks, projects, and sections using filters or partial names.
Testing and Validation: Test API connections and validate MCP functionality.
Provides comprehensive task and project management through Todoist, including creating/updating/deleting tasks, bulk operations, managing comments with attachments, organizing projects and sections, and supporting rich task attributes like descriptions, due dates, priorities, and labels.
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 'buy groceries' to my shopping list project due tomorrow"
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
An MCP (Model Context Protocol) server that connects Claude with Todoist for complete task and project management through natural language.
Installation
Claude Desktop (One-Click Install)
Download todoist-mcp.mcpb from the latest release
Double-click the file (or drag onto Claude Desktop)
Enter your Todoist API token when prompted
Start chatting: "Show me my Todoist projects"
Claude Code / Other MCP Clients
claude mcp add todoist -e TODOIST_API_TOKEN=your_token -- npx @greirson/mcp-todoistAdd to your MCP client config (claude_desktop_config.json, ~/.claude.json, etc.):
{
"mcpServers": {
"todoist": {
"command": "npx",
"args": ["@greirson/mcp-todoist"],
"env": {
"TODOIST_API_TOKEN": "your_api_token_here"
}
}
}
}Config locations:
Claude Desktop (macOS):
~/Library/Application Support/Claude/claude_desktop_config.jsonClaude Desktop (Windows):
%APPDATA%\Claude\claude_desktop_config.jsonClaude Code:
~/.claude.json
Related MCP server: Enhanced Todoist MCP Server Extended
Features
19 MCP Tools for complete Todoist management
Task Management: Create, update, delete, complete, reopen tasks with priorities, due dates, labels
Bulk Operations: Process multiple tasks efficiently
Subtasks: Hierarchical task management with completion tracking
Projects & Sections: Full organization support
Labels, Filters, Reminders: Pro/Business features supported
Natural Language: Quick add with Todoist's natural language parsing
Dry-Run Mode: Test operations without making changes
Dry-Run Mode
Dry-run mode allows you to test operations and automations without making any real changes to your Todoist workspace. This is perfect for testing, debugging, learning the API, or validating automation scripts before running them for real.
How to Enable Dry-Run Mode
Add DRYRUN=true to your environment configuration:
{
"mcpServers": {
"todoist": {
"command": "npx",
"args": ["@greirson/mcp-todoist"],
"env": {
"TODOIST_API_TOKEN": "your_api_token_here",
"DRYRUN": "true"
}
}
}
}What Dry-Run Mode Does
Validates Operations: Uses real API data to validate that operations would succeed
Simulates Mutations: Create, update, delete, and complete operations are simulated (not executed)
Real Data Queries: Read operations (get tasks, projects, labels) use the real API
Detailed Logging: Shows exactly what would happen with clear
[DRY-RUN]prefixesError Detection: Catches the same errors that would occur in real execution
Use Cases
Testing Automations: Validate complex bulk operations before executing
Learning the API: Explore functionality without fear of making unwanted changes
Debugging Issues: Understand what operations would be performed
Safe Experimentation: Try new workflows without affecting your actual tasks
Training and Demos: Show how operations work without modifying real data
Example Usage
With dry-run mode enabled, operations show what would happen:
You: "Create a task called 'Test Task' in my Work project"
Response:
[DRY-RUN] Dry-run mode enabled - mutations will be simulated
[DRY-RUN] Would create task: "Test Task" in project 2203306141, section none
Task created successfully (simulated):
ID: 100001
Title: Test Task
Project: Work (2203306141)
Priority: 4 (Normal)Supported Operations
All 19 MCP tools support dry-run mode:
Task creation, updates, completion, and deletion
Subtask operations and hierarchy changes
Bulk operations across multiple tasks
Project and section creation
Label management operations
Reminder CRUD operations
Comment creation
Disabling Dry-Run Mode
Remove the DRYRUN environment variable or set it to false, then restart Claude Desktop to return to normal operation mode.
Tools Overview
The server provides 19 MCP tools for complete Todoist management:
Tool | Actions | Description |
| create, get, update, delete, complete, reopen, quick_add | Complete task management |
| bulk_create, bulk_update, bulk_delete, bulk_complete | Efficient multi-task operations |
| create, bulk_create, convert, promote, hierarchy | Hierarchical task management |
| create, get, update, delete, archive, collaborators | Project CRUD and sharing |
| reorder, move_to_parent, get_archived | Advanced project operations |
| create, get, update, delete, move, reorder, archive | Section management |
| create, get, update, delete, stats | Label management with analytics |
| create, get, update, delete | Task/project comments |
| create, get, update, delete | Reminder management (Pro) |
| create, get, update, delete | Custom filters (Pro) |
| invitations, notifications, workspace operations | Team collaboration features |
| info, productivity_stats, karma_history | User profile and stats |
| test_connection, test_features, test_performance, find/merge duplicates | Testing and utilities |
| get_log, get_events, get_summary | Activity audit trail |
| move, reorder, close | Advanced task operations |
| get, get_all, get_stats | Completed task retrieval |
| list, download | Automatic backup access |
| create, get, update, delete | Project notes (collaborators) |
| create, get, rename, remove | Workspace labels (Business) |
For detailed tool documentation with parameters and examples, see TOOLS_REFERENCE.md.
Troubleshooting
Common Issues
"No Todoist projects found" or connection errors:
Verify your API token is correct
Check that the token is properly set in your claude_desktop_config.json
Ensure there are no extra spaces or quotes around your token
MCP server not loading:
Confirm the package is installed globally:
npm list -g @greirson/mcp-todoistRestart Claude Desktop completely
Check the configuration file path is correct for your operating system
Try the full path to the
mcp-todoistbinary:/Users/USERNAME/.npm-global/bin/mcp-todoist
Permission errors:
On macOS/Linux, you may need to create the config directory:
mkdir -p ~/.configEnsure Claude Desktop has permission to read the config file
Usage Examples
Project & Section Setup
"Show me all my projects"
"Create a new project called 'Work Tasks'"
"Create a section called 'In Progress' in project 12345"
"Show me sections in the Work Tasks project"Task Creation & Management
"Create task 'Team Meeting' in project 12345"
"Add task 'Review PR' due tomorrow with labels ['Code Review', 'Urgent']"
"Create high priority task with deadline 2024-12-25"
"Update meeting task to be in section 67890"
"Mark the PR review task as complete"
# Task duration for time blocking
"Create task 'Deep work session' with 90 minute duration"
"Update task 'Meeting' to have a 2 day duration"
# Task identification by ID (more reliable than name search)
"Get task with ID 1234567890"
"Update task ID 1234567890 to priority 4"
"Complete task with ID 1234567890"
"Reopen task with ID 1234567890"
"Delete task ID 1234567890"Quick Add
The Quick Add tool parses natural language text like the Todoist app, supporting multiple features in a single command:
"Quick add: Buy groceries tomorrow #Shopping @errands p1"
"Quick add: Review PR next Monday #Work @code-review p2 //Check error handling"
"Quick add: Call mom {deadline in 3 days}"
"Quick add: Team meeting today at 2pm #Work @meetings with reminder 1 hour before"Quick Add Syntax:
Due dates: Natural language dates like "tomorrow", "next Friday", "Jan 23", "in 3 days"
Projects:
#ProjectName(no spaces in project names)Labels:
@label(e.g., "@urgent", "@work")Assignees:
+name(for shared projects)Priority:
p1(urgent),p2,p3,p4(lowest)Deadlines:
{in 3 days}or{March 15}Descriptions:
//your description here(must be at the end)
Subtask Management
"Create subtask 'Prepare agenda' under task 'Team Meeting'"
"Create multiple subtasks for 'Launch Project': 'Design UI', 'Write tests', 'Deploy'"
"Convert task 'Code Review' to a subtask of 'Release v2.0'"
"Promote subtask 'Bug Fix' to a main task"
"Show me the task hierarchy for 'Launch Project' with completion tracking"Bulk Operations
"Create multiple tasks for project launch: 'Design mockups', 'Write documentation', 'Set up CI/CD'"
"Update all high priority tasks to be due next week"
"Complete all tasks containing 'review' in project 12345"
"Delete all tasks with priority 1 that are overdue"Comment Management
"Add comment 'This needs urgent attention' to task 'Review PR'"
"Add comment with attachment to task 67890"
"Show all comments for task 'Team Meeting'"
"Get comments for project 12345"Label Management
"Show me all my labels"
"Create a new label called 'Urgent' with red color"
"Update the 'Work' label to be blue and mark as favorite"
"Delete the unused 'Old Project' label"
"Get usage statistics for all my labels"Reminder Management (Pro/Business)
"Show me all my reminders"
"Get reminders for task 'Team Meeting'"
"Create a reminder for task 'Review PR' 30 minutes before due"
"Create an absolute reminder for task 12345 at 2024-12-25T09:00:00Z"
"Update reminder 67890 to trigger at 10:00 instead"
"Delete reminder 67890"Task Discovery
"Show all my tasks"
"List high priority tasks due this week"
"Get tasks in project 12345"Testing & Validation
"Test my Todoist connection"
"Run basic tests on all Todoist features" // Default: read-only API tests
"Run enhanced tests on all Todoist features" // Full CRUD testing with cleanup
"Benchmark Todoist API performance with 10 iterations"
"Validate that all MCP tools are working correctly"Dry-Run Testing
When dry-run mode is enabled (DRYRUN=true), use normal commands - they'll automatically be simulated:
"Create a test task with priority 1"
"Update all overdue tasks to be due tomorrow"
"Delete all completed tasks in project 12345"
"Create 5 subtasks under task 'Project Planning'"All these operations will validate against your real data but won't make any changes.
Development
Building from source
# Clone the repository
git clone https://github.com/greirson/mcp-todoist.git
# Navigate to directory
cd mcp-todoist
# Install dependencies
npm install
# Build the project
npm run buildDevelopment Commands
# Watch for changes and rebuild
npm run watch
# Run tests
npm run test
# Run tests in watch mode
npm run test:watch
# Run tests with coverage
npm run test:coverage
# Lint code
npm run lint
# Fix linting issues
npm run lint:fix
# Format code
npm run format
# Check formatting
npm run format:checkArchitecture
The codebase follows a clean, modular architecture designed for maintainability and scalability:
Core Structure
src/index.ts: Main server entry point with request routingsrc/types.ts: TypeScript type definitions and interfacessrc/type-guards.ts: Runtime type validation functionssrc/validation.ts: Input validation and sanitizationsrc/errors.ts: Custom error types with structured handlingsrc/cache.ts: In-memory caching for performance optimization
Modular Tool Organization
src/tools/: Domain-specific MCP tool definitions organized by functionality:task-tools.ts- Task management (9 tools)subtask-tools.ts- Subtask operations (5 tools)project-tools.ts- Project/section management (4 tools)comment-tools.ts- Comment operations (2 tools)label-tools.ts- Label management (5 tools)reminder-tools.ts- Reminder operations (4 tools)test-tools.ts- Testing and validation (3 tools)index.ts- Centralized exports
Business Logic Handlers
src/handlers/: Domain-separated business logic modules:task-handlers.ts- Task CRUD and bulk operationssubtask-handlers.ts- Hierarchical task managementproject-handlers.ts- Project and section operationscomment-handlers.ts- Comment creation and retrievallabel-handlers.ts- Label CRUD and statisticsreminder-handlers.ts- Reminder CRUD via Sync APItest-handlers.ts- API testing infrastructuretest-handlers-enhanced/- Comprehensive CRUD testing framework
Utility Modules
src/utils/: Shared utility functions:api-helpers.ts- API response handling utilitieserror-handling.ts- Centralized error managementparameter-transformer.ts- MCP to Todoist SDK parameter format conversiondry-run-wrapper.ts- Dry-run mode implementation
Changelog
See CHANGELOG.md for a detailed history of all changes.
For migration guides and breaking changes, see the full changelog.
Contributing
Contributions are welcome! This project is actively maintained and I appreciate the community's interest in improving it.
A Note on AI-Assisted Contributions
I use Claude Code as part of my own development workflow -- AI-assisted coding is a normal part of how this project is built. I encourage contributors to use whatever tools make them productive, including AI coding assistants.
That said, AI tools make it very easy to generate large volumes of code that looks correct but introduces subtle issues: incorrect API mappings, performance regressions, breaking type changes, or scope creep that bundles unrelated features together. I've seen PRs that swap a URL prefix without realizing the API paths themselves changed, or that add pagination by fetching every page every time without preserving the limit parameter.
Because of this, every PR receives thorough architectural review. This isn't about gatekeeping -- it's about maintaining a codebase that hundreds of people depend on through their MCP clients. PRs that appear to be unreviewed AI output will receive detailed feedback on what needs to change and why, so you can learn and resubmit.
PR Requirements
Before submitting a pull request, please ensure:
One concern per PR. A bug fix is one PR. A new feature is another. A documentation update is another. If your diff touches 40+ files across unrelated features, it needs to be split. Mixed-scope PRs will be sent back for splitting.
You understand what your code does. If an AI tool wrote it, read it critically before submitting. Can you explain why each change is necessary? Could you debug it if it broke? If not, it's not ready.
Tests are included or updated. New features need tests. Bug fixes need a test that would have caught the bug. If you're changing API endpoints, verify they work against the live API -- don't just trust that a URL swap is sufficient.
Manual verification is done. Run
npm run buildandnpm testlocally. If you're changing API integration code, test against your own Todoist account (dry-run mode is available withDRYRUN=true). Include evidence of verification in your PR description.CI must pass. PRs with failing CI checks will not be reviewed until they're green.
What Makes a Good PR
A clear, descriptive title and body explaining what and why
A focused diff that's easy to review (under 200 lines changed is ideal)
Tests that demonstrate the change works
Updated documentation if the change affects user-facing behavior
No unrelated formatting changes, refactors, or "while I'm here" improvements
Getting Started
Fork the repository
Create a feature branch from
mainMake your changes following the guidelines above
Run
npm run build && npm test && npm run lintto verifySubmit your PR with a clear description
If you're unsure whether a change is wanted or how to approach it, open an issue first to discuss. This saves everyone time and helps align on the right approach before code is written.
License
This project is licensed under the MIT License - see the LICENSE file for details.
Issues and Support
If you encounter any issues or need support, please file an issue on the GitHub repository.
Available Tools
86 toolstodoist_activity_by_date_rangeB
Get Todoist activity log within a specific date range. Returns all events that occurred between the specified dates. Useful for generating activity reports and reviewing changes over time periods.
Inputs: since (required), until (required), object_type, event_type, +3 more.
todoist_activity_by_projectA
Get Todoist activity log for a specific project. Returns all events (tasks added/completed/deleted, comments, etc.) related to the project. Useful for project auditing and tracking project-specific changes.
Inputs: project_id (required), event_type, object_type, since, +3 more.
todoist_activity_getC
Get Todoist activity log with optional filters. Returns events for items, notes, projects, sections, labels, filters, and reminders. Useful for auditing changes, tracking productivity, and understanding workspace history.
Inputs: object_type, object_id, event_type, parent_project_id, +6 more.
todoist_archived_projects_getB
Get a list of all archived projects. Useful for reviewing or restoring archived projects.
Inputs: limit, offset.
todoist_backup_downloadA
Get the download URL for a specific backup version. The URL is time-limited. Backups are ZIP files containing CSV exports of your Todoist data.
Inputs: version (required).
todoist_backups_getA
List all available automatic backups of your Todoist data. Todoist creates backups automatically. Returns version timestamps and download URLs.
Inputs: no named parameters.
todoist_collaborators_getA
Get a list of collaborators for a shared project. Returns user IDs, names, and emails that can be used for task assignment with assignee_id.
Inputs: project_id (required).
todoist_comment_createA
Add a comment to a task or project in Todoist. For task comments, provide task_id or task_name. For project comments, provide project_id.
Inputs: content (required), task_id, task_name, project_id, +1 more.
todoist_comment_deleteB
Delete a comment by its ID
Inputs: comment_id (required).
todoist_comment_getB
Get comments for a task or project in Todoist
Inputs: task_id, task_name, project_id.
todoist_comment_updateB
Update an existing comment's content by comment ID
Inputs: comment_id (required), content (required).
todoist_completed_tasks_getA
Retrieve completed tasks from Todoist. Uses the Sync API to fetch tasks that have been marked as complete. Supports filtering by project, date range, and pagination.
Inputs: project_id, since, until, limit, +2 more.
todoist_duplicates_findA
Find duplicate or similar tasks using content similarity analysis. Returns grouped tasks that have similar titles, sorted by similarity percentage.
Inputs: threshold, project_id, include_completed.
todoist_duplicates_mergeA
Merge duplicate tasks by keeping one task and completing or deleting the others. Use after todoist_duplicates_find to clean up duplicates.
Inputs: keep_task_id (required), duplicate_task_ids (required), action (required).
todoist_filter_createA
Create a new custom filter in Todoist. Filters use Todoist's query syntax (e.g., 'p1', 'today', '@label', '#project'). Note: Requires Todoist Pro or Business plan.
Inputs: name (required), query (required), color, item_order, +1 more.
todoist_filter_deleteA
Delete a filter from Todoist. This action cannot be undone. Note: Frozen filters (from cancelled subscriptions) cannot be deleted.
Inputs: filter_id, filter_name.
todoist_filter_getB
Get all custom filters in Todoist. Filters are saved searches that help you organize and view tasks based on specific criteria. Note: Requires Todoist Pro or Business plan.
Inputs: no named parameters.
todoist_filter_updateA
Update an existing filter in Todoist. Can update name, query, color, order, or favorite status. Note: Frozen filters (from cancelled subscriptions) cannot be modified.
Inputs: filter_id, filter_name, name, query, +3 more.
todoist_invitation_acceptA
Accept a project sharing invitation. Requires both the invitation ID and secret from the invitation email.
Inputs: invitation_id (required), invitation_secret (required).
todoist_invitation_deleteA
Delete/revoke a pending invitation that you sent. Use this to cancel an invitation before it is accepted.
Inputs: invitation_id (required).
todoist_invitation_rejectB
Reject a project sharing invitation. Requires both the invitation ID and secret.
Inputs: invitation_id (required), invitation_secret (required).
todoist_invitations_getA
Get all pending project sharing invitations received by the current user.
Inputs: no named parameters.
todoist_label_createB
Create a new label in Todoist
Inputs: name (required), color, is_favorite, order.
todoist_label_deleteB
Delete a label from Todoist
Inputs: label_id, label_name.
todoist_label_getA
Get all labels in Todoist
Inputs: no named parameters.
todoist_label_statsA
Get usage statistics for all labels in Todoist
Inputs: no named parameters.
todoist_label_updateB
Update an existing label in Todoist
Inputs: label_id, label_name, name, color, +2 more.
todoist_notification_mark_readB
Mark a specific notification as read.
Inputs: notification_id (required).
todoist_notifications_getB
Get live notifications including comments, assignments, sharing invitations, and other collaboration events.
Inputs: limit.
todoist_notifications_mark_all_readA
Mark all notifications as read.
Inputs: no named parameters.
todoist_productivity_stats_getA
Get detailed productivity statistics including karma, task completion history, daily/weekly streaks, and goals progress.
Inputs: no named parameters.
todoist_project_archiveA
Archive or unarchive a project in Todoist. Archived projects are hidden from the main view but can be restored.
Inputs: project_id, project_name, archive.
todoist_project_collaborators_getB
Get a list of collaborators for a shared project in Todoist. Returns collaborator names and emails.
Inputs: project_id, project_name.
todoist_project_createB
Create a new project in Todoist with optional sub-project hierarchy, description, and view style
Inputs: name (required), color, is_favorite, parent_id, +2 more.
todoist_project_deleteA
Delete a project from Todoist. This will also delete all tasks and sub-projects within the project.
Inputs: project_id, project_name.
todoist_project_getA
Get a list of all projects from Todoist with their IDs, names, descriptions, and hierarchy information
Inputs: no named parameters.
todoist_project_inviteB
Invite a user to collaborate on a project by email. The invitee will receive an email notification.
Inputs: project_id (required), email (required), message.
todoist_project_move_to_parentA
Move a project under another project (making it a sub-project) or to root level. Useful for organizing project hierarchies.
Inputs: project_id, project_name, parent_id.
todoist_project_note_createA
Create a new note for a project. Project notes are visible to all project collaborators.
Inputs: project_id (required), content (required).
todoist_project_note_deleteA
Delete a project note by ID.
Inputs: note_id (required).
todoist_project_notes_getA
Get all notes for a specific project. Project notes are shared with all project collaborators.
Inputs: project_id (required).
todoist_project_note_updateC
Update an existing project note's content.
Inputs: note_id (required), content (required).
todoist_projects_reorderA
Reorder projects by specifying their new positions. Controls project ordering in the sidebar.
Inputs: projects (required).
todoist_project_updateB
Update an existing project in Todoist. Can modify name, color, favorite status, description, or view style.
Inputs: project_id, project_name, name, color, +3 more.
todoist_reminder_createA
Create a new reminder for a task. Supports three reminder types: relative (minutes before due), absolute (specific date/time), and location-based. Requires Todoist Pro or Business plan.
Inputs: type (required), task_id, task_name, minute_offset, +7 more.
todoist_reminder_deleteA
Delete a reminder. Requires Todoist Pro or Business plan.
Inputs: reminder_id (required).
todoist_reminder_getA
Get all reminders, optionally filtered by task. Reminders require Todoist Pro or Business plan.
Inputs: task_id, task_name.
todoist_reminder_updateA
Update an existing reminder. Can change the type, timing, or location settings. Requires Todoist Pro or Business plan.
Inputs: reminder_id (required), type, minute_offset, due_date, +6 more.
todoist_section_archiveA
Archive a section. Archived sections are hidden but not deleted. Tasks in the section are also archived.
Inputs: section_id, section_name, project_id.
todoist_section_createB
Create a new section within a project in Todoist
Inputs: name (required), project_id (required), order.
todoist_section_deleteA
Delete a section and all its tasks from Todoist. Can delete by section ID or section name search.
Inputs: section_id, section_name, project_id.
todoist_section_getC
Get a list of sections within a project from Todoist with their IDs and names
Inputs: project_id.
todoist_section_moveB
Move a section to a different project. All tasks in the section will move with it.
Inputs: project_id (required), section_id, section_name.
todoist_sections_reorderA
Reorder sections within a project by specifying their new positions.
Inputs: project_id (required), sections (required).
todoist_section_unarchiveA
Unarchive a previously archived section. Restores the section and its tasks to active status.
Inputs: section_id, section_name, project_id.
todoist_section_updateB
Update an existing section in Todoist. Can update name by section ID or section name search.
Inputs: section_id, section_name, project_id, name.
todoist_subtask_createB
Create a new subtask under a parent task in Todoist
Inputs: content (required), parent_task_id, parent_task_name, description, +4 more.
todoist_subtask_promoteB
Promote a subtask to a main task (remove parent relationship)
Inputs: subtask_id, subtask_name, project_id, section_id.
todoist_subtasks_bulk_createA
Create multiple subtasks under a parent task in a single operation
Inputs: subtasks (required), parent_task_id, parent_task_name.
todoist_task_closeB
Close a task. For recurring tasks, this completes the current occurrence and schedules the next one. For non-recurring tasks, this is equivalent to completing the task.
Inputs: task_id, task_name.
todoist_task_completeB
Mark a task as complete found by ID or partial name search (case-insensitive)
Inputs: task_id, task_name.
todoist_task_convert_to_subtaskB
Convert an existing task to a subtask of another task
Inputs: task_id, task_name, parent_task_id, parent_task_name.
todoist_task_createC
Create a new task in Todoist with optional description, due date, priority, labels, deadline, project, section, and duration for time blocking
Inputs: content (required), description, due_string, priority, +9 more.
todoist_task_day_order_updateB
Update the day order of tasks in the Today view. Controls the order tasks appear when viewing today's tasks.
Inputs: items (required).
todoist_task_deleteB
Delete a task found by ID or partial name search (case-insensitive)
Inputs: task_id, task_name.
todoist_task_getB
Retrieve tasks from Todoist. Use 'filter' for Todoist filter syntax (e.g., 'today', 'p1') or 'task_name' for simple text search in task content
Inputs: task_id, project_id, label_id, priority, +6 more.
todoist_task_hierarchy_getB
Get a task with all its subtasks in a hierarchical structure
Inputs: task_id, task_name, include_completed.
todoist_task_moveB
Move a task to a different project, section, or under a parent task. Uses Todoist Sync API for reliable movement operations.
Inputs: task_id, task_name, project_id, section_id, +1 more.
todoist_task_quick_addA
Create a task using natural language parsing like the Todoist app. The text is parsed to extract due dates, projects (#), labels (@), assignees (+), priorities (p1-p4), deadlines ({in 3 days}), and descriptions (//). Example: "Buy groceries tomorrow #Shopping @errands p1 {deadline Friday} //Don't forget milk"
Inputs: text (required), note, reminder, auto_reminder.
todoist_task_reopenA
Reopen a previously completed task found by ID or partial name search (case-insensitive). Use this to restore a task that was marked as complete.
Inputs: task_id, task_name.
todoist_task_reorderA
Set the order of a task within its project/section. Lower numbers appear first.
Inputs: child_order (required), task_id, task_name.
todoist_tasks_bulk_completeA
Complete multiple tasks at once based on search criteria. Efficiently mark many tasks as done.
Inputs: project_id, priority, due_before, due_after, +1 more.
todoist_tasks_bulk_createB
Create multiple tasks at once for improved efficiency. Each task can have full attributes including duration for time blocking.
Inputs: tasks (required).
todoist_tasks_bulk_deleteA
Delete multiple tasks at once based on search criteria. Use with caution - this will permanently delete matching tasks.
Inputs: project_id, priority, due_before, due_after, +1 more.
todoist_tasks_bulk_updateB
Update multiple tasks at once based on search criteria. Supports updating content, priority, due dates, labels, project, section, and duration.
Inputs: search_criteria (required), updates (required).
todoist_tasks_reorder_bulkA
Reorder multiple tasks at once by specifying their new positions. Efficient for reorganizing task lists.
Inputs: items (required).
todoist_task_updateB
Update an existing task found by ID or partial name search. Supports updating content, description, due date, priority, labels, deadline, project, section, and duration
Inputs: task_id, task_name, content, description, +11 more.
todoist_test_all_featuresC
Run comprehensive tests on all Todoist MCP features to verify functionality
Inputs: mode.
todoist_test_connectionA
Test the connection to Todoist API and verify API token validity
Inputs: no named parameters.
todoist_test_performanceC
Measure performance and response times of Todoist API operations
Inputs: iterations.
todoist_user_getB
Get information about the current Todoist user including name, email, timezone, karma, and account settings.
Inputs: no named parameters.
todoist_user_settings_getA
Get user settings including reminder preferences, notification settings, sounds, and theme configuration.
Inputs: no named parameters.
todoist_workspaces_getA
Get all workspaces for the current user. Workspaces are available with Todoist Business accounts for team organization.
Inputs: no named parameters.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 86 tools
Many tools have overlapping purposes (e.g., todoist_activity_by_date_range, activity_by_project, activity_get; task_close vs task_complete). While many are distinct, some ambiguity exists, especially with activity and task completion tools.
Most tools follow 'todoist_<resource>_<action>' pattern (e.g., task_create, project_get), but some use plural (completed_tasks_get, duplicates_find) and a few are inconsistent (task_close vs task_complete). Overall, the pattern is clear.
With 86 tools, the server is overly large for a typical MCP server. While Todoist has many features, this many tools can be overwhelming and lead to inefficiency. A more curated set (e.g., 30-50) would be more appropriate.
The tool set covers nearly all Todoist features: CRUD for tasks, projects, sections, labels, filters, reminders, comments, notifications, backups, activity logs, user settings, and more. Very comprehensive with minor gaps.
Maintenance
Related MCP Connectors
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.
ADHD-friendly task management MCP server for ChaTodo: organize tasks, lists, and priorities.
MCP server for generating rough-draft project plans from natural-language prompts.
Related MCP Servers
- AlicenseAqualityDmaintenanceAn MCP server that integrates Claude with Todoist, enabling natural language task management including creating, updating, completing, and deleting tasks.5235 npm392MIT
- AlicenseBqualityDmaintenanceA comprehensive MCP server that provides full integration between Claude and Todoist, enabling task, project, section, and label management through 24 different tools with the complete Todoist API.3040 npm6MIT
- AlicenseNot gradedqualityDmaintenanceA custom MCP server that connects Claude to Todoist using a permanent API token, avoiding OAuth re-authentication issues across all Claude surfaces.94 npmMIT
- AlicenseAqualityDmaintenanceA local MCP server for Todoist task management, enabling Claude to create, read, update, complete, delete, and move tasks, manage projects and labels, and add comments via the Todoist REST and Sync APIs.151MIT