Skip to main content
Glama

Google Cloud MCP - Google Workspace MCP Server (gg-mcp)

PyPI License: MIT Python 3.12+ Docker Support

A Model Context Protocol (MCP) server that connects AI agents to Google Workspace: Gmail, Calendar, Drive, Docs, Sheets, and Slides. Built with FastMCP.

# Install and run — that's it
uvx gg-mcp

� Table of Contents

  1. Quick Start (5 minutes)

  2. Available Tools

  3. Installation Options

  4. Environment Variables

  5. Troubleshooting

  6. Documentation

  7. Development


Related MCP server: MCP Google Tools Server

🚀 Quick Start (5 minutes)

Step 1: Get Google OAuth Credentials

  1. Go to Google Cloud Console

  2. Create a project and enable OAuth consent screen (External type)

  3. Add required scopes (Gmail, Drive, Calendar, Docs, Sheets, Slides)

  4. Create OAuth 2.0 Desktop app credentials

  5. Copy Client ID and Client Secret

📖 Detailed guide →

Step 2: Install & Run

export GOOGLE_CLIENT_ID="your-client-id.apps.googleusercontent.com"
export GOOGLE_CLIENT_SECRET="your-client-secret"
uvx gg-mcp

You'll see:

============================================================
🔐 GOOGLE ACCOUNT AUTHENTICATION
📱 Open your browser: http://localhost:3838
============================================================

Open http://localhost:3838 → "Authorize with Google" → Grant permissions ✅

Step 3: Configure MCP Client

Claude Desktop (~/Library/Application Support/Claude/claude_desktop_config.json):

{
  "mcpServers": {
    "gg-mcp": {
      "command": "uvx",
      "args": ["gg-mcp"],
      "env": {
        "GOOGLE_CLIENT_ID": "your-client-id.apps.googleusercontent.com",
        "GOOGLE_CLIENT_SECRET": "your-client-secret"
      }
    }
  }
}

Restart Claude Desktop and the tools are ready to use! 🎉

📖 25+ client configs →


📋 Available Tools (30+)

Account

  • get_account_info - Get the email of the authenticated Google account

Gmail

  • send_email - Send an email (to, subject, body)

  • create_gmail_label - Create a new Gmail label

  • list_gmail_labels - List all user-created labels

Google Calendar

  • list_calendar_events - List upcoming events (max_results, days_back)

  • create_calendar_event - Create an event (summary, start_time, end_time)

Google Drive

  • list_drive_folders - List all folders in Google Drive (root or specific parent)

  • search_drive - Search files by query string

Google Docs

  • create_document - Create a new document with optional text

  • get_document - Get the full text content of a document

  • append_to_document - Append text to document end

  • search_documents - Search for documents in Drive

  • export_document - Export document (text, html, pdf, docx)

Google Sheets

  • create_spreadsheet - Create a new spreadsheet

  • read_spreadsheet - Read data from a range

  • update_spreadsheet - Update cells with JSON 2D array

  • append_to_spreadsheet - Append rows to spreadsheet

  • search_spreadsheets - Search for spreadsheets in Drive

  • get_spreadsheet_info - Get metadata and dimensions

  • clear_spreadsheet_range - Clear all values in a range

  • batch_update_spreadsheet - Batch update multiple ranges

  • add_sheet - Add a new sheet/tab

  • export_spreadsheet - Export (csv, xlsx, pdf, tsv)

Google Slides

  • create_presentation - Create a new presentation

  • get_presentation - Get slide metadata and content

  • add_slide - Add a new slide with layout selection

  • add_text_to_slide - Add a text box to slide

  • search_presentations - Search for presentations

  • delete_slide - Delete a slide by index

  • export_presentation - Export (pdf, pptx, txt)


🚀 Quick Start (5 minutes)

Step 1: Get Google OAuth Credentials

  1. Go to Google Cloud Console

  2. Create a project and enable OAuth consent screen (External type)

  3. Add required scopes (Gmail, Drive, Calendar, Docs, Sheets, Slides)

  4. Create OAuth 2.0 Desktop app credentials

  5. Copy Client ID and Client Secret

📖 Detailed guide →

Step 2: Install & Run

export GOOGLE_CLIENT_ID="your-client-id.apps.googleusercontent.com"
export GOOGLE_CLIENT_SECRET="your-client-secret"
uvx gg-mcp

You'll see:

============================================================
🔐 GOOGLE ACCOUNT AUTHENTICATION
📱 Open your browser: http://localhost:3838
============================================================

Open http://localhost:3838 → "Authorize with Google" → Grant permissions ✅

Step 3: Configure MCP Client

Claude Desktop (~/Library/Application Support/Claude/claude_desktop_config.json):

{
  "mcpServers": {
    "gg-mcp": {
      "command": "uvx",
      "args": ["gg-mcp"],
      "env": {
        "GOOGLE_CLIENT_ID": "your-client-id.apps.googleusercontent.com",
        "GOOGLE_CLIENT_SECRET": "your-client-secret"
      }
    }
  }
}

📖 25+ client configs →


📦 Installation Options

Option A: PyPI (Recommended)

pip install gg-mcp
export GOOGLE_CLIENT_ID="..."
export GOOGLE_CLIENT_SECRET="..."
gg-mcp

Option B: From Source

git clone https://github.com/tannht/google-cloud-mcp.git
cd google-cloud-mcp
uv sync
export GOOGLE_CLIENT_ID="..."
export GOOGLE_CLIENT_SECRET="..."
uv run main.py

Option C: Docker

git clone https://github.com/tannht/google-cloud-mcp.git
cd google-cloud-mcp
docker-compose up -d --build

🔑 Environment Variables

Variable

Required

Default

Purpose

GOOGLE_CLIENT_ID

Yes

—

OAuth 2.0 Client ID

GOOGLE_CLIENT_SECRET

Yes

—

OAuth 2.0 Client Secret

GOOGLE_TOKEN_PATH

No

.token.json

Token file path

GOOGLE_TOKEN_JSON

No

—

Token as JSON string

AUTH_PORT

No

3838

Auth portal port


❓ Troubleshooting

Problem

Solution

403: access_denied

Add your email to Test users in OAuth consent screen

401: Invalid credentials

Verify GOOGLE_CLIENT_ID and GOOGLE_CLIENT_SECRET

Token expired

Delete .token.json and re-authenticate

Can't access http://localhost:3838

Port 3838 in use. Try AUTH_PORT=8080

403: API not enabled

Enable APIs in Google Cloud Console

📖 Full troubleshooting →


📚 Documentation


🛠️ Development

git clone https://github.com/tannht/google-cloud-mcp.git
cd google-cloud-mcp
uv sync --group dev
uv run pytest -v  # Run tests

📖 Dev setup →


📄 License

MIT

👥 Contributors

  • Hoang Tan (Owner)

  • PubPug Assistant (Primary Developer)

Available Tools

30 tools
add_sheetB

Add a new sheet/tab to an existing spreadsheet.

Inputs: spreadsheet_id (required), sheet_name (required).

add_slideB

Add a new slide to a presentation. Layouts: BLANK, TITLE, TITLE_AND_BODY, TITLE_AND_TWO_COLUMNS, TITLE_ONLY, SECTION_HEADER, CAPTION_ONLY, BIG_NUMBER.

Inputs: presentation_id (required), layout.

add_text_to_slideC

Add a text box to a slide. slide_index: 0-based. Coordinates in points (pt).

Inputs: presentation_id (required), slide_index (required), text (required), x, +3 more.

append_to_documentC

Append text to the end of a Google Docs document.

Inputs: document_id (required), text (required).

append_to_spreadsheetC

Append rows to a spreadsheet. Values format: JSON 2D array. Range: 'Sheet1!A1'.

Inputs: spreadsheet_id (required), range (required), values (required).

batch_update_spreadsheetA

Batch update multiple ranges. Data format: JSON array of {range, values}, e.g. '[{"range":"Sheet1!A1","values":[["X"]]}]'.

Inputs: spreadsheet_id (required), data (required).

clear_spreadsheet_rangeB

Clear all values in a range. Range format: 'Sheet1!A1:D10'.

Inputs: spreadsheet_id (required), range (required).

create_calendar_eventC

Create a calendar event. format: YYYY-MM-DDTHH:MM (VN Time).

Inputs: summary (required), start_time (required), end_time (required), description.

create_documentC

Create a new Google Docs document with optional initial text.

Inputs: title (required), body_text.

create_gmail_labelB

Create a new label in Gmail.

Inputs: name (required).

create_presentationC

Create a new Google Slides presentation.

Inputs: title (required).

create_spreadsheetC

Create a new Google Sheets spreadsheet.

Inputs: title (required), sheet_name.

delete_slideB

Delete a slide from a presentation by its 0-based index.

Inputs: presentation_id (required), slide_index (required).

export_documentB

Export a Google Docs document. Formats: text, html, pdf, docx.

Inputs: document_id (required), format.

export_presentationB

Export a presentation. Formats: pdf, pptx, txt.

Inputs: presentation_id (required), format.

export_spreadsheetB

Export a spreadsheet. Formats: csv, xlsx, pdf, tsv. sheet_id: 0 for first sheet.

Inputs: spreadsheet_id (required), format, sheet_id.

get_account_infoA

Get the email address of the currently authenticated Google account.

Inputs: no named parameters.

get_documentB

Get the full text content of a Google Docs document by its ID.

Inputs: document_id (required).

get_presentationB

Get metadata and slide titles/content from a Google Slides presentation.

Inputs: presentation_id (required).

get_spreadsheet_infoB

Get metadata about a spreadsheet: title, sheets, and their dimensions.

Inputs: spreadsheet_id (required).

list_calendar_eventsC

List events. Timezone: Asia/Ho_Chi_Minh.

Inputs: max_results, days_back.

list_drive_foldersC

List all folders in Google Drive. parent_id: 'root' for main folder.

Inputs: parent_id.

list_gmail_labelsA

List all user labels in Gmail.

Inputs: no named parameters.

read_spreadsheetB

Read data from a Google Sheets spreadsheet. Range format: 'Sheet1!A1:D10' or 'Sheet1'.

Inputs: spreadsheet_id (required), range.

search_documentsA

Search for Google Docs documents in Drive. Empty query lists recent docs.

Inputs: query, max_results.

search_driveD

Search for files in Google Drive.

Inputs: query (required).

search_presentationsB

Search for Google Slides presentations in Drive. Empty query lists recent presentations.

Inputs: query, max_results.

search_spreadsheetsB

Search for Google Sheets spreadsheets in Drive. Empty query lists recent sheets.

Inputs: query, max_results.

send_emailC

Send a simple email via Gmail.

Note: This function intentionally constructs the MIME message manually to keep the raw decoded content readable with Unicode subjects, as expected by the test suite. This avoids RFC-compliant header encoding that would obscure the original subject line text.

Inputs: to (required), subject (required), body (required).

update_spreadsheetA

Update cells in a spreadsheet. Values format: JSON 2D array, e.g. '[["A","B"],["1","2"]]'. Range: 'Sheet1!A1'.

Inputs: spreadsheet_id (required), range (required), values (required).

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

Loading tool schema changelog…

    TDQS

    B3.2/5.0

    Scored across 30 tools

    Disambiguation5/5

    Each tool targets a specific Google service and action (e.g., create, read, update, search, export), with clear names that distinguish between resources like documents, spreadsheets, slides, Gmail, Calendar, and Drive. There is no ambiguity between tools.

    Naming Consistency5/5

    All tools use consistent snake_case naming with a verb-first pattern (e.g., create_document, list_calendar_events, get_spreadsheet_info). The naming convention is uniform across the entire set, making it predictable for an agent.

    Tool Count5/5

    With 30 tools covering multiple Google services (Docs, Sheets, Slides, Gmail, Calendar, Drive, account info), the count is appropriate for a comprehensive Google Workspace integration. Each tool serves a distinct purpose without redundancy.

    Completeness3/5

    The tool set covers core create, read, search, and export operations for most resources but lacks update and delete for documents, presentations, and calendar events. This is a notable gap for full CRUD workflows, though the set is still functional for many use cases.

    Maintenance

    ActivityInactive
    ResponsivenessOutdated data

    Related MCP Connectors

    Related MCP Servers