Skip to content
verify mcp Beta VerifyMCP is currently in beta. If you notice any issues, get in touch and we’ll put it right.

Google Workspace

NPM · @AARONSB/GOOGLE-WORKSPACE-MCP · SCANNED SEP 20

Give AI agents access to Gmail, Calendar, Drive, and more — multi-account, manifest-driven

+1 this week 94 Trust /100
Trust breakdown (7 categories)

How this component scores in each security and reliability category. Every signal is checked automatically from public evidence about the published package, including repeated runs of it in an isolated sandbox, and we only credit what we can confirm. How we score → Why this is hard to score →

Supply Chain Security98
  • No malware found by supply-chain analysis.Pass
  • No known CVEs affecting this package version or its production dependencies.Pass
  • No install/post-install scripts declared.Pass
  • 35 of 113 dependencies flagged as unhealthy. View diagnostics → Partial
Provenance & Transparency100
  • Source repository is publicly reachable at the declared URL. View diagnostics → Pass
  • Cryptographically verified build provenance (signed, bound to aaronsb/google-workspace-mcp). View diagnostics → Pass
  • Clear OSI-approved license (Apache-2.0).Pass
  • Actively maintained (last published 19 days ago).Pass
  • Publishes a security disclosure policy (SECURITY.md).Pass
Schema Quality & AI Usability72
  • 100% of prompts and resources have a non-trivial description (not blank, and not just the item's name).Pass
  • AI-judged instruction clarity (excellent).Pass
  • Context-footprint check failed: tool/resource definitions use about 6806 tokens (~400/item across 17 items; 13 tools + 4 resources), over budget; trim descriptions and params. See how to fix → Fail
  • Usage-examples check failed: none of the tools include examples. See how to fix → Fail
Stability & Change Management97
  • Stability observed for 29 of 30 days with no destabilising changes; credit accrues until the full window elapses.Partial
Tool Coverage100
  • 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
  • 100% of tool parameters carry a description.Pass
Tool Safety100
  • No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.Pass
  • We read all 13 captured tool definition(s), and no name or description among them implies an irreversible operation.Pass
  • An AI judge read all 14 captured unit(s) of tool text and found none that tries to manipulate the model reading it.Pass
Capabilities100
  • Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.Pass
Install

How do I install the Google Workspace MCP server?

Google Workspace runs locally as an npm package, launched with npx -y @aaronsb/google-workspace-mcp. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.

npm · @aaronsb/google-workspace-mcp

# add to Claude Code
claude mcp add aaronsb-google-workspace -- npx -y @aaronsb/google-workspace-mcp
// .cursor/mcp.json
{
  "mcpServers": {
    "aaronsb-google-workspace": {
      "command": "npx",
      "args": [
        "-y",
        "@aaronsb/google-workspace-mcp"
      ]
    }
  }
}
// .vscode/mcp.json
{
  "servers": {
    "aaronsb-google-workspace": {
      "command": "npx",
      "args": [
        "-y",
        "@aaronsb/google-workspace-mcp"
      ]
    }
  }
}
# add to Codex CLI
codex mcp add aaronsb-google-workspace -- npx -y @aaronsb/google-workspace-mcp
// opencode.json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "aaronsb-google-workspace": {
      "type": "local",
      "command": [
        "npx",
        "-y",
        "@aaronsb/google-workspace-mcp"
      ],
      "enabled": true
    }
  }
}
# add to OpenClaw
openclaw mcp add aaronsb-google-workspace --command npx --arg -y --arg @aaronsb/google-workspace-mcp
# ~/.hermes/config.yaml
mcp_servers:
  aaronsb-google-workspace:
    command: "npx"
    args: ["-y", "@aaronsb/google-workspace-mcp"]
// ~/.netclaw/config/netclaw.json
{
  "McpServers": {
    "aaronsb-google-workspace": {
      "Transport": "stdio",
      "Command": "npx",
      "Arguments": [
        "-y",
        "@aaronsb/google-workspace-mcp"
      ]
    }
  }
}
# add to Vellum
assistant mcp add aaronsb-google-workspace -t stdio -c npx -a -y @aaronsb/google-workspace-mcp
// mcp.json
{
  "mcpServers": {
    "aaronsb-google-workspace": {
      "command": "npx",
      "args": [
        "-y",
        "@aaronsb/google-workspace-mcp"
      ]
    }
  }
}
Changelog

Every change we have recorded for this component, newest first. Security-relevant changes are always shown. ▲ marks a change for the better, ▼ a change for the worse; unmarked changes are neutral.

  • 20 Sept 26 +1

    No change was recorded against any check on this day. Stability & Change Management went from 93 to 97. That category is still filling its 30-day observation window: 28 days of observed history at the previous scan, 29 at this one. The score rises as the window fills, whether or not the server changes.

  • 17 Sept 26 −1
    • Stability: pass → 0.87 functional
  • 16 Sept 26 +1
    • Stability: 0.97 → pass security
    • Security disclosure: unverified → pass functional
  • 15 Sept 26 0
    • Security disclosure: pass → unverified functional
  • 12 Sept 26 +1

    No change was recorded against any check on this day. Stability & Change Management went from 83 to 87. That category is still filling its 30-day observation window: 25 days of observed history at the previous scan, 26 at this one. The score rises as the window fills, whether or not the server changes.

  • 11 Sept 26 +1
    • Security disclosure: unverified → pass functional
  • 10 Sept 26 −3
    • Security disclosure: pass → unverified functional
    • Stability: pass → 0.80 functional
  • 9 Sept 26 0
    • Stability: 0.97 → pass security
    • Schema quality: good → excellent functional
Diagnostics

Diagnostic detail from the automated scan of this channel: what the scanner observed at each step, so you can see exactly where a check passed or failed. It is informational only and never changes the trust score.

Captured 20 Sept 2026 · Analysed npm/@aaronsb/google-workspace-mcp@4.5.1

Provenance Verified

A signed build attestation was found and verified, binding this exact artifact to the source repository it claims to come from.

Result Verified
Ecosystem npm
Reason Verified
Discovered via Registry attestation endpoint
Source repo aaronsb/google-workspace-mcp
Certificate issuer https://token.actions.githubusercontent.com
Certificate SAN https://github.com/aaronsb/google-workspace-mcp/.github/workflows/npm-publish.yml@refs/tags/v4.5.1
Rekor log index 2664957704
Predicate type https://slsa.dev/provenance/v1
Subject digest sha512:fe08bb5b4eb200fd43cfa7c4607d4d8df93dee41dcd614c325d5e3c49fe0c29560182aa5e8ac82ddaa2fbdc158792c89910e619e2fc1ef9fc8b5131a3

Background: How many MCP packages publish verified provenance →

Dependencies 113 packages
Packages resolved 113
Stale 35
Tree resolution Complete

Background: SBOMs and build attestations, explained →

MCP tools · 13 exposed · ~6,741 tokens

The tools this component advertises to a client, with an estimated token cost for each. Expand a tool to see its parameters and schema. The per-tool counts are indicative and are not scored directly; the schema's total context footprint is one signal in Schema Quality & AI Usability. A tool's description is untrusted text the model reads on every call, which is what makes this list a security surface and not just an inventory: how tool poisoning works →

Tool Tokens
bulk_operations ~335

Do many things in one call, two ways. mode:'queue' (default) runs different operations in sequence, chaining results with $N.field — works for every tool. mode:'batch' does ONE operation across many resources in a single Google request — far fewer round trips, but only where Google publishes a batch method.

NameTypeReqDescription
detailstringsummary: one-line status per operation (default) | full: include complete output from each operation
emailstringbatch only — the account to act as.
itemsarraybatch only — one entry per resource. A bare id string is enough when that is all that differs, e.g. ['people/c1', 'people/c2']; use objects when items carry more, e.g. [{name: 'Ada Lovelace', contact…
modestringqueue (default): N operations, N API calls, in order, with $N.field references between them. batch: ONE operation across many resources in a single API call — no $N references, because there is no 'b…
operationstringbatch only — the operation to apply to every item, e.g. 'delete'. Ask for one that cannot batch and the error names the ones that can.
operationsarrayOperations to execute sequentially
toolstringbatch only — the tool to call, e.g. 'manage_contacts'.

No output schema declared.

No examples provided.

manage_accounts ~278

Manage Google Workspace account lifecycle: list, authenticate, check status, refresh credentials, update scopes, or remove accounts.

NameTypeReqDescription
accessstringHow much this account may do. 'readwrite' (default) is full access. 'read' asks Google for read-only permissions instead, so the account can look things up but cannot send, edit or delete. Some servi…
categorystringFor authenticate (default: personal)
confirmWriteAccessbooleanSet true to go ahead when 'read' was asked for but some services can only be granted full access. Only needed after a first call has told you which ones.
descriptionstringFor authenticate — optional label
emailstringRequired for remove, status, refresh, scopes
operationstringyeslist: show all accounts | authenticate: add new account (opens browser) | remove: delete account and credentials | status: check token validity and scopes | refresh: renew credentials | scopes: re-au…
servicesstringFor scopes — comma-separated service names (e.g. gmail,drive,calendar,sheets)

No output schema declared.

No examples provided.

manage_calendar ~850

List events, view agenda, check availability, or manage calendar events.

NameTypeReqDescription
allDaybooleanWhether the event is all-day. When true, start and end are DATES (YYYY-MM-DD — an ISO datetime's date part is used) and end, if given, is the INCLUSIVE last day; the exclusive end date the Calendar A…
attendeesstringComma-separated email addresses. On `update`, whatever you pass REPLACES the existing list — addresses you leave out are removed, and an empty string clears everyone. OMIT the parameter to leave the…
calendarIdstringCalendar ID. Use the `calendars` operation to list available IDs; required for events on shared calendars. Defaults to 'primary' on the event operations (`list`, `get`, `create`, `quickAdd`, `update`…
daysnumberNumber of days ahead to show (default: today only)
descriptionstringEvent description or notes
emailstringyesAccount email address
endstringEnd time (ISO 8601) — or, when allDay is true, a DATE (YYYY-MM-DD) that is the INCLUSIVE last day; the exclusive end date the Calendar API requires is computed for you. Optional for all-day events: a…
eventIdstringEvent ID
locationstringEvent location
maxResultsnumberMax events (default: 10, max: 50)
meetbooleanAdd a Google Meet video conference link. On `update`, true adds a link and false REMOVES an existing one; omit it to leave the link as it is.
operationstringyeslist: upcoming events — defaults to primary calendar, use calendarId to target a specific calendar (use 'calendars' operation to discover IDs) | agenda: today's schedule at a glance (all calendars).…
querystringFree-text search terms to filter events
startstringStart time (ISO 8601) — or a DATE (YYYY-MM-DD) when allDay is true
summarystringEvent title
textstringNatural language event description
timeMaxstringEnd of range (ISO 8601)
timeMinstringStart of range (ISO 8601). On `list`, defaults to today.
tomorrowbooleanShow tomorrow's events instead of today
weekbooleanShow this week's events

No output schema declared.

No examples provided.

manage_contacts ~529

Search, read, create, update and delete Google Contacts: your saved contacts, the addresses you have corresponded with but never saved, and your organization's directory.

NameTypeReqDescription
companystringOrganization name
contactEmailstringThe contact's email address. (`email` is the account making the call, not the person being saved.) On `update` this REPLACES every address the contact has — pass an empty string to clear them.
contactIdstringPerson id as `list` or `search` printed it (e.g. `people/c1234567890`). A bare id without the `people/` prefix is accepted.
emailstringyesAccount email address
jobTitlestringJob title within the organization
maxResultsnumberMax people to return (default 25). Capped per operation: 30 for `search` and `searchOther`, 100 for everything else.
namestringFull name, e.g. `Ada Lovelace`. Split into given and family name on the way in; a single word becomes the given name.
notesstringFree-text note stored on the contact
operationstringyeslist: list your saved contacts | search: search your saved contacts by name, email, nickname or phone | get: get one person in full — addresses, birthday, notes, relations | create: create a new cont…
pageTokenstringContinue from where a previous page stopped — pass the token that response printed
phonestringPhone number, in whatever form you have it — Google normalizes it. On `update` this REPLACES every number the contact has — pass an empty string to clear them.
querystringText to match against names, email addresses, nicknames and phone numbers. Matching is by PREFIX: `ann` finds Anna, `nna` finds nobody.
sortOrderstringOrder for `list` — by first name, by last name, or most recently changed first

No output schema declared.

No examples provided.

manage_docs ~268

Read, write, insert, and find-replace text in Google Docs documents.

NameTypeReqDescription
documentIdstringDocument ID
emailstringyesAccount email address
findTextstringText to find
indexnumberCharacter index to insert at (1 = start of the tab's body)
matchCasebooleanCase-sensitive match (default: true)
operationstringyesget: get document content and metadata | create: create a new document | write: append text to the end of a document | insertText: insert text at a specific position in a document | replaceText: find…
replaceWithstringReplacement text
tabIdstringTab to act on — a tabId from a previous get's tabIndex. Scopes the read on get; targets the edit on write/insertText/replaceText, which act on the FIRST tab when it is omitted (replaceText spans ever…
textstringText to write (plain text) — appended to the end by write, inserted at `index` by insertText
titlestringDocument title (default: 'Untitled document')

No output schema declared.

No examples provided.

manage_drive ~994

Search, upload, download, share, comment on, or manage files in Google Drive.

NameTypeReqDescription
addParentsstringComma-separated folder ID(s) to add as parents (move into a folder)
commentIdstringComment ID
contentstringComment text. On `replyToComment`, the reply text.
domainstringDomain name (required when type is 'domain').
emailstringyesAccount email address
fileIdstringFile ID
filePathstringLocal file path to upload
folderIdstringFolder ID (pass the id returned by createFolder or search)
includeDeletedbooleanInclude deleted comments (default: false)
maxDepthnumberHow many folder levels to descend (default 10). The tree is labelled partial when this limit stops the walk.
maxResultsnumberMax results (default: 10, max: 50)
mimeTypestringTarget format (e.g. application/pdf, text/csv, text/plain, application/vnd.openxmlformats-officedocument.wordprocessingml.document)
namestringFile name in Drive. On `upload`, defaults to the local file's name. On `copy`, the name for the copy — without it Drive names it 'Copy of <original>'. On `update`, the new name (a rename). On `create…
operationstringyessearch: find files by query | get: get file metadata | upload: upload a local file to Drive | viewImage: view an image file inline without saving to workspace (png, jpg, gif, webp). Use for quick pre…
outputPathstringLocal path to save the file
parentFolderIdstringDestination folder ID. On `upload`, places the file in this folder. On `copy`, defaults to the source file's folder. On `createFolder`, nests the new folder under this parent.
permissionIdstringPermission ID to remove (from listPermissions)
querystringDrive search query (e.g. "name contains 'budget'" or "mimeType='application/pdf'")
quotedTextstringText to anchor the comment to (optional — if provided, comment is anchored to first occurrence)
removeParentsstringComma-separated folder ID(s) to remove as parents (move out of a folder)
resolvedbooleantrue to resolve, false to reopen
rolestringPermission level. On `share`, the level to grant — defaults to `reader`. On `setRole`, the new level, and it is REQUIRED there: with no default to fall back on, an omitted role would silently demote…
shareEmailstringEmail address of the collaborator. On `share`, required when type is 'user' or 'group'; omit for 'domain' (use the `domain` param) or 'anyone'. On `setRole`, the existing collaborator whose role to c…
typestringPermission type (default: 'user'). Use 'group' for Google Groups, 'domain' to share with an entire G Suite domain, 'anyone' for public links.

No output schema declared.

No examples provided.

manage_email ~784

Search, read, send, forward, or manage emails in a Google Workspace account. Supports Gmail search syntax.

NameTypeReqDescription
addLabelIdsstringComma-separated label IDs to add (e.g. STARRED, IMPORTANT, Label_123)
attachmentsstringWorkspace filenames to attach, comma-separated (files must exist in workspace via manage_workspace). Creates draft when present.
bccstringBCC email(s), comma-separated
bodystringEmail body text. On `forward`, an optional note prepended ABOVE the forwarded message.
bodyFormatstringHow to render the message body. 'plain' (default) returns text/plain or a crude HTML-strip fallback. 'html' returns the text/html part sanitized — useful when the plain-text part is empty/stub.
ccstringCC email(s), comma-separated. On `replyAll` these are ADDITIONAL — they do not replace the recipients already on the thread.
draftbooleanSave as draft instead of sending (default: false, forced true when attachments present)
emailstringyesAccount email address
filenamestringAttachment filename, exactly as it appears in the `read` response (e.g. 'invoice_template.md')
fromstringSender email or RFC 2822 mailbox for a verified Gmail Send As alias
htmlbooleanTreat body as HTML content (default: plain text)
maxResultsnumberMax results (default: 10, max: 50)
messageIdstringEmail message ID
operationstringyessearch: find emails by query | read: get full email by ID. Pass bodyFormat: 'html' when the plain-text part is a stub (marketing email, invitations, booking confirmations) and the dates/codes you nee…
outputPathstringLocal path to save the markdown file (workspace-relative; defaults to a slug from the message date and subject)
querystringGmail search query (e.g. "from:alice subject:meeting has:attachment")
removeLabelIdsstringComma-separated label IDs to remove (e.g. UNREAD, INBOX to archive)
subjectstringEmail subject line
threadIdstringThread ID to retrieve
tostringRecipient email(s), comma-separated

No output schema declared.

No examples provided.

manage_meet ~646

Browse past Google Meet conferences, participants, transcripts, recordings, and AI-generated smart notes. Requires Workspace Business Standard+ for transcripts/recordings.

NameTypeReqDescription
accessTypestringWho can join without knocking. OPEN: anyone with the link. TRUSTED (default): people in your organization, plus invited guests. RESTRICTED: invited guests only.
conferenceIdstringConference record ID (from `listConferences`)
emailstringyesAccount email address
filterstringEBNF filter. On `listConferences`, e.g. 'space.meeting_code = "abc-mnop-xyz"' or 'start_time>="2026-01-01T00:00:00Z"'. On `listParticipants`, e.g. 'latest_end_time IS NULL' for active participants.
maxResultsnumberMax results per page, as default/ceiling. Differs by operation: `listConferences` 25/100, `listParticipants` 100/250, `listTranscriptEntries` 100/100. (Google's own default for transcript entries is…
moderationbooleanTurn on host controls — the host admits guests and manages who can present or chat.
operationstringyeslistConferences: list recent meeting conferences (default: descending by start time) | getConference: get details of a specific conference | listParticipants: list who attended a conference | listTra…
pageTokenstringPage token from a previous getFullTranscript call to continue reading
recordingNamestringRecording resource name (from listRecordings)
smartNoteNamestringSmart note resource name (from listSmartNotes)
spacestringMeeting code (the abc-mnop-xyz part of a Meet link) or a full spaces/... resource name
transcriptNamestringTranscript resource name (from `listTranscripts`, e.g. conferenceRecords/.../transcripts/...)

No output schema declared.

No examples provided.

manage_scratchpad ~570

Compose, edit, and deliver text content. Use for any multi-line content: emails, documents, descriptions. Compose in the scratchpad, edit by line or JSON path, attach files, then send to any target. For short one-liners, use the service tool directly instead.

NameTypeReqDescription
afterLinenumberInsert after this line number (0 = prepend). For insert_lines, copy_lines, attach.
contentstringText content. For create (pre-fill), insert_lines, append_lines, replace_lines.
endLinenumberEnd of line range (inclusive). For replace_lines, remove_lines, copy_lines, view.
fileIdstringFor attach (drive source): Drive file ID
filenamestringFor attach (workspace source): filename in workspace
formatstringFor create: content format (default: text). Controls validation and addressing mode.
fromScratchpadIdstringFor copy_lines: source scratchpad ID
keepbooleanFor send: keep scratchpad after successful send (default: true)
labelstringFor create: optional human-readable label
operationstringyescreate: new buffer | view: show content | discard: free buffer | list: show all | insert_lines/append_lines/replace_lines/remove_lines: line editing | copy_lines: copy from another scratchpad | json_…
pathstringFor json_* ops: JSON path (e.g., $.config.name, $.items[0].value)
refIdstringFor detach: attachment reference ID (att-1, att-2, etc.)
scratchpadIdstringScratchpad ID (sp-XXXX). Required for all operations except create and list.
sourcestringFor attach: file source (workspace or drive). For import: resource type (doc, email, sheet, drive_file).
sourceParamsobjectFor import: source-specific parameters (e.g., { documentId, mode } for doc, { messageId } for email)
startLinenumberStart of line range (1-based). For replace_lines, remove_lines, copy_lines, view.
targetstringFor send: delivery target
targetParamsobjectFor send: target-specific parameters (e.g., { email, to, subject } for email, { filename } for workspace)
valueFor json_set, json_insert: value to set or insert (any JSON type)

No output schema declared.

No examples provided.

manage_sheets ~609

Read, write, and manage Google Sheets spreadsheets.

NameTypeReqDescription
columnCountnumberInitial column count (default 26)
destinationSpreadsheetIdstringDestination spreadsheet ID
emailstringyesAccount email address
indexnumberPosition among tabs (0-based). Appended at the end if omitted.
jsonValuesstringJSON 2D array of rows (e.g. '[["a","b"],["c","d"]]'). Use for bulk and multi-row writes.
operationstringyesget: get spreadsheet metadata and sheet names | create: create a new spreadsheet (optionally with a title) | read: read cell values from a range; rendered rows are prefixed with their sheet row numbe…
rangestringA1 notation range (e.g. 'Sheet1!A1:D10', or just 'Sheet1' for a whole tab). On `append`, the target tab — defaults to 'Sheet1'; use 'MyTab' or 'MyTab!A:Z' to append to a specific one.
rowCountnumberInitial row count (default 1000)
sheetIdnumberSheet ID of the tab, from `manage_sheets get`. On `duplicateSheet` and `copySheetTo`, the SOURCE tab to copy.
spreadsheetIdstringSpreadsheet ID. On `copySheetTo`, the SOURCE spreadsheet.
titlestringOn `create`, the spreadsheet title (defaults to 'Untitled spreadsheet'); on `renameSpreadsheet`, its new title. On `addSheet`, the name of the new TAB; on `renameSheet`, that tab's new title; on `dup…
valueInputOptionstringHow input is interpreted: USER_ENTERED (default, parses formulas/types) or RAW
valuesstringComma-separated values for a single row (e.g. 'Alice,100,true')

No output schema declared.

No examples provided.

manage_tasks ~291

Manage task lists and tasks in Google Tasks.

NameTypeReqDescription
duestringDue date (RFC 3339, e.g. 2026-07-20T00:00:00.000Z — Google stores the date, not the time)
emailstringyesAccount email address
maxResultsnumberMax tasks to return (default: 20, max: 100)
notesstringTask notes / details
operationstringyeslistTaskLists: list all task lists | getTaskList: get a task list by ID | createTaskList: create a new task list | deleteTaskList: delete a task list and all its tasks | list: list tasks in a task li…
showCompletedbooleanInclude completed tasks (default: true)
statusstringTask status
taskIdstringTask ID
taskListIdstringTask list ID (use `listTaskLists` to find)
titlestringOn `createTaskList`, the task list name. On `create` and `update`, the task title.

No output schema declared.

No examples provided.

manage_workspace ~225

Manage files and directories in the workspace sandbox. Supports nested paths (e.g. "reports/q1/summary.csv"). The workspace is the exchange point for file operations (attachments, downloads, exports).

NameTypeReqDescription
contentstringFile content to write (for write)
destinationstringDestination path (for move, compress, decompress). Defaults to filename.gz for compress, strips .gz for decompress.
filenamestringFile path, may include directories (for read, write, delete, compress, decompress). E.g. "reports/q1/summary.csv"
operationstringyeslist: show files (recursive) | read: get file content | write: save content to file | delete: remove file or directory | move: move or rename a file/directory | mkdir: create a directory | compress:…
pathstringDirectory path (for list: scope to subdirectory, for mkdir: directory to create)
sourcestringSource path (for move)

No output schema declared.

No examples provided.

queue_operations ~362

RENAMED to `bulk_operations`, which does the same thing. This name still works and will be removed in a future release. Do many things in one call, two ways. mode:'queue' (default) runs different operations in sequence, chaining results with $N.field — works for every tool. mode:'batch' does ONE operation across many resources in a single Google request — far fewer round trips, but only where Google publishes a batch method.

NameTypeReqDescription
detailstringsummary: one-line status per operation (default) | full: include complete output from each operation
emailstringbatch only — the account to act as.
itemsarraybatch only — one entry per resource. A bare id string is enough when that is all that differs, e.g. ['people/c1', 'people/c2']; use objects when items carry more, e.g. [{name: 'Ada Lovelace', contact…
modestringqueue (default): N operations, N API calls, in order, with $N.field references between them. batch: ONE operation across many resources in a single API call — no $N references, because there is no 'b…
operationstringbatch only — the operation to apply to every item, e.g. 'delete'. Ask for one that cannot batch and the error names the ones that can.
operationsarrayOperations to execute sequentially
toolstringbatch only — the tool to call, e.g. 'manage_contacts'.

No output schema declared.

No examples provided.

Common questions

What is the Google Workspace MCP server?

Google Workspace is an MCP server listed in the public MCP registry as io.github.aaronsb/google-workspace. Give AI agents access to Gmail, Calendar, Drive, and more, multi-account, manifest-driven. This page covers its npm package (@aaronsb/google-workspace-mcp).

Is the Google Workspace MCP server safe to use?

Google Workspace scores 94 out of 100 on VerifyMCP. We found no known CVEs affecting it as of 20 September 2026. It declares no install or post-install scripts. Its build provenance is signed and verified. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.

What tools does the Google Workspace MCP server expose?

Google Workspace exposes 13 tools: manage_accounts, manage_workspace, manage_scratchpad, bulk_operations, queue_operations, and 8 more. Their descriptions and schemas cost roughly 6,741 tokens of context every time the server is loaded.

Is the Google Workspace MCP server still maintained?

Google Workspace is still listed as active in the MCP registry. We last reached this channel on 20 September 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.

What licence is the Google Workspace MCP server under?

Google Workspace declares the Apache-2.0 licence, which is OSI-approved. That covers the source only, and says nothing about the cost of any service it calls.