Interact with Microsoft 365 and Office services through the Microsoft Graph API.
Workspace Operator is installed from its publisher's own source and answers where it runs, so this marketplace is not in the path of a single call. There is no address here to send one to, and a panel that pretended otherwise would be showing you an answer we made up. Install it and call it from your own client — the Installation tab has the entry for each one.
What it does
Google Workspace automation for AI agents: 132 tools, safe bulk operations, undo.
Quickstart
# 1 — add it to Claude Code
claude mcp add --scope user workspace-operator-mcp '--' uvx --from workspace-operator-mcp workspace-operator
# 2 — ask your agent for something these tools do
# workspace_search, find_files, drive_search_advanced and 129 more
Workspace Operator costs nothing on mcprush: there is no plan to choose here, no cap to set and nothing mcprush can bill you for.
Collected from a public index. Nobody has claimed this account, so nothing here was written by its author — claim it if it is yours.
Where are you running it?
Every route below installs the same thing and ends at the same approval screen. This one runs on your machine: your client starts Workspace Operator as a process under your own user, with your files and your network, so the tool surface below is what it can do to your computer rather than to a server somewhere else. Its scan result is on the Security tab — read the surface before you approve it.
This is a public server: you run it yourself and this marketplace is not in the path. You need uv (docs.astral.sh/uv): uvx comes with it. Claude Code registers it in one command; --scope user makes it available in every project. The '--' is in quotes so that PowerShell passes it on.
claude mcp add --scope user workspace-operator-mcp '--' uvx --from workspace-operator-mcp workspace-operatorReconnect, or start a new session, and the tools appear in the model’s tool list.
One config entry your client uses to start the process locally. A local server runs with your file system and your network, which is why it is priced without metering.
132 tools, with what each one reads, writes and reaches shown before you agree — the same list on every route above. Read the tool surface.
Tool surface
What the model actually sees. Descriptions are diffed on every release — see version history.
Read from its source code. A server that builds its tool list when it starts can list more tools than this.
Search Google Drive, Gmail and Calendar with one query and get a merged, date-sorted result list. Use it for 'find everything about X' questions before falling back to per-service tools.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| query | string | yes | Free-text query, e.g. 'Q3 budget' |
| sources | string | no | Comma-separated sources to search: drive, gmail, calendar |
| limit | integer | no | Maximum results per source (1-25) |
| calendar_days_back | integer | no | Calendar only: how far back to search |
| calendar_days_ahead | integer | no | Calendar only: how far ahead to search |
Search for files on Google Drive. Query example: 'name contains "System"'
| Parameter | Type | Required | Notes |
|---|---|---|---|
| query | string | yes | — |
Advanced Google Drive search with full query syntax
| Parameter | Type | Required | Notes |
|---|---|---|---|
| query | string | yes | — |
| limit | integer | no | — |
List permissions for a Drive file
| Parameter | Type | Required | Notes |
|---|---|---|---|
| file_id | string | yes | — |
Create a folder in Google Drive
| Parameter | Type | Required | Notes |
|---|---|---|---|
| name | string | yes | — |
| parent_id | string | no | — |
Move a file to a different folder
| Parameter | Type | Required | Notes |
|---|---|---|---|
| file_id | string | yes | — |
| folder_id | string | yes | — |
Copy a Drive file to a new file
| Parameter | Type | Required | Notes |
|---|---|---|---|
| file_id | string | yes | — |
| name | string | no | — |
| parent_id | string | no | — |
Share a file with a user or make it public. REQUIRES allow_public=True to share publicly!
| Parameter | Type | Required | Notes |
|---|---|---|---|
| file_id | string | yes | — |
| role | string | yes | — |
| type | string | no | Access type. 'anyone' requires allow_public=True |
| email_address | string | no | Required for type 'user' or 'group' |
| allow_public | boolean | no | MUST be true to share with type='anyone'. Security check. |
Revoke public access (type=anyone) for a Drive file. Requires confirm=True.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| file_id | string | yes | — |
| confirm | boolean | no | — |
Upload a local file to Google Drive. Use convert_to to turn a docx/xlsx/pptx into a native Google Doc, Sheet or Slide.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| local_path | string | yes | Path on the machine running this server |
| name | string | no | Drive file name (default: the local file name) |
| parent_id | string | no | Destination folder ID (default: My Drive root) |
| mime_type | string | no | Override the detected content type |
| convert_to | string | no | Convert to a native Google file on upload |
Download a binary Google Drive file to disk. Google-native files (Docs, Sheets, Slides) must be converted with drive_export first.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| file_id | string | yes | — |
| save_to | string | no | File or directory path (default: ~/Downloads) |
| overwrite | boolean | no | — |
Export a Google Doc, Sheet or Presentation to a local file: pdf, docx, xlsx, pptx, csv, txt and more.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| file_id | string | yes | — |
| format | string | yes | pdf | docx | xlsx | pptx | csv | txt | md | html | … |
| save_to | string | no | File or directory path (default: ~/Downloads) |
| overwrite | boolean | no | — |
Read data from a Google Sheet
| Parameter | Type | Required | Notes |
|---|---|---|---|
| spreadsheet_id | string | yes | — |
| range_name | string | yes | — |
Get metadata (sheets, titles) of a spreadsheet
| Parameter | Type | Required | Notes |
|---|---|---|---|
| spreadsheet_id | string | yes | — |
Export a range as CSV text
| Parameter | Type | Required | Notes |
|---|---|---|---|
| spreadsheet_id | string | yes | — |
| range_name | string | yes | — |
| max_rows | integer | no | — |
Create a new Google Spreadsheet
| Parameter | Type | Required | Notes |
|---|---|---|---|
| title | string | yes | — |
Add a new sheet (tab) to a spreadsheet
| Parameter | Type | Required | Notes |
|---|---|---|---|
| spreadsheet_id | string | yes | — |
| title | string | yes | — |
Append a row to a Google Sheet
| Parameter | Type | Required | Notes |
|---|---|---|---|
| spreadsheet_id | string | yes | — |
| range_name | string | yes | — |
| values | array | yes | — |
Update data in a Google Sheet. 'values' must be a list of lists of strings (rows of columns).
| Parameter | Type | Required | Notes |
|---|---|---|---|
| spreadsheet_id | string | yes | — |
| range_name | string | yes | — |
| values | array | yes | — |
Clear values in a spreadsheet range. Auto dry-run for large ranges (>100 cells).
| Parameter | Type | Required | Notes |
|---|---|---|---|
| spreadsheet_id | string | yes | — |
| range_name | string | yes | — |
| confirm | boolean | no | Must be true to clear large ranges (>100 cells) |
Find/replace in a range with dry-run preview
| Parameter | Type | Required | Notes |
|---|---|---|---|
| spreadsheet_id | string | yes | — |
| range_name | string | yes | — |
| find_text | string | yes | — |
| replace_text | string | yes | — |
| dry_run | boolean | no | — |
| match_case | boolean | no | — |
Create a filter view for a sheet with grid range
| Parameter | Type | Required | Notes |
|---|---|---|---|
| spreadsheet_id | string | yes | — |
| sheet_id | integer | yes | — |
| title | string | yes | — |
| start_row | integer | no | — |
| end_row | integer | no | — |
| start_col | integer | no | — |
| end_col | integer | no | — |
Create a named range using grid indexes
| Parameter | Type | Required | Notes |
|---|---|---|---|
| spreadsheet_id | string | yes | — |
| name | string | yes | — |
| sheet_id | integer | yes | — |
| start_row | integer | yes | — |
| end_row | integer | yes | — |
| start_col | integer | yes | — |
| end_col | integer | yes | — |
Format a Google Sheets range or sheet: bold/italic/size, number format, colours, alignment, wrap, column width, row height and frozen panes — all in one call.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| spreadsheet_id | string | yes | — |
| sheet_name | string | no | Sheet tab name (default: first sheet or the one in range) |
| range | string | no | A1 range, e.g. A1:C10, A:C or 1:10 (default: whole sheet) |
| bold | boolean | no | — |
| italic | boolean | no | — |
| font_size | number | no | — |
| number_format | string | no | Sheets number pattern, e.g. '#,##0.00' or '0.0%' |
| background_color | string | no | #RRGGBB |
| text_color | string | no | #RRGGBB |
| horizontal_alignment | string | no | — |
| wrap | string | no | — |
| column_width | number | no | Pixels |
| row_height | number | no | Pixels |
| freeze_rows | integer | no | — |
| freeze_cols | integer | no | — |
Read the content of a Google Doc
| Parameter | Type | Required | Notes |
|---|---|---|---|
| document_id | string | yes | — |
Create a new Google Doc
| Parameter | Type | Required | Notes |
|---|---|---|---|
| title | string | yes | — |
Append text to a Google Doc
| Parameter | Type | Required | Notes |
|---|---|---|---|
| document_id | string | yes | — |
| text | string | yes | — |
Fill a Google Doc template by replacing placeholders. Requires confirm=True.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| document_id | string | yes | — |
| replacements | object | yes | — |
| confirm | boolean | no | — |
Export a Google Doc to PDF and return it as binary (EmbeddedResource)
| Parameter | Type | Required | Notes |
|---|---|---|---|
| document_id | string | yes | — |
Create a new Google Slides presentation
| Parameter | Type | Required | Notes |
|---|---|---|---|
| title | string | yes | — |
Read a presentation: title, slide count, slide IDs and the text on each slide
| Parameter | Type | Required | Notes |
|---|---|---|---|
| presentation_id | string | yes | — |
Add a slide to a presentation using a predefined layout
| Parameter | Type | Required | Notes |
|---|---|---|---|
| presentation_id | string | yes | — |
| layout | string | no | Predefined layout, e.g. TITLE_AND_BODY, TITLE_ONLY, BLANK |
| insertion_index | integer | no | Where to insert the slide (default: at the end) |
Replace placeholder text across a presentation. Requires confirm=true; without it returns a preview of what will change.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| presentation_id | string | yes | — |
| replacements | object | yes | Map of placeholder → value |
| confirm | boolean | no | — |
Insert an image from a public URL onto a slide. Size and position are in pixels and optional.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| presentation_id | string | yes | — |
| slide_id | string | yes | — |
| image_url | string | yes | — |
| width | number | no | — |
| height | number | no | — |
| left | number | no | — |
| top | number | no | — |
Create a new Google Apps Script project
| Parameter | Type | Required | Notes |
|---|---|---|---|
| title | string | yes | — |
| parent_id | string | no | — |
Get the content of a Google Apps Script project
| Parameter | Type | Required | Notes |
|---|---|---|---|
| script_id | string | yes | — |
STEP 1: Prepare a Google Apps Script update with automatic backup. Returns operation_id.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| script_id | string | yes | The Apps Script project ID |
| files | array | yes | Array of files to update |
STEP 2: Execute a prepared operation by operation_id (from prepare_script_update)
| Parameter | Type | Required | Notes |
|---|---|---|---|
| operation_id | string | yes | The operation ID from prepare_script_update |
Cancel a prepared operation before execution
| Parameter | Type | Required | Notes |
|---|---|---|---|
| operation_id | string | yes | The operation ID to cancel |
Restore a script from a backup file
| Parameter | Type | Required | Notes |
|---|---|---|---|
| backup_path | string | yes | Full path to the backup JSON file |
Run a function from an Apps Script project deployed as an API executable. Executes arbitrary code with your account's authority.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| script_id | string | yes | — |
| function_name | string | yes | — |
| parameters | array | no | Positional arguments passed to the function |
| dev_mode | boolean | no | Run the latest saved code instead of the deployed version |
Update an existing event. Only the fields you pass are changed; send_updates controls attendee notifications.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| event_id | string | yes | — |
| calendar_id | string | no | — |
| summary | string | no | — |
| start_time | string | no | ISO datetime |
| end_time | string | no | ISO datetime |
| description | string | no | — |
| location | string | no | — |
| attendees | array | no | — |
| send_updates | string | no | — |
Delete an event. Requires confirm=true.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| event_id | string | yes | — |
| calendar_id | string | no | — |
| confirm | boolean | no | — |
| send_updates | string | no | — |
Answer an invitation: accepted, declined or tentative. Requires confirm=true.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| event_id | string | yes | — |
| response | string | yes | — |
| calendar_id | string | no | — |
| confirm | boolean | no | — |
| send_updates | string | no | — |
Composite: read a sheet range, compute column statistics and create a Google Doc report with the summary and a data preview.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| spreadsheet_id | string | yes | — |
| range | string | no | A1 range or sheet name (default: first sheet) |
| doc_title | string | no | — |
| max_rows | integer | no | — |
Composite: one digest across Gmail, Calendar and Drive for the last N hours. Returns text by default, or creates a Google Doc.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| sources | string | no | Comma-separated subset of gmail, calendar, drive |
| since_hours | integer | no | — |
| limit | integer | no | — |
| output | string | no | — |
| doc_title | string | no | — |
Composite: diff two ranges by a key column (added / removed / changed rows). Works across sheets or spreadsheets.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| spreadsheet_id | string | yes | — |
| range_a | string | yes | — |
| range_b | string | yes | — |
| other_spreadsheet_id | string | no | — |
| key_column | string | no | Column name or 1-based index |
| header | boolean | no | — |
| output | string | no | — |
| doc_title | string | no | — |
Composite: copy any Drive file as a template and replace placeholders in the copy (Docs, Slides, Sheets).
| Parameter | Type | Required | Notes |
|---|---|---|---|
| file_id | string | yes | — |
| replacements | object | no | — |
| name | string | no | Name of the new file |
| folder_id | string | no | — |
Composite: read a sheet range and build a presentation — a title slide plus one bullet slide per group of rows.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| spreadsheet_id | string | yes | — |
| range | string | no | A1 range or sheet name |
| title | string | no | — |
| rows_per_slide | integer | no | — |
| header | boolean | no | — |
Get the authenticated Gmail address for the current OAuth token
No parameter schema on file.
List emails from Gmail
| Parameter | Type | Required | Notes |
|---|---|---|---|
| max_results | integer | no | — |
| query | string | no | Gmail search query (e.g. 'is:unread') |
Read a specific email by ID
| Parameter | Type | Required | Notes |
|---|---|---|---|
| message_id | string | yes | — |
Search Gmail and return a brief summary
| Parameter | Type | Required | Notes |
|---|---|---|---|
| query | string | yes | — |
| max_results | integer | no | — |
Create a draft email in Gmail
| Parameter | Type | Required | Notes |
|---|---|---|---|
| to | string | yes | — |
| subject | string | yes | — |
| body_text | string | yes | — |
Send an email via Gmail. Defaults to draft_mode=True for safety!
| Parameter | Type | Required | Notes |
|---|---|---|---|
| to | string | yes | Recipient email address |
| subject | string | yes | — |
| body_text | string | yes | — |
| draft_mode | boolean | no | If true (default), creates draft instead of sending. Set to false to actually send. |
Send an existing draft email by draft ID
| Parameter | Type | Required | Notes |
|---|---|---|---|
| draft_id | string | yes | The ID of the draft to send |
Move one email to Trash by ID (recoverable 30 days). REQUIRES confirm=True.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| message_id | string | yes | The ID of the email to delete |
| confirm | boolean | yes | MUST be true to actually delete the email. Safety check. |
Move multiple emails to Trash by ID. Defaults to dry_run=True.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| message_ids | array | yes | List of message IDs to delete |
| dry_run | boolean | no | If true (default), shows preview without deleting. Set to false to actually delete. |
Archive a Gmail message (remove INBOX). Requires confirm=True.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| message_id | string | yes | — |
| confirm | boolean | no | — |
Apply a label to messages with dry-run preview
| Parameter | Type | Required | Notes |
|---|---|---|---|
| message_ids | array | yes | — |
| label_name | string | yes | — |
| dry_run | boolean | no | — |
| create_if_missing | boolean | no | — |
Read a whole Gmail conversation: every message with date, sender, labels and attachments. Pass thread_id or any message_id.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| thread_id | string | no | — |
| message_id | string | no | — |
| include_body | boolean | no | — |
Save an attachment from a Gmail message to disk. Select it by filename or attachment_id; with a single attachment both are optional.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| message_id | string | yes | — |
| filename | string | no | — |
| attachment_id | string | no | — |
| save_to | string | no | File or directory path (default: ~/Downloads) |
| overwrite | boolean | no | — |
Reply inside the original thread with correct In-Reply-To/References headers. Creates a draft by default; set draft_mode=false to send.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| message_id | string | yes | — |
| body_text | string | yes | — |
| reply_all | boolean | no | — |
| draft_mode | boolean | no | — |
List upcoming calendar events
| Parameter | Type | Required | Notes |
|---|---|---|---|
| calendar_id | string | no | — |
| max_results | integer | no | — |
Find free time slots in a calendar
| Parameter | Type | Required | Notes |
|---|---|---|---|
| calendar_id | string | no | — |
| start_time | string | yes | ISO format start time |
| end_time | string | yes | ISO format end time |
| duration_minutes | integer | no | — |
| max_results | integer | no | — |
Create a calendar event
| Parameter | Type | Required | Notes |
|---|---|---|---|
| summary | string | yes | — |
| start_time | string | yes | ISO format start time |
| end_time | string | yes | ISO format end time |
| description | string | no | — |
| calendar_id | string | no | — |
| recurrence | array | no | RRULE lines, e.g. ['RRULE:FREQ=WEEKLY;COUNT=4'] |
Create a calendar meeting with attendees. Requires confirm=True.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| summary | string | yes | — |
| start_time | string | yes | ISO format start time |
| end_time | string | yes | ISO format end time |
| attendees | array | no | — |
| description | string | no | — |
| location | string | no | — |
| confirm | boolean | no | — |
Read file metadata: name, type, size, owner, parents, created and modified time, sharing state and link.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| file_id | string | yes | The Drive file ID |
Rename a Drive file without moving or copying it.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| file_id | string | yes | — |
| name | string | yes | New file name |
Move a file to the trash. Requires confirm=true; the file stays recoverable for 30 days. Permanent deletion is not exposed.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| file_id | string | yes | — |
| confirm | boolean | no | — |
Restore a file from the Drive trash (trashed=false).
| Parameter | Type | Required | Notes |
|---|---|---|---|
| file_id | string | yes | — |
Remove one permission from a file (revoke a person, group or public link). Requires confirm=true.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| file_id | string | yes | — |
| permission_id | string | yes | Permission ID from drive_list_permissions |
| confirm | boolean | no | — |
List comments and replies on a Google Doc, Sheet or Slide.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| file_id | string | yes | — |
| include_resolved | boolean | no | Include resolved threads (default: true) |
Add a comment to a Google Doc, Sheet or Slide, optionally quoting text from the document.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| file_id | string | yes | — |
| content | string | yes | Comment text |
| quoted_text | string | no | Optional text to quote in the comment |
Reply to an existing comment thread.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| file_id | string | yes | — |
| comment_id | string | yes | — |
| content | string | yes | — |
Mark a comment thread as resolved. Requires confirm=true.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| file_id | string | yes | — |
| comment_id | string | yes | — |
| confirm | boolean | no | — |
Find and replace text in a Google Doc. Without confirm=true it returns a preview with the number of occurrences.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| document_id | string | yes | — |
| find | string | yes | Text to search for |
| replace | string | yes | Replacement text |
| match_case | boolean | no | — |
| confirm | boolean | no | — |
Add a conditional formatting rule to a range: colour cells when the condition matches (text, number or emptiness).
| Parameter | Type | Required | Notes |
|---|---|---|---|
| spreadsheet_id | string | yes | — |
| range | string | yes | A1 range, e.g. A2:C100 |
| condition | string | yes | TEXT_CONTAINS, TEXT_EQ, NUMBER_GREATER, NUMBER_LESS, NUMBER_BETWEEN, IS_EMPTY, IS_NOT_EMPTY, … |
| value | string | no | Comparison value |
| value2 | string | no | Upper bound for NUMBER_BETWEEN |
| background_color | string | no | — |
| text_color | string | no | — |
| sheet_name | string | no | — |
Insert a chart from a range: COLUMN, BAR, LINE, AREA, SCATTER, COMBO, STEPPED_AREA or PIE. The first column is the domain.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| spreadsheet_id | string | yes | — |
| range | string | yes | A1 range with headers |
| chart_type | string | no | — |
| title | string | no | — |
| sheet_name | string | no | — |
| header | boolean | no | — |
| anchor_row | integer | no | — |
| anchor_col | integer | no | — |
| width | integer | no | — |
| height | integer | no | — |
Delete a slide from a presentation. Requires confirm=true; without it returns which slide would be removed.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| presentation_id | string | yes | — |
| slide_id | string | yes | — |
| confirm | boolean | no | — |
Delete a sheet (tab) and everything on it. Requires confirm=true; the last remaining sheet cannot be deleted.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| spreadsheet_id | string | yes | — |
| sheet_name | string | yes | Tab to delete |
| confirm | boolean | no | — |
Insert empty rows before a 1-based row number.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| spreadsheet_id | string | yes | — |
| sheet_name | string | no | — |
| start_row | integer | no | — |
| count | integer | no | — |
Delete rows starting at a 1-based row number. Requires confirm=true.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| spreadsheet_id | string | yes | — |
| sheet_name | string | no | — |
| start_row | integer | no | — |
| count | integer | no | — |
| confirm | boolean | no | — |
Merge a range (MERGE_ALL, MERGE_ROWS, MERGE_COLUMNS) or unmerge it.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| spreadsheet_id | string | yes | — |
| range | string | yes | A1 range |
| merge_type | string | no | — |
| sheet_name | string | no | — |
Move a slide to a new 1-based position and report the new order.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| presentation_id | string | yes | — |
| slide_id | string | yes | — |
| position | integer | yes | 1-based target position |
Replace the speaker notes of a slide.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| presentation_id | string | yes | — |
| slide_id | string | yes | — |
| notes | string | yes | New notes text |
List Gmail labels with their IDs, split into user and system labels.
No parameter schema on file.
Create a Gmail label (a duplicate name is rejected by Gmail).
| Parameter | Type | Required | Notes |
|---|---|---|---|
| name | string | yes | — |
| label_list_visibility | string | no | — |
| message_list_visibility | string | no | — |
Permanently delete everything in the Drive trash. Irreversible; requires confirm=true.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| confirm | boolean | no | — |
Insert empty columns before a 1-based column number.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| spreadsheet_id | string | yes | — |
| sheet_name | string | no | — |
| start_column | integer | no | — |
| count | integer | no | — |
Delete columns starting at a 1-based column. Requires confirm=true.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| spreadsheet_id | string | yes | — |
| sheet_name | string | no | — |
| start_column | integer | no | — |
| count | integer | no | — |
| confirm | boolean | no | — |
Sort a range by a 1-based column inside that range, ascending or descending. The header row is sorted with the data unless excluded from the range.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| spreadsheet_id | string | yes | — |
| range | string | yes | — |
| column | integer | no | — |
| ascending | boolean | no | — |
| sheet_name | string | no | — |
Insert a native table onto a slide (size and position in pixels).
| Parameter | Type | Required | Notes |
|---|---|---|---|
| presentation_id | string | yes | — |
| slide_id | string | yes | — |
| rows | integer | yes | — |
| columns | integer | yes | — |
| left | number | no | — |
| top | number | no | — |
| width | number | no | — |
| height | number | no | — |
Insert an inline image from a public URL at the end of a document; width/height are in points.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| document_id | string | yes | — |
| image_url | string | yes | — |
| width | number | no | — |
| height | number | no | — |
List calendars available to the account with access roles.
No parameter schema on file.
Transfer file ownership to another account. Requires confirm=true; you lose owner rights.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| file_id | string | yes | — |
| string | yes | — | |
| confirm | boolean | no | — |
Send or draft an email with local file attachments (20 MB total). Draft by default.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| to | string | yes | — |
| subject | string | yes | — |
| body_text | string | yes | — |
| attachments | array | yes | Local paths on the server machine |
| draft_mode | boolean | no | — |
List deployments of an Apps Script project.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| script_id | string | yes | — |
Create a pivot table on a new sheet from a source range. Columns are 1-based positions inside that range.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| spreadsheet_id | string | yes | — |
| source_range | string | yes | A1 range with headers |
| rows | array | yes | — |
| values | array | yes | — |
| columns | array | no | — |
| aggregation | string | no | — |
| target_sheet_name | string | no | — |
| sheet_name | string | no | — |
Style every occurrence of a text: bold, italic, font size and/or heading. Without confirm returns a preview.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| document_id | string | yes | — |
| find | string | yes | — |
| bold | boolean | no | — |
| italic | boolean | no | — |
| font_size | number | no | Points |
| heading | string | no | NORMAL_TEXT, HEADING_1..6, TITLE, SUBTITLE |
| match_case | boolean | no | — |
| confirm | boolean | no | — |
List Gmail drafts with recipient and subject.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| limit | integer | no | — |
Delete a draft. Requires confirm=true; nothing is sent.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| draft_id | string | yes | — |
| confirm | boolean | no | — |
Move an event to another calendar.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| event_id | string | yes | — |
| destination_calendar_id | string | yes | — |
| calendar_id | string | no | — |
List the layouts available in a presentation.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| presentation_id | string | yes | — |
Create an Apps Script deployment from a saved version (latest when version_number is omitted).
| Parameter | Type | Required | Notes |
|---|---|---|---|
| script_id | string | yes | — |
| description | string | no | — |
| version_number | integer | no | — |
Create a Drive shortcut to an existing file or folder.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| target_id | string | yes | — |
| name | string | no | — |
| parent_id | string | no | — |
Add a data validation rule to a range: one of a list of values, or a number between two bounds.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| spreadsheet_id | string | yes | — |
| range | string | yes | — |
| values | array | no | — |
| minimum | number | no | — |
| maximum | number | no | — |
| strict | boolean | no | — |
| input_message | string | no | — |
| sheet_name | string | no | — |
Protect a range: warning-only by default, or locked for everyone except the listed editors.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| spreadsheet_id | string | yes | — |
| range | string | yes | — |
| description | string | no | — |
| warning_only | boolean | no | — |
| editors | array | no | — |
| sheet_name | string | no | — |
Draw borders around and inside a range: SOLID, DOTTED, DASHED, SOLID_MEDIUM, SOLID_THICK or NONE.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| spreadsheet_id | string | yes | — |
| range | string | yes | — |
| style | string | no | — |
| color | string | no | — |
| sides | array | no | — |
| sheet_name | string | no | — |
List Gmail filters with their criteria and actions.
No parameter schema on file.
Create a Gmail filter: match from/subject/query, then add or remove labels (use label IDs).
| Parameter | Type | Required | Notes |
|---|---|---|---|
| from_address | string | no | — |
| subject | string | no | — |
| query | string | no | — |
| add_labels | array | no | — |
| remove_labels | array | no | — |
Replace the content of an existing draft.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| draft_id | string | yes | — |
| to | string | yes | — |
| subject | string | yes | — |
| body_text | string | yes | — |
Add a shape to a slide: RECTANGLE, ROUND_RECTANGLE, ELLIPSE, TEXT_BOX or TRIANGLE, with optional text.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| presentation_id | string | yes | — |
| slide_id | string | yes | — |
| shape_type | string | no | — |
| text | string | no | — |
| left | number | no | — |
| top | number | no | — |
| width | number | no | — |
| height | number | no | — |
Set an event colour by Google Calendar colour id ("1"–"11").
| Parameter | Type | Required | Notes |
|---|---|---|---|
| event_id | string | yes | — |
| color_id | string | yes | — |
| calendar_id | string | no | — |
Point an Apps Script deployment at a newer version.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| script_id | string | yes | — |
| deployment_id | string | yes | — |
| version_number | integer | no | — |
| description | string | no | — |
Resolve a Drive, Gmail, Docs, Slides or Sheets selector into a reviewed plan (dry run). Returns a plan_id, matched count, total size, a small sample and warnings. Cap: 300 items by default; allow_large raises it to the hard limit. Nothing is changed until bulk_run is called with confirm=true.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| domain | string | no | — |
| action | string | yes | — |
| selector | object | no | — |
| options | object | no | — |
| allow_large | boolean | no | — |
| sample | integer | no | — |
Execute a reviewed bulk plan as a background job. Requires confirm=true and a non-expired plan_id. Pass job_id to resume an interrupted job. Returns immediately with a job_id; poll bulk_status for progress.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| plan_id | string | yes | — |
| confirm | boolean | no | — |
| job_id | string | no | — |
Compact progress for a bulk job: state, done/total, ok, skipped, failed percentages and the result file path.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| job_id | string | yes | — |
Request cancellation of a running bulk job. In-flight items finish; the job state becomes cancelled and can be resumed later.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| job_id | string | yes | — |
Read one page of per-item bulk results (id, name, status, error). Paginated: 50 items by default, 200 maximum. Use the result_file path for the full artifact.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| job_id | string | yes | — |
| offset | integer | no | — |
| limit | integer | no | — |
List recent bulk jobs in this profile, newest first.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| limit | integer | no | — |
Revert a completed bulk job using the state saved in its results. Supports Drive move (restore previous parents), rename (restore previous names) and trash (restore from trash). Requires confirm=true.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| job_id | string | yes | — |
| confirm | boolean | no | — |
List Google Tasks task lists with their ids.
No parameter schema on file.
List tasks in a Google Tasks list. Default list is '@default'; show_completed includes finished tasks.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| tasklist_id | string | no | — |
| show_completed | boolean | no | — |
| max_results | integer | no | — |
Create a Google Task. due is an RFC 3339 timestamp (for example 2026-11-20T00:00:00.000Z).
| Parameter | Type | Required | Notes |
|---|---|---|---|
| title | string | yes | — |
| notes | string | no | — |
| due | string | no | — |
| tasklist_id | string | no | — |
Mark a Google Task as completed.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| task_id | string | yes | — |
| tasklist_id | string | no | — |
Create a Google Form with a title and optional description.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| title | string | yes | — |
| description | string | no | — |
Append short-answer questions to a Google Form. Each question is an object with title, optional description and required.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| form_id | string | yes | — |
| questions | array | yes | — |
Read a Google Form: title, description, responder link and questions.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| form_id | string | yes | — |
List Google Form responses with answers mapped to question titles.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| form_id | string | yes | — |
| max_results | integer | no | — |
List domains verified in Gmail Postmaster Tools with the account's permission level.
No parameter schema on file.
Read Gmail Postmaster traffic stats for a verified domain: spam rate, domain reputation, DKIM/DMARC/SPF ratios and delivery errors.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| domain | string | yes | — |
| days | integer | no | — |
- Every tool, no call limit
- No card, and mcprush charges nothing for it
- Source published under MIT
- Runs on your machine — nothing of it reaches our gateway
- Nothing to cap, because mcprush bills nothing
What counts against your monthly calls
| Tool | Unit | Calls used | Out of the allowance |
|---|
Nothing here is billable: mcprush charges nothing to install Workspace Operator or to call it, at any volume.
Two independent axes, because powerful and malicious are different questions. The grade is threat only. The capability level is blast radius, and it is never a penalty on the grade — it is priced as one subtract-only term in the score, where you can see it.
| Term | Level | What it prices | Points |
|---|---|---|---|
| capability-exposure | high | capability blast radius (high) — client exposure if the model is manipulated | −6 |
| verification-discount | source | publisher verification (provenance) — cryptographic build provenance ties the artifact to its source | −0 |
| coverage-honesty | source | inspection depth (source) — how much of the target the scan could see | −0 |
What the scan could actually read
A grade is only as meaningful as its coverage, so the scanner publishes its own depth before it publishes its result.
Tools were statically extracted from the published source (132 recovered), not enumerated from a running server. Tool-poisoning, Unicode-smuggling, capability and toxic-flow analysis ran on this inferred surface, but a mis-parsed registration could be missed or mis-attributed, so tool-derived findings are capped below “confirmed”. To grade the real runtime surface, scan the running server: --command "npx -y <package>".
Capability — what it could do if the model were manipulated
Tags derived from each tool’s schema and the implementation, not from what the tool calls itself. high is the level these add up to.
| Tool | Capability tags | Why the tag was assigned |
|---|---|---|
| workspace_search | no tags | |
| find_files | no tags | |
| drive_search_advanced | no tags | |
| drive_list_permissions | no tags | |
| create_folder | state-write | state-write: declares readOnlyHint: false |
| move_file | file-writestate-write | file-write: keyword "move_file" in tool name; state-write: declares readOnlyHint: false |
| drive_copy_file | state-write | state-write: declares readOnlyHint: false |
| share_file | state-write | state-write: declares readOnlyHint: false |
| drive_revoke_public | state-write | state-write: declares readOnlyHint: false, destructiveHint: true |
| drive_upload | state-write | state-write: declares readOnlyHint: false |
| drive_download | untrusted-input | untrusted-input: keyword "download" |
| drive_export | no tags | |
| read_sheet | no tags | |
| get_spreadsheet_meta | no tags | |
| sheet_export_csv | no tags | |
| create_spreadsheet | state-write | state-write: declares readOnlyHint: false |
| add_sheet | state-write | state-write: declares readOnlyHint: false |
| append_row | state-write | state-write: declares readOnlyHint: false |
| update_sheet | state-write | state-write: declares readOnlyHint: false |
| clear_range | state-write | state-write: declares readOnlyHint: false, destructiveHint: true |
| sheet_find_replace | state-write | state-write: declares readOnlyHint: false |
| sheet_create_filter_view | state-write | state-write: declares readOnlyHint: false |
| sheet_create_named_range | state-write | state-write: declares readOnlyHint: false |
| sheet_format | state-write | state-write: declares readOnlyHint: false |
| read_doc | no tags | |
| create_doc | state-write | state-write: declares readOnlyHint: false |
| append_to_doc | state-write | state-write: declares readOnlyHint: false |
| doc_fill_template | state-write | state-write: declares readOnlyHint: false, destructiveHint: true |
| doc_export_pdf | no tags | |
| slides_create | state-write | state-write: declares readOnlyHint: false |
| slides_get | no tags | |
| slides_add_slide | state-write | state-write: declares readOnlyHint: false |
| slides_replace_text | state-write | state-write: declares readOnlyHint: false, destructiveHint: true |
| slides_insert_image | state-write | state-write: declares readOnlyHint: false |
| create_script_project | state-write | state-write: declares readOnlyHint: false |
| get_script_content | no tags | |
| prepare_script_update | state-write | state-write: declares readOnlyHint: false |
| execute_operation | state-write | state-write: declares readOnlyHint: false |
| cancel_operation | state-write | state-write: declares readOnlyHint: false |
| restore_script_backup | state-write | state-write: declares readOnlyHint: false |
| script_run_function | state-write | state-write: declares readOnlyHint: false, destructiveHint: true |
| calendar_update_event | state-write | state-write: declares readOnlyHint: false |
| calendar_delete_event | state-write | state-write: declares readOnlyHint: false, destructiveHint: true |
| calendar_respond_to_invite | state-write | state-write: declares readOnlyHint: false |
| report_from_sheet | state-write | state-write: declares readOnlyHint: false |
| digest | state-write | state-write: declares readOnlyHint: false |
| compare_tables | state-write | state-write: declares readOnlyHint: false |
| clone_and_fill | state-write | state-write: declares readOnlyHint: false |
| sheet_to_slides | state-write | state-write: declares readOnlyHint: false |
| get_gmail_profile | no tags | |
| list_emails | no tags | |
| read_email | untrusted-input | untrusted-input: keyword "read_email" |
| gmail_search_and_summarize | no tags | |
| create_draft | state-write | state-write: declares readOnlyHint: false |
| send_email | external-sinkstate-write | external-sink: keyword "send_email"; state-write: declares readOnlyHint: false |
| send_draft | state-write | state-write: declares readOnlyHint: false |
| delete_email | state-write | state-write: declares readOnlyHint: false, destructiveHint: true |
| batch_delete_emails | state-write | state-write: declares readOnlyHint: false, destructiveHint: true |
| gmail_archive | state-write | state-write: declares readOnlyHint: false |
| gmail_label_apply | state-write | state-write: declares readOnlyHint: false |
| gmail_get_thread | no tags | |
| gmail_get_attachment | no tags | |
| gmail_reply | state-write | state-write: declares readOnlyHint: false |
| list_events | no tags | |
| calendar_find_free_slots | no tags | |
| create_event | state-write | state-write: declares readOnlyHint: false |
| calendar_create_meeting | state-write | state-write: declares readOnlyHint: false |
| drive_get_metadata | sensitive-source | sensitive-source: keyword "read_file" |
| drive_rename_file | state-write | state-write: declares readOnlyHint: false |
| drive_delete_file | file-writestate-write | file-write: keyword "delete_file" in tool name; state-write: declares readOnlyHint: false, destructiveHint: true |
| drive_restore_file | state-write | state-write: declares readOnlyHint: false |
| drive_remove_permission | state-write | state-write: declares readOnlyHint: false, destructiveHint: true |
| drive_list_comments | no tags | |
| drive_create_comment | external-sinkstate-write | external-sink: keyword "create_comment"; state-write: declares readOnlyHint: false |
| drive_reply_comment | state-write | state-write: declares readOnlyHint: false |
| drive_resolve_comment | state-write | state-write: declares readOnlyHint: false |
| doc_replace_text | state-write | state-write: declares readOnlyHint: false, destructiveHint: true |
| sheet_conditional_format | state-write | state-write: declares readOnlyHint: false |
| sheet_add_chart | state-write | state-write: declares readOnlyHint: false |
| slides_delete_slide | state-write | state-write: declares readOnlyHint: false, destructiveHint: true |
| sheet_delete_sheet | state-write | state-write: declares readOnlyHint: false, destructiveHint: true |
| sheet_insert_rows | state-write | state-write: declares readOnlyHint: false |
| sheet_delete_rows | state-write | state-write: declares readOnlyHint: false, destructiveHint: true |
| sheet_merge_cells | state-write | state-write: declares readOnlyHint: false |
| slides_move_slide | state-write | state-write: declares readOnlyHint: false |
| slides_set_notes | state-write | state-write: declares readOnlyHint: false |
| gmail_list_labels | no tags | |
| gmail_create_label | state-write | state-write: declares readOnlyHint: false |
| drive_empty_trash | state-write | state-write: declares readOnlyHint: false, destructiveHint: true |
| sheet_insert_columns | state-write | state-write: declares readOnlyHint: false |
| sheet_delete_columns | state-write | state-write: declares readOnlyHint: false, destructiveHint: true |
| sheet_sort_range | state-write | state-write: declares readOnlyHint: false |
| slides_add_table | state-write | state-write: declares readOnlyHint: false |
| docs_insert_image | state-write | state-write: declares readOnlyHint: false |
| calendar_list_calendars | no tags | |
| drive_transfer_ownership | state-write | state-write: declares readOnlyHint: false, destructiveHint: true |
| gmail_send_with_attachments | state-write | state-write: declares readOnlyHint: false |
| script_list_deployments | no tags | |
| sheet_add_pivot_table | state-write | state-write: declares readOnlyHint: false |
| docs_format_text | state-write | state-write: declares readOnlyHint: false, destructiveHint: true |
| gmail_list_drafts | no tags | |
| gmail_delete_draft | state-write | state-write: declares readOnlyHint: false, destructiveHint: true |
| calendar_move_event | state-write | state-write: declares readOnlyHint: false |
| slides_list_layouts | no tags | |
| script_create_deployment | state-write | state-write: declares readOnlyHint: false |
| drive_create_shortcut | state-write | state-write: declares readOnlyHint: false |
| sheet_set_data_validation | state-write | state-write: declares readOnlyHint: false |
| sheet_protect_range | state-write | state-write: declares readOnlyHint: false |
| sheet_set_borders | state-write | state-write: declares readOnlyHint: false |
| gmail_list_filters | no tags | |
| gmail_create_filter | state-write | state-write: declares readOnlyHint: false |
| gmail_update_draft | state-write | state-write: declares readOnlyHint: false |
| slides_add_shape | state-write | state-write: declares readOnlyHint: false |
| calendar_set_event_color | state-write | state-write: declares readOnlyHint: false |
| script_update_deployment | state-write | state-write: declares readOnlyHint: false |
| bulk_plan | no tags | |
| bulk_run | state-write | state-write: declares readOnlyHint: false |
| bulk_status | no tags | |
| bulk_cancel | state-write | state-write: declares readOnlyHint: false |
| bulk_result | no tags | |
| bulk_list | no tags | |
| bulk_undo | state-write | state-write: declares readOnlyHint: false |
| tasks_list_lists | no tags | |
| tasks_list | no tags | |
| tasks_create | state-write | state-write: declares readOnlyHint: false |
| tasks_complete | state-write | state-write: declares readOnlyHint: false |
| forms_create | state-write | state-write: declares readOnlyHint: false |
| forms_add_questions | state-write | state-write: declares readOnlyHint: false |
| forms_get | no tags | |
| forms_list_responses | no tags | |
| postmaster_list_domains | no tags | |
| postmaster_traffic_stats | no tags |
Toxic-flow graph
The lethal trifecta, checked as a graph rather than as a checklist: untrusted input, a sensitive source and an external sink have to meet before there is a path worth worrying about.
Supply chain and provenance
This is the first scan of this surface here, so there is nothing yet to compare it against.
Every result on this tab comes from one deterministic pass over the published package — offline, rule by rule, and auditable line by line above. Same methodology version, same bytes, same score.
Release history
Always latest — the install command names no version, so it installs the newest release when it runs; the current release on file is 1.22.5. Pin a release below and the command asks for exactly that one.
No release note was published with this version.
One review per account, from a signed-in account that does not publish this listing. Nothing else is asked — you can say what you think before you install it. Publishers can reply once per review, and a review can be edited or deleted by whoever wrote it.
Any signed-in account that does not publish Workspace Operator can review it, once — before installing it or after. A review from an account that has installed it is marked as one.
Nobody has reviewed this listing. The rating on the card is the mean of the reviews written here and nothing else, so there is no rating until somebody writes the first — which takes a signed-in account that does not publish it, and nothing else.