Skip to main content
Glama
google-workspace-mcp

google-workspace-mcp

by smk-labs

Server Configuration

Describes the environment variables required to run the server.

NameRequiredDescriptionDefault
GWM_HOMENoConfig home directory. Defaults to $XDG_CONFIG_HOME/google-workspace-mcp, else ~/.config/google-workspace-mcp/.
GWM_ACCOUNTSNoPer-instance account scope: a comma-list of slugs from the registry or an inline JSON map. Omit to expose every account in the registry.
GWM_TOKENS_DIRNoDirectory for per-account token files. Defaults to <config-home>/tokens/.
GWM_CREDENTIALSNoPath to the OAuth client secret file. Defaults to <config-home>/credentials.json.
GWM_ACCOUNTS_FILENoPath to the account registry file. Defaults to <config-home>/accounts.json.

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

CapabilityDetails
tools
{
  "listChanged": false
}
prompts
{
  "listChanged": false
}
resources
{
  "subscribe": false,
  "listChanged": false
}
experimental
{}

Tools

Functions exposed to the LLM to take actions

NameDescription
accounts_listA

List configured accounts and whether each has a token file on disk.

gmail_sendA

Send an email immediately from the given account.

For replies, pass thread_id AND in_reply_to_message_id (the RFC822
Message-Id header value, NOT the Gmail message id) so the reply
threads correctly.
gmail_draft_createC

Create a Gmail draft. Returns {id, message: {...}}.

gmail_draft_updateC

Overwrite an existing draft's contents.

gmail_draft_sendC

Send an existing draft.

gmail_draft_deleteC

Permanently delete a draft (the thing the default connector can't do).

gmail_drafts_listC

List drafts. query uses standard Gmail search syntax.

gmail_searchB

Search messages with Gmail's query syntax (e.g. 'from:foo subject:bar').

gmail_message_getC

Fetch one message. format=full includes the body.

gmail_message_trashB

Move a message to Trash (reversible for 30 days).

gmail_message_modifyC

Add/remove labels on a message (e.g. mark read by removing UNREAD).

gmail_labels_listC

List all labels for the account.

gmail_label_createA

Create a label. Nested labels use 'Parent/Child' names; create each parent level first. Idempotent: an existing label is returned as-is.

gmail_thread_getC

Fetch a whole thread (all messages).

gmail_attachment_downloadA

Download one attachment to a local path. Get attachment_id from the message payload parts (gmail_message_get with format=full).

calendar_listC

List all calendars the account can access.

calendar_events_listC

List events. time_min/time_max are RFC3339 (e.g. '2026-06-05T00:00:00-07:00').

calendar_event_getC

Fetch one event.

calendar_event_createB

Create an event. start/end are RFC3339 datetimes; date-only ('2026-06-10') makes an all-day event.

calendar_event_updateB

Patch an existing event — only the fields you pass are changed.

calendar_event_deleteC

Delete an event.

drive_searchB

List/search files. query uses Drive query language; see https://developers.google.com/drive/api/guides/search-files Examples: "name contains 'budget'" "mimeType='application/vnd.google-apps.folder'" "'' in parents"

drive_file_getC

Get a file's full metadata.

drive_file_downloadB

Download a file. For Google Docs/Sheets/Slides, pass export_mime_type (e.g. 'application/pdf', 'text/plain', 'text/csv').

drive_file_uploadB

Upload a local file to Drive. convert_to_google_doc=True converts .docx/.xlsx/.pptx to native Google Docs/Sheets/Slides.

drive_file_moveC

Move a file to a new folder.

drive_file_renameD

Rename a file.

drive_file_trashC

Move a file to trash (reversible).

drive_folder_createC

Create a new folder.

drive_file_shareC

Share a file with someone by email.

drive_file_link_accessA

Toggle "anyone with the link" access on a file the account owns.

Built for zero-bandwidth server-side fetches: some APIs (e.g. a
transcription service's source_url parameter) can download a Drive file
themselves — but only while it is link-accessible. Flow: enable, hand the
returned direct_download_url to the fetching service, then IMMEDIATELY
call again with enabled=false to revoke. Never leave link access on.
tasklist_listA

List the account's task lists (each has an id + title).

tasklist_createC

Create a new task list.

tasklist_deleteB

Delete a task list and all its tasks. Irreversible.

task_listB

List tasks in a list. Find ids via tasklist_list; '@default' is the account's default list.

task_getC

Fetch a single task.

task_createA

Create a task. due is RFC3339 (e.g. '2026-06-15T00:00:00Z') — Google Tasks keeps only the DATE part. parent makes it a subtask of that task id; previous orders it after that task id.

task_updateA

Patch a task's fields. status='completed' completes it (or use task_complete).

task_completeB

Mark a task completed (shortcut for status='completed').

task_deleteC

Delete a task. Irreversible.

task_moveB

Reposition a task: under parent (as a subtask) and/or after previous in the same list.

contacts_listB

List saved contacts. Pass next_page_token back as page_token to walk every page.

contacts_searchB

Search saved contacts by name/email/phone. page_size max is 30 (People API limit). The People search index is cold on the first query after startup; this retries once automatically if the first result is empty, so the caller never has to.

contact_getC

Fetch one contact by its resourceName (e.g. 'people/c12345...').

contacts_batch_getA

Fetch many contacts at once by resourceName (up to 200 per call) — one round trip instead of N contact_get calls. Built for a dedup residue step, where only the ambiguous merge candidates need re-hydrating.

other_contacts_listA

List 'other contacts' — people you've corresponded with (e.g. emailed) but never saved to Google Contacts. High-value for a CRM: it surfaces real ties missing from the address book. Paginated like contacts_list.

contact_groups_listC

List the account's contact groups — Google's native labels/segments (e.g. 'Family', 'Work'). These map cleanly to CRM tags/circles.

contact_group_getB

Fetch one contact group with its member resourceNames. Pair the returned members with contacts_batch_get to pull a whole segment in two calls.

Prompts

Interactive templates invoked by user choice

NameDescription

No prompts

Resources

Contextual data attached and managed by the client

NameDescription

No resources

TDQS

C2.6/5.0

Scored across 48 tools

Disambiguation4/5

Most tools are clearly separated by service and action, and the descriptions clarify overlaps like gmail_send vs gmail_draft_send or drive_file_get vs drive_search. The main confusion points are task_list vs tasklist_list and singular/plural contact tools, but these are still distinguishable with the descriptions.

Naming Consistency3/5

All names are snake_case and generally readable, but conventions vary between service_action (gmail_send, drive_search, calendar_list) and service_resource_action (gmail_message_get, drive_file_get, calendar_event_update). Singular/plural inconsistencies (contacts_list vs contact_get, gmail_labels_list vs gmail_label_create) and the near-identical task_list/tasklist_list reduce predictability.

Tool Count2/5

48 tools is very heavy for a single MCP server, even one spanning five Google Workspace services. While many tools are useful, the count is near the extreme end and includes convenience/niche tools such as task_complete, contacts_batch_get, and drive_file_link_access.

Completeness3/5

Gmail, Calendar, Drive, and Tasks have solid lifecycle coverage for common workflows, including create/update/delete and search/list operations. However, Contacts is essentially read-only with no create/update/delete, and there are notable secondary gaps such as Gmail label deletion/update and Calendar creation/deletion.

Maintenance

ActivityMaintained
ResponsivenessNo recent community issues