google-workspace-mcp-server
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| GOOGLE_CLIENT_ID | Yes | OAuth 2.0 Client ID from Google Cloud Console | |
| GOOGLE_CLIENT_SECRET | Yes | OAuth 2.0 Client Secret | |
| GOOGLE_REFRESH_TOKEN | Yes | Refresh token from OAuth Playground |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": true
} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| docs_get_documentA | Retrieve the content of a Google Doc by its ID. Args:
Returns: Document title, content, and metadata. For JSON format: { "documentId": string, "title": string, "textContent": string, "revisionId": string } Examples:
|
| docs_create_documentA | Create a new Google Doc with an optional initial body. Args:
Returns: { "documentId": string, "title": string, "revisionId": string } Examples:
|
| docs_batch_updateA | Apply batch updates to a Google Doc (insert/update/delete text, formatting, images, tables). Args:
Common request types:
See Google Docs API batchUpdate documentation for full request schema. Returns: { "documentId": string, "replies": array, "writeControl": object } |
| drive_list_commentsA | List comments on a Google Doc. Args:
Returns: For JSON format: { "comments": [ { "id": string, "content": string, "author": string, "createdTime": string, "resolved": boolean, "quotedFileContent": string, "replies": [{ "id", "content", "author", "createdTime" }] } ], "next_page_token": string | null } |
| drive_create_commentA | Add a comment to a Google Doc. Can be anchored to specific text or unanchored. Args:
Returns: { "id": string, "content": string, "author": string, "createdTime": string } Examples:
|
| drive_reply_to_commentA | Reply to an existing comment on a Google Doc. Args:
Returns: { "id": string, "content": string, "author": string, "createdTime": string } |
| drive_resolve_commentA | Mark a comment as resolved on a Google Doc. Args:
Returns: { "id": string, "resolved": true } |
| drive_delete_commentA | Delete a comment from a Google Doc. Args:
Returns: { "deleted": true, "comment_id": string } Note: This action cannot be undone. |
| drive_list_filesA | List files in your Google Drive. Args:
Returns: For JSON format: { "files": [ { "id": string, "name": string, "mimeType": string, "createdTime": string, "modifiedTime": string, "size": string, "webViewLink": string, "owners": string[] } ], "next_page_token": string | null } |
| drive_search_filesA | Search for files in your Google Drive by name or content. Args:
Returns: For JSON format: { "files": [ { "id": string, "name": string, "mimeType": string, "createdTime": string, "modifiedTime": string, "size": string, "webViewLink": string, "owners": string[] } ], "next_page_token": string | null } Examples:
|
| drive_get_fileA | Download and return the content of a file from Google Drive. Supports PDFs, images, and other binary files. Args:
Returns: The file content. For PDFs and images, returns the binary content that Claude can read directly. Examples:
|
| drive_copy_fileA | Create a copy of a file in Google Drive. Args:
Returns: { "id": string, "name": string, "mimeType": string, "webViewLink": string } Examples:
|
| sheets_get_spreadsheetA | Retrieve metadata and optionally cell data from a Google Spreadsheet. Args:
Returns: Spreadsheet title, sheets info, and metadata. For JSON format: { "spreadsheetId": string, "title": string, "locale": string, "sheets": [{ "sheetId": number, "title": string, "rowCount": number, "columnCount": number }], "spreadsheetUrl": string } Examples:
|
| sheets_get_valuesA | Read cell values from a specific range in a Google Spreadsheet. Args:
Returns: For JSON format: { "range": string, "majorDimension": string, "values": [[cell values...], ...] } Examples:
|
| sheets_batch_get_valuesA | Read cell values from multiple ranges in a Google Spreadsheet in a single request. Args:
Returns: For JSON format: { "spreadsheetId": string, "valueRanges": [{ "range": string, "values": [[...]] }, ...] } Examples:
|
| sheets_update_valuesA | Write cell values to a specific range in a Google Spreadsheet. Args:
Returns: { "spreadsheetId": string, "updatedRange": string, "updatedRows": number, "updatedColumns": number, "updatedCells": number } Examples:
|
| sheets_append_valuesA | Append rows of data to the end of a table in a Google Spreadsheet. Args:
Returns: { "spreadsheetId": string, "tableRange": string, "updates": { "updatedRange": string, "updatedRows": number, "updatedCells": number } } Examples:
|
| sheets_create_spreadsheetA | Create a new Google Spreadsheet with optional sheet names. Args:
Returns: { "spreadsheetId": string, "title": string, "spreadsheetUrl": string, "sheets": [{ "sheetId": number, "title": string }] } Examples:
|
| sheets_batch_updateA | Apply batch updates to a Google Spreadsheet (formatting, charts, filters, conditional formatting, etc.). Args:
Common request types:
See Google Sheets API batchUpdate documentation for full request schema. Returns: { "spreadsheetId": string, "replies": array } Examples:
|
| sheets_clear_valuesA | Clear cell values from a specific range in a Google Spreadsheet (keeps formatting). Args:
Returns: { "spreadsheetId": string, "clearedRange": string } Examples:
|
| sheets_duplicate_sheetA | Duplicate a sheet within the same spreadsheet. Args:
Returns: { "sheetId": number, "title": string, "index": number } Examples:
|
| sheets_create_pivot_tableA | Create a pivot table from spreadsheet data with full Google Sheets UI feature support. Args:
Examples:
|
| gmail_list_messagesA | List messages from Gmail with optional search filters. Args:
Returns: List of message summaries with ID, subject, from, date, and snippet. Examples:
|
| gmail_get_messageA | Get the full content of a specific Gmail message. Args:
Returns: Full message content including headers and body text. |
| gmail_list_threadsA | List conversation threads from Gmail. Args:
Returns: List of threads with message count and snippet. |
| gmail_get_threadA | Get all messages in a conversation thread. Args:
Returns: All messages in the thread with full content. |
| gmail_list_labelsA | List all labels (folders) in Gmail. Args:
Returns: List of all labels with their IDs and types. |
| gmail_create_draftA | Create a new email draft in Gmail. The draft is saved but NOT sent automatically. Args:
Returns: { "draftId": string, "messageId": string, "threadId": string } Examples:
|
| gmail_list_attachmentsA | List all attachments in a specific Gmail message. Args:
Returns: { "attachments": [ { "attachmentId": string, "filename": string, "mimeType": string, "size": number } ] } |
| gmail_get_attachmentA | Download an attachment from a Gmail message. Args:
Returns: The attachment content. For images, returns the image directly. For other files, provides download info. Examples:
|
| calendar_list_calendarsA | List all calendars accessible to the user. Args:
Returns: List of calendars with their IDs, names, and access roles. |
| calendar_list_eventsA | List events from a calendar within an optional time range. Args:
Returns: List of events with title, time, location, and attendees. Examples:
|
| calendar_get_eventA | Get detailed information about a specific calendar event. Args:
Returns: Full event details including description, attendees, and conference info. |
| calendar_freebusy_queryA | Check availability (free/busy times) for one or more calendars within a time range. This is useful for finding available meeting times across multiple people. It only returns busy time blocks (not event details) for privacy. Args:
Returns: For each calendar, a list of busy time blocks within the range. Requirements for checking other people's calendars:
Examples:
|
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
TDQS
Scored across 34 tools
Each tool is clearly scoped to a specific Google Workspace service and action. The service prefixes (calendar_, docs_, drive_, gmail_, sheets_) combined with distinct verbs (e.g., create vs list vs get) ensure no two tools have overlapping purposes. For example, calendar_freebusy_query is distinct from calendar_list_events, and sheets_append_values is distinct from sheets_update_values.
All tool names follow a consistent pattern: service_verb_noun in lowercase with underscores. Examples include calendar_list_events, sheets_create_spreadsheet, and gmail_get_message. There are no deviations like camelCase or mixed conventions, making the naming predictable and easy to parse.
With 34 tools across five distinct services, the count is on the higher side but still reasonable for a comprehensive Google Workspace integration. Each service has a manageable number of tools (6-12), covering essential operations without being unnecessarily bloated. However, the total could feel heavy for agents that only need a subset of services.
The tool set covers many common operations but has notable gaps. Calendar lacks create/update/delete events, Drive lacks file upload and deletion, and Gmail lacks send and modify operations. These gaps can cause agent failures when such actions are required. The surface is strong for reading and basic manipulation but incomplete for full lifecycle management.