Skip to main content
Glama

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

Prerequisites

  • Node.js >= 20

  • A Google Cloud project with OAuth 2.0 credentials

Related MCP server: Google MCP Server

GCP Setup

  1. Go to Google Cloud Console

  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

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):

{
  "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:

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

Development

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

Available Tools

58 tools
auth_clearA

Clears authentication credentials, forcing re-login on next request.

Inputs: no named parameters.

auth_refreshTokenB

Manually triggers the token refresh process.

Inputs: no named parameters.

calendar_createEventB

Creates a new calendar event. Supports Google Meet and Drive attachments.

Inputs: end (required), start (required), summary (required), attendees, +5 more.

calendar_deleteEventB

Deletes an event from a calendar.

Inputs: eventId (required), calendarId.

calendar_findFreeTimeA
Read-only

Finds a free time slot for multiple people to meet.

Inputs: timeMax (required), timeMin (required), duration (required), attendees (required).

calendar_getEventA
Read-only

Gets details of a specific calendar event.

Inputs: eventId (required), calendarId.

calendar_listA
Read-only

Lists all of the user's calendars.

Inputs: no named parameters.

calendar_listEventsA
Read-only

Lists events from a calendar. Defaults to upcoming events.

Inputs: timeMax, timeMin, calendarId, attendeeResponseStatus.

calendar_respondToEventA

Responds to a meeting invitation (accept, decline, or tentative).

Inputs: eventId (required), responseStatus (required), calendarId, responseMessage, +1 more.

calendar_updateEventB

Updates an existing calendar event. Supports Meet and Drive attachments.

Inputs: eventId (required), end, start, summary, +5 more.

chat_findDmByEmailA
Read-only

Finds a Google Chat DM space by a user's email address.

Inputs: email (required).

chat_findSpaceByNameA
Read-only

Finds a Google Chat space by display name.

Inputs: displayName (required).

chat_getMessagesB
Read-only

Gets messages from a Google Chat space.

Inputs: spaceName (required), orderBy, pageSize, pageToken, +1 more.

chat_listSpacesA
Read-only

Lists the Google Chat spaces you are a member of.

Inputs: no named parameters.

chat_listThreadsB
Read-only

Lists threads from a Google Chat space.

Inputs: spaceName (required), pageSize, pageToken.

chat_sendDmC

Sends a direct message to a user by email.

Inputs: email (required), message (required), threadName.

chat_sendMessageB

Sends a message to a Google Chat space.

Inputs: message (required), spaceName (required), threadName.

chat_setUpSpaceA

Creates a new Google Chat space with members.

Inputs: userNames (required), displayName (required).

docs_createB

Creates a new Google Doc, optionally with initial text content.

Inputs: title (required), content.

docs_formatTextB

Applies formatting (bold, italic, headings, etc.) to text ranges in a Google Doc.

Inputs: formats (required), documentId (required), tabId.

docs_getSuggestionsB
Read-only

Retrieves suggested edits from a Google Doc.

Inputs: documentId (required).

docs_getTextA
Read-only

Retrieves the text content of a Google Doc.

Inputs: documentId (required), tabId.

docs_replaceTextA

Replaces all occurrences of text with new text in a Google Doc.

Inputs: findText (required), documentId (required), replaceText (required), tabId.

docs_writeTextC

Writes text to a Google Doc at a specified position.

Inputs: text (required), documentId (required), tabId, position.

drive_createFolderB

Creates a new folder in Google Drive.

Inputs: name (required), parentId.

drive_downloadFileB

Downloads a file from Google Drive to a local path.

Inputs: fileId (required), localPath (required).

drive_findFolderC
Read-only

Finds a folder by name in Google Drive.

Inputs: folderName (required).

drive_getCommentsB
Read-only

Retrieves comments from a Google Drive file.

Inputs: fileId (required).

drive_moveFileB

Moves a file or folder to a different folder in Google Drive.

Inputs: fileId (required), folderId, folderName.

drive_renameFileB

Renames a file or folder in Google Drive.

Inputs: fileId (required), newName (required).

drive_trashFileA

Moves a file or folder to the trash (reversible).

Inputs: fileId (required).

gmail_batchModifyA

Bulk modify up to 1,000 Gmail messages at once with the same label changes.

Inputs: messageIds (required), addLabelIds, removeLabelIds.

gmail_createDraftB

Create a draft email message.

Inputs: to (required), body (required), subject (required), cc, +3 more.

gmail_createLabelB

Create a new Gmail label.

Inputs: name (required), labelListVisibility, messageListVisibility.

gmail_downloadAttachmentB

Downloads an email attachment to a local file.

Inputs: localPath (required), messageId (required), attachmentId (required).

gmail_getA
Read-only

Get the full content of a specific email message.

Inputs: messageId (required), format.

gmail_listLabelsA
Read-only

List all Gmail labels in the user's mailbox.

Inputs: no named parameters.

gmail_modifyB

Modify a Gmail message's labels. System labels: INBOX, SPAM, TRASH, UNREAD, STARRED, IMPORTANT.

Inputs: messageId (required), addLabelIds, removeLabelIds.

gmail_modifyThreadA

Modify labels on all messages in a Gmail thread at once.

Inputs: threadId (required), addLabelIds, removeLabelIds.

gmail_sendC

Send an email message.

Inputs: to (required), body (required), subject (required), cc, +2 more.

gmail_sendDraftA

Send a previously created draft email.

Inputs: draftId (required).

people_getMeA
Read-only

Gets the profile information of the authenticated user.

Inputs: no named parameters.

people_getUserProfileB
Read-only

Gets a user's profile information by ID, email, or name.

Inputs: name, email, userId.

people_getUserRelationsA
Read-only

Gets a user's relations (manager, spouse, assistant, etc.). Defaults to authenticated user.

Inputs: userId, relationType.

sheets_findA
Read-only

Finds Google Sheets spreadsheets by name.

Inputs: query (required), pageSize, pageToken.

sheets_getMetadataA
Read-only

Gets metadata about a spreadsheet (sheets, dimensions, etc.).

Inputs: spreadsheetId (required).

sheets_getRangeB
Read-only

Gets values from a specific range in a spreadsheet.

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

sheets_getTextB
Read-only

Retrieves the content of a Google Sheets spreadsheet.

Inputs: spreadsheetId (required), format.

slides_findA
Read-only

Finds Google Slides presentations by name.

Inputs: query (required), pageSize, pageToken.

slides_getImagesB

Downloads all images from a presentation to a local directory.

Inputs: localPath (required), presentationId (required).

slides_getMetadataA
Read-only

Gets metadata about a presentation (slides, dimensions, etc.).

Inputs: presentationId (required).

slides_getSlideThumbnailB

Downloads a thumbnail image of a specific slide.

Inputs: localPath (required), slideObjectId (required), presentationId (required).

slides_getTextA
Read-only

Retrieves the text content of a Google Slides presentation.

Inputs: presentationId (required).

time_getCurrentDateA
Read-only

Gets the current date in UTC and local time, along with the timezone.

Inputs: no named parameters.

time_getCurrentTimeA
Read-only

Gets the current time in UTC and local time, along with the timezone.

Inputs: no named parameters.

time_getTimeZoneA
Read-only

Gets the local timezone and UTC offset.

Inputs: no named parameters.

Tool Schema Changelog

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

Loading tool schema changelog…

    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 recent community issues

    Related MCP Connectors

    Related MCP Servers

    • F
      license
      Not graded
      quality
      D
      maintenance
      A locally-hosted MCP server that integrates Gmail, Google Calendar, and Google Drive to provide AI-powered management of emails, events, and files. It enables tool-based interactions like sending emails, creating calendar events, and searching Drive files through clients like Cursor and Claude Desktop.
      -
    • A
      license
      A
      quality
      B
      maintenance
      MCP server integrating multiple Google Workspace services including Gmail, Calendar, Drive, Sheets, Docs, Tasks, People, Forms, and Slides, enabling users to manage emails, events, files, documents, and more through natural language.
      15
      MIT