ticktick-mcp-server
Provides tools for managing tasks, projects, subtasks, and habits in TickTick, including creating, reading, updating, and deleting tasks and projects with priorities, due dates, reminders, and recurring rules.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@ticktick-mcp-servercreate a high-priority task 'Finish report' due Friday"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
TickTick MCP Server
MCP Server for the TickTick API, enabling task management, project organization, habit tracking, and more.
Features
✅ Task Management: Create, read, update, and delete tasks with all available properties
📊 Project Management: Create, read, update, and delete projects with customizable views
📋 Subtask Support: Full support for managing subtasks within parent tasks
🔄 Complete Task Control: Set priorities, due dates, reminders, and recurring rules
🔐 OAuth Authentication: Full OAuth2 implementation for secure API access
⚠️ Comprehensive Error Handling: Clear error messages for common issues
Tools
get_task_by_idsGet a specific task by project ID and task ID
Inputs:
projectId(string): Project identifiertaskId(string): Task identifier
Returns: Task object matching
TickTickTaskSchema
create_taskCreate a new task in a project
Inputs:
title(string): Task titleprojectId(string): Project idcontent(optional string): Task contentdesc(optional string): Task descriptionisAllDay(optional boolean): Is all day taskstartDate(optional string): Task start date in "yyyy-MM-dd'T'HH:mm:ssZ" formatdueDate(optional string): Task due date in "yyyy-MM-dd'T'HH:mm:ssZ" formattimeZone(optional string): Task time zone (e.g., "America/Los_Angeles")reminders(optional string[]): List of reminder triggers in iCalendar formatrepeatFlag(optional string): Task repeat flag in iCalendar formatpriority(optional number): Task priority (None: 0, Low: 1, Medium: 3, High: 5)sortOrder(optional string): Task sort orderitems(optional array): List of subtasks with:title(string): Subtask item titlestartDate(optional string): Subtask date in "yyyy-MM-dd'T'HH:mm:ssZ" formatisAllDay(optional boolean): Is all day subtask itemsortOrder(optional number): Subtask item sort ordertimeZone(optional string): Subtask timezonestatus(optional number): Completion status (Normal: 0, Completed: 1)completedTime(optional string): Completion time in "yyyy-MM-dd'T'HH:mm:ssZ" format
Returns: Created task object matching
TickTickTaskSchema
update_taskUpdate an existing task
Inputs:
taskId(string): Task identifier - Pathid(string): Task identifier - BodyprojectId(string): Project idAll optional fields from
create_task
Returns: Updated task object matching
TickTickTaskSchema
complete_taskMark a task as completed
Inputs:
taskId(string): Task identifierprojectId(string): Project identifier
Returns: void
delete_taskDelete a task from a project
Inputs:
taskId(string): Task identifierprojectId(string): Project identifier
Returns: void
get_user_projectsGet all projects for the authenticated user
Inputs: None
Returns: Array of project objects matching
TickTickProjectSchema
get_project_by_idGet a specific project by ID
Inputs:
projectId(string): Project identifier
Returns: Project object matching
TickTickProjectSchema
get_project_with_dataGet project details along with tasks and columns
Inputs:
projectId(string): Project identifier
Returns: Object containing:
project: Project object matchingTickTickProjectSchematasks: Array of task objects matchingTickTickTaskSchemacolumns: Optional array of column objects with:id(optional string)projectId(optional string)name(optional string)sortOrder(optional number)
create_projectCreate a new project
Inputs:
name(string): Project namecolor(optional string): Project color (default: '#4772FA')viewMode(optional string): View mode ('list', 'kanban', 'timeline') (default: 'list')kind(optional string): Project kind ('TASK', 'NOTE') (default: 'TASK')
Returns: Created project object matching
TickTickProjectSchema
update_projectUpdate an existing project
Inputs:
projectId(string): Project identifiername(optional string): Project namecolor(optional string): Project colorsortOrder(optional number): Project sort orderviewMode(optional string): View mode ('list', 'kanban', 'timeline')kind(optional string): Project kind ('TASK', 'NOTE')
Returns: Updated project object matching
TickTickProjectSchema
delete_projectDelete a project
Inputs:
projectId(string): Project identifier
Returns: void
Schema References
TickTickTaskSchema: Defines the structure for task objects including:Basic task properties (id, title, description)
Dates and time settings
Priority and status
Checklist items and subtasks
TickTickProjectSchema: Defines the structure for project objects including:Project identification and naming
Display settings (color, view mode)
Permissions and organization
Tasks Properties
When creating or updating tasks, you can include these properties:
Priority Levels:
0: None1: Low3: Medium5: High
Status Values:
0: Normal (not completed)2: Completed
Reminder Format:
Example:
["TRIGGER:P0DT9H0M0S", "TRIGGER:PT0S"]Follows iCalendar TRIGGER format
Recurring Rules (repeatFlag):
Example:
"RRULE:FREQ=DAILY;INTERVAL=1"Uses RFC 5545 recurrence rules
Date Format:
ISO 8601 format:
"yyyy-MM-dd'T'HH:mm:ssZ"Example:
"2019-11-13T03:00:00+0000"
Projects Properties
When creating or updating projects, you can use these properties:
View Modes:
"list": Standard list view"kanban": Kanban board view"timeline": Timeline view
Project Kinds:
"TASK": Task-oriented project"NOTE": Note-oriented project
Setup
OAuth Authentication
To enable OAuth authentication with TickTick, you'll need to register your app and obtain API credentials:
Create an account on the TickTick Developer Portal
Register a new application
Set the OAuth redirect URL to: http://localhost:8000/callback
Copy the generated Client ID (TICKTICK_CLIENT_ID) and Client Secret (TICKTICK_CLIENT_SECRET)
First-Time Authorization Flow
When using the TickTick MCP server for the first time:
You'll be prompted to authorize the application
A browser window will open with the TickTick login page
After login, you'll be asked to grant permissions
The access token will be displayed in the page
Copy this token and set it as the TICKTICK_ACCESS_TOKEN environment variable
Generate Access Token
When you need to generate a new access token (either for first-time setup or when the token expires), follow these steps:
Configure your credentials using one of these methods:
Option 1: .env file (Recommended)
Create a
.envfile in your project root:TICKTICK_CLIENT_ID="<YOUR_CLIENT_ID>" TICKTICK_CLIENT_SECRET="<YOUR_CLIENT_SECRET>"Then load it:
source .envThis method is recommended because:
Credentials persist between terminal sessions
Easier to manage multiple configurations
Less prone to shell history leaks
Can be easily backed up (remember to exclude from version control)
Option 2: Terminal Environment Variables
Use single quotes if your credentials contain special characters. Note that these variables will only persist in your current terminal session:
export TICKTICK_CLIENT_ID='<YOUR_CLIENT_ID>' export TICKTICK_CLIENT_SECRET='<YOUR_CLIENT_SECRET>'Run the authentication command:
If using the published package:
npx @alexarevalo.ai/mcp-server-ticktick ticktick-authIf running the MCP server locally:
npm run start:authThe process will:
Launch your default browser
Direct you to TickTick's login page
Request necessary permissions
Generate and display your access token
Save the access token:
echo "TICKTICK_ACCESS_TOKEN=\"<GENERATED_TOKEN>\"" >> .env source .env
Security Tips:
Add
.envto your.gitignorefileNever commit credentials to version control
Access tokens expire after 180 days - you'll need to regenerate them
Usage with Claude Desktop
To use this with Claude Desktop, add the following to your claude_desktop_config.json:
NPX
{
"mcpServers": {
"ticktick": {
"command": "npx",
"args": ["-y", "@alexarevalo.ai/mcp-server-ticktick"],
"env": {
"TICKTICK_CLIENT_ID": "<YOUR_CLIENT_ID>",
"TICKTICK_CLIENT_SECRET": "<YOUR_CLIENT_SECRET>",
"TICKTICK_ACCESS_TOKEN": "<YOUR_ACCESS_TOKEN>"
}
}
}
}Docker
{
"mcpServers": {
"ticktick": {
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"-e",
"TICKTICK_CLIENT_ID",
"-e",
"TICKTICK_CLIENT_SECRET",
"-e",
"TICKTICK_ACCESS_TOKEN",
"mcp/ticktick"
],
"env": {
"TICKTICK_CLIENT_ID": "<YOUR_CLIENT_ID>",
"TICKTICK_CLIENT_SECRET": "<YOUR_CLIENT_SECRET>",
"TICKTICK_ACCESS_TOKEN": "<YOUR_ACCESS_TOKEN>"
}
}
}
}Installing via Smithery
To install ticktick-mcp-server for Claude Desktop automatically via Smithery:
npx -y @smithery/cli install @alexarevalo9/ticktick-mcp-server --client claudeBuild
Docker build:
docker build -t mcp/ticktick -f src/ticktick/Dockerfile .License
This MCP server is licensed under the MIT License. This means you are free to use, modify, and distribute the software, subject to the terms and conditions of the MIT License. For more details, please see the LICENSE file in the project repository.
This server cannot be installed
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Latest Blog Posts
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/alexarevalo9/ticktick-mcp-server'
If you have feedback or need assistance with the MCP directory API, please join our Discord server