ticktick-mcp-enhanced
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| TICKTICK_CLIENT_ID | Yes | Your TickTick Client ID from developer center | |
| TICKTICK_ACCOUNT_TYPE | Yes | Account type: 'china' for domestic, 'global' for international | |
| TICKTICK_REDIRECT_URI | No | Redirect URI for OAuth (default: http://localhost:8000/callback) | http://localhost:8000/callback |
| TICKTICK_CLIENT_SECRET | Yes | Your TickTick Client Secret from developer center |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": false
} |
| prompts | {
"listChanged": false
} |
| resources | {
"subscribe": false,
"listChanged": false
} |
| experimental | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| ticktick_statusA | Check the current connection status with TickTick. Returns whether the server is configured, authenticated, and ready to use. |
| loginA | Log in to TickTick by providing OAuth credentials. Ask the user for all four parameters. They can be found on the developer console app settings page:
Args: client_id (required): OAuth application Client ID, shown on the app page. client_secret (required): OAuth application Client Secret, shown on the app page. account_type (optional, default "china"): "china" for Dida365 or "global" for TickTick international. Use the default unless the user explicitly says they use the international version (ticktick.com). redirect_uri (optional, default "http://localhost:8000/callback"): the callback URL configured in the developer console. Use the default unless the user explicitly states a different value. Never invent a URL — if the user does not provide one, use the default. After calling this tool, a browser window opens automatically for the user to authorize. The tool blocks until authorization completes or times out (up to 120 seconds). |
| get_all_projectsA | Get all projects from TickTick. Note: This does not include the special "Inbox" project. To get inbox information and tasks, use get_project_info(project_id="inbox"). |
| get_project_infoA | Get comprehensive information about a project, including its details and all tasks. This tool provides a complete view of a project in one call, showing both the project metadata (name, color, view mode, etc.) and all tasks within it. Args: project_id: ID of the project, or "inbox" to get inbox information Returns: A formatted string containing: - Project basic information (name, ID, color, etc.) - List of all tasks in the project with their details Examples: - get_project_info("abc123") → Get project info and tasks - get_project_info("inbox") → Get inbox info and tasks |
| create_projectA | Create a new project in TickTick. Args: name: Project name color: Color code (hex format) (optional) view_mode: View mode - one of list, kanban, or timeline (optional) |
| update_projectsA | Update one or more existing projects in place (without deleting them). Only the fields you provide are changed; omitted fields keep their current value. Use this instead of delete-then-recreate to avoid losing the tasks inside a project. Args: projects: Project update dictionary, or list of dictionaries. Each item must contain: - project_id (required): ID of the project to update - name (optional): New project name - color (optional): New color (hex code, e.g. "#F18181") - view_mode (optional): One of "list", "kanban", "timeline" - kind (optional): Project type - "TASK" or "NOTE" Examples: # Rename a single project {"project_id": "abc123", "name": "Archived Work"} |
| delete_projectsA | Delete one or more projects. Supports both single project and batch deletion. For single project, you can pass a project ID string directly. For multiple projects, pass a list of project IDs. Args: projects: Project ID string or list of project ID strings Examples: # Single project "abc123" |
| create_tasksA | Create one or more tasks in TickTick. Supports both single task and batch creation. For single task, you can pass a dictionary directly. For multiple tasks, pass a list of dictionaries. Args: tasks: Task dictionary or list of task dictionaries. Each task must contain: - title (required): Task Name - project_id (required): ID of the project for the task - content (optional): Task description - desc (optional): Description of checklist - start_date (optional): ISO datetime WITH timezone offset (e.g., 2025-12-16T08:00:00+0000) - due_date (optional): ISO datetime WITH timezone offset - time_zone (required): IANA timezone name (e.g. "Asia/Shanghai") - priority (optional): Priority level - "none", "low", "medium", or "high" - repeat_flag (optional): Recurring rules (e.g., "RRULE:FREQ=DAILY;INTERVAL=1") - items (optional): List of subtask dictionaries - reminders (optional): List of iCal TRIGGER strings. Without this, NO alarm fires even if due_date is set. Examples: ["TRIGGER:PT0S"] → at due time ["TRIGGER:-PT15M"] → 15 minutes before ["TRIGGER:-PT1H"] → 1 hour before ["TRIGGER:-P1D"] → 1 day before ["TRIGGER:-PT15M","TRIGGER:PT0S"] → 15 min before AND at due Examples: # Single task with Beijing timezone, ring at due time { "title": "Buy milk", "project_id": "1234ABC", "content": "2% organic", "due_date": "2025-12-16T16:00:00+08:00", "time_zone": "Asia/Shanghai", "priority": "medium", "reminders": ["TRIGGER:PT0S"] } |
| update_tasksA | Update one or more existing tasks in TickTick. Supports both single task and batch updates. For single task, you can pass a dictionary directly. For multiple tasks, pass a list of dictionaries. Args: tasks: Task dictionary or list of task dictionaries. Each task must contain: - task_id (required): ID of the task to update - project_id (required): ID of the project the task belongs to - title (optional): task title - content (optional): task description/content - desc (optional): description of checklist - start_date (optional): ISO datetime WITH timezone offset - due_date (optional): ISO datetime WITH timezone offset; omit to make an all-day task - time_zone (optional): IANA timezone name (e.g., "Asia/Shanghai", "America/New_York") - priority (optional): priority level - "none", "low", "medium", or "high" - repeat_flag (optional): Recurring rules - items (optional): List of subtask dictionaries - reminders (optional): List of iCal TRIGGER strings (e.g., ["TRIGGER:PT0S"] = at due, ["TRIGGER:-PT15M"] = 15 min before). Pass [] to clear all reminders. Examples: # Single task update (set due date with timezone) { "task_id": "abc123", "project_id": "xyz789", "title": "Updated title", "due_date": "2025-12-31T15:00:00+08:00", "time_zone": "Asia/Shanghai", "priority": "high" } |
| complete_tasksA | Mark one or more tasks as complete. Supports both single task and batch completion. For single task, you can pass a dictionary directly. For multiple tasks, pass a list of dictionaries. Args: tasks: Task dictionary or list of task dictionaries. Each task must contain: - project_id (required): ID of the project - task_id (required): ID of the task Examples: # Single task {"project_id": "xyz789", "task_id": "abc123"} |
| delete_tasksA | Delete one or more tasks. Supports both single task and batch deletion. For single task, you can pass a dictionary directly. For multiple tasks, pass a list of dictionaries. Args: tasks: Task dictionary or list of task dictionaries. Each task must contain: - project_id (required): ID of the project - task_id (required): ID of the task Examples: # Single task {"project_id": "xyz789", "task_id": "abc123"} |
| create_subtasksA | Create one or more subtasks for parent tasks. For single subtask, you can pass a dictionary directly. For multiple subtasks, pass a list of dictionaries. Args: subtasks: Subtask dictionary or list of subtask dictionaries. Each subtask must contain: - subtask_title (required): Title of the subtask - parent_task_id (required): ID of the parent task - project_id (required): ID of the project (must be same for both parent and subtask) - content (optional): Content/description for the subtask - priority (optional): Priority level - "none", "low", "medium", or "high" (case-insensitive) Examples: # Single subtask {"subtask_title": "Subtask 1", "parent_task_id": "abc123", "project_id": "xyz789"} |
| move_tasksA | Move one or more tasks from their current project to a different project. Args: moves: Move dictionary, or list of dictionaries. Each item must contain: - from_project_id (required): ID of the source project - to_project_id (required): ID of the destination project - task_id (required): ID of the task to move Examples: # Move a single task {"from_project_id": "abc123", "to_project_id": "def456", "task_id": "task789"} |
| query_tasksA | Unified task query tool with flexible multi-dimensional filtering. All parameters are optional. When no filters are provided, returns all tasks. Multiple filters can be combined - tasks must match ALL specified criteria (AND logic). Args: task_id: Get a specific task by ID. When combined with project_id, uses direct API call (most efficient). When used alone, searches all tasks for matching ID. Can be combined with other filters to verify task properties. project_id: Limit search to specific project (use "inbox" for inbox tasks). When combined with task_id, enables direct API lookup. date_filter: Filter by date - one of: - "today": Tasks due today - "tomorrow": Tasks due tomorrow - "overdue": Overdue tasks - "next_7_days": Tasks due within the next 7 days - "custom": Tasks due in a specific number of days (requires custom_days) custom_days: Number of days from today (only for date_filter="custom") e.g., 0 for today, 1 for tomorrow, 3 for 3 days from now priority: Filter by priority level: "none", "low", "medium","high"(case-insensitive): search_term: Search keyword in title, content, or subtask titles (case-insensitive) Examples: query_tasks() → All tasks query_tasks(task_id="abc123", project_id="xyz789") → Get specific task query_tasks(task_id="abc123") → Find task by ID across all projects query_tasks(date_filter="today") → Tasks due today query_tasks(priority="high") → High priority tasks query_tasks(date_filter="today", priority="high") → High priority tasks due today query_tasks(search_term="meeting") → Tasks containing "meeting" |
| get_completed_tasksA | List tasks that have been completed within a given set of projects and time range. All parameters are optional, but at least one is recommended to narrow the results. Returns complete task objects (id, projectId, completedTime, ...) so you can act on them directly without a second lookup. Args: project_ids: List of project IDs to search across (use "inbox" for the inbox). start_date: ISO datetime WITH timezone offset, inclusive lower bound on completedTime (e.g., "2026-03-01T00:00:00+0800"). end_date: ISO datetime WITH timezone offset, inclusive upper bound on completedTime. Examples: # Tasks completed in one project during March 2026 {"project_ids": ["abc123"], "start_date": "2026-03-01T00:00:00+0800", "end_date": "2026-03-31T23:59:59+0800"} |
| get_all_habitsA | List all of the user's habits. No parameters. Returns complete habit objects (including each habit's ID) so you can act on them directly, for example to create a check-in afterwards. Example: get_all_habits() |
| get_habitA | Get a single habit by its ID. Args: habit_id: ID of the habit Example: get_habit("habit-1") |
| create_habitsA | Create one or more habits in TickTick. Supports both single habit and batch creation. For a single habit, pass a dictionary directly. For multiple habits, pass a list of dictionaries. Args: habits: Habit dictionary or list of habit dictionaries. Each habit must contain: - name (required): Habit name (max 1000 characters) - color (optional): Hex color code, e.g. "#4D8CF5" - type (optional): Habit type, e.g. "Boolean" - goal (optional): Numeric goal, default 1.0 - step (optional): Numeric step value - unit (optional): Unit of the goal, e.g. "Count" - repeat_rule (optional): Recurrence rule, e.g. "RRULE:FREQ=DAILY;INTERVAL=1" - reminders (optional): List of reminder trigger strings - encouragement (optional): Encouragement message - status (optional): Habit status Examples: # Single boolean habit, repeated daily { "name": "Read", "color": "#4D8CF5", "type": "Boolean", "goal": 1.0, "repeat_rule": "RRULE:FREQ=DAILY;INTERVAL=1" } |
| update_habitsA | Update one or more existing habits in place. Only the fields you provide are changed; omitted fields keep their current value. Args: habits: Habit update dictionary, or list of dictionaries. Each item must contain: - habit_id (required): ID of the habit to update - name (optional): New habit name - color (optional): New color (hex code) - type (optional): New habit type - goal (optional): New numeric goal - step (optional): New step value - unit (optional): New unit - repeat_rule (optional): New recurrence rule - reminders (optional): New reminder triggers - encouragement (optional): New encouragement message - status (optional): New status Examples: # Rename a single habit {"habit_id": "habit-1", "name": "Read more"} |
| checkin_habitsA | Create or update a habit check-in (mark a habit as done for a given day). Supports both single check-in and batch. For a single check-in, pass a dictionary directly. For multiple, pass a list of dictionaries. Important notes on the fields:
Args: checkins: Check-in dictionary or list of dictionaries. Each item must contain: - habit_id (required): ID of the habit to check in - date (optional): Day to check in, YYYY-MM-DD format. Defaults to today. - value (optional): Check-in value, default 1.0 - goal (optional): Check-in goal, default 1.0 - status (optional): Check-in status Examples: # Check in today for a boolean habit {"habit_id": "habit-1"} |
| get_habit_checkinsA | Get habit check-in records within a date range. Returns complete check-in objects so you can analyze streaks, completion rates or find missed days without a second lookup. Args: habit_ids: A single habit ID or a list of habit IDs from_date: Start date, YYYYMMDD integer (e.g. 20260401) to_date: End date, YYYYMMDD integer (e.g. 20260407) Example: # One week of check-ins for two habits {"habit_ids": ["habit-1", "habit-2"], "from_date": 20260401, "to_date": 20260407} |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/Code-MonkeyZhang/ticktick-mcp-enhanced'
If you have feedback or need assistance with the MCP directory API, please join our Discord server