Skip to main content
Glama

ticktick_filter_tasks

Filter TickTick tasks by project, priority, tag, status, and due or completion date range in one query; return matching open or completed tasks as compact or full JSON results.

Instructions

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): "compact" (default) or "full". Compact drops the heavy content/desc/checklist items blobs and bulky sync metadata, keeping id, projectId, title, dueDate, startDate, priority, status, isAllDay, timeZone, tags plus a contentPreview (first ~200 chars of content) so keyword search still works. Full returns the raw task objects unchanged. To edit a task, call ticktick_update_task with its id and only the fields to change, plus projectId for a completed task. filter_criteria (dict | str): A criteria object, or a JSON string that decodes to one. No value below reaches the query unchecked, and any key not on this list is an error rather than something ignored, so a mistyped key fails loudly. Recognised keys:

    * ``status``: ``"uncompleted"`` (default) or ``"completed"``.
      When ``"completed"`` you should supply
      ``completion_start_date`` and/or ``completion_end_date``;
      without dates the result is an empty list.
    * ``project_id`` (str): Limit to tasks in this project.
      Accepts the project's name as well as its ID
      (case-insensitive, trimmed). Two projects sharing a
      name is an error, not a guess, and so is a project the
      account does not have.
    * ``priority`` (int): 0=None, 1=Low, 3=Medium, 5=High. Must be
      a JSON integer; the string ``"3"`` and the float ``3.0`` are
      errors, as is any other value.
    * ``tag_label`` (str): Tag name (case-sensitive), non-empty.
      Surrounding whitespace is trimmed.
    * ``due_start_date`` / ``due_end_date`` (str): ISO date or
      datetime strings; only used when ``status='uncompleted'``.
      A value that cannot be read as a date is an error, so a
      window is never silently dropped, and a window that ends
      before it begins is an error too. Bounds apply at day
      granularity, so any time part is ignored rather than
      validated.
    * ``completion_start_date`` / ``completion_end_date`` (str):
      ISO date or datetime strings; only used when
      ``status='completed'``. Same date rules as above.
    * ``tz`` (str): Default IANA timezone applied to date filters,
      e.g. ``"Europe/London"``. A name that does not resolve is an
      error rather than being ignored, so results are never
      labelled with a zone that was not applied.
    * ``sort_by_priority`` (bool): Sort by descending priority.
      Must be a JSON boolean; the strings ``"true"``/``"false"``
      and ``1``/``0`` are errors.

Returns: JSON list of matching task objects (compact by default; see detail). Empty list if nothing matches. If a compact result would still exceed the size budget, the soonest-due matches are returned and a final _truncation_note element reports how many were omitted -- nothing is dropped silently. On invalid input or backend failure: {"error": "...", "status": "error"}. One error carries an extra key: outcome: "project_list_unverifiable" means the project list could not be refreshed to confirm project_id, so retry rather than concluding the project is gone.

Freshness: Uncompleted queries read local state, synced from the server at most once per throttle window (default 15s, TICKTICK_MCP_SYNC_TTL_SECONDS); a change made elsewhere within that window may not be visible yet -- call ticktick_sync to force a refresh. Completed queries are always fetched live.

Limitations: - TickTick caps get_completed at 100 results; very wide completion windows are truncated server-side. - Filtering happens client-side after the fetch, so additional criteria do not reduce the number of network requests. - Compact output is for browsing only; full content for one task is available via ticktick_get_by_id or detail="full".

Agent Usage Guide: - List open tasks in a project: {"status": "uncompleted", "project_id": "<id>"} - List completed tasks in the last 7 days: { "status": "completed", "project_id": "<id>", "completion_start_date": "2026-05-21", "completion_end_date": "2026-05-28" } - Find high-priority open tasks due this month, sorted: { "priority": 5, "due_start_date": "2026-05-01", "due_end_date": "2026-05-31", "sort_by_priority": true }

Input Schema

NameRequiredDescriptionDefault
detailNocompact
filter_criteriaYes

Output Schema

NameRequiredDescriptionDefault
resultYes

Schema Changelog

Changes observed during successful MCP inspections.

  1. First observedv0.1.0

TDQS

A4.9/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden and does so: it discloses client-side filtering after fetch, the 15s sync throttle for open tasks vs live completed queries, the 100-result server cap, truncation with _truncation_note, strict error semantics including outcome project_list_unverifiable, and timezone handling.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The lead sentence front-loads purpose, then Args, Returns, Freshness, Limitations, and Usage Guide are clearly sectioned. It is long, but nearly every line carries actionable information; minor verbosity in repeated date-rule references keeps it from a 5.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Despite a complex, free-form filter_criteria parameter with a high-stakes strictness model, the description covers types, defaults, error paths, freshness, and truncation. An output schema exists, yet the extra Returns detail is additive rather than redundant, and nothing needed to call it correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate, and it does: it documents detail modes with exact field lists and a contentPreview, enumerates every recognised filter_criteria key, specifies types and error behavior (e.g., priority must be a JSON integer, tag_label is case-sensitive), and defines date-bound semantics per status.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The opening sentence states a specific verb and resource: return tasks matching every supplied filter criterion. It separates itself from siblings by naming ticktick_update_task, ticktick_get_by_id, and ticktick_sync with their distinct roles.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives an explicit Agent Usage Guide with three worked payloads, states that completed queries need completion dates or return empty, and points to ticktick_sync for freshness and ticktick_get_by_id for full content. The selection conditions between this tool and its alternatives are stated, not implied.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.