mcp-google-tasks
Manage Google Tasks through 15 MCP tools: browse and organize task lists and tasks, handle due dates and notes, track completion, and reach the raw API when needed.
Read: list/get task lists (including
@default), list/get tasks with filters for due/completed dates,updated_minsync, hidden/deleted/assigned tasks.Organize: create, rename, and delete task lists; create tasks with title, notes, due date, parent, and previous; move tasks to reorder, re-parent, or move to another list.
Track completion: complete tasks, reopen them as the undo, and clear all completed tasks from a list.
Delete permanently: delete individual tasks or whole task lists, with destructive hints for confirmation boundaries.
Raw API access:
raw_requestlets you call any Google Tasks API v1 path directly when typed tools don't cover it.AI-friendly signals: tools are annotated readOnly/idempotent/destructive so clients can ask for confirmation appropriately.
Provides tools for managing Google Tasks, including listing, creating, updating, moving, completing/reopening, and deleting tasks and task lists, as well as clearing completed tasks and accessing the raw Google Tasks API.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@mcp-google-tasksShow me my task lists and everything due before Friday in my default list."
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Google Tasks MCP
English | Русский
A1 Google Tasks MCP lets an AI app manage Google Tasks in plain language. Plan a project as a task list, break work into subtasks with due dates and notes, mark things done and keep everything in order.
It uses the Google Tasks API with your Google account. It separates reversible completion from permanent deletion and makes the limits of the Tasks API explicit instead of implying that every to-do feature is possible.
15 tools. List, create and update task lists and tasks, move tasks, manage completion, sweep finished work and reach the raw API when a dedicated tool is missing.
Completion is reversible, deletion is not.
complete_taskhas an undo (reopen_task); the delete tools are separate and marked destructive.Due dates are honest. The API stores only the calendar date — the server never pretends to schedule a time of day; times belong in the notes.
Minimal Google scope. A single
tasksscope, without Drive, Calendar or Gmail access.
Start with a read-only question:
Show me my task lists and everything due before Friday in my default list.
Connect the server · Explore use cases · Open technical documentation
See it work in a minute
You: What's still open in the "Website launch" list, and what's due this week?
Assistant: Shows the open tasks with their due dates, notes and subtasks. Nothing changes.
You: Add a task "Send the launch announcement" due Friday as a subtask of "Marketing".
Assistant: Shows the target list, the parent task and the proposed task, then asks for confirmation before creating it.
You: Confirm.
Assistant: Creates the subtask with a Friday due date. It does not complete or delete anything unless you ask separately.
Related MCP server: Google Tasks MCP Server
Contents
Quick start
You need Node.js 20+, a Google account and OAuth credentials from a Google Cloud project with the Google Tasks API enabled.
Add the server to your AI app.
Ask the read-only question above.
In the app: open Settings → MCP servers, select Add server, choose STDIO, enter the command npx -y mcp-google-tasks@latest and environment variables GOOGLE_TASKS_CLIENT_ID, GOOGLE_TASKS_CLIENT_SECRET, GOOGLE_TASKS_REFRESH_TOKEN, then select Save and Restart.
From the command line:
codex mcp add google-tasks \
--env GOOGLE_TASKS_CLIENT_ID=your_client_id \
--env GOOGLE_TASKS_CLIENT_SECRET=your_client_secret \
--env GOOGLE_TASKS_REFRESH_TOKEN=your_refresh_token \
-- npx -y mcp-google-tasks@latestcodex mcp listclaude mcp add \
--env GOOGLE_TASKS_CLIENT_ID=your_client_id \
--env GOOGLE_TASKS_CLIENT_SECRET=your_client_secret \
--env GOOGLE_TASKS_REFRESH_TOKEN=your_refresh_token \
--transport stdio --scope user google-tasks \
-- npx -y mcp-google-tasks@latestclaude mcp listThe current official path is Settings → Extensions. For a custom desktop extension, open Advanced settings → Extension Developer → Install Extension…, select a .mcpb file and follow the prompts.
This repository currently publishes an npm stdio package and does not contain a .mcpb bundle. For Claude Desktop builds that still support local configuration, use the following JSON stdio configuration as a fallback:
{
"mcpServers": {
"google-tasks": {
"command": "npx",
"args": ["-y", "mcp-google-tasks@latest"],
"env": {
"GOOGLE_TASKS_CLIENT_ID": "your_client_id",
"GOOGLE_TASKS_CLIENT_SECRET": "your_client_secret",
"GOOGLE_TASKS_REFRESH_TOKEN": "your_refresh_token"
}
}
}
}In those builds, save it to ~/Library/Application Support/Claude/claude_desktop_config.json on macOS or %APPDATA%\Claude\claude_desktop_config.json on Windows.
Claude Desktop MCP documentation
Add this to ~/.cursor/mcp.json on macOS/Linux or %USERPROFILE%\.cursor\mcp.json on Windows:
{
"mcpServers": {
"google-tasks": {
"type": "stdio",
"command": "npx",
"args": ["-y", "mcp-google-tasks@latest"],
"env": {
"GOOGLE_TASKS_CLIENT_ID": "your_client_id",
"GOOGLE_TASKS_CLIENT_SECRET": "your_client_secret",
"GOOGLE_TASKS_REFRESH_TOKEN": "your_refresh_token"
}
}
}
}Run MCP: Open User Configuration and add:
{
"servers": {
"google-tasks": {
"type": "stdio",
"command": "npx",
"args": ["-y", "mcp-google-tasks@latest"],
"env": {
"GOOGLE_TASKS_CLIENT_ID": "${input:tasks_client_id}",
"GOOGLE_TASKS_CLIENT_SECRET": "${input:tasks_client_secret}",
"GOOGLE_TASKS_REFRESH_TOKEN": "${input:tasks_refresh_token}"
}
}
},
"inputs": [
{ "type": "promptString", "id": "tasks_client_id", "description": "Google OAuth client ID" },
{ "type": "promptString", "id": "tasks_client_secret", "description": "Google OAuth client secret", "password": true },
{ "type": "promptString", "id": "tasks_refresh_token", "description": "Google OAuth refresh token", "password": true }
]
}Check it with MCP: List Servers.
What you can ask it to do
See your lists and plan the day
Show my task lists and the open tasks in each one.
What's due this week in the default list? Include subtasks.
What changed since yesterday? Include completed and hidden tasks.
Create and organize work
Create a "Website launch" list with tasks for design, content and QA.
Add a task due Friday with notes, nested under the "Marketing" task.
Move a task to the top of the list, under another task, or into a different list.
Track completion
Mark the review task done — and reopen it if the work comes back.
Sweep every completed task out of the list view in one go.
Show the hidden tasks that were swept earlier.
How a task changes
Tasks live in task lists. Every account has a built-in default list, addressed by the special id
@default;create_tasklistadds more.A task carries a title, notes and a date-only due date — the API discards the time portion, so a time of day belongs in the notes.
Ordering and nesting change only through
move_task; the API'spositionfield is read-only.Completing a task is reversible:
reopen_taskbrings it back. Deleting a task or a list is permanent, and deleting a list removes every task in it.
Recurring tasks cannot be created through the API. Tasks assigned from Google Docs or Chat can be read but not created or moved to another list, and deleting one also removes it in the originating document. There is no server-side search or sorting — the server lists tasks and the AI client filters them.
What can change
Operation | What happens | Confirmation boundary |
Read task lists and tasks | Reads lists, tasks and their filters | No change |
Create a task list or a task | Adds a list or an open task | Changes Google Tasks |
Update a task or rename a list | Changes a title, notes or due date | Changes a task |
Move a task | Changes order, nesting or the containing list | Changes a task |
Complete or reopen a task | Toggles completion status | Reversible change |
Clear completed tasks | Sweeps every completed task in a list out of view | Destructive |
Delete a task or a task list | Removes the task, or the list with everything in it | Destructive |
Raw API request | Can call API methods without a dedicated tool | Potentially destructive |
The AI client controls confirmation prompts. The server marks reads, writes and destructive tools so the client can distinguish an inspection from a live change.
Getting access
Google Tasks requires OAuth 2.0; an API key is not enough.
Create or select a Google Cloud project and enable Google Tasks API.
Configure the OAuth consent screen and create a Desktop app OAuth client.
Authorize the Google account that owns the tasks. The OAuth 2.0 Playground can obtain the refresh token when Use your own OAuth credentials is enabled.
Request the scope:
https://www.googleapis.com/auth/tasks
Testing-mode OAuth refresh tokens can expire after seven days. Publish the OAuth app, or use an Internal app in a Workspace domain, when you need long-lived access. Treat the client secret and refresh token as passwords.
Configuration
Variable | Required | Description |
| Yes* | OAuth client ID. |
| Yes* | OAuth client secret. |
| Yes* | OAuth refresh token. |
| Yes* | Short-lived alternative to the OAuth trio. |
| No | Google Tasks API base URL override. |
| No | Per-request timeout; default |
| No | Temporary-error retries; default |
* Provide either the OAuth trio or an access token.
Without credentials the server still starts and completes the MCP handshake; the first tool call then fails with a message naming the variables to set and asking for a restart.
Data, limits and background work
Requests go to Google Tasks. The local server refreshes Google OAuth tokens and calls the Tasks API. Its anonymous telemetry contains an installation ID, package version, AI client and platform versions, and tool names — never OAuth tokens, task content, tool arguments or prompts. Set
ASKADS_TELEMETRY=0to opt out.Google applies a daily quota. The Tasks API has a courtesy limit of 50,000 queries per day per project. On
429, the server uses backoff; reads also retry after network and5xxerrors, while writes are not replayed after an uncertain failure — check the outcome withget_taskinstead.There is no background polling. The server runs only when called.
list_taskssupports incremental sync through theupdated_minfilter, so an AI app with scheduled tasks can check for changes periodically without re-reading everything.
Technical documentation
MCP capability catalog — task-oriented pages for every tool.
Support
Found a bug or need a scenario? Create an issue or write in Telegram.
Available Tools
15 toolsclear_completed_tasksClear completed tasksADestructive
Clears ALL completed tasks from one list in a single call: they are flagged hidden and vanish from default listings (the Google Tasks UI does this as "Delete all completed"). The tasks are not deleted — list_tasks with show_completed=true and show_hidden=true still returns them, and reopen_task can restore any of them individually — but there is no single call to un-clear a whole list, so treat it as destructive. Open (needsAction) tasks are untouched. Returns {cleared:true} with the tasklist_id echoed.
| Name | Required | Description | Default |
|---|---|---|---|
| tasklist_id | Yes | The task list id — from list_tasklists or create_tasklist output. "@default" addresses the user's default list. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Even though annotations already mark this as destructive, the description adds critical behavioral detail: tasks are flagged hidden rather than deleted, remain retrievable via list_tasks with show_completed=true and show_hidden=true, and can be restored individually with reopen_task. It also warns that there is no bulk un-clear and explicitly states the return value. This goes well beyond the structured annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the main action and scope, then provides dense, relevant detail about hidden state, recovery, destructiveness, and return shape. Every sentence earns its place, and the parenthetical about the Google Tasks UI adds useful real-world context without padding.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter tool with no output schema, the description is highly complete. It covers what the tool does, what it does not do, side effects, recoverability, destructive nature, and the response format. An agent has everything needed to call it correctly and predict its consequences.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the schema already documents tasklist_id, including the '@default' special value. The description adds that the ID is echoed in the response, but it doesn't need to explain parameter meaning further because the schema handles it fully. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: it clears ALL completed tasks from one list in a single call. It clearly distinguishes itself from deleting tasks, completing individual open tasks, and restoring tasks via reopen_task. The scope and behavior are unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear context: it operates on completed tasks only, leaves open (needsAction) tasks untouched, and has no bulk undo. It also names list_tasks and reopen_task as recovery paths. However, it does not explicitly say when not to use this tool versus a sibling like complete_task or delete_task, so it stops just short of complete routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
complete_taskComplete a taskADestructiveIdempotent
Marks a task completed (status=completed; the API stamps the completed timestamp). This is REVERSIBLE — reopen_task undoes it — and is the right call for "done", unlike delete_task which erases the task. The API call touches only the addressed task: completing a parent does NOT cascade to its subtasks — complete them individually if the whole tree is done. A completed task stays listed until cleared: list_tasks still returns it with show_completed=true (+ show_hidden=true after a clear). Returns the updated task with status and completed.
| Name | Required | Description | Default |
|---|---|---|---|
| task_id | Yes | The task id — from list_tasks, get_task or create_task output. | |
| tasklist_id | Yes | The task list id — from list_tasklists or create_tasklist output. "@default" addresses the user's default list. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already indicate mutation and destructiveness, but the description adds valuable behavioral detail: the operation is reversible, it does not cascade to subtasks, and completed tasks remain listed until cleared with specific flags. It also discloses return behavior. There is no contradiction with annotations because destructiveHint is consistent with mutating task state, and the description clarifies the scope and reversibility.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact but information-dense. Every sentence contributes either a precise action, a contrast with a sibling, a non-obvious behavioral caveat, or the return contract. It is front-loaded with the core action and then branches into the most decision-relevant caveats.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description supplies the return shape ('updated task with status and completed'). It covers reversibility, cascade semantics, listing behavior after completion, and the correct usage boundaries versus siblings. For a two-parameter, fully-schema-documented tool, nothing essential is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so both parameters are already fully documented with provenance and the @default convention. The description does not need to repeat or add parameter detail; it simply relies on the schema, which is acceptable.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States explicitly that the tool marks a task completed with status=completed and a stamped timestamp. It clearly differentiates itself from reopen_task and delete_task by describing what each sibling does differently. The behavior on parent tasks is also defined, which sharpens the purpose.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives direct guidance on when to use it ('the right call for done') and when not to ('unlike delete_task', 'does NOT cascade to its subtasks'). It also names reopen_task as the undo path and tells the caller to complete subtasks individually when needed. This is explicit routing information.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_taskCreate a taskA
Creates a task in a list and returns it (id, title, position, webViewLink, ...). due accepts YYYY-MM-DD or an RFC3339 timestamp, but Google Tasks stores only the DATE — any time of day is discarded and never returned. notes is plain text (max 8192 chars); title max 1024 chars. Hierarchy and order are set at creation via parent (the id of an existing task in the same list — the new task becomes its subtask; Google Tasks supports one level of nesting reliably) and previous (the sibling to insert after; omit both to land at the top of the list). New tasks start as needsAction — use complete_task to complete. Recurrence cannot be created or read through the API.
| Name | Required | Description | Default |
|---|---|---|---|
| due | No | Due date: YYYY-MM-DD or RFC3339. Only the date is stored — the time part is discarded. | |
| notes | No | Free-text notes shown under the title (max 8192 chars). | |
| title | Yes | The task title (max 1024 chars). | |
| parent | No | Parent task id in the same list — makes the new task a subtask. | |
| previous | No | Sibling task id to insert after (same parent). Omit to insert at the first position. | |
| tasklist_id | Yes | The task list id — from list_tasklists or create_tasklist output. "@default" addresses the user's default list. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations (readOnlyHint=false, idempotentHint=false, etc.), the description discloses key behavioral traits: due time-of-day is discarded and never returned, notes are plain text with a max, tasks start as needsAction, hierarchy supports one nesting level, and recurrence is unsupported. No contradiction with annotations is present.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense but every sentence carries operational value. It fronts the core purpose and return fields, then covers date semantics, limits, ordering, state, and a limitation—all in about 80 words with no filler or repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 6-parameter tool with no output schema, the description is remarkably complete: it lists return fields, explains ordering and nesting, sets expectations about state (needsAction), and flags the recurrence limitation. An agent can select and invoke this tool correctly without needing additional context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Even though schema coverage is 100%, the description adds meaning beyond the JSON schema: it explains how 'due' time is stripped, that parent creates a subtask with 'one level of nesting reliably', that omitting both parent and previous lands the task at the top, and that previous is a sibling insert-after. These semantics are not in the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb and resource ('Creates a task in a list') and explicitly enumerates the return payload ('id, title, position, webViewLink, ...'). It also distinguishes itself from siblings like create_tasklist and update_task by focusing on task creation and returning the created object.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit when-not guidance: 'Recurrence cannot be created or read through the API' and 'New tasks start as needsAction — use complete_task to complete.' This routes the agent to an alternative tool under a clear condition, which is exactly what this dimension rewards.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_tasklistCreate a task listA
Creates a new task list and returns it (id, title, updated). The API accepts only a title — there are no other list-level settings. The returned id is the tasklist_id every task tool needs. Google caps the number of lists per account; a quota failure surfaces as an HTTP error, not silence.
| Name | Required | Description | Default |
|---|---|---|---|
| title | Yes | The list title shown in Google Tasks (max 1024 chars). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds valuable behavioral context beyond the annotations: the created list is returned, the API accepts only a title, the returned id is central to later task operations, and Google caps lists per account with quota failures surfacing as HTTP errors rather than silent failures. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Every sentence earns its place: return shape, scope of accepted settings, downstream importance of the id, and quota/error behavior. The description is compact, front-loaded, and free of filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter creation tool with no output schema, the description is complete: it states what happens, what is returned, how the result is used, and what error behavior to expect. The low complexity means no significant gaps remain.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the title parameter is already well documented in the input schema. The description adds context by emphasizing that title is the only accepted setting, which reinforces the schema but does not fundamentally enrich the parameter semantics.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'Creates a new task list and returns it.' It also names the returned fields, distinguishing this creation tool from the many sibling get/update/delete/list tools in the same family.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The context is clear: this is the tool for creating a list, and the description explains that the returned id becomes the tasklist_id required by task tools. It does not explicitly compare itself to alternatives like update_tasklist, but its role is unambiguous from the description and sibling set.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_taskDelete a taskADestructive
Deletes a task permanently — this is NOT the same as completing it. To mark work done (reversibly), use complete_task instead. A deleted task disappears from default listings immediately; for a while it remains visible to list_tasks with show_deleted=true (deleted:true) so sync clients can observe the deletion, then it is gone for good. Deleting a parent task also deletes its subtasks. Returns {deleted:true} with the ids echoed.
| Name | Required | Description | Default |
|---|---|---|---|
| task_id | Yes | The task id — from list_tasks, get_task or create_task output. | |
| tasklist_id | Yes | The task list id — from list_tasklists or create_tasklist output. "@default" addresses the user's default list. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already signal destructive, but the description adds crucial behavioral detail: permanent deletion, soft-delete visibility window with show_deleted=true, cascading to subtasks, and the response shape. This goes well beyond what the annotations convey.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense but every sentence adds a distinct fact: permanence, distinction from completion, soft-delete behavior, cascading, and return value. It is front-loaded with the most decision-relevant information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers the destructive semantics, the alternative tool, the observable side effects, and the return value. With a destructive operation and no output schema, this description gives an agent everything needed to call it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 100% description coverage, so both parameters are already self-documenting. The description adds no param-specific meaning, but the schema carries the full burden; baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States the exact operation ('Deletes a task permanently') and immediately distinguishes itself from complete_task, so an agent can tell the two apart. The resource and effect are unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says when NOT to use it ('this is NOT the same as completing it') and names the correct alternative ('use complete_task instead'). Also discloses cascading deletion of subtasks, giving clear selection guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_tasklistDelete a task listADestructive
Deletes a task list AND every task in it, permanently — there is no undo and no trash. The user's default task list cannot be deleted (the API rejects it). To empty a list but keep it, use clear_completed_tasks or delete tasks one by one instead. Returns {deleted:true} with the tasklist_id echoed.
| Name | Required | Description | Default |
|---|---|---|---|
| tasklist_id | Yes | The task list id — from list_tasklists or create_tasklist output. "@default" addresses the user's default list. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes beyond the destructiveHint annotation by adding crucial behavioral context: no undo, no trash, deletion of every task in the list, rejection of the default list, and the exact return shape. This gives the agent a full picture of the irreversible side effects.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Every sentence earns its place: the action, the irreversibility, the default-list limitation, the alternatives, and the return value are all included without verbosity. The most critical information is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive single-parameter tool, this description is complete. It covers side effects, edge cases, alternatives, and return value, and the annotations already convey the safety profile. Nothing essential is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and the input schema already documents tasklist_id, including the '@default' alias. The tool description itself does not add parameter-level detail, but it also does not need to because the schema fully covers it.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States the specific verb and resource: 'Deletes a task list AND every task in it, permanently.' It clearly distinguishes itself from delete_task and clear_completed_tasks by emphasizing the cascade deletion, so an agent knows exactly what this tool does.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly explains when to use this tool versus alternatives: if you only need to empty the list but keep it, use clear_completed_tasks or delete tasks one by one. It also warns that the default task list cannot be deleted because the API rejects it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_taskGet a taskARead-onlyIdempotent
Fetches one task by id: title, notes, status, due (date only), completed timestamp, parent, position, updated, deleted/hidden flags, links and webViewLink. Also the safe way to verify state after an ambiguous write failure — writes are never retried automatically.
| Name | Required | Description | Default |
|---|---|---|---|
| task_id | Yes | The task id — from list_tasks, get_task or create_task output. | |
| tasklist_id | Yes | The task list id — from list_tasklists or create_tasklist output. "@default" addresses the user's default list. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare read-only, idempotent, open-world, and non-destructive behavior. The description adds valuable behavioral context beyond that: it is the safe verification path after ambiguous writes and writes are never retried automatically.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences: the first front-loads the core action and returned data, and the second adds a high-value usage caveat. There is no filler or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple two-parameter read operation, the description is complete: it lists the returned fields, conveys the safe read-only nature, and explains a key use case. The absence of an output schema is compensated by the explicit field list.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents task_id and tasklist_id thoroughly. The description only refers generally to 'by id' and does not add meaning beyond the parameter definitions, which matches the baseline for full schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Fetches'), a specific resource ('one task by id'), and enumerates the returned fields. It clearly distinguishes get_task from list_tasks (which fetches many tasks) and get_tasklist (which fetches a task list).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives a concrete when-to-use case: verifying state after an ambiguous write failure. It does not explicitly name alternatives such as list_tasks, but the 'one task by id' scope makes the selection context clear enough.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_tasklistGet a task listARead-onlyIdempotent
Fetches one task list by id: id, title, updated, selfLink. Accepts "@default" for the user's default list — useful to resolve its real id. The list resource carries only metadata; the tasks themselves come from list_tasks.
| Name | Required | Description | Default |
|---|---|---|---|
| tasklist_id | Yes | The task list id — from list_tasklists or create_tasklist output. "@default" addresses the user's default list. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds valuable behavioral context beyond those hints: the returned resource is metadata-only, '@default' can resolve the real id, and actual tasks are not included.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, each carrying distinct information: what is fetched, the '@default' special value, and the key limitation that tasks are elsewhere. The most important identifying information is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter, read-only, idempotent fetch with no output schema, this description is complete. It states the resource identity, the parameter's special value, the returned fields, and the boundary between task lists and tasks. Nothing an agent needs 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.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the parameter description already documents tasklist_id, including the '@default' behavior. The description reinforces this and adds the purpose 'useful to resolve its real id', but it does not substantially extend the schema's meaning. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Fetches'), names the exact resource ('one task list by id'), and lists the returned fields. It clearly distinguishes itself from list_tasklists (list all) and list_tasks (fetch tasks) by scoping what this tool does not return.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear context for when this tool is appropriate: fetching a single task list, including via '@default'. It also explicitly directs task retrieval to list_tasks, and the singular-by-id wording implicitly distinguishes it from list_tasklists. It does not explicitly exclude list_tasklists, but the distinction is clear enough.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_tasklistsList task listsARead-onlyIdempotent
Lists the user's task lists: id, title, updated (RFC3339). Every task lives in exactly one list, so this is the entry point — task tools need a tasklist_id from here (or the "@default" alias for the default list). Paginate with page_token from nextPageToken; page_size caps a page at 1000 and the API's default is already 1000, so one call usually returns everything. The API has no search or ordering — filter client-side.
| Name | Required | Description | Default |
|---|---|---|---|
| page_size | No | Max task lists per page (1..1000; the API's default is 1000). | |
| page_token | No | nextPageToken from the previous page. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark the tool read-only, idempotent, and non-destructive; the description adds concrete behavioral details beyond that: returned fields, RFC3339 format, page_size cap/default at 1000, page_token chaining, and the absence of search or ordering. It even states 'one call usually returns everything,' which helps the agent decide whether to paginate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four dense sentences with no filler. The key result fields and entry-point role are front-loaded, followed by pagination details and API limitations. Every sentence adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only list call with two optional, fully documented parameters and no output schema, the description covers return fields, pagination, default-list alias, and API limitations. An agent has enough information to invoke the tool and interpret the result correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description adds operational context not in the schema: page_token comes from nextPageToken, page_size caps at 1000, the API default is already 1000, and one call usually returns everything. This is useful but not a dramatic expansion beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description explicitly states the verb and resource: 'Lists the user's task lists: id, title, updated (RFC3339)'. It also frames the tool as the entry point for task tools, distinguishing it from task-specific siblings like list_tasks and get_tasklist.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives explicit when-to-use guidance: 'task tools need a tasklist_id from here' and mentions the '@default' alias. It also states when-not-to-expect more: 'The API has no search or ordering — filter client-side,' and explains pagination defaults so the agent knows one call usually suffices.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_tasksList tasksARead-onlyIdempotent
Lists tasks in one list: id, title, notes, status (needsAction|completed), due (date only — the API never stores a time of day), completed timestamp, parent (subtask's parent id), position (opaque sort key within siblings — sort by it client-side; change it only via move_task), updated, deleted/hidden flags, webViewLink. IMPORTANT: tasks completed in Google's own apps are also flagged hidden — pass show_completed=true AND show_hidden=true to reliably see all completed tasks. For incremental sync poll with updated_min plus show_deleted=true and show_hidden=true, so deletions and clears are not missed (the API has no push notifications). due_min/due_max bound the due date; completed_min/completed_max the completion time. Paginate with page_token; page_size caps at 100 (API default 20). Filtering by due/completed dates implies those fields exist — tasks without a due date never match due bounds.
| Name | Required | Description | Default |
|---|---|---|---|
| due_max | No | Upper bound on the due date (RFC3339). | |
| due_min | No | Lower bound on the due date (RFC3339). | |
| page_size | No | Max tasks per page (1..100; the API's default is 20). | |
| page_token | No | nextPageToken from the previous page. | |
| show_hidden | No | Include hidden tasks (API default false). | |
| tasklist_id | Yes | The task list id — from list_tasklists or create_tasklist output. "@default" addresses the user's default list. | |
| updated_min | No | Only tasks modified after this RFC3339 UTC timestamp (updatedMin) — the sync filter. | |
| show_deleted | No | Include deleted tasks (API default false; for sync). | |
| completed_max | No | Upper bound on the completion date (RFC3339). | |
| completed_min | No | Lower bound on the completion date (RFC3339). | |
| show_assigned | No | Include tasks assigned to the user from Google Docs / Chat spaces (API default false). | |
| show_completed | No | Include completed tasks (API default true; needs show_hidden=true to catch tasks completed in Google's UI). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark this as read-only and idempotent, and the description adds substantial non-obvious behavior: the API never stores a time of day for due dates, tasks completed in Google's UI are flagged hidden, there are no push notifications, and due bounds don't match tasks without a due date. No contradictions with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the core purpose and output fields, and every sentence carries useful information. However, it is quite dense and could benefit from structured bullets; it is appropriately sized for the complexity but not maximally concise.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite having no output schema, the description enumerates all returned fields and covers pagination, sync patterns, filter semantics, and API quirks. For a 12-parameter list/filter/sync tool, this is remarkably complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description adds important meaning beyond the schema: the interplay of show_completed and show_hidden for reliable completion sync, the opaque nature of position and the move_task constraint, and that tasks lacking a due date never match due bounds.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Lists'), a clear resource ('tasks in one list'), and enumerates the returned fields (id, title, notes, status, due, completed timestamp, etc.). It is easy to distinguish from siblings like get_task (single task) and list_tasklists (task lists).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives strong context for when to use filters and pagination: incremental sync with updated_min and show_deleted/show_hidden, page_token for pagination, and the meaning of due_min/due_max vs completed_min/completed_max. It does not explicitly name alternative tools, so when-to-use vs alternatives is not fully explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
move_taskMove a taskA
Moves a task: under a parent (subtask), after a sibling (previous), and/or into another list (destination_tasklist). Omitting parent puts it at the top level; omitting previous puts it first among its siblings — so calling with neither moves the task to the very top of its list. This is the ONLY way to change hierarchy or order (parent/position are read-only fields; positions are opaque strings maintained by the API). Constraints: parent and previous must be in the task's (destination) list; assigned tasks and recurrent tasks cannot be moved between lists. Returns the task with its new position.
| Name | Required | Description | Default |
|---|---|---|---|
| parent | No | New parent task id — the task becomes its subtask. Omit for the top level. | |
| task_id | Yes | The task id — from list_tasks, get_task or create_task output. | |
| previous | No | Sibling task id to place the task after (same parent). Omit for the first position. | |
| tasklist_id | Yes | The task list id — from list_tasklists or create_tasklist output. "@default" addresses the user's default list. | |
| destination_tasklist | No | Move the task into this other task list. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
While annotations declare readOnlyHint=false and idempotentHint=false, the description adds substantial behavior beyond them: the default semantics of omitting parent (top level) and previous (first among siblings), the combined-omission consequence (very top of list), and the fact that positions are opaque API-maintained strings. It also discloses the cross-parameter constraints and the return value ('Returns the task with its new position'). None of this is in the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense but every sentence earns its place: core action, omission defaults with a consequence clause, exclusivity rationale, constraints, and return value. It is front-loaded with the purpose in the first sentence and contains no repetition of schema content or filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has no output schema, so the return-value statement is essential and present. Given the complexity of three orthogonal movement modes, default behaviors, and three constraints, the description covers everything an agent needs to invoke it correctly: purpose, parameter interaction semantics, constraints, and result. No meaningful gap remains.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% with solid per-parameter docs, so the baseline is 3 and the schema already carries the heavy lifting. The description adds interaction-level meaning the schema cannot: how omitting parent and previous combine to place the task at the very top, and the constraint that parent and previous must reside in the destination list. This elevates it above baseline, though it complements rather than rescues the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with 'Moves a task' and precisely enumerates the three movement dimensions (under a parent, after a sibling, into another list), which is a specific verb+resource statement that distinguishes it from every sibling. Crucially, it explains why update_task cannot achieve this ('parent/position are read-only fields'), making the differentiation from the closest sibling explicit.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description states 'This is the ONLY way to change hierarchy or order,' an explicit when-to-use directive backed by the read-only-fields rationale. It also gives when-not conditions: parent/previous must belong to the destination list and assigned/recurrent tasks cannot be moved between lists. The alternative route (update_task) is implicitly excluded by the read-only fields explanation, which is sufficient guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
raw_requestRaw Google Tasks API callADestructive
Escape hatch to call any Google Tasks API v1 path directly, for requests the typed tools don't cover — e.g. a full-resource PUT ("tasks/v1/lists//tasks/", method PUT, body with the complete task), or a query combination the typed filters don't expose. The path is relative to https://tasks.googleapis.com and may carry a query string (e.g. "tasks/v1/lists//tasks?showDeleted=true"). The Bearer token is added automatically; the method defaults to GET. PATCH/PUT/POST/DELETE hit live data with no confirmation — prefer the typed tools when one fits.
| Name | Required | Description | Default |
|---|---|---|---|
| body | No | JSON request body — sent for POST/PATCH/PUT/DELETE, ignored for GET. | |
| path | Yes | API path relative to https://tasks.googleapis.com, e.g. "tasks/v1/users/@me/lists". | |
| method | No | HTTP method. Defaults to GET. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already signal destructive and open-world behavior, but the description adds crucial context: the Bearer token is added automatically, method defaults to GET, and PATCH/PUT/POST/DELETE hit live data with no confirmation. This goes well beyond the structured annotations and warns the agent about irreversible actions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences with no filler. The purpose is front-loaded, followed by a concrete example, and ends with the most important safety warning. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For an arbitrary raw API call tool with no output schema, the description provides all necessary context: base URL, path handling, query string support, authentication, method default, safety warning, and guidance on when to prefer typed tools. Nothing critical is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description reinforces the path-relative-to-base, method-default, and body-handling semantics, but these are already fully documented in the input schema. The escape-hatch examples add color but not new parameter-level meaning.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a precise purpose: an escape hatch to call any Google Tasks API v1 path directly. It explicitly differentiates from the typed sibling tools by saying it exists for requests the typed tools don't cover, with concrete examples like full-resource PUT and unsupported query combinations.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description says exactly when to use it ('for requests the typed tools don't cover') and when not to ('prefer the typed tools when one fits'). This gives an agent clear decision criteria for selecting this tool over its 14 siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
reopen_taskReopen a taskADestructiveIdempotent
Reverts a completed task to needsAction and clears its completed timestamp — the undo for complete_task. Works on hidden tasks too (tasks cleared with clear_completed_tasks): reopening un-hides them. Cannot resurrect a deleted task — deletion is permanent. Returns the updated task.
| Name | Required | Description | Default |
|---|---|---|---|
| task_id | Yes | The task id — from list_tasks, get_task or create_task output. | |
| tasklist_id | Yes | The task list id — from list_tasklists or create_tasklist output. "@default" addresses the user's default list. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations, the description discloses the exact state change (needsAction, cleared timestamp), hidden-task behavior, deletion permanence, and that the updated task is returned. These details meaningfully exceed annotation coverage, and there is no contradiction with destructiveHint or idempotentHint.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three concise sentences each add distinct value: the core behavior, the hidden-task edge case, and the deletion limitation. The most important action is front-loaded, with no filler or repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With only two fully documented parameters and no output schema, the description covers the key behavioral details an agent needs: what changes, what edge cases exist, what the tool cannot do, and what it returns. Annotations cover the safety profile. Nothing essential is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already documents both parameters fully, including where to get them, so the description does not need to repeat parameter details. It adds no extra parameter-level semantics beyond the schema, so the baseline score of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific action with a clear verb and resource: 'Reverts a completed task to needsAction and clears its completed timestamp.' It also explicitly calls itself 'the undo for complete_task', making its relationship to sibling tools unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It names the inverse tool, complete_task, and the related clear_completed_tasks flow. It also provides a when-not case: 'Cannot resurrect a deleted task — deletion is permanent.' This is explicit guidance on when to use the tool and what its limits are.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_taskUpdate a taskADestructiveIdempotent
Changes a task's title, notes and/or due date (PATCH — only the provided fields change, at least one is required). clear_due=true / clear_notes=true erase the field entirely (you cannot clear by sending an empty string a Google API would keep). This tool does NOT change completion status (use complete_task / reopen_task), and cannot re-parent or reorder (use move_task) — parent and position are read-only in the task resource. Returns the updated task.
| Name | Required | Description | Default |
|---|---|---|---|
| due | No | New due date: YYYY-MM-DD or RFC3339 (only the date is stored). | |
| notes | No | New notes text (max 8192 chars; replaces the old notes). | |
| title | No | New task title (max 1024 chars). | |
| task_id | Yes | The task id — from list_tasks, get_task or create_task output. | |
| clear_due | No | true removes the due date entirely (do not combine with due). | |
| clear_notes | No | true removes the notes entirely (do not combine with notes). | |
| tasklist_id | Yes | The task list id — from list_tasklists or create_tasklist output. "@default" addresses the user's default list. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the annotations by explaining PATCH partial-update behavior, the clear_due/clear_notes semantics, and the important Google API quirk that empty strings do not clear fields. It also discloses that parent and position are read-only in this resource. This adds substantial behavioral context beyond readOnlyHint/idempotentHint/destructiveHint.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three tight sentences: core behavior, clearing rules, and explicit exclusions plus return value. Every sentence earns its place and the most important information is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 100% schema coverage and no output schema, the description provides enough contextual glue: required IDs come from list/create tools, optional fields are documented, clearing behavior is explained, and the return value is stated as the updated task. An agent has everything needed to select and call this correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema covers 100% of parameters, so the baseline is 3, but the description adds operation-level meaning that the schema alone does not: only provided fields change, at least one is required, and clear flags erase rather than replace. It also notes that empty strings will not clear fields, which is essential for correct use.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Changes') and resource ('a task's title, notes and/or due date') and distinguishes itself from siblings by explicitly excluding completion changes and move/re-parent operations. This lets an agent differentiate update_task from complete_task, reopen_task, and move_task without opening schemas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit when-not-to-use guidance: completion status changes belong to complete_task/reopen_task, and re-parenting/reordering belongs to move_task. It also clarifies PATCH semantics and the requirement that at least one field be provided, so the agent knows when this tool is appropriate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_tasklistRename a task listADestructiveIdempotent
Renames a task list (PATCH — the title is the only field the API lets you change). Tasks, their order and their completion state are untouched. Returns the updated list resource.
| Name | Required | Description | Default |
|---|---|---|---|
| title | Yes | The new list title (max 1024 chars). | |
| tasklist_id | Yes | The task list id — from list_tasklists or create_tasklist output. "@default" addresses the user's default list. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already signal mutation and idempotency, so the description creditably adds the PATCH method, the exact scope of change, and the return behavior. The destructiveHint is not contradicted because renaming overwrites the previous title; the description merely clarifies that tasks are unaffected.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences cover the action, HTTP method, scope limitation, side-effect guarantees, and return value with no filler. The most important information is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple two-parameter rename operation with rich schema descriptions and annotations, the description covers the operation, its non-effects, and the response. Nothing essential for an agent to invoke it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents both tasklist_id and title in detail. The description does not add parameter-specific semantics beyond reinforcing that title is the only changeable field, which is a neutral contribution.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with the specific verb 'Renames' and a clear resource, 'a task list,' and reinforces scope by noting the API only allows changing the title. It distinguishes itself from sibling task-related tools by stating that tasks, order, and completion state are untouched.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description clearly states that the tool's only effect is renaming the list and that task content, order, and completion state are not altered, which gives a strong sense of when to use it. It does not explicitly name alternatives like update_task, but the exclusion of task-level changes provides practical routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.
15 tool updates
v0.1.0- First observed
clear_completed_tasks - First observed
complete_task - First observed
create_task - First observed
create_tasklist - First observed
delete_task - First observed
delete_tasklist - First observed
get_task - First observed
get_tasklist - First observed
list_tasklists - First observed
list_tasks - First observed
move_task - First observed
raw_request - First observed
reopen_task - First observed
update_task - First observed
update_tasklist
TDQS
Each tool targets a distinct action and resource: list vs. single, list-level vs. task-level, mutation vs. completion vs. movement. The descriptions reinforce boundaries, such as update_task explicitly deferring status changes to complete_task/reopen_task and reordering to move_task, so an agent should not misselect.
Tool names consistently follow a verb-first snake_case pattern (get_, list_, create_, update_, delete_, move_, complete_, reopen_, clear_). The naming is predictable across both task lists and tasks, with raw_request as the only deliberate outlier that clearly signals its escape-hatch role.
15 tools is at the upper bound but not inflated: the server covers both task lists and tasks, including lifecycle, completion state, reordering, and clearing. Every typed tool maps to a meaningful Google Tasks API operation, and raw_request handles edge cases without adding redundant surface.
The surface covers full CRUD for both task lists and tasks, plus task-specific operations: completion, reopen, move, and clear completed. The raw_request escape hatch fills any remaining API gaps, and stated limitations are API constraints rather than missing tools.
Maintenance
Related MCP Connectors
Manage tasks, Focus Zone, notes, projects, and task history from compatible AI assistants.
Manage Superlist tasks and lists in plain language from any MCP-compatible AI agent.
AI-native task management: list, create, update and archive tasks with rich context for AI agents
1Create and manage MeisterTask projects, tasks, and notes from your AI assistant.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceEnables LLMs like Claude to manage Google Tasks by listing, creating, updating, completing, and deleting tasks and task lists, including setting due dates and notes.MIT
- AlicenseNot gradedqualityAmaintenanceEnables AI assistants to manage Google Tasks through natural language interactions. Supports creating, updating, deleting, searching, and listing tasks with secure OAuth2 authentication.12610MIT
- AlicenseNot gradedqualityDmaintenanceEnables AI assistants to manage Google Tasks, including listing, creating, updating, deleting, and completing tasks via the Google Tasks API.82MIT
- FlicenseNot gradedqualityDmaintenanceEnables AI agents to securely authenticate with Google Tasks and perform full CRUD operations on task lists and tasks, including moving tasks and clearing completed tasks.53-
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/A1-x-Tech/mcp-google-tasks'
If you have feedback or need assistance with the MCP directory API, please join our Discord server