The official Todoist MCP server providing comprehensive task and project management tools for personal productivity and team collaboration
The Todoist MCP server provides 47 tools with consistent naming conventions and documented schemas. Strengths include verb-based tool names (add-, complete-, find-, update-), type definitions for parameters, and a comprehensive toolkit covering task, project, section, comment, reminder, label, and filter management. However, there are significant gaps: (1) parameter descriptions are minimal or missing for many tools, most array-type parameters use generic descriptions like 'Array of tasks to create' without specifying the required structure of each array element; (2) output schemas are not visible in the provided source code, making it impossible to verify whether responses include necessary chaining IDs and are properly shaped for downstream tool use; (3) error handling and recovery guidance are not evident in tool descriptions; (4) several high-risk tools (delete-object, project-management, fetch) lack detailed parameter constraints and safety mechanisms. Tool names follow verb_noun patterns well (add-tasks, complete-tasks, find-tasks), but descriptions are uniformly brief (10-50 chars) and lack context for when to use each tool or what distinguishes it from similar tools. The 'fetch' tool (tool 47) is particularly concerning, it exposes raw API access, which violates the principle of abstraction and invites hallucinated endpoints. Per-tool averages: naming 78/100, description 35/100, schema 55/100, overall tool average 56/100, rounded to 62 after adjusting for the breadth and practical utility of the toolkit.
Add one or more comments to tasks
Create one or more filters
Create one or more labels
Create one or more projects
Add one or more reminders to tasks
Create one or more sections in a project
Create one or more tasks
Parameter descriptions are generic and do not specify the structure of array elements. For tools like add-tasks, the 'tasks' parameter is described as 'Array of tasks to create' but does not document required fields (e.g., 'content' field), data types for each field, or examples. This forces LLMs to guess the structure.
Output schemas are not visible in the provided source code. The tool definitions show only input schemas. Without output schema documentation, LLMs cannot know what fields will be returned, which breaks tool chaining (e.g., if add-tasks returns a task_id, downstream tools need to know this to use it). This violates the schema documentation pattern.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | C | 60 | 2026-07-28+ | v2 |
| 2026-03-09 | F | 39 | - | v1 |
Analyze and refresh project health metrics
Mark one or more tasks as complete
Delete a single object (task, project, section, comment, label, filter, or reminder)
Export a project as a reusable template
Fetch raw data from the Todoist API
Fetch detailed information about a single object
Search and retrieve activity events with filtering by object type, event type, date range, and initiator
Search and retrieve comments
List completed tasks
Search and retrieve filters
Search and retrieve labels
Find and list project collaborators with optional search filtering
Search and retrieve projects
Search and retrieve reminders
Search and retrieve sections
Search and retrieve tasks with filtering and sorting options
Find tasks by due date with interactive task-list widget display
Get an overview of the user's current workload and active tasks
Get productivity statistics for the user
Get activity statistics for a project over a time period
Get health metrics for a project including task completion rates and activity
Get aggregated insights across all workspace projects
Import a project from a template
List all accessible workspaces
Manage task assignments to team members
Manage project settings including archiving and deletion
Move projects between workspaces
Reorder objects (tasks, projects, or sections)
Move one or more tasks to different dates
Search across all Todoist objects using natural language
Mark one or more tasks as incomplete
Update one or more comments
Update one or more filters
Update one or more labels
Update one or more projects
Update one or more reminders
Update one or more sections
Update one or more tasks
Get current user information and account details
View attachment details and fetch attachment content
Destructive and write-heavy tools lack safety mechanisms and clear recovery guidance. delete-object and project-management are marked DESTRUCTIVE but have no mention of dry-run, confirmation steps, or what cannot be undone. Error descriptions do not guide recovery (e.g., 'what to do if deletion fails').
The 'fetch' tool (tool 47) exposes raw API endpoint access without abstraction. This violates the pattern of discrete, well-defined tools, it allows LLMs to hallucinate endpoint paths, pass invalid HTTP methods, and construct malformed requests. This is a security and usability anti-pattern.
Tool descriptions are consistently brief (10-50 chars) and lack actionable context. Most descriptions state WHAT a tool does (e.g., 'Create one or more tasks') but not WHEN to use it, how it differs from similar tools, or what happens as a side effect. Per the rubric, descriptions should be 50-200 chars and answer: What? When? Why? What do I get back?
Array-type parameters do not declare mutually exclusive fields or document dependencies. For example, if update-tasks supports conditional updates, the description should state which combinations of fields are valid and whether omitted fields are preserved or cleared.
find-tasks-by-date and find-activity accept date ranges but do not specify format (ISO 8601 expected?) or whether times are included. LLMs frequently miscalculate or format dates incorrectly without explicit examples or constraints.
Generic parameter names like 'query', 'type', and 'id' are ambiguous. For example, project-management uses 'projects' as an array but does not document what operation types are supported (archive, delete, restore?). Similarly, delete-object's 'type' parameter lacks an enum or description of valid values.
No evidence of pagination support in find-* tools. Queries like find-tasks or find-activity could return hundreds of results, exhausting context and degrading LLM reasoning. Tools should accept limit and offset/cursor parameters and document max result counts.
No idempotency guarantees or guidance documented. Agents retry on ambiguous failures, if add-tasks is not idempotent (retrying the same request creates duplicate tasks), the LLM will escalate failures and create unwanted duplicates. Idempotence guidance is critical for write operations.