Google Tasks MCP Server
Google Tasks MCP Server (personal, single-account)
Wraps the Google Tasks API so Claude can read/write the task-list items you see inside Google Calendar (the checklist items — different from Calendar events, which the Google Calendar connector already handles).
Runs as a small hosted HTTP service, so the scheduled dashboard refresh can reach it from the cloud with your laptop off.
1. Google Cloud setup (you do this — ~10 min, one time)
Go to https://console.cloud.google.com/ and create a new project (or reuse one you already have), e.g. "benedict-tasks-mcp".
Enable the API: APIs & Services → Library → search "Google Tasks API" → Enable.
Configure OAuth consent screen: APIs & Services → OAuth consent screen → External → fill app name ("Benedict Tasks MCP"), your email as support contact → Save. You can leave it in "Testing" mode — add your own Google account (benedict2588@gmail.com) under "Test users".
Create OAuth client: APIs & Services → Credentials → Create Credentials → OAuth client ID → Application type: Desktop app → name it "tasks-mcp-authorize" → Create. Copy the Client ID and Client secret — you'll need them in step 2 below.
2. Get a refresh token (you do this — one time, on your own machine)
This step needs to run somewhere with a browser (your laptop), but it's a one-off — after this, the token works forever (until you revoke it) and the deployed server never needs your laptop again.
# unzip this project, then:
npm install
npm run build
GOOGLE_CLIENT_ID=<your client id> GOOGLE_CLIENT_SECRET=<your client secret> npm run authorizeIt prints a URL — open it, log in as benedict2588@gmail.com, approve access. Your terminal will then print:
GOOGLE_CLIENT_ID=...
GOOGLE_CLIENT_SECRET=...
GOOGLE_REFRESH_TOKEN=...Save those three values — they're the only secrets the live server needs.
3. Deploy the server (cloud, always-on)
Any small always-on Node host works — Render, Railway, Fly.io, a $5 VPS. Quickest is Render:
Push this folder to a (private) GitHub repo.
Render → New → Web Service → connect the repo.
Build command:
npm install && npm run buildStart command:
npm startAdd environment variables:
GOOGLE_CLIENT_IDGOOGLE_CLIENT_SECRETGOOGLE_REFRESH_TOKENMCP_SHARED_SECRET— make up any long random string; this is what stops randoms on the internet from calling your task list. Claude will need to send it too (see step 4).
Deploy. Once live, note the URL, e.g.
https://benedict-tasks-mcp.onrender.com.
The MCP endpoint is POST https://<your-url>/mcp.
4. Register it as a custom connector in Claude
In Claude's connector settings, add a custom connector:
URL:
https://<your-url>/mcpAuth: send header
Authorization: Bearer <MCP_SHARED_SECRET>(however Claude's custom-connector UI lets you set a static header/bearer token — if it only supports OAuth, tell me and I'll add a proper OAuth layer instead of the shared-secret approach).
Once connected, tools like google_tasks_list_tasklists and
google_tasks_list_tasks show up, and the dashboard-refresh scheduled task
can call them the same way it already calls Google Calendar / Drive.
Tools this server exposes
google_tasks_list_tasklists— list your Google Tasks listsgoogle_tasks_list_tasks— list tasks in a list (filter by due date, show/hide completed)google_tasks_create_taskgoogle_tasks_update_taskgoogle_tasks_complete_taskgoogle_tasks_delete_task
Local test (optional, before deploying)
GOOGLE_CLIENT_ID=... GOOGLE_CLIENT_SECRET=... GOOGLE_REFRESH_TOKEN=... npm start
# then in another terminal:
npx @modelcontextprotocol/inspector http://localhost:8787/mcp