TickTick MCP Server

TickTick MCP Server

An MCP server that lets your AI assistant manage TickTick tasks, projects, habits, and more through natural language, supporting both TickTick and Dida365.

Category
访问服务器

README

TickTick MCP Server

License: MIT TypeScript MCP Node

An MCP server that lets your AI assistant manage your TickTick tasks, projects, habits, and more through natural language. Works with Claude Code, Cursor, VS Code, Claude Desktop, and any MCP-compatible client.

Also supports Dida365 (the Chinese version of TickTick).


Features

52 tools across two API layers:

Category Tools API
Projects List, create, update, delete V1
Tasks CRUD, batch create, complete, subtasks V1
Smart Queries Due today/tomorrow/this week, overdue, by priority V1
Search & Filter Full-text search, multi-criteria filtering V1
GTD Workflows Engaged tasks, next actions, daily digest V1
Tags List, create, rename, delete, merge V2
Habits Create, check-in, view streaks and history V2
Focus / Pomodoro Heatmaps, time distribution, productivity score V2
Completed Tasks Browse finished tasks with date filtering V2
Kanban Columns Manage columns in kanban projects V2
Project Folders Organize projects into groups V2
Task Organization Move tasks between projects, subtask hierarchy V2
User Profile Profile info, timezone, settings V2

V1 = Official TickTick Open API (OAuth2). V2 = Internal API (session auth) for features not in the public API.


Setup

1. Create a TickTick Developer App

  1. Go to developer.ticktick.com/manage
  2. Click + Create App
  3. Set Redirect URI to: http://localhost:42813/callback
  4. Note your Client ID and Client Secret

2. Install and Authenticate

git clone https://github.com/chrisvanek/ticktick-mcp-ratv.git
cd ticktick-mcp-ratv
npm install && npm run build

# Run the interactive setup wizard
node build/index.js auth

The wizard guides you through:

  1. TickTick login (email + password) — enables V2 features (tags, habits, focus, completed tasks)
  2. OAuth2 flow (Client ID + Secret + browser auth) — enables V1 features (projects, tasks)

Credentials are saved to a local .env file (excluded from git).

3. Connect to Your AI Client

Add the server to your MCP client config. Replace the placeholder values with the credentials from your .env file.

<details> <summary><strong>Claude Code</strong></summary>

CLI (recommended):

claude mcp add ticktick-mcp-server \
  node /absolute/path/to/ticktick-mcp-ratv/build/index.js \
  -e TICKTICK_CLIENT_ID=your_client_id \
  -e TICKTICK_CLIENT_SECRET=your_client_secret \
  -e TICKTICK_ACCESS_TOKEN=your_access_token \
  -e TICKTICK_REFRESH_TOKEN=your_refresh_token \
  -e TICKTICK_USERNAME=your_email \
  -e TICKTICK_PASSWORD=your_password \
  -e TICKTICK_DEVICE_ID=your_device_id \
  -s user

Use -s user (available everywhere), -s project (shared with team), or -s local (single project).

Config file (~/.claude.json or .mcp.json):

{
  "mcpServers": {
    "ticktick": {
      "command": "node",
      "args": ["/absolute/path/to/ticktick-mcp-ratv/build/index.js"],
      "env": {
        "TICKTICK_CLIENT_ID": "your_client_id",
        "TICKTICK_CLIENT_SECRET": "your_client_secret",
        "TICKTICK_ACCESS_TOKEN": "your_access_token",
        "TICKTICK_REFRESH_TOKEN": "your_refresh_token",
        "TICKTICK_USERNAME": "your_email",
        "TICKTICK_PASSWORD": "your_password",
        "TICKTICK_DEVICE_ID": "your_device_id"
      }
    }
  }
}

Verify with /mcp in Claude Code.

</details>

<details> <summary><strong>Cursor</strong></summary>

Create or edit ~/.cursor/mcp.json (global) or .cursor/mcp.json (project):

{
  "mcpServers": {
    "ticktick": {
      "command": "node",
      "args": ["/absolute/path/to/ticktick-mcp-ratv/build/index.js"],
      "env": {
        "TICKTICK_CLIENT_ID": "your_client_id",
        "TICKTICK_CLIENT_SECRET": "your_client_secret",
        "TICKTICK_ACCESS_TOKEN": "your_access_token",
        "TICKTICK_REFRESH_TOKEN": "your_refresh_token",
        "TICKTICK_USERNAME": "your_email",
        "TICKTICK_PASSWORD": "your_password",
        "TICKTICK_DEVICE_ID": "your_device_id"
      }
    }
  }
}

Restart Cursor after saving.

</details>

<details> <summary><strong>VS Code (Copilot Agent Mode)</strong></summary>

Requires VS Code 1.99+ with GitHub Copilot. Create .vscode/mcp.json:

{
  "servers": {
    "ticktick": {
      "command": "node",
      "args": ["/absolute/path/to/ticktick-mcp-ratv/build/index.js"],
      "env": {
        "TICKTICK_CLIENT_ID": "your_client_id",
        "TICKTICK_CLIENT_SECRET": "your_client_secret",
        "TICKTICK_ACCESS_TOKEN": "your_access_token",
        "TICKTICK_REFRESH_TOKEN": "your_refresh_token",
        "TICKTICK_USERNAME": "your_email",
        "TICKTICK_PASSWORD": "your_password",
        "TICKTICK_DEVICE_ID": "your_device_id"
      }
    }
  }
}

</details>

<details> <summary><strong>Claude Desktop</strong></summary>

Edit the config file:

  • macOS: ~/Library/Application Support/Claude/claude_desktop_config.json
  • Windows: %AppData%\Claude\claude_desktop_config.json
{
  "mcpServers": {
    "ticktick": {
      "command": "node",
      "args": ["/absolute/path/to/ticktick-mcp-ratv/build/index.js"],
      "env": {
        "TICKTICK_CLIENT_ID": "your_client_id",
        "TICKTICK_CLIENT_SECRET": "your_client_secret",
        "TICKTICK_ACCESS_TOKEN": "your_access_token",
        "TICKTICK_REFRESH_TOKEN": "your_refresh_token",
        "TICKTICK_USERNAME": "your_email",
        "TICKTICK_PASSWORD": "your_password",
        "TICKTICK_DEVICE_ID": "your_device_id"
      }
    }
  }
}

Quit and relaunch Claude Desktop (Cmd+Q / Alt+F4).

</details>

<details> <summary><strong>Cline (VS Code extension)</strong></summary>

Open the Cline panel > MCP Servers icon > Configure, then add:

{
  "mcpServers": {
    "ticktick": {
      "command": "node",
      "args": ["/absolute/path/to/ticktick-mcp-ratv/build/index.js"],
      "env": {
        "TICKTICK_CLIENT_ID": "your_client_id",
        "TICKTICK_CLIENT_SECRET": "your_client_secret",
        "TICKTICK_ACCESS_TOKEN": "your_access_token",
        "TICKTICK_REFRESH_TOKEN": "your_refresh_token",
        "TICKTICK_USERNAME": "your_email",
        "TICKTICK_PASSWORD": "your_password",
        "TICKTICK_DEVICE_ID": "your_device_id"
      }
    }
  }
}

</details>

Dida365 (China)

Add TICKTICK_HOST=dida365 to your environment variables. This routes API calls to api.dida365.com.

Node Version Managers (nvm, fnm, etc.)

If node doesn't resolve in your MCP client, use the full path:

"command": "/Users/you/.nvm/versions/node/v22.0.0/bin/node"

Usage Examples

Once connected, just talk naturally. Here are examples organized by what you can do:

Morning Planning

"Give me my daily summary"

"What's overdue?"

"What do I have due this week?"

"Show me all high priority tasks"

Creating Tasks

"Create a task called 'Review PR #42' in my Work project, due tomorrow, high priority"

"Add a task 'Buy groceries' to Personal with subtasks: milk, eggs, bread, butter"

"Create a recurring task 'Weekly standup notes' every Monday in my Work project"

"Create these tasks in my Work project: Review design mockups, Update API docs, Fix login bug"

Managing Tasks

"Mark the 'Send invoice' task as complete"

"Move 'Design review' to my Work project"

"Make 'Write tests' a subtask of 'Ship v2'"

"What tasks did I complete last week?"

Search & Filter

"Search for any tasks mentioning 'budget'"

"Show me all medium priority tasks"

"What tasks are due in the next 3 days?"

"Show me all tasks in my Personal project that have a due date"

Projects

"List all my projects"

"Create a new project called 'Q2 Goals' with a kanban view"

"Show me everything in my Work project — tasks, columns, the works"

Tags

"Show me all my tags"

"Create a tag called 'urgent' with a red color"

"Rename the 'bug' tag to 'bugfix'"

"Merge the 'todo' tag into 'backlog'"

Habits

"What habits do I have?"

"Check in my 'Drink water' habit for today"

"Create a habit called 'Read' with a goal of 30 pages per day"

"Show my check-in history for all habits since January"

Focus & Productivity

"Show my focus time heatmap for this month"

"How is my focus time distributed across tags?"

"What are my productivity stats?"

Organization

"List my project folders"

"Create a folder called 'Side Projects'"

"Show the kanban columns in my Sprint project"

"What's in my trash?"


Environment Variables

Variable Required Description
TICKTICK_CLIENT_ID Yes OAuth2 Client ID from developer portal
TICKTICK_CLIENT_SECRET Yes OAuth2 Client Secret
TICKTICK_ACCESS_TOKEN Yes OAuth2 access token (set by auth wizard)
TICKTICK_REFRESH_TOKEN No OAuth2 refresh token (enables auto-renewal)
TICKTICK_USERNAME Yes Your TickTick email (for V2 API)
TICKTICK_PASSWORD Yes Your TickTick password (for V2 API)
TICKTICK_DEVICE_ID Recommended Stable 24-char hex device id for the V2 x-device header (see note below)
TICKTICK_HOST No ticktick (default) or dida365 for China

Security note: The V2 API requires your TickTick username and password. These are stored as environment variables and never logged or transmitted anywhere except directly to TickTick's authentication endpoint. The .env file is created with restricted permissions (owner-only read/write).

About TICKTICK_DEVICE_ID: The V2 internal API authenticates a "device" via the x-device request header. If the device id is empty or unrecognized, TickTick rejects the login with a misleading username_password_not_match error — even when your credentials are correct. The server sends a non-empty device id to avoid this. If you don't set TICKTICK_DEVICE_ID, a random 24-character hex id is generated automatically on each launch; setting a stable value is recommended so TickTick doesn't treat every restart as a brand-new device. Any 24-char hex string works — or reuse the id your TickTick web client already uses (browser DevTools → Application → Local Storage → deviceAnalyticsData.id).


All 52 Tools

<details> <summary><strong>Project Management</strong> (6 tools, V1)</summary>

Tool Description
ticktick_get_projects List all projects
ticktick_get_project Get a project by ID
ticktick_get_project_data Get project with tasks and columns
ticktick_create_project Create a project
ticktick_update_project Update project properties
ticktick_delete_project Delete a project

</details>

<details> <summary><strong>Task Management</strong> (6 tools, V1)</summary>

Tool Description
ticktick_get_task Get a task by ID
ticktick_create_task Create a task with all options
ticktick_update_task Update task fields
ticktick_complete_task Mark a task as done
ticktick_delete_task Delete a task
ticktick_batch_create_tasks Create multiple tasks at once

</details>

<details> <summary><strong>Smart Queries & GTD</strong> (12 tools, V1)</summary>

Tool Description
ticktick_get_all_tasks All undone tasks across all projects
ticktick_search_tasks Full-text search
ticktick_get_tasks_due_today Tasks due today
ticktick_get_tasks_due_tomorrow Tasks due tomorrow
ticktick_get_tasks_due_this_week Tasks due in 7 days
ticktick_get_tasks_due_in_days Tasks due in N days
ticktick_get_overdue_tasks Overdue tasks
ticktick_get_tasks_by_priority Filter by priority
ticktick_filter_tasks Advanced multi-criteria filter
ticktick_get_engaged_tasks GTD "Engage" list
ticktick_get_next_tasks GTD "Next" list
ticktick_daily_summary Full daily digest

</details>

<details> <summary><strong>Tags</strong> (5 tools, V2)</summary>

Tool Description
ticktick_get_tags List all tags
ticktick_create_tag Create a tag
ticktick_rename_tag Rename a tag
ticktick_delete_tag Delete a tag
ticktick_merge_tags Merge one tag into another

</details>

<details> <summary><strong>Habits</strong> (6 tools, V2)</summary>

Tool Description
ticktick_get_habits List all habits
ticktick_get_habit_sections Get habit sections
ticktick_create_habit Create a habit
ticktick_delete_habit Delete a habit
ticktick_checkin_habit Check in to a habit
ticktick_get_habit_checkins View check-in history

</details>

<details> <summary><strong>Focus / Pomodoro</strong> (3 tools, V2)</summary>

Tool Description
ticktick_get_focus_heatmap Focus time heatmap
ticktick_get_focus_distribution Focus distribution by category
ticktick_get_productivity_stats Productivity score and stats

</details>

<details> <summary><strong>Completed & Trashed Tasks</strong> (2 tools, V2)</summary>

Tool Description
ticktick_get_completed_tasks Browse completed tasks
ticktick_get_trashed_tasks View deleted tasks

</details>

<details> <summary><strong>Task Organization</strong> (2 tools, V2)</summary>

Tool Description
ticktick_move_task Move task to a different project
ticktick_set_task_parent Set/remove subtask relationship

</details>

<details> <summary><strong>Kanban & Folders</strong> (8 tools, V2)</summary>

Tool Description
ticktick_get_columns List kanban columns
ticktick_create_column Create a column
ticktick_delete_column Delete a column
ticktick_move_task_to_column Move a task to another kanban column
ticktick_get_project_folders List project folders
ticktick_create_project_folder Create a folder
ticktick_delete_project_folder Delete a folder
ticktick_move_project_to_folder Move a list into/out of a folder

</details>

<details> <summary><strong>User & Settings</strong> (2 tools, V2)</summary>

Tool Description
ticktick_get_user_profile Profile, email, timezone, subscription
ticktick_get_user_settings Account preferences

</details>


Reference

Task priority values: 0 = None, 1 = Low, 3 = Medium, 5 = High

Date format: yyyy-MM-dd'T'HH:mm:ssZ (e.g. 2025-03-15T09:00:00+0000)

Recurrence rules: Standard RRULE format (e.g. RRULE:FREQ=DAILY;INTERVAL=1)


Development

npm install       # Install dependencies
npm run build     # Compile TypeScript
npm run dev       # Watch mode
npm run clean     # Remove build output

Adding a Tool

  1. Add your tool in the appropriate file under src/tools/
  2. Use server.registerTool() with a Zod input schema
  3. It's automatically available to all MCP clients

Architecture

src/
├── index.ts              # Entry point + auth CLI routing
├── config.ts             # Environment variable loader
├── client.ts             # V1 API client (OAuth2)
├── client-v2.ts          # V2 API client (session auth)
├── types.ts              # TypeScript interfaces
├── auth-cli.ts           # Interactive auth wizard
├── auth/oauth.ts         # OAuth2 flow implementation
└── tools/
    ├── project-tools.ts  # Project CRUD (V1)
    ├── task-tools.ts     # Task CRUD (V1)
    ├── smart-tools.ts    # Smart queries & GTD (V1)
    ├── tag-tools.ts      # Tag management (V2)
    ├── habit-tools.ts    # Habit tracking (V2)
    ├── focus-tools.ts    # Focus/Pomodoro stats (V2)
    ├── column-tools.ts   # Kanban columns (V2)
    ├── folder-tools.ts   # Project folders (V2)
    └── v2-task-tools.ts  # Completed tasks, move, user (V2)

Both API clients handle auth transparently — expired tokens are refreshed automatically on 401 responses.


Troubleshooting

Problem Fix
"Missing required environment variable" Run node build/index.js auth or set vars in your MCP config
"Token refresh failed" / 401 errors Re-run node build/index.js auth
Server not showing in Claude Code Use absolute paths, check with /mcp, try claude mcp remove + add
Server not showing in Cursor Restart Cursor, check Output panel > MCP

Contributing

  1. Fork the repo
  2. Create a feature branch
  3. Make your changes and run npm run build
  4. Open a pull request

License

MIT — see LICENSE.

Acknowledgments

推荐服务器

Baidu Map

Baidu Map

百度地图核心API现已全面兼容MCP协议,是国内首家兼容MCP协议的地图服务商。

官方
精选
JavaScript
Playwright MCP Server

Playwright MCP Server

一个模型上下文协议服务器,它使大型语言模型能够通过结构化的可访问性快照与网页进行交互,而无需视觉模型或屏幕截图。

官方
精选
TypeScript
Magic Component Platform (MCP)

Magic Component Platform (MCP)

一个由人工智能驱动的工具,可以从自然语言描述生成现代化的用户界面组件,并与流行的集成开发环境(IDE)集成,从而简化用户界面开发流程。

官方
精选
本地
TypeScript
Audiense Insights MCP Server

Audiense Insights MCP Server

通过模型上下文协议启用与 Audiense Insights 账户的交互,从而促进营销洞察和受众数据的提取和分析,包括人口统计信息、行为和影响者互动。

官方
精选
本地
TypeScript
VeyraX

VeyraX

一个单一的 MCP 工具,连接你所有喜爱的工具:Gmail、日历以及其他 40 多个工具。

官方
精选
本地
graphlit-mcp-server

graphlit-mcp-server

模型上下文协议 (MCP) 服务器实现了 MCP 客户端与 Graphlit 服务之间的集成。 除了网络爬取之外,还可以将任何内容(从 Slack 到 Gmail 再到播客订阅源)导入到 Graphlit 项目中,然后从 MCP 客户端检索相关内容。

官方
精选
TypeScript
Kagi MCP Server

Kagi MCP Server

一个 MCP 服务器,集成了 Kagi 搜索功能和 Claude AI,使 Claude 能够在回答需要最新信息的问题时执行实时网络搜索。

官方
精选
Python
e2b-mcp-server

e2b-mcp-server

使用 MCP 通过 e2b 运行代码。

官方
精选
Neon MCP Server

Neon MCP Server

用于与 Neon 管理 API 和数据库交互的 MCP 服务器

官方
精选
Exa MCP Server

Exa MCP Server

模型上下文协议(MCP)服务器允许像 Claude 这样的 AI 助手使用 Exa AI 搜索 API 进行网络搜索。这种设置允许 AI 模型以安全和受控的方式获取实时的网络信息。

官方
精选