TickTick MCP

Live

OAUTH 2.1

PRODUCTIVITY

Productivity

Every task, project, habit, and focus session your productivity agent needs to manage lives in TickTick. TickTick MCP gives your agent per-user OAuth access to personal productivity data scoped to the authorizing account.

  • Acts as the user: Task creation and project access stays tied to the TickTick 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.
TickTick MCP
agent · Acme Q3
Run
List all overdue tasks across my projects and organize them by priority.
S
ticktick_tasks_list
89ms
Productivity agent
11 overdue tasks. High priority: send Q4 report (3d overdue), review auth spec (2d), team 1:1 prep (1d). Medium: 6 tasks. Low: 2 tasks.
Sources: TickTick all projects, overdue filter
ticktickmcp
11
18:29
Message Claude...

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

CALL ANY TOOL
Manage tasks, projects, habits, and Pomodoro focus sessions in TickTick. Same toolkit, every framework, no auth plumbing.
ticktickmcp_add_comment
Add Comment
Add a plain-text comment (max 1024 characters) to a task.
Parameters
Name
Type
Required
Description
project_id
string
Required
Unique ID of the project. Get it from list_projects.
task_id
string
Required
Unique ID of the task. Get it from search_task or get_task_in_project.
title
string
Required
Text content of the comment (plain text, max 1024 characters).
ticktickmcp_batch_add_tasks
Batch Add Tasks
ticktickmcp_batch_update_tasks
Batch Update Tasks
ticktickmcp_complete_task
Complete Task
ticktickmcp_complete_tasks_in_project
Complete Tasks In Project
ticktickmcp_create_column
Create Column
ticktickmcp_create_focus
Create Focus
ticktickmcp_create_habit
Create Habit
ticktickmcp_create_project
Create Project
ticktickmcp_create_project_group
Create Project Group
ticktickmcp_create_tag
Create Tag
ticktickmcp_create_task
Create Task
ticktickmcp_delete_comment
Delete Comment
ticktickmcp_delete_focus
Delete Focus
ticktickmcp_delete_project_group
Delete Project Group
ticktickmcp_delete_task
Delete Task
ticktickmcp_fetch
Fetch
ticktickmcp_filter_tasks
Filter Tasks
ticktickmcp_get_comment
Get Comment
ticktickmcp_get_focus
Get Focus
ticktickmcp_get_focuses_by_time
Get Focuses By Time
ticktickmcp_get_habit
Get Habit
ticktickmcp_get_habit_checkins
Get Habit Checkins
ticktickmcp_get_project_by_id
Get Project By Id
ticktickmcp_get_project_with_undone_tasks
Get Project With Undone Tasks
ticktickmcp_get_task_by_id
Get Task By Id
ticktickmcp_get_task_in_project
Get Task In Project
ticktickmcp_get_user_preference
Get User Preference
ticktickmcp_list_columns
List Columns
ticktickmcp_list_completed_tasks_by_date
List Completed Tasks By Date

For more tools, view docs.

Build your Agent
Drop the toolkit in, point it at the user, and your agent can manage TickTick 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: ["ticktickmcp"], toolNames: ["ticktick_tasks_list", "ticktick_task_create", "ticktick_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: ["ticktickmcp"], toolNames: ["ticktick_tasks_list", "ticktick_task_create", "ticktick_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: ["ticktickmcp"], toolNames: ["ticktick_tasks_list", "ticktick_task_create", "ticktick_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/ticktickmcp",
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 TickTick tasks and habits.
Search & recall
Copy the prompt
Copied
List all overdue tasks across all my projects.
Copy the prompt
Copied
Show my habits and current streak for each.
Copy the prompt
Copied
Get my Pomodoro focus session stats for this week.
Action & create
Copy the prompt
Copied
Create a task: [title] due [date] with priority [high] in [project].
Copy the prompt
Copied
List all high-priority tasks in the [project] project.
Copy the prompt
Copied
Show all incomplete tasks due today.
SEE HOW AUTH WORKS
Users authorize TickTick once. Their credentials stay vaulted, every task action runs under their identity, and every call is logged.
1
Authorize
Your user connects
TickTick 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
TickTick 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
TickTick 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
TickTick 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.
OPS
Email-to-calendar scheduling agent
Parse scheduling intent from Gmail threads and create Google Calendar events with the right attendees and timezone.
ENGINEERING
Engineering standup agent
Aggregate GitHub and GitLab activity, link to Jira, and post a daily standup digest to Slack. No async updates.
Why Scalekit
Secure your agent's access. Connectors ship in minutes
Other connector libraries treat auth as a demo afterthought. Scalekit starts with user identity, scope enforcement, and audit.
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.
TickTick 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 TickTick as the user or a shared account?
As the user. Each person authorizes once and all task actions are attributed to that user's TickTick account.
Where is the TickTick 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 and project listing without granting task creation.
What happens when a user revokes TickTick access?
The connection is invalidated on the next tool call. Subsequent requests fail closed.
Can the agent create TickTick tasks from meeting action items in one workflow?
Yes. A single agent can pull action items from OtterAI or Fireflies and create TickTick tasks in the same workflow.
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"": {
""ticktickmcp"": {
""url"": ""https://mcp.scalekit.com/ticktickmcp"",
""headers"": { ""Authorization"": ""Bearer $SCALEKIT_TOKEN"" }
}
}
}
Codex Code REPL
# ~/.codex/config.toml
[mcp_servers.ticktickmcp]
url = ""https://mcp.scalekit.com/ticktickmcp""
auth_env = ""SCALEKIT_TOKEN""
Copilot Code REPL
# .vscode/mcp.json
{
""servers"": {
""ticktickmcp"": {
""url"": ""https://mcp.scalekit.com/ticktickmcp"",
""type"": ""http""
}
}
}