# Google Docs MCP server

> Lets an AI client read, create, edit, delete, export, share, and list comments on Google Docs documents.

- Repository: https://github.com/pulsemcp/mcp-servers
- Page: https://hostedmcp.org/servers/pulsemcp/google-docs
- Official: yes
- Transport: stdio
- Stars: 81
- License: MIT
- Latest version: 0.1.4

## Install

### Claude Code

```sh
claude mcp add --env 'GOOGLE_DOCS_OAUTH_CLIENT_ID=<YOUR_GOOGLE_DOCS_OAUTH_CLIENT_ID>' --env 'GOOGLE_DOCS_OAUTH_CLIENT_SECRET=<YOUR_GOOGLE_DOCS_OAUTH_CLIENT_SECRET>' --env 'GOOGLE_DOCS_OAUTH_REFRESH_TOKEN=<YOUR_GOOGLE_DOCS_OAUTH_REFRESH_TOKEN>' --env 'GOOGLE_DOCS_SERVICE_ACCOUNT_PRIVATE_KEY=<YOUR_GOOGLE_DOCS_SERVICE_ACCOUNT_PRIVATE_KEY>' google-docs -- npx -y google-docs-workspace-mcp-server
```

### Cursor (`~/.cursor/mcp.json`)

```json
{
  "mcpServers": {
    "google-docs": {
      "command": "npx",
      "args": [
        "-y",
        "google-docs-workspace-mcp-server"
      ],
      "env": {
        "GOOGLE_DOCS_OAUTH_CLIENT_ID": "<YOUR_GOOGLE_DOCS_OAUTH_CLIENT_ID>",
        "GOOGLE_DOCS_OAUTH_CLIENT_SECRET": "<YOUR_GOOGLE_DOCS_OAUTH_CLIENT_SECRET>",
        "GOOGLE_DOCS_OAUTH_REFRESH_TOKEN": "<YOUR_GOOGLE_DOCS_OAUTH_REFRESH_TOKEN>",
        "GOOGLE_DOCS_SERVICE_ACCOUNT_PRIVATE_KEY": "<YOUR_GOOGLE_DOCS_SERVICE_ACCOUNT_PRIVATE_KEY>"
      }
    }
  }
}
```

### VS Code (`.vscode/mcp.json`)

```json
{
  "servers": {
    "google-docs": {
      "type": "stdio",
      "command": "npx",
      "args": [
        "-y",
        "google-docs-workspace-mcp-server"
      ],
      "env": {
        "GOOGLE_DOCS_OAUTH_CLIENT_ID": "<YOUR_GOOGLE_DOCS_OAUTH_CLIENT_ID>",
        "GOOGLE_DOCS_OAUTH_CLIENT_SECRET": "<YOUR_GOOGLE_DOCS_OAUTH_CLIENT_SECRET>",
        "GOOGLE_DOCS_OAUTH_REFRESH_TOKEN": "<YOUR_GOOGLE_DOCS_OAUTH_REFRESH_TOKEN>",
        "GOOGLE_DOCS_SERVICE_ACCOUNT_PRIVATE_KEY": "<YOUR_GOOGLE_DOCS_SERVICE_ACCOUNT_PRIVATE_KEY>"
      }
    }
  }
}
```

### VS Code CLI

```sh
code --add-mcp '{"name":"google-docs","type":"stdio","command":"npx","args":["-y","google-docs-workspace-mcp-server"],"env":{"GOOGLE_DOCS_OAUTH_CLIENT_ID":"<YOUR_GOOGLE_DOCS_OAUTH_CLIENT_ID>","GOOGLE_DOCS_OAUTH_CLIENT_SECRET":"<YOUR_GOOGLE_DOCS_OAUTH_CLIENT_SECRET>","GOOGLE_DOCS_OAUTH_REFRESH_TOKEN":"<YOUR_GOOGLE_DOCS_OAUTH_REFRESH_TOKEN>","GOOGLE_DOCS_SERVICE_ACCOUNT_PRIVATE_KEY":"<YOUR_GOOGLE_DOCS_SERVICE_ACCOUNT_PRIVATE_KEY>"}}'
```

### Claude Desktop (`claude_desktop_config.json`)

```json
{
  "mcpServers": {
    "google-docs": {
      "command": "npx",
      "args": [
        "-y",
        "google-docs-workspace-mcp-server"
      ],
      "env": {
        "GOOGLE_DOCS_OAUTH_CLIENT_ID": "<YOUR_GOOGLE_DOCS_OAUTH_CLIENT_ID>",
        "GOOGLE_DOCS_OAUTH_CLIENT_SECRET": "<YOUR_GOOGLE_DOCS_OAUTH_CLIENT_SECRET>",
        "GOOGLE_DOCS_OAUTH_REFRESH_TOKEN": "<YOUR_GOOGLE_DOCS_OAUTH_REFRESH_TOKEN>",
        "GOOGLE_DOCS_SERVICE_ACCOUNT_PRIVATE_KEY": "<YOUR_GOOGLE_DOCS_SERVICE_ACCOUNT_PRIVATE_KEY>"
      }
    }
  }
}
```

### Codex

```sh
codex mcp add google-docs --env 'GOOGLE_DOCS_OAUTH_CLIENT_ID=<YOUR_GOOGLE_DOCS_OAUTH_CLIENT_ID>' --env 'GOOGLE_DOCS_OAUTH_CLIENT_SECRET=<YOUR_GOOGLE_DOCS_OAUTH_CLIENT_SECRET>' --env 'GOOGLE_DOCS_OAUTH_REFRESH_TOKEN=<YOUR_GOOGLE_DOCS_OAUTH_REFRESH_TOKEN>' --env 'GOOGLE_DOCS_SERVICE_ACCOUNT_PRIVATE_KEY=<YOUR_GOOGLE_DOCS_SERVICE_ACCOUNT_PRIVATE_KEY>' -- npx -y google-docs-workspace-mcp-server
```

### Codex config.toml (`~/.codex/config.toml`)

```toml
[mcp_servers.google-docs]
command = "npx"
args = ["-y", "google-docs-workspace-mcp-server"]

[mcp_servers.google-docs.env]
GOOGLE_DOCS_OAUTH_CLIENT_ID = "<YOUR_GOOGLE_DOCS_OAUTH_CLIENT_ID>"
GOOGLE_DOCS_OAUTH_CLIENT_SECRET = "<YOUR_GOOGLE_DOCS_OAUTH_CLIENT_SECRET>"
GOOGLE_DOCS_OAUTH_REFRESH_TOKEN = "<YOUR_GOOGLE_DOCS_OAUTH_REFRESH_TOKEN>"
GOOGLE_DOCS_SERVICE_ACCOUNT_PRIVATE_KEY = "<YOUR_GOOGLE_DOCS_SERVICE_ACCOUNT_PRIVATE_KEY>"
```

### Gemini CLI

```sh
gemini mcp add -s user -e 'GOOGLE_DOCS_OAUTH_CLIENT_ID=<YOUR_GOOGLE_DOCS_OAUTH_CLIENT_ID>' -e 'GOOGLE_DOCS_OAUTH_CLIENT_SECRET=<YOUR_GOOGLE_DOCS_OAUTH_CLIENT_SECRET>' -e 'GOOGLE_DOCS_OAUTH_REFRESH_TOKEN=<YOUR_GOOGLE_DOCS_OAUTH_REFRESH_TOKEN>' -e 'GOOGLE_DOCS_SERVICE_ACCOUNT_PRIVATE_KEY=<YOUR_GOOGLE_DOCS_SERVICE_ACCOUNT_PRIVATE_KEY>' google-docs npx -- -y google-docs-workspace-mcp-server
```

### Gemini settings.json (`~/.gemini/settings.json`)

```json
{
  "mcpServers": {
    "google-docs": {
      "command": "npx",
      "args": [
        "-y",
        "google-docs-workspace-mcp-server"
      ],
      "env": {
        "GOOGLE_DOCS_OAUTH_CLIENT_ID": "<YOUR_GOOGLE_DOCS_OAUTH_CLIENT_ID>",
        "GOOGLE_DOCS_OAUTH_CLIENT_SECRET": "<YOUR_GOOGLE_DOCS_OAUTH_CLIENT_SECRET>",
        "GOOGLE_DOCS_OAUTH_REFRESH_TOKEN": "<YOUR_GOOGLE_DOCS_OAUTH_REFRESH_TOKEN>",
        "GOOGLE_DOCS_SERVICE_ACCOUNT_PRIVATE_KEY": "<YOUR_GOOGLE_DOCS_SERVICE_ACCOUNT_PRIVATE_KEY>"
      }
    }
  }
}
```

## Environment variables

| Name | Required | Secret | Description |
|---|---|---|---|
| `GOOGLE_DOCS_OAUTH_CLIENT_ID` | no | yes | OAuth2 client ID from Google Cloud Console. |
| `GOOGLE_DOCS_OAUTH_CLIENT_SECRET` | no | yes | OAuth2 client secret from Google Cloud Console. |
| `GOOGLE_DOCS_OAUTH_REFRESH_TOKEN` | no | yes | Long-lived refresh token obtained from the oauth-setup command. |
| `GOOGLE_DOCS_SERVICE_ACCOUNT_PRIVATE_KEY` | no | yes | Service account private key in PEM format. |
| `GOOGLE_DOCS_ENABLED_TOOLGROUPS` | no | no | Comma-separated list of tool groups to enable (readonly, readwrite, readwrite_external). |
| `GOOGLE_DOCS_IMPERSONATE_EMAIL` | no | no | Email address to impersonate in Google Workspace. |
| `GOOGLE_DOCS_SERVICE_ACCOUNT_CLIENT_EMAIL` | no | no | Service account email address for domain-wide delegation. |
| `MCP_SERVERS_MASTER_KEY` | no | no |  |

## Tools (21)

- `readonly`
- `readwrite`
- `readwrite_external`
- `document_id`
- `format`
- `title`
- `initial_content`
- `requests`
- `text`
- `index`
- `find`
- `replace`
- `match_case`
- `permanent`
- `include_resolved`
- `include_deleted`
- `type`
- `role`
- `email_address`
- `domain`
- `send_notification_email`

## FAQ

### How do I authenticate the Google Docs MCP server?

Use OAuth2 with a client ID, client secret, and refresh token for personal accounts, or a service account with domain-wide delegation for Google Workspace accounts.

### How do I restrict which tools the Google Docs server exposes?

Set the GOOGLE_DOCS_ENABLED_TOOLGROUPS environment variable to readonly, readwrite, or readwrite_external. All groups are enabled by default.

### Can I pass a Docs URL instead of a document ID?

Yes, tools taking a document_id accept a raw ID or a shareable Docs URL, and the server extracts the ID automatically.

### Can the server list comments on a document?

Yes, list_comments returns comment threads with author, timestamps, resolved state, quoted text, bodies, and replies.
