| get_projectsA | Retrieve projects with optional filtering. Parameters: project_id: str -- filter to specific project query: str -- search name/note/folder (case-insensitive) flagged_only, on_hold_only, completed_only: bool stalled_only: bool -- active projects with no available next actions include_dropped, include_completed: bool -- include hidden states include_full_notes: bool include_task_health: bool -- adds remainingCount, availableCount, overdueCount, deferredCount, stalled, health include_last_activity: bool -- adds lastActivityDate has_overdue_tasks: bool -- implies include_task_health tag_filter: list[str] -- projects with ALL specified tags due_after, due_before, due_on: str -- ISO date filters for due date defer_after, defer_before, defer_on: str -- ISO date filters for defer date planned_after, planned_before, planned_on: str completion_after, completion_before, completion_on: str dropped_after, dropped_before, dropped_on: str created_after, created_before, created_on: str modified_after, modified_before, modified_on: str min_task_count: int has_no_due_dates: bool sort_by: str -- "name", "due_date", "defer_date", "planned_date", "creation_date", "modification_date", "completion_date", "dropped_date"; sort_order: str -- "asc"/"desc"
Returns: id, name, folderPath, status, projectType, sequential (deprecated), completedByChildren, flagged, creationDate, modificationDate, completionDate, droppedDate, dueDate, deferDate, plannedDate, tags, note, lastReviewDate, nextReviewDate, reviewIntervalValue, reviewIntervalUnit. Optional health/activity fields when requested. |
| update_projectsA | Update one or more projects. Each item has id (required) plus fields to change. Parameters (per item): id: str (required) project_name, note, folder_path: str -- note: replaces rich text project_type: str; sequential: bool (deprecated) status: str -- "active", "on_hold", "done", "dropped" review_interval_value: int + review_interval_unit: str ("day"/"week"/"month"/"year"); review_interval_weeks: int (deprecated) last_reviewed: str -- ISO or "now" (recalculates next_review_date from review interval) next_review_date: str -- set AFTER last_reviewed to override the calculated date completed_by_children: bool due_date, defer_date, planned_date: str -- ISO or "" to clear flagged: bool estimated_minutes: int tags: list[str] -- full replacement (conflicts with add_tags/remove_tags) add_tags, remove_tags: list[str] recurrence: str -- RRULE or "" to clear; repetition_method: str -- "fixed", "start_after_completion", "due_after_completion"
|
| get_tasksA | Get tasks with optional filtering. Parameters: task_id, parent_task_id, project_id: str query: str -- search name/note flagged_only, available_only, overdue, dropped_only, blocked_only, next_only, inbox_only: bool include_completed: bool include_full_notes: bool tag_filter: list[str]; tag_filter_mode: str -- "and" (default), "or", "not" due_after, due_before, due_on: str -- ISO date filters for due date defer_after, defer_before, defer_on: str -- ISO date filters for defer date planned_after, planned_before, planned_on: str completion_after, completion_before, completion_on: str -- requires include_completed dropped_after, dropped_before, dropped_on: str -- requires dropped_only or include_completed modified_after, modified_before, modified_on, created_after, created_before, created_on: str max_estimated_minutes: int -- quick wins filter has_estimate: bool recurring_only: bool sort_by: str -- "name", "due_date", "defer_date", "planned_date", "creation_date", "modification_date", "completion_date", "dropped_date"; sort_order: str
Returns: id, name, projectName, completed, dropped, blocked, available, next, flagged, dueDate, deferDate, plannedDate, estimatedMinutes, tags, note, parentTaskId, subtaskCount, sequential, isRecurring, recurrence, repetitionMethod, repeatSummary, nextDueDate, nextDeferDate, nextPlannedDate, catchUpAutomatically, creationDate, modificationDate, completionDate, droppedDate. Key fields: available -- true when actionable (accounts for inherited status from containers) repeatSummary -- human-readable recurrence; always use this for display, don't parse RRULE repetitionMethod -- "fixed" (original schedule), "start_after_completion" (defer shifts), "due_after_completion" (due shifts) catchUpAutomatically -- recurring only; true = one catch-up occurrence, false = each missed interval spawns its own Date fields are effective (include inherited from project). Next-occurrence fields populated only for recurring tasks. Tasks inherit tags from their parent project. A task showing a tag it wasn't explicitly assigned has inherited it -- this is expected, not a bug.
|
| create_tasksA | Create one or more tasks. Parameters (per item): task_name: str (required) project_id: str -- mutually exclusive with parent_task_id parent_task_id: str -- creates subtask note: str (plain text only) due_date, defer_date, planned_date: str -- ISO 8601 flagged: bool tags: list[str] -- must already exist estimated_minutes: int sequential: bool -- subtasks completed in order completed_by_children: bool
|
| create_projectsA | Create one or more projects. Parameters (per item): name: str (required) note, folder_path: str project_type: str -- "parallel" (default), "sequential", "single_actions" sequential: bool (deprecated, use project_type) review_interval_value: int + review_interval_unit: str ("day"/"week"/"month"/"year"); review_interval_weeks: int (deprecated) completed_by_children: bool due_date, defer_date, planned_date: str -- ISO 8601
|
| update_tasksA | Update one or more tasks. Each item has id (required) plus fields to change. Parameters (per item): id: str (required) task_name, project_id, parent_task_id, note: str due_date, defer_date, planned_date: str -- ISO or "" to clear flagged, completed: bool -- completed=True on recurring task creates next occurrence status: str -- "dropped" (prefer completed: bool for completion) tags: list[str] -- full replacement (conflicts with add_tags/remove_tags) add_tags, remove_tags: list[str] estimated_minutes: int recurrence: str -- RRULE or "" to clear; repetition_method: str sequential: bool; completed_by_children: bool
|
| get_tagsA | Retrieve all tags. Returns: id, name, status ("active"/"on hold"/"dropped"), parentTagId (empty if top-level; create/update accept parent by NAME not ID), childrenAreMutuallyExclusive (assigning one child silently removes siblings). |
| create_tagsB | Create one or more tags. Parameters (per item): |
| update_tagsB | Update one or more tags. Each item has id (required) plus fields to change. Parameters (per item): id: str (required) name, status: str -- status: "active", "on_hold", "dropped" children_are_mutually_exclusive: bool parent_tag: str -- move to parent by name, "" for top level
|
| delete_tagsB | Delete tags. Tasks lose tag association but are not deleted. |
| delete_tasksC | Permanently delete tasks. Cannot be undone. |
| delete_projectsA | Permanently delete projects and all their tasks. Cannot be undone. |
| get_foldersB | Get all folders with hierarchy. Returns: id, name, path (e.g. "Work > Clients"), status ("active"/"dropped"). |
| create_foldersB | Create one or more folders. Parameters (per item): |
| update_foldersA | Update one or more folders. Each item has id (required) plus fields to change. Parameters (per item): |
| reorder_taskA | Move a task before or after another task within the same project/level. Exactly one of before/after required. In sequential projects, order = dependencies. |
| reorder_projectA | Move a project before or after another project within the same folder. Exactly one of before/after required. |
| get_perspectivesA | Get all perspectives. Returns: name, type (built-in/custom), id |
| switch_perspectiveC | Switch front window to a perspective. |
| set_focusA | Focus on projects/folders, or clear focus. Does not support tasks or tags. |
| get_focusB | Get currently focused items. |