Integrate
Integrations

Todoist

Manage tasks, projects, and labels

The Todoist integration provides access to Todoist's API through the Integrate MCP server.

Installation

The Todoist integration is included with the SDK:

import { todoistIntegration } from "integrate-sdk/server";

Setup

1. Create a Todoist App

  1. Go to Todoist App Console
  2. Create a new app
  3. Configure OAuth settings
  4. Note your Client ID and Client Secret

2. Configure the Integration on Your Server

Add the Todoist integration to your server configuration. The integration automatically reads TODOIST_CLIENT_ID and TODOIST_CLIENT_SECRET from your environment variables:

import { createMCPServer, todoistIntegration } from "integrate-sdk/server";

export const { client: serverClient } = createMCPServer({
  apiKey: process.env.INTEGRATE_API_KEY,
  integrations: [
    todoistIntegration({
      scopes: ["data:read_write"], // Optional
    }),
  ],
});

You can override the environment variables by passing explicit values:

todoistIntegration({
  clientId: process.env.CUSTOM_TODOIST_ID,
  clientSecret: process.env.CUSTOM_TODOIST_SECRET,
  scopes: ["data:read_write"],
});

3. Client-Side Usage

The default client automatically includes all integrations. You can use it directly:

import { client } from "integrate-sdk";

await client.authorize("todoist");
const tasks = await client.todoist.listTasks({});

If you're using a custom client, add the integration to the integrations array:

import { createMCPClient, todoistIntegration } from "integrate-sdk";

const customClient = createMCPClient({
  integrations: [todoistIntegration()],
});

Configuration Options

Prop

Type

Available Tools

Projects

  • todoist_list_projects - List all projects
  • todoist_get_project - Get details of a specific project
  • todoist_create_project - Create a new project
  • todoist_update_project - Update an existing project
  • todoist_delete_project - Delete a project
  • todoist_archive_project - Archive a project

Tasks

  • todoist_list_tasks - List active tasks with optional filters
  • todoist_get_task - Get details of a specific task
  • todoist_create_task - Create a new task
  • todoist_update_task - Update an existing task
  • todoist_complete_task - Mark a task as complete
  • todoist_delete_task - Delete a task permanently
  • todoist_reopen_task - Reopen a completed task
  • todoist_move_task - Move a task to a different project, section, or parent
  • todoist_quick_add_task - Add a task using natural language
  • todoist_get_completed_tasks - Get completed tasks
  • todoist_filter_tasks - Get tasks matching a Todoist filter expression

Sections

  • todoist_list_sections - List sections, optionally filtered by project
  • todoist_create_section - Create a new section in a project
  • todoist_get_section - Get details of a specific section
  • todoist_update_section - Rename a section
  • todoist_delete_section - Delete a section (and all tasks in it)

Comments

  • todoist_list_comments - List comments on a task or project
  • todoist_create_comment - Add a comment to a task or project
  • todoist_get_comment - Get details of a specific comment
  • todoist_update_comment - Update a comment's text
  • todoist_delete_comment - Delete a comment

Labels

  • todoist_list_labels - List all personal labels
  • todoist_create_label - Create a new label
  • todoist_update_label - Update a label
  • todoist_delete_label - Delete a label

Reminders

  • todoist_list_reminders - List all reminders
  • todoist_create_reminder - Create a reminder for a task

Examples

Create a Task

const result = await client.todoist.createTask({
  content: "Review pull request",
  description: "Review the authentication PR",
  projectId: "2203306141",
  priority: 4,
  dueString: "tomorrow at 10:00",
  labels: ["work", "urgent"],
});

console.log("Task created:", result);

List Tasks

const result = await client.todoist.listTasks({
  projectId: "2203306141",
  filter: "today | overdue",
});

console.log("Tasks:", result);

Create a Project

const result = await client.todoist.createProject({
  name: "New Project",
  color: "blue",
  isFavorite: true,
});

console.log("Project created:", result);

Complete a Task

const result = await client.todoist.completeTask({
  taskId: "1234567890",
});

console.log("Task completed:", result);

OAuth Scopes

The following scope is supported:

  • data:read_write - Full access to read and write data (default)

Error Handling

try {
  const result = await client.todoist.createTask({
    content: "New task",
    projectId: "2203306141",
  });
} catch (error) {
  if (error.message.includes("not found")) {
    console.error("Project not found");
  } else if (error.message.includes("authentication")) {
    console.error("Authentication failed");
  } else {
    console.error("Unexpected error:", error);
  }
}

Next Steps

On this page