This project provides a Model Context Protocol (MCP) server that integrates with Todoist, allowing language models to interact with Todoist tasks and projects.
To use this MCP server with Claude Desktop, you have two options:
Install the package using uvx:
uvx install mcp-todoist
Add the server to Claude Desktop's MCP configuration:
"mcpServers": {
"todoist": {
"command": "uvx",
"args": ["mcp-todoist"],
"env": {
"TODOIST_API_TOKEN": "your_todoist_api_token_here"
}
}
}
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:
"mcpServers": {
"todoist": {
"command": "python",
"args": ["/full/path/to/mcp-todoist/main.py"],
"env": {
"TODOIST_API_TOKEN": "your_todoist_api_token_here"
}
}
}
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
To obtain your Todoist API token:
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
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
The following Todoist tools are available:
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 taskget_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 projectget_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 sectionget_labels
- Get all labelsget_label
- Get a specific label by IDadd_label
- Create a new labelupdate_label
- Update an existing labeldelete_label
- Delete a labelget_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 commentget_collaborators
- Get collaborators for a projectThe 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 labelsPlease create a new task in Todoist called "Buy groceries" due tomorrow.
Show me all tasks in my "Work" project.
Mark the "Buy groceries" task as complete.
Add a comment to the task with ID "12345678" saying "Don't forget milk and eggs".
Create a new project called "Home Renovation" and add sections for "Kitchen", "Bathroom", and "Living Room".
To contribute to the project or modify it for your needs:
mcp run main.py
or mcp dev main.py
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
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:
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
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:
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:
This project is licensed under the MIT License. See the LICENSE file for details.
Seamless access to top MCP servers powering the future of AI integration.