Skip to content

dev-mirzabicer/ticktick-sdk

MCP Developer Tools

An async Python SDK and MCP server for programmatically accessing TickTick (and Dida365) task management features, with AI‑assistant integration

Python Latest v0.4.3 · 4mo ago Security brief →

Features

  • Async Python client built on httpx for high‑performance requests
  • Unified access to both official V1 OAuth2 and reverse‑engineered V2 APIs
  • Full CRUD support for tasks, projects, tags, habits, focus/Pomodoro data
  • Batch operations (up to 100 items) for create/update/delete/complete
  • MCP server enabling AI assistants (Claude, GPT, etc.) to manage TickTick via Model Context Protocol

Recent releases

View all 9 releases →
v0.4.3 New feature
Notable features
  • Add task kind support
Full changelog

What's Changed

  • feat: add task kind support and enhance MCP tool documentation (v0.4.3) by @dev-mirzabicer in https://github.com/dev-mirzabicer/ticktick-sdk/pull/22

https://pypi.org/project/ticktick-sdk/

pip install ticktick-sdk==0.4.3

Full Changelog: https://github.com/dev-mirzabicer/ticktick-sdk/compare/v0.4.2...v0.4.3

v0.4.2 New feature
Notable features
  • Configurable API host for dida365.com support
Full changelog

What's Changed

  • feat: add configurable API host for dida365.com support (v0.4.2) by @dev-mirzabicer in https://github.com/dev-mirzabicer/ticktick-sdk/pull/21
  • Credits to @y-cg for the suggestion

https://pypi.org/project/ticktick-sdk/

pip install ticktick-sdk==0.4.2

Full Changelog: https://github.com/dev-mirzabicer/ticktick-sdk/compare/v0.4.1...v0.4.2

v0.4.1 New feature
Notable features
  • Column filtering via `column_id` parameter in `ticktick_list_tasks`
  • Selective tool loading with `--enabledTools` and `--enabledModules` CLI flags
Full changelog

v0.4.1 Release Notes

Overview

This release addresses two high-impact user requests: kanban column filtering and selective tool loading to reduce context window usage.


New Features

Column Filtering for list_tasks

Problem: AI assistants couldn't list tasks within a specific kanban column, making kanban workflows cumbersome.

Solution: Added column_id filter to ticktick_list_tasks.

Usage:

{
  "project_id": "abc123",
  "column_id": "def456"
}

Workflow enabled:

  1. ticktick_list_columns → Get column IDs for a project
  2. ticktick_list_tasks with column_id → See tasks in "To Do", "In Progress", etc.
  3. ticktick_update_tasks with column_id → Move tasks between columns

Tool Filtering CLI Flags

Problem: The MCP server loads all 43 tools at startup, consuming ~11-12% of available context window before any messages are sent.

Solution: Added --enabledTools and --enabledModules CLI flags to selectively enable tools.

--enabledModules - Category-based filtering

Enable entire categories of tools:

# Enable only task and project tools (16 tools instead of 43)
ticktick-sdk server --enabledModules tasks,projects

# Minimal setup for basic task management
ticktick-sdk server --enabledModules tasks

Available modules:

| Module | Description | Tool Count |
|--------|-------------|------------|
| tasks | Task CRUD, completion, movement, subtasks, pinning, search | 11 |
| projects | Project CRUD and listing | 5 |
| folders | Folder CRUD | 4 |
| columns | Kanban column CRUD | 4 |
| tags | Tag CRUD and merging | 5 |
| habits | Habit CRUD, check-ins, sections | 8 |
| user | Profile, status, statistics, preferences | 4 |
| focus | Focus/pomodoro heatmap and distribution | 2 |

--enabledTools - Individual tool selection

Enable specific tools by name:

# Enable only specific tools
ticktick-sdk server --enabledTools ticktick_create_tasks,ticktick_list_tasks,ticktick_complete_tasks

Combined usage

Both flags can be used together - tools are merged:

# Enable user module + focus heatmap tool (5 tools total)
ticktick-sdk server --enabledModules user --enabledTools ticktick_focus_heatmap

Tool Reference

Tasks Module (11 tools)

  • ticktick_create_tasks
  • ticktick_get_task
  • ticktick_list_tasks
  • ticktick_update_tasks
  • ticktick_complete_tasks
  • ticktick_delete_tasks
  • ticktick_move_tasks
  • ticktick_set_task_parents
  • ticktick_unparent_tasks
  • ticktick_search_tasks
  • ticktick_pin_tasks

Projects Module (5 tools)

  • ticktick_list_projects
  • ticktick_get_project
  • ticktick_create_project
  • ticktick_update_project
  • ticktick_delete_project

Folders Module (4 tools)

  • ticktick_list_folders
  • ticktick_create_folder
  • ticktick_rename_folder
  • ticktick_delete_folder

Columns Module (4 tools)

  • ticktick_list_columns
  • ticktick_create_column
  • ticktick_update_column
  • ticktick_delete_column

Tags Module (5 tools)

  • ticktick_list_tags
  • ticktick_create_tag
  • ticktick_update_tag
  • ticktick_delete_tag
  • ticktick_merge_tags

Habits Module (8 tools)

  • ticktick_habits
  • ticktick_habit
  • ticktick_habit_sections
  • ticktick_create_habit
  • ticktick_update_habit
  • ticktick_delete_habit
  • ticktick_checkin_habits
  • ticktick_habit_checkins

User Module (4 tools)

  • ticktick_get_profile
  • ticktick_get_status
  • ticktick_get_statistics
  • ticktick_get_preferences

Focus Module (2 tools)

  • ticktick_focus_heatmap
  • ticktick_focus_by_tag

Error Handling

Invalid module or tool names produce warnings but don't fail:

$ ticktick-sdk server --enabledModules tasks,invalid
Warning: Unknown module 'invalid'. Available: tasks, projects, folders, columns, tags, habits, user, focus
Tool filtering enabled: 11 of 43 tools
$ ticktick-sdk server --enabledTools ticktick_create_tasks,invalid_tool
Warning: Unknown tool 'invalid_tool', skipping
Tool filtering enabled: 1 of 43 tools

Files Changed

  • src/ticktick_sdk/tools/inputs.py - Added column_id field to TaskListInput
  • src/ticktick_sdk/server.py - Added column filtering logic and _apply_tool_filtering()
  • src/ticktick_sdk/cli.py - Added TOOL_MODULES, --enabledTools, --enabledModules flags

What's Changed

  • feat: column filtering and tool filtering CLI flags (v0.4.1) by @dev-mirzabicer in https://github.com/dev-mirzabicer/ticktick-sdk/pull/20
  • Credits to @Q0 for the suggestion on column filtering
  • Credits to @thibaud57 for the suggestion on tool filtering

https://pypi.org/project/ticktick-sdk/

pip install ticktick-sdk==0.4.1

Full Changelog: https://github.com/dev-mirzabicer/ticktick-sdk/compare/v0.4.0...v0.4.1

v0.4.0 Breaking risk
⚠ Upgrade required
  • Update any automation or prompt references from old singular tool names to the new plural equivalents listed in the migration table.
  • Replace direct calls to removed tools (`ticktick_completed_tasks`, `ticktick_abandoned_tasks`, etc.) with the indicated consolidated APIs and adjust request payloads accordingly.
Breaking changes
  • Renamed singular tools to plural (e.g., ticktick_create_task → ticktick_create_tasks).
  • Removed seven tools; migrate to consolidated alternatives as documented.
  • Input schema changed: mutation endpoints now require a `tasks` array instead of individual fields.
Notable features
  • All mutation tools support batch operations (1‑100 items) for tasks, habits, and related actions.
  • `ticktick_list_tasks` adds `status` filter consolidating completed/abandoned/deleted queries.
  • `ticktick_update_tasks` includes `column_id` for kanban column assignment.
Full changelog

v0.4.0 Release Notes

Overview

Theme: Less Tools, More Power

This release focuses on reducing context overhead for AI assistants while adding powerful batch operation capabilities. Every mutation tool now accepts lists, enabling efficient bulk operations in a single API call.

Highlights

| Metric | Before | After | Change |
|--------|--------|-------|--------|
| MCP Tools | 50 | 43 | -14% |
| Batch Capability | None | Full | ✨ New |
| Test Coverage | 352 tests | 352 tests | Maintained |


New Features

Batch Operations

All mutation tools now accept lists of 1-100 items, enabling bulk operations:

| Tool | Capability |
|------|------------|
| ticktick_create_tasks | Create multiple tasks in one call |
| ticktick_update_tasks | Update multiple tasks (titles, priorities, tags, columns, etc.) |
| ticktick_delete_tasks | Delete multiple tasks |
| ticktick_complete_tasks | Complete multiple tasks |
| ticktick_move_tasks | Move multiple tasks between projects |
| ticktick_set_task_parents | Make multiple tasks into subtasks |
| ticktick_unparent_tasks | Remove multiple tasks from parents |
| ticktick_pin_tasks | Pin or unpin multiple tasks |
| ticktick_checkin_habits | Record multiple habit check-ins (great for backdating) |

Example - Create 3 tasks:

{
  "tasks": [
    {"title": "Task 1", "priority": 5},
    {"title": "Task 2", "tags": ["work"]},
    {"title": "Task 3", "due_date": "2026-01-20"}
  ]
}

Example - Backdate a week of habit check-ins:

{
  "checkins": [
    {"habit_id": "abc123", "checkin_date": "2026-01-11"},
    {"habit_id": "abc123", "checkin_date": "2026-01-12"},
    {"habit_id": "abc123", "checkin_date": "2026-01-13"},
    {"habit_id": "abc123", "checkin_date": "2026-01-14"},
    {"habit_id": "abc123", "checkin_date": "2026-01-15"}
  ]
}

Enhanced Filtering

ticktick_list_tasks now supports a status filter, consolidating 4 separate query patterns into one tool:

| Status Value | Description |
|--------------|-------------|
| "active" | Current tasks (default) |
| "completed" | Completed tasks (requires from_date/to_date) |
| "abandoned" | Abandoned/won't-do tasks (requires from_date/to_date) |
| "deleted" | Trashed tasks |

Example - Get completed tasks from last week:

{
  "status": "completed",
  "from_date": "2026-01-11",
  "to_date": "2026-01-18"
}

Integrated Column Assignment

ticktick_update_tasks now includes column_id field for kanban column assignment:

{
  "tasks": [
    {"task_id": "abc", "project_id": "xyz", "column_id": "done-column-id"}
  ]
}

Use empty string "" to remove a task from its column.

Unified Tag Updates

ticktick_update_tag now includes label field for renaming:

{
  "name": "oldname",
  "label": "New Display Name",
  "color": "#FF6B6B"
}

Unified Habit Updates

ticktick_update_habit now includes archived field:

{
  "habit_id": "abc123",
  "archived": true
}

Tool Consolidation

Removed Tools (7)

These tools have been absorbed into existing tools with enhanced parameters:

| Removed Tool | Absorbed Into | How to Migrate |
|--------------|---------------|----------------|
| ticktick_completed_tasks | ticktick_list_tasks | Use status: "completed" with from_date/to_date |
| ticktick_abandoned_tasks | ticktick_list_tasks | Use status: "abandoned" with from_date/to_date |
| ticktick_deleted_tasks | ticktick_list_tasks | Use status: "deleted" |
| ticktick_move_task_to_column | ticktick_update_tasks | Use column_id field in task update |
| ticktick_rename_tag | ticktick_update_tag | Use label field |
| ticktick_archive_habit | ticktick_update_habit | Use archived: true |
| ticktick_unarchive_habit | ticktick_update_habit | Use archived: false |

Renamed Tools (Singular → Plural)

Tools renamed to reflect batch capability:

| Old Name | New Name |
|----------|----------|
| ticktick_create_task | ticktick_create_tasks |
| ticktick_update_task | ticktick_update_tasks |
| ticktick_delete_task | ticktick_delete_tasks |
| ticktick_complete_task | ticktick_complete_tasks |
| ticktick_move_task | ticktick_move_tasks |
| ticktick_make_subtask | ticktick_set_task_parents |
| ticktick_unparent_subtask | ticktick_unparent_tasks |
| ticktick_pin_task | ticktick_pin_tasks |
| ticktick_checkin_habit | ticktick_checkin_habits |


Final Tool Inventory (43 Tools)

Tasks (11 tools)

  • ticktick_create_tasks - Create 1+ tasks ✨ Batch
  • ticktick_get_task - Get single task by ID
  • ticktick_list_tasks - List/query tasks with status filter
  • ticktick_update_tasks - Update 1+ tasks ✨ Batch
  • ticktick_complete_tasks - Complete 1+ tasks ✨ Batch
  • ticktick_delete_tasks - Delete 1+ tasks ✨ Batch
  • ticktick_move_tasks - Move 1+ tasks between projects ✨ Batch
  • ticktick_set_task_parents - Make 1+ tasks into subtasks ✨ Batch
  • ticktick_unparent_tasks - Remove 1+ tasks from parent ✨ Batch
  • ticktick_pin_tasks - Pin/unpin 1+ tasks ✨ Batch
  • ticktick_search_tasks - Search tasks by query

Projects (5 tools)

  • ticktick_list_projects
  • ticktick_get_project
  • ticktick_create_project
  • ticktick_update_project
  • ticktick_delete_project

Folders (4 tools)

  • ticktick_list_folders
  • ticktick_create_folder
  • ticktick_rename_folder
  • ticktick_delete_folder

Columns (4 tools)

  • ticktick_list_columns
  • ticktick_create_column
  • ticktick_update_column
  • ticktick_delete_column

Tags (5 tools)

  • ticktick_list_tags
  • ticktick_create_tag
  • ticktick_update_tag - Now includes rename via label
  • ticktick_delete_tag
  • ticktick_merge_tags

Habits (8 tools)

  • ticktick_habits - List all habits
  • ticktick_habit - Get single habit
  • ticktick_habit_sections - Get habit sections
  • ticktick_create_habit
  • ticktick_update_habit - Now includes archive/unarchive via archived
  • ticktick_delete_habit
  • ticktick_checkin_habits - Record 1+ check-ins ✨ Batch
  • ticktick_habit_checkins - Query check-in history

User & Analytics (6 tools)

  • ticktick_get_profile
  • ticktick_get_status
  • ticktick_get_statistics
  • ticktick_get_preferences
  • ticktick_focus_heatmap
  • ticktick_focus_by_tag

Breaking Changes

Tool Renames

If you have prompts or automations referencing the old singular tool names, update them to the new plural names.

Removed Tools

If you were using the removed tools directly, migrate to the consolidated alternatives as shown in the migration table above.

Input Schema Changes

Task mutation tools now expect a tasks array instead of individual fields at the root level:

Before (v0.3.x):

{"title": "My Task", "priority": 5}

After (v0.4.0):

{"tasks": [{"title": "My Task", "priority": 5}]}

Internal Changes

  • Added batch methods to UnifiedTickTickAPI and TickTickClient
  • Added batch result formatters to tools/formatting.py
  • Updated tools/__init__.py exports for new input models
  • All 352 existing tests continue to pass

https://pypi.org/project/ticktick-sdk/

pip install ticktick-sdk==0.4.0

Full Changelog: https://github.com/dev-mirzabicer/ticktick-sdk/compare/v0.3.0...v0.4.0

v0.3.0 New feature
Notable features
  • Auto-load .env file for credentials in the CLI
  • Kanban columns support (v0.3.0)
  • Task pinning support (v0.3.0)
Full changelog

What's Changed

  • feat(cli): auto-load .env file for credentials by @seaniedan-flwls in https://github.com/dev-mirzabicer/ticktick-sdk/pull/11
  • feat: Add kanban columns and task pinning support (v0.3.0) by @dev-mirzabicer in https://github.com/dev-mirzabicer/ticktick-sdk/pull/17

New Contributors

  • @seaniedan-flwls made their first contribution in https://github.com/dev-mirzabicer/ticktick-sdk/pull/11

https://pypi.org/project/ticktick-sdk/0.3.0/

pip install ticktick-sdk==0.3.0

Full Changelog: https://github.com/dev-mirzabicer/ticktick-sdk/compare/v0.2.1...v0.3.0

Weekly OSS security release digest.

The CVE patches and breaking changes that affected production tools this week. One email, every Sunday.

No spam, unsubscribe anytime.

About

Stars
135
Forks
40
Language
Python

Install & Platforms

Install via
pip

Alternative to

pyticktick ticktick-py tickthon ticktick-python

Beta — feedback welcome: [email protected]