ticktick-mcp
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| TICKTICK_PASSWORD | Yes | TickTick login password (or app password if enabled) | |
| TICKTICK_USERNAME | Yes | TickTick login email | |
| TICKTICK_CLIENT_ID | Yes | Client ID obtained from TickTick App registration | |
| TICKTICK_REDIRECT_URI | Yes | OAuth redirect URI that matches the one registered in TickTick | |
| TICKTICK_CLIENT_SECRET | Yes | Client Secret obtained from TickTick App registration | |
| TICKTICK_MCP_DOTENV_DIR | No | Optional path to directory containing .env file |
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_filter_tasksA | Return the tasks matching every supplied filter criterion. Supports any combination of project, priority, tag, status, and a date window applied to either the due date (open tasks) or the completion timestamp (completed tasks). Args:
detail (str, optional): Returns:
JSON list of matching task objects (compact by default; see
Freshness:
Uncompleted queries read local state, synced from the server at most
once per throttle window (default 15s,
Limitations:
- TickTick caps Agent Usage Guide:
- List open tasks in a project:
|
| ticktick_get_unprocessed_completionsA | Returns completed tasks for a project that have NOT yet been marked as processed by a domain agent. Could be called at the beginning of each conversation to check for new completions. After reviewing each returned task, call ticktick_mark_completion_processed to record that it has been handled. Args: project_id (str): TickTick project ID or name to check. Required. Accepts the project's name as well as its ID (case-insensitive, trimmed; "Inbox" resolves to the inbox). Two projects sharing a name is an error, not a guess. days (int): How many days back to look for completions. Default 30. Returns: JSON list of unprocessed task objects (may be empty). Each object includes: id, title, projectId, completedTime, content. Error: {"error": "...", "status": "error"} Usage Guide: - Call once per project at the start of each conversation. - For each returned task: read the content field, log meaningful outcomes if appropriate, then call ticktick_mark_completion_processed. - Example: ticktick_get_unprocessed_completions( project_id="your_project_id_here", days=30 ) |
| ticktick_mark_completion_processedA | Records that a domain agent has processed a completed task. Call this after reviewing each task returned by ticktick_get_unprocessed_completions. The task will no longer appear in future calls to that tool. Args: task_id (str): Full TickTick task ID. Required. project_id (str): Project ID or name the task belongs to. Required. Accepts the project's name as well as its ID (case-insensitive, trimmed; "Inbox" resolves to the inbox). Two projects sharing a name is an error, not a guess. title (str, optional): Task title (stored for human-readable audit trail). completed_time (str, optional): ISO completion timestamp from the task object. notes (str, optional): Brief notes on how the completion was handled. Returns: {"status": "ok", "task_id": "..."} on success. {"status": "already_processed", "task_id": "..."} if already recorded. {"error": "...", "status": "error"} on failure. Usage Guide: - Call once per task after finishing your handling of it. - Example: ticktick_mark_completion_processed( task_id="abc123", project_id="your_project_id_here", title="Fix kitchen tap", completed_time="2025-06-01T19:00:00+01:00", notes="Replaced ceramic disc, resolved" ) |
| ticktick_convert_datetime_to_ticktick_formatA | Convert an ISO 8601 datetime string into TickTick's storage format. TickTick uses Args:
datetime_iso_string (str): ISO 8601 datetime, e.g.
Returns:
On success: Agent Usage Guide:
- Call this when you need to set Example: ticktick_convert_datetime_to_ticktick_format( datetime_iso_string="2026-04-13T20:45:00+01:00", tz="Europe/London", ) |
| ticktick_create_taskA | Create a new task. Args:
title (str): Task title. Required.
project_id (str, optional): Project ID or name. Defaults to inbox.
Accepts the project's name as well as its ID
(case-insensitive, trimmed; "Inbox" resolves to the inbox).
Two projects sharing a name is an error, not a guess.
content (str, optional): Long-form content (markdown supported).
desc (str, optional): Short description / checklist subtitle.
all_day (bool, optional): True for all-day tasks.
start_date (str, optional): ISO 8601 start datetime, e.g.
Returns:
JSON object containing the created task. If verification flags
an issue, Limitations:
- Agent Usage Guide:
- Always pair Example: ticktick_create_task( title="Replace kitchen tap washer", project_id="", due_date="2026-06-01T20:45:00+01:00", expected_day_of_week="Monday", time_zone="Europe/London", priority=3, ) |
| ticktick_update_taskA | Update an existing task without wiping unmodified fields. The TickTick API requires the entire editable task on every update;
any omitted field is wiped server-side. To prevent that we fetch the
current task, then overlay ONLY the fields the caller explicitly
set ( Args:
task_object (TaskObject): Must include Returns:
JSON object containing the updated task.
Limitations:
- Read-only API fields ( Agent Usage Guide:
- To reschedule a task, send a single update with the new
Example: ticktick_update_task(task_object={ "id": "60ca9dbc8f08516d9dd56324", "projectId": "", "priority": 5, "dueDate": "2026-06-15T20:45:00+01:00", "expectedDayOfWeek": "Monday", "timeZone": "Europe/London", }) |
| ticktick_delete_tasksA | Delete one or more tasks. Args:
task_ids (str | list[str]): A single task ID, or a list of IDs.
An empty list returns an error.
project_id (str, optional): Used to construct a minimal delete
payload when Returns:
Agent Usage Guide:
- For tasks already completed in TickTick, supply Example: ticktick_delete_tasks( task_ids=["abc123", "def456"], project_id="", ) |
| ticktick_get_tasks_from_projectA | Return every open task in a project. Args:
project_id (str): The project's ID or name. Accepts the project's name as well as its ID
(case-insensitive, trimmed; "Inbox" resolves to the inbox).
Two projects sharing a name is an error, not a guess.
List them with Returns:
Compact (default): JSON list of compact task objects. If the
compact payload would still exceed the size budget, the
soonest-due tasks are returned and a final Limitations:
- Completed tasks are NOT included.
- Compact output is for browsing only. To EDIT a task, fetch the
full object with Freshness:
Local state is synced from the server at most once per throttle
window (default 15s, Example: ticktick_get_tasks_from_project( project_id="" ) |
| ticktick_complete_taskA | Mark a task as completed. Args: task_id (str): The task's full ID. Returns:
JSON object containing the refetched task (status=2 on success).
Limitations:
- Once completed, the Example: ticktick_complete_task(task_id="60ca9dbc8f08516d9dd56324") |
| ticktick_move_taskA | Move a task into a different project. Args: task_id (str): The task's full ID. new_project_id (str): Destination project's ID or name. Accepts the project's name as well as its ID (case-insensitive, trimmed; "Inbox" resolves to the inbox). Two projects sharing a name is an error, not a guess. Returns:
JSON object containing the moved task. If the target project
cannot be looked up locally, the move is still attempted.
Missing source task (no projectId field):
Example: ticktick_move_task( task_id="60ca9dbc8f08516d9dd56324", new_project_id="", ) |
| ticktick_make_subtaskA | Nest Args:
parent_task_id (str): The parent task's ID.
child_task_id (str): The task to become a subtask. Must differ
from Returns:
On success: Example: ticktick_make_subtask( parent_task_id="60ca9dbc8f08516d9dd56324", child_task_id="60ca9dbc8f08516d9dd56325", ) |
| ticktick_get_by_idA | Look up any object (task, project, tag) by its ID. Args: obj_id (str): The object's full ID. Returns:
JSON object of the matching record, or Freshness:
Local state is synced from the server at most once per throttle
window (default 15s, Example: ticktick_get_by_id(obj_id="60ca9dbc8f08516d9dd56324") |
| ticktick_get_allA | Dump everything of a single kind from the local sync state. Args:
search (str): Either Returns:
For Limitations:
- Example: ticktick_get_all(search="projects") |
| ticktick_syncA | Force an immediate refresh of TickTick state from the server. The active-read tools ( Returns:
Example: ticktick_sync() |
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/partymola/ticktick-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server