List Tasks
vault_list_tasksList and filter checkbox tasks across an entire Obsidian vault by status, date, priority, folder, or heading, returning each task's exact location for direct triage.
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, π onCompletion, π/β dependencies) and Dataview inline fields ([due:: 2026-07-04], [priority:: high], ...). Every result carries its attribution β note path, folder, line number, and the nearest heading when the task sits under one (the lane on a Kanban board) β 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({ top_level_only: true, path: "TASKS.md" }) β board cards only, excluding checklist sub-items
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.
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. tag: bare inline-task-tag name; a parent tag matches children. heading: exact heading text or array of headings, case-sensitive, OR-combined. path: one note, must end in ".md".
top_level_only: boolean (default false). When true, only top-level tasks (depth 0) are returned β excludes indented sub-tasks and checklist items.
sort_by: "due" (default) | "scheduled" | "start" | "created" | "done" | "priority" | "note_mtime" | "position". "position" sorts by file path then line number β the natural order for Kanban boards.
limit: max results (default 50). The total field always reports the full match count.
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
Returns: JSON { total, tasks }. Every task carries path, line, status, status_char, description, folder, depth (0 for top-level, 1+ for sub-tasks), is_kanban_task, depends_on, and tags (the arrays are [] when empty). Every other field appears only when the task has it: heading (nearest heading above the task), created/scheduled/start/due/done/cancelled dates, priority, recurrence, on_completion, task_id, block_id, parent_block_id (sub-tasks whose parent carries a ^block-id), done_lanes (Kanban boards only), and subtask_progress β { done, total } over the task's DIRECT checklist children, present only when the task has a checklist (absent = no checklist items); done counts status "done" only (a cancelled child counts toward total, not done), and the counts ignore the query's filters β so a filtered or top_level_only read still shows each card's checklist progress.
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); total always reports the full match count | |
| 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. | not_done |
| 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. | due |
| 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. | |
| top_level_only | No | When true, only top-level tasks (depth 0) are returned β excludes indented sub-tasks and checklist items. Default false. |