TickTick
Manage tasks, projects, and habits using the TickTick API.
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_ids- Get a specific task by project ID and task ID
- Inputs:
projectId(string): Project identifiertaskId(string): Task identifier
- Returns: Task object matching
TickTickTaskSchema
-
create_task- Create 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_task- Update an existing task
- Inputs:
taskId(string): Task identifier - Pathid(string): Task identifier - BodyprojectId(string): Project id- All optional fields from
create_task
- Returns: Updated task object matching
TickTickTaskSchema
-
complete_task- Mark a task as completed
- Inputs:
taskId(string): Task identifierprojectId(string): Project identifier
- Returns: void
-
delete_task- Delete a task from a project
- Inputs:
taskId(string): Task identifierprojectId(string): Project identifier
- Returns: void
-
get_user_projects- Get all projects for the authenticated user
- Inputs: None
- Returns: Array of project objects matching
TickTickProjectSchema
-
get_project_by_id- Get a specific project by ID
- Inputs:
projectId(string): Project identifier
- Returns: Project object matching
TickTickProjectSchema
-
get_project_with_data- Get 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_project- Create 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_project- Update 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_project- Delete 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
- Example:
- Recurring Rules (repeatFlag):
- Example:
"RRULE:FREQ=DAILY;INTERVAL=1" - Uses RFC 5545 recurrence rules
- Example:
- Date Format:
- ISO 8601 format:
"yyyy-MM-dd'T'HH:mm:ssZ" - Example:
"2019-11-13T03:00:00+0000"
- ISO 8601 format:
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.gitignorefile- Never 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 claude
Build
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.
関連サーバー
Kone.vc
スポンサーMonetize your AI agent with contextual product recommendations
MCP Calendar Assistant
An intelligent assistant for managing calendars and tasks.
Anytype MCP Server
Interact with the Anytype API using natural language.
Brainstorm
Multi-round AI debates between GPT, DeepSeek, Groq, and Claude — all models argue, critique, and synthesize inside your coding assistant.
mpesa-mcp
MCP server for M-Pesa (Safaricom Daraja) and Africa's Talking APIs. Gives AI coding assistants — Claude Code, Cursor, GitHub Copilot — direct access to East African payment and SMS infrastructure from a single server. What it does: STK Push payments via Safaricom Daraja (triggers M-Pesa prompt on user's phone) Transaction status queries SMS to 20+ African telecom networks via Africa's Talking Airtime top-up across East and West Africa Safety: All 5 tools are annotated per MCP 2025-03-26 spec — payment and SMS tools declare destructiveHint: true, so Claude Desktop and other clients show confirmation dialogs before executing. Query tools declare readOnlyHint: true for auto-approval. Install: pip install mpesa-mcp Who it's for: Developers building AI agents for East African markets. M-Pesa handles ~$50B/year in transactions and reaches 50M+ users. Africa's Talking reaches 300M+ phones across 20+ telecoms.
clinical-trial-eligibility
Standardized matching logic for patient eligibility against clinical trial criteria.
ChromeDP
Generate PDFs from HTML content or URLs using a headless Chrome/Chromium browser.
Jira MCP Server by CData
A read-only MCP server for Jira, enabling LLMs to query live Jira data using the CData JDBC Driver.
clickup-mcp
Lightweight ClickUp MCP server with 35 tools. Token-optimized responses reduce API verbosity by 95%+ (3500 chars → 160). Tasks, comments, checklists, tags, dependencies.
Intelligent Form Collection Server
An intelligent form collection server for conflict mediation, integrating with large model platforms like Cursor and Dify via the MCP protocol.
Atlassian Confluence
Interact with Atlassian Confluence Cloud spaces, pages, and content in real-time.