Gmail Multi-Inbox MCP Server
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| PORT | No | Port for SSE mode (automatically switches to SSE if present) | |
| MCP_TRANSPORT | No | Force HTTP/SSE mode (set to 'sse') | |
| GMAILMCPCONFIG_DIR | No | Custom directory for storing account data | |
| GMAIL_MCP_CONFIG_DIR | No | Legacy custom directory for storing account data |
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 | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| list_accountsA | List all configured Gmail inbox accounts and their authentication/health status. |
| read_emailsB | Read emails from one account or aggregate across all enabled accounts when account is omitted. |
| search_emailsA | Search Gmail using query syntax. Omitting account searches all enabled inboxes and merges results. |
| search_drive_filesA | Search Google Drive file metadata. Omitting account searches all enabled accounts and merges results. |
| get_email_threadA | Get a full email thread for one account (account required). Each message lists attachment metadata (filename, attachment_id, size). To read attachment content — PDF text, DOCX, XLSX, images via OCR — call get_all_attachments with the Gmail message ID shown as "Gmail ID" in each message. |
| get_labelsA | List labels for one account (account required). |
| mark_as_readB | Mark messages as read in one account (account required). |
| add_labelsB | Add labels to messages in one account (account required). |
| remove_labelsA | Remove labels from messages in one account (account required). |
| archive_emailsA | Archive messages in one account by removing INBOX label (account required). |
| trash_emailsB | Move messages to trash in one account (account required). |
| create_labelB | Create a new Gmail label in one account (account required). |
| delete_labelB | Delete a Gmail label in one account (account required). |
| block_senderA | Block a sender by creating a Gmail filter (same mechanism as Gmail's native "Block" button). Optionally also trashes existing mail from that sender. |
| list_blocked_sendersA | List all Gmail filters for an account. Use to find filter_id for unblock_sender, or to audit what is being auto-trashed/archived/spammed. |
| unblock_senderA | Remove a Gmail filter. Specify either filter_id (exact match) or sender (matches filters whose "from" criteria equals this value). |
| unsubscribe_from_emailA | Unsubscribe from a mailing list by invoking the List-Unsubscribe header (RFC 2369/8058). Same mechanism as Gmail's native "Unsubscribe" button. Falls back to mailto:. Returns method used. |
| mute_threadA | Mute a conversation: archives the thread now and (with scope="subject") installs a subject-based filter so future replies auto-archive. Approximates Gmail's client-side mute. |
| create_draftB | Create a draft email in one account (account required). |
| delete_draftsA | Permanently delete one or more drafts in one account (account required). Draft IDs are returned by create_draft or list_drafts. |
| send_draftA | Send an existing Gmail draft by draft ID. Returns message_id and thread_id. Use list_drafts to find draft IDs sorted oldest-first. |
| list_draftsA | List drafts in an account sorted oldest-first by internalDate. Returns draft_id (for send_draft/delete_drafts), message_id, thread_id, subject, to, and internalDate. |
| search_draftsA | Search drafts by Gmail query string. Returns draft_id (for send_draft/delete_drafts), message_id, thread_id, subject, to, and snippet. Use instead of search_emails when you need to delete or send a found draft. |
| send_emailC | Send an email from one account (account required). |
| begin_account_authB | Start OAuth onboarding for an account. Accepts credentials JSON or a path to credentials.json. |
| finish_account_authA | Complete OAuth onboarding by exchanging authorization code and storing token.json. |
| get_attachmentA | Fetch a single attachment by id. Use when you only need one specific file. For all attachments at once, use get_all_attachments instead. Requires the Gmail message ID ("Gmail ID" from get_email_thread) and the attachment_id. Saves to ~/Downloads/mcp-attachments/ and returns extracted text for PDF, DOCX, XLSX, PPTX, text, and images via OCR. |
| get_all_attachmentsA | Call this whenever a thread or email shows attachments. Fetches and extracts content from all attachments in one shot: PDF (text extraction), DOCX, XLSX, PPTX, images (OCR). Use the Gmail message ID ("Gmail ID" from get_email_thread output) — NOT the thread ID. Saves each file to ~/Downloads/mcp-attachments/ and returns extracted text. |
| list_drive_filesA | List Google Drive files. Omitting account aggregates across all enabled accounts. Optionally filter by folder or text query. |
| get_drive_fileA | Get full metadata for a specific Google Drive file including size, parents, export links. |
| get_drive_file_contentA | Download a Drive file and extract its text content. Google Docs/Sheets/Slides are exported to Office formats then parsed. PDFs, images, and text files are also supported. |
| upload_drive_fileB | Upload a local file to Google Drive. |
| create_drive_folderC | Create a new folder in Google Drive. |
| update_drive_fileB | Update a Drive file — rename it, move it between folders, star/unstar, or update its description. |
| trash_drive_fileB | Move a Google Drive file to trash. |
| share_drive_fileA | Share a Google Drive file by adding a permission. |
| sheets_getA | Get Google Sheets spreadsheet metadata: title, sheet tabs, row/column counts. |
| sheets_readA | Read cell values from a Google Sheet range (e.g., "Sheet1!A1:D10" or "A1:D10" for the first sheet). |
| sheets_writeA | Write values to a Google Sheet range. Overwrites existing values in the specified range. |
| sheets_appendA | Append rows to a Google Sheet after the last row with data. |
| sheets_createA | Create a new Google Sheets spreadsheet. |
| sheets_add_tabB | Add a new sheet tab to an existing spreadsheet. |
| sheets_rename_tabB | Rename a sheet tab in a spreadsheet. |
| sheets_delete_tabB | Delete a sheet tab from a spreadsheet. |
| sheets_formatB | Apply formatting to a range of cells: bold, italic, font size, background/text color, alignment, number format, wrap strategy. |
| sheets_add_chartB | Create a chart in a Google Sheet from a data range. |
| sheets_insert_dimensionB | Insert rows or columns into a sheet at a specified position. |
| sheets_delete_dimensionB | Delete rows or columns from a sheet. |
| docs_getA | Get the full text content and title of a Google Doc. |
| docs_createB | Create a new Google Doc. |
| docs_appendA | Append text to the end of a Google Doc. Optionally apply a heading style and bold/italic. |
| docs_replace_textB | Find and replace all occurrences of text throughout a Google Doc. |
| docs_insert_tableA | Insert an empty table at the end of a Google Doc. |
| docs_apply_styleB | Apply a heading or paragraph style to a text range in a Google Doc by character indices. |
| list_calendarsA | List all Google Calendars for one or all enabled accounts. |
| list_eventsA | List calendar events. Omitting account aggregates across all enabled accounts. Supports time range and text search. |
| get_eventB | Get full details of a single calendar event. |
| create_eventA | Create a new calendar event. Use start_date_time/end_date_time for timed events or start_date/end_date for all-day events. |
| update_eventA | Update an existing calendar event. Only provided fields are changed. |
| delete_eventB | Delete a calendar event. |
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 60 tools
Most tools target distinct resources and actions, with clear descriptions differentiating similar ones (e.g., read_emails vs search_emails, get_attachment vs get_all_attachments). Some minor ambiguity exists, such as list_blocked_senders actually listing all filters, but overall boundaries are clear.
Tool names generally follow a verb_noun pattern, but conventions vary: some use service prefixes (sheets_create, docs_get), while others are unprefixed (list_accounts, send_email). Singular/plural inconsistency (list_drive_files vs get_drive_file) and mixed styles like 'get_drive_file_content' vs 'sheets_read' reduce predictability.
60 tools is excessive for a server named 'Gmail Multi-Inbox', as it includes Drive, Sheets, Docs, and Calendar. Even as a broader Google Workspace toolkit, the count is heavy and may overwhelm agents, though it does support a wide range of operations.
The Gmail surface is thoroughly covered (read, search, threads, labels, drafts, send, attachments, block/unblock, unsubscribe, mute). Other services are also well-covered, with minor gaps like no permanent Drive delete and no Docs delete. Core workflows have no dead ends.