Enhance your TickTick workflow with this MCP server. Built upon the ticktick-py library, it offers significantly improved filtering capabilities, allowing AI assistants and MCP-compatible applications (like Claude Desktop, VS Code Agent Mode, or mcp-use) to interact with your tasks with greater precision and power. This server provides comprehensive access to TickTick functionalities via MCP tools
Add this skill
npx mdskills install jen6/ticktick-mcpComprehensive TickTick integration with excellent tool coverage and detailed setup guide
1# TickTick MCP Server23<!-- Add relevant badges here -->4[](https://opensource.org/licenses/MIT)5<!-- [](https://badge.fury.io/py/your-package-name) -->6789Enhance your TickTick workflow with this MCP server. Built upon the `ticktick-py` library, it offers significantly improved filtering capabilities, allowing AI assistants and MCP-compatible applications (like Claude Desktop, VS Code Agent Mode, or `mcp-use`) to interact with your tasks with greater precision and power.10111213## β¨ Features1415This server provides comprehensive access to TickTick functionalities via MCP tools, categorized as follows:1617* **Task Management:** Create, update (including conversion to TickTick's date format), delete, complete, and move tasks.18* **Subtask Management:** Create subtasks by linking existing tasks.19* **Task Retrieval:**20 * Get all uncompleted tasks.21 * Get tasks by ID or specific fields.22 * Get completed tasks within a date range.23 * Get tasks from a specific project.24 * Filter tasks based on various critggeria (priority, project, tags, etc.).25* **Project/Tag Management:** Retrieve all projects, tags, and project folders.26* **Helper Tools:** Convert datetime strings to the required TickTick format.2728Refer to the tool definitions within the `src/ticktick_mcp/tools/` directory for detailed specifications.2930## π Getting Started3132This server utilizes the unofficial [`ticktick-py` library](https://lazeroffmichael.github.io/ticktick-py/) to interact with the TickTick API.3334### Prerequisites3536* Python >= 3.1037* Access to TickTick and API credentials (see below).3839### Setup40411. **Register a TickTick Application:** Before using the server, you need to register an application with TickTick to obtain API credentials. Follow these steps based on the `ticktick-py` documentation:42 * Go to the [TickTick OpenAPI Documentation](https://developer.ticktick.com/docs#/openapi) and log in with your TickTick account.43 * Click on `Manage Apps` in the top right corner.44 * Register a new app by clicking the `+App Name` button. Provide a name for your application (e.g., "MCP Server").45 * Once created, edit the app details. Note down the generated `Client ID` and `Client Secret`.46 * For the `OAuth Redirect URL`, enter a URL where you want to be redirected after authorizing the application. It doesn't need to be a live URL47 * `http://localhost:8080/redirect` or `http://127.0.0.1:8080/` are common choices for local development.48 * **Ensure this exact URL is saved in your environment variables.**49502. **Environment Variables:** The server requires the TickTick API credentials you just obtained, plus your TickTick login details. By default, it looks for a `.env` file located at `~/.config/ticktick-mcp/.env`.51 * The server *might* create the `~/.config/ticktick-mcp/` directory if it doesn't exist, but it's safer to create it manually.52 * You **must create the `.env` file manually** within that directory.53 * Alternatively, you can specify a different directory using the `--dotenv-dir` command-line argument *only* when running the server directly via Python (see "Running the Server" below).5455 The `.env` file should contain:56 ```dotenv57 TICKTICK_CLIENT_ID=your_client_id # Obtained in Step 158 TICKTICK_CLIENT_SECRET=your_client_secret # Obtained in Step 159 TICKTICK_REDIRECT_URI=your_redirect_uri # Entered in Step 1 (must match exactly)60 TICKTICK_USERNAME=your_ticktick_email # Your TickTick login email61 TICKTICK_PASSWORD=your_ticktick_password # Your TickTick login password (or app password if enabled)62 ```63643. **Authentication (First Run):** On the first run (either directly or via an MCP client), the underlying `ticktick-py` library will initiate an OAuth2 authentication flow.65 * A web browser window might open automatically, or a URL will be printed in the console/log output.66 * You need to visit this URL, log in to TickTick if necessary, and authorize the application (granting Read and Write permissions).67 * After authorization, you will be redirected to the `TICKTICK_REDIRECT_URI` you specified.68 * The console will prompt you to **paste this full redirected URL** (which includes a `code=` parameter) back into the terminal.69 * Upon successful verification, a `.token-oauth` file will be created in the same directory as your `.env` file.70 * This file caches the authorization token, so you typically only need to perform this manual authorization step once every ~6 months or if the token becomes invalid.7172### Running the Server7374You can run the server in two main ways:7576**1. Via an MCP Client (Recommended for AI Assistant Integration):**7778Configure your MCP client (like Claude Desktop, VS Code Agent Mode, etc.) to use the server. Example configuration:7980```json81{82 "mcpServers": {83 "ticktick": {84 "command": "uvx",85 "args": [86 "--from",87 "git+https://github.com/jen6/ticktick-mcp.git",88 "ticktick-mcp"89 // Optional: Add "--dotenv-dir", "/path/to/your/config" if needed,90 // but standard clients might not support passing extra args easily.91 ]92 }93 }94}95```9697## π§ Tools9899This server provides the following tools for interacting with the TickTick task management service:100101### Task Management1021031. `ticktick_create_task`104 * Creates a new task in TickTick105 * Inputs:106 * `title` (string): The title of the task. Required.107 * `projectId` (string, optional): ID of the project to add the task to.108 * `content` (string, optional): Additional details or notes for the task.109 * `desc` (string, optional): Description for the task.110 * `allDay` (boolean, optional): Set to True if the task spans the entire day.111 * `startDate` (string, optional): Start date/time in ISO 8601 format.112 * `dueDate` (string, optional): Due date/time in ISO 8601 format.113 * `timeZone` (string, optional): IANA timezone name (e.g., 'Asia/Seoul').114 * `reminders` (array of strings, optional): List of reminder triggers in RFC 5545 format.115 * `repeat` (string, optional): Recurring rule in RFC 5545 format.116 * `priority` (integer, optional): Task priority (0=None, 1=Low, 3=Medium, 5=High).117 * `sortOrder` (integer, optional): Custom sort order value.118 * `items` (array of objects, optional): List of subtask dictionaries.1191202. `ticktick_update_task`121 * Updates an existing task122 * Inputs:123 * `task_object` (object): A dictionary with task properties to update including the task `id`.1241253. `ticktick_delete_tasks`126 * Deletes one or more tasks127 * Inputs:128 * `task_ids` (string or array of strings): A single task ID or list of task IDs to delete.1291304. `ticktick_complete_task`131 * Marks a task as complete132 * Inputs:133 * `task_id` (string): The ID of the task to mark as complete.1341355. `ticktick_move_task`136 * Moves a task to a different project137 * Inputs:138 * `task_id` (string): The ID of the task to move.139 * `new_project_id` (string): The ID of the destination project.1401416. `ticktick_make_subtask`142 * Makes one task a subtask of another143 * Inputs:144 * `parent_task_id` (string): The ID of the task that will become the parent.145 * `child_task_id` (string): The ID of the task that will become the subtask.146147### Task Retrieval1481497. `ticktick_get_by_id`150 * Retrieves a specific object (task, project, etc.) by ID151 * Inputs:152 * `obj_id` (string): The unique ID of the object to retrieve.1531548. `ticktick_get_all`155 * Retrieves all objects of a specified type156 * Inputs:157 * `search` (string): The type of objects to retrieve (e.g., 'tasks', 'projects', 'tags').1581599. `ticktick_get_tasks_from_project`160 * Retrieves all uncompleted tasks from a specific project161 * Inputs:162 * `project_id` (string): The ID of the project.16316410. `ticktick_filter_tasks`165 * Filters tasks based on various criteria166 * Inputs:167 * `filter_criteria` (object): Dictionary with filtering parameters such as:168 * `status` (string): Task status ('uncompleted' or 'completed').169 * `project_id` (string, optional): Project ID to filter tasks by.170 * `tag_label` (string, optional): Tag name to filter tasks by.171 * `priority` (integer, optional): Priority level.172 * `due_start_date` (string, optional): ISO format start date for due date filter.173 * `due_end_date` (string, optional): ISO format end date for due date filter.174 * `completion_start_date` (string, optional): Start date for completion date filter.175 * `completion_end_date` (string, optional): End date for completion date filter.176 * `sort_by_priority` (boolean, optional): Sort results by priority.177 * `tz` (string, optional): Timezone for date interpretation.178179### Helper Tools18018111. `ticktick_convert_datetime_to_ticktick_format`182 * Converts ISO 8601 date/time string to TickTick API format183 * Inputs:184 * `datetime_iso_string` (string): The date/time string in ISO 8601 format.185 * `tz` (string): IANA timezone name to interpret the date/time.186187## π€ Sample agent prompt188189```190## Persona: Daily Stand-up Agent191192- **Role**: AI agent integrated with the user's TickTick account to assist in daily work planning193- **Goal**: Help the user start their day efficiently, focus on key tasks, and break large tasks into manageable subtasks194195---196197## Core Features & Workflow1981991. **Fetch Current Time**200 - Retrieve current time using `time mcp`.2012022. **Session Start & Data Loading**203 - The user initiates the session with a command like "Start daily stand-up" or "Hello."204 - Call TickTick MCP API to fetch all tasks due **today**.205 - Optionally notify the user that data is loading (e.g., "Fetching today's and overdue tasks from TickTickβ¦").2062073. **Daily Briefing**208 Good morning! Today's date is {YYYY-MM-DD}. Here's your daily stand-up from TickTick:209210 **Tasks Due Today:**211 - Task Name 1212 - Task Name 2213 β¦214215 **Overdue Tasks:**216 - Task Name 3217 - Task Name 4218 β¦2192204. **Select Key Task**221 > "Which of these tasks would you like to focus on first or must complete today?222 > Or is there another important task you'd like to add?"2232245. **Task Breakdown (Subtask Creation)**225 - After the user selects a main task, suggest 2β5 specific subtasks needed to complete it.226 - Example (if "Write project report" is selected):227 1. Draft outline & table of contents (10 min)228 2. Gather & analyze data (30 min)229 3. Write section drafts (1 h)230 4. Review & revise draft (30 min)231 5. Final submission (10 min)2322336. **Confirm & Add Subtasks**234 - Ask the user to confirm or adjust the suggested subtasks:235 > "Does this breakdown look good? Any changes?"236 - Once approved, call MCP to add each subtask to TickTick, setting them as children of the main task if supported, naming them "[Main Task] β [Subtask]".237 mcp.ticktick.addTask({238 name: "[Main Task] β [Subtask]",239 parentId: "..."240 });2412427. **Session Close**243 > "All subtasks have been added to TickTick. Have a productive day! Anything else I can help with?"244245---246247## Additional Guidelines248249- **Tone & Manner**: Friendly, proactive, and organized.250- **MCP Interface Examples**:251 // Fetch today's due tasks252 mcp.ticktick.getTasks({253 filter_criteria: {254 status: "uncompleted",255 tz: "Asia/Seoul",256 due_end_date: "2025-04-29"257 }258 });259260 // Add a subtask261 mcp.ticktick.addTask({262 name: "Project Report β Write Draft",263 parentId: "task123"264 });265- **Error Handling**: Inform the user and suggest retrying on MCP call failures.266- **Clarity**: Present task lists and subtask suggestions clearly.267- **Plan First**: Use `sequential thinking mcp` to plan steps before adding or modifying tasks.268269```270271## π€ Contributing272273Contributions are welcome! Please feel free to open an issue or submit a pull request.274275276## π License277278This project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.279280## π See Also281282* [Model Context Protocol Servers](https://github.com/modelcontextprotocol/servers): The central repository for reference implementations of MCP servers for various tools and platforms.283* [modelcontextprotocol.io](https://modelcontextprotocol.io/): Official documentation for the Model Context Protocol.284* [pietrozullo/mcp-use](https://github.com/pietrozullo/mcp-use): A popular Python library for building clients/agents that interact with MCP servers.285* [lazeroffmichael/ticktick-py](https://lazeroffmichael.github.io/ticktick-py/): The unofficial TickTick API library used by this project to handle authentication and API interactions.286
Full transparency β inspect the skill content before installing.