Todoist
STDIO通过自然语言连接Claude与Todoist的任务管理服务器
通过自然语言连接Claude与Todoist的任务管理服务器
An MCP (Model Context Protocol) server that connects Claude with Todoist for complete task and project management through natural language.
{ "mcpServers": { "todoist": { "command": "npx", "args": ["@greirson/mcp-todoist"], "env": { "TODOIST_API_TOKEN": "your_api_token_here" } } } }
That's it! You can now manage your Todoist tasks directly through Claude.
To install mcp-todoist for Claude Desktop automatically via Smithery:
npx -y @smithery/cli install @greirson/mcp-todoist --client claude
This is the easiest method as it doesn't require installing anything globally.
Add the server to your Claude Desktop configuration file:
On macOS/Linux:
~/.config/claude_desktop_config.jsonOn Windows:
%APPDATA%\Claude\claude_desktop_config.jsonAdd this configuration:
{ "mcpServers": { "todoist": { "command": "npx", "args": ["@greirson/mcp-todoist"], "env": { "TODOIST_API_TOKEN": "your_api_token_here" } } } }
⚠️ Important: Replace your_api_token_here with your actual Todoist API token from Step 1.
If you prefer to install the package globally:
npm install -g @greirson/mcp-todoist
(Same as Option 1, Step 1)
Use this configuration for global installation:
{ "mcpServers": { "todoist": { "command": "mcp-todoist", "env": { "TODOIST_API_TOKEN": "your_api_token_here" } } } }
Close and reopen Claude Desktop to load the new MCP server.
In Claude Desktop, try asking:
"Show me my Todoist projects"
You should see a list of your Todoist projects, confirming the integration is working!
Dry-run mode allows you to test operations and automations without making any real changes to your Todoist workspace. This is perfect for testing, debugging, learning the API, or validating automation scripts before running them for real.
Add DRYRUN=true to your environment configuration:
{ "mcpServers": { "todoist": { "command": "npx", "args": ["@greirson/mcp-todoist"], "env": { "TODOIST_API_TOKEN": "your_api_token_here", "DRYRUN": "true" } } } }
[DRY-RUN] prefixesWith dry-run mode enabled, operations show what would happen:
You: "Create a task called 'Test Task' in my Work project"
Response:
[DRY-RUN] Dry-run mode enabled - mutations will be simulated
[DRY-RUN] Would create task: "Test Task" in project 2203306141, section none
Task created successfully (simulated):
ID: 100001
Title: Test Task
Project: Work (2203306141)
Priority: 4 (Normal)
All 28 MCP tools support dry-run mode:
Remove the DRYRUN environment variable or set it to false, then restart Claude Desktop to return to normal operation mode.
The server provides 28 tools organized by entity type:
due_before/due_after windows with timezone-aware due detailsdue_before/due_after filtering used by single-task queries"No Todoist projects found" or connection errors:
MCP server not loading:
npm list -g @greirson/mcp-todoistmcp-todoist binary: /Users/USERNAME/.npm-global/bin/mcp-todoistPermission errors:
mkdir -p ~/.config"Show me all my projects"
"Create a new project called 'Work Tasks'"
"Create a section called 'In Progress' in project 12345"
"Show me sections in the Work Tasks project"
"Create task 'Team Meeting' in project 12345"
"Add task 'Review PR' due tomorrow with labels ['Code Review', 'Urgent']"
"Create high priority task with deadline 2024-12-25"
"Update meeting task to be in section 67890"
"Mark the PR review task as complete"
# Task identification by ID (more reliable than name search)
"Get task with ID 1234567890"
"Update task ID 1234567890 to priority 4"
"Complete task with ID 1234567890"
"Delete task ID 1234567890"
"Create subtask 'Prepare agenda' under task 'Team Meeting'"
"Create multiple subtasks for 'Launch Project': 'Design UI', 'Write tests', 'Deploy'"
"Convert task 'Code Review' to a subtask of 'Release v2.0'"
"Promote subtask 'Bug Fix' to a main task"
"Show me the task hierarchy for 'Launch Project' with completion tracking"
"Create multiple tasks for project launch: 'Design mockups', 'Write documentation', 'Set up CI/CD'"
"Update all high priority tasks to be due next week"
"Complete all tasks containing 'review' in project 12345"
"Delete all tasks with priority 1 that are overdue"
"Add comment 'This needs urgent attention' to task 'Review PR'"
"Add comment with attachment to task 67890"
"Show all comments for task 'Team Meeting'"
"Get comments for project 12345"
"Show me all my labels"
"Create a new label called 'Urgent' with red color"
"Update the 'Work' label to be blue and mark as favorite"
"Delete the unused 'Old Project' label"
"Get usage statistics for all my labels"
"Show all my tasks"
"List high priority tasks due this week"
"Get tasks in project 12345"
"Test my Todoist connection"
"Run basic tests on all Todoist features" // Default: read-only API tests
"Run enhanced tests on all Todoist features" // Full CRUD testing with cleanup
"Benchmark Todoist API performance with 10 iterations"
"Validate that all MCP tools are working correctly"
When dry-run mode is enabled (DRYRUN=true), use normal commands - they'll automatically be simulated:
"Create a test task with priority 1"
"Update all overdue tasks to be due tomorrow"
"Delete all completed tasks in project 12345"
"Create 5 subtasks under task 'Project Planning'"
All these operations will validate against your real data but won't make any changes.
"Test my Todoist connection"
"Show me all my Todoist projects"
"Create a new project called 'Claude Integration Test'"
"Create a task 'Try out MCP integration' in my Inbox"
"Add a high priority task 'Review project setup' due tomorrow"
"Show me all my tasks"
"Create a section called 'In Progress' in my work project"
"Move the setup task to the In Progress section"
"Add a comment 'This is working great!' to my test task"
"Create multiple tasks: 'Plan meeting agenda', 'Prepare slides', 'Send invites'"
"Complete all tasks containing 'test' in the Claude project"
"Update all high priority tasks to be due next week"
# Clone the repository git clone https://github.com/greirson/mcp-todoist.git # Navigate to directory cd mcp-todoist # Install dependencies npm install # Build the project npm run build
# Watch for changes and rebuild npm run watch # Run tests npm run test # Run tests in watch mode npm run test:watch # Run tests with coverage npm run test:coverage # Lint code npm run lint # Fix linting issues npm run lint:fix # Format code npm run format # Check formatting npm run format:check
The codebase follows a clean, modular architecture designed for maintainability and scalability:
src/index.ts: Main server entry point with request routingsrc/types.ts: TypeScript type definitions and interfacessrc/type-guards.ts: Runtime type validation functionssrc/validation.ts: Input validation and sanitizationsrc/errors.ts: Custom error types with structured handlingsrc/cache.ts: In-memory caching for performance optimizationsrc/tools/: Domain-specific MCP tool definitions organized by functionality:
task-tools.ts - Task management (9 tools)subtask-tools.ts - Subtask operations (5 tools)project-tools.ts - Project/section management (4 tools)comment-tools.ts - Comment operations (2 tools)label-tools.ts - Label management (5 tools)test-tools.ts - Testing and validation (3 tools)index.ts - Centralized exportssrc/handlers/: Domain-separated business logic modules:
task-handlers.ts - Task CRUD and bulk operationssubtask-handlers.ts - Hierarchical task managementproject-handlers.ts - Project and section operationscomment-handlers.ts - Comment creation and retrievallabel-handlers.ts - Label CRUD and statisticstest-handlers.ts - API testing infrastructuretest-handlers-enhanced/ - Comprehensive CRUD testing frameworksrc/utils/: Shared utility functions:
api-helpers.ts - API response handling utilitieserror-handling.ts - Centralized error managementparameter-transformer.ts - MCP to Todoist SDK parameter format conversiondry-run-wrapper.ts - Dry-run mode implementationSee CHANGELOG.md for a detailed history of all changes.
For migration guides and breaking changes, see the full changelog.
Contributions are welcome! Feel free to submit a Pull Request.
This project is licensed under the MIT License - see the LICENSE file for details.
If you encounter any issues or need support, please file an issue on the GitHub repository.