Google Workspace
NPM · @AARONSB/GOOGLE-WORKSPACE-MCP · SCANNED SEP 20
Give AI agents access to Gmail, Calendar, Drive, and more — multi-account, manifest-driven
Available components
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
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
claude mcp add aaronsb-google-workspace -- npx -y @aaronsb/google-workspace-mcp
{
"mcpServers": {
"aaronsb-google-workspace": {
"command": "npx",
"args": [
"-y",
"@aaronsb/google-workspace-mcp"
]
}
}
} {
"servers": {
"aaronsb-google-workspace": {
"command": "npx",
"args": [
"-y",
"@aaronsb/google-workspace-mcp"
]
}
}
} codex mcp add aaronsb-google-workspace -- npx -y @aaronsb/google-workspace-mcp
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"aaronsb-google-workspace": {
"type": "local",
"command": [
"npx",
"-y",
"@aaronsb/google-workspace-mcp"
],
"enabled": true
}
}
} openclaw mcp add aaronsb-google-workspace --command npx --arg -y --arg @aaronsb/google-workspace-mcp
mcp_servers:
aaronsb-google-workspace:
command: "npx"
args: ["-y", "@aaronsb/google-workspace-mcp"] {
"McpServers": {
"aaronsb-google-workspace": {
"Transport": "stdio",
"Command": "npx",
"Arguments": [
"-y",
"@aaronsb/google-workspace-mcp"
]
}
}
} assistant mcp add aaronsb-google-workspace -t stdio -c npx -a -y @aaronsb/google-workspace-mcp
{
"mcpServers": {
"aaronsb-google-workspace": {
"command": "npx",
"args": [
"-y",
"@aaronsb/google-workspace-mcp"
]
}
}
} 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
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 →
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 →
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.
| Name | Type | Req | Description |
|---|---|---|---|
| detail | string | – | summary: one-line status per operation (default) | full: include complete output from each operation |
| string | – | batch only — the account to act as. | |
| items | array | – | batch 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… |
| mode | string | – | queue (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… |
| operation | string | – | batch 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. |
| operations | array | – | Operations to execute sequentially |
| tool | string | – | batch 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.
| Name | Type | Req | Description |
|---|---|---|---|
| access | string | – | How 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… |
| category | string | – | For authenticate (default: personal) |
| confirmWriteAccess | boolean | – | Set 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. |
| description | string | – | For authenticate — optional label |
| string | – | Required for remove, status, refresh, scopes | |
| operation | string | yes | list: 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… |
| services | string | – | For 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.
| Name | Type | Req | Description |
|---|---|---|---|
| allDay | boolean | – | Whether 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… |
| attendees | string | – | Comma-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… |
| calendarId | string | – | Calendar 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`… |
| days | number | – | Number of days ahead to show (default: today only) |
| description | string | – | Event description or notes |
| string | yes | Account email address | |
| end | string | – | End 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… |
| eventId | string | – | Event ID |
| location | string | – | Event location |
| maxResults | number | – | Max events (default: 10, max: 50) |
| meet | boolean | – | Add 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. |
| operation | string | yes | list: 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).… |
| query | string | – | Free-text search terms to filter events |
| start | string | – | Start time (ISO 8601) — or a DATE (YYYY-MM-DD) when allDay is true |
| summary | string | – | Event title |
| text | string | – | Natural language event description |
| timeMax | string | – | End of range (ISO 8601) |
| timeMin | string | – | Start of range (ISO 8601). On `list`, defaults to today. |
| tomorrow | boolean | – | Show tomorrow's events instead of today |
| week | boolean | – | Show 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.
| Name | Type | Req | Description |
|---|---|---|---|
| company | string | – | Organization name |
| contactEmail | string | – | The 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. |
| contactId | string | – | Person id as `list` or `search` printed it (e.g. `people/c1234567890`). A bare id without the `people/` prefix is accepted. |
| string | yes | Account email address | |
| jobTitle | string | – | Job title within the organization |
| maxResults | number | – | Max people to return (default 25). Capped per operation: 30 for `search` and `searchOther`, 100 for everything else. |
| name | string | – | Full name, e.g. `Ada Lovelace`. Split into given and family name on the way in; a single word becomes the given name. |
| notes | string | – | Free-text note stored on the contact |
| operation | string | yes | list: 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… |
| pageToken | string | – | Continue from where a previous page stopped — pass the token that response printed |
| phone | string | – | Phone 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. |
| query | string | – | Text to match against names, email addresses, nicknames and phone numbers. Matching is by PREFIX: `ann` finds Anna, `nna` finds nobody. |
| sortOrder | string | – | Order 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.
| Name | Type | Req | Description |
|---|---|---|---|
| documentId | string | – | Document ID |
| string | yes | Account email address | |
| findText | string | – | Text to find |
| index | number | – | Character index to insert at (1 = start of the tab's body) |
| matchCase | boolean | – | Case-sensitive match (default: true) |
| operation | string | yes | get: 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… |
| replaceWith | string | – | Replacement text |
| tabId | string | – | Tab 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… |
| text | string | – | Text to write (plain text) — appended to the end by write, inserted at `index` by insertText |
| title | string | – | Document 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.
| Name | Type | Req | Description |
|---|---|---|---|
| addParents | string | – | Comma-separated folder ID(s) to add as parents (move into a folder) |
| commentId | string | – | Comment ID |
| content | string | – | Comment text. On `replyToComment`, the reply text. |
| domain | string | – | Domain name (required when type is 'domain'). |
| string | yes | Account email address | |
| fileId | string | – | File ID |
| filePath | string | – | Local file path to upload |
| folderId | string | – | Folder ID (pass the id returned by createFolder or search) |
| includeDeleted | boolean | – | Include deleted comments (default: false) |
| maxDepth | number | – | How many folder levels to descend (default 10). The tree is labelled partial when this limit stops the walk. |
| maxResults | number | – | Max results (default: 10, max: 50) |
| mimeType | string | – | Target format (e.g. application/pdf, text/csv, text/plain, application/vnd.openxmlformats-officedocument.wordprocessingml.document) |
| name | string | – | File 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… |
| operation | string | yes | search: 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… |
| outputPath | string | – | Local path to save the file |
| parentFolderId | string | – | Destination 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. |
| permissionId | string | – | Permission ID to remove (from listPermissions) |
| query | string | – | Drive search query (e.g. "name contains 'budget'" or "mimeType='application/pdf'") |
| quotedText | string | – | Text to anchor the comment to (optional — if provided, comment is anchored to first occurrence) |
| removeParents | string | – | Comma-separated folder ID(s) to remove as parents (move out of a folder) |
| resolved | boolean | – | true to resolve, false to reopen |
| role | string | – | Permission 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… |
| shareEmail | string | – | Email 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… |
| type | string | – | Permission 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.
| Name | Type | Req | Description |
|---|---|---|---|
| addLabelIds | string | – | Comma-separated label IDs to add (e.g. STARRED, IMPORTANT, Label_123) |
| attachments | string | – | Workspace filenames to attach, comma-separated (files must exist in workspace via manage_workspace). Creates draft when present. |
| bcc | string | – | BCC email(s), comma-separated |
| body | string | – | Email body text. On `forward`, an optional note prepended ABOVE the forwarded message. |
| bodyFormat | string | – | How 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. |
| cc | string | – | CC email(s), comma-separated. On `replyAll` these are ADDITIONAL — they do not replace the recipients already on the thread. |
| draft | boolean | – | Save as draft instead of sending (default: false, forced true when attachments present) |
| string | yes | Account email address | |
| filename | string | – | Attachment filename, exactly as it appears in the `read` response (e.g. 'invoice_template.md') |
| from | string | – | Sender email or RFC 2822 mailbox for a verified Gmail Send As alias |
| html | boolean | – | Treat body as HTML content (default: plain text) |
| maxResults | number | – | Max results (default: 10, max: 50) |
| messageId | string | – | Email message ID |
| operation | string | yes | search: 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… |
| outputPath | string | – | Local path to save the markdown file (workspace-relative; defaults to a slug from the message date and subject) |
| query | string | – | Gmail search query (e.g. "from:alice subject:meeting has:attachment") |
| removeLabelIds | string | – | Comma-separated label IDs to remove (e.g. UNREAD, INBOX to archive) |
| subject | string | – | Email subject line |
| threadId | string | – | Thread ID to retrieve |
| to | string | – | Recipient 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.
| Name | Type | Req | Description |
|---|---|---|---|
| accessType | string | – | Who can join without knocking. OPEN: anyone with the link. TRUSTED (default): people in your organization, plus invited guests. RESTRICTED: invited guests only. |
| conferenceId | string | – | Conference record ID (from `listConferences`) |
| string | yes | Account email address | |
| filter | string | – | EBNF 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. |
| maxResults | number | – | Max 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… |
| moderation | boolean | – | Turn on host controls — the host admits guests and manages who can present or chat. |
| operation | string | yes | listConferences: list recent meeting conferences (default: descending by start time) | getConference: get details of a specific conference | listParticipants: list who attended a conference | listTra… |
| pageToken | string | – | Page token from a previous getFullTranscript call to continue reading |
| recordingName | string | – | Recording resource name (from listRecordings) |
| smartNoteName | string | – | Smart note resource name (from listSmartNotes) |
| space | string | – | Meeting code (the abc-mnop-xyz part of a Meet link) or a full spaces/... resource name |
| transcriptName | string | – | Transcript 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.
| Name | Type | Req | Description |
|---|---|---|---|
| afterLine | number | – | Insert after this line number (0 = prepend). For insert_lines, copy_lines, attach. |
| content | string | – | Text content. For create (pre-fill), insert_lines, append_lines, replace_lines. |
| endLine | number | – | End of line range (inclusive). For replace_lines, remove_lines, copy_lines, view. |
| fileId | string | – | For attach (drive source): Drive file ID |
| filename | string | – | For attach (workspace source): filename in workspace |
| format | string | – | For create: content format (default: text). Controls validation and addressing mode. |
| fromScratchpadId | string | – | For copy_lines: source scratchpad ID |
| keep | boolean | – | For send: keep scratchpad after successful send (default: true) |
| label | string | – | For create: optional human-readable label |
| operation | string | yes | create: 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_… |
| path | string | – | For json_* ops: JSON path (e.g., $.config.name, $.items[0].value) |
| refId | string | – | For detach: attachment reference ID (att-1, att-2, etc.) |
| scratchpadId | string | – | Scratchpad ID (sp-XXXX). Required for all operations except create and list. |
| source | string | – | For attach: file source (workspace or drive). For import: resource type (doc, email, sheet, drive_file). |
| sourceParams | object | – | For import: source-specific parameters (e.g., { documentId, mode } for doc, { messageId } for email) |
| startLine | number | – | Start of line range (1-based). For replace_lines, remove_lines, copy_lines, view. |
| target | string | – | For send: delivery target |
| targetParams | object | – | For send: target-specific parameters (e.g., { email, to, subject } for email, { filename } for workspace) |
| value | – | – | For 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.
| Name | Type | Req | Description |
|---|---|---|---|
| columnCount | number | – | Initial column count (default 26) |
| destinationSpreadsheetId | string | – | Destination spreadsheet ID |
| string | yes | Account email address | |
| index | number | – | Position among tabs (0-based). Appended at the end if omitted. |
| jsonValues | string | – | JSON 2D array of rows (e.g. '[["a","b"],["c","d"]]'). Use for bulk and multi-row writes. |
| operation | string | yes | get: 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… |
| range | string | – | A1 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. |
| rowCount | number | – | Initial row count (default 1000) |
| sheetId | number | – | Sheet ID of the tab, from `manage_sheets get`. On `duplicateSheet` and `copySheetTo`, the SOURCE tab to copy. |
| spreadsheetId | string | – | Spreadsheet ID. On `copySheetTo`, the SOURCE spreadsheet. |
| title | string | – | On `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… |
| valueInputOption | string | – | How input is interpreted: USER_ENTERED (default, parses formulas/types) or RAW |
| values | string | – | Comma-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.
| Name | Type | Req | Description |
|---|---|---|---|
| due | string | – | Due date (RFC 3339, e.g. 2026-07-20T00:00:00.000Z — Google stores the date, not the time) |
| string | yes | Account email address | |
| maxResults | number | – | Max tasks to return (default: 20, max: 100) |
| notes | string | – | Task notes / details |
| operation | string | yes | listTaskLists: 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… |
| showCompleted | boolean | – | Include completed tasks (default: true) |
| status | string | – | Task status |
| taskId | string | – | Task ID |
| taskListId | string | – | Task list ID (use `listTaskLists` to find) |
| title | string | – | On `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).
| Name | Type | Req | Description |
|---|---|---|---|
| content | string | – | File content to write (for write) |
| destination | string | – | Destination path (for move, compress, decompress). Defaults to filename.gz for compress, strips .gz for decompress. |
| filename | string | – | File path, may include directories (for read, write, delete, compress, decompress). E.g. "reports/q1/summary.csv" |
| operation | string | yes | list: 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:… |
| path | string | – | Directory path (for list: scope to subdirectory, for mkdir: directory to create) |
| source | string | – | Source 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.
| Name | Type | Req | Description |
|---|---|---|---|
| detail | string | – | summary: one-line status per operation (default) | full: include complete output from each operation |
| string | – | batch only — the account to act as. | |
| items | array | – | batch 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… |
| mode | string | – | queue (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… |
| operation | string | – | batch 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. |
| operations | array | – | Operations to execute sequentially |
| tool | string | – | batch only — the tool to call, e.g. 'manage_contacts'. |
No output schema declared.
No examples provided.
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.