google-workspace-mcp
MCP server providing full access to Google Workspace services (Gmail, Drive, Calendar, Docs, Sheets, Slides, Forms, Tasks, Contacts) using OAuth authentication.
README
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.py
3. 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.py
5. 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.
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
Recommended Servers
playwright-mcp
A Model Context Protocol server that enables LLMs to interact with web pages through structured accessibility snapshots without requiring vision models or screenshots.
Magic Component Platform (MCP)
An AI-powered tool that generates modern UI components from natural language descriptions, integrating with popular IDEs to streamline UI development workflow.
Audiense Insights MCP Server
Enables interaction with Audiense Insights accounts via the Model Context Protocol, facilitating the extraction and analysis of marketing insights and audience data including demographics, behavior, and influencer engagement.
VeyraX MCP
Single MCP tool to connect all your favorite tools: Gmail, Calendar and 40 more.
graphlit-mcp-server
The Model Context Protocol (MCP) Server enables integration between MCP clients and the Graphlit service. Ingest anything from Slack to Gmail to podcast feeds, in addition to web crawling, into a Graphlit project - and then retrieve relevant contents from the MCP client.
Kagi MCP Server
An MCP server that integrates Kagi search capabilities with Claude AI, enabling Claude to perform real-time web searches when answering questions that require up-to-date information.
E2B
Using MCP to run code via e2b.
Neon Database
MCP server for interacting with Neon Management API and databases
Exa Search
A Model Context Protocol (MCP) server lets AI assistants like Claude use the Exa AI Search API for web searches. This setup allows AI models to get real-time web information in a safe and controlled way.
Qdrant Server
This repository is an example of how to create a MCP server for Qdrant, a vector search engine.