Todoist MCP Server
Provides comprehensive task and project management capabilities, allowing users to create, update, complete, and delete tasks, manage projects and sections, and filter tasks by various criteria using Todoist's REST API v2.
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 Servershow me my tasks due today"
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 Model Context Protocol (MCP) server that integrates with Todoist, allowing Claude and other MCP-compatible AI assistants to interact with your Todoist tasks and projects.
Features
Task Management: Create, read, update, complete, and delete tasks
Project Management: List and manage projects
Filtering: Filter tasks by project, section, labels, or natural language queries
Full API Support: Comprehensive coverage of Todoist's REST API v2
Related MCP server: Todoist MCP Server
Installation
Prerequisites
Python 3.12 or higher
pip (Python package installer)
A Todoist account and API token
Step 1: Get Your Todoist API Token
Scroll down to the "API token" section
Copy your API token (you'll need this later)
Step 2: Install the MCP Server
Clone the repository:
git clone <repository-url>
cd todoist-mcpInstall the package:
pip install -e .Note: If you want to install it in a virtual environment:
python -m venv venv
source venv/bin/activate # On Windows: venv\Scripts\activate
pip install -e .Create a
.envfile with your API token:
# Create .env file in the todoist-mcp directory
echo "TODOIST_API_TOKEN=your_api_token_here" > .envReplace your_api_token_here with the token you copied in Step 1.
Step 3: Configure Claude Desktop
The Claude Desktop configuration file is located at:
macOS:
~/Library/Application Support/Claude/claude_desktop_config.jsonWindows:
%APPDATA%\Claude\claude_desktop_config.jsonLinux:
~/.config/Claude/claude_desktop_config.json
Option A: Using Virtual Environment (Recommended for Development)
If you installed in a virtual environment, use the full path to the todoist-mcp command:
{
"mcpServers": {
"todoist": {
"command": "/full/path/to/venv/bin/todoist-mcp"
}
}
}To find the full path, run:
which todoist-mcp # On macOS/Linux
where todoist-mcp # On WindowsOption B: Global Installation
If you installed globally (without a virtual environment), you can use:
{
"mcpServers": {
"todoist": {
"command": "todoist-mcp"
}
}
}Important Notes:
The MCP server will automatically load the
TODOIST_API_TOKENfrom the.envfile in thetodoist-mcpdirectoryYou do NOT need to specify the token in the Claude Desktop config if you're using a
.envfileAfter updating the config, fully restart Claude Desktop (quit the app completely, don't just close the window)
Step 4: Verify Installation
Restart Claude Desktop completely (use Quit from the menu)
Open Claude Desktop
Look for the MCP server indicator (usually in the bottom corner or settings)
You should see "todoist" listed as an available MCP server
Try asking Claude: "Show me my Todoist tasks"
Troubleshooting
"Could not connect to MCP server" or "spawn todoist-mcp ENOENT"
Make sure you used the full path to
todoist-mcpif using a virtual environmentVerify the command exists by running
which todoist-mcp(macOS/Linux) orwhere todoist-mcp(Windows)Check that your
.envfile exists in thetodoist-mcpdirectory with the correct token
"TODOIST_API_TOKEN environment variable not set"
Ensure your
.envfile is in thetodoist-mcpdirectory (same directory aspyproject.toml)Verify the
.envfile contains:TODOIST_API_TOKEN=your_actual_tokenCheck for typos in the variable name
Server keeps disconnecting
Verify your API token is valid at https://todoist.com/app/settings/integrations/developer
Check that you've fully restarted Claude Desktop
Look at Claude Desktop logs for specific error messages
Usage
With Claude Desktop
Once configured, you can interact with Claude using natural language:
"Show me all my tasks for today"
"Create a task to review the quarterly report due tomorrow"
"Mark task ID 12345 as completed"
"List all my projects"
"Create a new project called 'Home Renovation'"
"Show me all high-priority tasks"
As a Standalone Server (Advanced)
You can also run the MCP server directly for testing or integration with other MCP clients:
# Make sure your .env file is configured first
todoist-mcpAvailable Tools
Task Operations
get_tasks- List tasks with optional filteringget_task- Get details of a specific taskcreate_task- Create a new taskupdate_task- Update an existing taskcomplete_task- Mark a task as completedreopen_task- Reopen a completed taskdelete_task- Delete a task
Project Operations
get_projects- List all projectsget_project- Get details of a specific projectcreate_project- Create a new project
Section Operations
get_sections- List sections within projects
Example Interactions
Once connected, you can interact with Claude using natural language:
"Show me all my tasks for today"
"Create a task to review the quarterly report due tomorrow"
"Mark task ID 12345 as completed"
"List all my projects"
"Create a new project called 'Home Renovation'"
Development
Project Structure
todoist-mcp/
├── todoist_mcp/
│ ├── __init__.py
│ ├── client.py # Todoist API client
│ └── server.py # MCP server implementation
├── pyproject.toml
├── README.md
└── .env.exampleRunning Tests
(Tests would be added here in the future)
Contributing
Fork the repository
Create a feature branch
Make your changes
Add tests if applicable
Submit a pull request
License
This project is licensed under the terms specified in the LICENSE file.
Available Tools
11 toolscomplete_taskB
Mark a task as completed.
Args:
task_id: The ID of the task to complete
| Name | Required | Description | Default |
|---|---|---|---|
| task_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It states the action ('Mark a task as completed') but doesn't clarify if this is irreversible, requires specific permissions, affects related data (e.g., project progress), or has side effects like notifications. For a mutation tool, this leaves significant gaps in understanding its behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is highly concise and well-structured: a brief purpose statement followed by a parameter explanation, with no wasted words. Every sentence directly contributes to understanding the tool, making it easy to parse quickly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's moderate complexity (a mutation with one parameter) and the presence of an output schema (which likely handles return values), the description is minimally adequate. However, it lacks behavioral details and usage context, leaving gaps that could hinder effective agent use despite the output schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description includes an 'Args' section that explains 'task_id: The ID of the task to complete', adding clear meaning beyond the schema's basic title ('Task Id') and type. Since schema description coverage is 0%, this fully compensates for the single parameter, though it doesn't detail format constraints (e.g., UUID).
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb ('Mark') and resource ('a task') with the specific action ('as completed'), making the purpose immediately understandable. However, it doesn't explicitly differentiate from sibling tools like 'reopen_task' or 'update_task' that also modify task status, which prevents a perfect score.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives like 'reopen_task' (for undoing completion) or 'update_task' (which might also handle status changes). There's no mention of prerequisites, such as whether the task must be in an incomplete state, leaving usage context entirely implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_projectB
Create a new project in Todoist.
Args:
name: The name of the project
parent_id: Parent project ID (for nested projects)
color: Project color
is_favorite: Whether to mark as favorite
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| parent_id | No | ||
| color | No | ||
| is_favorite | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden for behavioral disclosure. It states this is a creation operation but doesn't mention permissions required, whether projects are permanent or deletable, rate limits, or what the output looks like. For a mutation tool with zero annotation coverage, this leaves significant gaps in understanding its behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is efficiently structured with a clear purpose statement followed by a bulleted list of parameters. Every sentence earns its place, and there's no redundant or verbose language. It's appropriately sized for a tool with 4 parameters.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given that there's an output schema (which handles return values), 0% schema description coverage, and no annotations, the description does an adequate job explaining parameters but falls short on behavioral context. For a creation tool in a Todoist system with sibling tools, it should provide more guidance on usage and implications.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description adds meaningful context for all 4 parameters beyond the schema, which has 0% description coverage. It explains that 'parent_id' is for nested projects and 'is_favorite' marks projects as favorites, providing semantic value that the schema titles alone don't convey. However, it doesn't specify format details like valid color values or parent_id constraints.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Create a new project') and resource ('in Todoist'), making the purpose immediately understandable. However, it doesn't differentiate this tool from sibling tools like 'create_task' or explain why one would create a project versus a task, which prevents a perfect score.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives like 'create_task' or 'update_task', nor does it mention prerequisites or context for project creation. It simply lists parameters without explaining the tool's role in the broader workflow.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_taskA
Create a new task in Todoist.
Args:
content: The task content/title
description: Detailed description of the task
project_id: Project ID to add the task to
section_id: Section ID within the project
parent_id: Parent task ID (for subtasks)
labels: List of label names
priority: Priority from 1 (normal) to 4 (urgent)
due_string: Human readable due date (e.g., 'tomorrow', 'next Monday')
due_date: ISO 8601 formatted due date
| Name | Required | Description | Default |
|---|---|---|---|
| content | Yes | ||
| description | No | ||
| project_id | No | ||
| section_id | No | ||
| parent_id | No | ||
| labels | No | ||
| priority | No | ||
| due_string | No | ||
| due_date | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden for behavioral disclosure. While 'Create' implies a write/mutation operation, the description doesn't address authentication requirements, rate limits, error conditions, or what happens when creating duplicate tasks. It provides basic parameter explanations but lacks operational context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is efficiently structured with a clear purpose statement followed by a well-organized parameter list. Each parameter explanation is brief yet informative. While slightly longer due to 9 parameters, every sentence adds value and the structure helps with readability.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutation tool with 9 parameters and no annotations, the description provides good parameter semantics but lacks behavioral context. The existence of an output schema reduces the need to describe return values, but the description should still address authentication, error handling, and usage guidelines given the tool's complexity and mutation nature.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage and 9 parameters, the description provides comprehensive semantic explanations for all parameters. It clarifies ambiguous terms like 'content' vs 'description', explains numeric ranges for 'priority', provides format examples for 'due_string' and 'due_date', and clarifies relationships between parameters like 'project_id' and 'section_id'.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the specific action ('Create a new task') and resource ('in Todoist'), distinguishing it from sibling tools like update_task, complete_task, or delete_task. It provides a verb+resource combination that leaves no ambiguity about the tool's function.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives like update_task or create_project. It doesn't mention prerequisites (e.g., needing valid project_id for certain use cases) or contextual factors that would help an agent choose between this and sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_taskC
Delete a task.
Args:
task_id: The ID of the task to delete
| Name | Required | Description | Default |
|---|---|---|---|
| task_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It states 'Delete a task' which implies a destructive mutation, but doesn't disclose critical behavioral traits such as whether deletion is permanent, reversible, requires confirmation, affects related data, or has rate limits. This leaves significant gaps for safe agent operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is appropriately sized with two sentences: a clear purpose statement and a parameter list. It's front-loaded with the main action, though the parameter section could be integrated more smoothly. There's minimal waste, earning its place efficiently.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (destructive operation with 1 parameter), no annotations, and an output schema exists (which handles return values), the description is moderately complete. It covers the basic purpose and parameter, but lacks behavioral details and usage context, making it adequate but with clear gaps for a mutation tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description includes an 'Args' section that documents the single parameter 'task_id', adding meaning beyond the input schema which has 0% description coverage. However, it doesn't provide details on the format or source of task IDs (e.g., from 'get_tasks'), so it partially compensates but not fully.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Delete') and resource ('a task'), making the purpose immediately understandable. However, it doesn't differentiate this tool from sibling tools like 'complete_task' or 'reopen_task' in terms of what specific type of task operation it performs, beyond the basic verb.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives like 'complete_task' or 'reopen_task', nor does it mention prerequisites (e.g., task must exist, user must have permissions). It only states what the tool does without context for selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_projectA
Get a specific project by ID.
Args:
project_id: The ID of the project to retrieve
| Name | Required | Description | Default |
|---|---|---|---|
| project_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden for behavioral disclosure. It states this is a retrieval operation but doesn't describe authentication requirements, rate limits, error behavior (e.g., what happens with invalid ID), or response format. The presence of an output schema helps but the description itself lacks behavioral context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is perfectly concise with zero wasted words. It states the purpose in one clear sentence and documents the parameter in a clean, structured format. Every element earns its place and the information is front-loaded appropriately.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read operation with one parameter and an output schema, the description provides adequate context. The output schema will handle return value documentation, so the description focuses correctly on purpose and parameter semantics. However, it could better address behavioral aspects given the lack of annotations.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description explicitly documents the single parameter ('project_id: The ID of the project to retrieve'), adding clear semantic meaning beyond the schema's minimal title ('Project Id'). With 0% schema description coverage, this parameter documentation is essential and well-handled for a single-parameter tool.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb ('Get') and resource ('a specific project by ID'), making the purpose unambiguous. It distinguishes from sibling 'get_projects' by specifying retrieval of a single project rather than a list. However, it doesn't fully differentiate from 'get_task' which retrieves a different resource type.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage when you need to retrieve a single project by its ID, but doesn't explicitly state when to use this versus 'get_projects' (for listing) or other siblings. No guidance is provided about prerequisites, error conditions, or alternative tools for related operations.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_projectsB
Get all projects from Todoist.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden for behavioral disclosure. It states it 'gets' projects but doesn't specify whether this is a read-only operation, requires authentication, has rate limits, returns paginated results, or what format the output takes. While 'get' implies a safe read operation, the lack of explicit behavioral details leaves significant gaps for an agent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence that communicates the core purpose without any wasted words. It's appropriately front-loaded with the essential information ('Get all projects from Todoist') and contains no extraneous details. This is an excellent example of conciseness for a simple retrieval tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter tool with an output schema (which handles return values), the description is minimally adequate. It states what the tool retrieves but lacks behavioral context (authentication, rate limits, etc.) and usage guidance relative to siblings. The presence of an output schema reduces the burden, but the description could still benefit from more operational context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, and schema description coverage is 100% (though empty). The description doesn't need to explain parameters since none exist. It appropriately focuses on what the tool does rather than parameter details, earning a high score for this dimension given the parameterless design.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb ('Get') and resource ('all projects from Todoist'), making the purpose immediately understandable. It doesn't specifically differentiate from sibling tools like 'get_project' (singular), but the 'all projects' phrasing provides some implicit distinction. The description avoids tautology by specifying what is being retrieved rather than just restating the tool name.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives like 'get_project' (singular) or 'get_tasks'. There's no mention of prerequisites, context, or comparison with sibling tools. The agent must infer usage from the tool name and description alone without explicit direction.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_sectionsC
Get sections from a project.
Args:
project_id: Project ID to get sections from (optional)
| Name | Required | Description | Default |
|---|---|---|---|
| project_id | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden but offers minimal behavioral insight. It doesn't disclose whether this is a read-only operation, what permissions are needed, how results are returned (e.g., pagination), or error conditions. 'Get' implies reading, but specifics are missing.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is brief and front-loaded with the main purpose, followed by parameter notes. It avoids redundancy, though the parameter explanation could be more integrated. Overall, it's efficient with minimal waste.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has an output schema (which handles return values), the description's gaps in usage guidelines and behavioral transparency are somewhat mitigated. However, for a tool with no annotations and low schema coverage, it should provide more context on behavior and alternatives to be fully complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description adds that 'project_id' is optional, which is useful since the schema has 0% description coverage. However, it doesn't explain what happens when omitted (e.g., returns all sections across projects?) or provide format examples. With low schema coverage, this partial compensation earns a baseline score.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'get' and resource 'sections from a project', making the purpose understandable. However, it doesn't differentiate from sibling tools like 'get_projects' or 'get_tasks', which would require more specific scope definition to earn a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided about when to use this tool versus alternatives like 'get_projects' or 'get_tasks'. The description mentions the parameter is optional but doesn't explain the implications of providing or omitting it, leaving usage context unclear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_taskC
Get a specific task by ID.
Args:
task_id: The ID of the task to retrieve
| Name | Required | Description | Default |
|---|---|---|---|
| task_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It states this is a retrieval operation ('Get'), implying it's likely read-only, but doesn't confirm this or describe any other behavioral traits like error conditions, authentication requirements, rate limits, or what happens if the task ID doesn't exist.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is appropriately concise with two sentences that directly address purpose and parameters. The structure is front-loaded with the main purpose first, though the parameter documentation could be more integrated rather than appearing as a separate 'Args' section.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has an output schema (which handles return values) and only one parameter, the description is minimally adequate. However, for a retrieval tool with no annotations, it should ideally mention that this is a read-only operation and clarify what happens with invalid IDs to provide better context for the agent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description adds basic meaning for the single parameter ('The ID of the task to retrieve'), which is helpful since schema description coverage is 0%. However, it doesn't provide format details, validation rules, or examples that would be valuable for a parameter with no schema documentation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose with a specific verb ('Get') and resource ('a specific task by ID'), making it immediately understandable. However, it doesn't differentiate this tool from its sibling 'get_tasks' which presumably retrieves multiple tasks, missing an opportunity for sibling distinction.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives like 'get_tasks' or other task-related tools. While the purpose is clear, there are no explicit instructions about prerequisites, appropriate contexts, or comparisons with sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_tasksC
Get tasks from Todoist with optional filtering.
Args:
project_id: Filter tasks by project ID
section_id: Filter tasks by section ID
label: Filter tasks by label
filter_query: Natural language filter (e.g., 'today', 'overdue', 'p1')
| Name | Required | Description | Default |
|---|---|---|---|
| project_id | No | ||
| section_id | No | ||
| label | No | ||
| filter_query | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It mentions 'optional filtering' but doesn't describe key behaviors like whether this is a read-only operation, if it requires authentication, how results are returned (e.g., pagination, format), or any rate limits. The description is minimal and leaves critical behavioral traits unspecified.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is appropriately sized with a clear opening sentence and a structured 'Args' section. It's front-loaded with the core purpose, and each sentence adds value without redundancy. Minor improvements could include integrating the parameter explanations more seamlessly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's moderate complexity (4 optional parameters) and the presence of an output schema (which handles return values), the description is partially complete. It covers the purpose and parameters but lacks behavioral context and usage guidelines. With no annotations, it should do more to compensate, especially for a tool with filtering capabilities.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description includes an 'Args' section that lists all four parameters with brief explanations, adding meaning beyond the input schema (which has 0% description coverage). However, the explanations are basic (e.g., 'Filter tasks by project ID') and don't provide detailed semantics like format examples (except for 'filter_query'), constraints, or interactions between parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb ('Get') and resource ('tasks from Todoist') with optional filtering, making the purpose immediately understandable. It distinguishes itself from siblings like 'get_task' (singular) by implying it retrieves multiple tasks, though it doesn't explicitly contrast with other list-like tools like 'get_projects' or 'get_sections'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives. It doesn't mention when to prefer 'get_tasks' over 'get_task' (singular), 'complete_task', or other siblings, nor does it specify prerequisites, contexts, or exclusions for usage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
reopen_taskC
Reopen a completed task.
Args:
task_id: The ID of the task to reopen
| Name | Required | Description | Default |
|---|---|---|---|
| task_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden for behavioral disclosure. It states the action ('Reopen') which implies a state mutation, but doesn't describe what 'reopen' entails (e.g., changes status from 'completed' to 'open', preserves other attributes, requires permissions, or has side effects). The description lacks behavioral context beyond the basic action.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is appropriately concise with two sentences: a clear purpose statement followed by parameter documentation. It's front-loaded with the core functionality. However, the parameter documentation uses minimal formatting and could be slightly more structured for readability.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's moderate complexity (state mutation), lack of annotations, and presence of an output schema (which reduces need to describe returns), the description is minimally adequate. It covers the basic action and parameter, but lacks details on behavioral implications, error conditions, or integration with sibling tools, leaving room for improvement in completeness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It provides a brief explanation for the single parameter ('The ID of the task to reopen'), which adds basic semantic context beyond the schema's title ('Task Id'). However, it doesn't elaborate on format requirements, validation rules, or where to obtain the ID, leaving gaps in parameter understanding.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Reopen') and target resource ('a completed task'), making the purpose immediately understandable. It distinguishes from siblings like 'complete_task' by specifying the opposite state transition. However, it doesn't explicitly contrast with other update/mutation tools like 'update_task'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides minimal guidance: it implies this tool should be used on 'completed' tasks, but doesn't specify when to choose this over alternatives like 'update_task' for status changes, or whether there are prerequisites (e.g., task must be in a specific state). No explicit when-not-to-use or sibling comparisons are provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_taskB
Update an existing task.
Args:
task_id: The ID of the task to update
content: Updated task content/title
description: Updated task description
labels: Updated list of label names
priority: Updated priority from 1 (normal) to 4 (urgent)
due_string: Updated human readable due date
due_date: Updated ISO 8601 formatted due date
| Name | Required | Description | Default |
|---|---|---|---|
| task_id | Yes | ||
| content | No | ||
| description | No | ||
| labels | No | ||
| priority | No | ||
| due_string | No | ||
| due_date | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. While 'update' implies mutation, the description doesn't address important behavioral aspects: what permissions are required, whether updates are atomic or partial, what happens when only some fields are provided, whether there are rate limits, or what the response format looks like. The description merely lists parameters without explaining the tool's behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured and appropriately sized. It begins with a clear purpose statement, then provides a parameter-by-parameter breakdown with helpful explanations. While efficient, it could be slightly more concise by grouping related parameters (like the two due date formats) or using bullet points instead of the 'Args:' format.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given that this is a mutation tool with 7 parameters, no annotations, but with an output schema present, the description is moderately complete. The parameter explanations are excellent, but the lack of behavioral context (permissions, atomicity, response format) is a significant gap. The presence of an output schema means the description doesn't need to explain return values, but it should address other behavioral aspects.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description provides excellent parameter semantics that go far beyond the input schema. With 0% schema description coverage, the schema only provides parameter names and types. The description adds crucial context: 'task_id' identifies which task to update, 'priority' ranges from 1 (normal) to 4 (urgent), 'due_string' is human readable while 'due_date' uses ISO 8601 format, and all other fields represent 'updated' versions of task attributes.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb ('update') and resource ('an existing task'), making the purpose immediately understandable. However, it doesn't differentiate this tool from sibling tools like 'complete_task' or 'reopen_task' which also modify tasks, nor does it explain how this differs from 'create_task' which might share similar parameters.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives. With siblings like 'complete_task', 'reopen_task', and 'delete_task' that also modify task states, there's no indication of when partial updates via 'update_task' are appropriate versus using those other state-changing operations.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
11 tool updates
v1.0.0- Changed
complete_task1 field changed- added
Input schema / titleAdded value: +"complete_taskArguments"
- Changed
create_project1 field changed- added
Input schema / titleAdded value: +"create_projectArguments"
- Changed
create_task1 field changed- added
Input schema / titleAdded value: +"create_taskArguments"
- Changed
delete_task1 field changed- added
Input schema / titleAdded value: +"delete_taskArguments"
- Changed
get_project1 field changed- added
Input schema / titleAdded value: +"get_projectArguments"
- Changed
get_projects1 field changed- added
Input schema / titleAdded value: +"get_projectsArguments"
- Changed
get_sections1 field changed- added
Input schema / titleAdded value: +"get_sectionsArguments"
- Changed
get_task1 field changed- added
Input schema / titleAdded value: +"get_taskArguments"
- Changed
get_tasks1 field changed- added
Input schema / titleAdded value: +"get_tasksArguments"
- Changed
reopen_task1 field changed- added
Input schema / titleAdded value: +"reopen_taskArguments"
- Changed
update_task1 field changed- added
Input schema / titleAdded value: +"update_taskArguments"
11 tool updates
- First observed
complete_task - First observed
create_project - First observed
create_task - First observed
delete_task - First observed
get_project - First observed
get_projects - First observed
get_sections - First observed
get_task - First observed
get_tasks - First observed
reopen_task - First observed
update_task
TDQS
Scored across 11 tools
Every tool has a clearly distinct purpose with no ambiguity. The tools are organized around specific resources (tasks, projects, sections) and actions (create, get, update, delete, complete, reopen), making it easy for an agent to select the right tool. For example, 'complete_task' and 'reopen_task' handle task state changes, while 'update_task' handles content modifications.
All tool names follow a consistent verb_noun pattern throughout, using snake_case. The verbs are clear and appropriate (e.g., create, get, update, delete, complete, reopen), and nouns specify the resource (e.g., task, project, sections). There are no deviations or mixed conventions.
With 11 tools, this server is well-scoped for managing Todoist tasks and projects. Each tool earns its place by covering essential operations like CRUD for tasks and projects, plus specific actions like completing/reopening tasks and retrieving sections. The count is neither too thin nor excessive for the domain.
The tool surface provides complete CRUD/lifecycle coverage for tasks and projects, with no obvious gaps. It includes creation, retrieval, updating, and deletion for both resources, plus state management (complete/reopen) for tasks and section retrieval. This allows agents to handle all core workflows without dead ends.
Maintenance
Related MCP Connectors
Manage tasks, Focus Zone, notes, projects, and task history from compatible AI assistants.
Create and manage MeisterTask projects, tasks, and notes from your AI assistant.
- mcpOAuthnet.todoist
Official Todoist MCP server for AI assistants to manage tasks, projects, and workflows.
Manage Superlist tasks and lists in plain language from any MCP-compatible AI agent.
Related MCP Servers
- FlicenseNot gradedqualityDmaintenanceEnables AI assistants to manage Todoist tasks, projects, labels, sections, and comments through natural conversation. Supports comprehensive task operations including creation, updates, completion, and organization with natural language quick-add functionality.-
- AlicenseNot gradedqualityCmaintenanceConnects AI assistants to Todoist for comprehensive task management, enabling natural language creation, updating, and organization of tasks, projects, sections, and labels.5 npm3MIT
- AlicenseNot gradedqualityDmaintenanceEnables AI assistants to manage Todoist tasks, projects, sections, and labels through natural language, supporting task creation, updates, completion, and intelligent organization of your workflow.5 npmMIT
- AlicenseAqualityFmaintenanceEnables AI assistants to manage Todoist tasks, projects, and labels through natural language, with support for filters, priorities, and natural language dates.12MIT