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_listB | 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. Attachments that would produce an inline result over 6 MB are rejected — pass saveToPath to write the raw bytes to a local file instead. The limit is measured on the JSON-RPC frame, not the raw bytes. |
| 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_calendarsB | List calendars the account can access. |
| google_calendar_list_eventsB | 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_respondA | Accept, decline, or mark tentative an event invite by setting the attendee responseStatus. The address must already be on the invite. |
| 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_busyA | Query busy intervals across calendars to find free meeting windows. A calendar that could not be read returns errors instead of looking free. |
| google_drive_listB | 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). Pass saveToPath to write the exported bytes to a local file instead. |
| 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_listC | 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_updateB | Update a contact's name, email, phone, address, organization or photo. Multi-valued fields keep their other entries. |
| 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_listsC | List the account's Google Tasks lists. |
| google_tasks_listB | 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_rowsC | Insert blank rows into a sheet at a 0-based row index. |
| google_sheets_delete_rowsB | 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_textB | 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_videosC | List the user's uploaded videos. |
| google_youtube_list_playlistsC | 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_commentsC | 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_questionC | Append a text or multiple-choice question to the end of 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_responsesA | Append form responses to Sheets with a __google_forms_response_id column for deduplication by response ID. Existing rows are migrated by answer matching; added questions go after the ID column, while reordered columns fail safely. |
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
Most tools are scoped to a service plus action, but several pairs overlap: google_sheets_get vs google_sheets_read, google_docs_get vs google_docs_read, and google_calendar_create vs google_calendar_create_event. Descriptions differentiate most cases, but with 134 tools the agent still faces meaningful selection ambiguity.
The set consistently uses snake_case with a google_<service>_<action> prefix, making most names predictable. Minor deviations such as google_gmail_threads_list, google_gmail_drafts_create, google_youtube_subscriptions, and google_youtube_my_videos keep it from perfect consistency.
At 134 tools, this is far beyond any well-scoped range; even a multi-service aggregator would typically be split into per-service servers. The enormous surface creates high cognitive load and makes tool selection expensive.
Coverage is broad across Gmail, Calendar, Drive, Contacts, Tasks, Sheets, Docs, Slides, YouTube, and Forms, with CRUD/lifecycle operations for most resources. Minor gaps remain, such as YouTube playlist item listing, comment deletion/update, and some Gmail send-as/filter update operations.