Todoist MCP

Live

OAUTH 2.1

PRODUCTIVITY

Productivity

Every task, project, label, and reminder your agent needs to manage lives in Todoist. Todoist MCP gives your agent per-user OAuth access to task management data scoped to the authorizing account.

  • Acts as the user: Task creation and project access stays tied to the Todoist account that authorized the agent.
  • Credentials stay vaulted: AES-256, resolved at request time, never in LLM context.
  • Scoped before every call: User permissions enforced. 90-day audit trail.
Todoist MCP
agent · Acme Q3
Run
Show me all priority 1 tasks due this week across all my projects.
S
todoist_tasks_list
78ms
Productivity agent
8 priority-1 tasks due this week: 3 in Work, 2 in Personal, 2 in [Project X], 1 in Inbox. Earliest due today: submit Q4 report (9am), prep board deck (3pm).
Sources: Todoist all projects, P1 filter
todoistmcp
8
18:29
Message Claude...

Tools your agent reaches for on Todoist MCP, scoped per user.

CALL ANY TOOL
Manage tasks, projects, labels, and filters in Todoist. Same toolkit, every framework, no auth plumbing.
todoistmcp_add-comments
Add-comments
Add multiple comments to tasks or projects, optionally notifying collaborators. Each comment must specify either taskId or projectId.
Parameters
Name
Type
Required
Description
comments
array
Required
The array of comments to add.
todoistmcp_add-filters
Add-filters
todoistmcp_add-labels
Add-labels
todoistmcp_add-projects
Add-projects
todoistmcp_add-sections
Add-sections
todoistmcp_analyze-project-health
Analyze-project-health
todoistmcp_complete-tasks
Complete-tasks
todoistmcp_delete-object
Delete-object
todoistmcp_fetch
Fetch
todoistmcp_find-activity
Find-activity
todoistmcp_find-completed-tasks
Find-completed-tasks
todoistmcp_find-goals
Find-goals
todoistmcp_find-project-collaborators
Find-project-collaborators
todoistmcp_find-reminders
Find-reminders
todoistmcp_find-tasks
Find-tasks
todoistmcp_get-overview
Get-overview
todoistmcp_get-productivity-stats
Get-productivity-stats
todoistmcp_get-project-health
Get-project-health
todoistmcp_import-project-template
Import-project-template
todoistmcp_list-workspaces
List-workspaces
todoistmcp_manage-assignments
Manage-assignments
todoistmcp_project-move
Project-move
todoistmcp_reschedule-tasks
Reschedule-tasks
todoistmcp_search
Search
todoistmcp_update-comments
Update-comments
todoistmcp_update-filters
Update-filters
todoistmcp_update-labels
Update-labels
todoistmcp_update-projects
Update-projects
todoistmcp_update-sections
Update-sections
todoistmcp_user-info
User-info

For more tools, view docs.

Build your Agent
Drop the toolkit in, point it at the user, and your agent can manage Todoist tasks and projects from the first run.
Python · LlamaIndex
import { ScalekitClient } from "@scalekit-sdk/node";
import { DynamicStructuredTool } from "@langchain/core/tools";
import { createReactAgent } from "@langchain/langgraph/prebuilt";
import { z } from "zod";

const sk = new ScalekitClient(envUrl, clientId, clientSecret);

const { tools } = await sk.tools.listScopedTools("user_123", {
filter: { connectionNames: ["todoistmcp"], toolNames: ["todoist_tasks_list", "todoist_task_create", "todoist_task_complete"] },
pageSize: 100,
});

const lcTools = tools.map((t) => new DynamicStructuredTool({
name: t.tool.definition.name,
description: t.tool.definition.description,
schema: z.object({}).passthrough(),
func: async (args) => {
const { data } = await sk.tools.executeTool({
toolName: t.tool.definition.name,
identifier: "user_123",
params: args,
});
return JSON.stringify(data);
},
}));

const agent = createReactAgent({ llm, tools: lcTools });
import { ScalekitClient } from "@scalekit-sdk/node";
import OpenAI from "openai";

const sk = new ScalekitClient(envUrl, clientId, clientSecret);
const openai = new OpenAI();

const { tools } = await sk.tools.listScopedTools("user_123", {
filter: { connectionNames: ["todoistmcp"], toolNames: ["todoist_tasks_list", "todoist_task_create", "todoist_task_complete"] },
pageSize: 100,
});

const llmTools = tools.map((t) => ({
type: "function",
function: {
name: t.tool.definition.name,
description: t.tool.definition.description,
parameters: t.tool.definition.input_schema,
},
}));

const resp = await openai.responses.create({
model: "gpt-4o", input: prompt, tools: llmTools,
});
import { ScalekitClient } from "@scalekit-sdk/node";
import Anthropic from "@anthropic-ai/sdk";

const sk = new ScalekitClient(envUrl, clientId, clientSecret);
const anthropic = new Anthropic();

const { tools } = await sk.tools.listScopedTools("user_123", {
filter: { connectionNames: ["todoistmcp"], toolNames: ["todoist_tasks_list", "todoist_task_create", "todoist_task_complete"] },
pageSize: 100,
});

const llmTools = tools.map((t) => ({
name: t.tool.definition.name,
description: t.tool.definition.description,
input_schema: t.tool.definition.input_schema,
}));

const msg = await anthropic.messages.create({
model: "claude-sonnet-4-6", max_tokens: 1024,
tools: llmTools,
messages: [{ role: "user", content: prompt }],
});
import { Agent } from "@google/adk/agents";
import {
MCPToolset, StreamableHTTPConnectionParams,
} from "@google/adk/tools/mcp";

const toolset = new MCPToolset({
connectionParams: new StreamableHTTPConnectionParams({
url: "https://mcp.scalekit.com/todoistmcp",
headers: { Authorization: `Bearer ${userScopedToken}` },
}),
});

const agent = new Agent({
name: "agent", model: "gemini-2.0-flash",
tools: await toolset.getTools(),
});
Try these prompts
Paste any prompt into your productivity agent to start managing Todoist tasks.
Search & recall
Copy the prompt
Copied
List all priority-1 tasks due this week.
Copy the prompt
Copied
Show all overdue tasks in my Todoist.
Copy the prompt
Copied
List all tasks labeled [label] across all projects.
Action & create
Copy the prompt
Copied
Create a task: [title] due [date] with priority [1] in [project].
Copy the prompt
Copied
Mark task [ID] as complete.
Copy the prompt
Copied
List all projects in my Todoist and their task counts.
SEE HOW AUTH WORKS
Users authorize Todoist once. Their credentials stay vaulted, every task action runs under their identity, and every call is logged.
1
Authorize
Your user connects
Todoist MCP
once. We tie it to their identity and the meetings they approved — no shared bot account, no org-wide access
Who:
user ‘A’
when:
Once per user
access:
Limited to user
2
Store
Their
Todoist MCP
token lives in a vault scoped to them. User A's meetings are never reachable by an agent acting for user B, even on the same connection
vault:
encrypted
scope:
per-user
tokens:
auto-refreshed
3
Resolve
When your agent calls a
Todoist MCP
tool, we fetch the right token server-side. It never touches your agent, never appears in the LLM context, never shows up in your logs
speed:
~40ms
check:
before every call
seen by:
nobody
4
Audit
Every
Todoist MCP
tool call is logged — who triggered it, which meeting was fetched, what came back. 90 days of history, tied to the user who authorized it
history:
90 days
export:
SIEM-ready
logged:
every call
Test other agents
Same per-user auth pattern across other productivity and project management connectors.
Support and Ops Teams
Email-to-calendar agent
Reads scheduling intent out of Gmail threads, resolves the times everyone actually has free, and creates the event on the user's own Google Calendar. No shared service account.
Support and Ops Teams
Meeting prep
Pulls agenda, participant context, and open action items before every meeting.
GTM and RevOps Teams
Sales call prep agent
Reads tomorrow's calls from Google Calendar, mines past Granola notes and Attio history for context, and delivers each rep a prep brief in Slack, scoped to the calls that rep actually owns.
GTM and RevOps Teams
CRM AI agent
Reads the Granola transcript after every call, extracts next steps and updates the HubSpot record, drafts the follow-up in Gmail, and confirms in Slack, all on the rep's own delegated OAuth.
Test other agents
Same per-user auth pattern across other productivity and project management connectors.
OPS
Email-to-calendar scheduling agent
Read scheduling intent out of Gmail threads, resolve mutual free time, and create the Google Calendar event.
OPS
Meeting prep agent
Assemble the agenda, HubSpot attendee history, and open action items from Gmail before every meeting on the calendar.
SALES
Sales call prep agent
Read tomorrow's calls from Google Calendar, mine Granola notes and Attio history, and deliver each rep a prep brief in Slack.
GTM
CRM AI agent
Turn each Granola call transcript into a HubSpot record update, a drafted Gmail follow-up, and a Slack recap.
Why Scalekit
Secure your agent's access. Connectors ship in minutes
01.
Shared tokens break per-user analytics
A shared token looks fine in a demo. In production every call looks like a service account. Scalekit resolves the real user credential so attribution, audit, and scope stay accurate.
// shared token
 audit → bot_service_account
 user_filter → broken

 // scalekit
 audit → user_abc
 scope → enforced ✓
02.
Authentication is not authorization
03.
Multi-tenancy is architectural
04.
Todoist MCP today. Others tomorrow.
“Our agents act across Salesforce, Gong, Google Drive, and more, on behalf of every customer. Scalekit behind the scenes meant we can keep adding tools without ever rebuilding how credentials or tool calling work.”
Venu Madhav Kattagoni
Head of Engineering / Von
FAQs
Frequently Asked Questions
Does the agent access Todoist as the user or a shared account?
As the user. Each person authorizes once and all task actions are attributed to that user's Todoist account.
Where is the Todoist OAuth token stored?
In Scalekit's AES-256 vault, namespaced per tenant. Tokens never appear in prompts or LLM context.
Can I restrict the agent to read-only task access?
Yes. Use listScopedTools to allow task listing without granting creation or completion.
What happens when a user revokes Todoist access?
The connection is invalidated on the next tool call. Subsequent requests fail closed.
Can the agent create Todoist tasks from Slack messages in one workflow?
Yes. A single agent can read Slack messages and create Todoist tasks in the same workflow, using the same user identity.
What other MCP connectors does Scalekit support?
Scalekit runs the Asana MCP server, Notion MCP server, and Trello MCP server on the same per-user auth, token vault, and audit trail. Browse 500+ connectors in the MCP connector directory.
Start in your coding agent
Up and running in one command
Install the Scalekit skill in your editor of choice. Connector, auth, tools, prompt, all wired up
Claude Code REPL
/plugin marketplace add scalekit-inc/claude-code-authstack
/plugin install agentkit@scalekit-auth-stack
Cursor Code REPL
# ~/.cursor/mcp.json
{
""mcpServers"": {
""todoistmcp"": {
""url"": ""https://mcp.scalekit.com/todoistmcp"",
""headers"": { ""Authorization"": ""Bearer $SCALEKIT_TOKEN"" }
}
}
}
Codex Code REPL
# ~/.codex/config.toml
[mcp_servers.todoistmcp]
url = ""https://mcp.scalekit.com/todoistmcp""
auth_env = ""SCALEKIT_TOKEN""
Copilot Code REPL
# .vscode/mcp.json
{
""servers"": {
""todoistmcp"": {
""url"": ""https://mcp.scalekit.com/todoistmcp"",
""type"": ""http""
}
}
}