google-workspace-mcp
Provides tools for sending and reading emails, managing labels and filters, handling drafts, attachments, and vacation responders.
Provides tools for creating, reading, and editing Google Docs, including text insertion, formatting, tables, images, and bullet lists.
Provides tools for creating and managing meeting spaces, retrieving artifacts like recordings and transcripts, and listing participants.
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 Search my Gmail for emails from John last week"
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
Your own MCP server for full Google Workspace access from Claude Desktop or Claude Code.
Gmail (send + read) · Drive · Calendar · Docs · Sheets · Slides · Forms · Tasks · Contacts
Built with FastMCP. Uses your own Google Cloud OAuth credentials. You own everything.
Setup
1. Google Cloud Console (you do this in your browser)
Go to https://console.cloud.google.com → Create a new project
Enable these APIs (APIs & Services → Library):
Gmail, Calendar, Drive, Docs, Sheets, Slides, Forms, Tasks, People, Google Meet
Set up OAuth consent screen (APIs & Services → OAuth consent screen):
Choose External, add your email as test user
Add all workspace scopes
Create OAuth credentials (APIs & Services → Credentials → Create → OAuth Client ID → Desktop Application)
Copy the Client ID and Client Secret
2. Install & Run
# Set your credentials
export GOOGLE_OAUTH_CLIENT_ID="your-client-id-here"
export GOOGLE_OAUTH_CLIENT_SECRET="your-client-secret-here"
# Run with uv (no install needed)
cd google-workspace-mcp
uv run server.py3. Connect to Claude Desktop
Edit ~/Library/Application Support/Claude/claude_desktop_config.json:
{
"mcpServers": {
"google_workspace": {
"command": "uv",
"args": ["run", "--directory", "/path/to/google-workspace-mcp", "server.py"],
"env": {
"GOOGLE_OAUTH_CLIENT_ID": "your-client-id",
"GOOGLE_OAUTH_CLIENT_SECRET": "your-client-secret"
}
}
}
}4. Connect to Claude Code
claude mcp add google_workspace -- uv run --directory /path/to/google-workspace-mcp server.py5. First authentication
First time you use any tool, a browser window opens for Google OAuth. Sign in, approve the permissions, done. Token is saved to ~/.gw-mcp/token.json and auto-refreshes.
Related MCP server: mcp-google-workspace
Tools (108 total)
Gmail (18)
gmail_search— search with Gmail query syntaxgmail_read_message— read full message contentgmail_read_thread— read all messages in a threadgmail_send— send emails (plain text or HTML, CC/BCC, threading)gmail_draft— create draftsgmail_send_draft— send an existing draftgmail_list_labels— list all labelsgmail_create_label— create new labelsgmail_delete_label— delete labelsgmail_modify_labels— archive, mark read/unread, star, etcgmail_get_attachment— download attachmentsgmail_trash— move to trashgmail_untrash— restore from trashgmail_list_filters— list email filtersgmail_create_filter— create filter rulesgmail_delete_filter— delete filtersgmail_get_vacation— get vacation responder settingsgmail_set_vacation— set vacation responder
Calendar (8)
calendar_list_calendars— list all calendarscalendar_get_events— get events with time range and searchcalendar_create_event— create events with attendees + Google Meet linkscalendar_update_event— update existing eventscalendar_delete_event— delete eventscalendar_freebusy— query free/busy availabilitycalendar_list_recurring_instances— list instances of recurring eventscalendar_quick_add— create event from text string
Meet (7)
meet_create_space— create a meeting spacemeet_get_space— get meeting space by namemeet_list_participants— list participantsmeet_get_artifacts— get recordings, transcripts, and transcript entriesmeet_end_conference— end an active conferencemeet_list_conference_records— list past meetingsmeet_list_participant_sessions— list participant sessions
Drive (15)
drive_search— search filesdrive_read_file— read file content (Docs, Sheets, text files)drive_create_file— create files (plain text or Google Docs)drive_list_folder— list folder contentsdrive_share_file— share files with usersdrive_create_folder— create foldersdrive_copy_file— copy filesdrive_export— export to format (PDF, CSV, etc)drive_add_comment— add comments to filesdrive_list_comments— list file commentsdrive_list_revisions— list file version historydrive_list_permissions— list file permissionsdrive_delete_permission— revoke file accessdrive_trash— move to trashdrive_untrash— restore from trash
Docs (9)
docs_create— create new docsdocs_read— read doc contentdocs_insert_text— insert text at positiondocs_find_replace— find and replacedocs_append_text— append to enddocs_insert_table— insert tablesdocs_insert_image— insert imagesdocs_format_text— format text (bold, italic, color, font)docs_insert_bullets— insert bullet listsdocs_insert_page_break— insert page breaks
Sheets (12)
sheets_read— read cell rangessheets_write— write valuessheets_append— append rowssheets_create— create spreadsheetssheets_clear— clear rangessheets_get_info— get spreadsheet metadatasheets_batch_update— batch update cellssheets_add_sheet— add new sheet/tabsheets_delete_sheet— delete sheet/tabsheets_merge_cells— merge cellssheets_add_chart— add chartssheets_add_conditional_format— add conditional formattingsheets_add_named_range— add named ranges
Tasks (8)
tasks_list_tasklists— list task liststasks_list— list taskstasks_create— create tasks (with subtask support)tasks_update— update taskstasks_delete— delete taskstasks_create_tasklist— create task liststasks_move— move/reorder taskstasks_clear_completed— clear completed tasks
Contacts (11)
contacts_search— search by name/email/phonecontacts_list— list all contactscontacts_create— create contactscontacts_update— update contactscontacts_delete— delete contactscontacts_list_groups— list contact groupscontacts_create_group— create contact groupcontacts_modify_group_members— add/remove group memberscontacts_batch_create— batch create contactscontacts_batch_delete— batch delete contactscontacts_get_photo— get contact photo
Slides (10)
slides_create— create presentationsslides_read— read slide contentslides_add_slide— add slides with layoutsslides_add_text— add text to slidesslides_insert_shape— insert shapesslides_insert_image— insert imagesslides_insert_table— insert tablesslides_insert_video— insert videosslides_format_text— format textslides_get_thumbnail— get slide thumbnail
Forms (8)
forms_create— create formsforms_read— read form structureforms_list_responses— list form responsesforms_add_question— add questionsforms_update_question— update questionsforms_delete_question— delete questionsforms_move_question— reorder questionsforms_update_settings— update form settings
Build It Yourself Prompt
Want to rebuild this from scratch using Claude? Paste this into Claude Code Desktop:
Build me a Python MCP server using FastMCP at ~/Desktop/google-workspace-mcp/. It should give me full access to Google Workspace with these tools:
Gmail (18): search, read message, read thread, send (with CC/BCC, HTML, threading for replies), create draft, send draft, list labels, create label, delete label, modify labels (archive, star, mark read/unread), get attachment, trash, untrash, list filters, create filter, delete filter, get vacation responder, set vacation responder
Calendar (8): list calendars, get events (with time range + search), create event (with attendees, timezone, Google Meet link generation), update event, delete event, query free/busy, list recurring event instances, quick add from text string
Meet (7): create meeting space, get meeting space, list participants, get artifacts (recordings + transcripts), end active conference, list conference records, list participant sessions
Drive (15): search files, read file content (export Google Docs/Sheets/Slides to text), create file (plain text or Google Doc), list folder, share file, create folder, copy file, export to format, add comment, list comments, list revisions, list permissions, delete permission, trash, untrash
Docs (9): create, read, insert text at position, find and replace, append text, insert table, insert image, format text (bold/italic/color/font), insert bullet list, insert page break
Sheets (12): read ranges, write values, append rows, create spreadsheet, clear ranges, get spreadsheet metadata, batch update cells, add sheet/tab, delete sheet/tab, merge cells, add chart, add conditional formatting, add named range
Tasks (8): list task lists, list tasks, create task (with subtask support), update task, delete task, create task list, move/reorder task, clear completed tasks
Contacts (11): search by name/email/phone, list all, create, update, delete, list contact groups, create group, modify group members, batch create, batch delete, get contact photo
Slides (10): create presentation, read slide content, add slide with layout, add text to slide, insert shape, insert image, insert table, insert video, format text, get slide thumbnail
Forms (8): create form, read form structure, list responses, add question, update question, delete question, move/reorder question, update form settings
Requirements:
Separate file per service (tools_gmail.py, tools_calendar.py, tools_meet.py, tools_drive.py, tools_docs.py, tools_sheets.py, tools_tasks.py, tools_contacts.py, tools_slides.py, tools_forms.py) plus auth.py and server.py
auth.py handles Google OAuth2: reads GOOGLE_OAUTH_CLIENT_ID and GOOGLE_OAUTH_CLIENT_SECRET from env vars, opens browser on first use, saves token to ~/.gw-mcp/token.json, auto-refreshes
Use google-api-python-client and google-auth-oauthlib
pyproject.toml with uv, entry point gw-mcp = "server:main"
.gitignore for .venv, pycache, .env, token.json, credentials.json
README with setup instructions for Google Cloud Console, running with uv, and adding to Claude Desktop + Claude Code configs
Available Tools
108 toolscalendar_create_eventB
Create a calendar event. Use RFC3339 datetimes for timed events or YYYY-MM-DD for all-day. Set add_google_meet=True to auto-generate a Google Meet link.
Inputs: end (required), start (required), summary (required), location, +5 more. Returns: result
calendar_delete_eventC
Delete a calendar event.
Inputs: event_id (required), calendar_id. Returns: result
calendar_freebusyB
Query free/busy info for calendars. Returns busy time blocks.
Inputs: time_max (required), time_min (required), timezone, calendars. Returns: result
calendar_get_eventsA
Get calendar events. Filter by time range (RFC3339 format) and/or text search.
Inputs: query, time_max, time_min, calendar_id, +1 more. Returns: result
calendar_list_calendarsA
List all calendars the user has access to.
Inputs: no named parameters. Returns: result
calendar_list_recurring_instancesC
List instances of a recurring event.
Inputs: event_id (required), time_max, time_min, calendar_id, +1 more. Returns: result
calendar_quick_addB
Create an event from natural language (e.g. 'Lunch with John tomorrow at noon').
Inputs: text (required), calendar_id. Returns: result
calendar_update_eventB
Update an existing calendar event. Only provided fields are changed.
Inputs: event_id (required), end, start, summary, +4 more. Returns: result
contacts_batch_createB
Create multiple contacts at once. Each dict: {givenName, familyName, email, phone, organization, title}.
Inputs: contacts (required). Returns: result
contacts_batch_deleteB
Delete multiple contacts at once.
Inputs: resource_names (required). Returns: result
contacts_createC
Create a new contact with name, email, phone, organization, and title.
Inputs: given_name (required), email, phone, title, +2 more. Returns: result
contacts_create_groupB
Create a new contact group.
Inputs: name (required). Returns: result
contacts_deleteB
Delete a contact by resource name.
Inputs: resource_name (required). Returns: result
contacts_get_photoA
Get the photo URL for a contact.
Inputs: resource_name (required). Returns: result
contacts_listC
List all contacts sorted by last name.
Inputs: max_results. Returns: result
contacts_list_groupsB
List all contact groups (labels).
Inputs: max_results. Returns: result
contacts_modify_group_membersB
Add or remove contacts from a contact group.
Inputs: group_resource_name (required), add_contacts, remove_contacts. Returns: result
contacts_searchB
Search contacts by name, email, or phone number.
Inputs: query (required), max_results. Returns: result
contacts_updateA
Update a contact. Resource name from contacts_search/contacts_list (e.g. 'people/c123').
Inputs: resource_name (required), email, phone, title, +3 more. Returns: result
docs_append_textC
Append text to the end of a Google Doc.
Inputs: text (required), document_id (required). Returns: result
docs_createA
Create a new Google Doc with optional initial text content.
Inputs: title (required), body_text. Returns: result
docs_find_replaceB
Find and replace text in a Google Doc.
Inputs: find_text (required), document_id (required), replace_text (required), match_case. Returns: result
docs_format_textB
Apply formatting (bold, italic, underline, font size, color) to a text range in a Google Doc.
Inputs: end_index (required), document_id (required), start_index (required), bold, +5 more. Returns: result
docs_insert_bulletsC
Apply bullet or numbered list formatting to paragraphs in a Google Doc.
Inputs: end_index (required), document_id (required), start_index (required), bullet_type. Returns: result
docs_insert_imageB
Insert an image into a Google Doc from a URL.
Inputs: image_uri (required), document_id (required), index, width_pt, +1 more. Returns: result
docs_insert_page_breakC
Insert a page break in a Google Doc.
Inputs: index (required), document_id (required). Returns: result
docs_insert_tableB
Insert a table into a Google Doc.
Inputs: rows (required), columns (required), document_id (required), index. Returns: result
docs_insert_textA
Insert text at a specific position in a Google Doc. Index 1 = beginning.
Inputs: text (required), document_id (required), index. Returns: result
docs_readA
Read the full text content of a Google Doc.
Inputs: document_id (required). Returns: result
drive_add_commentC
Add a comment to a Drive file.
Inputs: content (required), file_id (required). Returns: result
drive_copy_fileC
Copy a file in Google Drive.
Inputs: file_id (required), name, folder_id. Returns: result
drive_create_fileC
Create a new file in Drive. Set as_google_doc=True to create a Google Doc.
Inputs: name (required), content, folder_id, mime_type, +1 more. Returns: result
drive_create_folderC
Create a folder in Google Drive.
Inputs: name (required), parent_id. Returns: result
drive_delete_permissionB
Remove a sharing permission from a file.
Inputs: file_id (required), permission_id (required). Returns: result
drive_exportA
Export a Google Workspace file to a format (PDF, DOCX, CSV, XLSX, PPTX, PNG, etc).
Inputs: file_id (required), mime_type (required). Returns: result
drive_list_commentsB
List comments on a Drive file.
Inputs: file_id (required), max_results. Returns: result
drive_list_folderB
List contents of a Drive folder.
Inputs: folder_id, max_results. Returns: result
drive_list_permissionsB
List sharing permissions on a file.
Inputs: file_id (required). Returns: result
drive_list_revisionsB
List file revisions (version history).
Inputs: file_id (required). Returns: result
drive_read_fileA
Read the text content of a Drive file (Google Docs/Sheets/Slides exported, or raw text files).
Inputs: file_id (required). Returns: result
drive_searchA
Search Google Drive files. Uses Drive query syntax: 'name contains "report"', 'mimeType="application/pdf"', etc.
Inputs: query, max_results. Returns: result
drive_trashA
Move a file to the trash.
Inputs: file_id (required). Returns: result
drive_untrashC
Restore a file from the trash.
Inputs: file_id (required). Returns: result
forms_add_questionC
Add a question to a form. Types: TEXT, PARAGRAPH, RADIO, CHECKBOX, DROP_DOWN, SCALE.
Inputs: title (required), form_id (required), index, options, +3 more. Returns: result
forms_createB
Create a new Google Form.
Inputs: title (required), description. Returns: result
forms_delete_questionC
Delete a question from a form by its 0-based index.
Inputs: form_id (required), item_index (required). Returns: result
forms_list_responsesC
List all responses submitted to a Google Form.
Inputs: form_id (required), max_results. Returns: result
forms_move_questionB
Move/reorder a question in a form.
Inputs: form_id (required), to_index (required), from_index (required). Returns: result
forms_readB
Read a form's structure, questions, and settings.
Inputs: form_id (required). Returns: result
forms_update_questionC
Update an existing question in a form.
Inputs: form_id (required), item_index (required), title, required. Returns: result
forms_update_settingsB
Update form settings (make it a quiz, change description).
Inputs: form_id (required), is_quiz, description. Returns: result
gmail_create_filterB
Create a Gmail filter. criteria: {from, to, subject, query, hasAttachment}. action: {addLabelIds, removeLabelIds, forward}.
Inputs: action (required), criteria (required). Returns: result
gmail_create_labelC
Create a new Gmail label.
Inputs: name (required). Returns: result
gmail_delete_filterC
Delete a Gmail filter.
Inputs: filter_id (required). Returns: result
gmail_delete_labelC
Delete a Gmail label.
Inputs: label_id (required). Returns: result
gmail_draftA
Create a Gmail draft. All fields are optional for work-in-progress drafts.
Inputs: cc, to, bcc, body, +3 more. Returns: result
gmail_get_attachmentB
Download a Gmail attachment and return its base64 data.
Inputs: message_id (required), attachment_id (required). Returns: result
gmail_get_vacationA
Get current Gmail vacation/auto-reply settings.
Inputs: no named parameters. Returns: result
gmail_list_filtersA
List all Gmail filters.
Inputs: no named parameters. Returns: result
gmail_list_labelsA
List all Gmail labels (system and user-created).
Inputs: no named parameters. Returns: result
gmail_modify_labelsA
Modify labels on a message. Use to archive (remove INBOX), mark read (remove UNREAD), star (add STARRED), etc.
Inputs: message_id (required), add_labels, remove_labels. Returns: result
gmail_read_messageB
Read the full content of a Gmail message by its ID.
Inputs: message_id (required). Returns: result
gmail_read_threadA
Read all messages in a Gmail thread by its thread ID.
Inputs: thread_id (required). Returns: result
gmail_searchA
Search Gmail messages. Uses Gmail query syntax: 'is:unread', 'from:user@example.com', 'subject:meeting has:attachment', 'after:2026/01/01', etc. Empty query returns recent messages.
Inputs: query, max_results. Returns: result
gmail_sendB
Send an email. Supports plain text and HTML, CC/BCC, and threading for replies.
Inputs: to (required), body (required), subject (required), cc, +4 more. Returns: result
gmail_send_draftB
Send an existing Gmail draft.
Inputs: draft_id (required). Returns: result
gmail_set_vacationC
Set Gmail vacation/auto-reply responder.
Inputs: enable (required), body, html, subject, +4 more. Returns: result
gmail_trashB
Move a Gmail message to the trash.
Inputs: message_id (required). Returns: result
gmail_untrashB
Remove a Gmail message from the trash.
Inputs: message_id (required). Returns: result
meet_create_spaceA
Create a new Google Meet meeting space. Returns meeting URI and code.
Inputs: no named parameters. Returns: result
meet_end_conferenceB
End an active conference in a meeting space.
Inputs: space_name (required). Returns: result
meet_get_artifactsA
Get recordings, transcripts, and transcript entries for a conference record.
Inputs: conference_record_name (required). Returns: result
meet_get_spaceA
Get details about a Google Meet meeting space by its resource name (e.g. 'spaces/abc-defg-hij').
Inputs: space_name (required). Returns: result
meet_list_conference_recordsB
List past conference records (meeting history).
Inputs: max_results. Returns: result
meet_list_participantsA
List participants and their sessions for a conference record (e.g. 'conferenceRecords/abc-defg-hij').
Inputs: conference_record_name (required). Returns: result
meet_list_participant_sessionsB
List sessions for a specific participant in a conference.
Inputs: participant_name (required), conference_record_name (required). Returns: result
sheets_add_chartC
Add a chart. Types: BAR, LINE, AREA, COLUMN, SCATTER, COMBO, STEPPED_AREA.
Inputs: sheet_id (required), chart_type (required), data_range (required), spreadsheet_id (required), +1 more. Returns: result
sheets_add_conditional_formatC
Add conditional formatting. rule_type: NUMBER_GREATER, TEXT_CONTAINS, CUSTOM_FORMULA, BLANK, etc.
Inputs: values (required), end_col (required), end_row (required), sheet_id (required), +5 more. Returns: result
sheets_add_named_rangeC
Create a named range in a spreadsheet.
Inputs: name (required), end_col (required), end_row (required), sheet_id (required), +3 more. Returns: result
sheets_add_sheetB
Add a new sheet/tab to a spreadsheet.
Inputs: title (required), spreadsheet_id (required). Returns: result
sheets_appendB
Append rows to a Google Sheet after existing data.
Inputs: range (required), values (required), spreadsheet_id (required). Returns: result
sheets_batch_updateA
Write to multiple ranges in one request. data: [{"range": "A1", "values": [[...]]}].
Inputs: data (required), spreadsheet_id (required). Returns: result
sheets_clearB
Clear values from a range in a Google Sheet.
Inputs: range (required), spreadsheet_id (required). Returns: result
sheets_createA
Create a new Google Spreadsheet with optional custom sheet/tab names.
Inputs: title (required), sheet_names. Returns: result
sheets_delete_sheetA
Delete a sheet/tab (by numeric sheet ID, not name).
Inputs: sheet_id (required), spreadsheet_id (required). Returns: result
sheets_get_infoA
Get spreadsheet metadata — title, sheets/tabs, row and column counts.
Inputs: spreadsheet_id (required). Returns: result
sheets_merge_cellsB
Merge cells in a sheet. Indices are 0-based, end is exclusive.
Inputs: end_col (required), end_row (required), sheet_id (required), start_col (required), +3 more. Returns: result
sheets_readA
Read values from a Google Sheet. Use A1 notation for ranges (e.g. 'Sheet1!A1:D10').
Inputs: spreadsheet_id (required), range. Returns: result
sheets_writeC
Write values to a Google Sheet. Values is a 2D array like [['Name','Age'],['Alice',30]].
Inputs: range (required), values (required), spreadsheet_id (required). Returns: result
slides_add_slideB
Add a slide. Layouts: BLANK, CAPTION_ONLY, TITLE, TITLE_AND_BODY, TITLE_AND_TWO_COLUMNS.
Inputs: presentation_id (required), layout, insertion_index. Returns: result
slides_add_textA
Add text to a slide. Creates a new text box if shape_id is empty.
Inputs: text (required), slide_id (required), presentation_id (required), shape_id. Returns: result
slides_createC
Create a new Google Slides presentation.
Inputs: title (required). Returns: result
slides_format_textB
Format text within a shape on a slide (bold, italic, size, color).
Inputs: shape_id (required), end_index (required), start_index (required), presentation_id (required), +5 more. Returns: result
slides_get_thumbnailC
Get a thumbnail image URL for a slide.
Inputs: slide_id (required), presentation_id (required). Returns: result
slides_insert_imageC
Insert an image onto a slide from a URL.
Inputs: slide_id (required), image_url (required), presentation_id (required), x_pt, +3 more. Returns: result
slides_insert_shapeB
Insert a shape (RECTANGLE, ELLIPSE, TRIANGLE, STAR, ARROW_EAST, etc) onto a slide.
Inputs: slide_id (required), presentation_id (required), x_pt, y_pt, +3 more. Returns: result
slides_insert_tableC
Insert a table onto a slide.
Inputs: rows (required), columns (required), slide_id (required), presentation_id (required), +4 more. Returns: result
slides_insert_videoC
Insert a YouTube video onto a slide. video_id is the YouTube video ID.
Inputs: slide_id (required), video_id (required), presentation_id (required), x_pt, +3 more. Returns: result
slides_readB
Read a presentation's metadata and text content from all slides.
Inputs: presentation_id (required). Returns: result
tasks_clear_completedB
Clear all completed tasks from a task list.
Inputs: tasklist_id. Returns: result
tasks_createA
Create a new task. Set parent for subtasks. Due date in RFC3339 format.
Inputs: title (required), due, notes, parent, +1 more. Returns: result
tasks_create_tasklistB
Create a new task list.
Inputs: title (required). Returns: result
tasks_deleteC
Delete a task.
Inputs: task_id (required), tasklist_id. Returns: result
tasks_listB
List tasks in a task list. Use '@default' for the primary list.
Inputs: max_results, tasklist_id, show_completed. Returns: result
tasks_list_tasklistsA
List all Google Tasks task lists.
Inputs: no named parameters. Returns: result
tasks_moveA
Move/reorder a task. Set parent to make it a subtask, previous to position after another task.
Inputs: task_id (required), parent, previous, tasklist_id. Returns: result
tasks_updateC
Update a task. Status can be 'needsAction' or 'completed'.
Inputs: task_id (required), due, notes, title, +2 more. Returns: result
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 108 tools
Every tool follows a clear 'service_action' pattern and targets a distinct resource operation (e.g., Gmail search vs send vs draft). No overlapping tools exist; even within large services like Sheets, each action has a unique purpose.
All tools use snake_case with consistent Google-service prefixes (gmail_, drive_, docs_, sheets_, etc.) followed by a descriptive action verb. The naming is uniform and predictable across all 108 tools.
108 tools is an extreme count, far exceeding the 50+ threshold for 'extreme mismatch'. Even for a multi-service Google Workspace integration, this volume overwhelms agents and makes tool selection impractical.
Each service has broad CRUD/lifecycle coverage: Gmail covers send/read/labels/filters/vacation; Drive covers search/read/create/permissions/trash; Sheets covers read/write/format/charts; and Calendar covers events/freebusy/recurring. No obvious missing operations for typical workflows.
Related MCP Connectors
Hosted MCP server for your Gmail, Outlook and IMAP mail, with mailboxes and scopes set per agent.
MCP server connecting AI agents to 100+ apps (Gmail, Slack, Notion, GitHub) via one-click OAuth.
Hosted MCP server with managed OAuth for 15+ toolkits: Google Workspace, Fitbit, Oura, Kalshi, etc.
Permissioned access to Gmail, Drive and Calendar via the user's own Google account
Related MCP Servers
- AlicenseAqualityDmaintenanceMCP server for Google Workspace APIs - Docs, Sheets, Drive, Gmail, and Calendar. Enables reading, creating, and editing Google Docs and Sheets, managing comments, reading emails, and viewing calendar events.3422 npm17MIT
- 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
- AlicenseBqualityDmaintenanceComprehensive Google Workspace MCP server with Gmail, Drive, Calendar, and Contacts integration.2615 npmMIT
- FlicenseNot gradedqualityDmaintenanceEnables multi-user access to Google Workspace services (Gmail, Calendar, Docs, Sheets, Slides, Drive) via remote MCP with OAuth 2.1 authentication.-