google-workspace-mcp
Provides tools for managing Gmail messages, including searching, reading, sending, drafting, modifying labels, and downloading attachments.
Provides tools for managing Google Calendar events, including creating, updating, deleting, responding to events, and finding free time slots.
Provides tools for interacting with Google Chat, including listing spaces, sending messages, managing threads, and sending direct messages.
Provides tools for viewing and editing Google Docs, including reading, writing, replacing, and formatting text, and getting suggestions.
Provides tools for managing Google Drive files and folders, including searching, creating, moving, trashing, renaming, and downloading files, and retrieving comments.
Provides tools for reading Google Sheets data, including getting cell text, ranges, finding values, and retrieving metadata.
Provides tools for reading Google Slides content, including getting text, finding items, retrieving metadata, images, and slide thumbnails.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@google-workspace-mcp Find emails from last week about the project"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
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
Go to Google Cloud Console
Create a new project (or use an existing one)
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
Go to APIs & Services > OAuth consent screen and configure it
Go to APIs & Services > Credentials and create an OAuth 2.0 Client ID (type: Desktop app)
Download the JSON file
Installation
cd /path/to/google-workplace-mcp
npm install
npm run buildConfiguration
Place the downloaded OAuth credentials file in one of these locations:
./credentials.jsonin the project root~/.google-workspace-mcp/credentials.jsonSet
GOOGLE_CREDENTIALS_PATHenvironment 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 |
| - |
Time |
| Read |
Drive |
| Read/Write |
Docs |
| Read/Write |
Sheets |
| Read |
Slides |
| Read |
Calendar |
| Read/Write |
Gmail |
| Read/Write |
Chat |
| Read/Write |
People |
| 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 directlyAvailable Tools
58 toolsauth_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_findFreeTimeARead-only
Finds a free time slot for multiple people to meet.
Inputs: timeMax (required), timeMin (required), duration (required), attendees (required).
calendar_getEventARead-only
Gets details of a specific calendar event.
Inputs: eventId (required), calendarId.
calendar_listARead-only
Lists all of the user's calendars.
Inputs: no named parameters.
calendar_listEventsARead-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_findDmByEmailARead-only
Finds a Google Chat DM space by a user's email address.
Inputs: email (required).
chat_findSpaceByNameARead-only
Finds a Google Chat space by display name.
Inputs: displayName (required).
chat_getMessagesBRead-only
Gets messages from a Google Chat space.
Inputs: spaceName (required), orderBy, pageSize, pageToken, +1 more.
chat_listSpacesARead-only
Lists the Google Chat spaces you are a member of.
Inputs: no named parameters.
chat_listThreadsBRead-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_getSuggestionsBRead-only
Retrieves suggested edits from a Google Doc.
Inputs: documentId (required).
docs_getTextARead-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_findFolderCRead-only
Finds a folder by name in Google Drive.
Inputs: folderName (required).
drive_getCommentsBRead-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_searchARead-only
Searches for files and folders in Google Drive. Query can be a simple term, a URL, or a full Drive query string.
Inputs: query, corpus, pageSize, pageToken, +1 more.
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_getARead-only
Get the full content of a specific email message.
Inputs: messageId (required), format.
gmail_listLabelsARead-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_searchCRead-only
Search for emails in Gmail using query parameters.
Inputs: query, labelIds, pageToken, maxResults, +1 more.
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_getMeARead-only
Gets the profile information of the authenticated user.
Inputs: no named parameters.
people_getUserProfileBRead-only
Gets a user's profile information by ID, email, or name.
Inputs: name, email, userId.
people_getUserRelationsARead-only
Gets a user's relations (manager, spouse, assistant, etc.). Defaults to authenticated user.
Inputs: userId, relationType.
sheets_findARead-only
Finds Google Sheets spreadsheets by name.
Inputs: query (required), pageSize, pageToken.
sheets_getMetadataARead-only
Gets metadata about a spreadsheet (sheets, dimensions, etc.).
Inputs: spreadsheetId (required).
sheets_getRangeBRead-only
Gets values from a specific range in a spreadsheet.
Inputs: range (required), spreadsheetId (required).
sheets_getTextBRead-only
Retrieves the content of a Google Sheets spreadsheet.
Inputs: spreadsheetId (required), format.
slides_findARead-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_getMetadataARead-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_getTextARead-only
Retrieves the text content of a Google Slides presentation.
Inputs: presentationId (required).
time_getCurrentDateARead-only
Gets the current date in UTC and local time, along with the timezone.
Inputs: no named parameters.
time_getCurrentTimeARead-only
Gets the current time in UTC and local time, along with the timezone.
Inputs: no named parameters.
time_getTimeZoneARead-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
Scored across 58 tools
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.
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.
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.
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
Related MCP Connectors
MCP server connecting AI agents to 100+ apps (Gmail, Slack, Notion, GitHub) via one-click OAuth.
Hosted BigQuery MCP server for Claude, ChatGPT and Cursor, with each action switched per account.
Hosted Google Calendar MCP server for AI agents. No self-hosting or Google Cloud setup.
Hosted Google Ads MCP server for Claude, ChatGPT and Cursor, with each action switched per account.
Related MCP Servers
- FlicenseBqualityDmaintenanceA server that enables Cursor users to view, create, and manage Google Calendar events through natural language commands using the MCP protocol with Google OAuth2 authentication.5-
- FlicenseNot gradedqualityDmaintenanceA 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.-
- AlicenseBqualityDmaintenanceA Model Context Protocol (MCP) server that connects AI agents to Google Workspace (Gmail, Calendar, Drive, Docs, Sheets, and Slides).302MIT
- AlicenseAqualityBmaintenanceMCP 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.15MIT