Todoist MCP

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

Connect your client

Local (npm)

Add in one click

Opens the app, which asks before it adds the server. Then replace each <NAME> in its settings with your value.

Or add it by command or config

It needs TODOIST_API_KEY. Replace each <NAME> with your value.

Claude CodeTerminal
claude mcp add todoist -e TODOIST_API_KEY=<TODOIST_API_KEY> -- npx -y @doist/todoist-mcp
Claude Desktopclaude_desktop_config.json
{
  "mcpServers": {
    "todoist": {
      "command": "npx",
      "args": [
        "-y",
        "@doist/todoist-mcp"
      ],
      "env": {
        "TODOIST_API_KEY": "<TODOIST_API_KEY>"
      }
    }
  }
}
Cursor~/.cursor/mcp.json
{
  "mcpServers": {
    "todoist": {
      "command": "npx",
      "args": [
        "-y",
        "@doist/todoist-mcp"
      ],
      "env": {
        "TODOIST_API_KEY": "<TODOIST_API_KEY>"
      }
    }
  }
}
VS Code.vscode/mcp.json
{
  "servers": {
    "todoist": {
      "type": "stdio",
      "command": "npx",
      "args": [
        "-y",
        "@doist/todoist-mcp"
      ],
      "env": {
        "TODOIST_API_KEY": "<TODOIST_API_KEY>"
      }
    }
  }
}
Codex~/.codex/config.toml
[mcp_servers.todoist]
command = "npx"
args = ["-y", "@doist/todoist-mcp"]

[mcp_servers.todoist.env]
TODOIST_API_KEY = "<TODOIST_API_KEY>"
Gemini CLITerminal
gemini mcp add --scope user -e TODOIST_API_KEY=<TODOIST_API_KEY> todoist npx -- -y @doist/todoist-mcp
Local (from source)

Add in one click

Opens the app, which asks before it adds the server. Then replace each <NAME> in its settings with your value.

Or add it by command or config

It needs TODOIST_API_KEY. Replace each <NAME> with your value.

FirstTerminal
git clone https://github.com/Doist/todoist-mcp
cd todoist-mcp
npm install && npm run build
Claude CodeTerminal
claude mcp add todoist -e TODOIST_API_KEY=<TODOIST_API_KEY> -- node '<ABSOLUTE_PATH_TO_CLONE>/dist/main.js'
Claude Desktopclaude_desktop_config.json
{
  "mcpServers": {
    "todoist": {
      "command": "node",
      "args": [
        "<ABSOLUTE_PATH_TO_CLONE>/dist/main.js"
      ],
      "env": {
        "TODOIST_API_KEY": "<TODOIST_API_KEY>"
      }
    }
  }
}
Cursor~/.cursor/mcp.json
{
  "mcpServers": {
    "todoist": {
      "command": "node",
      "args": [
        "<ABSOLUTE_PATH_TO_CLONE>/dist/main.js"
      ],
      "env": {
        "TODOIST_API_KEY": "<TODOIST_API_KEY>"
      }
    }
  }
}
VS Code.vscode/mcp.json
{
  "servers": {
    "todoist": {
      "type": "stdio",
      "command": "node",
      "args": [
        "<ABSOLUTE_PATH_TO_CLONE>/dist/main.js"
      ],
      "env": {
        "TODOIST_API_KEY": "<TODOIST_API_KEY>"
      }
    }
  }
}
Codex~/.codex/config.toml
[mcp_servers.todoist]
command = "node"
args = ["<ABSOLUTE_PATH_TO_CLONE>/dist/main.js"]

[mcp_servers.todoist.env]
TODOIST_API_KEY = "<TODOIST_API_KEY>"
Gemini CLITerminal
gemini mcp add --scope user -e TODOIST_API_KEY=<TODOIST_API_KEY> todoist node -- '<ABSOLUTE_PATH_TO_CLONE>/dist/main.js'

Settings 5

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. Default 3000. For todoist-mcp-http.
HOST Optional: Bind address for the HTTP program; a non-loopback host also needs ALLOWED_HOSTS. Default 127.0.0.1. For todoist-mcp-http.
ALLOWED_HOSTS Optional: Comma-separated extra hostnames accepted in Host/Origin headers. For todoist-mcp-http.

What it does

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.

What it needs

RuntimeNode.js 24+
Runs onmacOS, Windows, Linux
TodoistFree 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.

Limits

  • Limit The stdio program throws at start when TODOIST_API_KEY is unset, and every call runs as that one Todoist user (src/main.ts)
  • Not covered No OAuth sign-in in the local package; OAuth is only offered on Doist's hosted endpoint
  • Early release Its makers call the project early-stage and say the tools will change
  • Limit The HTTP program refuses requests whose Host or Origin header is off its allowlist; binding beyond 127.0.0.1 needs HOST and ALLOWED_HOSTS together
  • Limit The docs offer the local HTTP mode as a fallback when the hosted service drops sessions often

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.

Who it suits

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.

Tools 49

25 only read, 22 change things, 2 can delete or overwrite. A ? marks an optional parameter.

add-tasks changes
Create one or more tasks with due dates, priority, labels and project
complete-tasks changes
Mark one or more tasks as done
uncomplete-tasks changes
Reopen tasks that were completed
update-tasks changes
Change fields of existing tasks
reschedule-tasks changes
Move tasks to new due dates
find-tasks
Search tasks by text, project, section, label or other criteria
find-tasks-by-date
List tasks due on a date or in a date range, with an inline task-list widget
find-completed-tasks
List tasks already completed
add-projects changes
Create projects
update-projects changes
Rename or change settings of projects
find-projects
List or search projects
project-management changes
Run project-level actions such as archiving
project-move changes
Move a project between personal space and a workspace
add-sections changes
Create sections inside projects
update-sections changes
Rename or change sections
find-sections
List sections of a project
add-comments changes
Add comments to tasks or projects
find-comments
Read comments on a task or project
update-comments changes
Edit existing comments
add-reminders changes
Create reminders on tasks
find-reminders
List reminders
update-reminders changes
Change existing reminders
view-attachment
Open a file attached to a comment
add-labels changes
Create labels
update-labels changes
Rename or change labels
find-labels
List labels
find-filters
List saved filters
add-filters changes
Create saved filters
update-filters changes
Change saved filters
find-activity
Read the account's activity log of changes
get-productivity-stats
Fetch completion statistics and streaks
get-project-health
Report the health status of a project
get-project-activity-stats
Summarise activity in a project over time
analyze-project-health
Run a health analysis of a project
get-workspace-insights
Summarise progress across a workspace
get-overview
Give an overview of the account or of one project
delete-object deletes
Delete a task, project, section, comment or other item
fetch-object
Fetch one item by its id
reorder-objects changes
Change the order of items
user-info
Show which Todoist user the token belongs to and their settings
get-user-status
Read the status message and emoji shown beside the user's name, with its end time and pause flags
set-user-status deletes
Set or clear the user's status; replaces the whole status, so omitted fields are droppedmessage?: stringemoji?: stringactiveUntil?: stringpauseNotifications?: booleanpauseActivity?: booleanclear?: boolean
find-project-collaborators
List people who share a project
manage-assignments changes
Assign or unassign tasks to collaborators, in bulk
export-project-template
Export a project as a template
import-project-template changes
Create a project from a template
list-workspaces
List the workspaces the user belongs to
search
Search tasks and projects in OpenAI's MCP format
fetch
Fetch a task or project by id in OpenAI's MCP format

Prompts 1

productivity-analysis
A productivity review built from user-info, get-productivity-stats and find-completed-tasks

Similar servers