todoist-v1-mcp-server
A clean, reliable MCP (Model Context Protocol) server for Todoist — built on the Todoist unified API v1.
README
todoist-v1-mcp-server
A clean, reliable MCP (Model Context Protocol) server for Todoist — built on the Todoist unified API v1.
Why this exists
The official Todoist web MCP (todoist-ai) has a known persistent disconnection bug on the Anthropic side that requires reconnecting daily. Community alternatives are either built on the deprecated REST API v2 or have schema validation bugs that cause failures when Todoist returns additional fields as their API evolves.
This server:
- Targets the current Todoist API v1 (not deprecated v2)
- Uses stdio transport — no cloud dependency, no daily reconnections
- Uses the modern MCP SDK
registerTool()API (not the deprecatedsetRequestHandlerpattern) - Never enforces strict output schemas on API responses — Todoist can add new fields freely without breaking anything
- Zero SDK wrapper dependency — direct HTTP calls via axios, so there's no intermediary library drifting from the API
Tools (20 total)
Tasks
| Tool | Description |
|---|---|
todoist_get_tasks |
List/filter tasks — supports Todoist filter strings like "today", "overdue", "p1", "#ProjectName", "7 days" |
todoist_get_task |
Get a single task by ID |
todoist_create_task |
Create a task with natural language due dates ("tomorrow", "every monday", etc.) |
todoist_update_task |
Update any field; pass clear_due_date: true to remove a due date |
todoist_complete_task |
Mark a task as done |
todoist_reopen_task |
Reopen a completed task |
todoist_delete_task |
Permanently delete a task |
Projects
| Tool | Description |
|---|---|
todoist_get_projects |
List all projects |
todoist_get_project |
Get a single project by ID |
todoist_create_project |
Create a project (with color, view style, parent) |
todoist_update_project |
Update a project |
todoist_delete_project |
Permanently delete a project and all its tasks |
Sections
| Tool | Description |
|---|---|
todoist_get_sections |
List sections within a project |
todoist_create_section |
Create a section |
todoist_update_section |
Rename a section |
todoist_delete_section |
Delete a section |
Labels
| Tool | Description |
|---|---|
todoist_get_labels |
List all personal labels |
todoist_create_label |
Create a label |
todoist_update_label |
Update a label |
todoist_delete_label |
Delete a label |
Setup
1. Get your Todoist API token
Go to Todoist → Settings → Integrations → Developer and copy your API token.
2. Install and build
git clone https://github.com/christulino/todoist-v1-mcp-server
cd todoist-v1-mcp-server
npm install
npm run build
3. Configure Claude Desktop
Edit ~/Library/Application Support/Claude/claude_desktop_config.json:
{
"mcpServers": {
"todoist": {
"command": "node",
"args": ["/absolute/path/to/todoist-v1-mcp-server/dist/index.js"],
"env": {
"TODOIST_API_TOKEN": "your_api_token_here"
}
}
}
}
Restart Claude Desktop. You should see "todoist" in the connected MCP servers.
4. Configure Claude Code (optional)
claude mcp add todoist -- node /absolute/path/to/todoist-v1-mcp-server/dist/index.js
Then set the env var:
export TODOIST_API_TOKEN=your_api_token_here
Or add it to your shell profile.
Usage examples
Once connected, Claude can handle natural language like:
- "What's on my plate today?" → uses
todoist_get_taskswithfilter: "today" - "Add a task to call the dentist next Tuesday" → uses
todoist_create_task - "Mark the dentist task as done" → uses
todoist_complete_task - "Show me everything overdue" → uses
todoist_get_taskswithfilter: "overdue" - "Create a project called Home Renovation" → uses
todoist_create_project - "What projects do I have?" → uses
todoist_get_projects
Todoist filter syntax
The filter parameter in todoist_get_tasks supports Todoist's full natural language filter syntax:
| Filter | Meaning |
|---|---|
today |
Due today |
overdue |
Past due |
7 days |
Due in the next 7 days |
p1 |
Priority urgent |
#ProjectName |
Tasks in a specific project |
@labelname |
Tasks with a specific label |
no due date |
Tasks without a due date |
today | overdue |
Today or overdue (combine with |) |
today & @waiting |
Today AND labeled 'waiting' |
Full filter documentation: https://todoist.com/help/articles/introduction-to-filters
Requirements
- Node.js 18+
- A Todoist account (free tier works)
Development
npm run dev # tsx watch mode with auto-reload
npm run build # compile TypeScript
npm start # run compiled server
Testing
The test suite hits the live Todoist API and runs a full CRUD cycle across tasks, projects, sections, and labels. All test data is prefixed with [mcp-test] and cleaned up automatically.
TODOIST_API_TOKEN=your_token npm test
Your API token is at Todoist → Settings → Integrations → Developer — same token you put in claude_desktop_config.json.
Contributing
PRs welcome. The goal is a minimal, correct implementation that stays current with the Todoist API v1. Priorities:
- Correctness over cleverness
- Permissive output handling (never reject unknown API fields)
- Helpful error messages that tell you what went wrong and how to fix it
License
MIT
Recommended Servers
playwright-mcp
A Model Context Protocol server that enables LLMs to interact with web pages through structured accessibility snapshots without requiring vision models or screenshots.
Magic Component Platform (MCP)
An AI-powered tool that generates modern UI components from natural language descriptions, integrating with popular IDEs to streamline UI development workflow.
Audiense Insights MCP Server
Enables interaction with Audiense Insights accounts via the Model Context Protocol, facilitating the extraction and analysis of marketing insights and audience data including demographics, behavior, and influencer engagement.
VeyraX MCP
Single MCP tool to connect all your favorite tools: Gmail, Calendar and 40 more.
graphlit-mcp-server
The Model Context Protocol (MCP) Server enables integration between MCP clients and the Graphlit service. Ingest anything from Slack to Gmail to podcast feeds, in addition to web crawling, into a Graphlit project - and then retrieve relevant contents from the MCP client.
Kagi MCP Server
An MCP server that integrates Kagi search capabilities with Claude AI, enabling Claude to perform real-time web searches when answering questions that require up-to-date information.
E2B
Using MCP to run code via e2b.
Neon Database
MCP server for interacting with Neon Management API and databases
Exa Search
A Model Context Protocol (MCP) server lets AI assistants like Claude use the Exa AI Search API for web searches. This setup allows AI models to get real-time web information in a safe and controlled way.
Qdrant Server
This repository is an example of how to create a MCP server for Qdrant, a vector search engine.