GoogleMCP
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| GOOGLEMCP_PRODUCTS | No | Comma-separated list of Google product keys to enable. If unset, the default 15 products are enabled read-only. | |
| GOOGLEMCP_WRITE_PRODUCTS | No | Comma-separated list of product keys for which write tools should be enabled. Read-only by default. | |
| GOOGLEMCP_ALLOW_DESTRUCTIVE | No | Set to true to enable destructive tools such as delete, trash, and send, in addition to per-product write opt-in. |
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
} |
| logging | {} |
| prompts | {
"listChanged": true
} |
| resources | {
"subscribe": false,
"listChanged": true
} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| analytics_list_account_summariesB | List GA4 accounts and their properties visible to the user. |
| analytics_list_propertiesB | List GA4 properties under an account ('accounts/' or the numeric ID). |
| analytics_run_reportA | Run a GA4 Data API report. property_id: numeric ID or 'properties/'. metrics: e.g. ["activeUsers", "sessions"] (max 10). dimensions: e.g. ["date", "country"] (max 9). date_ranges: [{"start_date": "28daysAgo", "end_date": "today"}] (max 4). Returns headers and rows (at most 1000 per call; page with offset). |
| calendar_list_calendarsB | List calendars on the user's calendar list, including 'primary'. |
| calendar_list_eventsA | List events in a time range. Times are RFC 3339 with an offset, for example 2026-10-05T00:00:00Z. single_events=true expands recurring events and orders by start time. |
| calendar_get_eventC | Get one event by id. |
| calendar_query_freebusyB | Return busy intervals for calendars (default: primary) between two RFC 3339 times. |
| docs_get_documentA | Read a Google Doc as plain text with a structure summary. Text is truncated to |
| drive_search_filesB | Search the user's Drive. query is optional raw Drive search syntax (for example "fullText contains 'budget'"); name_contains, mime_type and folder_id are safe structured filters. Trashed files are excluded by default. |
| drive_get_fileB | Get metadata for one file or folder. |
| drive_read_file_textA | Read the text of a Google Doc, Sheet (first sheet as CSV), Slides deck, or plain-text file. Output is capped at max_chars. Binary files are refused. |
| driveactivity_query_activityA | Query Drive activity, newest first, for one file (item_id), everything under a folder (folder_id), or the whole Drive (neither). filter uses the Drive Activity syntax, for example 'time >= "2026-10-01T00:00:00Z" AND detail.action_detail_case:(EDIT RENAME)'. consolidate=true groups related actions. |
| forms_get_formB | Get a form's title, description, publish state, and question summary. |
| forms_list_responsesC | List form responses. |
| forms_get_responseB | Get one form response by id. |
| gmail_search_messagesA | Search Gmail with Gmail search syntax (for example 'from:alice newer_than:7d'). Returns message ids with From, To, Subject, Date, and snippet when include_headers is true. Use gmail_get_message for the body. |
| gmail_get_messageA | Get one message: headers, plain-text body (size-capped), and attachment metadata. Attachment contents are not downloaded. |
| gmail_get_threadA | Get every message in a thread with headers and size-capped plain-text bodies. Bodies are capped per message (max_body_chars) and in total across the thread; once the total is spent, later bodies are empty and marked truncated. |
| gmail_list_labelsA | List Gmail labels (system and user labels) with their ids. |
| people_search_contactsB | Search the user's contacts by name, email, phone, or organization (prefix match). |
| people_get_personB | Get one contact by resource name (for example 'people/c123'), or 'people/me'. |
| people_list_connectionsC | List the user's saved contacts. |
| people_list_other_contactsC | List 'Other contacts': addresses Gmail saved automatically from conversations. |
| people_search_other_contactsA | Search 'Other contacts' (auto-saved Gmail correspondents) by name, email, phone. |
| photos_list_app_albumsA | List albums created by this app. Albums made in the Photos app or by other apps are not visible (Google API restriction since 2025-03-31). |
| photos_list_app_media_itemsA | List media items uploaded by this app, optionally only those in one app-created album. baseUrl values expire after about 60 minutes. |
| photos_create_picker_sessionA | Start a Google Photos Picker session so the user can choose existing photos. Give picker_uri to the user to open; then poll photos_get_picker_session until media_items_set is true. |
| photos_get_picker_sessionA | Check a Picker session. media_items_set becomes true after the user finishes picking. Respect poll_interval between checks. |
| photos_list_picked_media_itemsB | List the items the user picked in a Picker session. baseUrl needs the same OAuth token to download and expires after about 60 minutes. |
| searchconsole_list_sitesA | List Search Console properties the user can access, with permission level. |
| searchconsole_query_search_analyticsA | Query clicks, impressions, CTR, and position for a property. site_url: 'https://example.com/' or 'sc-domain:example.com'. Dates are YYYY-MM-DD (Pacific time), inclusive. dimensions: any of date, query, page, country, device, searchAppearance. filters: [{"dimension": "query", "operator": "contains", "expression": "mcp"}]. Returns at most 1000 rows per call; page with start_row. |
| searchconsole_inspect_urlA | Inspect Google's index status for one URL inside a property. Limited by Google to 2,000 inspections per property per day. |
| sheets_get_spreadsheetA | Get spreadsheet metadata: title, locale, time zone, and its sheets (tabs). |
| sheets_read_rangeA | Read cell values from an A1 range ( Accepts A1 ranges, a sheet title, or a named range. The request is
bounded before it is sent: at most |
| slides_get_presentationB | Summarize a presentation: title and each slide's object id and text. At most 100 slides and 2000 characters per slide are returned. |
| slides_get_thumbnailA | Get a PNG thumbnail URL for one slide. The URL works without sign-in for about 30 minutes and acts as the signed-in user, so do not share it. |
| tasks_list_tasklistsC | List the user's Google Tasks lists. |
| tasks_list_tasksB | List tasks in a task list. Use tasklist_id '@default' for the default list. show_completed=true also returns tasks completed in Google's apps. |
| tasks_get_taskC | Get one task by id. |
| youtube_list_my_channelsA | List the YouTube channels owned by the signed-in user. Costs 1 quota unit. |
| youtube_list_my_playlistsA | List playlists owned by the signed-in user. Costs 1 quota unit per page. |
| youtube_list_playlist_itemsB | List videos in a playlist. Costs 1 quota unit per page. |
| youtube_get_videosA | Get details and statistics for up to 50 videos by ID. Costs 1 quota unit. |
| youtube_searchA | Search YouTube. EXPENSIVE: each call costs 100 quota units (1% of the
default daily quota). At most 25 results per call and 20 calls per
server process. Prefer the list tools when possible. |
| youtube_analytics_query_reportA | Query a YouTube Analytics report for the user's channel. metrics: e.g. ["views", "estimatedMinutesWatched", "likes"]. dimensions: e.g. ["day"] or ["video"] (top videos need sort "-views"). Dates are YYYY-MM-DD and inclusive. filters uses the API syntax, e.g. "video==VIDEO_ID". channel defaults to "channel==MINE". Returns column names and rows (at most 1000). |
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 45 tools
Tools are consistently scoped by Google service and action, with clear distinctions such as search vs get vs list vs query. Overlaps like contacts vs other contacts or app albums vs app media items are explicitly described and unlikely to be confused.
The set follows a predictable service_verb_noun pattern throughout, e.g. gmail_get_message, calendar_list_events, sheets_read_range. Minor service prefixes like driveactivity and searchconsole are still used consistently within their services.
With 45 tools, the surface is very large for an agent to navigate even though it aggregates many Google APIs. The count is justified by breadth, but it still exceeds the practical range for a coherent tool set.
Read, search, list, and query coverage is broad across Analytics, Gmail, Drive, Calendar, Sheets, YouTube, and others. However, most services lack write/update/delete operations, so common actions like sending email, creating events, or updating sheets would fail.