
MCP-Todoist Integration
MCP server for Todoist integration for Natural language task management
What is MCP-Todoist Integration?
MCP-Todoist Integration is a server that allows language models to interact with Todoist tasks and projects using the Model Context Protocol (MCP).
How to use MCP-Todoist Integration?
To use this integration, clone the repository, install the dependencies, and set up your Todoist API token in a .env
file. You can then run the server using MCP dev tools or install it in Claude Desktop.
Key features of MCP-Todoist Integration?
- Create, read, update, and complete Todoist tasks
- Access Todoist projects, sections, and labels
- Filter tasks by various criteria
- Well-documented tools and resources for use with language models
Use cases of MCP-Todoist Integration?
- Automating task management in Todoist through natural language commands.
- Integrating Todoist with other applications for enhanced productivity.
- Developing custom tools that leverage Todoist's task management capabilities.
FAQ from MCP-Todoist Integration?
- What are the requirements to use this integration?
You need Python 3.10 or higher, a Todoist account with an API token, and an MCP-compatible client.
- Is there a way to test the server before deploying it?
Yes! You can use the MCP dev tools to test the server interactively.
- Can I contribute to the project?
Absolutely! You can fork the repository, make changes, and submit a pull request.
MCP-Todoist Integration
This project provides a Model Context Protocol (MCP) server that integrates with Todoist, allowing language models to interact with Todoist tasks and projects.
Features
- Complete Todoist API integration
- Create, read, update, and delete tasks, projects, sections, labels, and comments
- Access project collaborators
- Filter tasks by various criteria
- Well-documented tools and resources for use with language models
Requirements
- Python 3.10 or higher
- Todoist account with API token
- MCP-compatible client (like Claude Desktop)
Usage with Claude Desktop
To use this MCP server with Claude Desktop, you have two options:
Option 1: Using uvx (Recommended)
-
Install the package using uvx:
uvx install mcp-todoist
-
Add the server to Claude Desktop's MCP configuration:
- Open Claude Desktop
- Go to Settings > Advanced
- Under "MCP Servers Configuration", add to the JSON configuration:
"mcpServers": { "todoist": { "command": "uvx", "args": ["mcp-todoist"], "env": { "TODOIST_API_TOKEN": "your_todoist_api_token_here" } } }
Option 2: Using cloned repository
-
Clone and install the package in development mode:
git clone https://github.com/your-username/mcp-todoist.git cd mcp-todoist pip install -e .
-
Add the server to Claude Desktop's MCP configuration:
- Open Claude Desktop
- Go to Settings > Advanced
- Under "MCP Servers Configuration", add to the JSON configuration:
"mcpServers": { "todoist": { "command": "python", "args": ["/full/path/to/mcp-todoist/main.py"], "env": { "TODOIST_API_TOKEN": "your_todoist_api_token_here" } } }
Option 3: Using uv
uv is a fast Python package installer and resolver. To use it with this project:
-
First make sure you have uv installed:
# Install uv (if you haven't already) brew install uv # On macOS with Homebrew pipx install uv # Or use pipx
-
Clone the repository:
git clone https://github.com/your-username/mcp-todoist.git cd mcp-todoist
-
Create and maintain the lock file:
# Create/update the lock file (do this when dependencies change) uv pip sync requirements.txt
-
Run the MCP server using uv:
uv run mcp dev main.py
-
Configure Claude Desktop:
"mcpServers": { "todoist": { "command": "uv", "args": ["run", "mcp", "dev", "/full/path/to/mcp-todoist/main.py"], "env": { "TODOIST_API_TOKEN": "your_todoist_api_token_here" } } }
-
Save the configuration and restart Claude Desktop
-
You can now access the Todoist MCP server in your Claude conversations by asking Claude to use Todoist
Getting a Todoist API Token
To obtain your Todoist API token:
- Log in to your Todoist account
- Go to Settings > Integrations
- Copy your API token from the "API token" section
Installation
If you want to install the package from source:
-
Clone this repository:
git clone https://github.com/your-username/mcp-todoist.git cd mcp-todoist
-
Install dependencies:
pip install -r requirements.txt
-
Create a
.env
file with your Todoist API token:cp .env.example .env # Edit .env file to add your Todoist API token
Running with MCP Dev Tools
For testing and development, use the MCP dev tools:
mcp run main.py
This will start the MCP server, allowing you to test it interactively.
To run with the MCP Inspector for visual interaction:
mcp dev main.py
Available Tools
The following Todoist tools are available:
Task Management
create_task
- Create a new task with title, due date, project, etc.get_tasks
- Get tasks based on filtersget_task
- Get a specific task by IDupdate_task
- Update an existing taskcomplete_task
- Mark a task as completeuncomplete_task
- Mark a completed task as incompletedelete_task
- Delete a task
Project Management
get_projects
- Get all projectsget_project
- Get a specific project by IDadd_project
- Create a new projectupdate_project
- Update an existing projectdelete_project
- Delete a projectarchive_project
- Archive a projectunarchive_project
- Unarchive a project
Section Management
get_sections
- Get all sections in a projectget_section
- Get a specific section by IDadd_section
- Create a new sectionupdate_section
- Update an existing sectiondelete_section
- Delete a section
Label Management
get_labels
- Get all labelsget_label
- Get a specific label by IDadd_label
- Create a new labelupdate_label
- Update an existing labeldelete_label
- Delete a label
Comment Management
get_comments
- Get comments for a task or projectget_comment
- Get a specific comment by IDadd_comment
- Add a comment to a task or projectupdate_comment
- Update an existing commentdelete_comment
- Delete a comment
Collaboration
get_collaborators
- Get collaborators for a project
Available Resources
The following Todoist resources are available:
todoist://tasks
- All taskstodoist://tasks/project/{project_id}
- Tasks in a specific projecttodoist://tasks/section/{section_id}
- Tasks in a specific sectiontodoist://tasks/label/{label}
- Tasks with a specific labeltodoist://projects
- All projectstodoist://sections/{project_id}
- Sections in a specific projecttodoist://labels
- All labels
Examples
Creating a Task
Please create a new task in Todoist called "Buy groceries" due tomorrow.
Getting Tasks from a Project
Show me all tasks in my "Work" project.
Completing a Task
Mark the "Buy groceries" task as complete.
Adding a Comment to a Task
Add a comment to the task with ID "12345678" saying "Don't forget milk and eggs".
Creating a New Project with Sections
Create a new project called "Home Renovation" and add sections for "Kitchen", "Bathroom", and "Living Room".
Development
To contribute to the project or modify it for your needs:
- Fork the repository
- Make your changes
- Test with
mcp run main.py
ormcp dev main.py
- Submit a pull request
Using uv for Development
This project supports using uv
for faster dependency management and running:
-
Create/update the lock file when dependencies change:
uv pip sync requirements.txt
-
Run the application with uv:
uv run mcp dev main.py
-
If you're experiencing lock file issues, you can troubleshoot by:
# Remove the lock file and regenerate it rm uv.lock uv pip sync requirements.txt # Or run without using the lock file (temporary solution) UV_LOCK=0 uv run mcp dev main.py
Git Hooks
This project uses pre-commit hooks to ensure code quality and consistency:
-
Install the development dependencies:
pip install -e ".[dev]"
-
Install the git hooks:
pre-commit install
-
Now, each time you commit, the hooks will run:
- Black for code formatting
- isort for import sorting
- flake8 for linting
- Various file checks (trailing whitespace, YAML validation, etc.)
If any hook fails, the commit will be aborted. Fix the issues and try again.
You can also run the hooks manually on all files:
pre-commit run --all-files
Publishing to PyPI
This project uses setuptools_scm
for automatic versioning based on git tags:
-
Ensure all tests pass locally:
pip install -e ".[dev]" flake8 . --exclude=.venv,venv,env black --check . isort --check-only --profile black . pytest
-
Create a new release with semantic versioning (no "v" prefix):
# For a new version (e.g., 0.1.0) git tag 0.1.0 git push origin 0.1.0
-
The GitHub Actions workflow will automatically:
- Run tests
- Generate a changelog from PRs and commits
- Create a GitHub release with the changelog
- Build and publish the package to PyPI
-
Publishing manually (if needed):
pip install build twine python -m build twine check dist/* twine upload --repository-url https://test.pypi.org/legacy/ dist/* # Test first twine upload dist/* # Then to production PyPI
-
Alternative: Trigger manual workflow:
- Go to the GitHub repository → Actions → "Build and Publish" workflow
- Click "Run workflow"
- Choose "test" for Test PyPI or "prod" for production PyPI
License
This project is licensed under the MIT License. See the LICENSE file for details.