Gmail Multi-Inbox MCP Server (tszaks/ghub) is an MCP server listed on the M8ven Trust Index. It scores 58 out of 100, grade D. It declares 60 tools. No publisher has claimed this listing.
Enables AI assistants to manage multiple Gmail accounts simultaneously with built-in OAuth authentication, supporting email reading, sending, drafts, labels, and account management.
Caution. Specific findings reduced this grade. They are listed on the page. Grades reflect the full trust pyramid: code, verification depth, and reputation. New projects cap at C until adoption is earned.
How we verified
Verified is a snapshot. Live keeps it current, and builds your track record.
⚡ Connect GitHub → continuous verification on every pushwhy connect →Who stands behind it
tszaks
Source: Glama
Claim it to get a verified publisher badge, a free copy of our full audit findings, and direct contact for any high-priority issues we find. Or connect your repo for our deepest verification, Live Monitored: read-only, revoke anytime. What we access →
Install from
The grade above is for the source repository. Registries can serve a different version, so we mark the ones we were not able to read.
These names and descriptions are the publisher's own, read from the source code. We print them as written. Our assessment is the findings above, not this list.
list_accountsList all configured Gmail inbox accounts and their authentication/health status.
read_emailsRead emails from one account or aggregate across all enabled accounts when account is omitted.
search_emailsSearch Gmail using query syntax. Omitting account searches all enabled inboxes and merges results.
search_drive_filesSearch Google Drive file metadata. Omitting account searches all enabled accounts and merges results.
get_email_threadGet 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_labelsList labels for one account (account required).
mark_as_readMark messages as read in one account (account required).
add_labelsAdd labels to messages in one account (account required).
remove_labelsRemove labels from messages in one account (account required).
archive_emailsArchive messages in one account by removing INBOX label (account required).
trash_emailsMove messages to trash in one account (account required).
create_labelCreate a new Gmail label in one account (account required).
delete_labelDelete a Gmail label in one account (account required).
block_senderBlock 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_sendersList 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_senderRemove a Gmail filter. Specify either filter_id (exact match) or sender (matches filters whose "from" criteria equals this value).
unsubscribe_from_emailUnsubscribe 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_threadMute 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_draftCreate a draft email in one account (account required).
delete_draftsPermanently delete one or more drafts in one account (account required). Draft IDs are returned by create_draft or list_drafts.
send_draftSend an existing Gmail draft by draft ID. Returns message_id and thread_id. Use list_drafts to find draft IDs sorted oldest-first.
list_draftsList 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_draftsSearch 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_emailSend an email from one account (account required).
begin_account_authStart OAuth onboarding for an account. Accepts credentials JSON or a path to credentials.json.
finish_account_authComplete OAuth onboarding by exchanging authorization code and storing token.json.
get_attachmentFetch 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, D…
get_all_attachmentsCall 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-att…
list_drive_filesList Google Drive files. Omitting account aggregates across all enabled accounts. Optionally filter by folder or text query.
get_drive_fileGet full metadata for a specific Google Drive file including size, parents, export links.
get_drive_file_contentDownload 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_fileUpload a local file to Google Drive.
create_drive_folderCreate a new folder in Google Drive.
update_drive_fileUpdate a Drive file — rename it, move it between folders, star/unstar, or update its description.
trash_drive_fileMove a Google Drive file to trash.
share_drive_fileShare a Google Drive file by adding a permission.
sheets_getGet Google Sheets spreadsheet metadata: title, sheet tabs, row/column counts.
sheets_readRead cell values from a Google Sheet range (e.g., "Sheet1!A1:D10" or "A1:D10" for the first sheet).
sheets_writeWrite values to a Google Sheet range. Overwrites existing values in the specified range.
sheets_appendAppend rows to a Google Sheet after the last row with data.
sheets_createCreate a new Google Sheets spreadsheet.
sheets_add_tabAdd a new sheet tab to an existing spreadsheet.
sheets_rename_tabRename a sheet tab in a spreadsheet.
sheets_delete_tabDelete a sheet tab from a spreadsheet.
sheets_formatApply formatting to a range of cells: bold, italic, font size, background/text color, alignment, number format, wrap strategy.
sheets_add_chartCreate a chart in a Google Sheet from a data range.
sheets_insert_dimensionInsert rows or columns into a sheet at a specified position.
sheets_delete_dimensionDelete rows or columns from a sheet.
docs_getGet the full text content and title of a Google Doc.
docs_createCreate a new Google Doc.
docs_appendAppend text to the end of a Google Doc. Optionally apply a heading style and bold/italic.
docs_replace_textFind and replace all occurrences of text throughout a Google Doc.
docs_insert_tableInsert an empty table at the end of a Google Doc.
docs_apply_styleApply a heading or paragraph style to a text range in a Google Doc by character indices.
list_calendarsList all Google Calendars for one or all enabled accounts.
list_eventsList calendar events. Omitting account aggregates across all enabled accounts. Supports time range and text search.
get_eventGet full details of a single calendar event.
create_eventCreate a new calendar event. Use start_date_time/end_date_time for timed events or start_date/end_date for all-day events.
update_eventUpdate an existing calendar event. Only provided fields are changed.
delete_eventDelete a calendar event.
Disclosed vulnerabilities in this server's declared npm dependencies (via OSV). Whether each is reachable depends on the installed versions.
@modelcontextprotocol/sdk has cross-client data leak via shared server/transport instance reuse
Prototype Pollution in sheetJS
SheetJS Regular Expression Denial of Service (ReDoS)
Mammoth is vulnerable to Directory Traversal
GMAILMCPCONFIG_DIR"": "/custom/path/.gmail-multi-mcp"GMAIL_MCP_CONFIG_DIRThe server also accepts the legacy env var.HOSTMCP_ATTACHMENTS_DIRMCP_TRANSPORTSet =sse to force HTTP/SSE mode.PORTTool annotations
No tools have read-only/destructive annotations
Add readOnlyHint or destructiveHint annotations to every tool so hosts can warn users before invoking.
All four hints declared on every tool
60/60 tools missing one or more hints — list_accounts (missing: readOnlyHint, destructiveHint, idempotentHint, openWorldHint); read_emails (missing: readOnlyHint, destructiveHint, idempotentHint, openWorldHint); search_emails (missing: readOnlyHint, destructiveHint, idempotentHint, openWorldHint), +57 more. OpenAI's directory rejects tools where any of the four hints are missing or non-boolean.
For every tool, set all four hints (readOnlyHint, destructiveHint, idempotentHint, openWorldHint) to explicit true/false values that match the handler’s actual behaviour.
Tests exist
No test files found
Add tests that exercise each declared tool.
No arbitrary install scripts
Has postinstall/preinstall script — runs arbitrary code on npm install
Remove postinstall/preinstall hooks unless they’re essential.
Production dependencies are patched
0 critical, 3 high severity in production deps — @modelcontextprotocol/sdk@1.25.2 (high), xlsx@0.18.5 (high)
Run npm audit fix, or upgrade the affected packages to a non-vulnerable version.
Claim the listing to review these findings one by one and send us a correction where you disagree, straight to the team. Claiming also means we tell you when the grade moves, and reach you first if we find anything urgent.
[](https://m8ven.ai/mcp/tszaks/ghub)?variant=verified from the URL.Vetting this one by hand? Tool Check is an MCP that scores other MCPs. Add it once and ask Claude, ChatGPT, or any MCP client to grade a server, surface CVEs, check the publisher, and suggest safer alternatives — before you install.
https://m8ven.ai/api/mcp/tool-check