Todoist MCP
OFFICIAL SERVERDoist's own MCP server for reading and managing tasks, projects and labels in a Todoist account
Read and edit tasks and projects in the Mindwtr GTD app from an MCP client
Official · Dongda Li JavaScript Local · stdio Productivity
54 popularity score ★ 2.4k ↓ 723/wk
Opens the app, which asks before it adds the server. Then replace each <NAME> in its settings with your value.
claude mcp add mindwtr -- npx -y mindwtr-mcp --db '<ABSOLUTE_PATH_TO_MINDWTR_DB>'{
"mcpServers": {
"mindwtr": {
"command": "npx",
"args": [
"-y",
"mindwtr-mcp",
"--db",
"<ABSOLUTE_PATH_TO_MINDWTR_DB>"
]
}
}
}{
"mcpServers": {
"mindwtr": {
"command": "npx",
"args": [
"-y",
"mindwtr-mcp",
"--db",
"<ABSOLUTE_PATH_TO_MINDWTR_DB>"
]
}
}
}{
"servers": {
"mindwtr": {
"type": "stdio",
"command": "npx",
"args": [
"-y",
"mindwtr-mcp",
"--db",
"<ABSOLUTE_PATH_TO_MINDWTR_DB>"
]
}
}
}[mcp_servers.mindwtr]
command = "npx"
args = ["-y", "mindwtr-mcp", "--db", "<ABSOLUTE_PATH_TO_MINDWTR_DB>"]gemini mcp add --scope user mindwtr npx -- -y mindwtr-mcp --db '<ABSOLUTE_PATH_TO_MINDWTR_DB>'MINDWTR_DB_PATH |
Optional: Path to mindwtr.db, the same as --db; without it the app's default location is used (MINDWTR_DB also works). |
|---|---|
MINDWTR_MCP_API_URL |
Optional: Desktop Local API address such as http://127.0.0.1:3456; selects Local API mode. |
MINDWTR_MCP_API_TOKEN |
Optional: Bearer token from the desktop app's Local API settings; setting it selects Local API mode. |
MINDWTR_MCP_CLOUD_URL |
Optional: URL of your self-hosted Mindwtr Cloud server; selects Cloud mode. |
MINDWTR_MCP_CLOUD_TOKEN |
Optional: Bearer token for your Mindwtr Cloud server. |
MINDWTR_MCP_CLOUD_ALLOW_INSECURE_HTTP |
Optional: Set to true to allow a plain-HTTP Cloud URL on a trusted private network. |
MINDWTR_MCP_HTTP_TOKEN |
Optional: Bearer token (16+ characters) for HTTP mode; turns on HTTP mode instead of stdio. |
MINDWTR_MCP_HTTP_HOST |
Optional: Address HTTP mode listens on, 127.0.0.1 by default. |
MINDWTR_MCP_HTTP_PORT |
Optional: Port for HTTP mode, 8722 by default. |
Mindwtr is an open-source GTD (Getting Things Done) task manager, and mindwtr-mcp is its MCP helper, published from the same repository by the app's developer. It gives an assistant access to your inbox, next actions, projects, sections, areas and the people you assign tasks to. It can get its data from one of three places: the app's SQLite file (mindwtr.db) opened directly, the desktop app's Local API on 127.0.0.1, or a Mindwtr Cloud server you host yourself. It runs read-only unless started with --write. With --write it can add tasks (including quick-add text such as "Buy milk @errands /due:tomorrow"), update, complete, soft-delete and restore tasks, and manage projects, sections, areas and people.
It talks over stdio by default. With --http it serves a Streamable HTTP endpoint on 127.0.0.1:8722 that needs a bearer token, so you can put it behind your own reverse proxy for remote clients. The desktop app also has its own built-in MCP server, separate from this package (Settings → Integrations → Local MCP server), with its own permission switches and an extra mindwtr_archive_task tool.
In the code (src/index.ts at package version 1.1.12) the backend is picked from what is set: if MINDWTR_MCP_API_TOKEN or --api-url is present, the server switches to Local API mode and refuses to start when --db or a Cloud setting is also given. Without --db it looks for the database in the app's default location for your operating system. In Local API mode the section, people and area-write tools are not registered, and quickAdd is removed from mindwtr_add_task.
| Runtime | Node.js 20+ |
|---|
Node.js 20 or newer. Node 22+ is advised so the optional better-sqlite3 addon installs from a prebuilt binary; on Node 20 it needs C++ build tools. On npm 12, SQLite mode needs --allow-scripts=better-sqlite3 placed before mindwtr-mcp, or startup fails with a missing native binding. You also need a Mindwtr desktop database (mindwtr.db), or the desktop app running with Local API on and its token, or your own Mindwtr Cloud server URL and token. Mindwtr's mobile apps cannot host it.
mindwtr_list_tasks returns 200 tasks by default and at most 500; use offset to page through more. Task titles are capped at 500 characters and quick-add text at 2000. In Cloud mode the person write tools and mindwtr_restore_task return an error. Local API mode has no quickAdd, sections, people, area writes, GTD availability view or link-attachment replacement, and some recurring completions have to be done in the app. HTTP mode has no TLS of its own and no rate limit on authenticated requests. A search in mindwtr_list_tasks always leaves out deleted tasks, even when includeDeleted is set. The docs' Claude Desktop example uses a ~ path, which JSON config does not expand; give the full path.
Suits people who already keep their tasks in Mindwtr and want an assistant to review, triage or capture them, especially on desktop where the database or Local API is on the same machine. Leave it read-only for summaries and reviews, and add --write only when you want the assistant to change your task list. If you use the desktop app and your client supports authenticated Streamable HTTP, the app's built-in MCP server needs no Node install and has separate edit, archive and delete permissions. It is no use without Mindwtr data: it does not work with other task apps.
mindwtr_list_tasksmindwtr_get_taskmindwtr_list_projectsmindwtr_get_projectmindwtr_list_sectionsmindwtr_get_sectionmindwtr_list_areasmindwtr_list_peoplemindwtr_get_personmindwtr_add_taskmindwtr_update_taskmindwtr_complete_taskmindwtr_delete_taskmindwtr_restore_taskmindwtr_add_projectmindwtr_update_projectmindwtr_delete_projectmindwtr_add_sectionmindwtr_update_sectionmindwtr_delete_sectionmindwtr_add_areamindwtr_update_areamindwtr_delete_areamindwtr_add_personmindwtr_update_personmindwtr_rename_personmindwtr_delete_person