Skip to main content
Glama
README.md
# Google Workspace MCP Server for Cursor

An MCP (Model Context Protocol) server that provides Cursor with tools to interact with Google Workspace: Gmail, Calendar, Drive, Docs, Sheets, Slides, Chat, and People.

**Repository:** [github.com/Dave-Nguyen-PM/google-workplace-mcp](https://github.com/Dave-Nguyen-PM/google-workplace-mcp)

## Prerequisites

- Node.js >= 20
- A Google Cloud project with OAuth 2.0 credentials

## GCP Setup

1. Go to [Google Cloud Console](https://console.cloud.google.com/)
2. Create a new project (or use an existing one)
3. Enable these APIs:
   - Gmail API
   - Google Calendar API
   - Google Drive API
   - Google Docs API
   - Google Sheets API
   - Google Slides API
   - Google Chat API
   - People API
4. Go to **APIs & Services > OAuth consent screen** and configure it
5. Go to **APIs & Services > Credentials** and create an **OAuth 2.0 Client ID** (type: Desktop app)
6. Download the JSON file

## Installation

```bash
cd /path/to/google-workplace-mcp
npm install
npm run build
```

## Configuration

Place the downloaded OAuth credentials file in one of these locations:
- `./credentials.json` in the project root
- `~/.google-workspace-mcp/credentials.json`
- Set `GOOGLE_CREDENTIALS_PATH` environment variable

Add to your Cursor MCP settings (`~/.cursor/mcp.json`):

```json
{
  "mcpServers": {
    "google-workspace": {
      "command": "node",
      "args": ["/path/to/google-workplace-mcp/dist/index.js"],
      "env": {
        "GOOGLE_CREDENTIALS_PATH": "/path/to/credentials.json"
      }
    }
  }
}
```

## First Run

On the first request that requires Google auth, a browser window will open for OAuth consent. After authorizing, tokens are cached at `~/.google-workspace-mcp/tokens.json` and auto-refreshed.

## Tools (57 total)

| Domain | Tools | Access |
|--------|-------|--------|
| **Auth** | `auth_clear`, `auth_refreshToken` | - |
| **Time** | `time_getCurrentDate`, `time_getCurrentTime`, `time_getTimeZone` | Read |
| **Drive** | `drive_search`, `drive_findFolder`, `drive_createFolder`, `drive_downloadFile`, `drive_moveFile`, `drive_trashFile`, `drive_renameFile`, `drive_getComments` | Read/Write |
| **Docs** | `docs_create`, `docs_getText`, `docs_writeText`, `docs_replaceText`, `docs_formatText`, `docs_getSuggestions` | Read/Write |
| **Sheets** | `sheets_getText`, `sheets_getRange`, `sheets_find`, `sheets_getMetadata` | Read |
| **Slides** | `slides_getText`, `slides_find`, `slides_getMetadata`, `slides_getImages`, `slides_getSlideThumbnail` | Read |
| **Calendar** | `calendar_list`, `calendar_createEvent`, `calendar_listEvents`, `calendar_getEvent`, `calendar_findFreeTime`, `calendar_updateEvent`, `calendar_respondToEvent`, `calendar_deleteEvent` | Read/Write |
| **Gmail** | `gmail_search`, `gmail_get`, `gmail_downloadAttachment`, `gmail_modify`, `gmail_batchModify`, `gmail_modifyThread`, `gmail_send`, `gmail_createDraft`, `gmail_sendDraft`, `gmail_listLabels`, `gmail_createLabel` | Read/Write |
| **Chat** | `chat_listSpaces`, `chat_findSpaceByName`, `chat_sendMessage`, `chat_getMessages`, `chat_sendDm`, `chat_findDmByEmail`, `chat_listThreads`, `chat_setUpSpace` | Read/Write |
| **People** | `people_getUserProfile`, `people_getMe`, `people_getUserRelations` | Read |

## Debug Mode

Run with `--debug` to enable file logging to `~/.google-workspace-mcp/debug.log`:

```json
{
  "mcpServers": {
    "google-workspace": {
      "command": "node",
      "args": ["/path/to/dist/index.js", "--debug"]
    }
  }
}
```

## Development

```bash
npm run dev    # Watch mode (rebuilds on changes)
npm run build  # Production build
npm start      # Run the server directly
```

TDQS

B3.1/5.0

Scored across 58 tools

Disambiguation4/5

Tools are clearly organized by service with distinct actions. While some pairs like sheets_getText vs sheets_getRange or drive_search vs sheets_find could be confusing, their descriptions adequately clarify the intended use.

Naming Consistency3/5

Most tools follow a service_verbNoun pattern, but casing is inconsistent: some use all lowercase (e.g., drive_search, calendar_list) while others use camelCase (e.g., drive_findFolder, calendar_listEvents). This inconsistency reduces predictability.

Tool Count2/5

With 58 tools, the server is significantly over the typical 3-15 range. While the broad Google Workspace scope justifies many tools, the count is still excessive and could be streamlined, such as merging the three separate time_* tools into one.

Completeness3/5

Core workflows for Gmail, Calendar, and Chat are well covered, but Docs, Sheets, and Slides lack lifecycle operations (e.g., no create/update/delete for Sheets or Slides), and Drive lacks file upload. These gaps hinder comprehensive document and file management.

Maintenance

ActivityInactive
ResponsivenessNo issues