MCP server for Google Tasks. Read, create, edit, complete and organise your tasks through the official Google Tasks API.
Strong tool definitions with comprehensive schemas and descriptions. All 14 tools have clear verb-noun naming (list_, create_, update_, delete_, search_, complete_, uncomplete_, move_, clear_, rename_). Descriptions are detailed (100-250 chars typical), explaining WHAT, WHEN, and consequences. Input schemas are complete with types, enums, and constraints. Key strengths: parameter descriptions are thorough (e.g., 'List id, title, or alias' with fallback behavior); error guidance present (e.g., 'This refuses unless force=true' for delete_task); idempotency noted ('Safe to repeat' for complete/uncomplete). Gaps: output schemas not documented in source; no pagination support despite list tools; some parameter relationships undocumented (e.g., clear_due vs due in update_task).
Hide every completed task in a list. They stay retrievable, but hidden.
Mark one or more tasks done. This is the most common write by a wide margin — prefer it over update_task for finishing things. Safe to repeat.
Add a task. Omit list_id for the default list. due is a calendar date (YYYY-MM-DD); resolve relative dates like "Thursday" yourself before calling. parent_id makes it a subtask; previous_id places it after a given sibling.
Create a new task list.
Permanently delete a task. This cannot be undone. If the task looks like an instance of a repeating task, this refuses unless force=true, because deleting one instance through the API can delete the whole series. Prefer complete_tasks for finished work.
Permanently delete a task list and all its tasks.
Output schemas not documented. Tool descriptions explain inputs but not return types. LLMs cannot plan downstream calls or extract required fields (e.g., task_id from create_task response).
No pagination support on list tools (list_task_lists, list_tasks). Large result sets will blow context window. Missing limit, offset/cursor, and total_count fields.
Parameter relationship between 'due' and 'clear_due' in update_task is undocumented. LLMs may pass both, causing ambiguity. Should state: 'Omit both to leave due date unchanged; pass clear_due=true to remove; pass due to set a new date.'
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 63 | 2026-07-28+ | v2 |
Full detail for one task, including notes, links and subtask parent.
Show every Google Tasks list on the account, with a short alias and the real id. Either can be passed as list_id to the other tools.
List tasks, optionally from one list and/or within a due-date range. Omit list_id to cover every list. Due dates are calendar dates (YYYY-MM-DD): the Google Tasks API cannot store or return a due time.
Reorder a task, make it a subtask, or move it to another list. Note that repeating tasks cannot be moved between lists.
Rename a task list.
Find tasks whose title or notes contain the query, across every list. Case-insensitive substring match — the Google Tasks API has no search endpoint, so this filters client-side. Use it to locate a task before acting on it.
Mark one or more completed tasks as not done again. Safe to repeat.
Change a task's title, notes or due date. Only the fields you pass are touched — this uses patch, so omitting notes leaves existing notes intact. To remove a due date pass clear_due=true; omitting due leaves it unchanged. Cannot change parent or position — use move_task for that.
Destructive operations (delete_task, delete_task_list, clear_completed) lack confirmation/dry-run support. Agents can accidentally delete without recovery path.
Error handling guidance is minimal. Descriptions mention some failure modes (e.g., 'refuses unless force=true') but do not guide LLM recovery. Missing: 'If task not found, try search_tasks() first.'