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

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

Available components

0 this week 62 Trust /100

Last scanned (1 hour ago)

Scores higher than 59% of PyPI servers

Category Productivity and Notes

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 build step with no custom scripting around it. View diagnostics → Pass
  • 4 of 57 dependencies flagged as unhealthy. View diagnostics → Partial
Provenance & Transparency23
Schema Quality & AI Usability59
  • AI-judged instruction clarity (good).Pass
  • Context-footprint check failed: tool/resource definitions use about 30634 tokens (~257/item across 119 items; 119 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 Management98
  • Stability check failed: the tool surface changed between 1.30.1 and 2.3.0: 2 tool removals, 0 breaking changes, 1 additions. See how to fix → Fail
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 5 tool(s) whose name or description implies an irreversible operation declare an MCP destructiveHint annotation.Pass
  • An AI judge read all 119 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
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.

  • 5 Nov 26 −15
    • Malware scan: pass → unverified ▼ security
  • 3 Nov 26 +15
    • Malware scan: unverified → pass ▲ security
  • 2 Nov 26 −15
    • Malware scan: pass → unverified ▼ security
  • 1 Nov 26 +15
    • Malware scan: unverified → pass ▲ security
  • 30 Oct 26 0
    • Malware scan: unverified → pass ▲ security
    • Package version: 2.2.1 → 2.3.0 functional
  • 29 Oct 26 0
    • Package version: 2.0.1 → 2.2.1 functional
  • 28 Oct 26 +1

    No change was recorded against any check on this day. Stability & Change Management went from 89 to 98.

  • 26 Oct 26 0
    • Package version: 2.2.0 → 2.2.1 functional
Diagnostics

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

Captured 5 Nov 2026 · Analysed pypi/workspace-mcp@2.3.0

Provenance No attestation

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

Result No attestation
Ecosystem pypi
Reason No attestation published

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 57 packages
Packages resolved 57
Stale 3
No linked repository 1
Tree resolution Complete

Background: SBOMs and build attestations, explained →

MCP tools · 119 exposed · ~30,634 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_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.

import_to_google_doc ~434

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. On a local server a file on disk can also be passed by path (preferred for batch operations, so callers do not need to load full file contents into their context).

NameTypeReqDescription
base64_contentstring–Standard base64-encoded bytes for a binary source such as DOCX or ODT.
base64_sha256string–Expected SHA-256 of decoded base64_content. Recommended for binary payload integrity checks.
contentstring–Text content for text-based formats. Use only for short snippets or content already in memory.
file_namestringyesThe name for the new Google Doc; the extension is dropped from the title. Without 'source_format', its extension also sets the format of 'content' or 'base64_content' (e.g. 'Notes.md' so Markdown tab…
file_pathstring–Local 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_urlstring–Remote URL to fetch the file from (http/https).
folder_idstring–The ID of the parent folder. Defaults to 'root'.
source_formatstring–Source 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 ~415

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. On a local server a file on disk can also be passed by path (preferred for batch operations, so callers do not need to load full file contents into their context).

NameTypeReqDescription
base64_contentstring–Standard base64-encoded bytes for an XLSX, XLS, or ODS source.
base64_sha256string–Expected SHA-256 of decoded base64_content. Recommended for binary payload integrity checks.
contentstring–Text 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; the extension is dropped from the title. Without 'source_format', its extension also sets the format of 'content' or 'base64_content' (e.g. 'Data.csv').
file_pathstring–Local 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_urlstring–Remote URL to fetch the spreadsheet from (http/https).
folder_idstring–The ID of the parent folder. Defaults to 'root'.
source_formatstring–Source 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 ~368

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. On a local server a file on disk can also be passed by path (preferred for batch operations, so callers do not need to load full file contents into their context).

NameTypeReqDescription
base64_contentstring–Standard base64-encoded bytes for a PPTX or ODP source.
base64_sha256string–Expected SHA-256 of decoded base64_content. Recommended for binary payload integrity checks.
file_namestringyesThe name for the new Google Slides presentation; the extension is dropped from the title. Without 'source_format', its extension also sets the format of 'base64_content' (e.g. 'Deck.pptx').
file_pathstring–Local 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_urlstring–Remote URL to fetch the presentation from (http/https).
folder_idstring–The ID of the parent folder. Defaults to 'root'.
source_formatstring–Source 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
columnsinteger–Number 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_typestring–Type of list ("UNORDERED", "ORDERED") (required for list)
rowsinteger–Number of rows for table (required for table)
textstring–Initial 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
heightinteger–Image 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
widthinteger–Image width in points (optional)
NameTypeReqDescription
resultstringyes–

No examples provided.

inspect_doc_structure ~716

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. If the body ends with an empty paragraph, that paragraph's range has end == total_length; truncation may omit that range. 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_par…

NameTypeReqDescription
detailedboolean–Whether to return detailed structure information
document_idstringyesID of the document to inspect
preview_charsinteger–Maximum 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_idstring–Optional 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 ~79

Retrieves a list of calendars accessible to the authenticated user.

NameTypeReqDescription
max_resultsinteger–Maximum calendars to return in one page. Omit to use the API default.
page_tokenstring–Token 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 ~71

List contact groups (labels) for the user.

NameTypeReqDescription
page_sizeinteger–Maximum number of groups to return (default: 100, max: 1000).
page_tokenstring–Token for pagination.
user_google_emailstringyesThe user's Google email address. Required.
NameTypeReqDescription
resultstringyes–

No examples provided.

list_contacts ~178

List contacts for the authenticated user, optionally as a full or incremental sync.

NameTypeReqDescription
page_sizeinteger–Maximum number of contacts to return (default: 100, max: 1000).
page_tokenstring–Token for pagination. Keep all other arguments unchanged when following it.
request_sync_tokenboolean–Start a full sync. The last page returns a sync token.
sort_orderstring–Sort order: "LAST_MODIFIED_ASCENDING", "LAST_MODIFIED_DESCENDING", "FIRST_NAME_ASCENDING", or "LAST_NAME_ASCENDING". Not supported when syncing.
sync_tokenstring–List only changes since the sync that returned this token, marking deleted contacts. The last page returns a new sync token.
user_google_emailstringyesThe user's Google email address. Required.
NameTypeReqDescription
resultstringyes–

No examples provided.

list_docs_in_folder ~98

Lists Google Docs within a specific Drive folder.

NameTypeReqDescription
folder_idstring–ID of the Drive folder to list. Defaults to 'root'.
page_sizeinteger–Maximum number of documents to return. Defaults to 100.
page_tokenstring–Page token from a previous response's nextPageToken to retrieve the next page of results.
user_google_emailstringyesThe user's Google email address.
NameTypeReqDescription
resultstringyes–

No examples provided.

list_document_comments ~49

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

NameTypeReqDescription
document_idstringyes–
max_commentsinteger––
user_google_emailstringyes–
NameTypeReqDescription
resultstringyes–

No examples provided.

list_drive_items ~684

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
corporastring–Corpus to query ('user', 'drive', 'allDrives'). If `drive_id` is set and `corpora` is None, 'drive' is used. If None and no `drive_id`, 'allDrives' is used when `include_items_from_all_drives` is Tru…
detailedboolean–Whether to include size, modified time, and link in results. Defaults to True.
drive_idstring–ID of the shared drive. If provided, the listing is scoped to this drive.
file_typestring–Restrict results to a specific file type. Accepts a friendly name ('folder', 'document'/'doc', 'spreadsheet'/'sheet', 'presentation'/'slides', 'form', 'd…
folder_idstring–The 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_drivesboolean–Whether items from all accessible shared drives should be included if `drive_id` is not set. Defaults to True.
include_organizersboolean–When resource_type="shared_drives", include principals with the organizer role. This costs one extra permissions.list API call per shared drive returned.…
order_bystring–Sort order. Comma-separated list of sort keys with optional 'desc' modifier. Valid keys: 'createdTime', 'folder', 'modifiedByMeTime', 'modifiedTime', 'name…
page_sizeinteger–The maximum number of items to return. Defaults to 100.
page_tokenstring–Page token from a previous response's nextPageToken to retrieve the next page of results.
querystring–Shared drive query used only when resource_type="shared_drives", e.g. "name contains 'Engineering'".
resource_typestring–What 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 ~79

List a form's responses.

NameTypeReqDescription
form_idstringyesThe ID of the form.
page_sizeinteger–Maximum number of responses to return. Defaults to 10.
page_tokenstring–Token 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 ~163

Lists labels in the user's Gmail account.

NameTypeReqDescription
compactboolean–Return 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_systemboolean–Include Gmail system labels (INBOX, SENT, ...). Set False to return user labels only.
prefixstring–Return 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 ~50

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

NameTypeReqDescription
max_commentsinteger––
presentation_idstringyes–
user_google_emailstringyes–
NameTypeReqDescription
resultstringyes–

No examples provided.

list_script_deployments ~36

List deployments for an Apps Script project.

NameTypeReqDescription
script_idstringyes–
user_google_emailstringyes–
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 ~48

Lists Google Chat spaces (rooms and direct messages) accessible to the user.

NameTypeReqDescription
page_sizeinteger––
space_typestring––
user_google_emailstringyes–
NameTypeReqDescription
resultstringyes–

No examples provided.

list_spreadsheet_comments ~51

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

NameTypeReqDescription
max_commentsinteger––
spreadsheet_idstringyes–
user_google_emailstringyes–
NameTypeReqDescription
resultstringyes–

No examples provided.

list_spreadsheets ~136

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

NameTypeReqDescription
corporastring–Corpus to search ('user', 'domain', 'drive', 'allDrives'). Defaults to 'drive' when drive_id is set, otherwise 'allDrives'.
drive_idstring–Shared drive ID to search.
max_resultsinteger–Maximum number of spreadsheets to return. Defaults to 25.
page_tokenstring–Page token from a previous response's nextPageToken to retrieve the next page of results.
user_google_emailstringyesThe user's Google email address. Required.
NameTypeReqDescription
resultstringyes–

No examples provided.

list_task_lists ~71

List all task lists for the user.

NameTypeReqDescription
max_resultsinteger–Maximum number of task lists to return (default: 1000, max: 1000).
page_tokenstring–Token for pagination.
user_google_emailstringyesThe user's Google email address. Required.
NameTypeReqDescription
resultstringyes–

No examples provided.

list_tasks ~281

List all tasks in a specific task list.

NameTypeReqDescription
completed_maxstring–Upper bound for completion date (RFC 3339 timestamp).
completed_minstring–Lower bound for completion date (RFC 3339 timestamp).
due_maxstring–Upper bound for due date (RFC 3339 timestamp).
due_minstring–Lower bound for due date (RFC 3339 timestamp).
max_resultsinteger–Maximum number of tasks to return. (default: 20, max: 10000).
page_tokenstring–Token for pagination.
show_assignedboolean–Whether to include assigned tasks (default: False).
show_completedboolean–Whether 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_deletedboolean–Whether to include deleted tasks (default: False).
show_hiddenboolean–Whether to include hidden tasks (default: False).
task_list_idstringyesThe ID of the task list to retrieve tasks from.
updated_minstring–Lower bound for last modification time (RFC 3339 timestamp).
user_google_emailstringyesThe user's Google email address. Required.
NameTypeReqDescription
resultstringyes–

No examples provided.

manage_conditional_formatting ~387

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_colorstring–Hex background color to apply when condition matches. Used by "add" and "update".
condition_typestring–Sheets condition type (e.g., NUMBER_GREATER, TEXT_CONTAINS, DATE_BEFORE, CUSTOM_FORMULA). Required for "add". Optional for "update" (preserves existing type if omitted).
condition_values––Values for the condition; accepts a list or a JSON string representing a list. Depends on condition_type. Used by "add" and "update".
gradient_points––List (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_namestring–A1-style range (optionally with sheet name). Required for "add". Optional for "update" (preserves existing ranges if omitted). Not used for "delete".
rule_indexinteger–0-based index of the rule. For "add", optionally specifies insertion position. Required for "update" and "delete".
sheet_namestring–Sheet 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_colorstring–Hex 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 ~829

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".
addressstring–Street address, replacing any existing addresses. "" clears them (for create/update).
birthdaystring–Birthday as 'YYYY-MM-DD', 'MM-DD' (no year), or 'clear'/'' to remove.
contact_idstring–The contact ID. Required for "update" and "delete" actions.
emailstring–[DEPRECATED] Email address. Use emails=[{"address":..., "type":"other"}].
emailsarray–List of email dicts {address, type?}.
emails_modestring–How to update emails on "update": "merge" (default), "replace", or "remove".
family_namestring–Last name (for create/update).
given_namestring–First name (for create/update).
job_titlestring–[DEPRECATED] Job title. Use organizations=[{"title":...}].
nicknamesarray–List 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_modestring–How to update nicknames on "update": "merge" (default), "replace", or "remove".
notesstring–Additional notes (for create/update).
organizationstring–[DEPRECATED] Company name. Use organizations=[{"name":...}].
organizationsarray–List of org dicts {name?, title?, department?, jobDescription?, type?}.
organizations_modestring–How to update orgs on "update": "merge" (default), "replace", or "remove".
phonestring–[DEPRECATED] Single phone number. Use phones=[{"number":..., "type":"mobile"}].
phonesarray–List 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_modestring–How 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.…
relationsarray–List of relation dicts {person, type?}. Supported types: spouse, child, parent, friend, manager, assistant, etc.
relations_modestring–How to update relations on "update": "merge" (default), "replace", or "remove".
urlsarray–List of URL dicts {value, type?}. Supported types: homepage, blog, profile, work, ftp, reservations, other, etc.
urls_modestring–How to update urls on "update": "merge" (default), "replace", or "remove". merge dedups by normalized URL (lowercased, trailing slash stripped).
user_definedarray–List of custom field dicts {key, value}. Useful for structured data like account numbers, IDs, or custom dates.
user_defined_modestring–How 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 ~200

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_idsarray–Contact IDs to add (for "modify_members").
delete_contactsboolean–If True and action is "delete", also delete contacts in the group (default: False).
group_idstring–The contact group ID. Required for "update", "delete", and "modify_members" actions.
namestring–The group name. Required for "create" and "update" actions.
remove_contact_idsarray–Contact IDs to remove (for "modify_members").
user_google_emailstringyesThe user's Google email address. Required.
NameTypeReqDescription
resultstringyes–

No examples provided.

manage_contacts_batch ~268

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_idsarray–List of contact IDs for "delete" action.
contactsarray–List of contact dicts for "create" action. Each dict may contain: given_name, family_name, phones, emails, organizations, nicknames, urls, user_defined, relations, notes, address, birthday. Deprecate…
fieldstring–For "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, userDefine…
updatesarray–List 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 ~151

Create, update, or delete Apps Script deployments.

NameTypeReqDescription
actionstringyesAction to perform - "create", "update", or "delete"
deployment_idstring–The deployment ID (required for update and delete)
descriptionstring–Deployment description (required for create; optional for update when version_number is supplied)
script_idstringyesThe script project ID
user_google_emailstringyesUser's email address
version_descriptionstring–Optional version description (for create only)
version_numberinteger–Version 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 ~198

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
indexinteger–Position index for new tab, 0-based among siblings (required for create)
markdown_textstring–Markdown source to render (populate_from_markdown only)
parent_tab_idstring–Optional parent tab ID to nest under (create only)
replace_existingboolean–Clear tab body before inserting markdown (default True)
tab_idstring–Tab ID (required for rename, delete, populate_from_markdown; use inspect_doc_structure to find IDs)
titlestring–Tab title (required for create; used by rename)
user_google_emailstringyesUser's Google email address
NameTypeReqDescription
result–yes–

No examples provided.

manage_document_comment ~56

Manage comments on a Google Document.

NameTypeReqDescription
actionstringyes–
comment_contentstring––
comment_idstring––
document_idstringyes–
user_google_emailstringyes–
NameTypeReqDescription
resultstringyes–

No examples provided.

manage_drive_access ~527

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_discoveryboolean–For 'domain'/'anyone' shares, whether the file appears in search. Used by "grant".
email_messagestring–Custom notification email message. Used by "grant" and "grant_batch".
expiration_timestring–Expiration 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_rootboolean–Move file to the new owner's My Drive root. Defaults to False. Used by "transfer_owner".
new_owner_emailstring–Email of the new owner. Required for "transfer_owner".
permission_idstring–The permission ID to modify or remove. Required for "update" and "revoke" actions.
recipientsarray–List 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…
rolestring–Permission role -- 'reader', 'commenter', or 'writer'. Used by "grant" (defaults to 'reader') and "update".
send_notificationboolean–Whether to send notification emails. Defaults to True. Used by "grant" and "grant_batch".
share_typestring–Type of sharing -- 'user', 'group', 'domain', or 'anyone'. Used by "grant". Defaults to 'user'.
share_withstring–Email 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 ~1,056

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

NameTypeReqDescription
actionstringyesAction to perform - "create", "update", "delete", or "rsvp".
add_google_meetboolean–Whether to add/remove native Google Meet.
attachmentsarray–List 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.
attendeesarray–Attendee email addresses, attendee objects (e.g. {"email": ..., "responseStatus": "accepted"}), or a mix of both.
calendar_idstring–Calendar ID (default: 'primary').
color_idstring–Event color, by name or ID: lavender (1), sage (2), grape (3), flamingo (4), banana (5), tangerine (6), peacock (7), graphite (8), blueberry (9), basil (10), tomato (11).
conference_dataobject–Raw 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_idstring–Optional provider-side conference/meeting ID.
conference_passcodestring–Optional passcode for the third-party conference.
conference_providerstring–Higher-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_uristring–Join URL for the third-party conference (e.g. "https://zoom.us/j/123456789"). Required when conference_provider is set.
descriptionstring–Event description.
end_timestring–End 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_timezonestring–IANA timezone for the end boundary only, overriding timezone. See start_timezone.
event_idstring–Event ID (required for update and delete).
guests_can_invite_othersboolean–Whether attendees can invite others.
guests_can_modifyboolean–Whether attendees can modify.
guests_can_see_other_guestsboolean–Whether attendees can see other guests.
locationstring–Event location.
recurrencearray–RFC5545 recurrence rules for a recurring event, e.g. ["RRULE:FREQ=WEEKLY;COUNT=10"].
reminders––Custom reminder objects.
responsestring–RSVP response — "accepted", "declined", "tentative", or "needsAction" (rsvp action only).
rsvp_commentstring–Optional message to include with the RSVP response (rsvp action only).
send_updatesstring–Notification behavior for create, update, delete, and rsvp — "all" (default), "externalOnly", or "none".
start_timestring–Start 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_timezonestring–IANA 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…
summarystring–Event title (required for create).
this_and_followingboolean–Update only. With event_id set to a recurring instance ID, applies the change to that instance and every later one by ending the original series before it and starting a new series there; earlier ins…
timezonestring–IANA 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.…
transparencystring–"opaque" (busy) or "transparent" (free).
use_default_remindersboolean–Whether to use default reminders.
user_google_emailstringyesThe user's Google email address. Required.
visibilitystring–"default", "public", "private", or "confidential".
NameTypeReqDescription
resultstringyes–

No examples provided.

manage_focus_time ~615

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_modestring–How to handle conflicting invitations. One of: "declineAllConflictingInvitations" (default), "declineOnlyNewConflictingInvitations", "declineNone".
calendar_idstring–Calendar 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_statusstring–Google Chat status during the focus time. Supports "doNotDisturb" (default) and "available".
decline_messagestring–Message included when auto-declining invitations.
descriptionstring–Event description. Useful for adding context about what the focus time is for.
end_timestring–End 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_idstring–Event ID. Required for "update" and "delete" actions.
max_resultsinteger–For "list" action: maximum events to return in one page. Defaults to 10.
page_tokenstring–For "list" action: token for the next page, taken from a previous response. Also pass the response's Pagination time_min as time_min, even if omitted on the first call. Keep all other query parameter…
recurrencearray–RFC5545 recurrence rules for a recurring Focus Time series, e.g. ["RRULE:FREQ=WEEKLY;COUNT=10"].
start_timestring–Start 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.
summarystring–Display text on the calendar. Defaults to "Focus Time".
time_maxstring–For "list" action: end of time range.
time_minstring–For "list" action: start of time range. Defaults to current time. Recurring series are expanded into individual instances in the requested range.
timezonestring–Timezone 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 ~331

Manages Gmail filters: create, delete, update, and apply to existing mail. - update: Gmail has no filter update API, so the filter is recreated (new one first, then the old one is deleted) and its ID changes. A passed criteria or filter_action replaces that whole object; omit one to keep the old filter's. - apply: runs a filter's label actions on mail ALREADY in the mailbox (Gmail filters only act on new mail). Only matching messages change, not whole conversations as in the web UI. Use filter_id, or criteria + filter_action for an ad-hoc run. Forwarding is never applied. Use dry_run=true first to see the search query and the match count. Needs the gmail.modify scope in addition to gmail.settings.basic.

NameTypeReqDescription
actionstringyes"create", "delete", "update" or "apply".
criteriaobject–Filter criteria object (required for create; optional for update/apply).
dry_runboolean–apply only: count matches without changing anything.
filter_actionobject–Filter action object (required for create; optional for update/apply). Named 'filter_action' to avoid shadowing the 'action' parameter.
filter_idstring–ID of the filter (required for delete and update; optional for apply).
max_messagesinteger–apply only: safety cap on messages changed (default 5000).
user_google_emailstringyesThe user's Google email address. Required.
NameTypeReqDescription
resultstringyes–

No examples provided.

manage_gmail_label ~299

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

NameTypeReqDescription
actionstringyesAction to perform on the label.
background_colorstring–Label 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_colorboolean–On update, remove the label's current color. Cannot be combined with background_color or text_color.
label_idstring–Label ID. Required for update and delete operations.
label_list_visibilitystring–Whether the label is shown in the label list. Defaults to "labelShow" on create. On update, omitting it keeps the label's current setting.
message_list_visibilitystring–Whether the label's messages are shown in the message list. Defaults to "show" on create. On update, omitting it keeps the label's current setting.
namestring–Label name. Required for create, optional for update.
text_colorstring–Label 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_named_range ~220

Manages the lifecycle of named ranges in a Google Sheet: list, create, update, or delete.

NameTypeReqDescription
actionstringyesThe operation to perform: "list", "create", "update", or "delete". Required.
namestring–Name for the named range (required for "create"; optional identifier for "update"/"delete").
named_range_idstring–The ID of the named range (optional identifier for "update"/"delete").
new_namestring–New name for the named range (used with action="update").
new_rangestring–New A1-style range for the named range (used with action="update").
range_namestring–Target cell or range in A1 notation (e.g., "Sheet1!A1:D10", "A1:B5") (required for "create").
spreadsheet_idstringyesThe ID of the spreadsheet. Required.
user_google_emailstringyesThe user's Google email address. Required.
NameTypeReqDescription
resultstringyes–

No examples provided.

manage_out_of_office ~561

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_modestring–How to handle conflicting invitations. One of: "declineAllConflictingInvitations" (default), "declineOnlyNewConflictingInvitations", "declineNone".
calendar_idstring–Calendar 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_messagestring–Message included when auto-declining invitations.
end_timestring–End 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_idstring–Event ID. Required for "update" and "delete" actions.
max_resultsinteger–For "list" action: maximum events to return in one page. Defaults to 10.
page_tokenstring–For "list" action: token for the next page, taken from a previous response. Also pass the response's Pagination time_min as time_min, even if omitted on the first call. Keep all other query parameter…
recurrencearray–RFC5545 recurrence rules for a recurring Out of Office series, e.g. ["RRULE:FREQ=WEEKLY;COUNT=10"].
start_timestring–Start 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.
summarystring–Display text on the calendar. Defaults to "Out of Office".
time_maxstring–For "list" action: end of time range.
time_minstring–For "list" action: start of time range. Defaults to current time. Recurring series are expanded into individual instances in the requested range.
timezonestring–Timezone 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 ~57

Manage comments on a Google Presentation.

NameTypeReqDescription
actionstringyes–
comment_contentstring––
comment_idstring––
presentation_idstringyes–
user_google_emailstringyes–
NameTypeReqDescription
resultstringyes–

No examples provided.

manage_script_content ~110

Update the source files of an Apps Script project.

NameTypeReqDescription
actionstringyes"update".
filesarray–File objects with name, type, and source to create or update (required for update).
mergeboolean–When True (default), overlay `files` onto the current project. When False, replace the full project file set (update only).
script_idstringyesThe script project ID.
user_google_emailstringyesUser's email address
NameTypeReqDescription
resultstringyes–

No examples provided.

manage_script_project ~56

Create or delete an Apps Script project.

NameTypeReqDescription
actionstringyes–
parent_idstring––
script_idstring––
titlestring––
user_google_emailstringyes–
NameTypeReqDescription
resultstringyes–

No examples provided.

manage_script_trigger ~275

List or delete the current user's installable triggers on a script project. The Apps Script REST API has no triggers resource, so in dev_mode both actions provision (or refresh) a small helper file and run it via the Execution API - the only way to inspect or change trigger state without opening the editor. Neither action is read-only: the helper file may be written into the project on first use. To create a trigger, use `generate_trigger_code` to produce the setup code, add it with `manage_script_content`, then run it with `run_script_function`.

NameTypeReqDescription
actionstringyesOne of "list", "delete".
deployment_idstring–Optional API Executable deployment ID. When omitted, the highest versioned API Executable deployment is used.
dev_modeboolean–Run against the latest saved code (default; project owner only) vs. the deployed version. False requires the helper to already exist in the deployed version.
handler_functionstring–Delete all triggers calling this function name (delete only).
script_idstringyesThe script project ID.
trigger_idstring–Unique ID of a specific trigger to delete (delete only).
user_google_emailstringyesUser's email address
NameTypeReqDescription
resultstringyes–

No examples provided.

manage_script_version ~86

Create immutable version snapshots of a script project. Versions capture a snapshot of the current script code; once created they cannot be modified.

NameTypeReqDescription
actionstringyes"create".
descriptionstring–Optional description for the new version (create only).
script_idstringyesThe script project ID.
user_google_emailstringyesUser's email address
NameTypeReqDescription
resultstringyes–

No examples provided.

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
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 62 out of 100 on VerifyMCP. We found no known CVEs affecting it as of 5 November 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 119 tools: start_google_auth, search_gmail_messages, get_gmail_message_content, get_gmail_messages_content_batch, get_gmail_attachment_content, and 114 more. Their descriptions and schemas cost roughly 30,634 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 5 November 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.

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

io.github.taylorwilsdon/workspace-mcp declares the MIT licence, which is OSI-approved. That covers the source only, and says nothing about the cost of any service it calls.