mikemc/todoist-mcp-server
A Todoist MCP server written in Python, using the Todoist Python API.
Todoist MCP Server (Python)
A Todoist MCP server written in Python, using the Todoist Python API. I first created the server by using Claude to translate this TypeScript Todoist MCP server to Python. I'm gradually changing and adding functionality to suit my workflow as I experiment with using Claude to help with task management.
Installation
Prerequisites
- Python 3.10+
- UV package manager (installation guide)
- Todoist API token
Getting a Todoist API Token
- Log in to your Todoist account
- Go to Settings ā Integrations
- Find your API token under "Developer"
Configuration with Claude Desktop
Add the MCP server to your claude_desktop_config.json,
{
"mcpServers": {
"todoist": {
"command": "uvx",
"args": [
"--from",
"git+https://github.com/mikemc/todoist-mcp-server",
"todoist-mcp"
],
"env": {
"TODOIST_API_TOKEN": "your_todoist_api_token"
}
}
}
}
Or, to run from a local copy,
{
"mcpServers": {
"todoist": {
"command": "uvx",
"args": [
"--from",
"/absolute/path/to/todoist-mcp-server",
"todoist-mcp"
],
"env": {
"TODOIST_API_TOKEN": "your_todoist_api_token"
}
}
}
}
Configuration with Goose (and a local LLM)
You can use Goose and a local LLM provider: LM Studio or Ollama.
Configure the LLM you want Goose to use:
$ goose configure
This command will ask you whether you want to use a local model or a cloud hosted model. Ensure your model provider is running your model first. Specify the address of the model API, and the model name. Many locally deployed LLMs use a format compatible with Ollama, so for both LM Studio or Ollama LLMs, select Ollama.
ā Which model provider should we use?
ā Ollama
ā
ā Provider Ollama requires OLLAMA_HOST, please enter a value
ā localhost:1234
ā
ā Model fetch complete
ā
ā Enter a model from that provider:
ā phi-4
Then run the same command again to configure the Todoist MCP:
$ goose configure
This time it will ask about extensions:
ā What would you like to configure?
ā Add Extension
ā
ā What type of extension would you like to add?
ā Command-line Extension
ā
ā What would you like to call this extension?
ā todoist
ā
ā What command should be run?
ā uvx git+https://github.com/mikemc/todoist-mcp-server
ā
ā Please set the timeout for this tool (in secs):
ā 60
ā
ā Would you like to add a description?
ā No
ā
ā Would you like to add environment variables?
ā Yes
ā
ā Environment variable name:
ā TODOIST_API_TOKEN
ā
ā Environment variable value:
ā āŖāŖāŖāŖāŖāŖāŖāŖāŖāŖāŖāŖāŖāŖāŖāŖāŖāŖāŖāŖāŖāŖāŖāŖāŖāŖāŖāŖāŖāŖāŖāŖāŖāŖāŖāŖāŖāŖāŖāŖ
ā
ā Add another environment variable?
ā No
ā
ā Added todoist extension
Now you can run goose and ask it questions about your todo list, or make changes.
$ goose
starting session | provider: ollama model: phi-4
logging to ******
working directory: ******
Goose is running! Enter your instructions, or try asking what goose can do.
( O)> how many todo list tasks have I completed in the last 7 days
āāā todoist_get_tasks | todoist āāāāāāāāāāāāāāāāāāāāāāāāāā
filter: last 7 days completed
...
*Ideally* You have been very busy this week. You have completed 15 tasks! Listed below are the tasks.
...
Available Tools
To see currently available tools, run
# With GNU grep installed as ggrep (as with `brew install grep` on Mac)
ggrep -Po '(?<=^mcp.tool\(\)\()([^)]+)' src/main.py
As of 2025-05-26,
- Projects
todoist_get_projectstodoist_get_projecttodoist_add_projecttodoist_update_projecttodoist_delete_project
- Sections
todoist_get_sectionstodoist_get_sectiontodoist_add_sectiontodoist_update_sectiontodoist_delete_section
- Tasks
todoist_get_tasktodoist_get_taskstodoist_filter_taskstodoist_add_tasktodoist_update_tasktodoist_complete_tasktodoist_uncomplete_tasktodoist_move_tasktodoist_delete_task
- Comments
todoist_get_commenttodoist_get_commentstodoist_add_commenttodoist_update_commenttodoist_delete_comment
License
This project is licensed under the MIT License. See the file for details.