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

io.github.taylorwilsdon/workspace-mcp

PYPI · WORKSPACE-MCP · SCANNED SEP 20

Google Workspace MCP server for Gmail, Drive, Calendar, Docs, Sheets, Slides, Forms, Tasks, Chat.

Available components

−1 this week 58 Trust /100
Trust breakdown (7 categories)

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

Supply Chain Security50
  • Malware scan not yet available for this package.Unverified
  • No known CVEs affecting this package version or its production dependencies.Pass
  • Runs setuptools.build_meta at install time, a recognised native-build step with no shell scripting around it. View diagnostics → Pass
  • 4 of 58 dependencies flagged as unhealthy. View diagnostics → Partial
Provenance & Transparency10
Schema Quality & AI Usability64
  • AI-judged instruction clarity (excellent).Pass
  • Context-footprint check failed: tool/resource definitions use about 26154 tokens (~212/item across 123 items; 123 tools + 0 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 Management83
  • Stability observed for 25 of 30 days with no destabilising changes; credit accrues until the full window elapses.Partial
Tool Coverage98
  • 99% of tools have a non-trivial description (not blank, and not just the tool's name).Partial
  • 93% of tool parameters carry a description.Partial
  • Structured output schemas are declared (100% of tools); any adoption earns full credit.Pass
Tool Safety100
  • No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.Pass
  • All 6 tool(s) whose name or description implies an irreversible operation declare an MCP destructiveHint annotation.Pass
  • An AI judge read all 123 captured unit(s) of tool text and found none that tries to manipulate the model reading it.Pass
Capabilities100
  • Implements a current MCP spec version (2026-07-28).Pass
Install

How do I install the io.github.taylorwilsdon/workspace-mcp server?

io.github.taylorwilsdon/workspace-mcp runs locally as a PyPI package, launched with uvx 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.

pypi · workspace-mcp

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

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

  • 19 Sept 26 +1

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

  • 18 Sept 26 −18
    • Malware scan: pass → unverified security
    • Stability: pass → 0.77 functional
  • 17 Sept 26 0
    • Stability: 0.97 → unverified security
    • Tool safety: pass → unverified security
    • Malware scan: pass → unverified security
    • Stability: 0.97 → pass security
    • Schema quality: 191 → 212 functional
    • Capabilities: pass → unverified functional
    • Tool coverage: 99 → unverified functional
    • Schema quality: Schema quality not yet verified: we do not have a sandbox capture of the MCP schema this version of the package serves yet. functional
    • Package version: 1.25.0 → 1.27.0 functional
  • 16 Sept 26 +15
    • Malware scan: unverified → pass security
  • 15 Sept 26 −14
    • Malware scan: pass → unverified security
  • 14 Sept 26 +15
    • Malware scan: unverified → pass security
  • 13 Sept 26 −2
    • Stability: pass → 0.87 functional
  • 12 Sept 26 +1
    • Stability: 0.97 → pass security
Diagnostics

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

Captured 20 Sept 2026 · Analysed pypi/workspace-mcp@1.27.0

Provenance No attestation

The registry publishes no build provenance for this version, so there is nothing to verify.

Result No attestation
Ecosystem pypi

Background: How many MCP packages publish verified provenance →

Install scripts 1 script
Hook Tier Command
build_backend allowlisted setuptools.build_meta

Background: Why install scripts are a supply-chain risk →

Dependencies 58 packages
Packages resolved 58
Stale 3
No linked repository 1
Tree resolution Complete

Background: SBOMs and build attestations, explained →

MCP tools · 123 exposed · ~26,154 tokens

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

Tool Tokens
get_script_project ~43

Retrieves complete project details including all source files.

NameTypeReqDescription
script_idstringyesThe script project ID
user_google_emailstringyesUser's email address
NameTypeReqDescription
resultstringyes

No examples provided.

get_search_engine_info ~35

Retrieves metadata about a Programmable Search Engine.

NameTypeReqDescription
user_google_emailstringyesThe user's Google email address. Required.
NameTypeReqDescription
resultstringyes

No examples provided.

get_spreadsheet_info ~56

Gets information about a specific spreadsheet including its sheets.

NameTypeReqDescription
spreadsheet_idstringyesThe ID of the spreadsheet to get info for. Required.
user_google_emailstringyesThe user's Google email address. Required.
NameTypeReqDescription
resultstringyes

No examples provided.

get_task ~64

Get details of a specific task.

NameTypeReqDescription
task_idstringyesThe ID of the task to retrieve.
task_list_idstringyesThe ID of the task list containing the task.
user_google_emailstringyesThe user's Google email address. Required.
NameTypeReqDescription
resultstringyes

No examples provided.

get_task_list ~50

Get details of a specific task list.

NameTypeReqDescription
task_list_idstringyesThe ID of the task list to retrieve.
user_google_emailstringyesThe user's Google email address. Required.
NameTypeReqDescription
resultstringyes

No examples provided.

get_version ~63

Gets details of a specific version.

NameTypeReqDescription
script_idstringyesThe script project ID
user_google_emailstringyesUser's email address
version_numberintegeryesThe version number to retrieve (1, 2, 3, etc.)
NameTypeReqDescription
resultstringyes

No examples provided.

import_to_google_doc ~369

Imports a file (Markdown, DOCX, TXT, HTML, RTF, ODT) into Google Docs format with automatic conversion. Google Drive automatically converts the source file to native Google Docs format, preserving formatting like headings, lists, bold, italic, etc. Binary sources may be passed directly as base64_content. For batch operations, prefer file_path for files on disk so callers do not need to load full file contents into their context.

NameTypeReqDescription
base64_contentStandard base64-encoded bytes for a binary source such as DOCX or ODT.
base64_sha256Expected SHA-256 of decoded base64_content. Recommended for binary payload integrity checks.
contentText content for text-based formats. Use only for short snippets or content already in memory.
file_namestringyesThe name for the new Google Doc (extension will be ignored).
file_pathLocal file path or file:// URL for any supported format (MD, TXT, HTML, DOCX, ODT, RTF). Appropriate for larger files than content, but file_path may still load the file into memory or perform non-st…
file_urlRemote URL to fetch the file from (http/https).
folder_idstringThe ID of the parent folder. Defaults to 'root'.
source_formatSource format hint ('md', 'markdown', 'docx', 'txt', 'html', 'rtf', 'odt'). Auto-detected from file_name extension if not provided.
user_google_emailstringyesThe user's Google email address. Required.
NameTypeReqDescription
resultstringyes

No examples provided.

import_to_google_sheets ~360

Imports a spreadsheet (XLSX, XLS, ODS, CSV, TSV) into Google Sheets format with automatic conversion. Google Drive automatically converts the source spreadsheet to native Google Sheets format, preserving rows, columns, sheets, and values. Binary sources may be passed directly as base64_content. For batch operations, prefer file_path for files on disk so callers do not need to load full file contents into their context.

NameTypeReqDescription
base64_contentStandard base64-encoded bytes for an XLSX, XLS, or ODS source.
base64_sha256Expected SHA-256 of decoded base64_content. Recommended for binary payload integrity checks.
contentText content for text-based formats (CSV, TSV). Use only for short snippets or content already in memory.
file_namestringyesThe name for the new Google Sheets spreadsheet (extension will be ignored).
file_pathLocal file path or file:// URL for any supported format (XLSX, XLS, ODS, CSV, TSV). Appropriate for larger files than content, but file_path may still load the file into memory or perform non-streami…
file_urlRemote URL to fetch the spreadsheet from (http/https).
folder_idstringThe ID of the parent folder. Defaults to 'root'.
source_formatSource format hint ('xlsx', 'xls', 'ods', 'csv', 'tsv'). Auto-detected from file_name extension if not provided.
user_google_emailstringyesThe user's Google email address. Required.
NameTypeReqDescription
resultstringyes

No examples provided.

import_to_google_slides ~317

Imports a presentation (PPTX, PPT, ODP) into Google Slides format with automatic conversion. Google Drive automatically converts the source presentation to native Google Slides format, preserving slides, layouts, text, and images. Binary sources may be passed directly as base64_content. For batch operations, prefer file_path for files on disk so callers do not need to load full file contents into their context.

NameTypeReqDescription
base64_contentStandard base64-encoded bytes for a PPTX or ODP source.
base64_sha256Expected SHA-256 of decoded base64_content. Recommended for binary payload integrity checks.
file_namestringyesThe name for the new Google Slides presentation (extension will be ignored).
file_pathLocal file path or file:// URL for any supported format (PPTX, PPT, ODP). Appropriate for larger files than content, but file_path may still load the file into memory or perform non-streaming reads.…
file_urlRemote URL to fetch the presentation from (http/https).
folder_idstringThe ID of the parent folder. Defaults to 'root'.
source_formatSource format hint ('pptx', 'ppt', 'odp'). Auto-detected from file_name extension if not provided.
user_google_emailstringyesThe user's Google email address. Required.
NameTypeReqDescription
resultstringyes

No examples provided.

insert_doc_elements ~158

Inserts structural elements like tables, lists, or page breaks into a Google Doc.

NameTypeReqDescription
columnsintegerNumber of columns for table (required for table)
document_idstringyesID of the document to update
element_typestringyesType of element to insert ("table", "list", "page_break")
indexintegeryesPosition to insert element (0-based)
list_typestringType of list ("UNORDERED", "ORDERED") (required for list)
rowsintegerNumber of rows for table (required for table)
textstringInitial text content for list items
user_google_emailstringyesUser's Google email address
NameTypeReqDescription
resultstringyes

No examples provided.

insert_doc_image ~105

Inserts an image into a Google Doc from Drive or a URL.

NameTypeReqDescription
document_idstringyesID of the document to update
heightintegerImage height in points (optional)
image_sourcestringyesDrive file ID or public image URL
indexintegeryesPosition to insert image (0-based)
user_google_emailstringyesUser's Google email address
widthintegerImage width in points (optional)
NameTypeReqDescription
resultstringyes

No examples provided.

inspect_doc_structure ~703

Essential tool for finding safe insertion points and understanding document structure. USE THIS FOR: - Finding the correct index for table insertion - Understanding document layout before making changes - Locating existing tables and their positions - Getting document statistics and complexity info - Inspecting structure of specific tabs CRITICAL FOR TABLE OPERATIONS: ALWAYS call this BEFORE creating tables to get a safe insertion index. WHAT THE OUTPUT SHOWS: - total_elements: Number of document elements - total_length: Maximum safe index for insertion - tables: Number of existing tables - table_details: Position and dimensions of each table - headers / footers: Real segment IDs and previews for header/footer editing - tabs: List of available tabs in the document (if no tab_id specified) - empty_paragraphs: newline-only count, excluding existing/suggested object anchors - empty_paragraph_ranges: start/end extents, capped at 100 - empty_paragraph_ranges_truncated: whether ranges were omitted - last_paragraph: is_list_item and is_empty, or null if no body paragraphs Paragraph statistics cover top-level body paragraphs and appear at the top level in basic mode or under "statistics" in detailed mode. Ranges can include required empty paragraphs. Before cleanup, use detailed=true to check adjacent elements, formatting, and object anchors. Preserve the final newline and newlines before tables, tables of contents, or section breaks. The final range has end == total_length and may be omitted by truncation. WORKFLOW FOR TABLE INSERTION: Step 1: Call this function Step 2: Note the "total_length" value Step 3: Use an index < total_length for table insertion Step 4: Create your table FORMATTING WORKFLOW: After inserting all text via batch_update_doc with end_of_segment=true, call this tool with detailed=true to get exact start_index and end_index for every paragraph. Use those indices directly in format_text and update_paragraph_style operations in a second batch_update…

NameTypeReqDescription
detailedbooleanWhether to return detailed structure information
document_idstringyesID of the document to inspect
preview_charsMaximum characters of paragraph, header and footer text preview. Pass 0 or None for the full text, needed to locate a token inside a paragraph longer than the default 100 characters.
tab_idstringOptional ID of the tab to inspect. If not provided, inspects main document.
user_google_emailstringyesUser's Google email address
NameTypeReqDescription
resultstringyes

No examples provided.

list_calendars ~75

Retrieves a list of calendars accessible to the authenticated user.

NameTypeReqDescription
max_resultsMaximum calendars to return in one page. Omit to use the API default.
page_tokenToken for the next page, taken from a previous response.
user_google_emailstringyesThe user's Google email address. Required.
NameTypeReqDescription
resultstringyes

No examples provided.

list_contact_groups ~69

List contact groups (labels) for the user.

NameTypeReqDescription
page_sizeintegerMaximum number of groups to return (default: 100, max: 1000).
page_tokenToken for pagination.
user_google_emailstringyesThe user's Google email address. Required.
NameTypeReqDescription
resultstringyes

No examples provided.

list_contacts ~100

List contacts for the authenticated user.

NameTypeReqDescription
page_sizeintegerMaximum number of contacts to return (default: 100, max: 1000).
page_tokenToken for pagination.
sort_orderSort order: "LAST_MODIFIED_ASCENDING", "LAST_MODIFIED_DESCENDING", "FIRST_NAME_ASCENDING", or "LAST_NAME_ASCENDING".
user_google_emailstringyesThe user's Google email address. Required.
NameTypeReqDescription
resultstringyes

No examples provided.

list_deployments ~61

Lists all deployments for a script project, including the bound version number of each deployment so callers can verify which version is served.

NameTypeReqDescription
script_idstringyesThe script project ID
user_google_emailstringyesUser's email address
NameTypeReqDescription
resultstringyes

No examples provided.

list_docs_in_folder ~60

Lists Google Docs within a specific Drive folder. Returns: str: A formatted list of Google Docs in the specified folder.

NameTypeReqDescription
folder_idstring
page_sizeinteger
user_google_emailstringyes
NameTypeReqDescription
resultstringyes

No examples provided.

list_document_comments ~47

List all comments from a Google Document (optional max_comments to limit results).

NameTypeReqDescription
document_idstringyes
max_comments
user_google_emailstringyes
NameTypeReqDescription
resultstringyes

No examples provided.

list_drive_items ~657

Lists files/folders or shared drive containers, supporting shared drives. If `drive_id` is specified, lists items within that shared drive. `folder_id` is then relative to that drive (or use drive_id as folder_id for root). If `drive_id` is not specified, lists items from user's "My Drive" and accessible shared drives (if `include_items_from_all_drives` is True). Set `resource_type` to "shared_drives" to list shared drive containers instead of folder contents.

NameTypeReqDescription
corporaCorpus to query ('user', 'drive', 'allDrives'). If `drive_id` is set and `corpora` is None, 'drive' is used. If None and no `drive_id`, API defaults apply.
detailedbooleanWhether to include size, modified time, and link in results. Defaults to True.
drive_idID of the shared drive. If provided, the listing is scoped to this drive.
file_typeRestrict results to a specific file type. Accepts a friendly name ('folder', 'document'/'doc', 'spreadsheet'/'sheet', 'presentation'/'slides', 'form', 'd…
folder_idstringThe ID of the Google Drive folder. Defaults to 'root'. For a shared drive, this can be the shared drive's ID to list its root, or a folder ID within that shared drive.
include_items_from_all_drivesbooleanWhether items from all accessible shared drives should be included if `drive_id` is not set. Defaults to True.
include_organizersbooleanWhen resource_type="shared_drives", include principals with the organizer role. This costs one extra permissions.list API call per shared drive returned.…
order_bySort order. Comma-separated list of sort keys with optional 'desc' modifier. Valid keys: 'createdTime', 'folder', 'modifiedByMeTime', 'modifiedTime', 'name…
page_sizeintegerThe maximum number of items to return. Defaults to 100.
page_tokenPage token from a previous response's nextPageToken to retrieve the next page of results.
queryShared drive query used only when resource_type="shared_drives", e.g. "name contains 'Engineering'".
resource_typestringWhat to list. Use "items" for folder contents or "shared_drives" for shared drive containers. Defaults to "items".
user_google_emailstringyesThe user's Google email address. Required.
NameTypeReqDescription
resultstringyes

No examples provided.

list_form_responses ~77

List a form's responses.

NameTypeReqDescription
form_idstringyesThe ID of the form.
page_sizeintegerMaximum number of responses to return. Defaults to 10.
page_tokenToken for retrieving next page of results.
user_google_emailstringyesThe user's Google email address. Required.
NameTypeReqDescription
resultstringyes

No examples provided.

list_gmail_filters ~36

Lists all Gmail filters configured in the user's mailbox.

NameTypeReqDescription
user_google_emailstringyesThe user's Google email address. Required.
NameTypeReqDescription
resultstringyes

No examples provided.

list_gmail_labels ~161

Lists labels in the user's Gmail account.

NameTypeReqDescription
compactbooleanReturn minimal JSON {"count", "labels": [{"id", "name"}]} sorted by name, instead of the formatted text list. For callers that parse the result, e.g. a label cache refresh.
include_systembooleanInclude Gmail system labels (INBOX, SENT, ...). Set False to return user labels only.
prefixReturn only labels whose name starts with this exact (case-sensitive) string. users.labels.list accepts no filter, so the full list is fetched and narrowed here: this shrinks what the caller receives…
user_google_emailstringyesThe user's Google email address. Required.
NameTypeReqDescription
resultstringyes

No examples provided.

list_presentation_comments ~48

List all comments from a Google Presentation (optional max_comments to limit results).

NameTypeReqDescription
max_comments
presentation_idstringyes
user_google_emailstringyes
NameTypeReqDescription
resultstringyes

No examples provided.

list_script_processes ~77

Lists recent execution processes for user's scripts.

NameTypeReqDescription
page_sizeintegerNumber of results (default: 50)
script_idOptional script ID. When set, lists all processes for that script visible to the user, including runs by other users.
user_google_emailstringyesUser's email address
NameTypeReqDescription
resultstringyes

No examples provided.

list_script_projects ~70

Lists Google Apps Script projects accessible to the user. Uses Drive API to find Apps Script files.

NameTypeReqDescription
page_sizeintegerNumber of results per page (default: 50)
page_tokenToken for pagination (optional)
user_google_emailstringyesUser's email address
NameTypeReqDescription
resultstringyes

No examples provided.

list_sheet_tables ~70

Lists all structured tables in a spreadsheet with their IDs, names, ranges, and column details. Use this to find table IDs for append_table_rows.

NameTypeReqDescription
spreadsheet_idstringyesThe ID of the spreadsheet. Required.
user_google_emailstringyesThe user's Google email address. Required.
NameTypeReqDescription
resultstringyes

No examples provided.

list_spaces ~65

Lists Google Chat spaces (rooms and direct messages) accessible to the user. Returns: str: A formatted list of Google Chat spaces accessible to the user.

NameTypeReqDescription
page_sizeinteger
space_typestring
user_google_emailstringyes
NameTypeReqDescription
resultstringyes

No examples provided.

list_spreadsheet_comments ~49

List all comments from a Google Spreadsheet (optional max_comments to limit results).

NameTypeReqDescription
max_comments
spreadsheet_idstringyes
user_google_emailstringyes
NameTypeReqDescription
resultstringyes

No examples provided.

list_spreadsheets ~57

Lists spreadsheets from Google Drive that the user has access to.

NameTypeReqDescription
max_resultsintegerMaximum number of spreadsheets to return. Defaults to 25.
user_google_emailstringyesThe user's Google email address. Required.
NameTypeReqDescription
resultstringyes

No examples provided.

list_task_lists ~69

List all task lists for the user.

NameTypeReqDescription
max_resultsintegerMaximum number of task lists to return (default: 1000, max: 1000).
page_tokenToken for pagination.
user_google_emailstringyesThe user's Google email address. Required.
NameTypeReqDescription
resultstringyes

No examples provided.

list_tasks ~269

List all tasks in a specific task list.

NameTypeReqDescription
completed_maxUpper bound for completion date (RFC 3339 timestamp).
completed_minLower bound for completion date (RFC 3339 timestamp).
due_maxUpper bound for due date (RFC 3339 timestamp).
due_minLower bound for due date (RFC 3339 timestamp).
max_resultsintegerMaximum number of tasks to return. (default: 20, max: 10000).
page_tokenToken for pagination.
show_assignedbooleanWhether to include assigned tasks (default: False).
show_completedbooleanWhether to include completed tasks (default: True). Note that show_hidden must also be true to show tasks completed in first party clients, such as the web UI and Google's mobile apps.
show_deletedbooleanWhether to include deleted tasks (default: False).
show_hiddenbooleanWhether to include hidden tasks (default: False).
task_list_idstringyesThe ID of the task list to retrieve tasks from.
updated_minLower bound for last modification time (RFC 3339 timestamp).
user_google_emailstringyesThe user's Google email address. Required.
NameTypeReqDescription
resultstringyes

No examples provided.

list_versions ~62

Lists all versions of a script project. Versions are immutable snapshots of your script code. They are created when you deploy or explicitly create a version.

NameTypeReqDescription
script_idstringyesThe script project ID
user_google_emailstringyesUser's email address
NameTypeReqDescription
resultstringyes

No examples provided.

manage_conditional_formatting ~375

Manages conditional formatting rules on a Google Sheet. Supports adding, updating, and deleting conditional formatting rules via a single tool.

NameTypeReqDescription
actionstringyesThe operation to perform. Must be one of "add", "update", or "delete".
background_colorHex background color to apply when condition matches. Used by "add" and "update".
condition_typeSheets condition type (e.g., NUMBER_GREATER, TEXT_CONTAINS, DATE_BEFORE, CUSTOM_FORMULA). Required for "add". Optional for "update" (preserves existing type if omitted).
condition_valuesValues for the condition; accepts a list or a JSON string representing a list. Depends on condition_type. Used by "add" and "update".
gradient_pointsList (or JSON list) of gradient points for a color scale. If provided, a gradient rule is created and boolean parameters are ignored. Used by "add" and "update".
range_nameA1-style range (optionally with sheet name). Required for "add". Optional for "update" (preserves existing ranges if omitted). Not used for "delete".
rule_index0-based index of the rule. For "add", optionally specifies insertion position. Required for "update" and "delete".
sheet_nameSheet name to locate the rule when range_name is omitted. Defaults to the first sheet. Used by "update" and "delete".
spreadsheet_idstringyesThe ID of the spreadsheet. Required.
text_colorHex text color to apply when condition matches. Used by "add" and "update".
user_google_emailstringyesThe user's Google email address. Required.
NameTypeReqDescription
resultstringyes

No examples provided.

manage_contact ~786

Create, update, or delete a contact. Consolidated tool replacing create_contact, update_contact, and delete_contact.

NameTypeReqDescription
actionstringyesThe action to perform: "create", "update", or "delete".
addressStreet address (for create/update).
birthdayBirthday as 'YYYY-MM-DD', 'MM-DD' (no year), or 'clear'/'' to remove.
contact_idThe contact ID. Required for "update" and "delete" actions.
email[DEPRECATED] Email address. Use emails=[{"address":..., "type":"other"}].
emailsList of email dicts {address, type?}.
emails_modestringHow to update emails on "update": "merge" (default), "replace", or "remove".
family_nameLast name (for create/update).
given_nameFirst name (for create/update).
job_title[DEPRECATED] Job title. Use organizations=[{"title":...}].
nicknamesList of nickname dicts {value, type?}. Useful for bilingual contacts (e.g. Hebrew/English alternative forms). Android dialer and WhatsApp search both index nicknames, enabling cross-script lookup. Su…
nicknames_modestringHow to update nicknames on "update": "merge" (default), "replace", or "remove".
notesAdditional notes (for create/update).
organization[DEPRECATED] Company name. Use organizations=[{"name":...}].
organizationsList of org dicts {name?, title?, department?, jobDescription?, type?}.
organizations_modestringHow to update orgs on "update": "merge" (default), "replace", or "remove".
phone[DEPRECATED] Single phone number. Use phones=[{"number":..., "type":"mobile"}].
phonesList of phone dicts {number, type?}. Supported types: mobile, work, home, main, workMobile, internal, other, etc. Use type="internal" for internal PBX/ATS short numbers (e.g. 250, 301) — stored as a…
phones_modestringHow to update phones on "update": "merge" (default), "replace", or "remove". merge = read-modify-write with dedup by canonicalForm/normalized value. replace = overwrite all phones with provided list.…
relationsList of relation dicts {person, type?}. Supported types: spouse, child, parent, friend, manager, assistant, etc.
relations_modestringHow to update relations on "update": "merge" (default), "replace", or "remove".
urlsList of URL dicts {value, type?}. Supported types: homepage, blog, profile, work, ftp, reservations, other, etc.
urls_modestringHow to update urls on "update": "merge" (default), "replace", or "remove". merge dedups by normalized URL (lowercased, trailing slash stripped).
user_definedList of custom field dicts {key, value}. Useful for structured data like account numbers, IDs, or custom dates.
user_defined_modestringHow to update custom fields on "update": "merge" (default), "replace", or "remove". merge overrides value on matching key; new keys appended.
user_google_emailstringyesThe user's Google email address. Required.
NameTypeReqDescription
resultstringyes

No examples provided.

manage_contact_group ~192

Create, update, delete a contact group, or modify its members. Consolidated tool replacing create_contact_group, update_contact_group, delete_contact_group, and modify_contact_group_members.

NameTypeReqDescription
actionstringyesThe action to perform: "create", "update", "delete", or "modify_members".
add_contact_idsContact IDs to add (for "modify_members").
delete_contactsbooleanIf True and action is "delete", also delete contacts in the group (default: False).
group_idThe contact group ID. Required for "update", "delete", and "modify_members" actions.
nameThe group name. Required for "create" and "update" actions.
remove_contact_idsContact IDs to remove (for "modify_members").
user_google_emailstringyesThe user's Google email address. Required.
NameTypeReqDescription
resultstringyes

No examples provided.

manage_contacts_batch ~248

Batch create, update, or delete contacts. Consolidated tool replacing batch_create_contacts, batch_update_contacts, and batch_delete_contacts.

NameTypeReqDescription
actionstringyesThe action to perform: "create", "update", or "delete".
contact_idsList of contact IDs for "delete" action.
contactsList of contact dicts for "create" action. Each dict may contain: given_name, family_name, phones, emails, organizations, notes, address. Deprecated: phone, email, organization, job_title.
fieldFor "update" action — the single People API field to update across all contacts in this batch. Required. Must be one of: names, phoneNumbers, emailAddresses, organizations, nicknames, urls, userDefin…
updatesList of update dicts for "update" action. Each dict must contain contact_id and may contain the same fields as contacts.
user_google_emailstringyesThe user's Google email address. Required.
NameTypeReqDescription
resultstringyes

No examples provided.

manage_deployment ~148

Manages Apps Script deployments. Supports creating, updating, and deleting deployments.

NameTypeReqDescription
actionstringyesAction to perform - "create", "update", or "delete"
deployment_idThe deployment ID (required for update and delete)
descriptionDeployment description (required for create; optional for update when version_number is supplied)
script_idstringyesThe script project ID
user_google_emailstringyesUser's email address
version_descriptionOptional version description (for create only)
version_numberVersion number to point the deployment at (for update only). Required to roll a deployment forward to a newly created script version.
NameTypeReqDescription
resultstringyes

No examples provided.

manage_doc_tab ~188

Manage document tabs: create, rename, delete, or populate from Markdown.

NameTypeReqDescription
actionstringyesAction to perform - "create", "rename", "delete", or "populate_from_markdown"
document_idstringyesID of the document
indexPosition index for new tab, 0-based among siblings (required for create)
markdown_textMarkdown source to render (populate_from_markdown only)
parent_tab_idOptional parent tab ID to nest under (create only)
replace_existingbooleanClear tab body before inserting markdown (default True)
tab_idTab ID (required for rename, delete, populate_from_markdown; use inspect_doc_structure to find IDs)
titleTab title (required for create; used by rename)
user_google_emailstringyesUser's Google email address
NameTypeReqDescription
resultyes

No examples provided.

manage_document_comment ~121

Manage comments on a Google Document. Actions: - create: Create a new document-level comment. Requires comment_content. Note: The Drive API cannot anchor comments to specific text; only the Google Docs UI can do that. - reply: Reply to a comment. Requires comment_id and comment_content. - resolve: Resolve a comment. Requires comment_id.

NameTypeReqDescription
actionstringyes
comment_content
comment_id
document_idstringyes
user_google_emailstringyes
NameTypeReqDescription
resultstringyes

No examples provided.

manage_drive_access ~511

Consolidated tool for managing Google Drive file and folder access permissions. Supports granting, batch-granting, updating, revoking permissions, and transferring file ownership -- all through a single entry point.

NameTypeReqDescription
actionstringyesThe access management action to perform. Required. One of: - "grant": Share with a single user, group, domain, or anyone. - "grant_batch": Share with multiple recipients in one call. - "update": Modi…
allow_file_discoveryFor 'domain'/'anyone' shares, whether the file appears in search. Used by "grant".
email_messageCustom notification email message. Used by "grant" and "grant_batch".
expiration_timeExpiration in RFC 3339 format (e.g., "2025-01-15T00:00:00Z"). Used by "grant" and "update".
file_idstringyesThe ID of the file or folder. Required.
move_to_new_owners_rootbooleanMove file to the new owner's My Drive root. Defaults to False. Used by "transfer_owner".
new_owner_emailEmail of the new owner. Required for "transfer_owner".
permission_idThe permission ID to modify or remove. Required for "update" and "revoke" actions.
recipientsList of recipient objects for "grant_batch". Each should have: email (str), role (str, optional), share_type (str, optional), expiration_time (str, optional). For domain shares use 'domain' field ins…
rolePermission role -- 'reader', 'commenter', or 'writer'. Used by "grant" (defaults to 'reader') and "update".
send_notificationbooleanWhether to send notification emails. Defaults to True. Used by "grant" and "grant_batch".
share_typestringType of sharing -- 'user', 'group', 'domain', or 'anyone'. Used by "grant". Defaults to 'user'.
share_withEmail address (user/group), domain name (domain), or omit for 'anyone'. Used by "grant".
user_google_emailstringyesThe user's Google email address. Required.
NameTypeReqDescription
resultstringyes

No examples provided.

manage_event ~849

Manages calendar events. Supports creating, updating, deleting, and RSVP.

NameTypeReqDescription
actionstringyesAction to perform - "create", "update", "delete", or "rsvp".
add_google_meetWhether to add/remove native Google Meet.
attachmentsList of Google Drive file URLs or IDs to attach. On action="update" this replaces the event's existing attachments rather than appending to them, matching the Calendar API's patch semantics.
attendeesAttendee email addresses or objects.
calendar_idstringCalendar ID (default: 'primary').
color_idEvent color ID (1-11, update only).
conference_dataRaw Google Calendar `conferenceData` payload to attach a third-party conference (Zoom/Webex/Teams add-on). Use this for full control; mutually exclusive with the conference_provider helper params and…
conference_idOptional provider-side conference/meeting ID.
conference_passcodeOptional passcode for the third-party conference.
conference_providerHigher-level helper: third-party provider name (e.g. "zoom", "webex", "teams"). Requires conference_uri. The MCP builds the addOn `conferenceData` block internally. (create/update only)
conference_uriJoin URL for the third-party conference (e.g. "https://zoom.us/j/123456789"). Required when conference_provider is set.
descriptionEvent description.
end_timeEnd time (required for create). An RFC3339 UTC offset identifies the exact instant and is preserved. Without an offset, supply end_timezone or timezone. All-day end dates are exclusive.
end_timezoneIANA timezone for the end boundary only, overriding timezone. See start_timezone.
event_idEvent ID (required for update and delete).
guests_can_invite_othersWhether attendees can invite others.
guests_can_modifyWhether attendees can modify.
guests_can_see_other_guestsWhether attendees can see other guests.
locationEvent location.
recurrenceRFC5545 recurrence rules for a recurring event, e.g. ["RRULE:FREQ=WEEKLY;COUNT=10"].
remindersCustom reminder objects.
responseRSVP response — "accepted", "declined", "tentative", or "needsAction" (rsvp action only).
rsvp_commentOptional message to include with the RSVP response (rsvp action only).
send_updatesNotification behavior for create, update, delete, and rsvp — "all" (default), "externalOnly", or "none".
start_timeStart time (required for create). An RFC3339 UTC offset identifies the exact instant and is preserved. Without an offset, supply start_timezone or timezone. For a local wall-clock time, omit the offs…
start_timezoneIANA timezone for the start boundary only, overriding timezone. Use for events whose two ends sit in different zones - a flight departing 13:45 "Asia/Jerusalem" and landing 17:50 "Europe/Amsterdam" i…
summaryEvent title (required for create).
timezoneIANA timezone applied to both boundaries (e.g., "America/New_York"). Converts offset-bearing timestamps without changing their instant; interprets offset-free timestamps as local times in this zone.…
transparency"opaque" (busy) or "transparent" (free).
use_default_remindersWhether to use default reminders.
user_google_emailstringyesThe user's Google email address. Required.
visibility"default", "public", "private", or "confidential".
NameTypeReqDescription
resultstringyes

No examples provided.

manage_focus_time ~536

Manages Focus Time events on Google Calendar. These special events auto-decline meeting invitations and, by default, set the user's chat status to Do Not Disturb, helping protect blocks of uninterrupted work time.

NameTypeReqDescription
actionstringyesAction to perform - "create", "list", "update", or "delete".
auto_decline_modeHow to handle conflicting invitations. One of: "declineAllConflictingInvitations" (default), "declineOnlyNewConflictingInvitations", "declineNone".
calendar_idstringCalendar ID. Defaults to 'primary'. Focus Time status events live on primary calendars, so use 'primary' or a user's primary calendar ID/email rather than a secondary calendar ID.
chat_statusGoogle Chat status during the focus time. Supports "doNotDisturb" (default) and "available".
decline_messageMessage included when auto-declining invitations.
descriptionEvent description. Useful for adding context about what the focus time is for.
end_timeEnd date/time (exclusive). Same format as start_time. For a single full day on April 5, use start_time='2026-04-05' and end_time='2026-04-06'. Required for create.
event_idEvent ID. Required for "update" and "delete" actions.
max_resultsintegerFor "list" action: maximum events to return. Defaults to 10.
recurrenceRFC5545 recurrence rules for a recurring Focus Time series, e.g. ["RRULE:FREQ=WEEKLY;COUNT=10"].
start_timeStart date/time. Use 'YYYY-MM-DD' for full-day or RFC3339 for partial-day (e.g., '2024-04-05T09:00:00Z'). Date-only values are auto-converted to dateTime (midnight-to-midnight). Required for create.
summaryDisplay text on the calendar. Defaults to "Focus Time".
time_maxFor "list" action: end of time range.
time_minFor "list" action: start of time range. Defaults to current time. Recurring series are expanded into individual instances in the requested range.
timezoneTimezone for the event (e.g., "America/New_York", "Europe/London"). Required when using date-only values or dateTime values without an explicit UTC offset.
user_google_emailstringyesThe user's Google email address. Required.
NameTypeReqDescription
resultstringyes

No examples provided.

manage_gmail_filter ~110

Manages Gmail filters. Supports creating and deleting filters.

NameTypeReqDescription
actionstringyesAction to perform - "create" or "delete".
criteriaFilter criteria object (required for create).
filter_actionFilter action object (required for create). Named 'filter_action' to avoid shadowing the 'action' parameter.
filter_idID of the filter to delete (required for delete).
user_google_emailstringyesThe user's Google email address. Required.
NameTypeReqDescription
resultstringyes

No examples provided.

manage_gmail_label ~246

Manages Gmail labels: create, update, or delete labels.

NameTypeReqDescription
actionstringyesAction to perform on the label.
background_colorLabel background color as a hex string, e.g. "#fb4c2f". Set together with text_color; Gmail requires both. Gmail accepts only its own palette, and an unsupported value is rejected before the request.…
clear_colorbooleanOn update, remove the label's current color. Cannot be combined with background_color or text_color.
label_idLabel ID. Required for update and delete operations.
label_list_visibilitystringWhether the label is shown in the label list.
message_list_visibilitystringWhether the label is shown in the message list.
nameLabel name. Required for create, optional for update.
text_colorLabel text color as a hex string, e.g. "#ffffff". Set together with background_color. Same palette. On update, omitting both keeps the label's current color.
user_google_emailstringyesThe user's Google email address. Required.
NameTypeReqDescription
resultstringyes

No examples provided.

manage_out_of_office ~486

Manages Out of Office events on Google Calendar. These special events auto-decline meeting invitations and set the user's status to "Out of office" across Google Workspace.

NameTypeReqDescription
actionstringyesAction to perform - "create", "list", "update", or "delete".
auto_decline_modeHow to handle conflicting invitations. One of: "declineAllConflictingInvitations" (default), "declineOnlyNewConflictingInvitations", "declineNone".
calendar_idstringCalendar ID. Defaults to 'primary'. Out of Office status events live on primary calendars, so use 'primary' or a user's primary calendar ID/email rather than a secondary calendar ID.
decline_messageMessage included when auto-declining invitations.
end_timeEnd date/time (exclusive). Same format as start_time. For a single full day on April 5, use start_time='2026-04-05' and end_time='2026-04-06'. Required for create.
event_idEvent ID. Required for "update" and "delete" actions.
max_resultsintegerFor "list" action: maximum events to return. Defaults to 10.
recurrenceRFC5545 recurrence rules for a recurring Out of Office series, e.g. ["RRULE:FREQ=WEEKLY;COUNT=10"].
start_timeStart date/time. Use 'YYYY-MM-DD' for full-day or RFC3339 for partial-day (e.g., '2024-04-05T09:00:00Z'). Date-only values are auto-converted to dateTime (midnight-to-midnight). Required for create.
summaryDisplay text on the calendar. Defaults to "Out of Office".
time_maxFor "list" action: end of time range.
time_minFor "list" action: start of time range. Defaults to current time. Recurring series are expanded into individual instances in the requested range.
timezoneTimezone for the event (e.g., "America/New_York", "Europe/London"). Required when using date-only values or dateTime values without an explicit UTC offset.
user_google_emailstringyesThe user's Google email address. Required.
NameTypeReqDescription
resultstringyes

No examples provided.

manage_presentation_comment ~120

Manage comments on a Google Presentation. Actions: - create: Create a new comment. Requires comment_content. Note: The Drive API cannot anchor comments to arbitrary text; Slides comments are element-scoped via the API. - reply: Reply to a comment. Requires comment_id and comment_content. - resolve: Resolve a comment. Requires comment_id.

NameTypeReqDescription
actionstringyes
comment_content
comment_id
presentation_idstringyes
user_google_emailstringyes
NameTypeReqDescription
resultstringyes

No examples provided.

Common questions

What is the io.github.taylorwilsdon/workspace-mcp server?

io.github.taylorwilsdon/workspace-mcp is listed in the public MCP registry as io.github.taylorwilsdon/workspace-mcp. Google Workspace MCP server for Gmail, Drive, Calendar, Docs, Sheets, Slides, Forms, Tasks, Chat. This page covers its PyPI package (workspace-mcp).

Is the io.github.taylorwilsdon/workspace-mcp server safe to use?

io.github.taylorwilsdon/workspace-mcp scores 58 out of 100 on VerifyMCP. We found no known CVEs affecting it as of 20 September 2026. 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 io.github.taylorwilsdon/workspace-mcp server expose?

io.github.taylorwilsdon/workspace-mcp exposes 123 tools: start_google_auth, search_gmail_messages, get_gmail_message_content, get_gmail_messages_content_batch, get_gmail_attachment_content, and 118 more. Their descriptions and schemas cost roughly 26,154 tokens of context every time the server is loaded.

Is the io.github.taylorwilsdon/workspace-mcp server still maintained?

io.github.taylorwilsdon/workspace-mcp 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.