Skip to content
Agentmart
Submit a tool

Multi-account MCP for Gmail, Calendar, Drive, Docs, and Sheets — 61 tools, token

Multi-account MCP for Gmail, Calendar, Drive, Docs, and Sheets — 61 tools, token-efficient, macOS…

Connector by adelaidasofia · GitHub account verified by the MCP Registry

IndexedMITLocal (stdio)★ 3
Write a review

Install

Works with Claude Desktop. Read the repository before you give any tool access to your data.

Download the bundle

MCP bundle (.mcpb): open it with Claude Desktop.

Get the weekly diff

The weekly diff: one email a week with new agent tools, notable updates and grade changes, plus security alerts for tools you follow. Double opt-in, one-click unsubscribe.

We use your email only for this newsletter. Privacy

About

Multi-account MCP for Gmail, Calendar, Drive, Docs, and Sheets — 61 tools, token-efficient, macOS…

No reviews yet. Installed it? Reviews come from verified installers only. How reviews work

Permissions

What this server can do and what it asks for, from its tool list, install config and code. Checked Oct 25, 2026.

Tools
18 read · 34 write · 8 delete · 3 not yet classified
Secrets
None asked for
Install scripts
None found
Runs as
Downloaded binary

Tools by what they do 63

Read from the source code; the running server may list different tools.

Read 18 · Look things up without changing anything.

  • cal_freebusy
  • cal_list_calendars
  • cal_list_events
  • docs_read
  • docs_suggestions_list
  • drive_list_folder
  • drive_permission_list
  • drive_read_file
  • drive_search
  • gmail_attachments_list
  • gmail_read
  • gmail_search
Show 6 more tools
  • gmail_sendas_list
  • gws_account_list
  • sheets_batch_read
  • sheets_list_sheets
  • sheets_named_ranges_list
  • sheets_read_range

Write 34 · Create, change, send or run things.

  • cal_create_event
  • cal_update_event
  • docs_append
  • docs_create
  • docs_insert_at
  • docs_replace_text
  • docs_suggestions_accept_all
  • docs_suggestions_reject_all
  • drive_comment_add
  • drive_comment_reply
  • drive_comment_resolve
  • drive_comments_list
Show 22 more tools
  • drive_create_folder
  • drive_move
  • drive_permission_update
  • drive_rename
  • drive_share
  • drive_shared_drives_list
  • drive_untrash
  • drive_upload
  • gmail_attachment_save
  • gmail_draft
  • gmail_labels_list
  • gmail_reply
  • gmail_send
  • gmail_trash
  • gws_account_add
  • sheets_add_sheet
  • sheets_append
  • sheets_batch_write
  • sheets_create
  • sheets_data_validation_add
  • sheets_named_range_add
  • sheets_write_range

Delete 8 · Delete, drop, revoke or wipe things.

  • cal_delete_event
  • drive_permission_delete
  • drive_trash
  • gmail_archive
  • gmail_label_apply
  • gws_account_remove
  • sheets_clear_range
  • sheets_named_range_delete

Not yet classified 3 · We could not tell from the name and description.

  • cal_respond
  • docs_export
  • sheets_conditional_format_add

Network hosts it talks to 10

  • accounts.google.com · found in code
  • code.claude.com · found in code
  • docs.google.com · found in code
  • git-scm.com · found in code
  • github.com · found in install command, code
  • googleapis.com · found in code
  • myaccount.google.com · found in code
  • myceliumai.co · found in code
  • oauth2.googleapis.com · found in code
  • support.google.com · found in code

Files it touches

  • ~/.claude/.mcp.json
  • /etc/localtime
  • Your home directory (~)
  • Any path the agent passes to its tools

Tools (63)

Read from the source code; the running server may differ. Descriptions are the server’s own words; hidden characters are shown as [U+…].

  • cal_create_event

    Create a calendar event. Args: start, end: ISO 8601 (or 'now'/'today'/'tomorrow'). Written without a UTC offset ('2026-08-18T09:00:00') they mean that wall-clock time in time_zone, which is almost always what a person means. Include an offset ('...T09:00:00-04:00') to pin an exact instant. attendees: Guest emails, invited as required guests. optional_attendees: Guest emails invited as optional guests. Works on its own or alongside attendees; an address in both lists is invited once, as optional. time_zone: IANA name, e.g. 'America/Caraca…

  • cal_delete_event

    Delete an event.

  • cal_freebusy

    Check busy windows for one or more calendars (for scheduling). Args: emails: List of calendar IDs / emails. Defaults to ['primary']. time_zone: IANA name. Times with no UTC offset are read in this zone, which defaults to the machine's own.

  • cal_list_calendars

    List all calendars visible to this account.

  • cal_list_events

    List events on a calendar. Args: time_min: ISO 8601 or 'now'/'today'/'tomorrow'. A time with no UTC offset, and 'today'/'tomorrow', mean local time in time_zone. time_max: ISO 8601. If omitted, uses time_min + days_ahead. query: Free-text search within event titles/descriptions. verbose: Include description, attendees, recurrence, conference data. time_zone: IANA name, e.g. 'America/Caracas'. Defaults to the machine's own zone (override with the GWS_TIME_ZONE environment variable).

  • cal_respond

    Respond to an event invite. Args: response: 'accepted' | 'declined' | 'tentative'.

  • cal_update_event

    Partial-update an event. Only pass fields you want to change. start/end follow the same rule as cal_create_event: no UTC offset means that wall-clock time in time_zone, which defaults to the machine's own zone. Args: attendees_add: Emails to invite as required guests. A guest already on the event is left as they are, optional or not. attendees_add_optional: Emails to invite as optional guests. A guest already on the event is switched to optional and keeps their RSVP. attendees_remove: Emails to take off the event. Applied after both add lists.

  • docs_append

    Append text to the end of a Doc body.

  • docs_create

    Create a new Google Doc. Optional initial body text.

  • docs_export

    Export a Doc to a formatted output file. Default is markdown (headers, bold, lists preserved). Preferred over docs_read when you need formatted content rather than stripped plain text. For programmatic access to document structure (paragraphs, runs), use docs_read with structured=True. Args: mime: 'text/markdown' (default) | 'text/plain' | 'application/pdf' | 'application/rtf' | 'application/vnd.openxmlformats-officedocument.wordprocessingml.document' (.docx)

  • docs_insert_at

    Insert text at a specific character index within the Doc body. Index 1 = start of body. Use docs_append instead when adding to the end — it calculates the index automatically.

  • docs_read

    Read a Google Doc as flat plain text (formatting stripped) or as the full Docs API structural tree (paragraphs, text runs, tables) with structured=True. For formatted output (markdown, PDF, docx), use docs_export instead. Use structured=True for programmatic access to document structure.

  • docs_replace_text

    Find-and-replace text across the entire Doc. Returns count replaced.

  • docs_suggestions_accept_all

    Accept ALL pending suggestions by rewriting the Doc. DESTRUCTIVE — rewrites the entire document body; formatting metadata is lost. No per-suggestion accept via API. Call docs_suggestions_list first to review what will be accepted.

  • docs_suggestions_list

    List pending suggestions (tracked changes) in a Doc. Per-suggestion accept/reject isn't supported by Docs API; use docs_suggestions_accept_all or docs_suggestions_reject_all.

Show 48 more tools
  • docs_suggestions_reject_all

    Reject ALL pending suggestions by rewriting the Doc. DESTRUCTIVE — rewrites the entire document body; suggestions are permanently discarded. No per-suggestion reject via API. Call docs_suggestions_list first to review what will be discarded.

  • drive_comment_add

    Add a sidebar comment (annotation) to a Drive file — not text to the document body. Works on Docs, Sheets, Slides, PDFs, etc. To add text to a Doc's body, use docs_append or docs_insert_at.

  • drive_comment_reply

    Reply to an existing comment.

  • drive_comment_resolve

    Mark a comment as resolved.

  • drive_comments_list

    List comments on any Drive file (Doc/Sheet/Slide/uploaded).

  • drive_create_folder

    Create a new folder. If parent_id is None, creates at My Drive root.

  • drive_list_folder

    List direct children of a folder. Use 'root' for My Drive root.

  • drive_move

    Move a file to a different folder.

  • drive_permission_delete

    Revoke a permission on a file. DESTRUCTIVE — removes someone's access immediately. Get permission_id from drive_permission_list first.

  • drive_permission_list

    List all permissions (who has access) on a file.

  • drive_permission_update

    Change the access role of someone who already has a permission on this file. Requires a permission_id — get it first from drive_permission_list. To grant access to someone new, use drive_share instead. Args: role: 'reader' | 'commenter' | 'writer' | 'fileOrganizer' | 'organizer' | 'owner'.

  • drive_read_file

    Read a Drive file. Metadata by default; content is opt-in. Args: include_content: If True, fetch content. Google-native files export to text/csv/plain by default; override with export_mime. For Google Docs where you want markdown or docx output, use docs_export instead. export_mime: e.g. 'text/markdown' (Docs), 'application/pdf', or 'text/csv' (Sheets). Ignored for non-Google files. max_chars: Cap on returned content. Default 50k.

  • drive_rename

    Rename a file or folder.

  • drive_search

    Search Drive files. Returns compact metadata (no content). Args: query: Free text (wrapped as name/fullText contains) OR raw Drive q-syntax if it contains '=' or 'contains' (e.g. "mimeType='application/pdf' and modifiedTime > '2026-04-01T00:00:00'"). limit: 1-100. Default 10. order_by: 'modifiedTime desc' | 'name' | 'createdTime desc' | etc. drive_id: Shared drive ID. Default: My Drive + shared-with-me.

  • drive_share

    Grant access to a file for someone who does not yet have a permission entry. Creates a new permission. Requires their email address. To change the role of someone who already has access, use drive_permission_update instead. Args: role: 'reader' | 'commenter' | 'writer' | 'fileOrganizer' | 'organizer' | 'owner'. send_notification: If True, Google emails the grantee about the share.

  • drive_shared_drives_list

    List shared drives this account can access.

  • drive_trash

    Move a file to Trash (soft delete, recoverable for 30 days). DESTRUCTIVE. Args: dry_run: If True, show what would be trashed without actually trashing it.

  • drive_untrash

    Restore a file from Trash.

  • drive_upload

    Upload a local file to Drive. Args: convert_to_google: If True, .docx/.csv/.xlsx/.pptx etc. convert to Google-native formats (Docs/Sheets/Slides) on upload.

  • gmail_archive

    Archive messages: removes INBOX label but keeps them in All Mail, permanently searchable. No deletion. Use this to declutter without destroying. Use gmail_trash for soft-delete (messages auto-purged after 30 days).

  • gmail_attachment_save

    Download one attachment to a local file and return its path, so the caller can read it directly (PDF, image, docx, ...). Call gmail_attachments_list first for attachment_id and filename. Saves under ~/.claude/google-workspace-mcp/downloads unless dest_dir is given.

  • gmail_attachments_list

    List a message's attachments: filename, mime type, size, and the attachment_id gmail_attachment_save needs. Metadata only, no download.

  • gmail_draft

    Create a draft. Does not send. Args: body: Plain text or HTML. A body that opens with an HTML tag (e.g. "<p>") becomes an HTML email with a plain-text fallback; any other body stays plain text.

  • gmail_label_apply

    Add or remove labels on messages. Batch up to 1000 per call.

  • gmail_labels_list

    List all labels on the account.

  • gmail_read

    Read a single message or full thread. Strips HTML to text by default. Args: message_id: Gmail message id from gmail_search. keep_html: If True, return raw HTML body. Default: strip to plain text. full_thread: If True, return all messages in the thread.

  • gmail_reply

    Reply to a message. DESTRUCTIVE — sends immediately, same blast radius as gmail_send. Preserves thread + headers. Args: body: Plain text or HTML. A body that opens with an HTML tag (e.g. "<p>") becomes an HTML email with a plain-text fallback; any other body stays plain text. dry_run: If True, show what WOULD be sent without sending.

  • gmail_search

    Search Gmail messages. Returns compact shape (no body) — call gmail_read for body. Args: query: Gmail search operators, e.g. 'from:someone@example.com after:2026/04/01 is:unread'. account: Email address; defaults to configured default account. limit: 1-50. Default 10. include_spam_trash: Include SPAM/TRASH in results. label_filter: List of label names to filter by (e.g. ['INBOX', 'starred']).

  • gmail_send

    Send an email. DESTRUCTIVE — irreversible once sent. Args: body: Plain text or HTML. A body that opens with an HTML tag (e.g. "<p>") becomes an HTML email with a plain-text fallback; any other body stays plain text. from_alias: Send-as identity (e.g. 'ops@example.com'). The authenticated `account` must have this alias configured in Gmail. Use gmail_sendas_list to see available aliases. dry_run: If True, return what WOULD be sent without calling the API. Use this to verify recipient, subject, and body before committing.

  • gmail_sendas_list

    List Send-As identities for this account (the aliases it can send as).

  • gmail_trash

    Move messages to Trash. Soft delete: auto-purged after 30 days, not easily searchable. Use gmail_archive to remove from inbox without any deletion risk.

  • gws_account_add

    Authorize a new Google account via browser OAuth. Stores the refresh token in the OS keyring (service: google-workspace-mcp) -- Keychain on macOS, Credential Manager on Windows, Secret Service on Linux. Requires the OAuth client: GWS_CLIENT_ID + GWS_CLIENT_SECRET in the environment, or client_secret.json next to server.py. See SETUP.md.

  • gws_account_list

    List all authorized Google accounts and which one is the default.

  • gws_account_remove

    Revoke local storage for an account. (Does not revoke Google-side; do that at https://myaccount.google.com/permissions.)

  • sheets_add_sheet

    Add a new tab (sheet) to an existing workbook.

  • sheets_append

    Append rows below the existing data in a range or sheet. Args: range_a1: Table range or sheet name (e.g. 'Sheet1!A:D' or 'Sheet1'). insert_data: 'INSERT_ROWS' (shifts down) | 'OVERWRITE'.

  • sheets_batch_read

    Read multiple ranges in one API call. Cheaper than N sheets_read_range.

  • sheets_batch_write

    Write multiple ranges in one API call. Args: updates: List of {range: 'Sheet1!A1:B2', values: [[...], [...]]}.

  • sheets_clear_range

    Clear cell values in a range. Leaves formatting intact.

  • sheets_conditional_format_add

    Add a conditional formatting rule. Args: condition_type: 'NUMBER_GREATER' | 'NUMBER_LESS' | 'TEXT_CONTAINS' | 'TEXT_EQ' | 'DATE_AFTER' | 'CUSTOM_FORMULA' | 'BLANK' | 'NOT_BLANK'. condition_values: Values for the condition (e.g. ['100'] or ['=A1>B1']). bg_color / text_color: {'red': 0-1, 'green': 0-1, 'blue': 0-1}.

  • sheets_create

    Create a new Google Sheets workbook.

  • sheets_data_validation_add

    Set data validation on a range. Args: condition_type: 'ONE_OF_LIST' (dropdown) | 'NUMBER_GREATER' | 'NUMBER_BETWEEN' | 'DATE_IS_VALID' | 'TEXT_IS_EMAIL' | 'TEXT_IS_URL' | 'CUSTOM_FORMULA'. condition_values: e.g. ['yes','no','maybe'] for ONE_OF_LIST. strict: If True, reject invalid input; if False, warn only.

  • sheets_list_sheets

    List all tabs in a workbook with their dimensions.

  • sheets_named_range_add

    Create a named range (zero-based indices, end-exclusive). Get sheet_id from sheets_list_sheets.

  • sheets_named_range_delete

    Delete a named range by id.

  • sheets_named_ranges_list

    List all named ranges in a workbook.

  • sheets_read_range

    Read a range of cells. Returns 2D array of values. Args: range_a1: A1 notation — 'Sheet1!A1:D100' or 'Sheet1' for full tab. value_render: 'FORMATTED_VALUE' | 'UNFORMATTED_VALUE' | 'FORMULA'.

  • sheets_write_range

    Write a 2D array of values to a range. Overwrites existing cells. Args: value_input: 'USER_ENTERED' (parses formulas + dates) | 'RAW' (literal).

Signals

Stars
3
Forks
3
Open issues
0
Last commit
Oct 22, 2026 (7 days ago)
Last release
May 20, 2026 (5 months ago)

From GitHub (fetched Oct 24, 2026).

Details

Registry name
io.github.adelaidasofia/google-workspace-mcp
Version
0.1.0
Auth
API key
License
MIT
First seen
Oct 24, 2026
Last checked
Oct 25, 2026

More from adelaidasofia

Cite this page

Multi-account MCP for Gmail, Calendar, Drive, Docs, and Sheets — 61 tools, token. Agent Mart. https://agentmart.dev/connectors/adelaidasofia-google-workspace-mcp (last updated 2026-10-25)