Skip to main content
Glama
EveryInc

google-workspace-mcp-server

by EveryInc

Server Configuration

Describes the environment variables required to run the server.

NameRequiredDescriptionDefault
GOOGLE_CLIENT_IDYesOAuth 2.0 Client ID from Google Cloud Console
GOOGLE_CLIENT_SECRETYesOAuth 2.0 Client Secret
GOOGLE_REFRESH_TOKENYesRefresh token from OAuth Playground

Capabilities

Features and capabilities supported by this server

CapabilityDetails
tools
{
  "listChanged": true
}

Tools

Functions exposed to the LLM to take actions

NameDescription
docs_get_documentA

Retrieve the content of a Google Doc by its ID.

Args:

  • document_id (string): The ID of the Google Doc (found in the URL after /d/)

  • response_format ('markdown' | 'json'): Output format (default: 'markdown')

Returns: Document title, content, and metadata. For JSON format: { "documentId": string, "title": string, "textContent": string, "revisionId": string }

Examples:

  • Get doc content: document_id="1BxiMVs0XRA5nFMdKvBdBZjgmUUqptlbs74OgvE2upms"

docs_create_documentA

Create a new Google Doc with an optional initial body.

Args:

  • title (string): The title for the new document

  • body_content (string, optional): Initial text content for the document body

Returns: { "documentId": string, "title": string, "revisionId": string }

Examples:

  • Create empty doc: title="Meeting Notes"

  • Create with content: title="Draft", body_content="Hello World"

docs_batch_updateA

Apply batch updates to a Google Doc (insert/update/delete text, formatting, images, tables).

Args:

  • document_id (string): The ID of the Google Doc to update

  • requests (array): Array of batch update request objects

Common request types:

  • insertText: { insertText: { location: { index: 1 }, text: "Hello" } }

  • deleteContentRange: { deleteContentRange: { range: { startIndex: 1, endIndex: 10 } } }

  • updateTextStyle: { updateTextStyle: { range: {...}, textStyle: {...}, fields: "bold" } }

  • insertInlineImage: { insertInlineImage: { location: {...}, uri: "https://..." } }

  • insertTable: { insertTable: { rows: 3, columns: 3, location: {...} } }

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:

  • file_id (string): The ID of the Google Doc

  • include_deleted (boolean): Include deleted comments (default: false)

  • page_size (number): Max comments to return, 1-100 (default: 20)

  • page_token (string, optional): Pagination token for next page

  • response_format ('markdown' | 'json'): Output format (default: 'markdown')

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:

  • file_id (string): The ID of the Google Doc

  • content (string): The text content of the comment

  • quoted_text (string, optional): Text to anchor the comment to (for anchored comments)

Returns: { "id": string, "content": string, "author": string, "createdTime": string }

Examples:

  • Unanchored: file_id="...", content="Please review this section"

  • Anchored: file_id="...", content="Typo here", quoted_text="teh"

drive_reply_to_commentA

Reply to an existing comment on a Google Doc.

Args:

  • file_id (string): The ID of the Google Doc

  • comment_id (string): The ID of the comment to reply to

  • content (string): The text content of the reply

Returns: { "id": string, "content": string, "author": string, "createdTime": string }

drive_resolve_commentB

Mark a comment as resolved on a Google Doc.

Args:

  • file_id (string): The ID of the Google Doc

  • comment_id (string): The ID of the comment to resolve

Returns: { "id": string, "resolved": true }

drive_delete_commentA

Delete a comment from a Google Doc.

Args:

  • file_id (string): The ID of the Google Doc

  • comment_id (string): The ID of the comment to delete

Returns: { "deleted": true, "comment_id": string }

Note: This action cannot be undone.

drive_list_filesA

List files in your Google Drive.

Args:

  • page_size (number): Max files to return, 1-100 (default: 20)

  • page_token (string, optional): Pagination token for next page

  • order_by (string): Sort order (default: 'modifiedTime desc')

  • mime_type ('all' | 'documents' | 'spreadsheets' | 'presentations' | 'folders'): Filter by type (default: 'all')

  • response_format ('markdown' | 'json'): Output format (default: 'markdown')

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:

  • query (string): Search query - searches file names and content

  • page_size (number): Max files to return, 1-100 (default: 20)

  • page_token (string, optional): Pagination token for next page

  • mime_type ('all' | 'documents' | 'spreadsheets' | 'presentations' | 'folders'): Filter by type (default: 'all')

  • response_format ('markdown' | 'json'): Output format (default: 'markdown')

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:

  • Search by name: query="budget 2024"

  • Search spreadsheets: query="sales", mime_type="spreadsheets"

drive_get_fileA

Download and return the content of a file from Google Drive. Supports PDFs, images, and other binary files.

Args:

  • file_id (string): The ID of the file to download (found in the URL after /d/)

Returns: The file content. For PDFs and images, returns the binary content that Claude can read directly.

Examples:

  • Get PDF: file_id="1Q3BmlH3_sII1VGf0-GYXSiLGTZstM-l1"

  • From URL https://drive.google.com/file/d/ABC123/view -> file_id="ABC123"

drive_copy_fileA

Create a copy of a file in Google Drive.

Args:

  • file_id (string): The ID of the file to copy

  • name (string, optional): New name for the copied file (defaults to 'Copy of [original name]')

  • parent_folder_id (string, optional): ID of the folder to copy the file into (defaults to same location as original)

Returns: { "id": string, "name": string, "mimeType": string, "webViewLink": string }

Examples:

  • Copy file: file_id="1abc123"

  • Copy with new name: file_id="1abc123", name="Budget 2025"

  • Copy to folder: file_id="1abc123", parent_folder_id="0xyz789"

sheets_get_spreadsheetA

Retrieve metadata and optionally cell data from a Google Spreadsheet.

Args:

  • spreadsheet_id (string): The ID of the Google Spreadsheet (found in the URL after /d/)

  • include_grid_data (boolean): Whether to include cell data (default: false)

  • response_format ('markdown' | 'json'): Output format (default: 'markdown')

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:

  • Get spreadsheet info: spreadsheet_id="1BxiMVs0XRA5nFMdKvBdBZjgmUUqptlbs74OgvE2upms"

sheets_get_valuesA

Read cell values from a specific range in a Google Spreadsheet.

Args:

  • spreadsheet_id (string): The ID of the Google Spreadsheet

  • range (string): The A1 notation range to read (e.g., 'Sheet1!A1:D10' or 'A1:D10')

  • major_dimension ('ROWS' | 'COLUMNS'): Return data by rows or columns (default: 'ROWS')

  • response_format ('markdown' | 'json'): Output format (default: 'markdown')

Returns: For JSON format: { "range": string, "majorDimension": string, "values": [[cell values...], ...] }

Examples:

  • Read range: spreadsheet_id="...", range="Sheet1!A1:D10"

  • Read specific column: spreadsheet_id="...", range="Sheet1!A:A"

sheets_batch_get_valuesA

Read cell values from multiple ranges in a Google Spreadsheet in a single request.

Args:

  • spreadsheet_id (string): The ID of the Google Spreadsheet

  • ranges (string[]): Array of A1 notation ranges to read (e.g., ['Sheet1!A1:D10', 'Sheet2!A1:B5'])

  • major_dimension ('ROWS' | 'COLUMNS'): Return data by rows or columns (default: 'ROWS')

  • response_format ('markdown' | 'json'): Output format (default: 'markdown')

Returns: For JSON format: { "spreadsheetId": string, "valueRanges": [{ "range": string, "values": [[...]] }, ...] }

Examples:

  • Read multiple ranges: ranges=["Sheet1!A1:D10", "Sheet2!A:B"]

sheets_update_valuesA

Write cell values to a specific range in a Google Spreadsheet.

Args:

  • spreadsheet_id (string): The ID of the Google Spreadsheet

  • range (string): The A1 notation range to update (e.g., 'Sheet1!A1:D10')

  • values (array): 2D array of values to write (rows of cells)

  • value_input_option ('RAW' | 'USER_ENTERED'): How to interpret input (default: 'USER_ENTERED')

    • 'RAW': Values are stored as-is

    • 'USER_ENTERED': Values are parsed as if typed by user (formulas, dates work)

Returns: { "spreadsheetId": string, "updatedRange": string, "updatedRows": number, "updatedColumns": number, "updatedCells": number }

Examples:

  • Write data: range="Sheet1!A1", values=[["Name", "Age"], ["Alice", 30]]

  • Write formula: range="Sheet1!C1", values=[["=SUM(A1:B1)"]]

sheets_append_valuesA

Append rows of data to the end of a table in a Google Spreadsheet.

Args:

  • spreadsheet_id (string): The ID of the Google Spreadsheet

  • range (string): The A1 notation range defining the table to append to (e.g., 'Sheet1!A:D')

  • values (array): 2D array of values to append (rows of cells)

  • value_input_option ('RAW' | 'USER_ENTERED'): How to interpret input (default: 'USER_ENTERED')

  • insert_data_option ('OVERWRITE' | 'INSERT_ROWS'): How to insert data (default: 'INSERT_ROWS')

Returns: { "spreadsheetId": string, "tableRange": string, "updates": { "updatedRange": string, "updatedRows": number, "updatedCells": number } }

Examples:

  • Append rows: range="Sheet1!A:D", values=[["Alice", 30, "Engineer", "NYC"]]

sheets_create_spreadsheetA

Create a new Google Spreadsheet with optional sheet names.

Args:

  • title (string): The title for the new spreadsheet

  • sheet_titles (string[], optional): Array of sheet names to create

Returns: { "spreadsheetId": string, "title": string, "spreadsheetUrl": string, "sheets": [{ "sheetId": number, "title": string }] }

Examples:

  • Create basic: title="My Spreadsheet"

  • With sheets: title="Budget", sheet_titles=["Income", "Expenses", "Summary"]

sheets_batch_updateA

Apply batch updates to a Google Spreadsheet (formatting, charts, filters, conditional formatting, etc.).

Args:

  • spreadsheet_id (string): The ID of the Google Spreadsheet to update

  • requests (array): Array of batch update request objects

Common request types:

  • updateCells: Update cell data and formatting

  • addSheet: Add a new sheet

  • deleteSheet: Delete a sheet

  • updateSheetProperties: Rename sheet, change grid size

  • mergeCells: Merge cell ranges

  • addConditionalFormatRule: Add conditional formatting

  • addChart: Add a chart

  • setDataValidation: Add data validation rules

  • addFilterView: Add filter views

  • repeatCell: Apply formatting to a range

See Google Sheets API batchUpdate documentation for full request schema.

Returns: { "spreadsheetId": string, "replies": array }

Examples:

  • Add sheet: requests=[{ "addSheet": { "properties": { "title": "NewSheet" } } }]

  • Bold range: requests=[{ "repeatCell": { "range": {...}, "cell": { "userEnteredFormat": { "textFormat": { "bold": true } } }, "fields": "userEnteredFormat.textFormat.bold" } }]

sheets_clear_valuesA

Clear cell values from a specific range in a Google Spreadsheet (keeps formatting).

Args:

  • spreadsheet_id (string): The ID of the Google Spreadsheet

  • range (string): The A1 notation range to clear (e.g., 'Sheet1!A1:D10')

Returns: { "spreadsheetId": string, "clearedRange": string }

Examples:

  • Clear range: range="Sheet1!A1:D10"

  • Clear entire sheet: range="Sheet1"

sheets_duplicate_sheetA

Duplicate a sheet within the same spreadsheet.

Args:

  • spreadsheet_id (string): The ID of the Google Spreadsheet

  • sheet_id (number): The ID of the sheet to duplicate (use sheets_get_spreadsheet to find sheet IDs)

  • new_sheet_name (string, optional): Name for the new sheet (defaults to 'Copy of [original name]')

Returns: { "sheetId": number, "title": string, "index": number }

Examples:

  • Duplicate sheet: spreadsheet_id="...", sheet_id=0

  • Duplicate with new name: spreadsheet_id="...", sheet_id=0, new_sheet_name="January Data"

sheets_create_pivot_tableA

Create a pivot table from spreadsheet data with full Google Sheets UI feature support.

Args:

  • spreadsheet_id (string): The ID of the Google Spreadsheet

  • source_range (string): A1 notation range (e.g., 'Sheet1!A1:E100', 'Sales!A:F')

  • destination_sheet_id (number, optional): Sheet ID for pivot (default: creates new sheet)

  • destination_sheet_name (string): Name for new sheet (default: 'Pivot Table')

  • rows/columns (array): Groupings (at least one row OR column required)

    • source_column: Column letter ('A') or index (0)

    • label: Custom display name

    • show_totals: Show subtotals (default: true)

    • sort_order: 'ASCENDING' or 'DESCENDING'

    • sort_by_value: { value_index: 0 } - Sort by aggregated value instead of alphabetically

    • group_rule: Bucketing options (pick one):

      • { date_time: { type: 'MONTH' } } - Group dates (YEAR, QUARTER, MONTH, DAY_OF_WEEK, etc.)

      • { histogram: { interval: 100, start: 0, end: 1000 } } - Numeric buckets

      • { manual: { groups: [{ group_name: 'West', items: ['CA', 'WA', 'OR'] }] } }

    • group_limit: Max groups to display

  • values (array, required): Aggregations

    • source_column: Column to aggregate (or use formula)

    • formula: Custom formula like '=Revenue/Quantity' (use with summarize_function: 'CUSTOM')

    • summarize_function: SUM, COUNT, COUNTA, COUNTUNIQUE, AVERAGE, MAX, MIN, MEDIAN, PRODUCT, STDEV, STDEVP, VAR, VARP, CUSTOM

    • name: Display name

    • calculated_display_type: 'PERCENT_OF_ROW_TOTAL', 'PERCENT_OF_COLUMN_TOTAL', 'PERCENT_OF_GRAND_TOTAL'

  • filters (array, optional): Filter source data

    • source_column: Column to filter

    • visible_values: ['Active', 'Pending'] - Show only these values

    • condition: { type: 'NUMBER_GREATER', values: [100] } - Filter by condition

  • value_layout: 'HORIZONTAL' or 'VERTICAL' (default: 'HORIZONTAL')

Examples:

  • Date grouped: rows=[{source_column: "A", group_rule: {date_time: {type: "MONTH"}}}], values=[{source_column: "E", summarize_function: "SUM"}]

  • Sorted by value: rows=[{source_column: "A", sort_by_value: {value_index: 0}, sort_order: "DESCENDING"}], values=[{source_column: "E", summarize_function: "SUM"}]

  • Filtered: filters=[{source_column: "B", visible_values: ["Active"]}], rows=[{source_column: "A"}], values=[{source_column: "E", summarize_function: "SUM"}]

  • Percentage: values=[{source_column: "E", summarize_function: "SUM", calculated_display_type: "PERCENT_OF_GRAND_TOTAL"}]

gmail_list_messagesA

List messages from Gmail with optional search filters.

Args:

  • query (string, optional): Gmail search query (e.g., 'from:boss@company.com is:unread', 'subject:invoice after:2024/01/01')

  • max_results (number): Maximum messages to return, 1-100 (default: 10)

  • label_ids (string[]): Filter by labels like 'INBOX', 'UNREAD', 'STARRED', 'SENT'

  • page_token (string, optional): Token for pagination

  • response_format ('markdown' | 'json'): Output format (default: 'markdown')

Returns: List of message summaries with ID, subject, from, date, and snippet.

Examples:

  • Unread emails: query="is:unread"

  • From specific sender: query="from:notifications@github.com"

  • Recent with attachment: query="has:attachment newer_than:7d"

gmail_get_messageA

Get the full content of a specific Gmail message.

Args:

  • message_id (string): The message ID to retrieve

  • response_format ('markdown' | 'json'): Output format (default: 'markdown')

Returns: Full message content including headers and body text.

gmail_list_threadsA

List conversation threads from Gmail.

Args:

  • query (string, optional): Gmail search query to filter threads

  • max_results (number): Maximum threads to return, 1-100 (default: 10)

  • label_ids (string[]): Filter by labels

  • page_token (string, optional): Token for pagination

  • response_format ('markdown' | 'json'): Output format (default: 'markdown')

Returns: List of threads with message count and snippet.

gmail_get_threadA

Get all messages in a conversation thread.

Args:

  • thread_id (string): The thread ID to retrieve

  • response_format ('markdown' | 'json'): Output format (default: 'markdown')

Returns: All messages in the thread with full content.

gmail_list_labelsA

List all labels (folders) in Gmail.

Args:

  • response_format ('markdown' | 'json'): Output format (default: 'markdown')

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:

  • to (string[]): Array of recipient email addresses (required)

  • subject (string): Email subject line

  • body (string): Email body content (plain text or HTML depending on content_type)

  • content_type (string, optional): MIME content type - "text/plain" (default) or "text/html"

  • cc (string[], optional): Array of CC recipient email addresses

  • bcc (string[], optional): Array of BCC recipient email addresses

  • reply_to_message_id (string, optional): Message ID to reply to (for creating reply drafts)

Returns: { "draftId": string, "messageId": string, "threadId": string }

Examples:

  • Simple draft: to=["bob@example.com"], subject="Hello", body="Hi Bob!"

  • Reply draft: to=["bob@example.com"], subject="Re: Meeting", body="Sounds good!", reply_to_message_id="abc123"

gmail_list_attachmentsA

List all attachments in a specific Gmail message.

Args:

  • message_id (string): The ID of the message to list attachments from

  • response_format ('markdown' | 'json'): Output format (default: 'markdown')

Returns: { "attachments": [ { "attachmentId": string, "filename": string, "mimeType": string, "size": number } ] }

gmail_get_attachmentA

Download an attachment from a Gmail message.

Args:

  • message_id (string): The ID of the message containing the attachment

  • attachment_id (string): The ID of the attachment to download (from gmail_list_attachments)

  • filename (string, optional): Filename for the attachment (for display purposes)

Returns: The attachment content. For images, returns the image directly. For other files, provides download info.

Examples:

  • Download attachment: message_id="abc123", attachment_id="xyz789"

calendar_list_calendarsA

List all calendars accessible to the user.

Args:

  • response_format ('markdown' | 'json'): Output format (default: 'markdown')

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:

  • calendar_id (string): Calendar ID (default: 'primary' for main calendar)

  • time_min (string, optional): Start of time range in ISO 8601 format (e.g., '2024-01-01T00:00:00Z')

  • time_max (string, optional): End of time range in ISO 8601 format

  • max_results (number): Maximum events to return, 1-250 (default: 10)

  • query (string, optional): Free text search to filter events

  • single_events (boolean): Expand recurring events into instances (default: true)

  • order_by ('startTime' | 'updated'): Sort order (default: 'startTime')

  • page_token (string, optional): Token for pagination

  • response_format ('markdown' | 'json'): Output format (default: 'markdown')

Returns: List of events with title, time, location, and attendees.

Examples:

  • Today's events: time_min="2024-01-15T00:00:00Z", time_max="2024-01-16T00:00:00Z"

  • Search meetings: query="standup"

  • Next 7 days: time_min=(now), time_max=(now + 7 days)

calendar_get_eventA

Get detailed information about a specific calendar event.

Args:

  • calendar_id (string): Calendar ID (default: 'primary')

  • event_id (string): The event ID to retrieve

  • response_format ('markdown' | 'json'): Output format (default: 'markdown')

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:

  • time_min (string): Start of the time range (ISO 8601 format, e.g., '2024-01-15T00:00:00Z')

  • time_max (string): End of the time range (ISO 8601 format, e.g., '2024-01-22T00:00:00Z')

  • calendar_ids (string[]): Array of calendar IDs or email addresses to check (e.g., ['primary', 'colleague@company.com'])

  • response_format ('markdown' | 'json'): Output format (default: 'markdown')

Returns: For each calendar, a list of busy time blocks within the range.

Requirements for checking other people's calendars:

  • Same Google Workspace organization, OR

  • They have shared their calendar with you, OR

  • Their calendar is public

Examples:

  • Check your availability: calendar_ids=["primary"], time_min="2024-01-15T09:00:00Z", time_max="2024-01-15T18:00:00Z"

  • Check team availability: calendar_ids=["alice@company.com", "bob@company.com"]

Prompts

Interactive templates invoked by user choice

NameDescription

No prompts

Resources

Contextual data attached and managed by the client

NameDescription

No resources

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/EveryInc/google-workspace-mcp-server'

If you have feedback or need assistance with the MCP directory API, please join our Discord server