Google Workspace MCP
Comprehensive Google Workspace MCP server for Gmail, Calendar, Docs, Sheets, Slides, Drive, Tasks, Forms, Chat, Contacts, Apps Script, and Custom Search
Score Breakdown
Server Info
- Package
- workspace-mcp
- Registry
- pypi
- Repository
- mcp-mirror/google-workspace-mcp
- Maintainer
- Community
- Category
- Communication
- Tags
- googleemailcalendardocs
- Last Scanned
- 7 Apr 2026
Findings
8 issuesAuthentication & Identity
LOWImplements MCP OAuth spec for per-user authentication
Supports both OAuth 2.0 (legacy) and OAuth 2.1 via FastMCP GoogleProvider with .well-known/oauth-authorization-server endpoint. Uses Streamable HTTP transport with Starlette/FastAPI. Also supports stdio mode with stored credentials. Has session middleware, encrypted token storage (Fernet), and support for Valkey/disk/memory storage backends.
Document the required OAuth scopes for each tool.
Tool Schema Quality
HIGHRequired fields missing on 1 write operations
Write tools without required field declarations: start_google_auth.
Add required arrays to all write/delete tool schemas.
MEDIUMOnly 0 of 109 schemas have parameter constraints
Most schemas lack maxLength, enum, or pattern constraints on string parameters.
Add constraints to string parameters, especially on write operations.
CRITICALDangerous execution surface: run_script_function
Tool allows raw code/query execution which could be exploited via prompt injection.
Use parameterized queries or validated command sets.
LLM Safety
HIGHTool descriptions contain instructional language
Descriptions include directives that could influence LLM behavior beyond tool selection.
Remove instructional language. Descriptions should be purely factual.
Data Exposure
MEDIUM4 list operations lack pagination
Gmail search has max_results parameter. List operations generally have pagination via page tokens. Calendar get_events supports time ranges. Drive list_drive_items and contacts list have page_size/max_results. Some list tools (list_gmail_labels, list_task_lists) return all results without pagination. Full records are returned without field selection.
Add limit/offset or cursor-based pagination.
LOWNo field selection on responses
Responses return full records rather than projected fields.
Implement field selection to return only relevant fields.
Maintenance & Trust
LOWCommunity-maintained by lachieglover (mcp-mirror)
No official vendor backing.
Seek vendor verification.
Tools
109 total| Name | Description | Risk |
|---|---|---|
| start_google_auth | Manually initiate Google OAuth authentication flow. NOTE: This is a legacy OAuth 2.0 tool and is disabled when OAuth 2.1 is enabled. | admin |
| search_gmail_messages | Search Gmail messages using Gmail query syntax | read |
| get_gmail_message_content | Get the content of a specific Gmail message | read |
| get_gmail_messages_content_batch | Get the content of multiple Gmail messages in batch | read |
| get_gmail_attachment_content | Get the content of a Gmail attachment | read |
| send_gmail_message | Send a Gmail message | write |
| draft_gmail_message | Draft a Gmail message | write |
| get_gmail_thread_content | Get the content of a Gmail thread | read |
| get_gmail_threads_content_batch | Get the content of multiple Gmail threads in batch | read |
| list_gmail_labels | List Gmail labels | read |
| manage_gmail_label | Manage Gmail labels (create, update, delete) | write |
| list_gmail_filters | List Gmail filters | read |
| manage_gmail_filter | Manage Gmail filters (create, delete) | write |
| modify_gmail_message_labels | Modify labels on a Gmail message | write |
| batch_modify_gmail_message_labels | Modify labels on multiple Gmail messages in batch | write |
| list_calendars | List all available calendars | read |
| get_events | Get calendar events | read |
| manage_event | Manage calendar events (create, update, delete) | write |
| query_freebusy | Query free/busy information for calendars | read |
| search_drive_files | Search for files in Google Drive | read |
| get_drive_file_content | Get the content of a Google Drive file | read |
| get_drive_file_download_url | Get a download URL for a Google Drive file | read |
| list_drive_items | List items in a Google Drive folder | read |
| create_drive_folder | Create a folder in Google Drive | write |
| create_drive_file | Create a file in Google Drive | write |
| import_to_google_doc | Import content to a Google Doc | write |
| get_drive_file_permissions | Get permissions for a Google Drive file | read |
| check_drive_file_public_access | Check if a Google Drive file has public access | read |
| update_drive_file | Update a Google Drive file | write |
| get_drive_shareable_link | Get a shareable link for a Google Drive file | read |
| manage_drive_access | Manage access permissions for a Google Drive file | admin |
| copy_drive_file | Copy a Google Drive file | write |
| set_drive_file_permissions | Set permissions on a Google Drive file | admin |
| search_docs | Search for Google Docs | read |
| get_doc_content | Get the content of a Google Doc | read |
| list_docs_in_folder | List Google Docs in a folder | read |
| create_doc | Create a new Google Doc | write |
| modify_doc_text | Modify text in a Google Doc | write |
| find_and_replace_doc | Find and replace text in a Google Doc | write |
| insert_doc_elements | Insert elements into a Google Doc | write |
| insert_doc_image | Insert an image into a Google Doc | write |
| update_doc_headers_footers | Update headers and footers in a Google Doc | write |
| batch_update_doc | Batch update a Google Doc with multiple operations | write |
| inspect_doc_structure | Inspect the structure of a Google Doc | read |
| debug_docs_runtime_info | Debug runtime info for Google Docs | read |
| create_table_with_data | Create a table with data in a Google Doc | write |
| debug_table_structure | Debug table structure in a Google Doc | read |
| export_doc_to_pdf | Export a Google Doc to PDF | read |
| update_paragraph_style | Update paragraph style in a Google Doc | write |
| get_doc_as_markdown | Get a Google Doc as Markdown | read |
| insert_doc_tab | Insert a tab in a Google Doc | write |
| delete_doc_tab | Delete a tab in a Google Doc | write |
| update_doc_tab | Update a tab in a Google Doc | write |
| list_spreadsheets | List spreadsheets in Google Sheets | read |
| get_spreadsheet_info | Get info about a spreadsheet | read |
| read_sheet_values | Read values from a spreadsheet | read |
| modify_sheet_values | Modify values in a spreadsheet | write |
| format_sheet_range | Format a range in a spreadsheet | write |
| manage_conditional_formatting | Manage conditional formatting in a spreadsheet | write |
| create_spreadsheet | Create a new spreadsheet | write |
| create_sheet | Create a new sheet in a spreadsheet | write |
| create_presentation | Create a new Google Slides presentation | write |
| get_presentation | Get a Google Slides presentation | read |
| batch_update_presentation | Batch update a Google Slides presentation | write |
| get_page | Get a specific page from a Google Slides presentation | read |
| get_page_thumbnail | Get a thumbnail of a Google Slides page | read |
| list_task_lists | List Google Tasks task lists | read |
| get_task_list | Get a specific task list | read |
| manage_task_list | Manage task lists (create, update, delete, clear completed) | write |
| list_tasks | List tasks in a task list | read |
| get_task | Get a specific task | read |
| manage_task | Manage tasks (create, update, delete, move) | write |
| create_form | Create a new Google Form | write |
| get_form | Get a Google Form | read |
| set_publish_settings | Set publish settings for a Google Form | write |
| get_form_response | Get a specific form response | read |
| list_form_responses | List form responses | read |
| batch_update_form | Batch update a Google Form | write |
| list_spaces | List Google Chat spaces | read |
| get_messages | Get messages from a Google Chat space | read |
| send_message | Send a message to a Google Chat space | write |
| search_messages | Search messages across Google Chat spaces | read |
| create_reaction | Create a reaction on a Google Chat message | write |
| download_chat_attachment | Download a Chat attachment | read |
| list_contacts | List Google Contacts | read |
| get_contact | Get a specific Google Contact | read |
| search_contacts | Search Google Contacts | read |
| manage_contact | Manage a Google Contact (create, update, delete) | write |
| list_contact_groups | List Google Contact groups | read |
| get_contact_group | Get a specific Google Contact group | read |
| manage_contacts_batch | Batch manage Google Contacts | write |
| manage_contact_group | Manage a Google Contact group (create, update, delete) | write |
| list_script_projects | List Apps Script projects | read |
| get_script_project | Get an Apps Script project | read |
| get_script_content | Get the content of an Apps Script project | read |
| create_script_project | Create an Apps Script project | write |
| update_script_content | Update the content of an Apps Script project | write |
| run_script_function | Run a function in an Apps Script project | admin |
| manage_deployment | Manage Apps Script deployments (create, update, delete) | admin |
| list_deployments | List Apps Script deployments | read |
| list_script_processes | List Apps Script processes | read |
| delete_script_project | Delete an Apps Script project | admin |
| list_versions | List versions of an Apps Script project | read |
| create_version | Create a version of an Apps Script project | write |
| get_version | Get a specific version of an Apps Script project | read |
| get_script_metrics | Get metrics for an Apps Script project | read |
| generate_trigger_code | Generate trigger code for an Apps Script project | read |
| search_custom | Search using Google Custom Search | read |
| get_search_engine_info | Get search engine info for Google Custom Search | read |
Deploy Google Workspace MCP securely
CompleteFlow adds per-user authentication, permission scoping, and audit logging to any MCP server out of the box.
Deploy on CompleteFlow