todoist-mcp
<div align="center">
<img src="https://img.icons8.com/color/200/todoist.png" width="120"/>
<h1>Todoist MCP Server</h1>
<p>A Model Context Protocol (MCP) server implementation that integrates Claude and other AI assistants with Todoist, enabling natural language task management.</p>
<div>
<img src="https://img.shields.io/badge/claude-mcp-blue" alt="MCP Server">
<img src="https://img.shields.io/badge/todoist-mcp-orange" alt="Todoist Integration">
<a href="https://www.npmjs.com/package/todoist-mcp" target="_blank">
<img src="https://img.shields.io/npm/v/todoist-mcp.svg" alt="npm version">
</a>
</div>
</div>
## Features
- **Complete Todoist API Integration**: Access to the full Todoist REST API v2, and support for the Todoist Sync API through natural language
- **Batch Processing**: Client can process multiple tasks in a single request
- **Search by name**: AI can search for tasks, projects, and labels by name instead of ID
- **Tasks**: Create, update, close, reopen, move, and delete tasks using conversational language
- **Projects**: Create and manage projects and sections
- **Comments**: Add and manage comments on tasks and projects
- **Labels**: Create and manage personal and shared labels
- **Smart Context**: On startup, automatically provides your projects and labels to the AI via server instructions — no extra tool calls needed
- **Prompt Support**: You can easily provide information about your projects to client
## Configuration
You'll need a Todoist API token to use this MCP server.
### Getting a Todoist API Token
1. Log in to your Todoist account
2. Navigate to Settings → Integrations
3. Find your API token under "Developer"
### Usage
Add to `mcpServers` in your platform config:
```json
"todoist": {
"command": "npx",
"args": ["-y", "todoist-mcp"],
"env": { "API_KEY": "your_todoist_api_token" }
}
```
| Platform | Config |
|----------|--------|
| Claude Desktop | `~/Library/Application Support/Claude/claude_desktop_config.json` (macOS), `%APPDATA%\Claude\` (Windows) |
| Claude Code | `.mcp.json` — `claude mcp add --transport stdio --scope project --env API_KEY=token todoist -- npx -y todoist-mcp` |
| Cursor | `~/.cursor/mcp.json` or `.cursor/mcp.json` |
| Codex | `~/.codex/config.toml` or `.codex/config.toml` — see example below |
| Gemini CLI | `~/.gemini/settings.json` — `gemini mcp add -e API_KEY=token todoist npx -y todoist-mcp` |
**Codex** — CLI:
```bash
codex mcp add todoist --env API_KEY=your_token -- npx -y todoist-mcp
```
Or add to `config.toml`:
```toml
[mcp_servers.todoist]
command = "npx"
args = ["-y", "todoist-mcp"]
[mcp_servers.todoist.env]
API_KEY = "your_todoist_api_token"
```
## Available Tools
### Tasks
- `get_tasks_list`: Get tasks with optional filtering by project, section, label, or IDs
- `get_tasks_by_filter`: Get tasks using Todoist filter language (e.g. `"today"`, `"overdue"`, `"P1 | P2"`, `"#Work & @urgent"`)
- `create_tasks`: Create new tasks with various attributes
- `get_tasks`: Get specific tasks by ID or name
- `update_tasks`: Update existing tasks
- `close_tasks`: Mark tasks as complete
- `reopen_tasks`: Reopen completed tasks
- `delete_tasks`: Delete tasks
- `move_tasks`: Move tasks to a different project or section
### Projects
- `get_projects_list`: Get all projects
- `create_projects`: Create new projects
- `get_projects`: Get specific projects by ID or name
- `update_projects`: Update existing projects
- `delete_projects`: Delete projects
- `get_collaborators`: Get all collaborators for a project
- `move_projects`: Move projects to a different location or subproject
### Sections
- `get_sections_list`: Get all sections or filter by project
- `create_sections`: Create new sections
- `get_sections`: Get specific sections by ID or name
- `update_sections`: Update sections
- `delete_sections`: Delete sections
### Comments
- `get_comments_list`: Get comments for a project or task
- `create_comments`: Create new comments
- `get_comments`: Get specific comments by ID
- `update_comments`: Update comments
- `delete_comments`: Delete comments
### Labels
- `get_labels_list`: Get all personal labels
- `create_labels`: Create new personal labels
- `get_labels`: Get personal labels by ID or name
- `update_labels`: Update personal labels
- `delete_labels`: Delete personal labels
- `get_shared_labels`: Get all shared labels
- `rename_shared_labels`: Rename shared labels
- `remove_shared_labels`: Remove shared labels
### Utils
- `utils_get_colors`: Get available colors for projects, labels, filters
## Prompts
- `projects_list`: Get list of projects with their sections and params in markdown format
## Example Usage
Ask your AI assistant (like Claude) questions such as:
```
"What tasks do I have due today?"
"Create a task to review the quarterly report by next Friday"
"Make a new project called 'Home Renovation'"
"Add a comment to my meeting prep task"
"Show me all my high priority tasks"
"Create a label for 'Urgent' tasks with a red color"
"What projects do I have in my Todoist?"
"Mark my dentist appointment task as complete"
```
## Development
```bash
# Install dependencies
npm install
# Build the project and run inspector
npm run build && npx @modelcontextprotocol/inspector -e API_KEY=YOUR_API_KEY_HERE node dist/index.js
```
## License
This project is licensed under the MIT License - see the [LICENSE](LICENSE.md) file for details.
## Issues and Support
If you encounter any issues or need support, please file an issue on the GitHub repository.
<a href="https://glama.ai/mcp/servers/@stanislavlysenko0912/todoist-mcp-server">
<img width="380" height="200" src="https://glama.ai/mcp/servers/@stanislavlysenko0912/todoist-mcp-server/badge" />
</a>
TDQS
Scored across 35 tools
Most tools have distinct purposes targeting specific resources (tasks, projects, labels, comments, sections) with clear CRUD operations, but there is some ambiguity between get_* and get_*_list pairs (e.g., get_comments vs get_comments_list) where the distinction might not be immediately clear without deeper inspection of parameters.
Tool names follow a highly consistent verb_noun pattern throughout (e.g., create_tasks, delete_projects, update_labels), with all tools using snake_case and predictable verbs (create, get, update, delete, close, reopen, move, remove, rename). The only minor deviation is utils_get_colors, but it still fits the overall pattern.
With 35 tools, the count is high for a Todoist integration, which typically involves core entities like tasks, projects, and labels. This feels borderline heavy as it includes many list vs. single-item get operations and specialized tools like move_projects or utils_get_colors, which might be overkill for basic agent workflows.
The tool set provides comprehensive CRUD and lifecycle coverage for all major Todoist entities (tasks, projects, labels, comments, sections), including advanced operations like moving tasks/projects, reopening tasks, and managing shared labels. There are no obvious gaps for typical agent interactions with the Todoist API.