list_tasklistsLABSCO SUMMARY
Cross-list summaries are the reason to pick this one.
Google Tasks keeps each list separate, and today, overdue, upcoming, search and digest read all of them in one call, tagging each task with its list. Writes stay deliberate: an unqualified write lands in one default list rather than every list, and deleting a non-empty list takes both confirm: true and force: true.
What it is
A self-hosted Google Tasks server covering task lists, reads, cross-list summaries and task edits, run over stdio or Streamable HTTP with your own Google Cloud OAuth credentials.
What you get
- Cross-list summaries:
today,overdue,upcoming,searchanddigestread every task list when you name none, and tag each task with the list it came from - Reads from one list with
list_tasksandget_task, falling back toDEFAULT_TASKLISTor Google's first list when you do not name one - Task lists managed as objects —
list_tasklists,create_tasklist,get_tasklist,update_tasklistanddelete_tasklist— addressed by ID or exact title - Task edits one at a time:
add,update,complete,uncomplete,deleteandmove clear_completedto hide a list's finished tasks without deleting them, behind aconfirm: trueargument- Bearer-token HTTP auth, or an optional OAuth 2.0 gateway for clients that support OAuth
- Separate bearer tokens routed to separate Google accounts on one HTTP server, such as a personal and a work account
Requirements
A Google Cloud project with the Google Tasks API enabled and your own OAuth 2.0 client ID, plus Python 3.11 and a clone installed with pip install -e .. Run google-tasks-mcp-bootstrap once per Google account to store its refresh token in a local SQLite database; HTTP mode also needs MCP_BEARER_TOKEN, stdio mode does not.
Setup effort
Build from source — git clone https://github.com/ebmurha/google-tasks-mcp.git
USE CASES
Getting one view across every list
Ask for a digest or a search without naming a list, and every task list is read in one call, each task tagged with the list it came from.
Setting up a project list from a plan
Create the list, then add the tasks to it one at a time with their due dates — dates only, since Google drops the time of day.
Rescheduling everything that slipped past its date
Pull every overdue task across your lists, push the dates out, and close the ones that turned out to be done.
Tidying a list after a planning session
Rename or re-date tasks, move the ones that sit in the wrong place, and read the list back to check the result.
Retiring a finished project safely
Check what is still open in the list, clear the stragglers one at a time, then remove the list knowing what went with it.
19 tools
Listed in project docs. Your client may show a different list.
create_tasklistget_tasklistupdate_tasklistdelete_tasklistlist_tasksget_tasktodayoverdueupcomingsearchdigestclear_completedaddcompleteupdateuncompletedeletemoveBEFORE YOU INSTALL
What to know first
Tools you get
19 tools named in the project's documentation. Deleting a tasklist requires confirm: true (plus force: true if it is not empty), and clear_completed requires confirm: true.
Requires
- Python 3.11
- GOOGLE_CLIENT_ID in your environment
- GOOGLE_CLIENT_SECRET in your environment
Where it runs
The documented client runs the server on your machine.
INSTALLATION
Connect your client
Server setup
git clone https://github.com/ebmurha/google-tasks-mcp.git
cd google-tasks-mcp
python3.11 -m venv .venv
. .venv/bin/activate
pip install -e .
cp .env.example .envIn Google Cloud, enable the Google Tasks API, configure the OAuth consent screen, and create an OAuth 2.0 Client ID (Web application, redirect URI http://127.0.0.1:8787/callback). Put GOOGLE_CLIENT_ID, GOOGLE_CLIENT_SECRET and GOOGLE_REDIRECT_URI in .env. If the app is in Testing mode, add your Google account as a test user.
Authorize your Google account, once per account: open the URL the command prints, approve access, and paste the authorization code back into the terminal:
google-tasks-mcp-bootstrapAdd the stdio entry to your MCP client; <YOUR_PATH_TO_GOOGLE_TASKS_MCP> is the full path of your clone. Stdio mode needs no MCP_BEARER_TOKEN.
MCP Clients
Any MCP client — stdio
{
"mcpServers": {
"google-tasks": {
"command": "<YOUR_PATH_TO_GOOGLE_TASKS_MCP>/.venv/bin/python",
"args": [
"-m",
"google_tasks_mcp",
"--transport",
"stdio"
]
}
}
}