clear
Clear completed tasks from a Google Tasks task list
Manage Google Tasks from the conversation — across several lists, with the parent-child hierarchy and ordering the app actually shows.
LABSCO SUMMARY
The basics are all here; the reasons to choose this one are in the detail. list pages through everything rather than stopping quietly at a hundred, list_with_tree returns the nesting and position order the app shows and a flat list destroys, and move covers indenting, un-indenting and moving between lists rather than only reordering. Setup is the usual Google cost — your own OAuth client and a refresh token — with three different ways to hand it over.
A Google Tasks server covering more than one list: search and list tasks with full pagination, create, update, move and delete them, and read a list as the tree the Google Tasks interface displays.
Published as @alvincrave/gtasks-mcp and launched over stdio with npx, or built from source. Authentication is your own Google OAuth client with the Tasks scope: GOOGLE_CLIENT_ID, GOOGLE_CLIENT_SECRET and GOOGLE_REFRESH_TOKEN, after enabling the Google Tasks API on a Google Cloud project. Credential files are the alternative — point GTASKS_CREDENTIALS_PATH at the OAuth client JSON and run the auth command once to write GTASKS_TOKEN_PATH — as is a ~/.gtasks-credentials.json holding the same three values. A Docker image can be built from the repository.
One command plus credentials — npx -y @alvincrave/gtasks-mcp, then supply credentials
USE CASES
Find the list IDs, then read one back as a tree with the nesting and ordering preserved.
Create it with a title, notes and a due date, in whichever list it belongs to.
Search across titles and notes, or list everything when the phrasing has gone entirely.
move reorders, nests a task under a parent, pulls it back out, or sends it to a different list.
Patch the status on the ones that are finished, then clear the completed tasks out of the list.
Counted once with only startup setup. Other versions, modes or optional credentials may expose a different list.
clearClear completed tasks from a Google Tasks task list
createCreate a new task in Google Tasks
deleteDelete a task in Google Tasks
listList all tasks in Google Tasks
list_task_listsList all task lists in Google Tasks with their IDs and titles. Use this to discover list IDs before querying specific lists.
list_with_treeList tasks from a specific task list in tree format (matching Google Tasks UI order). Shows parent-child hierarchy with indentation, sorted by position.
moveMove a task to a new position within its list or to a different list. Can reorder, indent (make subtask), or un-indent.
searchSearch for a task in Google Tasks
updateUpdate a task in Google Tasks
BEFORE YOU INSTALL
9 tools when we connected. search, list, create, update, delete, move and clear have no prefix, so they are easy to confuse with another server's tools. clear removes completed tasks from a list.
CONTEXT COST
Rated by the size of the 9 tool definitions that ride along on every turn, not by how many there are
INSTALLATION
npx -y @alvincrave/gtasks-mcp{
"mcpServers": {
"gtasks": {
"command": "npx",
"args": [
"-y",
"@alvincrave/gtasks-mcp"
],
"env": {
"GOOGLE_CLIENT_ID": "<YOUR_GOOGLE_CLIENT_ID>",
"GOOGLE_CLIENT_SECRET": "<YOUR_GOOGLE_CLIENT_SECRET>",
"GOOGLE_REFRESH_TOKEN": "<YOUR_GOOGLE_REFRESH_TOKEN>"
}
}
}
}Build from source, then authenticate once with the OAuth client JSON you downloaded from Google Cloud:
git clone https://github.com/alvinjchoi/gtasks-mcp.git
cd gtasks-mcp
npm install
npm run build
export GTASKS_CREDENTIALS_PATH=<YOUR_GTASKS_CREDENTIALS_PATH>
export GTASKS_TOKEN_PATH=<YOUR_GTASKS_TOKEN_PATH>
node dist/index.js authThen run the server with the same two variables set, or put gcp-oauth.keys.json in the project root and use the default paths. In a client, that is a server entry that runs node with the full path to dist/index.js in this clone and has GTASKS_CREDENTIALS_PATH and GTASKS_TOKEN_PATH under env.
Create ~/.gtasks-credentials.json with your own values. The server reads it when GOOGLE_CLIENT_ID, GOOGLE_CLIENT_SECRET and GOOGLE_REFRESH_TOKEN are not set, so the npx block can go in your client without an env section.
{
"clientId": "<YOUR_CLIENT_ID>",
"clientSecret": "<YOUR_CLIENT_SECRET>",
"refreshToken": "<YOUR_GOOGLE_REFRESH_TOKEN>"
}Build the image from a clone of this repository, then run it with your Google credentials:
git clone https://github.com/alvinjchoi/gtasks-mcp.git
cd gtasks-mcp
docker build -t gtasks-mcp .
docker run -i \
-e GOOGLE_CLIENT_ID=<YOUR_GOOGLE_CLIENT_ID> \
-e GOOGLE_CLIENT_SECRET=<YOUR_GOOGLE_CLIENT_SECRET> \
-e GOOGLE_REFRESH_TOKEN=<YOUR_GOOGLE_REFRESH_TOKEN> \
gtasks-mcpThe container talks MCP over stdin and stdout (docker run -i), so a client uses it by launching that docker run line as the server: docker as the command, the rest of the line as its arguments. The README gives no client entry for Docker; add it in your client's own format.