npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2025 – Pkg Stats / Ryan Hefner

@shayonpal/mcp-todoist

v1.5.0

Published

MCP server enabling programmatic Todoist task and project management through optimized tool set

Readme

Todoist MCP Server

npm version License: GPL-3.0 Node.js Version

MCP server enabling programmatic Todoist task and project management through an optimized tool set using Todoist REST API v1. Integrates seamlessly with Claude Desktop and other MCP-compatible clients.

Table of Contents

Features

  • 8 Core Tools: Comprehensive task and project management
    • Tasks (CRUD + complete/uncomplete)
    • Bulk Tasks (batch operations on up to 50 tasks)
    • Projects (CRUD + archive/unarchive)
    • Sections (organize tasks within projects)
    • Comments (with file attachment support)
    • Filters (custom task queries)
    • Reminders (relative, absolute, location-based)
    • Labels (personal and shared label management)
  • Natural Language Dates: "tomorrow", "every Monday", "next Friday at 3pm"
  • Deadline Support: Set completion deadlines distinct from due dates
  • Batch Operations: Execute up to 100 operations per request via Sync API
  • Smart Rate Limiting: Token bucket algorithm with automatic retry
  • Type Safety: Full TypeScript implementation with Zod validation
  • Comprehensive Testing: Contract and integration test coverage

Prerequisites

Installation

Option 1: Install from npm (Recommended)

npm i @shayonpal/mcp-todoist

Option 2: Install from source

  1. Clone the repository:
git clone https://github.com/shayonpal/mcp-todoist.git
cd mcp-todoist
  1. Install dependencies:
npm install
  1. Build the project:
npm run build

Configuration

1. Set up environment variables

cp .env.example .env

Edit .env and add your Todoist API token:

TODOIST_API_TOKEN=your_todoist_api_token_here

2. Configure your MCP client

Claude Desktop

Add to your Claude Desktop configuration file:

macOS: ~/Library/Application Support/Claude/claude_desktop_config.json Windows: %APPDATA%\Claude\claude_desktop_config.json

If installed from npm:

{
  "mcpServers": {
    "todoist": {
      "command": "npx",
      "args": ["-y", "@shayonpal/mcp-todoist"],
      "env": {
        "TODOIST_API_TOKEN": "your_api_token_here"
      }
    }
  }
}

If installed from source:

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

Note: When using source installation, use absolute paths in the configuration.

Claude Code CLI

Recommended: Use CLI command

Add the server using the claude mcp add command:

# Project scope (shared with team, stored in .mcp.json)
claude mcp add todoist --scope project npx -y @shayonpal/mcp-todoist

# User scope (personal, works across all projects)
claude mcp add todoist --scope user npx -y @shayonpal/mcp-todoist

# Local scope (personal, current project only) - default
claude mcp add todoist npx -y @shayonpal/mcp-todoist

Then set your Todoist API token as an environment variable:

export TODOIST_API_TOKEN=your_api_token_here

Or manually add the environment variable to .mcp.json:

{
  "mcpServers": {
    "todoist": {
      "command": "npx",
      "args": ["-y", "@shayonpal/mcp-todoist"],
      "env": {
        "TODOIST_API_TOKEN": "${TODOIST_API_TOKEN}"
      }
    }
  }
}

Scope selection:

  • Project scope (recommended for teams): Shared via .mcp.json in version control
  • User scope: Personal, available across all projects on your machine
  • Local scope: Personal, specific to current project only (default)

Codex CLI

Add to ~/.codex/config.toml:

[mcp_servers.todoist]
command = "npx"
args = ["-y", "@shayonpal/mcp-todoist"]
env = { "TODOIST_API_TOKEN" = "your_api_token_here" }
startup_timeout_ms = 20000

Note: Codex uses TOML format with mcp_servers (underscore). All strings must be quoted.

Cursor IDE

Recommended: One-click install

Add to Cursor

Click the button above to automatically install the server in Cursor. Make sure you have TODOIST_API_TOKEN set as an environment variable.

Manual installation:

Configuration locations:

  • Project-specific: .cursor/mcp.json in project root
  • Global: ~/.cursor/mcp.json in home directory

Option 1: Using environment variables

{
  "mcpServers": {
    "todoist": {
      "type": "stdio",
      "command": "npx",
      "args": ["-y", "@shayonpal/mcp-todoist"],
      "env": {
        "TODOIST_API_TOKEN": "${env:TODOIST_API_TOKEN}"
      }
    }
  }
}

Option 2: Using environment file

{
  "mcpServers": {
    "todoist": {
      "type": "stdio",
      "command": "npx",
      "args": ["-y", "@shayonpal/mcp-todoist"],
      "envFile": ".env"
    }
  }
}

Supported config interpolation:

  • ${env:NAME} - Environment variables
  • ${userHome} - Path to home folder
  • ${workspaceFolder} - Project root directory
  • ${workspaceFolderBasename} - Project name

Other MCP Clients

Refer to your MCP client's documentation for configuration instructions. The server uses STDIO transport and follows MCP protocol version 2024-11-05.

Available Tools

todoist_tasks

Complete task management with create, get, update, delete, list, complete, uncomplete, and list_completed actions. Supports natural language dates, deadlines, priorities, labels, recurring tasks, and querying completed tasks within time-bounded windows.

Key parameters: action, task_id, content, due_date, due_string, deadline, priority, labels, project_id, completed_query_type, since, until

Completed tasks querying:

  • list_completed action retrieves completed tasks
  • Query by completion date (3-month window) or due date (6-week window)
  • Supports filtering by project, section, workspace, labels, and more
  • Cursor-based pagination for large result sets
  • Example: Query all tasks completed in September with Work label
    {
      "action": "list_completed",
      "completed_query_type": "by_completion_date",
      "since": "2025-09-01T00:00:00Z",
      "until": "2025-09-30T23:59:59Z",
      "filter_query": "@Work",
      "limit": 50
    }

todoist_projects

Project management with create, get, update, delete, list, archive, and unarchive actions. Organize work with hierarchical projects and custom views.

Key parameters: action, project_id, name, color, is_favorite, view_style

todoist_sections

Section management within projects for better task organization. Create, get, update, delete, list, and reorder sections.

Key parameters: action, section_id, project_id, name, order

todoist_comments

Add and manage comments on tasks and projects with file attachment support (up to 15,000 characters).

Key parameters: action, comment_id, task_id, project_id, content, attachment

todoist_filters

Create and manage custom filters for advanced task queries. List, create, update, delete, and query filters.

Key parameters: action, filter_id, name, query, color, is_favorite

todoist_reminders

Set reminders for tasks with three types: relative (X minutes before due), absolute (specific datetime), and location-based (geofenced).

Key parameters: action, reminder_id, item_id, type, minute_offset, due, loc_lat, loc_long

todoist_labels

Manage personal and shared labels with create, get, update, delete, list, rename, and remove actions. Includes caching for optimal performance.

Key parameters: action, label_id, name, color, is_favorite, order

todoist_bulk_tasks

Perform bulk operations on up to 50 tasks simultaneously. Supports update, complete, uncomplete, and move operations with automatic deduplication and partial execution mode.

Key parameters: action, task_ids (1-50 items), project_id, section_id, labels, priority, due_string, deadline_date

Supported Actions:

  • update - Modify task fields (due date, priority, labels, etc.)
  • complete - Mark multiple tasks as done
  • uncomplete - Reopen completed tasks
  • move - Change project/section/parent for multiple tasks

Usage Examples:

// Bulk update due dates for 5 tasks
{
  "action": "update",
  "task_ids": ["7654321", "7654322", "7654323", "7654324", "7654325"],
  "due_string": "tomorrow"
}

// Bulk complete 10 tasks
{
  "action": "complete",
  "task_ids": ["7654321", "7654322", "7654323", "7654324", "7654325",
               "7654326", "7654327", "7654328", "7654329", "7654330"]
}

// Bulk move 7 tasks to different project
{
  "action": "move",
  "task_ids": ["7654321", "7654322", "7654323", "7654324", "7654325",
               "7654326", "7654327"],
  "project_id": "2203306141"
}

// Bulk update multiple fields for 8 tasks
{
  "action": "update",
  "task_ids": ["7654321", "7654322", "7654323", "7654324",
               "7654325", "7654326", "7654327", "7654328"],
  "priority": 2,
  "labels": ["urgent", "work"],
  "deadline_date": "2025-12-31"
}

Limitations:

  • Maximum 50 unique tasks per operation (after deduplication)
  • Cannot modify content (task title), description, or comments in bulk
  • All tasks receive the same field updates
  • Performance: <2 seconds for 50-task operations

Response Structure:

  • Individual results for each task (success/failure)
  • Summary counts (total, successful, failed)
  • Automatic deduplication metadata
  • Execution time tracking

Rate Limiting

The server implements intelligent rate limiting to respect Todoist API constraints:

  • REST API: 300 requests/minute (token bucket: 300 capacity, 5 tokens/sec refill)
  • Sync API: 50 requests/minute (token bucket: 50 capacity, ~0.83 tokens/sec refill)
  • Automatic Retry: Exponential backoff on 429 responses
  • Batch Operations: Use for bulk updates to minimize API calls

Development

# Run in development mode with hot reload
npm run dev

# Build TypeScript
npm run build

# Run all tests
npm test

# Run tests in watch mode
npm run test:watch

# Generate test coverage report
npm run test:coverage

# Lint code
npm run lint

# Auto-fix linting issues
npm run lint:fix

# Format code with Prettier
npm run format

# Type-check without emitting
npm run typecheck

Contributing

Contributions are welcome! Please see CONTRIBUTING.md for guidelines.

License

GNU General Public License v3.0 - see LICENSE for details.

Copyright (C) 2025 Shayon Pal