MCP server exposing curated Google Workspace tools for Drive, Sheets, Calendar, Docs, Slides, Gmail, and Tasks via the gws CLI.
Copy the AI prompt to install this server into Claude Code, Cursor, or another agent โ or use 1-click editor setup below.
We ran the install command below but it didn't respond within our test window โ this can mean a slow first-time install rather than a real problem.
npx gws-mcp-server --services drive,sheets,calendar,docs,slides,gmail,tasksNo response to initialize.
This is an experimental automated check and can have false negatives โ missing environment variables, a slow cold install, etc. It doesnโt necessarily mean somethingโs wrong. Last checked 1mo ago.
๐ก Paste the JSON block into your client's configuration file under mcpServers, then restart the application.
Inspect callable tools, capabilities, and parameters exposed to AI agents by Gws MCP Server.
Google Workspace for AI agents: Gmail, Calendar, Drive, Sheets, Docs, Slides, and Tasks as a curated set of 49 Model Context Protocol tools, built on the official Google Workspace CLI (gws).
The gws CLI had a built-in MCP server that was removed in v0.8.0 because it exposed 200-400 tools โ causing context window bloat in MCP clients. This server takes a curated approach: you choose which Google services to expose, and only a focused set of high-value, narrowly scoped operations are registered as tools. Every tool declares all four MCP annotation hints โ readOnlyHint, destructiveHint, idempotentHint, openWorldHint โ so clients can reason about side effects, know which writes are safe to retry, and surface clearer consent prompts. This is the permissions leg of trust infrastructure for agents: a deliberately narrow tool surface, side effects declared on every tool, and no freestanding send tool โ the only outbound email an agent can trigger is calendar invite/update notifications, opt-in via sendUpdates and off by default.
gws CLI installed and authenticated (npm install -g @googleworkspace/cli && gws auth login)This server exposes no freestanding send tool โ gmail_drafts_create explicitly does not send, and the only outbound email an agent can trigger is calendar invite/update notifications via sendUpdates, which is enum-validated and defaults to none. The token gws auth login mints is broader than that.
gws auth login opens a scope picker listing nine scopes. The default grant is seven: full read-write drive, spreadsheets, gmail.modify (Google documents it as "Read, compose, and send emails"), calendar, documents, presentations, and tasks โ the same seven you get running non-interactively as DEFAULT_SCOPES.
The other two rows are Cloud Pub/Sub and Cloud Platform, and neither is part of the default grant โ gws auth login --help describes --full as "Request all scopes incl. pubsub + cloud-platform."
Which rows start checked has not been verified against a live picker โ the seven above are the documented default grant, not an observation of the TUI. Read the checkboxes before pressing Enter rather than trusting this paragraph.
So the token on disk can send mail and rewrite Drive even though nothing here will. Deselect what you do not need in the picker, or:
-s gmail limits the picker to Gmail, per the flag's own help text ("Comma-separated service names to limit scope picker"). It cannot pull in cloud-platform or pubsub, because those two are reachable only through --full.
On Linux there is no keyring, and the encryption key is a file next to the data it encrypts. gws enables the keyring crate's native backends only for macOS and Windows; on every other platform the dependency is declared with no backend feature, so the store falls through to writing .encryption_key into ~/.config/gws/. That file is not a backup of a key held elsewhere โ it is the key, and the credential store's own doc comment says it is never deleted. Setting GOOGLE_WORKSPACE_CLI_KEYRING_BACKEND=file changes nothing there because that is already the only path. On macOS and Windows the key file is removed once the OS keyring holds the key. If you run this headless on Linux, treat ~/.config/gws/ as a password file: anyone who can read the directory has the credentials.
.mcp.json)claude_desktop_config.json)| Flag | Description | Default |
|---|---|---|
--services, -s | Comma-separated list of services to expose | All services |
--gws-path | Path to the gws binary | gws |
--read-only | Register only the read-only tools | off |
--read-only--read-only registers 22 tools instead of 49. Every tool that writes to Google is left unregistered, so it never appears in tools/list and there is nothing for an agent to call โ including gmail_drafts_create, which is a write even though it never sends. drive_files_download stays, since it reads.
This constrains the agent, not the credential. The token on disk keeps whatever scopes it was granted, and anything else on the machine can still use it. gws auth login --readonly is what narrows the token; the two are complementary. For an MCP server the agent is the threat model, but that is the limit of the claim.
Every registered tool rides along in each conversation: the full registry is roughly 34 KB of tools/list payload (~8.7K tokens) that your MCP client loads before anything else happens. The two flags above compose, and dropping whole services you don't use is the cheapest context win there is:
In .mcp.json or claude_desktop_config.json, the same trimming is just editing the args array:
A service's tool count (headers below) tracks its context cost: dropping tasks (12 tools) saves the most, docs (3 tools) the least. There is no per-tool exclude flag today โ if service granularity is too coarse for your setup, open an issue describing the split you need.
drive (12 tools)drive_files_list โ Search and list filesdrive_files_get โ Get file metadatadrive_files_create โ Create files (with optional upload)drive_files_copy โ Copy files (useful for format conversion)drive_files_update โ Update file metadata/contentdrive_files_delete โ Delete filesdrive_files_export โ Export Google Workspace files (Doc, Sheet, Slide) to other formatsdrive_files_download โ Download file content (text inline, binary as base64 or saved to a path; Google-native files are exported to a readable format)drive_permissions_create โ Share filesdrive_permissions_list โ List all permissions on a file (audit sharing state, e.g. check for public access)drive_permissions_update โ Change an existing permission's role (e.g. reader to writer); downgrades remove capabilities. Ownership transfers are not supported.drive_permissions_delete โ Revoke a permission from a filesheets (5 tools)sheets_get โ Get spreadsheet metadatasheets_values_get โ Read cell valuessheets_values_update โ Write cell valuessheets_values_append โ Append rowssheets_batchUpdate โ Apply updates to a spreadsheet (conditional formatting, cell/border formatting, adding sheets, and more; delete requests are permanent)calendar (6 tools)calendar_events_list โ List eventscalendar_events_get โ Get event detailscalendar_events_insert โ Create events, optionally with attendees. sendUpdates controls invitation email (default none โ no email, though the event may still appear on attendees' calendars depending on their settings)calendar_events_update โ Update events (only supplied fields change โ except attendees, which replaces the whole list; omitted attendees are uninvited). Same sendUpdates support as insertcalendar_events_delete โ Delete eventscalendar_freebusy_query โ Query free/busy information for one or more calendars over a time rangedocs (3 tools)docs_get โ Get document contentdocs_create โ Create documentsdocs_batchUpdate โ Apply document updatesslides (5 tools)slides_get โ Get a presentation's slides, layouts, masters, and page elementsslides_create โ Create a blank presentationslides_batchUpdate โ Apply updates (insert/update/delete slides, text, shapes, tables, etc)slides_pages_get โ Get a single page (slide, layout, or master)slides_pages_getThumbnail โ Get a thumbnail image URL for a pageFactual signals from GitHub, npm, and our automated checks โ not a rating.
No reviews yet โ be the first to share how this listing worked for you.
Showcase your server listing on GitHub or your project documentation. Embed this dynamic SVG badge to highlight official listing status and live engagement.
[](https://allmcps.com/mcp/conorbronsdon-gws-mcp-server)<a href="https://allmcps.com/mcp/conorbronsdon-gws-mcp-server"><img src="https://allmcps.com/api/badge/conorbronsdon-gws-mcp-server?style=directory" alt="Gws MCP Server on AllMCPs" /></a>