Google Tasks MCP

io.github.A1-x-Tech由 GitHub 帳號 A1-x-Tech 發布v1.1.2更新於 Nov 7, 2026

MCP server for the Google Tasks API: task lists, subtasks, due dates, complete and move tasks.

已驗證STDIO僅桌面效率與工作流檔案與儲存

概覽

AI 產生的概覽

本機 MCP 伺服器,讓助理透過 Google Tasks API 讀取與管理你的 Google 任務清單、任務、子任務和到期日。

可以做什麼
  • 列出、建立、重新命名與刪除任務清單,並解析預設清單
  • 列出、建立、更新、移動與刪除任務,包含子任務與僅有日期的到期日
  • 將任務標記完成或重新開啟,並一次把清單中已完成的任務清出檢視
  • 查看連線狀態、在對話中完成 OAuth 登入、登出,以及送出原始 API 請求
適用情境
適合想用自然語言讓助理在 Google Tasks 中規劃與追蹤工作的情況:查看本週到期事項、把專案拆成子任務、標記完成或重新整理清單。它只涵蓋 Google Tasks,不包含日曆、Keep 或提醒。
執行需求
透過 npx 在本機執行,需要 Node.js 20+ 與 Google 帳號。可透過對話中的 OAuth 流程連線(需啟用 Tasks API 的 Google Cloud 專案與 Desktop 應用程式 OAuth 用戶端 JSON),或設定 GOOGLE_TASKS_CLIENT_ID、GOOGLE_TASKS_CLIENT_SECRET 與 GOOGLE_TASKS_REFRESH_TOKEN(或 GOOGLE_TASKS_ACCESS_TOKEN)。需要連上 Google 的網路。
安裝前請注意
寫入會直接改動真實資料:delete_task 與 delete_tasklist 無法復原,刪除清單會一併刪掉其中所有任務,clear_completed_tasks 會一次隱藏所有已完成任務;raw_request 可呼叫任意 API 方法。請把 GOOGLE_TASKS_CLIENT_SECRET 與 GOOGLE_TASKS_REFRESH_TOKEN 當作密碼保管,不要把用戶端 JSON 路徑貼進對話。除非設定 ASKADS_TELEMETRY=0,否則會送出匿名遙測。測試模式的 OAuth 更新權杖 7 天後失效。

安裝

在 SourceWeft 中

  1. 開啟 儀表板中的 Google Tasks MCP,將其新增到工作區。
  2. 為需要使用其工具的對話啟用該服務。

Desktop only,透過 STDIO。 STDIO 服務會啟動本機處理程序,因此需要 SourceWeft 桌面主機。

其他 MCP 客戶端

參照 儲存庫 中的啟動說明。

README

[A1] Google Tasks MCP

English | Русский

[npm] [Glama] [CI] [License: MIT]

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.

  • 21 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.
  • Connects from the conversation. Say "connect Google Tasks": the server walks you through the OAuth client, catches Google's redirect on 127.0.0.1 with PKCE and keeps the tokens itself — no config files, no restart.
  • Completion is reversible, deletion is not. complete_task has 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 tasks scope, 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.

Contents

Quick start

You need Node.js 20+ and a Google account. Credentials are not required at install time — the server connects from the conversation.

  1. Add the server to your AI app.
  2. Say "connect Google Tasks": the assistant walks you through creating the OAuth client and approving access without editing config files.
  3. Ask the read-only question above.
Codex

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:

bash
codex mcp add google-tasks \  -- npx -y mcp-google-tasks@latest
bash
codex mcp list

Codex MCP documentation

Claude Code
bash
claude mcp add \  --transport stdio --scope user google-tasks \  -- npx -y mcp-google-tasks@latest
bash
claude mcp list

Claude Code MCP documentation

Claude Desktop

The 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:

json
{  "mcpServers": {    "google-tasks": {      "command": "npx",      "args": ["-y", "mcp-google-tasks@latest"]    }  }}

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

Cursor

Add this to ~/.cursor/mcp.json on macOS/Linux or %USERPROFILE%\.cursor\mcp.json on Windows:

json
{  "mcpServers": {    "google-tasks": {      "type": "stdio",      "command": "npx",      "args": ["-y", "mcp-google-tasks@latest"]    }  }}

Cursor MCP documentation

VS Code

Run MCP: Open User Configuration and add:

json
{  "servers": {    "google-tasks": {      "type": "stdio",      "command": "npx",      "args": ["-y", "mcp-google-tasks@latest"]    }  }}

Check it with MCP: List Servers.

VS Code MCP documentation

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

  1. Tasks live in task lists. Every account has a built-in default list, addressed by the special id @default; create_tasklist adds more.
  2. 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.
  3. Ordering and nesting change only through move_task; the API's position field is read-only.
  4. Completing a task is reversible: reopen_task brings 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

OperationWhat happensConfirmation boundary
Read task lists and tasksReads lists, tasks and their filtersNo change
Create a task list or a taskAdds a list or an open taskChanges Google Tasks
Update a task or rename a listChanges a title, notes or due dateChanges a task
Move a taskChanges order, nesting or the containing listChanges a task
Complete or reopen a taskToggles completion statusReversible change
Clear completed tasksSweeps every completed task in a list out of viewDestructive
Delete a task or a task listRemoves the task, or the list with everything in itDestructive
Raw API requestCan call API methods without a dedicated toolPotentially 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. There are two ways in, and the first one needs no configuration files.

Connect from the chat (recommended)

Say "connect Google Tasks" and the assistant runs the flow with you:

  1. setup_instructions prints the checklist: create or select a Google Cloud project, enable Google Tasks API, configure the consent screen and create a Desktop app OAuth client.
  2. Download that client's JSON ("Download JSON") and give the assistant its path — set_client stores it owner-only. The secret never goes through the conversation.
  3. start_login returns a Google consent link. Open it on this machine and approve; the code comes back to a one-shot listener on 127.0.0.1 (PKCE), never through the chat.
  4. finish_login exchanges the code and saves the tokens to ~/.config/mcp-google-tasks/credentials.json (mode 0600) and verifies them with a real Google Tasks API call — so an API that is still switched off is caught right there.

The tokens are re-read on every call, so the connection works immediately — no restart of the AI app. auth_status shows what is connected, logout revokes and deletes it.

Environment variables (CI, unattended installs)

  1. Create or select a Google Cloud project and enable Google Tasks API.

  2. Configure the OAuth consent screen and create a Desktop app OAuth client.

  3. 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.

  4. Request the scope:

    text
    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

Every variable is optional — with none of them the server connects from the chat.

VariableRequiredDescription
GOOGLE_TASKS_CLIENT_IDNo*OAuth client ID.
GOOGLE_TASKS_CLIENT_SECRETNo*OAuth client secret.
GOOGLE_TASKS_REFRESH_TOKENNo*OAuth refresh token.
GOOGLE_TASKS_ACCESS_TOKENNo*Short-lived alternative to the OAuth trio.
GOOGLE_TASKS_OAUTH_PORTNoFixed loopback port for the in-chat login; useful over SSH port forwarding.
GOOGLE_TASKS_API_BASENoGoogle Tasks API base URL override.
GOOGLE_TASKS_TIMEOUT_MSNoPer-request timeout; default 60000 ms.
GOOGLE_TASKS_MAX_RETRIESNoTemporary-error retries; default 3.

* 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. For each tool call it also sends the outcome and, on failure, an excerpt of the error text with e-mails, addresses, tokens, numbers of 4+ digits and quoted text replaced by #; a value from your request can appear in it if the error text contains it. Set ASKADS_TELEMETRY=0 to 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 and 5xx errors, while writes are not replayed after an uncertain failure — check the outcome with get_task instead.
  • There is no background polling. The server runs only when called. list_tasks supports incremental sync through the updated_min filter, so an AI app with scheduled tasks can check for changes periodically without re-reading everything.

Technical documentation

Support

Found a bug or need a scenario? Create an issue or write in Telegram.


[Две Моны дают пять]

You made it to the end!

來源:README.md,提交 3075f88

工具

21

auth_status

Google connection status

Shows whether this server is connected to Google: token presence and source (env variables or a stored in-chat login), expiry, the Google account email, granted vs missing OAuth scopes, where the credentials file lives and where the OAuth client comes from. Makes no network calls and never returns the token itself. Call it first when other tools report the server is not connected.

無需輸入參數。

setup_instructions

Setup instructions

Step-by-step checklist for connecting this server to Google: creating a Google Cloud project and a Desktop-app OAuth client, publishing the consent screen (mandatory — Testing-mode refresh tokens die after 7 days), downloading the client JSON and handing its PATH to set_client. Works without any credentials; the checklist shortens to 'enable the API + log in' when an OAuth client is already configured (one client serves the whole mcp-google-* line). Never asks the user to paste secrets into the chat.

無需輸入參數。

set_client

Save the OAuth client

Saves the OAuth client credentials from the JSON file downloaded from Google Cloud Console ('Download JSON' on a Desktop-app client). Pass the file PATH — the secret must never be pasted into the chat. The client is stored once in the shared ~/.config/mcp-google-auth/client.json (owner-only) and reused by every mcp-google-* server; tokens stay per-server. After this, call start_login.

輸入參數path必填

start_login

Start the Google login

First step of connecting from the chat, without editing config files or restarting the client. Returns authorizeUrl — show it to the user as a clickable link and ask them to open it in the browser ON THIS MACHINE, pick the Google account and approve access. A one-shot listener on 127.0.0.1 catches Google's redirect; the code is exchanged locally and never passes through the chat. Does not open the browser itself. The attempt lives 10 minutes; when the browser shows the success page, call finish_login.

無需輸入參數。

finish_login

Finish the Google login

Second step: waits up to 20 s for the browser consent to finish, saves the tokens to an owner-only file and verifies the login with a read-only identity call, returning the account email and the granted scopes. After success every tool works immediately — no client restart. If the user granted only part of the requested permissions, the login is still saved and missingScopes lists what will not work. Logging in under a different Google account replaces the previous login (its refresh token is revoked best-effort) and the response carries previousAccountEmail so the change never goes unnoticed.

無需輸入參數。

logout

Disconnect from Google

Revokes the stored token at Google (oauth2.googleapis.com/revoke) and deletes the local credentials file. Tokens supplied via env variables are NOT touched — remove them from the MCP client config manually; envTokenStillSet in the response says whether any are still in effect.

無需輸入參數。

list_tasklists

List task lists

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.

輸入參數page_sizepage_token

get_tasklist

Get a task list

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.

輸入參數tasklist_id必填

create_tasklist

Create a task list

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.

輸入參數title必填

update_tasklist

Rename a task list

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.

輸入參數title必填tasklist_id必填

delete_tasklist

Delete a task list

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.

輸入參數tasklist_id必填

list_tasks

List tasks

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.

輸入參數due_maxdue_minpage_sizepage_tokenshow_hiddentasklist_id必填updated_minshow_deletedcompleted_maxcompleted_minshow_assignedshow_completed

get_task

Get a task

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.

輸入參數task_id必填tasklist_id必填

create_task

Create a task

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.

輸入參數duenotestitle必填parentprevioustasklist_id必填

update_task

Update a task

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.

輸入參數duenotestitletask_id必填clear_dueclear_notestasklist_id必填

move_task

Move a task

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.

輸入參數parenttask_id必填previoustasklist_id必填destination_tasklist

delete_task

Delete a task

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.

輸入參數task_id必填tasklist_id必填

complete_task

Complete a task

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.

輸入參數task_id必填tasklist_id必填

reopen_task

Reopen a task

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.

輸入參數task_id必填tasklist_id必填

clear_completed_tasks

Clear completed tasks

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.

輸入參數tasklist_id必填

raw_request

Raw Google Tasks API call

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/<listId>/tasks/<taskId>", 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/<listId>/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.

輸入參數bodypath必填method

版本歷史

6
  1. v1.1.2最新Nov 5, 2026
  2. v1.1.1Oct 31, 2026
  3. v1.1.0Oct 31, 2026
  4. v1.0.0Sep 23, 2026
  5. v0.2.0Sep 21, 2026
  6. v0.1.0Sep 16, 2026

評分

已滿足適用檢查項的 90%

該評分衡量此收錄條目的完整程度,依據註冊中心條目、端點與公開來源計算得出。它不是對伺服器本身的評價,也不表示伺服器安全或目前可用:可連通性是帶日期的檢查結果,評分也不包含安裝量或使用者評價。

  • 近 30 天內可連通25 分
  • 已宣告認證方式10 分

    請在註冊中心條目中宣告憑證請求標頭,或保持端點能夠回應探測,以便判定其認證方式。

  • 已列出工具必需15 分
  • 描述必需15 分
  • 圖示10 分
  • 文件15 分
  • 授權條款10 分