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 🙏

© 2026 – Pkg Stats / Ryan Hefner

@upspawn/todoist-mcp

v0.2.0

Published

Model Context Protocol server for Todoist integration

Readme

Todoist MCP Server 🚀

CI npm coverage license

Instantly connect any LLM to Todoist – Manage tasks, projects, comments & productivity stats through the Model Context Protocol (MCP) with one command:

npx -y @upspawn/todoist-mcp

✨ Why Todoist-MCP?

| 🔥 Feature | 🚀 Details | |-----------|-----------| | Full Todoist API | Projects, Sections, Tasks, Comments, Labels & Productivity – 32 typed tools ready to call. | | Natural-language Quick Add | "Pay rent tomorrow 9am #Finance p1" ➜ instant task. | | Rate-limit Smart | Tracks 450 req / 15 min & retries with exponential back-off. | | Battle-tested | 92 % coverage · 150+ unit / integration tests · ESLint + Prettier + Husky. | | Zero boilerplate | One npx – no server, no auth dance, just stdin↔stdout JSON. | | TypeScript ♥ | End-to-end types, Zod schemas, strict mode everywhere. | | Open-Source Friendly | MIT licensed & production-ready CI/CD. |


🚀 Getting Started

First, get your Todoist API token from https://todoist.com/prefs/integrations.

Requirements

  • Node.js 18 or newer
  • VS Code, Cursor, Windsurf, Claude Desktop, Goose or any other MCP client

Installation by Client

Standard config works in most tools:

{
  "mcpServers": {
    "todoist": {
      "command": "npx",
      "args": ["-y", "@upspawn/todoist-mcp"],
      "env": {
        "TODOIST_API_KEY": "your-todoist-api-key-here"
      }
    }
  }
}

Claude Code

Use the Claude Code CLI to add the Todoist MCP server:

claude mcp add todoist npx @upspawn/todoist-mcp

Claude Desktop

Follow the MCP install guide, use the standard config above.

Cursor

Go to Cursor SettingsMCPAdd new MCP Server. Name it "todoist", use command type with the command npx @upspawn/todoist-mcp. Add your TODOIST_API_KEY environment variable.

Gemini CLI

Follow the MCP install guide, use the standard config above.

Goose

Go to Advanced settingsExtensionsAdd custom extension. Name it "todoist", use type STDIO, and set the command to npx @upspawn/todoist-mcp. Add your TODOIST_API_KEY environment variable.

LM Studio

Go to Program in the right sidebar → InstallEdit mcp.json. Use the standard config above.

Qodo Gen

Open Qodo Gen chat panel in VSCode or IntelliJ → Connect more tools → + Add new MCP → Paste the standard config above. Click Save.

VS Code

Follow the MCP install guide, use the standard config above.

You can also install using the VS Code CLI:

code --add-mcp '{"name":"todoist","command":"npx","args":["-y","@upspawn/todoist-mcp"],"env":{"TODOIST_API_KEY":"your-api-key"}}'

Windsurf

Follow Windsurf MCP documentation. Use the standard config above.

Docker Installation

If you prefer using Docker:

  1. Pull the image (when available):
docker pull upspawn/todoist-mcp:latest
  1. Or build locally:
git clone https://github.com/upspawn/todoist-mcp.git
cd todoist-mcp
npm run build
docker build -t todoist-mcp .
  1. Run with your API key:
docker run -e TODOIST_API_KEY=your-api-key todoist-mcp
  1. Docker Compose example:
version: '3.8'
services:
  todoist-mcp:
    image: upspawn/todoist-mcp:latest
    environment:
      - TODOIST_API_KEY=your-api-key
      - DEBUG=false
    stdin_open: true
    tty: true

Quick Test

Once configured, ask your AI:
"Add 'Review PR #42' for tomorrow 10 am #Work"

That's it! 🎉

✅ API v1 Compliance Verified

Our implementation is 100% compliant with the official Todoist API v1 documentation:

  • 🎯 36/36 integration tests passing with real Todoist Pro API
  • ✅ All endpoint URLs correctly migrated from deprecated /rest/v2 to current /api/v1
  • ✅ All object naming follows v1 conventions
  • Pro Account Features: Full CRUD operations work perfectly
  • 🔧 Legacy endpoint deprecations gracefully handled
  • 📖 See docs/integration-test-results.md for full details

📚 Table of Contents


⚙️ Configuration

Environment Vars

| Var | Required | Default | Description | |-----|----------|---------|-------------| | TODOIST_API_KEY | ✔︎ | – | 40-char personal API token | | TODOIST_API_BASE_URL | ✖︎ | https://api.todoist.com/rest/v2 | Override for mocks/self-hosted | | DEBUG | ✖︎ | false | Verbose logging |

Create a .env:

TODOIST_API_KEY=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
DEBUG=true

Configuration Examples

Check the examples/ directory for various configuration options:


🔧 Available Tools (32)

Projects

list_projects, create_project, get_project, update_project, delete_project, get_project_collaborators

Tasks

list_tasks, create_task, get_task, update_task, close_task, reopen_task, delete_task, quick_add_task

Sections

list_sections, create_section, get_section, update_section, delete_section

Comments

list_comments, create_comment, get_comment, update_comment, delete_comment

Labels

list_labels, create_label, get_label, update_label, delete_label

Productivity & Completion

get_completed_tasks, get_completed_tasks_by_project, get_productivity_stats


🔥 Usage Snippets

📝  "Create task 'Draft Q4 roadmap' for next Monday 9am #Product p1"
📅  "Show me tasks due this week in #Personal"
🚀  "Quick-add 'Publish release notes every Friday 4pm #Chores p2'"
🎯  "Get productivity stats for last month"

🧑‍💻 Development Guide

Local Development

# Clone and setup
git clone https://github.com/upspawn/todoist-mcp.git
cd todoist-mcp
npm i

# Development with hot-reload
npm run dev  # ts-node + nodemon hot-reload

# Build & run tests
npm run build && npm test -- --coverage

# Lint & format
npm run lint && npm run format

# Generate HTML coverage report
open coverage/lcov-report/index.html

Docker Development

# Build Docker image
npm run build
docker build -t todoist-mcp .

# Run with Docker Compose
echo "TODOIST_API_KEY=your-api-key" > .env
docker-compose up

# Run tests in Docker
docker run --rm -v $(pwd):/app -w /app node:20-alpine npm test

Architectural Overview

┌────────────┐   stdin   ┌───────────────────┐   HTTPS    ┌──────────────┐
│   Client   │◀─────────▶│ Todoist-MCP Server│───────────▶│ Todoist REST │
└────────────┘  JSON-RPC └───────────────────┘   Axios    └──────────────┘
  • Transport: JSON-RPC 2.0 over stdio (MCP spec)
  • Core: tool-handlers.ts – 32 strongly-typed operations
  • Network: todoist-api.ts – Axios client with retries & rate-limit guard
  • Tests: Jest + ts-jest (≥ 92 % coverage)

🤝 Contributing

  1. Fork & clone the repo
  2. npm i
  3. Create a branch: git checkout -b feat/amazing
  4. Add tests & docs
  5. npm run lint && npm test
  6. Open a PR – we ❤️ contributors!

Tip: run npm run test:watch for TDD flow.


📜 License

Released under the MIT License – see LICENSE.

Made with ☕ & ❤️ by the @upspawn team.