← Back to Google Tasks docs

Google Tasks — Tool Reference

Manage task lists and tasks in Google Tasks

16 tools · auto-generated from the deployed toolkit

Your AI assistant discovers and invokes these tools through the MCP Server's meta tools — it calls execute_tool with the tool name and arguments below.

# batch_create_tasks write

Create multiple tasks in a single call. Each item is processed sequentially; failures on individual items do not stop the rest.

Full description
Create multiple tasks in a single call. Each item is processed sequentially;
failures on individual items do not stop the rest.

Parameters:
    tasklist_id: Task list ID or '@default' (default '@default')
    tasks: List of 1-25 task items to create. Each item accepts:
        title (required), notes, due, status, parent, previous

Returns:
    BatchCreateTasksResult with:
    - results: Per-item success/error list
    - tasks: Created task objects (successful items only)
    - total / succeeded / failed: Summary counts
Parameter Type Required Description
tasklist_id string No Task list ID (or '@default') Default: "@default"
tasks array<BatchCreateTaskItem> Yes List of tasks to create (1-25)
account string | null No Optional Google account override (email, e.g. "alice.work@company.com"). Omit to use the user's default Google account. Call list_accounts to see which accounts are connected. Tasklist and task IDs are scoped to the account they were obtained from, so pass the same account used to list/get them.
Parameter schema (JSON)
{
  "$defs": {
    "BatchCreateTaskItem": {
      "description": "A single task to create in a batch.",
      "properties": {
        "title": {
          "description": "Task title",
          "title": "Title",
          "type": "string"
        },
        "notes": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Task description/notes",
          "title": "Notes"
        },
        "due": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Due date (YYYY-MM-DD)",
          "title": "Due"
        },
        "status": {
          "default": "needsAction",
          "description": "Task status: 'needsAction' or 'completed'",
          "title": "Status",
          "type": "string"
        },
        "parent": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Parent task ID (creates a subtask)",
          "title": "Parent"
        },
        "previous": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Task ID to insert after (for ordering)",
          "title": "Previous"
        }
      },
      "required": [
        "title"
      ],
      "title": "BatchCreateTaskItem",
      "type": "object",
      "additionalProperties": false
    }
  },
  "description": "Parameters for batch_create_tasks.",
  "properties": {
    "tasklist_id": {
      "default": "@default",
      "description": "Task list ID (or '@default')",
      "title": "Tasklist Id",
      "type": "string"
    },
    "tasks": {
      "description": "List of tasks to create (1-25)",
      "items": {
        "$ref": "#/$defs/BatchCreateTaskItem"
      },
      "title": "Tasks",
      "type": "array"
    },
    "account": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Optional Google account override (email, e.g. \"alice.work@company.com\"). Omit to use the user's default Google account. Call list_accounts to see which accounts are connected. Tasklist and task IDs are scoped to the account they were obtained from, so pass the same account used to list/get them.",
      "title": "Account"
    }
  },
  "required": [
    "tasks"
  ],
  "title": "BatchCreateTasksParams",
  "type": "object",
  "additionalProperties": false
}
Result schema (JSON)
{
  "$defs": {
    "BatchItemResult": {
      "description": "Per-item result in a batch operation.",
      "properties": {
        "index": {
          "description": "Zero-based index of the item in the request array",
          "title": "Index",
          "type": "integer"
        },
        "success": {
          "description": "Whether this item succeeded",
          "title": "Success",
          "type": "boolean"
        },
        "error": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Error message if failed",
          "title": "Error"
        }
      },
      "required": [
        "index",
        "success"
      ],
      "title": "BatchItemResult",
      "type": "object"
    }
  },
  "description": "Result of batch_create_tasks.",
  "properties": {
    "results": {
      "items": {
        "$ref": "#/$defs/BatchItemResult"
      },
      "title": "Results",
      "type": "array"
    },
    "tasks": {
      "description": "Created task objects (successful items only)",
      "items": {
        "additionalProperties": true,
        "type": "object"
      },
      "title": "Tasks",
      "type": "array"
    },
    "total": {
      "default": 0,
      "title": "Total",
      "type": "integer"
    },
    "succeeded": {
      "default": 0,
      "title": "Succeeded",
      "type": "integer"
    },
    "failed": {
      "default": 0,
      "title": "Failed",
      "type": "integer"
    }
  },
  "title": "BatchCreateTasksResult",
  "type": "object"
}

# batch_delete_tasks write

Delete multiple tasks in a single call. Each item is processed sequentially; failures on individual items do not stop the rest.

Full description
Delete multiple tasks in a single call. Each item is processed sequentially;
failures on individual items do not stop the rest.

Parameters:
    tasklist_id: Task list ID or '@default' (default '@default')
    task_ids: List of 1-25 task IDs to delete

Returns:
    BatchDeleteTasksResult with:
    - results: Per-item success/error list
    - deleted_task_ids: IDs of successfully deleted tasks
    - total / succeeded / failed: Summary counts
Parameter Type Required Description
tasklist_id string No Task list ID (or '@default') Default: "@default"
task_ids array<string> Yes List of task IDs to delete (1-25)
account string | null No Optional Google account override (email, e.g. "alice.work@company.com"). Omit to use the user's default Google account. Call list_accounts to see which accounts are connected. Tasklist and task IDs are scoped to the account they were obtained from, so pass the same account used to list/get them.
Parameter schema (JSON)
{
  "description": "Parameters for batch_delete_tasks.",
  "properties": {
    "tasklist_id": {
      "default": "@default",
      "description": "Task list ID (or '@default')",
      "title": "Tasklist Id",
      "type": "string"
    },
    "task_ids": {
      "description": "List of task IDs to delete (1-25)",
      "items": {
        "type": "string"
      },
      "title": "Task Ids",
      "type": "array"
    },
    "account": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Optional Google account override (email, e.g. \"alice.work@company.com\"). Omit to use the user's default Google account. Call list_accounts to see which accounts are connected. Tasklist and task IDs are scoped to the account they were obtained from, so pass the same account used to list/get them.",
      "title": "Account"
    }
  },
  "required": [
    "task_ids"
  ],
  "title": "BatchDeleteTasksParams",
  "type": "object",
  "additionalProperties": false
}
Result schema (JSON)
{
  "$defs": {
    "BatchItemResult": {
      "description": "Per-item result in a batch operation.",
      "properties": {
        "index": {
          "description": "Zero-based index of the item in the request array",
          "title": "Index",
          "type": "integer"
        },
        "success": {
          "description": "Whether this item succeeded",
          "title": "Success",
          "type": "boolean"
        },
        "error": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Error message if failed",
          "title": "Error"
        }
      },
      "required": [
        "index",
        "success"
      ],
      "title": "BatchItemResult",
      "type": "object"
    }
  },
  "description": "Result of batch_delete_tasks.",
  "properties": {
    "results": {
      "items": {
        "$ref": "#/$defs/BatchItemResult"
      },
      "title": "Results",
      "type": "array"
    },
    "deleted_task_ids": {
      "description": "IDs of successfully deleted tasks",
      "items": {
        "type": "string"
      },
      "title": "Deleted Task Ids",
      "type": "array"
    },
    "total": {
      "default": 0,
      "title": "Total",
      "type": "integer"
    },
    "succeeded": {
      "default": 0,
      "title": "Succeeded",
      "type": "integer"
    },
    "failed": {
      "default": 0,
      "title": "Failed",
      "type": "integer"
    }
  },
  "title": "BatchDeleteTasksResult",
  "type": "object"
}

# batch_update_tasks write

Update multiple tasks in a single call. Patch semantics -- only provided fields are modified per item. Failures on individual items do not stop the rest.

Full description
Update multiple tasks in a single call. Patch semantics -- only provided
fields are modified per item. Failures on individual items do not stop the rest.

Parameters:
    tasklist_id: Task list ID or '@default' (default '@default')
    tasks: List of 1-25 task items to update. Each item accepts:
        task_id (required), title, notes, due, status

Returns:
    BatchUpdateTasksResult with:
    - results: Per-item success/error list
    - tasks: Updated task objects (successful items only)
    - total / succeeded / failed: Summary counts
Parameter Type Required Description
tasklist_id string No Task list ID (or '@default') Default: "@default"
tasks array<BatchUpdateTaskItem> Yes List of tasks to update (1-25)
account string | null No Optional Google account override (email, e.g. "alice.work@company.com"). Omit to use the user's default Google account. Call list_accounts to see which accounts are connected. Tasklist and task IDs are scoped to the account they were obtained from, so pass the same account used to list/get them.
Parameter schema (JSON)
{
  "$defs": {
    "BatchUpdateTaskItem": {
      "description": "A single task to update in a batch.",
      "properties": {
        "task_id": {
          "description": "Task ID to update",
          "title": "Task Id",
          "type": "string"
        },
        "title": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "New task title",
          "title": "Title"
        },
        "notes": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "New task notes",
          "title": "Notes"
        },
        "due": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "New due date (YYYY-MM-DD) or empty string to clear",
          "title": "Due"
        },
        "status": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "'needsAction' or 'completed'",
          "title": "Status"
        }
      },
      "required": [
        "task_id"
      ],
      "title": "BatchUpdateTaskItem",
      "type": "object",
      "additionalProperties": false
    }
  },
  "description": "Parameters for batch_update_tasks.",
  "properties": {
    "tasklist_id": {
      "default": "@default",
      "description": "Task list ID (or '@default')",
      "title": "Tasklist Id",
      "type": "string"
    },
    "tasks": {
      "description": "List of tasks to update (1-25)",
      "items": {
        "$ref": "#/$defs/BatchUpdateTaskItem"
      },
      "title": "Tasks",
      "type": "array"
    },
    "account": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Optional Google account override (email, e.g. \"alice.work@company.com\"). Omit to use the user's default Google account. Call list_accounts to see which accounts are connected. Tasklist and task IDs are scoped to the account they were obtained from, so pass the same account used to list/get them.",
      "title": "Account"
    }
  },
  "required": [
    "tasks"
  ],
  "title": "BatchUpdateTasksParams",
  "type": "object",
  "additionalProperties": false
}
Result schema (JSON)
{
  "$defs": {
    "BatchItemResult": {
      "description": "Per-item result in a batch operation.",
      "properties": {
        "index": {
          "description": "Zero-based index of the item in the request array",
          "title": "Index",
          "type": "integer"
        },
        "success": {
          "description": "Whether this item succeeded",
          "title": "Success",
          "type": "boolean"
        },
        "error": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Error message if failed",
          "title": "Error"
        }
      },
      "required": [
        "index",
        "success"
      ],
      "title": "BatchItemResult",
      "type": "object"
    }
  },
  "description": "Result of batch_update_tasks.",
  "properties": {
    "results": {
      "items": {
        "$ref": "#/$defs/BatchItemResult"
      },
      "title": "Results",
      "type": "array"
    },
    "tasks": {
      "description": "Updated task objects (successful items only)",
      "items": {
        "additionalProperties": true,
        "type": "object"
      },
      "title": "Tasks",
      "type": "array"
    },
    "total": {
      "default": 0,
      "title": "Total",
      "type": "integer"
    },
    "succeeded": {
      "default": 0,
      "title": "Succeeded",
      "type": "integer"
    },
    "failed": {
      "default": 0,
      "title": "Failed",
      "type": "integer"
    }
  },
  "title": "BatchUpdateTasksResult",
  "type": "object"
}

# create_task write

Create a task in a Google Tasks list, including optional notes, due date, status, and parent or position.

Full description
Create a new task in a task list.

Parameters:
    tasklist_id: Task list ID or '@default' (default '@default')
    title: Task title (required)
    notes: Task description/notes (optional)
    due: Due date as YYYY-MM-DD (optional)
    status: 'needsAction' or 'completed' (default 'needsAction')
    parent: Parent task ID to create as subtask (optional)
    previous: Task ID to insert after for ordering (optional)

Returns:
    CreateTaskResult with:
    - task: Created task object

Notes:
    - Due dates are date-only: YYYY-MM-DD is converted internally
    - If parent is provided, the task is created as a subtask (one level only)
    - If previous is provided, the task is inserted after that task in the list
Parameter Type Required Description
tasklist_id string No Task list ID (or '@default') Default: "@default"
title string Yes Task title
notes string | null No Task description/notes
due string | null No Due date (YYYY-MM-DD)
status string No Task status: 'needsAction' or 'completed' Default: "needsAction"
parent string | null No Parent task ID (creates a subtask)
previous string | null No Task ID to insert after (for ordering)
account string | null No Optional Google account override (email, e.g. "alice.work@company.com"). Omit to use the user's default Google account. Call list_accounts to see which accounts are connected. Tasklist and task IDs are scoped to the account they were obtained from, so pass the same account used to list/get them.
Parameter schema (JSON)
{
  "description": "Parameters for create_task.",
  "properties": {
    "tasklist_id": {
      "default": "@default",
      "description": "Task list ID (or '@default')",
      "title": "Tasklist Id",
      "type": "string"
    },
    "title": {
      "description": "Task title",
      "title": "Title",
      "type": "string"
    },
    "notes": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Task description/notes",
      "title": "Notes"
    },
    "due": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Due date (YYYY-MM-DD)",
      "title": "Due"
    },
    "status": {
      "default": "needsAction",
      "description": "Task status: 'needsAction' or 'completed'",
      "title": "Status",
      "type": "string"
    },
    "parent": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Parent task ID (creates a subtask)",
      "title": "Parent"
    },
    "previous": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Task ID to insert after (for ordering)",
      "title": "Previous"
    },
    "account": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Optional Google account override (email, e.g. \"alice.work@company.com\"). Omit to use the user's default Google account. Call list_accounts to see which accounts are connected. Tasklist and task IDs are scoped to the account they were obtained from, so pass the same account used to list/get them.",
      "title": "Account"
    }
  },
  "required": [
    "title"
  ],
  "title": "CreateTaskParams",
  "type": "object",
  "additionalProperties": false
}
Result schema (JSON)
{
  "description": "Result of create_task.",
  "properties": {
    "task": {
      "additionalProperties": true,
      "title": "Task",
      "type": "object"
    }
  },
  "title": "CreateTaskResult",
  "type": "object"
}

# create_tasklist write

Create a new Google task list.

Full description
Create a new task list.

Parameters:
    title: Task list title (required)

Returns:
    CreateTasklistResult with:
    - taskList: Created task list object with id, title, updated
Parameter Type Required Description
title string Yes Task list title
account string | null No Optional Google account override (email, e.g. "alice.work@company.com"). Omit to use the user's default Google account. Call list_accounts to see which accounts are connected. Tasklist and task IDs are scoped to the account they were obtained from, so pass the same account used to list/get them.
Parameter schema (JSON)
{
  "description": "Parameters for create_tasklist.",
  "properties": {
    "title": {
      "description": "Task list title",
      "title": "Title",
      "type": "string"
    },
    "account": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Optional Google account override (email, e.g. \"alice.work@company.com\"). Omit to use the user's default Google account. Call list_accounts to see which accounts are connected. Tasklist and task IDs are scoped to the account they were obtained from, so pass the same account used to list/get them.",
      "title": "Account"
    }
  },
  "required": [
    "title"
  ],
  "title": "CreateTasklistParams",
  "type": "object",
  "additionalProperties": false
}
Result schema (JSON)
{
  "description": "Result of create_tasklist.",
  "properties": {
    "taskList": {
      "additionalProperties": true,
      "title": "Tasklist",
      "type": "object"
    }
  },
  "title": "CreateTasklistResult",
  "type": "object"
}

# delete_task write

Delete a task permanently from a task list and return deletion status.

Full description
Delete a task permanently.

Parameters:
    tasklist_id: Task list ID or '@default' (default '@default')
    task_id: Task ID to delete (required)

Returns:
    DeleteTaskResult with:
    - success: Whether the deletion succeeded
    - deleted_task_id: The deleted task's ID

Notes:
    - Permanently deletes the task
    - Deleting a parent task also deletes its subtasks
Parameter Type Required Description
tasklist_id string No Task list ID (or '@default') Default: "@default"
task_id string Yes Task ID to delete
account string | null No Optional Google account override (email, e.g. "alice.work@company.com"). Omit to use the user's default Google account. Call list_accounts to see which accounts are connected. Tasklist and task IDs are scoped to the account they were obtained from, so pass the same account used to list/get them.
Parameter schema (JSON)
{
  "description": "Parameters for delete_task.",
  "properties": {
    "tasklist_id": {
      "default": "@default",
      "description": "Task list ID (or '@default')",
      "title": "Tasklist Id",
      "type": "string"
    },
    "task_id": {
      "description": "Task ID to delete",
      "title": "Task Id",
      "type": "string"
    },
    "account": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Optional Google account override (email, e.g. \"alice.work@company.com\"). Omit to use the user's default Google account. Call list_accounts to see which accounts are connected. Tasklist and task IDs are scoped to the account they were obtained from, so pass the same account used to list/get them.",
      "title": "Account"
    }
  },
  "required": [
    "task_id"
  ],
  "title": "DeleteTaskParams",
  "type": "object",
  "additionalProperties": false
}
Result schema (JSON)
{
  "description": "Result of delete_task.",
  "properties": {
    "success": {
      "default": true,
      "title": "Success",
      "type": "boolean"
    },
    "deleted_task_id": {
      "default": "",
      "title": "Deleted Task Id",
      "type": "string"
    }
  },
  "title": "DeleteTaskResult",
  "type": "object"
}

# delete_tasklist write

Delete a Google task list and all its tasks permanently.

Full description
Delete a task list and all its tasks permanently.

Parameters:
    tasklist_id: Task list ID to delete (required)

Returns:
    DeleteTasklistResult with:
    - success: Whether the deletion succeeded
    - deleted_tasklist_id: The deleted task list's ID

Notes:
    - Permanently deletes the task list and all tasks within it
    - Cannot delete the user's default task list
Parameter Type Required Description
tasklist_id string Yes Task list ID to delete
account string | null No Optional Google account override (email, e.g. "alice.work@company.com"). Omit to use the user's default Google account. Call list_accounts to see which accounts are connected. Tasklist and task IDs are scoped to the account they were obtained from, so pass the same account used to list/get them.
Parameter schema (JSON)
{
  "description": "Parameters for delete_tasklist.",
  "properties": {
    "tasklist_id": {
      "description": "Task list ID to delete",
      "title": "Tasklist Id",
      "type": "string"
    },
    "account": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Optional Google account override (email, e.g. \"alice.work@company.com\"). Omit to use the user's default Google account. Call list_accounts to see which accounts are connected. Tasklist and task IDs are scoped to the account they were obtained from, so pass the same account used to list/get them.",
      "title": "Account"
    }
  },
  "required": [
    "tasklist_id"
  ],
  "title": "DeleteTasklistParams",
  "type": "object",
  "additionalProperties": false
}
Result schema (JSON)
{
  "description": "Result of delete_tasklist.",
  "properties": {
    "success": {
      "default": true,
      "title": "Success",
      "type": "boolean"
    },
    "deleted_tasklist_id": {
      "default": "",
      "title": "Deleted Tasklist Id",
      "type": "string"
    }
  },
  "title": "DeleteTasklistResult",
  "type": "object"
}

# get_task read

Get full details of a single task by ID.

Full description
Get full details of a single task by ID.

Parameters:
    tasklist_id: Task list ID or '@default' (default '@default')
    task_id: Task ID (required)

Returns:
    GetTaskResult with:
    - task: Full task object including notes, links, selfLink

Notes:
    - 'completed' is a timestamp when status is 'completed', otherwise null
    - 'parent' is the parent task ID if this is a subtask, otherwise null
Parameter Type Required Description
tasklist_id string No Task list ID (or '@default') Default: "@default"
task_id string Yes Task ID
account string | null No Optional Google account override (email, e.g. "alice.work@company.com"). Omit to use the user's default Google account. Call list_accounts to see which accounts are connected. Tasklist and task IDs are scoped to the account they were obtained from, so pass the same account used to list/get them.
Parameter schema (JSON)
{
  "description": "Parameters for get_task.",
  "properties": {
    "tasklist_id": {
      "default": "@default",
      "description": "Task list ID (or '@default')",
      "title": "Tasklist Id",
      "type": "string"
    },
    "task_id": {
      "description": "Task ID",
      "title": "Task Id",
      "type": "string"
    },
    "account": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Optional Google account override (email, e.g. \"alice.work@company.com\"). Omit to use the user's default Google account. Call list_accounts to see which accounts are connected. Tasklist and task IDs are scoped to the account they were obtained from, so pass the same account used to list/get them.",
      "title": "Account"
    }
  },
  "required": [
    "task_id"
  ],
  "title": "GetTaskParams",
  "type": "object",
  "additionalProperties": false
}
Result schema (JSON)
{
  "description": "Result of get_task.",
  "properties": {
    "task": {
      "additionalProperties": true,
      "title": "Task",
      "type": "object"
    }
  },
  "title": "GetTaskResult",
  "type": "object"
}

# get_tasklist read

Get details of a specific Google task list by ID.

Full description
Get details of a specific task list by ID.

Parameters:
    tasklist_id: Task list ID or '@default' for the user's primary list (required)

Returns:
    GetTasklistResult with:
    - taskList: Task list object with id, title, updated, selfLink
Parameter Type Required Description
tasklist_id string Yes Task list ID (or '@default' for the user's primary list)
account string | null No Optional Google account override (email, e.g. "alice.work@company.com"). Omit to use the user's default Google account. Call list_accounts to see which accounts are connected. Tasklist and task IDs are scoped to the account they were obtained from, so pass the same account used to list/get them.
Parameter schema (JSON)
{
  "description": "Parameters for get_tasklist.",
  "properties": {
    "tasklist_id": {
      "description": "Task list ID (or '@default' for the user's primary list)",
      "title": "Tasklist Id",
      "type": "string"
    },
    "account": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Optional Google account override (email, e.g. \"alice.work@company.com\"). Omit to use the user's default Google account. Call list_accounts to see which accounts are connected. Tasklist and task IDs are scoped to the account they were obtained from, so pass the same account used to list/get them.",
      "title": "Account"
    }
  },
  "required": [
    "tasklist_id"
  ],
  "title": "GetTasklistParams",
  "type": "object",
  "additionalProperties": false
}
Result schema (JSON)
{
  "description": "Result of get_tasklist.",
  "properties": {
    "taskList": {
      "additionalProperties": true,
      "title": "Tasklist",
      "type": "object"
    }
  },
  "title": "GetTasklistResult",
  "type": "object"
}

# get_user_permissions read

Return OAuth scopes currently granted for this Google Tasks connection plus the authenticated user's email.

Full description
Return OAuth scopes currently granted for this Google Tasks connection
and the authenticated user's email address.

Parameters:
    None - This tool takes no parameters.

Returns:
    GetUserPermissionsResult with:
    - email: User's email address
    - scopes: List of granted OAuth scope URLs

Notes:
    Google Tasks only offers a single scope (tasks) — no read-only tier.

Errors:
    ProviderError: User has not connected Google Tasks or token is invalid/expired
Parameter Type Required Description
account string | null No Optional Google account override (email, e.g. "alice.work@company.com"). Omit to use the user's default Google account. Call list_accounts to see which accounts are connected. Tasklist and task IDs are scoped to the account they were obtained from, so pass the same account used to list/get them.
Parameter schema (JSON)
{
  "description": "Parameters for get_user_permissions.",
  "properties": {
    "account": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Optional Google account override (email, e.g. \"alice.work@company.com\"). Omit to use the user's default Google account. Call list_accounts to see which accounts are connected. Tasklist and task IDs are scoped to the account they were obtained from, so pass the same account used to list/get them.",
      "title": "Account"
    }
  },
  "title": "GetUserPermissionsParams",
  "type": "object",
  "additionalProperties": false
}
Result schema (JSON)
{
  "description": "Result of get_user_permissions.",
  "properties": {
    "email": {
      "default": "",
      "description": "User's email address",
      "title": "Email",
      "type": "string"
    },
    "scopes": {
      "description": "Granted OAuth scopes",
      "items": {
        "type": "string"
      },
      "title": "Scopes",
      "type": "array"
    }
  },
  "title": "GetUserPermissionsResult",
  "type": "object"
}

# list_accounts read

List the Google accounts the user has connected for Google Tasks. Returns each account's email, name, and whether it's the current default for this MCP client. Use when the user mentions "my work account" / "my personal account" or asks which accounts are available — then pass `account=<email>` to target a non-default account. `account=<email>` is supported on all Google Tasks tools.

Full description
Return the user's connected Google accounts for the current MCP client.

Returns:
    ListAccountsResult with one entry per connected Google account, including the
    account's email, display name (when available), and a boolean flag indicating
    which account is the current default for this user + MCP client.

When the user has multiple Google accounts connected, this tool is the canonical
way to discover what's available before invoking other Google Tasks tools with an
explicit `account=...` override.

No parameters.

Parameter schema (JSON)
{
  "description": "Parameters for list_accounts.",
  "properties": {},
  "title": "ListAccountsParams",
  "type": "object",
  "additionalProperties": false
}
Result schema (JSON)
{
  "$defs": {
    "ConnectedAccount": {
      "description": "A single connected Google account.",
      "properties": {
        "email": {
          "default": "",
          "title": "Email",
          "type": "string"
        },
        "name": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Name"
        },
        "is_default": {
          "default": false,
          "title": "Is Default",
          "type": "boolean"
        }
      },
      "title": "ConnectedAccount",
      "type": "object"
    }
  },
  "description": "Result of list_accounts.",
  "properties": {
    "accounts": {
      "items": {
        "$ref": "#/$defs/ConnectedAccount"
      },
      "title": "Accounts",
      "type": "array"
    }
  },
  "title": "ListAccountsResult",
  "type": "object"
}

# list_tasklists read

List all Google task lists owned by the authenticated user.

Full description
List all task lists owned by the authenticated user.

Parameters:
    max_results: Maximum task lists to return, 1-100 (default 100)
    page_token: Token for paginating through results (optional)

Returns:
    ListTasklistsResult with:
    - taskLists: List of task list objects with id, title, updated
    - nextPageToken: Token for next page (if more results exist)

Notes:
    - The first task list is typically the user's default list
Parameter Type Required Description
max_results integer No Maximum task lists to return (1-100) Default: 100
page_token string | null No Token for paginating through results
account string | null No Optional Google account override (email, e.g. "alice.work@company.com"). Omit to use the user's default Google account. Call list_accounts to see which accounts are connected. Tasklist and task IDs are scoped to the account they were obtained from, so pass the same account used to list/get them.
Parameter schema (JSON)
{
  "description": "Parameters for list_tasklists.",
  "properties": {
    "max_results": {
      "default": 100,
      "description": "Maximum task lists to return (1-100)",
      "maximum": 100,
      "minimum": 1,
      "title": "Max Results",
      "type": "integer"
    },
    "page_token": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Token for paginating through results",
      "title": "Page Token"
    },
    "account": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Optional Google account override (email, e.g. \"alice.work@company.com\"). Omit to use the user's default Google account. Call list_accounts to see which accounts are connected. Tasklist and task IDs are scoped to the account they were obtained from, so pass the same account used to list/get them.",
      "title": "Account"
    }
  },
  "title": "ListTasklistsParams",
  "type": "object",
  "additionalProperties": false
}
Result schema (JSON)
{
  "description": "Result of list_tasklists.",
  "properties": {
    "taskLists": {
      "items": {
        "additionalProperties": true,
        "type": "object"
      },
      "title": "Tasklists",
      "type": "array"
    },
    "nextPageToken": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Nextpagetoken"
    }
  },
  "title": "ListTasklistsResult",
  "type": "object"
}

# list_tasks read

List tasks in a task list with automatic subtask nesting.

Full description
List tasks in a task list with automatic subtask nesting.

The Google Tasks API returns a flat list with ``parent`` fields on subtasks.
This tool nests children under their parent's ``subtasks`` array (one level only).

Parameters:
    tasklist_id: Task list ID or '@default' (default '@default')
    max_results: Maximum tasks to return, 1-100 (default 100)
    page_token: Token for paginating through results (optional)
    show_completed: Include completed tasks (default true)
    show_deleted: Include deleted tasks (default false)
    show_hidden: Include hidden tasks (default false)
    due_min: Lower bound for due date, RFC 3339 (optional)
    due_max: Upper bound for due date, RFC 3339 (optional)
    updated_min: Only tasks modified after this timestamp, RFC 3339 (optional)

Returns:
    ListTasksResult with:
    - tasks: Nested list of task objects (subtasks under parent's 'subtasks' array)
    - nextPageToken: Token for next page (if more results exist)
    - resultCount: Number of top-level tasks returned

Notes:
    - Due dates are normalized to YYYY-MM-DD format
    - status values: 'needsAction' or 'completed'
Parameter Type Required Description
tasklist_id string No Task list ID (or '@default') Default: "@default"
max_results integer No Maximum tasks to return (1-100) Default: 100
page_token string | null No Token for paginating through results
show_completed boolean No Include completed tasks Default: true
show_deleted boolean No Include deleted tasks Default: false
show_hidden boolean No Include hidden tasks Default: false
due_min string | null No Lower bound for due date (RFC 3339)
due_max string | null No Upper bound for due date (RFC 3339)
updated_min string | null No Only tasks modified after this timestamp (RFC 3339)
account string | null No Optional Google account override (email, e.g. "alice.work@company.com"). Omit to use the user's default Google account. Call list_accounts to see which accounts are connected. Tasklist and task IDs are scoped to the account they were obtained from, so pass the same account used to list/get them.
Parameter schema (JSON)
{
  "description": "Parameters for list_tasks.",
  "properties": {
    "tasklist_id": {
      "default": "@default",
      "description": "Task list ID (or '@default')",
      "title": "Tasklist Id",
      "type": "string"
    },
    "max_results": {
      "default": 100,
      "description": "Maximum tasks to return (1-100)",
      "maximum": 100,
      "minimum": 1,
      "title": "Max Results",
      "type": "integer"
    },
    "page_token": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Token for paginating through results",
      "title": "Page Token"
    },
    "show_completed": {
      "default": true,
      "description": "Include completed tasks",
      "title": "Show Completed",
      "type": "boolean"
    },
    "show_deleted": {
      "default": false,
      "description": "Include deleted tasks",
      "title": "Show Deleted",
      "type": "boolean"
    },
    "show_hidden": {
      "default": false,
      "description": "Include hidden tasks",
      "title": "Show Hidden",
      "type": "boolean"
    },
    "due_min": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Lower bound for due date (RFC 3339)",
      "title": "Due Min"
    },
    "due_max": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Upper bound for due date (RFC 3339)",
      "title": "Due Max"
    },
    "updated_min": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Only tasks modified after this timestamp (RFC 3339)",
      "title": "Updated Min"
    },
    "account": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Optional Google account override (email, e.g. \"alice.work@company.com\"). Omit to use the user's default Google account. Call list_accounts to see which accounts are connected. Tasklist and task IDs are scoped to the account they were obtained from, so pass the same account used to list/get them.",
      "title": "Account"
    }
  },
  "title": "ListTasksParams",
  "type": "object",
  "additionalProperties": false
}
Result schema (JSON)
{
  "description": "Result of list_tasks.",
  "properties": {
    "tasks": {
      "items": {
        "additionalProperties": true,
        "type": "object"
      },
      "title": "Tasks",
      "type": "array"
    },
    "nextPageToken": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Nextpagetoken"
    },
    "resultCount": {
      "default": 0,
      "title": "Resultcount",
      "type": "integer"
    }
  },
  "title": "ListTasksResult",
  "type": "object"
}

# move_task write

Move a task to a new position or reparent it as a subtask.

Full description
Move a task to a new position or reparent it as a subtask.

Parameters:
    tasklist_id: Task list ID or '@default' (default '@default')
    task_id: Task ID to move (required)
    parent: New parent task ID (makes it a subtask). Pass empty string to un-nest. (optional)
    previous: Task ID to place after. Omit to move to first position. (optional)

Returns:
    MoveTaskResult with:
    - task: Moved task object with updated position and parent

Notes:
    - Uses POST /lists/{tasklist}/tasks/{task}/move with query parameters
    - If neither parent nor previous is provided, moves to first position at top level
    - Only one level of nesting is supported (subtask cannot have sub-subtasks)
Parameter Type Required Description
tasklist_id string No Task list ID (or '@default') Default: "@default"
task_id string Yes Task ID to move
parent string | null No New parent task ID (makes it a subtask). Empty string to un-nest.
previous string | null No Task ID to place after. Omit to move to first position.
account string | null No Optional Google account override (email, e.g. "alice.work@company.com"). Omit to use the user's default Google account. Call list_accounts to see which accounts are connected. Tasklist and task IDs are scoped to the account they were obtained from, so pass the same account used to list/get them.
Parameter schema (JSON)
{
  "description": "Parameters for move_task.",
  "properties": {
    "tasklist_id": {
      "default": "@default",
      "description": "Task list ID (or '@default')",
      "title": "Tasklist Id",
      "type": "string"
    },
    "task_id": {
      "description": "Task ID to move",
      "title": "Task Id",
      "type": "string"
    },
    "parent": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "New parent task ID (makes it a subtask). Empty string to un-nest.",
      "title": "Parent"
    },
    "previous": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Task ID to place after. Omit to move to first position.",
      "title": "Previous"
    },
    "account": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Optional Google account override (email, e.g. \"alice.work@company.com\"). Omit to use the user's default Google account. Call list_accounts to see which accounts are connected. Tasklist and task IDs are scoped to the account they were obtained from, so pass the same account used to list/get them.",
      "title": "Account"
    }
  },
  "required": [
    "task_id"
  ],
  "title": "MoveTaskParams",
  "type": "object",
  "additionalProperties": false
}
Result schema (JSON)
{
  "description": "Result of move_task.",
  "properties": {
    "task": {
      "additionalProperties": true,
      "title": "Task",
      "type": "object"
    }
  },
  "title": "MoveTaskResult",
  "type": "object"
}

# update_task write

Update an existing Google task with patch semantics (only provided fields modified).

Full description
Update an existing task. Patch semantics -- only provided fields are modified.

Parameters:
    tasklist_id: Task list ID or '@default' (default '@default')
    task_id: Task ID to update (required)
    title: New task title (optional)
    notes: New task notes (optional)
    due: New due date as YYYY-MM-DD, or empty string to clear (optional)
    status: 'needsAction' or 'completed' (optional)

Returns:
    UpdateTaskResult with:
    - task: Updated task object

Notes:
    - Setting status to 'completed' automatically populates the completed timestamp
    - Setting status to 'needsAction' clears the completed timestamp
    - To clear the due date, pass an empty string
    - Use move_task to change position or parent
Parameter Type Required Description
tasklist_id string No Task list ID (or '@default') Default: "@default"
task_id string Yes Task ID to update
title string | null No New task title
notes string | null No New task notes
due string | null No New due date (YYYY-MM-DD) or empty string to clear
status string | null No 'needsAction' or 'completed'
account string | null No Optional Google account override (email, e.g. "alice.work@company.com"). Omit to use the user's default Google account. Call list_accounts to see which accounts are connected. Tasklist and task IDs are scoped to the account they were obtained from, so pass the same account used to list/get them.
Parameter schema (JSON)
{
  "description": "Parameters for update_task.",
  "properties": {
    "tasklist_id": {
      "default": "@default",
      "description": "Task list ID (or '@default')",
      "title": "Tasklist Id",
      "type": "string"
    },
    "task_id": {
      "description": "Task ID to update",
      "title": "Task Id",
      "type": "string"
    },
    "title": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "New task title",
      "title": "Title"
    },
    "notes": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "New task notes",
      "title": "Notes"
    },
    "due": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "New due date (YYYY-MM-DD) or empty string to clear",
      "title": "Due"
    },
    "status": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "'needsAction' or 'completed'",
      "title": "Status"
    },
    "account": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Optional Google account override (email, e.g. \"alice.work@company.com\"). Omit to use the user's default Google account. Call list_accounts to see which accounts are connected. Tasklist and task IDs are scoped to the account they were obtained from, so pass the same account used to list/get them.",
      "title": "Account"
    }
  },
  "required": [
    "task_id"
  ],
  "title": "UpdateTaskParams",
  "type": "object",
  "additionalProperties": false
}
Result schema (JSON)
{
  "description": "Result of update_task.",
  "properties": {
    "task": {
      "additionalProperties": true,
      "title": "Task",
      "type": "object"
    }
  },
  "title": "UpdateTaskResult",
  "type": "object"
}

# update_tasklist write

Rename an existing Google task list.

Full description
Rename an existing task list.

Parameters:
    tasklist_id: Task list ID or '@default' (required)
    title: New task list title (required)

Returns:
    UpdateTasklistResult with:
    - taskList: Updated task list object

Notes:
    - Only the title can be updated; Google Tasks API does not support
      other tasklist-level properties
Parameter Type Required Description
tasklist_id string Yes Task list ID (or '@default')
title string Yes New task list title
account string | null No Optional Google account override (email, e.g. "alice.work@company.com"). Omit to use the user's default Google account. Call list_accounts to see which accounts are connected. Tasklist and task IDs are scoped to the account they were obtained from, so pass the same account used to list/get them.
Parameter schema (JSON)
{
  "description": "Parameters for update_tasklist.",
  "properties": {
    "tasklist_id": {
      "description": "Task list ID (or '@default')",
      "title": "Tasklist Id",
      "type": "string"
    },
    "title": {
      "description": "New task list title",
      "title": "Title",
      "type": "string"
    },
    "account": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Optional Google account override (email, e.g. \"alice.work@company.com\"). Omit to use the user's default Google account. Call list_accounts to see which accounts are connected. Tasklist and task IDs are scoped to the account they were obtained from, so pass the same account used to list/get them.",
      "title": "Account"
    }
  },
  "required": [
    "tasklist_id",
    "title"
  ],
  "title": "UpdateTasklistParams",
  "type": "object",
  "additionalProperties": false
}
Result schema (JSON)
{
  "description": "Result of update_tasklist.",
  "properties": {
    "taskList": {
      "additionalProperties": true,
      "title": "Tasklist",
      "type": "object"
    }
  },
  "title": "UpdateTasklistResult",
  "type": "object"
}