MCP server for TickTick task management via the v2 API with field-preserving updates, day-of-week validation, completion tracking, and read-after-write verification.
Strong tool definitions with comprehensive descriptions and well-structured schemas. All 12 tools have clear verb-noun naming (get_, create_, update_, delete_, mark_, filter_, move_). Descriptions are detailed (100-300 chars typical), explaining WHAT, WHEN, and consequences. Input schemas are complete with types and descriptions for all parameters. Key strengths: day-of-week validation, completion tracking, project name resolution. Weaknesses: no output schemas documented, no pagination guidance for large result sets, limited error recovery hints, no tool annotations (readOnlyHint/destructiveHint).
Mark a task as completed and record it in the completion tracking database. The task is marked with status=2 (completed) and the completion is recorded so ticktick_get_unprocessed_completions will not return it.
Convert an ISO 8601 datetime string into TickTick's storage format. TickTick uses ``YYYY-MM-DDTHH:MM:SS+0000`` (UTC offset, no colon).
Create a new task in TickTick. Day-of-week validation is enforced: if you set dueDate, you must also supply expectedDayOfWeek, and they must match or the call fails before any API request. The task is created with the supplied fields. Any field omitted is left unset (not wiped). The created task is read back and compared against what was sent to surface any discrepancies.
Delete a task permanently. This operation cannot be undone. Protected task IDs (set via TICKTICK_MCP_PROTECTED_TASK_IDS environment variable) cannot be deleted.
Filter and list tasks by status, project, priority, tags, and date ranges. Returns tasks matching all specified criteria. Unspecified criteria match anything. Dates are compared at day granularity. Results are optionally sorted by priority (highest first) and rendered in compact or full detail.
No output schemas documented. Tools return strings (JSON-serialized responses) but LLMs cannot infer field structure, forcing manual parsing and increasing hallucination risk.
No tool annotations (readOnlyHint, destructiveHint, idempotentHint). LLMs cannot distinguish safe reads from destructive writes without reading descriptions, increasing misuse risk.
Pagination not documented for list tools. ticktick_get_all and ticktick_filter_tasks may return large result sets; no limit, offset, or cursor guidance provided.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 63 | <=2025-11-25 | v2 |
Fetch all tasks or all projects. With search='tasks': returns all tasks across all projects (optionally filtered by status and sorted by priority). With search='projects': returns all projects. Results are rendered in compact or full detail.
Fetch a single task by ID. Returns the full task object with all fields. Use this to get complete details before updating a task (the update round-trip requires the full object).
List all tasks in a project. Returns tasks in the specified project, optionally filtered by status and sorted by priority. Results are rendered in compact or full detail.
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. A task completed through ticktick_complete_task is recorded by that tool, so what this returns is what was completed elsewhere, in the TickTick app or on another client, where a note may be waiting to be read. One exception: no recurring completion is recorded, because it files its completed instance under an id the completing call never sees, so that instance appears here whoever completed it.
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.
Move a task to a different project. The task is moved to the target project. Protected task IDs (set via TICKTICK_MCP_PROTECTED_TASK_IDS environment variable) cannot be moved.
Update an existing task. Only the fields you supply are sent to the API; any field omitted is left unchanged (not wiped). Day-of-week validation is enforced if dueDate is set. The updated task is read back and compared against what was sent to surface any discrepancies.
Error recovery hints sparse. Tools document what fails but rarely suggest next steps (e.g., 'project not found, call ticktick_get_all(search=projects) to list available').
Protected task IDs (TICKTICK_MCP_PROTECTED_TASK_IDS env var) mentioned in delete_task and move_task descriptions but no tool to query which tasks are protected. Agents cannot plan around protection.