List Tasks
vault_list_tasksQuery all checkbox tasks across the vault, with filters for status, dates, priority, folder, or heading, returning note path, line, and metadata.
Instructions
List checkbox tasks across the whole vault with structured filters β the Tasks-plugin data model over MCP. Both task metadata formats are indexed: emoji signifiers (π due, β³ scheduled, π« start, β created, β done, β cancelled, πΊβ«πΌπ½β¬ priority, π recurrence, π/β dependencies) and Dataview inline fields ([due:: 2026-07-04], [priority:: high], ...). Every result carries its full attribution β note path, folder, nearest heading (the lane on a Kanban board), and line number β so no follow-up reads are needed to locate a task. Task lines inside fenced code blocks and %% %% comment blocks are not indexed.
Example: vault_list_tasks({ due: { before: "2026-07-04" } }) β overdue triage; the default status (not_done) and sort (due ascending) make this the "what's overdue?" call Example: vault_list_tasks({ path: "Code Projects/vault-cortex/TASKS.md", heading: ["Active", "Up Next", "Waiting On"], sort_by: "position" }) β actionable Kanban lanes in board order; position is the natural sort for boards (file path then line number, preserving card arrangement) Example: vault_list_tasks({ folder: "Code Projects/vault-cortex" }) β all open tasks across a project tree (TASKS.md + task-notes/ subdirectories); folder is a recursive prefix match Example: vault_list_tasks({ status: "done", done: { after: "2026-06-26" } }) β what got completed this week Example: vault_list_tasks({ status: ["todo", "in_progress"] }) β explicit equivalent of "not_done" Example: vault_list_tasks({ priority: ["highest", "high"], sort_by: "priority" }) β most urgent open work first
When to use: Any vault-wide task triage question β "what's overdue?", "what's open per project?", "what did I finish this week?" β in one call instead of per-board reads. Prefer vault_read_note (heading mode) to read one specific board lane verbatim. Prefer vault_search for full-text queries over note content.
Parameters:
status: a single value or an array of values, OR-combined (default "not_done"). Values: "not_done" (todo + in_progress, excludes done AND cancelled), "todo", "in_progress", "done", "cancelled", "all". Virtual values expand in arrays: ["not_done", "done"] matches todo + in_progress + done. Checkbox chars map to statuses the way the Tasks plugin maps them: " " todo, "/" in_progress, "x"/"X" done, "-" cancelled, any other char todo.
due / scheduled / start / done / created / cancelled: date filters, each { before, on, after } in YYYY-MM-DD β before/after are exclusive, on is exact. A date filter only matches tasks that HAVE that date.
priority: array of "highest" | "high" | "medium" | "low" | "lowest" | "none", OR-combined ("none" = tasks with no priority signifier).
folder: recursive note-path prefix β includes all notes under the folder and its subdirectories (e.g. "Code Projects/vault-cortex" matches TASKS.md and task-notes/*.md). Use path for a single board file. tag: bare inline-task-tag name; a parent tag matches children ("errand" matches "errand/groceries"). heading: exact heading text or array of headings, case-sensitive, OR-combined (e.g. ["Active", "Up Next"] returns tasks under either heading β useful for querying multiple Kanban lanes at once). path: one note, must end in ".md".
sort_by: "due" (default) | "scheduled" | "start" | "created" | "done" | "priority" | "note_mtime" | "position". Date sorts put dateless tasks last in both directions and cascade through related dates when the primary is absent β due falls through to scheduled β start β created; scheduled, start, and created cascade similarly through the remaining date fields. Each cascade step uses its own natural direction (due/scheduled ascending, start/created descending), so a task with no due date but a created date sorts newest-first rather than inheriting due's ascending order. An explicit sort_direction overrides all cascade steps uniformly. "done" does not cascade β it sorts by done date alone, with a modified-time tiebreaker for undated tasks. Fully dateless tasks tie-break by note modified time (most recent first), then file position. Priority sorts highestβlowest with unprioritized between medium and low. "position" sorts by file path then line number β the natural order for Kanban boards where card position IS priority.
limit: max results (default 50). The total field always reports the full match count, so "50 of 338" is distinguishable from "all 50".
Errors:
A malformed or calendar-invalid date filter throws with remediation text ("Use YYYY-MM-DD")
path without the ".md" extension is rejected
No matches returns { total: 0, tasks: [] }, not an error β don't use as an existence check
Returns: JSON { total, tasks }. Each task carries: path, line (1-based file line number), status, status_char (raw checkbox character, for custom-status vaults), description (inline #tags kept in the text), folder (the note's full parent folder), heading (nearest heading above the task β on a Kanban board this is the lane name, null-omitted above the first heading), lane (the Kanban lane name β only present when is_kanban_task is true, same value as heading but semantically explicit), done_lanes (headings marked with the Kanban plugin's Complete marker β only present for Kanban boards; use to determine the done lane for vault_update_task), plus whichever metadata the task has: created/scheduled/start/due/done/cancelled dates, priority, recurrence (rule text β parsed, never executed), on_completion, task_id, depends_on, tags (bare inline tag names), block_id, is_kanban_task (true when the task's parent note has kanban-plugin frontmatter β present only when true, omitted for regular tasks; when true, heading carries the Kanban lane name and completing the task requires a lane move via vault_update_task, not just a checkbox toggle). Null fields, false booleans, and empty arrays are omitted to keep responses lean.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| due | No | Due date (π / [due:: ]) bounds | |
| tag | No | Inline task tag, bare name without "#"; parent tags match children | |
| done | No | Done date (β / [completion:: ]) bounds | |
| path | No | Restrict to one note (vault-relative path ending ".md") | |
| limit | No | Max results (default 50) | |
| start | No | Start date (π« / [start:: ]) bounds | |
| folder | No | Restrict to a note-path prefix (e.g. "Code Projects/vault-cortex") | |
| status | No | Status filter, OR-combined (default "not_done" = todo + in_progress, excluding done and cancelled). Virtual values expand in arrays: "not_done" adds todo + in_progress, "all" includes every status. | |
| created | No | Created date (β / [created:: ]) bounds | |
| heading | No | Exact heading text or array of headings, OR-combined, case-sensitive (e.g. "Active" or ["Active", "Up Next"]) | |
| sort_by | No | Sort key (default "due"). Date sorts cascade through related fields when the primary is absent; each fallback uses its own natural direction. "position" sorts by file path then line number β the natural order for Kanban boards. | |
| priority | No | Priority levels, OR-combined; "none" selects tasks with no priority signifier | |
| cancelled | No | Cancelled date (β / [cancelled:: ]) bounds | |
| scheduled | No | Scheduled date (β³ / [scheduled:: ]) bounds | |
| sort_direction | No | Sort direction. Default per field: "asc" for due/scheduled/priority/position, "desc" for start/created/done/note_mtime. Within a date cascade, each fallback uses its own default; an explicit value overrides all fields uniformly. |