# io.github.aaronsb/google-workspace (npm · @aaronsb/google-workspace-mcp)

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

- Trust score: 59/100 (low)
- Change this week: +15
- Registry status: active
- Liveness: live
- Owner verified: no
- Last scored: 2026-08-03

## Components

- npm · `@aaronsb/google-workspace-mcp`: 59/100 (this document), [markdown](https://verifymcp.io/servers/aaronsb-google-workspace/aaronsb-google-workspace-mcp.md), [page](https://verifymcp.io/servers/aaronsb-google-workspace/aaronsb-google-workspace-mcp)

## Channel facts

- Registry: `npm`
- Package: `@aaronsb/google-workspace-mcp`
- Version: `4.0.1`
- Transport: `stdio`

## Trust breakdown

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. Scores are 0–100 per category. Scoring method: https://verifymcp.io/docs/scoring (what has changed: https://verifymcp.io/docs/scoring/changelog)

Scored 2026-08-03.

- **Supply Chain Security**: 87/100
  - No malware found by supply-chain analysis.
  - Only part of the dependency tree could be resolved (112 of 116), so this covers what we could see, not the whole tree.
  - No install/post-install scripts declared.
  - Only part of the dependency tree could be resolved (112 of 116), so this covers what we could see, not the whole tree.
- **Provenance & Transparency**: 19/100
  - Repository check failed: no source repository is declared.
  - Provenance check failed: no build-provenance attestation is published.
  - Clear OSI-approved license (Apache-2.0).
  - Actively maintained (last published 21 days ago).
  - Disclosure check failed: no security disclosure policy was found in the source repository.
- **Schema Quality & AI Usability**: 71/100
  - 100% of prompts and resources have a non-trivial description (not blank, and not just the item's name).
  - AI-judged instruction clarity (good).
  - Context-footprint check failed: tool/resource definitions use about 4213 tokens (~280/item across 15 items; 11 tools + 4 resources), over budget; trim descriptions and params.
  - Usage-examples check failed: none of the tools include examples.
- **Stability & Change Management**: 0/100
  - Stability not yet verified: not enough scan history yet (needs a 30-day window).
- **Tool Coverage**: 100/100
  - 100% of tools have a non-trivial description (not blank, and not just the tool's name).
  - 100% of tool parameters carry a description.
- **Capabilities**: 100/100
  - Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.

**Unverified: 1 category.** A category scored 0 because we could not verify it: a data source with nothing on this package, evidence we could not reach, or a check we could not run. We only credit what we can confirm.

## Install

### Claude

```bash
claude mcp add aaronsb-google-workspace -- npx -y @aaronsb/google-workspace-mcp
```

### Codex

```bash
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
    }
  }
}
```

### OpenClaw

```bash
openclaw mcp add aaronsb-google-workspace --command npx --arg -y --arg @aaronsb/google-workspace-mcp
```

### Hermes

```yaml
mcp_servers:
  aaronsb-google-workspace:
    command: "npx"
    args: ["-y", "@aaronsb/google-workspace-mcp"]
```

### Other

```json
{
  "mcpServers": {
    "aaronsb-google-workspace": {
      "command": "npx",
      "args": [
        "-y",
        "@aaronsb/google-workspace-mcp"
      ]
    }
  }
}
```

## Changelog

Every change recorded for this component, newest first. Days that predate change tracking, or that we cannot explain, say so: "we were watching and nothing happened" and "we were not watching" are different claims.

### 2026-08-03 (score 59, +25)

- [security regression] Provenance: unverified → fail
- [security improvement] Install scripts: unverified → pass
- [security improvement] Known CVEs: unverified → partial
- [security] Stability: Stability not yet verified: not enough scan history yet (needs a 30-day window).
- [functional regression] Security disclosure: unverified → fail
- [functional improvement] License: unverified → pass
- [functional improvement] Dependency health: unverified → partial
- [functional improvement] Maintenance: unverified → pass
- [functional improvement] MCP protocol: unverified → pass
- [functional improvement] Schema quality: unverified → good
- [functional] Licence: Apache-2.0

### 2026-08-01 (score 34, +8)

- [functional] We updated how we score, so this day's move reflects our rubric, not a change to the server

### 2026-07-31 (score 26, −18)

- [security regression] Malware scan: pass → unverified

### 2026-07-30 (score 44, +26)

- [functional improvement] Tool coverage: unverified → 100
- [functional improvement] Schema quality: unverified → 100

### 2026-07-28 (score 18, −26)

- [functional regression] Tool coverage: 100 → unverified
- [functional regression] Schema quality: 100 → unverified

### 2026-07-27 (score 44)

First indexed and scored.

## MCP tools (11)

### `manage_accounts` (~160 tokens)

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

Input parameters:

- `category` (string): For authenticate (default: personal)
- `description` (string): For authenticate — optional label
- `email` (string): Required for remove, status, refresh, scopes
- `operation` (string, required): 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)

### `manage_workspace` (~225 tokens)

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).

Input parameters:

- `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, required): 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)

### `manage_scratchpad` (~570 tokens)

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.

Input parameters:

- `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, required): 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)

### `queue_operations` (~73 tokens)

Execute multiple operations in sequence. Operations run in order with result references ($0.field) to chain outputs. Use for multi-step workflows.

Input parameters:

- `detail` (string): summary: one-line status per operation (default) | full: include complete output from each operation
- `operations` (array, required): Operations to execute sequentially

### `manage_calendar` (~457 tokens)

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

Input parameters:

- `attendees` (string): Comma-separated attendee emails
- `calendarId` (string): Calendar ID to query (default: 'primary'). Use 'calendars' operation to list available IDs.
- `days` (number): Number of days ahead to show (default: today only)
- `description` (string): Event description or notes
- `email` (string, required): Account email address
- `end` (string): End time (ISO 8601)
- `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 to the event
- `operation` (string, required): 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)
- `summary` (string): Event title
- `text` (string): Natural language event description
- `timeMax` (string): End of range (ISO 8601)
- `timeMin` (string): Start of range (ISO 8601) — defaults to today
- `tomorrow` (boolean): Show tomorrow's events instead of today
- `week` (boolean): Show this week's events

### `manage_docs` (~184 tokens)

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

Input parameters:

- `documentId` (string): Document ID
- `email` (string, required): Account email address
- `findText` (string): Text to find
- `index` (number): Character index to insert at (1 = start of document body)
- `matchCase` (boolean): Case-sensitive match (default: true)
- `operation` (string, required): 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
- `text` (string): Text to append (plain text)
- `title` (string): Document title (default: 'Untitled document')

### `manage_drive` (~678 tokens)

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

Input parameters:

- `addParents` (string): Comma-separated folder ID(s) to add as parents (move into a folder)
- `commentId` (string): Comment ID
- `content` (string): Comment text
- `domain` (string): Domain name (required when type is 'domain').
- `email` (string, required): Account email address
- `fileId` (string): File ID
- `filePath` (string): Local file path to upload
- `includeDeleted` (boolean): Include deleted comments (default: false)
- `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 (defaults to local name)
- `operation` (string, required): 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
- `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
- `shareEmail` (string): Email address (required when type is 'user' or 'group'). Omit for 'domain' (use 'domain' param) or 'anyone'.
- `type` (string): Permission type (default: 'user'). Use 'group' for Google Groups, 'domain' to share with an entire G Suite domain, 'anyone' for public links.

### `manage_email` (~677 tokens)

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

Input parameters:

- `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
- `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
- `draft` (boolean): Save as draft instead of sending (default: false, forced true when attachments present)
- `email` (string, required): Account email address
- `filename` (string): Filename to save as (from 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, required): 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…
- `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

### `manage_meet` (~381 tokens)

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

Input parameters:

- `conferenceId` (string): Conference record ID (from listConferences)
- `email` (string, required): Account email address
- `filter` (string): EBNF filter (e.g. 'space.meeting_code = "abc-mnop-xyz"' or 'start_time>="2026-01-01T00:00:00Z"')
- `maxResults` (number): Max conferences to return (default: 25, max: 100)
- `operation` (string, required): 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)
- `transcriptName` (string): Transcript resource name (from listTranscripts)

### `manage_sheets` (~480 tokens)

Read, write, and manage Google Sheets spreadsheets.

Input parameters:

- `columnCount` (number): Initial column count (default 26)
- `destinationSpreadsheetId` (string): Destination spreadsheet ID
- `email` (string, required): Account email address
- `index` (number): Position among tabs (0-based). Appended at the end if omitted.
- `jsonValues` (string): JSON 2D array of rows for bulk insert (e.g. '[["a","b"],["c","d"]]')
- `operation` (string, required): 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): Range to read (e.g. 'Sheet1!A1:D10' or just 'Sheet1')
- `rowCount` (number): Initial row count (default 1000)
- `sheetId` (number): Sheet ID of the tab to rename (from manage_sheets get)
- `spreadsheetId` (string): Spreadsheet ID
- `title` (string): Spreadsheet title (defaults to 'Untitled spreadsheet')
- `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')

### `manage_tasks` (~263 tokens)

Manage task lists and tasks in Google Tasks.

Input parameters:

- `due` (string): Due date (RFC 3339, e.g. 2026-07-20T00:00:00.000Z — Google stores the date, not the time)
- `email` (string, required): Account email address
- `maxResults` (number): Max tasks to return (default: 20, max: 100)
- `notes` (string): Task notes / details
- `operation` (string, required): 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
- `title` (string): Task list name

## Diagnostics

Captured diagnostic sections: Provenance, Dependencies. The full working is on the page: https://verifymcp.io/servers/aaronsb-google-workspace/aaronsb-google-workspace-mcp#diagnostics

## Score history

- 2026-08-03: 59
- 2026-08-02: 34
- 2026-08-01: 34
- 2026-07-31: 26
- 2026-07-30: 44
- 2026-07-28: 18
- 2026-07-27: 44

## Links

- npm package: https://www.npmjs.com/package/@aaronsb/google-workspace-mcp
- Socket report: https://socket.dev/npm/package/@aaronsb/google-workspace-mcp
- Changelog RSS feed: https://verifymcp.io/servers/aaronsb-google-workspace/aaronsb-google-workspace-mcp/changelog.xml
- Changelog JSON feed: https://verifymcp.io/servers/aaronsb-google-workspace/aaronsb-google-workspace-mcp/changelog.json
- HTML version of this page: https://verifymcp.io/servers/aaronsb-google-workspace/aaronsb-google-workspace-mcp
