Gmail, Drive, Calendar, Docs, Sheets and six more Google apps behind one server.
- Started in our test
- ★ 3.4K GitHub stars
- 81.7K downloads a week
- Last commit 25 Oct 2026
At a glance
Taylor Wilsdon's server is the most complete community option for Google's apps. It covers Gmail, Drive, Calendar, Docs, Sheets, Slides, Forms, Tasks, Contacts, Chat, Apps Script and Programmable Search, with well over a hundred tools in total. You sign in with an OAuth client from your own Google Cloud project, so tokens and scopes stay under your control and nothing is sent anywhere except Google's APIs.
Because loading every tool would swamp the context window, it ships in three tiers: core for everyday reading and writing, extended for management jobs, and complete for everything. You can also name the services you want, switch on a read-only mode, or run it as a shared HTTP server with per-user OAuth 2.1 for a whole team.
- Made by
- Taylor Wilsdon and contributors (taylorwilsdon/google_workspace_mcp)
- Licence
- MIT
- Latest version
- 2.2.1 (26 Oct 2026)
- PyPI package
- workspace-mcp
- GitHub stars
- 3.4K
- Downloads
- 81.7K a week
- Last commit
- 25 Oct 2026
- Tools
- 43
- Runs on
- Your computer
Our check: We ran this exact config on 27 Oct 2026: it started and answered with 43 tools. The server is workspace-mcp on PyPI. Its author warns that "workspace-cli" on PyPI is an abandoned package by someone else; the real CLI comes with this repository.
What's in the pod: its tools
We found 43 tools when we started it on 27 Oct 2026. 23 only read. The rest can change things, so keep your app's "ask before each tool call" setting on for them.
Runs commands3 tools · Can start programs or run code.
| Tool | What it is for |
|---|---|
manage_script_content | Replaces or merges the source files of an Apps Script project. |
manage_script_project | Creates or deletes an Apps Script project. |
run_script_function | Runs a function in a deployed Apps Script project. |
Changes things17 tools · Can create, edit, send or delete.
| Tool | What it is for |
|---|---|
create_doc | Creates a Google Doc with optional plain-text content. |
create_drive_file | Creates a file in Drive from text, base64 data or a URL. |
create_drive_folder | Creates a folder in Drive. |
create_form | Creates a Google Form. |
create_presentation | Creates a Slides presentation. |
create_reaction | Adds an emoji reaction to a Chat message. |
create_spreadsheet | Creates a spreadsheet. |
import_to_google_doc | Turns a Markdown, Word, HTML or text file into a native Google Doc. |
import_to_google_sheets | Turns an Excel, ODS or CSV file into Google Sheets. |
import_to_google_slides | Turns a PowerPoint or ODP file into Google Slides. |
manage_contact | Creates, updates or deletes a contact. |
manage_event | Creates, updates or deletes an event, or answers an invitation. |
manage_task | Creates, updates, deletes or moves a task. |
modify_doc_text | Inserts, replaces or formats text in a Doc. |
modify_sheet_values | Writes, updates or clears the values in a range. |
send_gmail_message | Sends, replies to or forwards an email, with attachments if needed. |
send_message | Posts to a Google Chat space, or edits a message you sent. |
Only reads23 tools · Looks things up and changes nothing.
| Tool | What it is for |
|---|---|
generate_trigger_code | Writes the Apps Script code you need to set up a time or event trigger, since the API cannot create one itself. |
get_contact | Returns the details of one contact. |
get_doc_content | Reads a Google Doc, or the text of a Word file stored in Drive. |
get_drive_file_content | Reads a Drive file as text: Docs, Sheets and Slides are exported, Office files are unpacked. |
get_drive_file_download_url | Downloads a Drive file, returning a local path or a temporary link. |
get_drive_shareable_link | Returns the sharing link of a file or folder. |
get_events | Fetches one event or the events in a time range, optionally matching a keyword. |
get_form | Reads a form's questions and settings. |
get_gmail_message_content | Reads one email: sender, recipients, subject and body. |
get_gmail_messages_content_batch | Reads up to 25 emails in one call. |
get_messages | Reads recent messages in a Google Chat space. |
get_presentation | Reads a presentation's slides, and speaker notes if asked. |
get_script_project | Reads an Apps Script project and its source files. |
get_task | Returns one task. |
list_calendars | Lists the calendars you can see. |
list_contacts | Lists your Google contacts. |
list_tasks | Lists the tasks in a Google Tasks list. |
read_sheet_values | Reads the values in a range of a spreadsheet. |
search_contacts | Finds contacts by name, email, phone number or other fields. |
search_custom | Runs a Google Programmable Search (Custom Search) query. |
search_drive_files | Searches Drive, including shared drives, for files and folders. |
search_gmail_messages | Searches Gmail with the usual search operators and returns message and thread IDs. |
search_messages | Searches Google Chat messages by text or time. |
Tool groups
--tool-tier core- The everyday set listed above: 43 tools across all twelve services.
--tool-tier extended- Adds management operations on top of core.
--tool-tier complete- Every tool, well over a hundred. Expect a large context cost.
--tools- Loads only the services you name, such as gmail drive calendar.
Grouped and described by us. The README on GitHub lists the inputs each tool takes.
How clearly it describes its tools to your assistant
- Tools with a description
- 43 of 43
- Say if they change things
- 43 of 43
- Context it takes, at least
- ~4,800 tokens
Every tool says whether it only reads or can change things, so a client can ask before the risky ones.
From the tool list it sent us. The token figure counts names, descriptions and input names; the full schemas your client loads add more.
Set it up
Pick your app for the exact snippet and where it goes.
Where it goes: claude_desktop_config.json (Settings → Developer → Edit Config)
{
"mcpServers": {
"google-workspace": {
"command": "uvx",
"args": [
"workspace-mcp",
"--tool-tier",
"core"
],
"env": {
"GOOGLE_OAUTH_CLIENT_ID": "YOUR_CLIENT_ID",
"GOOGLE_OAUTH_CLIENT_SECRET": "YOUR_CLIENT_SECRET"
}
}
}
}Where it goes: Your terminal, in the project folder
claude mcp add-json google-workspace '{"command":"uvx","args":["workspace-mcp","--tool-tier","core"],"env":{"GOOGLE_OAUTH_CLIENT_ID":"YOUR_CLIENT_ID","GOOGLE_OAUTH_CLIENT_SECRET":"YOUR_CLIENT_SECRET"}}'Where it goes: ~/.cursor/mcp.json, or .cursor/mcp.json in a project
{
"mcpServers": {
"google-workspace": {
"command": "uvx",
"args": [
"workspace-mcp",
"--tool-tier",
"core"
],
"env": {
"GOOGLE_OAUTH_CLIENT_ID": "YOUR_CLIENT_ID",
"GOOGLE_OAUTH_CLIENT_SECRET": "YOUR_CLIENT_SECRET"
}
}
}
}Where it goes: .vscode/mcp.json in your project
{
"servers": {
"google-workspace": {
"type": "stdio",
"command": "uvx",
"args": [
"workspace-mcp",
"--tool-tier",
"core"
],
"env": {
"GOOGLE_OAUTH_CLIENT_ID": "YOUR_CLIENT_ID",
"GOOGLE_OAUTH_CLIENT_SECRET": "YOUR_CLIENT_SECRET"
}
}
}
}Where it goes: ~/.codeium/windsurf/mcp_config.json
{
"mcpServers": {
"google-workspace": {
"command": "uvx",
"args": [
"workspace-mcp",
"--tool-tier",
"core"
],
"env": {
"GOOGLE_OAUTH_CLIENT_ID": "YOUR_CLIENT_ID",
"GOOGLE_OAUTH_CLIENT_SECRET": "YOUR_CLIENT_SECRET"
}
}
}
}Where it goes: Not supported
ChatGPT only connects to remote servers by URL. This one runs on your computer, so use Claude, Cursor or VS Code.
Add "--read-only" to keep it from sending or changing anything, or "--tools gmail drive calendar" to load only some services. To add it to Claude as a custom connector, run it with "--transport streamable-http" and MCP_ENABLE_OAUTH21=true and connect to http://localhost:8000/mcp.
New to this? See the setup guides for Claude Code, Cursor, Claude Desktop and ChatGPT.
Settings
Names are exactly as the project spells them. Required ones are marked.
| Setting | What it does |
|---|---|
GOOGLE_OAUTH_CLIENT_IDEnvironment variable · required | The OAuth client ID from your Google Cloud project.1234-abc.apps.googleusercontent.com |
GOOGLE_OAUTH_CLIENT_SECRETEnvironment variable · required | The secret for that OAuth client. GOOGLE_CLIENT_SECRET_PATH can point at a client_secret.json instead. |
--tool-tierCommand line flag | Which tier of tools to load: core, extended or complete.--tool-tier core |
--read-onlyCommand line flag | Loads only the tools that read, so nothing can be sent, edited or deleted. |
--transportCommand line flag | Runs as an HTTP server instead of stdio. Needed for OAuth 2.1, Claude connectors and shared team use.--transport streamable-http |
MCP_ENABLE_OAUTH21Environment variable | Turns on multi-user OAuth 2.1 sign-in in HTTP mode.true |
WORKSPACE_MCP_PORTEnvironment variable | The port for HTTP mode.8000 |
ALLOWED_FILE_DIRSEnvironment variable | Folders the server may read local files from for uploads. By default only its own attachment folder; .env files and ~/.ssh and ~/.aws are always blocked. |
What it can touch
It can read
- Gmail messages
- Drive files and Docs, Sheets and Slides
- Calendars, contacts, tasks, forms and Chat spaces
It can change
- Sends email and Chat messages
- Creates and edits Docs, Sheets, Slides, Forms and Drive files
- Creates, changes and deletes calendar events, contacts and tasks
- Runs Apps Script functions
Safer setup: Start it with --read-only, and load only the services you need with --tools. Emails and documents can carry hidden instructions, so be careful about which write tools you leave on.
Before you start
- A Google Cloud project with the APIs you plan to use switched on
- An OAuth client ID and secret from that project
- uv, for uvx
If it does not work
- Google says the API has not been used in this project
- Enable the API for each service you use (Gmail, Drive, Calendar and so on) in the Google Cloud project that owns your OAuth client.
- Sign-in fails with a redirect URI error
- The redirect address must be one your OAuth client allows. The server uses http://localhost:8000/oauth2callback by default; add it in the Cloud console or set GOOGLE_OAUTH_REDIRECT_URI to match.
- The client only sees a few tools
- That is the core tier. Use --tool-tier extended or complete, or add services with --tools.
- Google Chat tools fail
- Chat needs a Google Workspace account and a Chat app set up once in the Cloud console.
- uvx workspace-cli installs something odd
- That name on PyPI belongs to an abandoned package. The project's CLI is installed from the repository with uv tool install.
Peas in a pod: similar servers
How Google Workspace MCP lines up against other knowledge and work apps servers on the shelf.
| Server | Tools | Runs on | Licence | Stars |
|---|---|---|---|---|
| Google Workspace MCP | 43 | Your computer | MIT | 3.4K |
| 12306 MCP | 8 | Your computer | MIT | 2.4K |
| Notion | 24 | Your computer or hosted | MIT | 4.7K |
| MCP Atlassian (Jira and Confluence) | 98 | Your computer | – | 6K |
| Basic Memory | 27 | Your computer | AGPL-3.0-or-later | 4.4K |
Questions
Does it work with a free Gmail account?
Yes. Personal Google accounts work, apart from Google Chat, which needs Workspace.
Where does my data go?
Only to Google's APIs, with your own OAuth client. The project says it has no telemetry or licence server.
Is it made by Google?
No. It is an independent open source project under the MIT licence.
Can a whole team share one server?
Yes. In HTTP mode with OAuth 2.1 each person signs in with their own Google account.
Something wrong on this page? Tell us.
