Skip to main content
Glama

Todoist MCP Server (v2)

A Model Context Protocol (MCP) server for the unified Todoist API v1, built for AI-agent consumption: a declarative tool registry with a server-side permission model, slim token-efficient payloads, and coverage of the Pro surfaces (reminders, saved filters, activity log, backups, productivity stats, natural-language quick-add).

v2 highlights (2026-07-05 rebuild)

  • Permission model at the registration layer. Every tool carries a tier (read / write / destructive); tools outside the configured mode are never registered, which holds even on harness channels that skip client-side permission prompts. todoist_get_capabilities audits the live surface (registered + filtered + why).

  • Slim payloads by default. Todoist objects carry 25+ fields; slim mode returns only decision-relevant ones and uses compact JSON. Example: 4 projects = ~770B vs ~6KB raw pretty-printed. TODOIST_SLIM=0 restores raw passthrough.

  • Reliable comment counts. The v1 list-payload note_count is unreliable (reports 0 on tasks with comments); slim list payloads drop it, and todoist_get_task returns an authoritative comment_count fetched from /comments.

  • Fixed v1.x defects. todoist_search_tasks now honors project_id/section_id/label (previously accepted-and-ignored); todoist_get_completed_stats pages up to 1000 completions (previously silently capped at 200).

  • New v1 surfaces. Reminders, saved filters (Sync-API lane — filters have no REST resource, verified live), activity log (/activities), backups, user/plan info, productivity stats (/tasks/completed/stats), todoist_quick_add (natural language), and deadline_date on task create/update (the do-date vs drop-dead-date distinction).

Related MCP server: Todoist MCP Server

Configuration

{
  "mcpServers": {
    "todoist": {
      "command": "node",
      "args": ["/path/to/todoist-mcp/dist/index.js"],
      "env": { "TODOIST_API_TOKEN": "${TODOIST_API_TOKEN}" }
    }
  }
}

Environment knobs (all optional):

Var

Values

Default

Effect

TODOIST_TOOL_MODE

full | standard | read-only

standard

standard registers read + write; destructive tools (deletes, reopens) are not registered at all. read-only registers only reads.

TODOIST_TOOLS_DENY

comma list of tool names

—

Force specific tools OFF (wins over everything).

TODOIST_TOOLS_ALLOW

comma list of tool names

—

Force specific tools ON regardless of mode (deny still wins).

TODOIST_SLIM

1 | 0

1

Slim vs raw payloads.

Never commit your API token.

Tool surface

51 tools registered in standard mode; 9 more (delete_*, reopen_*) in full. Ask the server itself: call todoist_get_capabilities for the live list with tiers.

Groups: tasks (list/get/search/hierarchy/duplicates · create/update/quick-add/complete/move/ follow-up/with-context · 4 batch ops · deletes+reopens destructive-tier), projects, sections, comments (incl. [Research]/[Context] helpers), labels, completed+stats, workspace overview, reminders, saved filters, activity log, backups, user.

Priority convention: API values are inverted from the UI (P1 urgent = 4 … P4 untriaged = 1).

Response format

Every tool returns { success, data } or { success: false, error: { code, message, details? } } as a single compact-JSON text block.

Development & testing

npm run build        # tsc
npm run typecheck
node smoke-test.mjs  # protocol-level live smoke: spawns dist/index.js over stdio,
                     # verifies mode filtering + live reads (needs TODOIST_API_TOKEN)

License

ISC

Available Tools

33 tools
todoist_add_context_commentB

Add context information to a task (prefixed with [Context])

Inputs: task_id (required), context (required).

todoist_add_research_commentB

Add a research note to a task (prefixed with [Research])

Inputs: task_id (required), research (required).

todoist_complete_taskC

Mark a task as completed

Inputs: task_id (required).

todoist_create_commentC

Create a comment on a task or project with optional prefix tags

Inputs: content (required), task_id, project_id, prefix, +1 more.

todoist_create_labelC

Create a new label

Inputs: name (required), color, order, is_favorite.

todoist_create_projectC

Create a new project

Inputs: name (required), parent_id, color, is_favorite, +1 more.

todoist_create_sectionC

Create a new section in a project

Inputs: name (required), project_id (required), order.

todoist_create_taskB

Create a new task with optional due date, priority, labels, and project/section assignment

Inputs: content (required), description, project_id, section_id, +11 more.

todoist_create_tasks_batchC

Create multiple tasks at once (uses parallel API calls)

Inputs: tasks (required).

todoist_delete_commentC

Delete a comment

Inputs: comment_id (required).

todoist_delete_labelC

Delete a label

Inputs: label_id (required).

todoist_delete_projectC

Delete a project permanently

Inputs: project_id (required).

todoist_delete_sectionB

Delete a section

Inputs: section_id (required).

todoist_delete_taskC

Delete a task permanently

Inputs: task_id (required).

todoist_get_commentC

Get a comment by ID

Inputs: comment_id (required).

todoist_get_completed_statsC

Get statistics about completed tasks

Inputs: project_id.

todoist_get_projectC

Get a project by ID

Inputs: project_id (required).

todoist_get_sectionC

Get a section by ID

Inputs: section_id (required).

todoist_get_taskB

Get a single task by ID

Inputs: task_id (required).

todoist_list_commentsC

List comments for a task or project

Inputs: task_id, project_id.

todoist_list_completed_tasksC

List completed tasks (uses Sync API) with optional filters

Inputs: project_id, section_id, limit, offset, +3 more.

todoist_list_labelsB

List all personal labels

Inputs: no named parameters.

todoist_list_projectsB

List all projects

Inputs: no named parameters.

todoist_list_sectionsB

List all sections (optionally filtered by project)

Inputs: project_id.

todoist_list_tasksC

List active tasks with optional filters (project, section, label, or Todoist filter query)

Inputs: project_id, section_id, label, filter, +2 more.

todoist_move_taskC

Move a task to a different project, section, or parent

Inputs: task_id (required), project_id, section_id, parent_id.

todoist_reopen_taskC

Reopen a completed task

Inputs: task_id (required).

todoist_search_tasksB

Search for tasks by content using Todoist search filter

Inputs: query (required), project_id, section_id, label.

todoist_update_commentC

Update a comment

Inputs: comment_id (required), content (required), prefix.

todoist_update_labelC

Update a label

Inputs: label_id (required), name, color, order, +1 more.

todoist_update_projectC

Update a project

Inputs: project_id (required), name, color, is_favorite, +1 more.

todoist_update_sectionC

Update a section name

Inputs: section_id (required), name (required).

todoist_update_taskC

Update an existing task

Inputs: task_id (required), content, description, labels, +8 more.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

Loading tool schema changelog…

    TDQS

    B3.2/5.0

    Scored across 33 tools

    Disambiguation5/5

    Every tool has a clearly distinct purpose targeting specific resources (tasks, projects, sections, labels, comments) and actions (create, get, list, update, delete, complete, reopen, move, search). No ambiguity exists—for example, todoist_create_task, todoist_update_task, and todoist_complete_task are well-differentiated, and comment tools are specialized by prefix or general use.

    Naming Consistency5/5

    All tools follow a consistent snake_case pattern with a 'todoist_' prefix and verb_noun structure (e.g., todoist_create_task, todoist_list_projects). Minor variations like 'todoist_add_context_comment' vs. 'todoist_create_comment' are semantically justified and maintain readability without breaking the pattern.

    Tool Count2/5

    33 tools is excessive for a Todoist server, making the set feel heavy and potentially overwhelming. While it covers many operations, the count could be streamlined—for instance, batch operations or specialized comment tools might be consolidated without losing functionality, aligning better with typical MCP scopes of 3-15 tools.

    Completeness5/5

    The tool set provides complete CRUD/lifecycle coverage for all core Todoist entities (tasks, projects, sections, labels, comments), including advanced operations like moving tasks, reopening completed ones, searching, and batch creation. No obvious gaps exist; agents can perform any expected workflow without dead ends.

    Maintenance

    ActivityInactive
    ResponsivenessNo recent community issues

    Related MCP Connectors

    Related MCP Servers