loading…
Search for a command to run...
loading…
A Python MCP server that enables AI assistants to manage Todoist tasks and projects through the Model Context Protocol. It supports full CRUD operations for tas
A Python MCP server that enables AI assistants to manage Todoist tasks and projects through the Model Context Protocol. It supports full CRUD operations for tasks and projects, including support for nested projects and Todoist's advanced filter syntax.
A Python MCP (Model Context Protocol) server for Todoist integration, enabling AI assistants to manage tasks and projects via the Model Context Protocol.
uv tool install git+https://github.com/chris-jelly/py-todoist-mcp.git
This installs todoist-mcp into an isolated environment and makes it available globally on your PATH.
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:
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.
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"]
}
}
}
Add the following to your Codex configuration file (location varies by installation):
{
"mcpServers": {
"todoist": {
"command": "todoist-mcp"
}
}
}
Once configured, you can use natural language to interact with Todoist:
"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"
"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"
"Show me overdue tasks"
"List tasks in project work"
"Get tasks labeled urgent"
| Tool | Description |
|---|---|
todoist_get_tasks |
List tasks with optional filters (project_id, filter_string) |
todoist_get_task |
Get a single task by ID with full details |
todoist_add_task |
Create a new task with content, description, due_date, priority, project_id, labels |
todoist_update_task |
Update task attributes by ID |
todoist_complete_task |
Mark a task as complete by ID |
todoist_delete_task |
Delete a task by ID |
| Tool | Description |
|---|---|
todoist_get_projects |
List all projects |
todoist_get_project |
Get a single project by ID with full details |
todoist_add_project |
Create a new project with name, color, parent_id |
todoist_update_project |
Update project attributes by ID |
todoist_delete_project |
Delete a project by ID |
git clone [email protected]:chris-jelly/py-todoist-mcp.git
cd py-todoist-mcp
uv sync
uv run todoist-mcp
This project uses Ruff for linting and formatting:
# Format code
ruff format .
# Check for linting errors
ruff check .
# Fix auto-fixable issues
ruff check . --fix
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.md
MIT License - see LICENSE file for details.
Contributions are welcome! Please ensure:
ruff lint and ruff format checksTODOIST_API_TOKEN is set correctlypython --versionuv --versionFor Opencode:
~/.config/opencode/logs/opencode --version to ensure it's installed correctlyFor Codex:
Добавь это в claude_desktop_config.json и перезапусти Claude Desktop.
{
"mcpServers": {
"py-todoist-mcp": {
"command": "npx",
"args": []
}
}
}