Google Workspace MCP Server
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| USER_GOOGLE_EMAIL | Yes | Your Google email address to authorize | |
| MCP_ENABLE_OAUTH21 | No | Enable OAuth 2.1 authentication | true |
| GOOGLE_OAUTH_CLIENT_ID | Yes | OAuth 2.0 client ID for Google API authentication | |
| GOOGLE_OAUTH_CLIENT_SECRET | Yes | OAuth 2.0 client secret for Google API authentication |
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
} |
| prompts | {
"listChanged": false
} |
| resources | {
"subscribe": false,
"listChanged": false
} |
| extensions | {
"io.modelcontextprotocol/ui": {}
} |
| experimental | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| start_google_authA | Manually initiate Google OAuth authentication flow. NOTE: This is a legacy OAuth 2.0 tool and is disabled when OAuth 2.1 is enabled. The authentication system automatically handles credential checks and prompts for authentication when needed. Only use this tool if:
In most cases, simply try calling the Google Workspace tool you need - it will automatically handle authentication if required. |
| search_gmail_messagesA | Searches messages in a user's Gmail account based on a query. Returns both Message IDs and Thread IDs for each found message, along with Gmail web interface links for manual verification. Supports pagination via page_token parameter. Args: query (str): The search query. Supports standard Gmail search operators. user_google_email (str): The user's Google email address. Required. page_size (int): The maximum number of messages to return. Defaults to 10. page_token (Optional[str]): Token for retrieving the next page of results. Use the next_page_token from a previous response. Returns: str: LLM-friendly structured results with Message IDs, Thread IDs, and clickable Gmail web interface URLs for each found message. Includes pagination token if more results are available. |
| get_gmail_message_contentA | Retrieves the full content (subject, sender, recipients, plain text body) of a specific Gmail message. Args: message_id (str): The unique ID of the Gmail message to retrieve. user_google_email (str): The user's Google email address. Required. Returns: str: The message details including subject, sender, date, Message-ID, recipients (To, Cc), and body content. |
| get_gmail_messages_content_batchA | Retrieves the content of multiple Gmail messages in a single batch request. Supports up to 25 messages per batch to prevent SSL connection exhaustion. Args: message_ids (List[str]): List of Gmail message IDs to retrieve (max 25 per batch). user_google_email (str): The user's Google email address. Required. format (Literal["full", "metadata"]): Message format. "full" includes body, "metadata" only headers. Returns: str: A formatted list of message contents including subject, sender, date, Message-ID, recipients (To, Cc), and body (if full format). |
| get_gmail_attachment_contentA | Downloads an email attachment and saves it to local disk. In stdio mode, returns the local file path for direct access. In HTTP mode, returns a temporary download URL (valid for 1 hour). May re-fetch message metadata to resolve filename and MIME type. Args: message_id (str): The ID of the Gmail message containing the attachment. attachment_id (str): The ID of the attachment to download. user_google_email (str): The user's Google email address. Required. Returns: str: Attachment metadata with either a local file path or download URL. |
| send_gmail_messageA | Sends an email using the user's Gmail account. Supports both new emails and replies with optional attachments. Supports Gmail's "Send As" feature to send from configured alias addresses. Args: to (str): Recipient email address. subject (str): Email subject. body (str): Email body content. body_format (Literal['plain', 'html']): Email body format. Defaults to 'plain'. attachments (Optional[List[Dict[str, str]]]): Optional list of attachments. Each dict can contain: Option 1 - File path (auto-encodes): - 'path' (required): File path to attach - 'filename' (optional): Override filename - 'mime_type' (optional): Override MIME type (auto-detected if not provided) Option 2 - Base64 content: - 'content' (required): Standard base64-encoded file content (not urlsafe) - 'filename' (required): Name of the file - 'mime_type' (optional): MIME type (defaults to 'application/octet-stream') cc (Optional[str]): Optional CC email address. bcc (Optional[str]): Optional BCC email address. from_name (Optional[str]): Optional sender display name. If provided, the From header will be formatted as 'Name '. from_email (Optional[str]): Optional 'Send As' alias email address. The alias must be configured in Gmail settings (Settings > Accounts > Send mail as). If not provided, the email will be sent from the authenticated user's primary email address. user_google_email (str): The user's Google email address. Required for authentication. thread_id (Optional[str]): Optional Gmail thread ID to reply within. When provided, sends a reply. in_reply_to (Optional[str]): Optional RFC Message-ID of the message being replied to (e.g., 'message123@gmail.com'). references (Optional[str]): Optional chain of RFC Message-IDs for proper threading (e.g., 'msg1@gmail.com msg2@gmail.com'). Returns: str: Confirmation message with the sent email's message ID. Examples: # Send a new email send_gmail_message(to="user@example.com", subject="Hello", body="Hi there!") |
| draft_gmail_messageA | Creates a draft email in the user's Gmail account. Supports both new drafts and reply drafts with optional attachments. Supports Gmail's "Send As" feature to draft from configured alias addresses. Args: user_google_email (str): The user's Google email address. Required for authentication. subject (str): Email subject. body (str): Email body (plain text). body_format (Literal['plain', 'html']): Email body format. Defaults to 'plain'. to (Optional[str]): Optional recipient email address. Can be left empty for drafts. cc (Optional[str]): Optional CC email address. bcc (Optional[str]): Optional BCC email address. from_name (Optional[str]): Optional sender display name. If provided, the From header will be formatted as 'Name '. from_email (Optional[str]): Optional 'Send As' alias email address. The alias must be configured in Gmail settings (Settings > Accounts > Send mail as). If not provided, the draft will be from the authenticated user's primary email address. thread_id (Optional[str]): Optional Gmail thread ID to reply within. When provided, creates a reply draft. in_reply_to (Optional[str]): Optional RFC Message-ID of the message being replied to (e.g., 'message123@gmail.com'). references (Optional[str]): Optional chain of RFC Message-IDs for proper threading (e.g., 'msg1@gmail.com msg2@gmail.com'). attachments (List[Dict[str, str]]): Optional list of attachments. Each dict can contain: Option 1 - File path (auto-encodes): - 'path' (required): File path to attach - 'filename' (optional): Override filename - 'mime_type' (optional): Override MIME type (auto-detected if not provided) Option 2 - Base64 content: - 'content' (required): Standard base64-encoded file content (not urlsafe) - 'filename' (required): Name of the file - 'mime_type' (optional): MIME type (defaults to 'application/octet-stream') include_signature (bool): Whether to append Gmail signature HTML from send-as settings. If unavailable (e.g., missing gmail.settings.basic scope), the draft is still created without signature. quote_original (bool): Whether to include the original message as a quoted reply. Requires thread_id to be provided. When enabled, fetches the original message and appends it below the signature. Defaults to False. Returns: str: Confirmation message with the created draft's ID. Examples: # Create a new draft draft_gmail_message(subject="Hello", body="Hi there!", to="user@example.com") |
| get_gmail_thread_contentA | Retrieves the complete content of a Gmail conversation thread, including all messages. Args: thread_id (str): The unique ID of the Gmail thread to retrieve. user_google_email (str): The user's Google email address. Required. Returns: str: The complete thread content with all messages formatted for reading. |
| get_gmail_threads_content_batchA | Retrieves the content of multiple Gmail threads in a single batch request. Supports up to 25 threads per batch to prevent SSL connection exhaustion. Args: thread_ids (List[str]): A list of Gmail thread IDs to retrieve. The function will automatically batch requests in chunks of 25. user_google_email (str): The user's Google email address. Required. Returns: str: A formatted list of thread contents with separators. |
| list_gmail_labelsB | Lists all labels in the user's Gmail account. Args: user_google_email (str): The user's Google email address. Required. Returns: str: A formatted list of all labels with their IDs, names, and types. |
| manage_gmail_labelA | Manages Gmail labels: create, update, or delete labels. Args: user_google_email (str): The user's Google email address. Required. action (Literal["create", "update", "delete"]): Action to perform on the label. name (Optional[str]): Label name. Required for create, optional for update. label_id (Optional[str]): Label ID. Required for update and delete operations. label_list_visibility (Literal["labelShow", "labelHide"]): Whether the label is shown in the label list. message_list_visibility (Literal["show", "hide"]): Whether the label is shown in the message list. Returns: str: Confirmation message of the label operation. |
| list_gmail_filtersA | Lists all Gmail filters configured in the user's mailbox. Args: user_google_email (str): The user's Google email address. Required. Returns: str: A formatted list of filters with their criteria and actions. |
| manage_gmail_filterA | Manages Gmail filters. Supports creating and deleting filters. Args: user_google_email (str): The user's Google email address. Required. action (str): Action to perform - "create" or "delete". criteria (Optional[Dict[str, Any]]): Filter criteria object (required for create). filter_action (Optional[Dict[str, Any]]): Filter action object (required for create). Named 'filter_action' to avoid shadowing the 'action' parameter. filter_id (Optional[str]): ID of the filter to delete (required for delete). Returns: str: Confirmation message with filter details. |
| modify_gmail_message_labelsA | Adds or removes labels from a Gmail message. To archive an email, remove the INBOX label. To delete an email, add the TRASH label. Args: user_google_email (str): The user's Google email address. Required. message_id (str): The ID of the message to modify. add_label_ids (Optional[List[str]]): List of label IDs to add to the message. remove_label_ids (Optional[List[str]]): List of label IDs to remove from the message. Returns: str: Confirmation message of the label changes applied to the message. |
| batch_modify_gmail_message_labelsA | Adds or removes labels from multiple Gmail messages in a single batch request. Args: user_google_email (str): The user's Google email address. Required. message_ids (List[str]): A list of message IDs to modify. add_label_ids (Optional[List[str]]): List of label IDs to add to the messages. remove_label_ids (Optional[List[str]]): List of label IDs to remove from the messages. Returns: str: Confirmation message of the label changes applied to the messages. |
| search_drive_filesA | Searches for files and folders within a user's Google Drive, including shared drives. Args:
user_google_email (str): The user's Google email address. Required.
query (str): The search query string. Supports Google Drive search operators.
page_size (int): The maximum number of files to return. Defaults to 10.
page_token (Optional[str]): Page token from a previous response's nextPageToken to retrieve the next page of results.
drive_id (Optional[str]): ID of the shared drive to search. If None, behavior depends on Returns: str: A formatted list of found files/folders with their details (ID, name, type, and optionally size, modified time, link). Includes a nextPageToken line when more results are available. |
| get_drive_file_contentA | Retrieves the content of a specific Google Drive file by ID, supporting files in shared drives. • Native Google Docs, Sheets, Slides → exported as text / CSV. • Office files (.docx, .xlsx, .pptx) → unzipped & parsed with std-lib to extract readable text. • Any other file → downloaded; tries UTF-8 decode, else notes binary. Args: user_google_email: The user’s Google email address. file_id: Drive file ID. Returns: str: The file content as plain text with metadata header. |
| get_drive_file_download_urlA | Downloads a Google Drive file and saves it to local disk. In stdio mode, returns the local file path for direct access. In HTTP mode, returns a temporary download URL (valid for 1 hour). For Google native files (Docs, Sheets, Slides), exports to a useful format:
For other files, downloads the original file format. Args: user_google_email: The user's Google email address. Required. file_id: The Google Drive file ID to download. export_format: Optional export format for Google native files. Options: 'pdf', 'docx', 'xlsx', 'csv', 'pptx'. If not specified, uses sensible defaults (PDF for Docs/Slides, XLSX for Sheets). For Sheets: supports 'csv', 'pdf', or 'xlsx' (default). Returns: str: File metadata with either a local file path or download URL. |
| list_drive_itemsA | Lists files and folders, supporting shared drives.
If Args:
user_google_email (str): The user's Google email address. Required.
folder_id (str): The ID of the Google Drive folder. Defaults to 'root'. For a shared drive, this can be the shared drive's ID to list its root, or a folder ID within that shared drive.
page_size (int): The maximum number of items to return. Defaults to 100.
page_token (Optional[str]): Page token from a previous response's nextPageToken to retrieve the next page of results.
drive_id (Optional[str]): ID of the shared drive. If provided, the listing is scoped to this drive.
include_items_from_all_drives (bool): Whether items from all accessible shared drives should be included if Returns: str: A formatted list of files/folders in the specified folder. Includes a nextPageToken line when more results are available. |
| create_drive_folderA | Creates a new folder in Google Drive, supporting creation within shared drives. Args: user_google_email (str): The user's Google email address. Required. folder_name (str): The name for the new folder. parent_folder_id (str): The ID of the parent folder. Defaults to 'root'. For shared drives, use a folder ID within that shared drive. Returns: str: Confirmation message with folder name, ID, and link. |
| create_drive_fileA | Creates a new file in Google Drive, supporting creation within shared drives. Accepts either direct content or a fileUrl to fetch the content from. Args: user_google_email (str): The user's Google email address. Required. file_name (str): The name for the new file. content (Optional[str]): If provided, the content to write to the file. folder_id (str): The ID of the parent folder. Defaults to 'root'. For shared drives, this must be a folder ID within the shared drive. mime_type (str): The MIME type of the file. Defaults to 'text/plain'. fileUrl (Optional[str]): If provided, fetches the file content from this URL. Supports file://, http://, and https:// protocols. Returns: str: Confirmation message of the successful file creation with file link. |
| import_to_google_docA | Imports a file (Markdown, DOCX, TXT, HTML, RTF, ODT) into Google Docs format with automatic conversion. Google Drive automatically converts the source file to native Google Docs format, preserving formatting like headings, lists, bold, italic, etc. Args: user_google_email (str): The user's Google email address. Required. file_name (str): The name for the new Google Doc (extension will be ignored). content (Optional[str]): Text content for text-based formats (MD, TXT, HTML). file_path (Optional[str]): Local file path for binary formats (DOCX, ODT). Supports file:// URLs. file_url (Optional[str]): Remote URL to fetch the file from (http/https). source_format (Optional[str]): Source format hint ('md', 'markdown', 'docx', 'txt', 'html', 'rtf', 'odt'). Auto-detected from file_name extension if not provided. folder_id (str): The ID of the parent folder. Defaults to 'root'. Returns: str: Confirmation message with the new Google Doc link. Examples: # Import markdown content directly import_to_google_doc(file_name="My Doc.md", content="# Title\n\nHello world") |
| get_drive_file_permissionsB | Gets detailed metadata about a Google Drive file including sharing permissions. Args: user_google_email (str): The user's Google email address. Required. file_id (str): The ID of the file to check permissions for. Returns: str: Detailed file metadata including sharing status and URLs. |
| check_drive_file_public_accessA | Searches for a file by name and checks if it has public link sharing enabled. Args: user_google_email (str): The user's Google email address. Required. file_name (str): The name of the file to check. Returns: str: Information about the file's sharing status and whether it can be used in Google Docs. |
| update_drive_fileA | Updates metadata and properties of a Google Drive file. Args: user_google_email (str): The user's Google email address. Required. file_id (str): The ID of the file to update. Required. name (Optional[str]): New name for the file. description (Optional[str]): New description for the file. mime_type (Optional[str]): New MIME type (note: changing type may require content upload). add_parents (Optional[str]): Comma-separated folder IDs to add as parents. remove_parents (Optional[str]): Comma-separated folder IDs to remove from parents. starred (Optional[bool]): Whether to star/unstar the file. trashed (Optional[bool]): Whether to move file to/from trash. writers_can_share (Optional[bool]): Whether editors can share the file. copy_requires_writer_permission (Optional[bool]): Whether copying requires writer permission. properties (Optional[dict]): Custom key-value properties for the file. Returns: str: Confirmation message with details of the updates applied. |
| get_drive_shareable_linkA | Gets the shareable link for a Google Drive file or folder. Args: user_google_email (str): The user's Google email address. Required. file_id (str): The ID of the file or folder to get the shareable link for. Required. Returns: str: The shareable links and current sharing status. |
| manage_drive_accessA | Consolidated tool for managing Google Drive file and folder access permissions. Supports granting, batch-granting, updating, revoking permissions, and transferring file ownership -- all through a single entry point. Args: user_google_email (str): The user's Google email address. Required. file_id (str): The ID of the file or folder. Required. action (str): The access management action to perform. Required. One of: - "grant": Share with a single user, group, domain, or anyone. - "grant_batch": Share with multiple recipients in one call. - "update": Modify an existing permission (role or expiration). - "revoke": Remove an existing permission. - "transfer_owner": Transfer file ownership to another user. share_with (Optional[str]): Email address (user/group), domain name (domain), or omit for 'anyone'. Used by "grant". role (Optional[str]): Permission role -- 'reader', 'commenter', or 'writer'. Used by "grant" (defaults to 'reader') and "update". share_type (str): Type of sharing -- 'user', 'group', 'domain', or 'anyone'. Used by "grant". Defaults to 'user'. permission_id (Optional[str]): The permission ID to modify or remove. Required for "update" and "revoke" actions. recipients (Optional[List[Dict[str, Any]]]): List of recipient objects for "grant_batch". Each should have: email (str), role (str, optional), share_type (str, optional), expiration_time (str, optional). For domain shares use 'domain' field instead of 'email'. send_notification (bool): Whether to send notification emails. Defaults to True. Used by "grant" and "grant_batch". email_message (Optional[str]): Custom notification email message. Used by "grant" and "grant_batch". expiration_time (Optional[str]): Expiration in RFC 3339 format (e.g., "2025-01-15T00:00:00Z"). Used by "grant" and "update". allow_file_discovery (Optional[bool]): For 'domain'/'anyone' shares, whether the file appears in search. Used by "grant". new_owner_email (Optional[str]): Email of the new owner. Required for "transfer_owner". move_to_new_owners_root (bool): Move file to the new owner's My Drive root. Defaults to False. Used by "transfer_owner". Returns: str: Confirmation with details of the permission change applied. |
| copy_drive_fileA | Creates a copy of an existing Google Drive file. This tool copies the template document to a new location with an optional new name. The copy maintains all formatting and content from the original file. Args: user_google_email (str): The user's Google email address. Required. file_id (str): The ID of the file to copy. Required. new_name (Optional[str]): New name for the copied file. If not provided, uses "Copy of [original name]". parent_folder_id (str): The ID of the folder where the copy should be created. Defaults to 'root' (My Drive). Returns: str: Confirmation message with details of the copied file and its link. |
| set_drive_file_permissionsA | Sets file-level sharing settings and controls link sharing for a Google Drive file or folder. This is a high-level tool for the most common permission changes. Use this to toggle "anyone with the link" access or configure file-level sharing behavior. For managing individual user/group permissions, use share_drive_file or update_drive_permission instead. Args: user_google_email (str): The user's Google email address. Required. file_id (str): The ID of the file or folder. Required. link_sharing (Optional[str]): Control "anyone with the link" access for the file. - "off": Disable "anyone with the link" access for this file. - "reader": Anyone with the link can view. - "commenter": Anyone with the link can comment. - "writer": Anyone with the link can edit. writers_can_share (Optional[bool]): Whether editors can change permissions and share. If False, only the owner can share. Defaults to None (no change). copy_requires_writer_permission (Optional[bool]): Whether viewers and commenters are prevented from copying, printing, or downloading. Defaults to None (no change). Returns: str: Summary of all permission changes applied to the file. |
| list_calendarsA | Retrieves a list of calendars accessible to the authenticated user. Args: user_google_email (str): The user's Google email address. Required. Returns: str: A formatted list of the user's calendars (summary, ID, primary status). |
| get_eventsA | Retrieves events from a specified Google Calendar. Can retrieve a single event by ID or multiple events within a time range. You can also search for events by keyword by supplying the optional "query" param. Args:
user_google_email (str): The user's Google email address. Required.
calendar_id (str): The ID of the calendar to query. Use 'primary' for the user's primary calendar. Defaults to 'primary'. Calendar IDs can be obtained using Returns: str: A formatted list of events (summary, start and end times, link) within the specified range, or detailed information for a single event if event_id is provided. |
| manage_eventA | Manages calendar events. Supports creating, updating, and deleting events. Args: user_google_email (str): The user's Google email address. Required. action (str): Action to perform - "create", "update", or "delete". summary (Optional[str]): Event title (required for create). start_time (Optional[str]): Start time in RFC3339 format (required for create). end_time (Optional[str]): End time in RFC3339 format (required for create). event_id (Optional[str]): Event ID (required for update and delete). calendar_id (str): Calendar ID (default: 'primary'). description (Optional[str]): Event description. location (Optional[str]): Event location. attendees (Optional[Union[List[str], List[Dict[str, Any]]]]): Attendee email addresses or objects. timezone (Optional[str]): Timezone (e.g., "America/New_York"). attachments (Optional[List[str]]): List of Google Drive file URLs or IDs to attach. add_google_meet (Optional[bool]): Whether to add/remove Google Meet. reminders (Optional[Union[str, List[Dict[str, Any]]]]): Custom reminder objects. use_default_reminders (Optional[bool]): Whether to use default reminders. transparency (Optional[str]): "opaque" (busy) or "transparent" (free). visibility (Optional[str]): "default", "public", "private", or "confidential". color_id (Optional[str]): Event color ID (1-11, update only). guests_can_modify (Optional[bool]): Whether attendees can modify. guests_can_invite_others (Optional[bool]): Whether attendees can invite others. guests_can_see_other_guests (Optional[bool]): Whether attendees can see other guests. Returns: str: Confirmation message with event details. |
| query_freebusyA | Returns free/busy information for a set of calendars. Args:
user_google_email (str): The user's Google email address. Required.
time_min (str): The start of the interval for the query in RFC3339 format (e.g., '2024-05-12T10:00:00Z' or '2024-05-12').
time_max (str): The end of the interval for the query in RFC3339 format (e.g., '2024-05-12T18:00:00Z' or '2024-05-12').
calendar_ids (Optional[List[str]]): List of calendar identifiers to query. If not provided, queries the primary calendar. Use 'primary' for the user's primary calendar or specific calendar IDs obtained from Returns: str: A formatted response showing free/busy information for each requested calendar, including busy time periods. |
| search_docsB | Searches for Google Docs by name using Drive API (mimeType filter). Returns: str: A formatted list of Google Docs matching the search query. |
| get_doc_contentA | Retrieves content of a Google Doc or a Drive file (like .docx) identified by document_id.
Returns: str: The document content with metadata header. |
| list_docs_in_folderC | Lists Google Docs within a specific Drive folder. Returns: str: A formatted list of Google Docs in the specified folder. |
| create_docB | Creates a new Google Doc and optionally inserts initial content. Returns: str: Confirmation message with document ID and link. |
| modify_doc_textA | Modifies text in a Google Doc - can insert/replace text and/or apply formatting in a single operation. Args: user_google_email: User's Google email address document_id: ID of the document to update start_index: Start position for operation (0-based) end_index: End position for text replacement/formatting (if not provided with text, text is inserted) text: New text to insert or replace with (optional - can format existing text without changing it) bold: Whether to make text bold (True/False/None to leave unchanged) italic: Whether to make text italic (True/False/None to leave unchanged) underline: Whether to underline text (True/False/None to leave unchanged) font_size: Font size in points font_family: Font family name (e.g., "Arial", "Times New Roman") text_color: Foreground text color (#RRGGBB) background_color: Background/highlight color (#RRGGBB) link_url: Hyperlink URL (http/https) Returns: str: Confirmation message with operation details |
| find_and_replace_docA | Finds and replaces text throughout a Google Doc. Args: user_google_email: User's Google email address document_id: ID of the document to update find_text: Text to search for replace_text: Text to replace with match_case: Whether to match case exactly tab_id: Optional ID of the tab to target Returns: str: Confirmation message with replacement count |
| insert_doc_elementsB | Inserts structural elements like tables, lists, or page breaks into a Google Doc. Args: user_google_email: User's Google email address document_id: ID of the document to update element_type: Type of element to insert ("table", "list", "page_break") index: Position to insert element (0-based) rows: Number of rows for table (required for table) columns: Number of columns for table (required for table) list_type: Type of list ("UNORDERED", "ORDERED") (required for list) text: Initial text content for list items Returns: str: Confirmation message with insertion details |
| insert_doc_imageB | Inserts an image into a Google Doc from Drive or a URL. Args: user_google_email: User's Google email address document_id: ID of the document to update image_source: Drive file ID or public image URL index: Position to insert image (0-based) width: Image width in points (optional) height: Image height in points (optional) Returns: str: Confirmation message with insertion details |
| update_doc_headers_footersA | Updates headers or footers in a Google Doc. Args: user_google_email: User's Google email address document_id: ID of the document to update section_type: Type of section to update ("header" or "footer") content: Text content for the header/footer header_footer_type: Type of header/footer ("DEFAULT", "FIRST_PAGE_ONLY", "EVEN_PAGE") Returns: str: Confirmation message with update details |
| batch_update_docA | Executes multiple document operations in a single atomic batch update. Args: user_google_email: User's Google email address document_id: ID of the document to update operations: List of operation dicts. Each operation MUST have a 'type' field. All operations accept an optional 'tab_id' to target a specific tab. Supported operation types and their parameters: insert_text - required: index (int), text (str) delete_text - required: start_index (int), end_index (int) replace_text - required: start_index (int), end_index (int), text (str) format_text - required: start_index (int), end_index (int) optional: bold, italic, underline, font_size, font_family, text_color, background_color, link_url update_paragraph_style - required: start_index (int), end_index (int) optional: heading_level (0-6, 0=normal), alignment (START/CENTER/END/JUSTIFIED), line_spacing, indent_first_line, indent_start, indent_end, space_above, space_below insert_table - required: index (int), rows (int), columns (int) insert_page_break- required: index (int) find_replace - required: find_text (str), replace_text (str) optional: match_case (bool, default false) create_bullet_list - required: start_index (int), end_index (int) optional: list_type ('UNORDERED'|'ORDERED'|'NONE', default UNORDERED), nesting_level (0-8), paragraph_start_indices (list[int]) Use list_type='NONE' to remove existing bullet/list formatting insert_doc_tab - required: title (str), index (int) optional: parent_tab_id (str) delete_doc_tab - required: tab_id (str) update_doc_tab - required: tab_id (str), title (str) Example operations: [ {"type": "insert_text", "index": 1, "text": "Hello World"}, {"type": "format_text", "start_index": 1, "end_index": 12, "bold": true}, {"type": "update_paragraph_style", "start_index": 1, "end_index": 12, "heading_level": 1, "alignment": "CENTER"}, {"type": "find_replace", "find_text": "foo", "replace_text": "bar"}, {"type": "insert_table", "index": 20, "rows": 2, "columns": 3}, {"type": "insert_doc_tab", "title": "Appendix", "index": 1} ] Returns: str: Confirmation message with batch operation results |
| inspect_doc_structureA | Essential tool for finding safe insertion points and understanding document structure. USE THIS FOR:
CRITICAL FOR TABLE OPERATIONS: ALWAYS call this BEFORE creating tables to get a safe insertion index. WHAT THE OUTPUT SHOWS:
WORKFLOW: Step 1: Call this function Step 2: Note the "total_length" value Step 3: Use an index < total_length for table insertion Step 4: Create your table Args: user_google_email: User's Google email address document_id: ID of the document to inspect detailed: Whether to return detailed structure information tab_id: Optional ID of the tab to inspect. If not provided, inspects main document. Returns: str: JSON string containing document structure and safe insertion indices |
| create_table_with_dataA | Creates a table and populates it with data in one reliable operation. CRITICAL: YOU MUST CALL inspect_doc_structure FIRST TO GET THE INDEX! MANDATORY WORKFLOW - DO THESE STEPS IN ORDER: Step 1: ALWAYS call inspect_doc_structure first Step 2: Use the 'total_length' value from inspect_doc_structure as your index Step 3: Format data as 2D list: [["col1", "col2"], ["row1col1", "row1col2"]] Step 4: Call this function with the correct index and data EXAMPLE DATA FORMAT: table_data = [ ["Header1", "Header2", "Header3"], # Row 0 - headers ["Data1", "Data2", "Data3"], # Row 1 - first data row ["Data4", "Data5", "Data6"] # Row 2 - second data row ] CRITICAL INDEX REQUIREMENTS:
DATA FORMAT REQUIREMENTS:
Args: user_google_email: User's Google email address document_id: ID of the document to update table_data: 2D list of strings - EXACT format: [["col1", "col2"], ["row1col1", "row1col2"]] index: Document position (MANDATORY: get from inspect_doc_structure 'total_length') bold_headers: Whether to make first row bold (default: true) tab_id: Optional tab ID to create the table in a specific tab Returns: str: Confirmation with table details and link |
| debug_table_structureA | ESSENTIAL DEBUGGING TOOL - Use this whenever tables don't work as expected. USE THIS IMMEDIATELY WHEN:
WHAT THIS SHOWS YOU:
HOW TO READ THE OUTPUT:
WORKFLOW INTEGRATION:
Args: user_google_email: User's Google email address document_id: ID of the document to inspect table_index: Which table to debug (0 = first table, 1 = second table, etc.) Returns: str: Detailed JSON structure showing table layout, cell positions, and current content |
| export_doc_to_pdfA | Exports a Google Doc to PDF format and saves it to Google Drive. Args: user_google_email: User's Google email address document_id: ID of the Google Doc to export pdf_filename: Name for the PDF file (optional - if not provided, uses original name + "_PDF") folder_id: Drive folder ID to save PDF in (optional - if not provided, saves in root) Returns: str: Confirmation message with PDF file details and links |
| update_paragraph_styleA | Apply paragraph-level formatting, heading styles, and/or list formatting to a range in a Google Doc. This tool can apply named heading styles (H1-H6) for semantic document structure, create bulleted or numbered lists with nested indentation, and customize paragraph properties like alignment, spacing, and indentation. All operations can be applied in a single call. Args: user_google_email: User's Google email address document_id: Document ID to modify start_index: Start position (1-based) end_index: End position (exclusive) - should cover the entire paragraph heading_level: Heading level 0-6 (0 = NORMAL_TEXT, 1 = H1, 2 = H2, etc.) Use for semantic document structure alignment: Text alignment - 'START' (left), 'CENTER', 'END' (right), or 'JUSTIFIED' line_spacing: Line spacing multiplier (1.0 = single, 1.5 = 1.5x, 2.0 = double) indent_first_line: First line indent in points (e.g., 36 for 0.5 inch) indent_start: Left/start indent in points indent_end: Right/end indent in points space_above: Space above paragraph in points (e.g., 12 for one line) space_below: Space below paragraph in points list_type: Create a list from existing paragraphs ('UNORDERED' for bullets, 'ORDERED' for numbers) list_nesting_level: Nesting level for lists (0-8, where 0 is top level, default is 0) Use higher levels for nested/indented list items Returns: str: Confirmation message with formatting details Examples: # Apply H1 heading style update_paragraph_style(document_id="...", start_index=1, end_index=20, heading_level=1) |
| get_doc_as_markdownA | Reads a Google Doc and returns it as clean Markdown with optional comment context. Unlike get_doc_content which returns plain text, this tool preserves document formatting as Markdown: headings, bold/italic/strikethrough, links, code spans, ordered/unordered lists with nesting, and tables. When comments are included (the default), each comment's anchor text — the specific text the comment was attached to — is preserved, giving full context for the discussion. Args: user_google_email: User's Google email address document_id: ID of the Google Doc (or full URL) include_comments: Whether to include comments (default: True) comment_mode: How to display comments: - "inline": Footnote-style references placed at the anchor text location (default) - "appendix": All comments grouped at the bottom with blockquoted anchor text - "none": No comments included include_resolved: Whether to include resolved comments (default: False) Returns: str: The document content as Markdown, optionally with comments |
| insert_doc_tabA | Inserts a new tab into a Google Doc. Args: user_google_email: User's Google email address document_id: ID of the document to update title: Title of the new tab index: Position index for the new tab (0-based among sibling tabs) parent_tab_id: Optional ID of a parent tab to nest the new tab under Returns: str: Confirmation message with document link |
| delete_doc_tabA | Deletes a tab from a Google Doc by its tab ID. Args: user_google_email: User's Google email address document_id: ID of the document to update tab_id: ID of the tab to delete (use inspect_doc_structure to find tab IDs) Returns: str: Confirmation message with document link |
| update_doc_tabA | Renames a tab in a Google Doc. Args: user_google_email: User's Google email address document_id: ID of the document to update tab_id: ID of the tab to rename (use inspect_doc_structure to find tab IDs) title: New title for the tab Returns: str: Confirmation message with document link |
| list_document_commentsC | List all comments from a Google Document. |
| manage_document_commentB | Manage comments on a Google Document. Actions:
|
| list_spreadsheetsA | Lists spreadsheets from Google Drive that the user has access to. Args: user_google_email (str): The user's Google email address. Required. max_results (int): Maximum number of spreadsheets to return. Defaults to 25. Returns: str: A formatted list of spreadsheet files (name, ID, modified time). |
| get_spreadsheet_infoA | Gets information about a specific spreadsheet including its sheets. Args: user_google_email (str): The user's Google email address. Required. spreadsheet_id (str): The ID of the spreadsheet to get info for. Required. Returns: str: Formatted spreadsheet information including title, locale, and sheets list. |
| read_sheet_valuesB | Reads values from a specific range in a Google Sheet. Args: user_google_email (str): The user's Google email address. Required. spreadsheet_id (str): The ID of the spreadsheet. Required. range_name (str): The range to read (e.g., "Sheet1!A1:D10", "A1:D10"). Defaults to "A1:Z1000". include_hyperlinks (bool): If True, also fetch hyperlink metadata for the range. Defaults to False to avoid expensive includeGridData requests. include_notes (bool): If True, also fetch cell notes for the range. Defaults to False to avoid expensive includeGridData requests. Returns: str: The formatted values from the specified range. |
| modify_sheet_valuesA | Modifies values in a specific range of a Google Sheet - can write, update, or clear values. Args: user_google_email (str): The user's Google email address. Required. spreadsheet_id (str): The ID of the spreadsheet. Required. range_name (str): The range to modify (e.g., "Sheet1!A1:D10", "A1:D10"). Required. values (Optional[Union[str, List[List[str]]]]): 2D array of values to write/update. Can be a JSON string or Python list. Required unless clear_values=True. value_input_option (str): How to interpret input values ("RAW" or "USER_ENTERED"). Defaults to "USER_ENTERED". clear_values (bool): If True, clears the range instead of writing values. Defaults to False. Returns: str: Confirmation message of the successful modification operation. |
| format_sheet_rangeA | Applies formatting to a range: colors, number formats, text wrapping, alignment, and text styling. Colors accept hex strings (#RRGGBB). Number formats follow Sheets types (e.g., NUMBER, CURRENCY, DATE, PERCENT). If no sheet name is provided, the first sheet is used. Args: user_google_email (str): The user's Google email address. Required. spreadsheet_id (str): The ID of the spreadsheet. Required. range_name (str): A1-style range (optionally with sheet name). Required. background_color (Optional[str]): Hex background color (e.g., "#FFEECC"). text_color (Optional[str]): Hex text color (e.g., "#000000"). number_format_type (Optional[str]): Sheets number format type (e.g., "DATE"). number_format_pattern (Optional[str]): Custom pattern for the number format. wrap_strategy (Optional[str]): Text wrap strategy - WRAP (wrap text within cell), CLIP (clip text at cell boundary), or OVERFLOW_CELL (allow text to overflow into adjacent empty cells). horizontal_alignment (Optional[str]): Horizontal text alignment - LEFT, CENTER, or RIGHT. vertical_alignment (Optional[str]): Vertical text alignment - TOP, MIDDLE, or BOTTOM. bold (Optional[bool]): Whether to apply bold formatting. italic (Optional[bool]): Whether to apply italic formatting. font_size (Optional[int]): Font size in points. Returns: str: Confirmation of the applied formatting. |
| manage_conditional_formattingA | Manages conditional formatting rules on a Google Sheet. Supports adding, updating, and deleting conditional formatting rules via a single tool. Args: user_google_email (str): The user's Google email address. Required. spreadsheet_id (str): The ID of the spreadsheet. Required. action (str): The operation to perform. Must be one of "add", "update", or "delete". range_name (Optional[str]): A1-style range (optionally with sheet name). Required for "add". Optional for "update" (preserves existing ranges if omitted). Not used for "delete". condition_type (Optional[str]): Sheets condition type (e.g., NUMBER_GREATER, TEXT_CONTAINS, DATE_BEFORE, CUSTOM_FORMULA). Required for "add". Optional for "update" (preserves existing type if omitted). condition_values (Optional[Union[str, List[Union[str, int, float]]]]): Values for the condition; accepts a list or a JSON string representing a list. Depends on condition_type. Used by "add" and "update". background_color (Optional[str]): Hex background color to apply when condition matches. Used by "add" and "update". text_color (Optional[str]): Hex text color to apply when condition matches. Used by "add" and "update". rule_index (Optional[int]): 0-based index of the rule. For "add", optionally specifies insertion position. Required for "update" and "delete". gradient_points (Optional[Union[str, List[dict]]]): List (or JSON list) of gradient points for a color scale. If provided, a gradient rule is created and boolean parameters are ignored. Used by "add" and "update". sheet_name (Optional[str]): Sheet name to locate the rule when range_name is omitted. Defaults to the first sheet. Used by "update" and "delete". Returns: str: Confirmation of the operation and the current rule state. |
| create_spreadsheetA | Creates a new Google Spreadsheet. Args: user_google_email (str): The user's Google email address. Required. title (str): The title of the new spreadsheet. Required. sheet_names (Optional[List[str]]): List of sheet names to create. If not provided, creates one sheet with default name. Returns: str: Information about the newly created spreadsheet including ID, URL, and locale. |
| create_sheetA | Creates a new sheet within an existing spreadsheet. Args: user_google_email (str): The user's Google email address. Required. spreadsheet_id (str): The ID of the spreadsheet. Required. sheet_name (str): The name of the new sheet. Required. Returns: str: Confirmation message of the successful sheet creation. |
| list_spreadsheet_commentsB | List all comments from a Google Spreadsheet. |
| manage_spreadsheet_commentA | Manage comments on a Google Spreadsheet. Actions:
|
| list_spacesB | Lists Google Chat spaces (rooms and direct messages) accessible to the user. Returns: str: A formatted list of Google Chat spaces accessible to the user. |
| get_messagesC | Retrieves messages from a Google Chat space. Returns: str: Formatted messages from the specified space. |
| send_messageB | Sends a message to a Google Chat space. Args: thread_name: Reply in an existing thread by its resource name (e.g. spaces/X/threads/Y). thread_key: Reply in a thread by app-defined key (creates thread if not found). Returns: str: Confirmation message with sent message details. |
| search_messagesC | Searches for messages in Google Chat spaces by text content. Returns: str: A formatted list of messages matching the search query. |
| create_reactionB | Adds an emoji reaction to a Google Chat message. Args: message_id: The message resource name (e.g. spaces/X/messages/Y). emoji_unicode: The emoji character to react with (e.g. 👍). Returns: str: Confirmation message. |
| download_chat_attachmentA | Downloads an attachment from a Google Chat message and saves it to local disk. In stdio mode, returns the local file path for direct access. In HTTP mode, returns a temporary download URL (valid for 1 hour). Args: message_id: The message resource name (e.g. spaces/X/messages/Y). attachment_index: Zero-based index of the attachment to download (default 0). Returns: str: Attachment metadata with either a local file path or download URL. |
| create_formB | Create a new form using the title given in the provided form message in the request. Args: user_google_email (str): The user's Google email address. Required. title (str): The title of the form. description (Optional[str]): The description of the form. document_title (Optional[str]): The document title (shown in browser tab). Returns: str: Confirmation message with form ID and edit URL. |
| get_formA | Get a form. Args: user_google_email (str): The user's Google email address. Required. form_id (str): The ID of the form to retrieve. Returns: str: Form details including title, description, questions, and URLs. |
| set_publish_settingsB | Updates the publish settings of a form. Args: user_google_email (str): The user's Google email address. Required. form_id (str): The ID of the form to update publish settings for. publish_as_template (bool): Whether to publish as a template. Defaults to False. require_authentication (bool): Whether to require authentication to view/submit. Defaults to False. Returns: str: Confirmation message of the successful publish settings update. |
| get_form_responseA | Get one response from the form. Args: user_google_email (str): The user's Google email address. Required. form_id (str): The ID of the form. response_id (str): The ID of the response to retrieve. Returns: str: Response details including answers and metadata. |
| list_form_responsesA | List a form's responses. Args: user_google_email (str): The user's Google email address. Required. form_id (str): The ID of the form. page_size (int): Maximum number of responses to return. Defaults to 10. page_token (Optional[str]): Token for retrieving next page of results. Returns: str: List of responses with basic details and pagination info. |
| batch_update_formA | Apply batch updates to a Google Form. Supports adding, updating, and deleting form items, as well as updating form metadata and settings. This is the primary method for modifying form content after creation. Args: user_google_email (str): The user's Google email address. Required. form_id (str): The ID of the form to update. requests (List[Dict[str, Any]]): List of update requests to apply. Supported request types: - createItem: Add a new question or content item - updateItem: Modify an existing item - deleteItem: Remove an item - moveItem: Reorder an item - updateFormInfo: Update form title/description - updateSettings: Modify form settings (e.g., quiz mode) Returns: str: Details about the batch update operation results. |
| create_presentationA | Create a new Google Slides presentation. Args: user_google_email (str): The user's Google email address. Required. title (str): The title for the new presentation. Defaults to "Untitled Presentation". Returns: str: Details about the created presentation including ID and URL. |
| get_presentationA | Get details about a Google Slides presentation. Args: user_google_email (str): The user's Google email address. Required. presentation_id (str): The ID of the presentation to retrieve. Returns: str: Details about the presentation including title, slides count, and metadata. |
| batch_update_presentationC | Apply batch updates to a Google Slides presentation. Args: user_google_email (str): The user's Google email address. Required. presentation_id (str): The ID of the presentation to update. requests (List[Dict[str, Any]]): List of update requests to apply. Returns: str: Details about the batch update operation results. |
| get_pageA | Get details about a specific page (slide) in a presentation. Args: user_google_email (str): The user's Google email address. Required. presentation_id (str): The ID of the presentation. page_object_id (str): The object ID of the page/slide to retrieve. Returns: str: Details about the specific page including elements and layout. |
| get_page_thumbnailA | Generate a thumbnail URL for a specific page (slide) in a presentation. Args: user_google_email (str): The user's Google email address. Required. presentation_id (str): The ID of the presentation. page_object_id (str): The object ID of the page/slide. thumbnail_size (str): Size of thumbnail ("LARGE", "MEDIUM", "SMALL"). Defaults to "MEDIUM". Returns: str: URL to the generated thumbnail image. |
| list_presentation_commentsB | List all comments from a Google Presentation. |
| manage_presentation_commentA | Manage comments on a Google Presentation. Actions:
|
| list_task_listsA | List all task lists for the user. Args: user_google_email (str): The user's Google email address. Required. max_results (int): Maximum number of task lists to return (default: 1000, max: 1000). page_token (Optional[str]): Token for pagination. Returns: str: List of task lists with their IDs, titles, and details. |
| get_task_listA | Get details of a specific task list. Args: user_google_email (str): The user's Google email address. Required. task_list_id (str): The ID of the task list to retrieve. Returns: str: Task list details including title, ID, and last updated time. |
| manage_task_listA | Manage task lists: create, update, delete, or clear completed tasks. Args: user_google_email (str): The user's Google email address. Required. action (str): The action to perform. Must be one of: "create", "update", "delete", "clear_completed". task_list_id (Optional[str]): The ID of the task list. Required for "update", "delete", and "clear_completed" actions. title (Optional[str]): The title for the task list. Required for "create" and "update" actions. Returns: str: Result of the requested action. |
| list_tasksA | List all tasks in a specific task list. Args: user_google_email (str): The user's Google email address. Required. task_list_id (str): The ID of the task list to retrieve tasks from. max_results (int): Maximum number of tasks to return. (default: 20, max: 10000). page_token (Optional[str]): Token for pagination. show_completed (bool): Whether to include completed tasks (default: True). Note that show_hidden must also be true to show tasks completed in first party clients, such as the web UI and Google's mobile apps. show_deleted (bool): Whether to include deleted tasks (default: False). show_hidden (bool): Whether to include hidden tasks (default: False). show_assigned (bool): Whether to include assigned tasks (default: False). completed_max (Optional[str]): Upper bound for completion date (RFC 3339 timestamp). completed_min (Optional[str]): Lower bound for completion date (RFC 3339 timestamp). due_max (Optional[str]): Upper bound for due date (RFC 3339 timestamp). due_min (Optional[str]): Lower bound for due date (RFC 3339 timestamp). updated_min (Optional[str]): Lower bound for last modification time (RFC 3339 timestamp). Returns: str: List of tasks with their details. |
| get_taskA | Get details of a specific task. Args: user_google_email (str): The user's Google email address. Required. task_list_id (str): The ID of the task list containing the task. task_id (str): The ID of the task to retrieve. Returns: str: Task details including title, notes, status, due date, etc. |
| manage_taskA | Manage tasks: create, update, delete, or move tasks within task lists. Args: user_google_email (str): The user's Google email address. Required. action (str): The action to perform. Must be one of: "create", "update", "delete", "move". task_list_id (str): The ID of the task list. Required for all actions. task_id (Optional[str]): The ID of the task. Required for "update", "delete", and "move" actions. title (Optional[str]): The title of the task. Required for "create", optional for "update". notes (Optional[str]): Notes/description for the task. Used by "create" and "update" actions. status (Optional[str]): Task status ("needsAction" or "completed"). Used by "update" action. due (Optional[str]): Due date in RFC 3339 format (e.g., "2024-12-31T23:59:59Z"). Used by "create" and "update" actions. parent (Optional[str]): Parent task ID (for subtasks). Used by "create" and "move" actions. previous (Optional[str]): Previous sibling task ID (for positioning). Used by "create" and "move" actions. destination_task_list (Optional[str]): Destination task list ID (for moving between lists). Used by "move" action. Returns: str: Result of the requested action. |
| list_contactsA | List contacts for the authenticated user. Args: user_google_email (str): The user's Google email address. Required. page_size (int): Maximum number of contacts to return (default: 100, max: 1000). page_token (Optional[str]): Token for pagination. sort_order (Optional[str]): Sort order: "LAST_MODIFIED_ASCENDING", "LAST_MODIFIED_DESCENDING", "FIRST_NAME_ASCENDING", or "LAST_NAME_ASCENDING". Returns: str: List of contacts with their basic information. |
| get_contactB | Get detailed information about a specific contact. Args: user_google_email (str): The user's Google email address. Required. contact_id (str): The contact ID (e.g., "c1234567890" or full resource name "people/c1234567890"). Returns: str: Detailed contact information. |
| search_contactsA | Search contacts by name, email, phone number, or other fields. Args: user_google_email (str): The user's Google email address. Required. query (str): Search query string (searches names, emails, phone numbers). page_size (int): Maximum number of results to return (default: 30, max: 30). Returns: str: Matching contacts with their basic information. |
| manage_contactA | Create, update, or delete a contact. Consolidated tool replacing create_contact, update_contact, and delete_contact. Args: user_google_email (str): The user's Google email address. Required. action (str): The action to perform: "create", "update", or "delete". contact_id (Optional[str]): The contact ID. Required for "update" and "delete" actions. given_name (Optional[str]): First name (for create/update). family_name (Optional[str]): Last name (for create/update). email (Optional[str]): Email address (for create/update). phone (Optional[str]): Phone number (for create/update). organization (Optional[str]): Company/organization name (for create/update). job_title (Optional[str]): Job title (for create/update). notes (Optional[str]): Additional notes (for create/update). Returns: str: Result of the action performed. |
| list_contact_groupsA | List contact groups (labels) for the user. Args: user_google_email (str): The user's Google email address. Required. page_size (int): Maximum number of groups to return (default: 100, max: 1000). page_token (Optional[str]): Token for pagination. Returns: str: List of contact groups with their details. |
| get_contact_groupA | Get details of a specific contact group including its members. Args: user_google_email (str): The user's Google email address. Required. group_id (str): The contact group ID. max_members (int): Maximum number of members to return (default: 100, max: 1000). Returns: str: Contact group details including members. |
| manage_contacts_batchA | Batch create, update, or delete contacts. Consolidated tool replacing batch_create_contacts, batch_update_contacts, and batch_delete_contacts. Args: user_google_email (str): The user's Google email address. Required. action (str): The action to perform: "create", "update", or "delete". contacts (Optional[List[Dict[str, str]]]): List of contact dicts for "create" action. Each dict may contain: given_name, family_name, email, phone, organization, job_title. updates (Optional[List[Dict[str, str]]]): List of update dicts for "update" action. Each dict must contain contact_id and may contain: given_name, family_name, email, phone, organization, job_title. contact_ids (Optional[List[str]]): List of contact IDs for "delete" action. Returns: str: Result of the batch action performed. |
| manage_contact_groupA | Create, update, delete a contact group, or modify its members. Consolidated tool replacing create_contact_group, update_contact_group, delete_contact_group, and modify_contact_group_members. Args: user_google_email (str): The user's Google email address. Required. action (str): The action to perform: "create", "update", "delete", or "modify_members". group_id (Optional[str]): The contact group ID. Required for "update", "delete", and "modify_members" actions. name (Optional[str]): The group name. Required for "create" and "update" actions. delete_contacts (bool): If True and action is "delete", also delete contacts in the group (default: False). add_contact_ids (Optional[List[str]]): Contact IDs to add (for "modify_members"). remove_contact_ids (Optional[List[str]]): Contact IDs to remove (for "modify_members"). Returns: str: Result of the action performed. |
| search_customA | Performs a search using Google Custom Search JSON API. Args: user_google_email (str): The user's Google email address. Required. q (str): The search query. Required. num (int): Number of results to return (1-10). Defaults to 10. start (int): The index of the first result to return (1-based). Defaults to 1. safe (Literal["active", "moderate", "off"]): Safe search level. Defaults to "off". search_type (Optional[Literal["image"]]): Search for images if set to "image". site_search (Optional[str]): Restrict search to a specific site/domain. site_search_filter (Optional[Literal["e", "i"]]): Exclude ("e") or include ("i") site_search results. date_restrict (Optional[str]): Restrict results by date (e.g., "d5" for past 5 days, "m3" for past 3 months). file_type (Optional[str]): Filter by file type (e.g., "pdf", "doc"). language (Optional[str]): Language code for results (e.g., "lang_en"). country (Optional[str]): Country code for results (e.g., "countryUS"). sites (Optional[List[str]]): List of sites/domains to restrict search to (e.g., ["example.com", "docs.example.com"]). When provided, results are limited to these sites. Returns: str: Formatted search results including title, link, and snippet for each result. |
| get_search_engine_infoA | Retrieves metadata about a Programmable Search Engine. Args: user_google_email (str): The user's Google email address. Required. Returns: str: Information about the search engine including its configuration and available refinements. |
| list_script_projectsA | Lists Google Apps Script projects accessible to the user. Uses Drive API to find Apps Script files. Args: service: Injected Google API service client user_google_email: User's email address page_size: Number of results per page (default: 50) page_token: Token for pagination (optional) Returns: str: Formatted list of script projects |
| get_script_projectB | Retrieves complete project details including all source files. Args: service: Injected Google API service client user_google_email: User's email address script_id: The script project ID Returns: str: Formatted project details with all file contents |
| get_script_contentA | Retrieves content of a specific file within a project. Args: service: Injected Google API service client user_google_email: User's email address script_id: The script project ID file_name: Name of the file to retrieve Returns: str: File content as string |
| create_script_projectA | Creates a new Apps Script project. Args: service: Injected Google API service client user_google_email: User's email address title: Project title parent_id: Optional Drive folder ID or bound container ID Returns: str: Formatted string with new project details |
| update_script_contentA | Updates or creates files in a script project. Args: service: Injected Google API service client user_google_email: User's email address script_id: The script project ID files: List of file objects with name, type, and source Returns: str: Formatted string confirming update with file list |
| run_script_functionA | Executes a function in a deployed script. Args: service: Injected Google API service client user_google_email: User's email address script_id: The script project ID function_name: Name of function to execute parameters: Optional list of parameters to pass dev_mode: Whether to run latest code vs deployed version Returns: str: Formatted string with execution result or error |
| manage_deploymentB | Manages Apps Script deployments. Supports creating, updating, and deleting deployments. Args: service: Injected Google API service client user_google_email: User's email address action: Action to perform - "create", "update", or "delete" script_id: The script project ID deployment_id: The deployment ID (required for update and delete) description: Deployment description (required for create and update) version_description: Optional version description (for create only) Returns: str: Formatted string with deployment details or confirmation |
| list_deploymentsA | Lists all deployments for a script project. Args: service: Injected Google API service client user_google_email: User's email address script_id: The script project ID Returns: str: Formatted string with deployment list |
| list_script_processesA | Lists recent execution processes for user's scripts. Args: service: Injected Google API service client user_google_email: User's email address page_size: Number of results (default: 50) script_id: Optional filter by script ID Returns: str: Formatted string with process list |
| delete_script_projectA | Deletes an Apps Script project. This permanently deletes the script project. The action cannot be undone. Args: service: Injected Google API service client user_google_email: User's email address script_id: The script project ID to delete Returns: str: Confirmation message |
| list_versionsA | Lists all versions of a script project. Versions are immutable snapshots of your script code. They are created when you deploy or explicitly create a version. Args: service: Injected Google API service client user_google_email: User's email address script_id: The script project ID Returns: str: Formatted string with version list |
| create_versionA | Creates a new immutable version of a script project. Versions capture a snapshot of the current script code. Once created, versions cannot be modified. Args: service: Injected Google API service client user_google_email: User's email address script_id: The script project ID description: Optional description for this version Returns: str: Formatted string with new version details |
| get_versionA | Gets details of a specific version. Args: service: Injected Google API service client user_google_email: User's email address script_id: The script project ID version_number: The version number to retrieve (1, 2, 3, etc.) Returns: str: Formatted string with version details |
| get_script_metricsA | Gets execution metrics for a script project. Returns analytics data including active users, total executions, and failed executions over time. Args: service: Injected Google API service client user_google_email: User's email address script_id: The script project ID metrics_granularity: Granularity of metrics - "DAILY" or "WEEKLY" Returns: str: Formatted string with metrics data |
| generate_trigger_codeA | Generates Apps Script code for creating triggers. The Apps Script API cannot create triggers directly - they must be created from within Apps Script itself. This tool generates the code you need. Args: trigger_type: Type of trigger. One of: - "time_minutes" (run every N minutes: 1, 5, 10, 15, 30) - "time_hours" (run every N hours: 1, 2, 4, 6, 8, 12) - "time_daily" (run daily at a specific hour: 0-23) - "time_weekly" (run weekly on a specific day) - "on_open" (simple trigger - runs when document opens) - "on_edit" (simple trigger - runs when user edits) - "on_form_submit" (runs when form is submitted) - "on_change" (runs when content changes) Returns: str: Apps Script code to create the trigger |
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 114 tools
Multiple tools overlap significantly: list_drive_items and search_drive_files both list Drive files with similar filters, several Drive permission tools (get_drive_file_permissions, get_drive_shareable_link, check_drive_file_public_access, manage_drive_access, set_drive_file_permissions) cover the same sharing territory, and batch_update_doc duplicates modify_doc_text, find_and_replace_doc, insert_doc_elements, and tab management. While individual descriptions are detailed, an agent would often struggle to pick the right tool among these overlapping options.
Tool names are mostly snake_case with a verb_noun structure, but service prefixes are applied inconsistently: compare search_gmail_messages with generic search_messages and search_custom, or send_gmail_message with send_message. There is also a mixture of manage_*, modify_*, batch_update_*, and create_* patterns that, while readable, creates no strong predictable convention across the full set.
With 114 tools, this far exceeds the 50+ threshold for an extreme mismatch. The suite spans many Google services, but the count is bloated by redundant tools (batch_update_doc vs individual doc editors, overlapping Drive permission tools, manage_contact vs manage_contacts_batch) and would be far more usable split into per-service MCP servers.
Across the covered Google services, lifecycle coverage is generally strong: Gmail, Drive, Docs, Sheets, Calendar, Chat, Forms, Slides, Tasks, Contacts, Custom Search, and Apps Script all have read and write operations. Notable gaps exist—no calendar create/delete, no sheet deletion/rename, no permanent Drive delete—but these can often be worked around via existing tools like update_drive_file or Drive trash.