Kaneo MCP Server
OFFICIAL SERVERRead and change tasks, projects, labels, comments and time entries in a Kaneo workspace
Doist's own MCP server for reading and managing tasks, projects and labels in a Todoist account
Official · Todoist Inc TypeScript Local · stdio Productivity
77 popularity score ★ 562 ↓ 7.4k/wk
Opens the app, which asks before it adds the server. Then replace each <NAME> in its settings with your value.
It needs TODOIST_API_KEY. Replace each <NAME> with your value.
claude mcp add todoist -e TODOIST_API_KEY=<TODOIST_API_KEY> -- npx -y @doist/todoist-mcp{
"mcpServers": {
"todoist": {
"command": "npx",
"args": [
"-y",
"@doist/todoist-mcp"
],
"env": {
"TODOIST_API_KEY": "<TODOIST_API_KEY>"
}
}
}
}{
"mcpServers": {
"todoist": {
"command": "npx",
"args": [
"-y",
"@doist/todoist-mcp"
],
"env": {
"TODOIST_API_KEY": "<TODOIST_API_KEY>"
}
}
}
}{
"servers": {
"todoist": {
"type": "stdio",
"command": "npx",
"args": [
"-y",
"@doist/todoist-mcp"
],
"env": {
"TODOIST_API_KEY": "<TODOIST_API_KEY>"
}
}
}
}[mcp_servers.todoist]
command = "npx"
args = ["-y", "@doist/todoist-mcp"]
[mcp_servers.todoist.env]
TODOIST_API_KEY = "<TODOIST_API_KEY>"gemini mcp add --scope user -e TODOIST_API_KEY=<TODOIST_API_KEY> todoist npx -- -y @doist/todoist-mcpOpens the app, which asks before it adds the server. Then replace each <NAME> in its settings with your value.
It needs TODOIST_API_KEY. Replace each <NAME> with your value.
git clone https://github.com/Doist/todoist-mcp
cd todoist-mcp
npm install && npm run buildclaude mcp add todoist -e TODOIST_API_KEY=<TODOIST_API_KEY> -- node '<ABSOLUTE_PATH_TO_CLONE>/dist/main.js'{
"mcpServers": {
"todoist": {
"command": "node",
"args": [
"<ABSOLUTE_PATH_TO_CLONE>/dist/main.js"
],
"env": {
"TODOIST_API_KEY": "<TODOIST_API_KEY>"
}
}
}
}{
"mcpServers": {
"todoist": {
"command": "node",
"args": [
"<ABSOLUTE_PATH_TO_CLONE>/dist/main.js"
],
"env": {
"TODOIST_API_KEY": "<TODOIST_API_KEY>"
}
}
}
}{
"servers": {
"todoist": {
"type": "stdio",
"command": "node",
"args": [
"<ABSOLUTE_PATH_TO_CLONE>/dist/main.js"
],
"env": {
"TODOIST_API_KEY": "<TODOIST_API_KEY>"
}
}
}
}[mcp_servers.todoist]
command = "node"
args = ["<ABSOLUTE_PATH_TO_CLONE>/dist/main.js"]
[mcp_servers.todoist.env]
TODOIST_API_KEY = "<TODOIST_API_KEY>"gemini mcp add --scope user -e TODOIST_API_KEY=<TODOIST_API_KEY> todoist node -- '<ABSOLUTE_PATH_TO_CLONE>/dist/main.js'TODOIST_API_KEY secret |
Required: Your Todoist API token; every tool call runs as this user. |
|---|---|
TODOIST_BASE_URL |
Optional: Custom Todoist API base URL. |
| Set together: http | |
PORT |
Optional: Port the HTTP program listens on. |
HOST |
Optional: Bind address for the HTTP program; a non-loopback host also needs ALLOWED_HOSTS. |
ALLOWED_HOSTS |
Optional: Comma-separated extra hostnames accepted in Host/Origin headers. |
Todoist MCP is Doist's own server for a Todoist account, talking to the Todoist API. You get tasks (add, update, complete, reopen, reschedule, search by text or date, list completed ones), projects, sections, comments, labels, saved filters and reminders. On top of that come task assignment in shared projects, activity history, productivity stats, project health summaries, workspace listings and project templates for export and import. Many tools accept a batch of items in one call.
Two programs ship in the npm package. todoist-mcp speaks stdio and is what npx starts. todoist-mcp-http serves streamable HTTP, on 127.0.0.1:3000 unless told otherwise. Doist runs the same code as a hosted endpoint at https://ai.todoist.net/mcp with OAuth sign-in, and we list that endpoint as its own entry. Each tool is exported as a plain function too, for use in agent frameworks without MCP.
Count the entries in src/tool-registry.ts and you get 49 tools, a list missing from the README, which just points at the src/tools folder. Newest are get-user-status and set-user-status, for the status line beside your name in Todoist and Comms. Careful with the setter: it replaces the whole status, so any emoji or end time you leave out is dropped. It can pause Comms notifications, or Karma and streaks, while the status lasts.
search and fetch follow OpenAI's MCP format. There is a productivity-analysis prompt, plus an MCP Apps widget that draws find-tasks-by-date results as a task list in clients that support it. Every request to Todoist carries headers with the package version, a session id and the tool name (src/usage-tracking.ts). No setting in the stdio program turns this off.
| Runtime | Node.js 24+ |
|---|---|
| Runs on | macOS, Windows, Linux |
| Todoist | Free tierPersonal API token from Todoist settings, set as TODOIST_API_KEY |
Node.js 24 or newer with npm 11 (package.json engines) for npx. A Todoist account and its personal API token, set as TODOIST_API_KEY. Running from source also needs git and npm to clone and build the repository.
The stdio program exits at start with an error if TODOIST_API_KEY is not set, and it acts as that one Todoist user; there is no OAuth flow in the local package (OAuth is only on the hosted endpoint). Its makers call the project early-stage and say tools will change. The docs suggest the local HTTP mode as a fallback for frequent session disconnections on the hosted service. The HTTP program rejects requests whose Host or Origin header is not on its allowlist; binding to another interface needs HOST and ALLOWED_HOSTS set together.
Suits Todoist users who want an assistant to plan, file and tidy their tasks, and who prefer the vendor's own server, kept in step with the Todoist API, over a community one. Pick the local package when you want the token under your own control or the hosted endpoint drops sessions; pick Doist's hosted endpoint when you would rather sign in with OAuth than handle an API token. With delete, complete and bulk-update tools it can change a lot at once, so its makers suggest a test account or temporary project when trying write operations.
25 only read, 22 change things, 2 can delete or overwrite. A ? marks an optional parameter.
add-tasks changescomplete-tasks changesuncomplete-tasks changesupdate-tasks changesreschedule-tasks changesfind-tasksfind-tasks-by-datefind-completed-tasksadd-projects changesupdate-projects changesfind-projectsproject-management changesproject-move changesadd-sections changesupdate-sections changesfind-sectionsadd-comments changesfind-commentsupdate-comments changesadd-reminders changesfind-remindersupdate-reminders changesview-attachmentadd-labels changesupdate-labels changesfind-labelsfind-filtersadd-filters changesupdate-filters changesfind-activityget-productivity-statsget-project-healthget-project-activity-statsanalyze-project-healthget-workspace-insightsget-overviewdelete-object deletesfetch-objectreorder-objects changesuser-infoget-user-statusset-user-status deletesmessage?: stringemoji?: stringactiveUntil?: stringpauseNotifications?: booleanpauseActivity?: booleanclear?: booleanfind-project-collaboratorsmanage-assignments changesexport-project-templateimport-project-template changeslist-workspacessearchfetchproductivity-analysis