This server enables AI assistants to manage Todoist tasks and projects through the Model Context Protocol (MCP).
Task Management:
List tasks — Retrieve all tasks, optionally filtered by project ID or a Todoist filter string (e.g., "today", "overdue", "#work")
Get a task — Fetch full details of a single task by its ID
Create a task — Add a new task with content, description, due date, priority (1–4), project assignment, and labels
Update a task — Modify an existing task's content, description, due date, priority, or labels
Complete a task — Mark a task as done by its ID
Delete a task — Permanently remove a task by its ID
Project Management:
List projects — Retrieve all Todoist projects
Get a project — Fetch full details of a single project by its ID
Create a project — Add a new project with a name, optional color, and optional parent project (for nesting)
Update a project — Modify a project's name, color, or favorite status
Delete a project — Permanently remove a project by its ID
Allows AI assistants to manage Todoist tasks and projects, including capabilities to create, read, update, complete, and delete tasks, manage nested projects, and query data using Todoist's filter syntax.
Click on "Install 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., "@py-todoist-mcpCreate a new task 'Call the dentist' for tomorrow at 3pm"
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.
py-todoist-mcp
A Python MCP (Model Context Protocol) server for Todoist integration, enabling AI assistants to manage tasks and projects via the Model Context Protocol.
Features
Task Management: Create, read, update, complete, and delete tasks
Project Management: Manage Todoist projects with support for nested projects
Filter Support: Query tasks using Todoist's powerful filter syntax
Error Handling: Robust error handling with user-friendly messages
Structured Logging: Comprehensive logging for debugging and monitoring
Prerequisites
Python 3.13 or higher
uv for Python package management
A Todoist API token
Installation
1. Install with uv
uv tool install git+https://github.com/chris-jelly/py-todoist-mcp.gitThis installs todoist-mcp into an isolated environment and makes it available globally on your PATH.
2. Set up your API token
The server reads TODOIST_API_TOKEN from the environment. Add it to your shell profile (~/.bashrc, ~/.zshrc, etc.):
# Add to your shell profile
export TODOIST_API_TOKEN="your-api-token-here"To obtain your Todoist API token:
Log in to Todoist
Go to Settings → Integrations → Developer
Copy your API token
Note: Avoid placing your API token directly in MCP configuration files. These files are easy to accidentally commit or share. The server will pick up the token from your environment automatically.
Configuration
OpenCode
Add the following to ~/.config/opencode/opencode.json. This uses uvx to run the server directly from the git repo — no local install required:
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"todoist": {
"type": "local",
"command": ["uvx", "--from", "git+https://github.com/chris-jelly/py-todoist-mcp.git", "todoist-mcp"],
"environment": {
"TODOIST_API_TOKEN": "{env:TODOIST_API_TOKEN}"
}
}
}
}If you've already installed the package locally (via uv tool install), you can use the simpler form:
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"todoist": {
"type": "local",
"command": ["todoist-mcp"]
}
}
}Codex
Add the following to your Codex configuration file (location varies by installation):
{
"mcpServers": {
"todoist": {
"command": "todoist-mcp"
}
}
}Usage
Once configured, you can use natural language to interact with Todoist:
Task Examples
"Show me all my tasks"
"List my tasks for today"
"Create a task 'Buy groceries' due tomorrow with priority 1"
"Get details for task ID 123456"
"Update task 123456 to be due next Monday"
"Mark task 123456 as complete"
"Delete task 123456"Project Examples
"List all my projects"
"Create a new project called 'Work'"
"Get details for project ID 987654"
"Update project 987654 color to blue"
"Delete project 987654"Filter Examples
"Show me overdue tasks"
"List tasks in project work"
"Get tasks labeled urgent"Available Tools
Task Tools
Tool | Description |
| List tasks with optional filters (project_id, filter_string) |
| Get a single task by ID with full details |
| Create a new task with content, description, due_date, priority, project_id, labels |
| Update task attributes by ID |
| Mark a task as complete by ID |
| Delete a task by ID |
Project Tools
Tool | Description |
| List all projects |
| Get a single project by ID with full details |
| Create a new project with name, color, parent_id |
| Update project attributes by ID |
| Delete a project by ID |
Development
Setup
git clone git@github.com:chris-jelly/py-todoist-mcp.git
cd py-todoist-mcp
uv syncRunning the server locally
uv run todoist-mcpCode Quality
This project uses Ruff for linting and formatting:
# Format code
ruff format .
# Check for linting errors
ruff check .
# Fix auto-fixable issues
ruff check . --fixProject Structure
py-todoist-mcp/
├── src/todoist_mcp/
│ ├── __init__.py
│ ├── main.py # Entry point
│ ├── server.py # FastMCP server setup
│ ├── client.py # Todoist API client
│ ├── utils.py # Logging and error handling
│ └── tools/
│ ├── __init__.py
│ ├── tasks.py # Task management tools
│ └── projects.py # Project management tools
├── pyproject.toml
└── README.mdLicense
MIT License - see LICENSE file for details.
Contributing
Contributions are welcome! Please ensure:
All code passes
ruff lintandruff formatchecksFollow the existing code patterns and conventions
Add tests for new functionality
Update documentation as needed
Troubleshooting
Server won't start
Verify
TODOIST_API_TOKENis set correctlyCheck that Python 3.13+ is installed:
python --versionEnsure uv is installed:
uv --version
Authentication errors
Verify your API token is correct and hasn't expired
Check that your Todoist account is active
Ensure the token has appropriate permissions
AI Assistant not connecting
For Opencode:
Verify the configuration JSON syntax
Check the Opencode logs:
~/.config/opencode/logs/Run
opencode --versionto ensure it's installed correctlyRestart Opencode after configuration changes
For Codex:
Verify the configuration JSON syntax
Check Codex output for error messages
Restart Codex after configuration changes