gworkspace-mcp
Provides tools for composing and sending emails through Gmail's API, enabling email automation directly from conversation interfaces.
Enables management of Google Calendar events and scheduling through the Calendar API, though specific capabilities beyond scope listing aren't detailed.
Requires a Google Cloud project with specific APIs enabled for authentication and authorization to access Google Workspace services.
Provides tools for reading and editing Google Docs documents programmatically through the Docs API.
Offers tools for listing, searching, moving, and managing files and folders in Google Drive through the Drive API.
Provides comprehensive spreadsheet manipulation tools including reading/writing ranges, batch updates, formatting, protection, formulas, and dashboard creation through the Sheets API.
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., "@gworkspace-mcp add a new sheet named 'Q4 Results' to my budget spreadsheet"
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.
gworkspace-mcp
Model Context Protocol server for Google Workspace automation: Google Sheets, Apps Script, Drive, Docs, Gmail, and triggers. Built with FastMCP.
Designed to be used from Claude Code (or any MCP-compatible client) so you can edit Apps Script projects, manipulate spreadsheets, send emails and manage Drive files directly from a conversation.
Features
Apps Script (9 tools) — list, read, update, create, deploy and run Apps Script projects. Granular file edits so you don't have to rewrite entire scripts.
Sheets (10 tools) — read/write ranges, batch updates, formatting, protection, formulas, dashboards.
Drive (4 tools) — list, search, move and manage files.
Docs (1 tool) — read/edit Google Docs.
Gmail (3 tools) — compose and send email.
Triggers (3 tools) — manage Apps Script time-based and event triggers.
Connect (1 tool) — bind a local Apps Script project to a spreadsheet.
Related MCP server: Google Workspace MCP Server
Requirements
Python 3.10+
A Google Cloud project with the following APIs enabled:
Google Sheets API
Google Drive API
Apps Script API
Google Docs API
Gmail API
Google Calendar API
OAuth 2.0 Desktop credentials (
client_secret.json)
Installation
git clone https://github.com/LeooNic/gworkspace-mcp.git
cd gworkspace-mcp
pip install -e .Or with uv:
uv pip install -e .Google Cloud setup
Go to console.cloud.google.com and create a project.
Enable the APIs listed above under APIs & Services → Library.
Go to APIs & Services → OAuth consent screen, configure it as External, and add your Google account as a test user.
Go to APIs & Services → Credentials → Create Credentials → OAuth client ID, choose Desktop app, and download the JSON.
Make the credentials available to the server in one of these ways:
Place the JSON at
~/.secrets/gworkspace-mcp/client_secret.json, orSet
GOOGLE_CLIENT_SECRET_PATH=/full/path/to/client_secret.json, orSet
GOOGLE_OAUTH_CLIENT_IDandGOOGLE_OAUTH_CLIENT_SECRETas env vars.
The first time a tool runs, a browser window will open for OAuth consent. The resulting token is stored at ~/.secrets/gworkspace-mcp/token.json and refreshed automatically.
Register with Claude Code
Add this to your Claude Code settings.json (or ~/.claude.json):
{
"mcpServers": {
"gworkspace": {
"command": "gworkspace-mcp"
}
}
}If gworkspace-mcp is not on your PATH, use the absolute path to the executable created by pip install -e . (on Windows, typically C:\Users\<you>\AppData\Local\Programs\Python\Python3XX\Scripts\gworkspace-mcp.exe).
Alternative invocation without installing the entry point:
{
"mcpServers": {
"gworkspace": {
"command": "python",
"args": ["-m", "gworkspace_mcp.server"]
}
}
}OAuth scopes
The server requests the following scopes:
spreadsheets,drive,documents,calendarscript.projects,script.deployments,script.processes,script.metricsgmail.send,gmail.composeuserinfo.email,userinfo.profile
Security notes
Your
client_secret.jsonandtoken.jsonare personal — never commit them. The repo.gitignorealready excludes them.Tokens live under
~/.secrets/gworkspace-mcp/.The server runs locally; it does not expose any network endpoint.
License
MIT — see LICENSE.
Available Tools
31 toolsdrive_copyB
Copy a Drive file (spreadsheet, doc, etc). Returns the new file ID and URL.
Inputs: source (required), new_name (required), folder_id. Returns: Generic wrapper for non-object return types.
drive_create_spreadsheetB
Create a new Google Spreadsheet. Returns ID and URL.
Inputs: name (required), folder_id. Returns: Generic wrapper for non-object return types.
drive_moveC
Move a file to a different folder.
Inputs: file_url (required), dest_folder_id (required). Returns: Generic wrapper for non-object return types.
drive_searchB
Search Drive files. Uses Drive query syntax. Examples: "name contains 'report'", "mimeType='application/vnd.google-apps.spreadsheet'".
Inputs: query (required), page_size. Returns: Generic wrapper for non-object return types.
generate_docsB
Generate functional documentation for a spreadsheet project. Analyzes the spreadsheet structure, script functions, triggers, and manifest to produce a complete technical document.
Args: spreadsheet_url: Spreadsheet URL or ID script_url: Optional Apps Script URL or ID output: "sheet" writes a Documentacion tab in the spreadsheet, "text" returns the doc as text
Inputs: spreadsheet_url (required), script_url, output. Returns: Generic wrapper for non-object return types.
script_add_functionC
Add a new function to an existing file. Appends at the end.
Inputs: script_id (required), file_name (required), source (required). Returns: Generic wrapper for non-object return types.
script_create_fileC
Create a new .gs file in the script project.
Inputs: script_id (required), file_name (required), source. Returns: Generic wrapper for non-object return types.
script_delete_functionB
Delete a function from the script project.
Inputs: script_id (required), function_name (required). Returns: Generic wrapper for non-object return types.
script_edit_functionB
Replace a specific function's source code. Only that function is modified.
Inputs: script_id (required), function_name (required), new_source (required). Returns: Generic wrapper for non-object return types.
script_get_fileC
Get the full source code of a file in the script project.
Inputs: script_id (required), file_name (required). Returns: Generic wrapper for non-object return types.
script_get_functionB
Get the source code of a specific function by name.
Inputs: script_id (required), function_name (required). Returns: Generic wrapper for non-object return types.
script_list_functionsB
List all functions in a script project with their file, signature, and line numbers.
Inputs: script_id (required). Returns: Generic wrapper for non-object return types.
script_runB
Execute a function in a deployed script. Requires API Executable deployment.
Inputs: script_id (required), function_name (required), parameters. Returns: Generic wrapper for non-object return types.
script_update_fileB
Replace the entire content of a file in the script project.
Inputs: script_id (required), file_name (required), source (required). Returns: Generic wrapper for non-object return types.
send_emailB
Send an email via Gmail. Set html=True for HTML body. cc/bcc are comma-separated email addresses.
Inputs: to (required), subject (required), body (required), html, +2 more. Returns: Generic wrapper for non-object return types.
send_email_previewA
Preview an email without sending it. Returns the formatted message.
Inputs: to (required), subject (required), body (required), html. Returns: Generic wrapper for non-object return types.
send_html_emailC
Send an HTML email with optional plain-text fallback.
Inputs: to (required), subject (required), html_body (required), plain_fallback, +1 more. Returns: Generic wrapper for non-object return types.
sheets_add_tableB
Create a Google Sheets Table (the structured table feature, Ctrl+Alt+T). Converts a data range into a formal table with headers, banding, and filtering.
Inputs: spreadsheet (required), sheet_name (required), range_a1 (required), name. Returns: Generic wrapper for non-object return types.
sheets_add_validationC
Add data validation. validation_type: DROPDOWN, CHECKBOX, NUMBER, DATE. For DROPDOWN, pass values as list of options.
Inputs: spreadsheet (required), sheet_name (required), range_a1 (required), validation_type (required), +1 more. Returns: Generic wrapper for non-object return types.
sheets_appendC
Append rows to the end of a sheet.
Inputs: spreadsheet (required), range (required), values (required). Returns: Generic wrapper for non-object return types.
sheets_conditional_formatC
Add conditional formatting. rule_type: NUMBER_GREATER, NUMBER_LESS, NUMBER_EQ, TEXT_CONTAINS, TEXT_NOT_CONTAINS, CUSTOM_FORMULA. For CUSTOM_FORMULA, condition_value is the formula (e.g., '=A1>8').
Inputs: spreadsheet (required), sheet_name (required), range_a1 (required), rule_type (required), +2 more. Returns: Generic wrapper for non-object return types.
sheets_copy_sheetC
Copy a sheet from one spreadsheet to another.
Inputs: source_spreadsheet (required), sheet_name (required), dest_spreadsheet (required). Returns: Generic wrapper for non-object return types.
sheets_describeB
Get full structure of a spreadsheet: sheets, named ranges, protected ranges.
Inputs: spreadsheet (required). Returns: Generic wrapper for non-object return types.
sheets_formatC
Format a range. Colors as hex (#RRGGBB). h_align: LEFT/CENTER/RIGHT.
Inputs: spreadsheet (required), sheet_name (required), range_a1 (required), bold, +6 more. Returns: Generic wrapper for non-object return types.
sheets_protectC
Protect a sheet or range. If range_a1 is None, protects the entire sheet.
Inputs: spreadsheet (required), sheet_name (required), range_a1, description, +1 more. Returns: Generic wrapper for non-object return types.
sheets_readC
Read values from a sheet. Pass spreadsheet URL or ID.
Inputs: spreadsheet (required), range (required), render. Returns: Generic wrapper for non-object return types.
sheets_writeC
Write values to a sheet range. values is a 2D array.
Inputs: spreadsheet (required), range (required), values (required). Returns: Generic wrapper for non-object return types.
trigger_create_time_drivenB
Create a time-driven trigger via Apps Script execution. Generates and runs trigger setup code in the script.
Options:
every_minutes: 1, 5, 10, 15, 30
every_hours: 1, 2, 4, 6, 8, 12
day_of_week + hour: weekly trigger (MONDAY-SUNDAY, hour 0-23)
hour only: daily trigger at that hour
Inputs: script_id (required), function_name (required), every_minutes, every_hours, +2 more. Returns: Generic wrapper for non-object return types.
trigger_deleteA
Delete a trigger by ID. Use trigger_list to find IDs.
Inputs: script_id (required), trigger_id (required). Returns: Generic wrapper for non-object return types.
trigger_listB
List all triggers for a script project.
Inputs: script_id (required). Returns: Generic wrapper for non-object return types.
workspace_connectA
Connect to a Google Spreadsheet and discover everything about it.
Args: spreadsheet_url: Spreadsheet URL or ID script_url: Optional. The Apps Script URL or ID (from Extensions > Apps Script). Container-bound scripts don't appear in Drive API (Google limitation), so pass the script URL for full discovery. If omitted, only sheet structure is returned.
Returns: sheet structure, and if script_url is provided: all files with functions, triggers, and deployments.
Inputs: spreadsheet_url (required), script_url. Returns: Generic wrapper for non-object return types.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 31 tools
Most tools have distinct purposes, but some overlap exists. For example, send_email and send_html_email could be confused, and drive_copy/drive_move have similar file manipulation functions. However, clear descriptions help differentiate them.
Tool names follow a consistent snake_case pattern with clear verb_noun conventions. Drive tools use drive_ prefix, script tools use script_ prefix, sheets tools use sheets_ prefix, and email/trigger/workspace tools follow similar patterns. No mixing of conventions.
31 tools is excessive for a single MCP server. While the domain (Google Workspace automation) is broad, this feels like multiple servers combined. A more focused scope with 15-20 tools would be more manageable for agents.
The tool surface provides comprehensive coverage for Google Workspace automation. It includes full CRUD operations for Drive files, Sheets manipulation, Apps Script development, email sending, and trigger management. The workspace_connect tool provides excellent discovery capabilities.
Maintenance
Related MCP Connectors
MCP server connecting AI agents to 100+ apps (Gmail, Slack, Notion, GitHub) via one-click OAuth.
Hosted MCP server connecting AI assistants to 9,000+ apps and 40,000+ actions via Zapier.
MCP server for your apps' tools and custom tools, plus hosted AI agents and approval-gated workflows
One MCP server for the services your AI needs: memory, files, Microsoft 365, kanban and more.
Related MCP Servers
- FlicenseNot gradedqualityDmaintenanceAn MCP server that enables interaction with Google Sheets through natural language, allowing users to create, read, update, and manage spreadsheet data via the Google Sheets API v4.-
- AlicenseNot gradedqualityDmaintenanceA comprehensive MCP server integrating Google Docs, Sheets, Drive, Gmail, Calendar, and Apps Script APIs, featuring unique Apps Script support for AI-driven automation.10 npm8MIT
- 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
- AlicenseNot gradedqualityCmaintenanceMCP server for Google Sheets operations, enabling spreadsheet management including reading, writing, appending, creating, and searching sheets via natural language.MIT