Google Workspace (GWS) MCP Server
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| gws-path | No | Path to the gws binary. | gws |
| services | No | Comma-separated list of services to expose (e.g., drive,sheets,calendar,docs,gmail). Default is all services. |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": true
} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| drive_files_listB | List files in Google Drive. Supports search queries via the 'q' parameter. Shared drive files are included automatically. |
| drive_files_getA | Get a file's metadata by ID. Shared drive files are supported automatically. |
| drive_files_createA | Create a new file in Google Drive. Use with bodyParams for metadata and optionally upload a local file. |
| drive_files_copyA | Copy a file. Useful for converting formats (e.g. markdown to Google Doc). |
| drive_files_updateC | Update a file's metadata or content. |
| drive_files_deleteA | Permanently delete a file. |
| drive_files_exportA | Export a Google Workspace file (Doc, Sheet, Slide) to a specific format. Returns JSON with export metadata. Use drive_files_download for automatic export with content returned inline. |
| drive_permissions_createB | Share a file by creating a permission. |
| drive_permissions_listA | List all permissions on a file. Use to audit sharing state — e.g. a permission with type "anyone" means the file is publicly accessible; there is no separate is-public field. Pass fields (e.g. "permissions(id,type,role,emailAddress,domain)") to identify grantees — the default response omits emailAddress/domain. |
| drive_permissions_updateA | Change an existing permission's role on a file (e.g. reader to writer). Can remove capabilities by downgrading a role. Ownership transfers are not supported. Per the Drive API: concurrent permissions operations on the same file aren't supported, only the last update is applied. |
| drive_permissions_deleteA | Revoke a permission from a file, removing that user's/group's/domain's access. Per the Drive API: concurrent permissions operations on the same file aren't supported, only the last update is applied. |
| drive_comments_listB | List comments on a file. |
| drive_comments_getB | Get a single comment on a file. |
| drive_comments_createA | Add a comment to a file. Set anchor to bind it to an app-defined region — Drive stores this as an opaque JSON string you define yourself, and does not validate or interpret it. Google Workspace editor apps (Docs/Sheets/Slides) still display comments created this way as unanchored; use the Docs/Sheets/Slides APIs directly if visual anchoring in those editors matters. |
| drive_comments_updateA | Change the text of an existing comment. This overwrites the comment's content; the previous text is not retained. Only the comment's own author can update it — the API rejects the request otherwise. The resolved state can't be changed here: see drive_replies_create's action field. |
| drive_comments_deleteA | Permanently delete a comment. Only the comment's own author can delete it — the API rejects the request otherwise. |
| drive_replies_listB | List replies to a comment. |
| drive_replies_getA | Get a single reply to a comment. |
| drive_replies_createA | Add a reply to a comment, or resolve/reopen it — a comment can only be resolved or reopened by posting a reply with action set. content is required unless action is set; combine both to leave closing/reopening text. Setting action changes the parent comment's resolved field, but resolving is advisory only: the API keeps accepting further replies and doesn't hide anything itself, it's on the client to act on resolved being true (e.g. hide or dim the thread). |
| drive_replies_updateA | Change the text of an existing reply. This overwrites the reply's content; the previous text is not retained. Only the reply's own author can update it — the API rejects the request otherwise. Does not support changing action — use drive_replies_create to resolve/reopen. |
| drive_replies_deleteA | Permanently delete a reply. Only the reply's own author can delete it — the API rejects the request otherwise. |
| sheets_getB | Get spreadsheet metadata. |
| sheets_values_getB | Read values from a spreadsheet range. |
| sheets_values_updateC | Write values to a spreadsheet range. |
| sheets_values_appendA | Append values after the last row of a spreadsheet range. |
| sheets_batchUpdateA | Apply updates to a spreadsheet (conditional formatting, cell/border formatting, adding sheets, and more). Can also permanently delete content — e.g. removing a sheet or a conditional formatting rule — with no undo via the API. |
| calendar_events_listA | List events from a calendar. |
| calendar_events_getA | Get a single calendar event by ID. |
| calendar_events_insertB | Create a new calendar event. |
| calendar_events_updateA | Update an existing calendar event with patch semantics (only supplied fields change). |
| calendar_events_deleteB | Delete a calendar event. |
| calendar_freebusy_queryA | Query free/busy information for one or more calendars over a time range. |
| docs_getA | Get a Google Doc's content and metadata. |
| docs_createB | Create a new empty Google Doc. |
| docs_batchUpdateA | Apply updates to a Google Doc (insert, format, replace, or permanently delete content). |
| slides_getA | Get a presentation's slides, layouts, masters, and page elements. |
| slides_createA | Create a new blank presentation. |
| slides_batchUpdateA | Apply updates to a presentation (insert/update/delete slides, text, shapes, tables, etc). Delete requests in a batch are permanent — the API has no undo. |
| slides_pages_getA | Get a single page (slide, layout, or master) from a presentation. |
| slides_pages_getThumbnailB | Get a thumbnail image URL for a page (slide, layout, or master). |
| gmail_messages_listB | List Gmail messages matching a query. |
| gmail_messages_getA | Get a single Gmail message by ID. |
| gmail_threads_listB | List Gmail threads matching a query. |
| gmail_threads_getA | Get a full Gmail thread by ID (all messages in the conversation). |
| gmail_threads_modifyA | Modify a Gmail thread: add/remove labels. To archive, remove INBOX. To mark read, remove UNREAD. To star, add STARRED. |
| tasks_tasklists_listA | List the authenticated user's task lists. |
| tasks_tasklists_getA | Get a task list by ID. |
| tasks_tasklists_insertA | Create a new task list. |
| tasks_tasklists_updateA | Update a task list (only supplied fields change). |
| tasks_tasklists_deleteA | Delete a task list. If it contains assigned tasks, the originals (in Docs/Chat Spaces) are also removed. |
| tasks_tasks_listA | List tasks in a task list. Excludes hidden and assigned tasks by default; set showHidden/showAssigned to include them. |
| tasks_tasks_getA | Get a task by ID. |
| tasks_tasks_insertA | Create a new task. Use parent to nest as a subtask, previous to position after a sibling. |
| tasks_tasks_updateA | Update a task (only supplied fields change). Common use: complete a task by setting status to "completed". |
| tasks_tasks_moveA | Move a task within its list or to another list. Use parent/previous to set position; destinationTasklist to change list. |
| tasks_tasks_deleteA | Delete a task. If assigned from Docs/Chat Spaces, the original is also removed. |
| tasks_tasks_clearA | Hide all completed tasks in a list. Cleared tasks are not deleted but stop appearing in default list responses. |
| drive_files_downloadB | Download a file's content from Google Drive. Returns the text content for text files, or a base64-encoded string for binary files. For Google Docs/Sheets/Slides, exports to a readable format (plain text by default). |
| gmail_drafts_createA | Create a Gmail draft. Pass threadId to attach the draft to an existing conversation (it will appear as a reply within that thread). The draft is NOT sent — open Gmail to review and send. |
| drive_permissions_transferOwnershipA | Immediately transfer ownership of a file to another Google Workspace account in the SAME organization. The current owner is downgraded to writer as soon as this call succeeds — there is no separate acceptance step — and Google sends the new owner a notification email that cannot be disabled. Only works for files in "My Drive"; not supported for files in a shared drive, since the organization owns those, not an individual. For a transfer between personal/consumer Google accounts, use drive_permissions_proposeOwnershipTransfer instead, which requires the recipient's separate acceptance and does not transfer ownership immediately. Google Workspace ownership cannot be transferred to an account outside the organization. |
| drive_permissions_proposeOwnershipTransferA | Propose transferring ownership of a file between personal/consumer Google accounts (use drive_permissions_transferOwnership instead for a same-organization Workspace transfer, which completes immediately). Google Workspace ownership cannot be transferred to an account outside the organization. This does NOT transfer ownership by itself: it sets role=writer + pendingOwner=true, and the prospective owner must separately accept by setting role=owner + transferOwnership=true on their own permission, under their own credentials. Google sends the recipient a notification email that cannot be disabled; nothing changes for the current owner unless and until they accept. Only individual users can be proposed — not groups, domains, or service accounts (service accounts have no Drive storage quota and the transfer will fail). Ownership transfers are not supported for files in shared drives. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
TDQS
Scored across 61 tools
Tools are largely distinct by service and resource (drive_files_*, drive_permissions_*, sheets_values_*, etc.), with clear action suffixes. A few near-overlaps exist—drive_files_export vs. drive_files_download and the two ownership-transfer tools—but their descriptions explicitly differentiate them.
The naming scheme is predominantly service_prefix_resource_action (e.g. calendar_events_get, tasks_tasks_delete), which is predictable and coherent. Minor deviations like sheets_batchUpdate, slides_pages_getThumbnail, calendar_freebusy_query, and tasks_tasks_clear use different verb styles or camelCase, but the pattern remains easy to follow.
61 tools is a large surface, far beyond the typical well-scoped toolkit. However, the server covers seven distinct Google Workspace services (Drive, Docs, Sheets, Slides, Calendar, Gmail, Tasks), each with layered CRUD operations, so the count is heavy but arguably justified by the breadth.
The tool set covers core lifecycle operations for most included services: Drive files/permissions/comments, Sheets values and batch updates, Docs/Slides creation and mutation, Calendar events, and Tasks lists/tasks. Notable gaps exist—no Gmail send or label management, no direct delete for Docs/Sheets/Slides files beyond Drive—but agents can work around most of these via drafts, drive_files_delete, or batchUpdate.