by alexarevalo9
A Model Context Protocol (MCP) server designed to integrate with the TickTick task management platform, enabling intelligent context-aware task operations and automation.
ticktick-mcp-server is a Model Context Protocol (MCP) server that integrates with the TickTick task management platform. It enables intelligent, context-aware task operations and automation within TickTick, allowing users to manage tasks, projects, and habits more efficiently through an API.
To use ticktick-mcp-server, you need to set up OAuth authentication with TickTick to obtain API credentials (Client ID, Client Secret, and Access Token). These credentials can be configured via a .env
file or terminal environment variables. After setting up credentials, you can generate an access token by running a specific command (npx @alexarevalo.ia/mcp-server-ticktick ticktick-auth
or npm run start:auth
if running locally). The server can then be integrated with applications like Claude Desktop by configuring it in claude_desktop_config.json
using either NPX or Docker, or by installing it via Smithery.
get_task_by_ids
, create_task
, update_task
, complete_task
, delete_task
, get_user_projects
, get_project_by_id
, get_project_with_data
, create_project
, update_project
, and delete_project
.Q: How do I get my TickTick API credentials?
A: You need to create an account on the TickTick Developer Portal, register a new application, and set the OAuth redirect URL to http://localhost:8000/callback
. This will provide you with the Client ID and Client Secret.
Q: How do I generate an access token?
A: After configuring your Client ID and Client Secret (preferably in a .env
file), you can run npx @alexarevalo.ia/mcp-server-ticktick ticktick-auth
(for the published package) or npm run start:auth
(if running locally). This will open a browser for authorization and display your access token.
Q: How long does the access token last? A: Access tokens expire after 180 days. You will need to regenerate them after this period.
Q: How can I use this with Claude Desktop?
A: You can configure ticktick-mcp-server
in your claude_desktop_config.json
file. Examples are provided for both NPX and Docker setups. Alternatively, you can install it automatically via Smithery using npx -y @smithery/cli install @alexarevalo9/ticktick-mcp-server --client claude
.
Q: What are the available properties for tasks and projects?
A: The README provides detailed information on task properties (e.g., priority levels, status values, reminder format, recurring rules, date format) and project properties (e.g., view modes, project kinds). Schema references for TickTickTaskSchema
and TickTickProjectSchema
are also provided.
MCP Server for the TickTick API, enabling task management, project organization, habit tracking, and more.
get_task_by_ids
projectId
(string): Project identifiertaskId
(string): Task identifierTickTickTaskSchema
create_task
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" formatTickTickTaskSchema
update_task
taskId
(string): Task identifier - Pathid
(string): Task identifier - BodyprojectId
(string): Project idcreate_task
TickTickTaskSchema
complete_task
taskId
(string): Task identifierprojectId
(string): Project identifierdelete_task
taskId
(string): Task identifierprojectId
(string): Project identifierget_user_projects
TickTickProjectSchema
get_project_by_id
projectId
(string): Project identifierTickTickProjectSchema
get_project_with_data
projectId
(string): Project identifierproject
: Project object matching TickTickProjectSchema
tasks
: Array of task objects matching TickTickTaskSchema
columns
: Optional array of column objects with:
id
(optional string)projectId
(optional string)name
(optional string)sortOrder
(optional number)create_project
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')TickTickProjectSchema
update_project
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')TickTickProjectSchema
delete_project
projectId
(string): Project identifierTickTickTaskSchema
: Defines the structure for task objects including:
TickTickProjectSchema
: Defines the structure for project objects including:
When creating or updating tasks, you can include these properties:
0
: None1
: Low3
: Medium5
: High0
: Normal (not completed)2
: Completed["TRIGGER:P0DT9H0M0S", "TRIGGER:PT0S"]
"RRULE:FREQ=DAILY;INTERVAL=1"
"yyyy-MM-dd'T'HH:mm:ssZ"
"2019-11-13T03:00:00+0000"
When creating or updating projects, you can use these properties:
"list"
: Standard list view"kanban"
: Kanban board view"timeline"
: Timeline view"TASK"
: Task-oriented project"NOTE"
: Note-oriented projectTo enable OAuth authentication with TickTick, you'll need to register your app and obtain API credentials:
When using the TickTick MCP server for the first time:
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:
Create a .env
file in your project root:
TICKTICK_CLIENT_ID="<YOUR_CLIENT_ID>"
TICKTICK_CLIENT_SECRET="<YOUR_CLIENT_SECRET>"
Then load it:
source .env
This method is recommended because:
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.ia/mcp-server-ticktick ticktick-auth
If running the MCP server locally:
npm run start:auth
The process will:
Save the access token:
echo "TICKTICK_ACCESS_TOKEN=\"<GENERATED_TOKEN>\"" >> .env
source .env
Security Tips:
- Add
.env
to your.gitignore
file- Never commit credentials to version control
- Access tokens expire after 180 days - you'll need to regenerate them
To use this with Claude Desktop, add the following to your claude_desktop_config.json
:
{
"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>"
}
}
}
}
{
"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>"
}
}
}
}
To install ticktick-mcp-server for Claude Desktop automatically via Smithery:
npx -y @smithery/cli install @alexarevalo9/ticktick-mcp-server --client claude
Docker build:
docker build -t mcp/ticktick -f src/ticktick/Dockerfile .
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.
Reviews feature coming soon
Stay tuned for community discussions and feedback