google-services-mcp
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| GOOGLE_MCP_DIR | No | Directory where config and tokens live. | ~/.google-services-mcp |
| GOOGLE_MCP_CLIENT_ID | Yes | Google OAuth client ID, required for authentication. | |
| GOOGLE_MCP_REDIRECT_URI | No | Full redirect URI override. Takes precedence over REDIRECT_PORT and must exactly match a URI registered for this OAuth client in the Cloud Console. | |
| GOOGLE_MCP_CLIENT_SECRET | Yes | Google OAuth client secret, required for authentication. | |
| GOOGLE_MCP_REDIRECT_PORT | No | Local loopback port for OAuth. | 8787 |
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 |
|---|---|
| google_account_addA | Start the OAuth consent flow to connect a new Google account. Opens a browser for sign-in. |
| google_account_listA | List all connected accounts with their email and default status. |
| google_account_removeB | Disconnect an account and delete its stored tokens. |
| google_account_set_defaultA | Set which account is used when no account is specified. |
| google_account_statusA | Show credential configuration, data directory, connected accounts and token health. |
| google_gmail_sendC | Send an email from the connected account. |
| google_gmail_listA | List messages from the inbox, newest first, with an optional Gmail search query. |
| google_gmail_getA | Fetch a single message with parsed headers, body and attachment flags. |
| google_gmail_threads_listB | List conversation threads, newest first, with an optional Gmail search query. |
| google_gmail_threads_getB | Fetch a full conversation thread with every message parsed (headers, body, attachments). |
| google_gmail_modifyC | Add or remove labels on a message (e.g. mark read/unread, star, archive). |
| google_gmail_replyA | Reply to an existing message inside its thread, preserving threading headers. |
| google_gmail_list_attachmentsA | List attachments on a message (metadata only, no bytes). |
| google_gmail_get_attachmentA | Download a single attachment by message ID and attachment ID. Text-like files are returned decoded as text; binary files as base64. |
| google_gmail_drafts_createC | Create a draft email (not sent). |
| google_gmail_drafts_updateA | Replace the contents of an existing draft (recipients, subject, body, attachments). |
| google_gmail_drafts_listC | List draft emails. |
| google_gmail_drafts_getA | Fetch a single draft with parsed headers and body. |
| google_gmail_drafts_sendB | Send an existing draft email. |
| google_gmail_drafts_deleteC | Delete a draft email. |
| google_gmail_labels_listB | List all Gmail labels. |
| google_gmail_labels_createC | Create a custom Gmail label. |
| google_gmail_labels_deleteC | Delete a Gmail label. |
| google_gmail_labels_updateC | Update a Gmail label's name or visibility (partial). |
| google_gmail_vacation_getC | Get the Gmail vacation (out-of-office) responder settings. |
| google_gmail_vacation_updateC | Update the Gmail vacation (out-of-office) responder settings. |
| google_gmail_sendas_listB | List Gmail send-as aliases. |
| google_gmail_sendas_createC | Create a Gmail send-as alias (subject to domain/verification rules). |
| google_gmail_filters_listB | List Gmail filters (auto-archive/apply rules). |
| google_gmail_filters_createC | Create a Gmail filter with criteria and action (e.g. auto-archive). |
| google_gmail_filters_deleteC | Delete a Gmail filter by ID. |
| google_gmail_trashB | Move a message to trash. |
| google_gmail_untrashA | Restore a message from trash. |
| google_gmail_deleteA | Permanently delete a message (irreversible). |
| google_calendar_list_calendarsC | List calendars the account can access. |
| google_calendar_list_eventsA | List upcoming events in a calendar, optionally filtered by time range or query. |
| google_calendar_create_eventC | Create a timed or all-day event. All-day events use YYYY-MM-DD dates. |
| google_calendar_create_meetB | Create a calendar event with an attached Google Meet link. |
| google_calendar_get_eventA | Fetch a single event by ID. |
| google_calendar_update_eventC | Update fields of an existing event (partial update). |
| google_calendar_delete_eventB | Delete an event by ID. |
| google_calendar_respondB | Accept, decline, or mark tentative an event invite by setting the attendee responseStatus. |
| google_calendar_createC | Create a secondary calendar with a name, timezone, and description. |
| google_calendar_updateC | Update a calendar's name, color, timezone, or description (partial). |
| google_calendar_deleteB | Delete a secondary calendar permanently (destructive). |
| google_calendar_free_busyB | Query busy intervals across calendars to find free meeting windows. |
| google_drive_listA | List files in Drive, newest first, with an optional query. |
| google_drive_getB | Get metadata for a single file by ID. |
| google_drive_uploadA | Create a file in Drive, optionally with text content (blank Google-native file if omitted) or by local file path (binary-safe). |
| google_drive_updateC | Rename a file and/or replace its content (text or local file path). |
| google_drive_deleteA | Permanently delete a file from Drive. IRREVERSIBLE — prefer google_drive_trash (recoverable). |
| google_drive_trashA | Move a file to trash (recoverable via google_drive_restore). Safer than google_drive_delete. |
| google_drive_restoreB | Restore a trashed file (sets trashed: false). |
| google_drive_shareB | Share a file with a user/group by email, anyone with the link, or a domain; optionally transfer ownership. |
| google_drive_list_permissionsC | List who can access a file and with what role. |
| google_drive_delete_permissionC | Revoke a permission from a file by permission ID. |
| google_drive_downloadA | Download a file's raw bytes (non-Google-native files). Text content returns decoded text; binary returns base64. Pass saveToPath to write bytes to a local file instead. |
| google_drive_exportA | Export a Google-native file (Docs/Sheets/Slides/Drawings) to another format (e.g. application/pdf, text/plain, application/vnd.openxmlformats-officedocument.wordprocessingml.document). |
| google_drive_create_folderC | Create a folder in Drive. |
| google_drive_copyC | Copy a file, optionally with a new name. |
| google_drive_moveA | Move a file into a folder. Provide removeParentFolderId to also remove it from its current folder (true move); omit to add it to an additional folder. |
| google_contacts_listB | List the account's contacts with names, emails and phones. |
| google_contacts_searchB | Search contacts (including non-connected) by name, email or phone. |
| google_contacts_createC | Create a new contact with a name and optional email/phone/address/organization/photo. |
| google_contacts_updateA | Update an existing contact's name, email, phone, address, organization, or photo (partial update by resourceName). |
| google_contacts_getB | Get a contact by resourceName with rich fields (name, email, phone, address, org). |
| google_contacts_deleteC | Delete a contact by resourceName. |
| google_tasks_list_listsB | List the account's Google Tasks lists. |
| google_tasks_listC | List tasks in a task list (default list if not specified). |
| google_tasks_createB | Create a task, optionally with notes, due date, or as a subtask. |
| google_tasks_updateC | Update a task's title, notes, due date, or status (partial). |
| google_tasks_create_listC | Create a new Google Tasks list. |
| google_tasks_update_listC | Rename a Google Tasks list. |
| google_tasks_delete_listC | Delete a Google Tasks list (removes its tasks). |
| google_tasks_completeB | Mark a task as completed. |
| google_tasks_deleteC | Delete a task. |
| google_sheets_getB | Get spreadsheet metadata and optionally cell values from a range. |
| google_sheets_readC | Read cell values from a range as rows of strings. |
| google_sheets_writeA | Write rows of values starting at a range top-left cell (overwrites in place). |
| google_sheets_appendB | Append rows below the existing data in a sheet. |
| google_sheets_createB | Create a new spreadsheet, optionally with pre-made sheet tabs. |
| google_sheets_batch_updateB | Send raw Sheets batchUpdate requests (add/delete sheets, formatting, etc.). |
| google_sheets_add_sheetC | Add a new tab (sheet) to a spreadsheet. |
| google_sheets_delete_sheetA | Permanently delete a tab (sheet) from a spreadsheet. |
| google_sheets_rename_sheetC | Rename a tab (sheet) in a spreadsheet. |
| google_sheets_insert_rowsB | Insert blank rows into a sheet at a 0-based row index. |
| google_sheets_delete_rowsC | Delete rows from a sheet starting at a 0-based row index. |
| google_sheets_get_named_rangesB | List named ranges on a spreadsheet. |
| google_sheets_set_named_rangeC | Create a named range over a grid region. |
| google_docs_getB | Get the full Google Docs document (structural JSON). |
| google_docs_readB | Read a Google Docs document as plain text. |
| google_docs_createA | Create a new Google Docs document with a title. |
| google_docs_insert_textA | Insert text into a document at an index or at the end. |
| google_docs_replace_textB | Replace all occurrences of a string in a document (template filling). |
| google_docs_batch_updateC | Send raw Docs batchUpdate requests (styles, tables, headers, etc.). |
| google_docs_delete_rangeC | Delete a range of content from a document. |
| google_docs_insert_tableC | Insert an empty table at a model index (a newline is added before it). |
| google_docs_insert_inline_imageB | Insert an inline image from a public URI and return the created object id. |
| google_slides_getB | Get a Google Slides presentation (structural JSON). |
| google_slides_createC | Create a new Google Slides presentation with a title. |
| google_slides_replace_textB | Replace all occurrences of a string across a presentation (template filling). |
| google_slides_add_slideB | Add a blank slide to a presentation. |
| google_slides_delete_slideB | Delete a slide by object ID. |
| google_slides_get_pageA | Get the contents of a single slide page by object ID. |
| google_slides_batch_updateC | Send raw Slides batchUpdate requests (create textboxes, shapes, images, style elements, etc.). |
| google_slides_duplicate_slideC | Duplicate a slide and return the new slide object ID. |
| google_slides_move_slideB | Move a slide to a new position in the deck by insertion index. |
| google_slides_create_textboxC | Create a text box on a slide, optionally with initial text. Sizes in points. |
| google_slides_create_imageC | Insert an image from a URL onto a slide. Sizes in points. |
| google_youtube_searchB | Search YouTube for videos and return titles, IDs and channels. |
| google_youtube_uploadB | Upload a video to YouTube. Provide a local file path (preferred) or base64 content. Defaults to private. |
| google_youtube_get_videoA | Get details, statistics and content details for a video. |
| google_youtube_update_videoC | Update a video's title, description, tags or privacy status. |
| google_youtube_my_videosB | List the user's uploaded videos. |
| google_youtube_list_playlistsB | List the user's YouTube playlists. |
| google_youtube_create_playlistC | Create a private playlist for the user. |
| google_youtube_delete_playlistB | Delete a playlist by ID. |
| google_youtube_add_to_playlistC | Add a video to a playlist. |
| google_youtube_remove_from_playlistC | Remove a video from a playlist by playlist item ID. |
| google_youtube_subscriptionsC | List the channels the user subscribes to. |
| google_youtube_list_commentsB | List comment threads for a video, most recent first. |
| google_youtube_insert_commentC | Post a top-level comment on a video. |
| google_youtube_set_comment_moderationC | Hold, reject, or flag a comment as likely spam. |
| google_youtube_mark_comment_spamC | Mark a comment as spam. |
| google_forms_getA | Get a Google Form's structure and questions. |
| google_forms_responsesC | List responses submitted to a form. |
| google_forms_createC | Create a new Google Form with a title. |
| google_forms_add_questionB | Add a text or multiple-choice question to a form. |
| google_forms_update_questionC | Update a question's title, description, options or required flag. |
| google_forms_delete_questionC | Delete a question from a form by questionId. |
| google_forms_move_questionC | Reorder a question to a new position in the form. |
| google_forms_renameC | Update a form's title. |
| google_forms_deleteB | Permanently delete a form. |
| google_forms_export_responsesC | Append form responses (headers + rows) to a spreadsheet tab. |
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 134 tools
Service-prefixed names and specific descriptions make most tools easy to distinguish (e.g., drive_list vs drive_list_permissions, docs_get vs docs_read). Minor overlaps exist, such as tasks_complete vs tasks_update(status) and calendar_create_event vs calendar_create_meet, but they are usually resolvable from descriptions.
Names follow a strong google_<service>_<action>_<object> snake_case convention, with clear verbs for most operations. Deviations like google_account_status, google_youtube_my_videos, and Gmail's resource-first names (google_gmail_threads_list, google_gmail_drafts_list) keep it from being perfect.
134 tools is far beyond a manageable MCP surface, even for a multi-service Google integration. The breadth forces agents to sift through many near-neighbor operations and creates high selection overhead.
Coverage is broad: Gmail, Calendar, Drive, Contacts, Tasks, Sheets, Docs, Slides, YouTube, Forms, and account management all have core CRUD/lifecycle operations. Gaps remain for some secondary areas (e.g., Drive comments/revisions, Calendar ACLs, Gmail forwarding/delegates), though raw batch_update tools provide escape hatches.