# Google Tasks MCP
**English** | [Русский](./README.ru.md)
[](https://www.npmjs.com/package/mcp-google-tasks)
[](https://glama.ai/mcp/servers/A1-x-Tech/mcp-google-tasks)
[](https://github.com/A1-x-Tech/mcp-google-tasks/actions/workflows/ci.yml)
[](./LICENSE)
**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.
- **15 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.
- **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](#quick-start) · [Explore use cases](#what-you-can-ask-it-to-do) · [Open technical documentation](#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](#quick-start)
- [What you can ask it to do](#what-you-can-ask-it-to-do)
- [How a task changes](#how-a-task-changes)
- [What can change](#what-can-change)
- [Getting access](#getting-access)
- [Configuration](#configuration)
- [Data, limits and background work](#data-limits-and-background-work)
- [Technical documentation](#technical-documentation)
- [Support](#support)
## Quick start
You need Node.js 20+, a Google account and OAuth credentials from a Google Cloud project with the Google Tasks API enabled.
1. [Prepare Google OAuth access](#getting-access).
2. Add the server to your AI app.
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 \
--env GOOGLE_TASKS_CLIENT_ID=your_client_id \
--env GOOGLE_TASKS_CLIENT_SECRET=your_client_secret \
--env GOOGLE_TASKS_REFRESH_TOKEN=your_refresh_token \
-- npx -y mcp-google-tasks@latest
```
```bash
codex mcp list
```
[Codex MCP documentation](https://learn.chatgpt.com/docs/extend/mcp?surface=cli)
Claude Code
```bash
claude mcp add \
--env GOOGLE_TASKS_CLIENT_ID=your_client_id \
--env GOOGLE_TASKS_CLIENT_SECRET=your_client_secret \
--env GOOGLE_TASKS_REFRESH_TOKEN=your_refresh_token \
--transport stdio --scope user google-tasks \
-- npx -y mcp-google-tasks@latest
```
```bash
claude mcp list
```
[Claude Code MCP documentation](https://code.claude.com/docs/en/mcp)
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"],
"env": {
"GOOGLE_TASKS_CLIENT_ID": "your_client_id",
"GOOGLE_TASKS_CLIENT_SECRET": "your_client_secret",
"GOOGLE_TASKS_REFRESH_TOKEN": "your_refresh_token"
}
}
}
}
```
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](https://support.claude.com/en/articles/10949351-getting-started-with-local-mcp-servers-on-claude-desktop)
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"],
"env": {
"GOOGLE_TASKS_CLIENT_ID": "your_client_id",
"GOOGLE_TASKS_CLIENT_SECRET": "your_client_secret",
"GOOGLE_TASKS_REFRESH_TOKEN": "your_refresh_token"
}
}
}
}
```
[Cursor MCP documentation](https://cursor.com/docs/mcp)
VS Code
Run **MCP: Open User Configuration** and add:
```json
{
"servers": {
"google-tasks": {
"type": "stdio",
"command": "npx",
"args": ["-y", "mcp-google-tasks@latest"],
"env": {
"GOOGLE_TASKS_CLIENT_ID": "${input:tasks_client_id}",
"GOOGLE_TASKS_CLIENT_SECRET": "${input:tasks_client_secret}",
"GOOGLE_TASKS_REFRESH_TOKEN": "${input:tasks_refresh_token}"
}
}
},
"inputs": [
{ "type": "promptString", "id": "tasks_client_id", "description": "Google OAuth client ID" },
{ "type": "promptString", "id": "tasks_client_secret", "description": "Google OAuth client secret", "password": true },
{ "type": "promptString", "id": "tasks_refresh_token", "description": "Google OAuth refresh token", "password": true }
]
}
```
Check it with **MCP: List Servers**.
[VS Code MCP documentation](https://code.visualstudio.com/docs/agent-customization/mcp-servers)
You made it to the end!