Google Workspace MCP
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| GWS_BIN | No | Path to the Google Workspace CLI (gws) binary. Use if it is not on PATH. | |
| GWS_SERVICES | No | Comma-separated list of services to enable (e.g., drive,calendar). Other services are not registered. | |
| GWS_MCP_TOKEN | No | Bearer token required for HTTP transport. | |
| GWS_READ_ONLY | No | Set to '1' to refuse every write operation. | |
| GOOGLE_WORKSPACE_CLI_CONFIG_DIR | No | Directory for gws config. Use to run multiple instances with different accounts. | |
| GOOGLE_WORKSPACE_CLI_KEYRING_BACKEND | No | Set to 'file' to use file-based keyring instead of OS keychain (needed on headless servers). |
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 |
|---|---|
| gmail_searchA | Search the mailbox with Gmail's own query syntax (from:, to:, subject:, has:attachment, newer_than:7d, is:unread). Returns message ids and snippets; use gmail_get_message for a full body. |
| gmail_get_messageC | One message in full, including the body and headers. |
| gmail_get_threadB | A whole conversation in order. Prefer this over fetching messages one by one when you need context. |
| gmail_create_draftA | Write a draft. It is NOT sent: it appears in Drafts for a person to review. This is the safe way to have an agent write email. |
| gmail_send_draftA | Send a draft that already exists. Separate from creating one on purpose: an agent drafts, a person sends. Cannot be undone. |
| gmail_modify_labelsA | Add or remove labels on a message. Use this to archive (remove INBOX), mark read (remove UNREAD) or triage. |
| gmail_list_labelsA | Every label with its id. Label ids are needed by gmail_modify_labels and are not the same as their display names. |
| drive_searchA | Find files with Drive query syntax (name contains 'x', mimeType='application/pdf', modifiedTime > '2026-01-01'). Returns id, name, type and link. |
| drive_get_fileB | Metadata for one file: name, type, size, owners, sharing and link. |
| drive_exportA | Read the CONTENT of a Google Doc, Sheet or Slide as text. drive_get_file returns metadata only, so this is the one to use when you need what is inside. |
| drive_create_folderA | Create a folder, optionally inside another. |
| drive_shareA | Grant someone access to a file. Sharing is visible to the other person immediately, so check the address before calling. |
| drive_trashA | Move a file to the trash. Recoverable for 30 days, unlike a permanent delete, which this tool deliberately does not do. |
| sheets_readB | Read a cell range, e.g. 'Sheet1!A1:D50'. Returns rows as arrays. |
| sheets_writeB | Overwrite a range with new values. Existing cells in that range are replaced. |
| sheets_appendA | Add rows to the end of a sheet without touching what is there. Prefer this over sheets_write when adding data. |
| sheets_getA | Spreadsheet structure: every sheet name, id, and dimensions. Read this before a range query so the sheet name is right. |
| sheets_createA | Create a new spreadsheet and return its id. |
| docs_getA | Read a Google Doc's full structured content. For plain prose, drive_export with text/markdown is usually easier to work with. |
| docs_createA | Create a new Google Doc with a title, and optionally an opening body of text. |
| docs_appendA | Add text to the end of a Doc without touching what is already there. |
| calendar_list_eventsA | Events in a window. Times are RFC3339, e.g. 2026-09-01T00:00:00Z. Defaults to the primary calendar. |
| calendar_create_eventA | Create an event. Adding attendees emails them immediately, so confirm the list before calling with any. |
| calendar_update_eventA | Change an existing event. Only the fields you pass are altered. |
| calendar_delete_eventA | Delete an event. Attendees are notified that it was cancelled, and it cannot be undone. |
| calendar_list_calendarsA | Every calendar this account can see, with its id. Needed before working on anything other than primary. |
| tasks_listsB | Every task list with its id. |
| tasks_listA | Tasks in a list. Completed ones are hidden unless you ask for them. |
| tasks_createA | Add a task. |
| tasks_completeC | Mark a task done. |
| slides_getB | A presentation's structure and the text on every slide. |
| slides_createA | Create an empty presentation and return its id. |
| forms_getC | A form's questions and settings. |
| forms_responsesC | Every response to a form. |
| contacts_searchB | Search your own contacts by name, email or company. |
| contacts_listB | All your contacts, paged. |
| workspace_rawA | Call any Google Workspace API method the curated tools do not cover. The CLI is generated from Google's discovery service, so this reaches roughly 400 methods across drive, gmail, sheets, docs, slides, calendar, tasks, people, chat, forms, keep, meet, script and admin-reports. Use workspace_schema first to learn the exact shape. |
| workspace_schemaA | The exact parameters and request body a method expects, straight from Google's discovery service. Read this before workspace_raw rather than guessing field names. |
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 38 tools
Most tools map cleanly to unique resource/action pairs, but tasks_lists and tasks_list differ by a single 's' while referring to different things, which is a likely misselection trap. sheets_read and sheets_get also sound like the same operation until you read the descriptions.
The dominant pattern is service_verb_noun (gmail_get_message, drive_create_folder, calendar_create_event), and it is mostly followed. tasks_lists, forms_responses, and workspace_raw/schema break the pattern, and tasks_lists vs tasks_list creates an inconsistent verb/noun collision.
38 tools is on the high side, but the server covers nine distinct Google services with small per-service sets, plus a raw API pair to cover edge cases. The count is heavy but reasonable for the stated Workspace-wide scope.
Core workflows such as Gmail search/draft, Calendar CRUD, Drive search/export, Sheets read/write/append, and Tasks create/complete are all covered. Some surfaces are read-only or append-only (Contacts, Forms, Slides, Docs), but workspace_raw and workspace_schema explicitly fill those gaps.