Skip to main content
Glama

Server Configuration

Describes the environment variables required to run the server.

NameRequiredDescriptionDefault
TICKTICK_CLIENT_IDYesYour TickTick Client ID from developer center
TICKTICK_ACCOUNT_TYPEYesAccount type: 'china' for domestic, 'global' for international
TICKTICK_REDIRECT_URINoRedirect URI for OAuth (default: http://localhost:8000/callback)http://localhost:8000/callback
TICKTICK_CLIENT_SECRETYesYour 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

CapabilityDetails
tools
{
  "listChanged": false
}
prompts
{
  "listChanged": false
}
resources
{
  "subscribe": false,
  "listChanged": false
}
experimental
{}

Tools

Functions exposed to the LLM to take actions

NameDescription
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"}

# Switch several projects to kanban view
[
    {"project_id": "abc123", "view_mode": "kanban"},
    {"project_id": "def456", "view_mode": "kanban"}
]
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"

# Multiple projects
["abc123", "def456", "ghi789"]
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"] }

# Multiple tasks (one timed, one all-day by omitting due_date)
[
    {
        "title": "Example A",
        "project_id": "1234ABC",
        "desc": "Timed task",
        "due_date": "2025-07-19T10:00:00+0000",
        "time_zone": "Asia/Shanghai",
        "priority": "high"
    },
    {
        "title": "Example B",
        "project_id": "1234XYZ",
        "content": "All-day task (no due_date means all-day)"
    }
]
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"}

# Multiple tasks
[
    {"project_id": "xyz789", "task_id": "abc123"},
    {"project_id": "xyz789", "task_id": "def456"},
    {"project_id": "abc123", "task_id": "ghi789"}
]
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"}

# Multiple tasks
[
    {"project_id": "xyz789", "task_id": "abc123"},
    {"project_id": "xyz789", "task_id": "def456"},
    {"project_id": "abc123", "task_id": "ghi789"}
]
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"}

# Multiple subtasks
[
    {"subtask_title": "Subtask 1", "parent_task_id": "abc123", "project_id": "xyz789", "priority": "medium"},
    {"subtask_title": "Subtask 2", "parent_task_id": "abc123", "project_id": "xyz789", "content": "Details"}
]
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"}

# Move multiple tasks
[
    {"from_project_id": "abc123", "to_project_id": "def456", "task_id": "task1"},
    {"from_project_id": "abc123", "to_project_id": "def456", "task_id": "task2"}
]
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"}

# All completed tasks across every project (no filters)
{}
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" }

# Multiple habits
[
    {"name": "Read", "repeat_rule": "RRULE:FREQ=DAILY;INTERVAL=1"},
    {"name": "Exercise", "repeat_rule": "RRULE:FREQ=WEEKLY;BYDAY=MO,WE,FR"}
]
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"}

# Update goal and repeat rule for two habits
[
    {"habit_id": "habit-1", "goal": 2.0},
    {"habit_id": "habit-2", "repeat_rule": "RRULE:FREQ=DAILY;INTERVAL=2"}
]
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:

  • date defaults to today when omitted. Internally converted to the API's YYYYMMDD stamp.

  • value defaults to 1.0. For boolean habits (e.g. "did I run today") keep 1.0; for numeric habits (e.g. "read 30 minutes") set the actual number achieved.

  • goal defaults to 1.0. Compare value vs goal to know whether the habit was met.

  • To backfill a missed day, pass the past date explicitly.

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"}

# Numeric habit: read 45 minutes against a 30 minute goal
{"habit_id": "habit-1", "value": 45, "goal": 30}

# Backfill yesterday
{"habit_id": "habit-1", "date": "2026-07-03"}

# Batch
[
    {"habit_id": "habit-1"},
    {"habit_id": "habit-2", "value": 45, "goal": 30}
]
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

NameDescription

No prompts

Resources

Contextual data attached and managed by the client

NameDescription

No resources

Latest Blog Posts

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