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
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
- Repository check failed: no source repository is declared. See how to fix → View diagnostics → Fail
- Provenance check failed: no build-provenance attestation is published. See how to fix → View diagnostics → Fail
- License check failed: no license is declared. See how to fix → Fail
- Actively maintained (last published 1 days ago).Pass
- Publishes a security disclosure policy (SECURITY.md).Pass
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
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
claude mcp add taylorwilsdon-workspace-mcp -- uvx workspace-mcp
{
"mcpServers": {
"taylorwilsdon-workspace-mcp": {
"command": "uvx",
"args": [
"workspace-mcp"
]
}
}
} {
"servers": {
"taylorwilsdon-workspace-mcp": {
"command": "uvx",
"args": [
"workspace-mcp"
]
}
}
} codex mcp add taylorwilsdon-workspace-mcp -- uvx workspace-mcp
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"taylorwilsdon-workspace-mcp": {
"type": "local",
"command": [
"uvx",
"workspace-mcp"
],
"enabled": true
}
}
} openclaw mcp add taylorwilsdon-workspace-mcp --command uvx --arg workspace-mcp
mcp_servers:
taylorwilsdon-workspace-mcp:
command: "uvx"
args: ["workspace-mcp"] {
"McpServers": {
"taylorwilsdon-workspace-mcp": {
"Transport": "stdio",
"Command": "uvx",
"Arguments": [
"workspace-mcp"
]
}
}
} assistant mcp add taylorwilsdon-workspace-mcp -t stdio -c uvx -a workspace-mcp
{
"mcpServers": {
"taylorwilsdon-workspace-mcp": {
"command": "uvx",
"args": [
"workspace-mcp"
]
}
}
} Every change we have recorded for this component, newest first. Security-relevant changes are always shown. ▲ marks a change for the better, ▼ a change for the worse; unmarked changes are neutral.
- 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
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 →
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 →
get_script_project Get Script Project ~43
Retrieves complete project details including all source files.
| Name | Type | Req | Description |
|---|---|---|---|
| script_id | string | yes | The script project ID |
| user_google_email | string | yes | User's email address |
| Name | Type | Req | Description |
|---|---|---|---|
| result | string | yes | – |
No examples provided.
get_search_engine_info Get Search Engine Info ~35
Retrieves metadata about a Programmable Search Engine.
| Name | Type | Req | Description |
|---|---|---|---|
| user_google_email | string | yes | The user's Google email address. Required. |
| Name | Type | Req | Description |
|---|---|---|---|
| result | string | yes | – |
No examples provided.
get_spreadsheet_info Get Spreadsheet Info ~56
Gets information about a specific spreadsheet including its sheets.
| Name | Type | Req | Description |
|---|---|---|---|
| spreadsheet_id | string | yes | The ID of the spreadsheet to get info for. Required. |
| user_google_email | string | yes | The user's Google email address. Required. |
| Name | Type | Req | Description |
|---|---|---|---|
| result | string | yes | – |
No examples provided.
get_task Get Task ~64
Get details of a specific task.
| Name | Type | Req | Description |
|---|---|---|---|
| task_id | string | yes | The ID of the task to retrieve. |
| task_list_id | string | yes | The ID of the task list containing the task. |
| user_google_email | string | yes | The user's Google email address. Required. |
| Name | Type | Req | Description |
|---|---|---|---|
| result | string | yes | – |
No examples provided.
get_task_list Get Task List ~50
Get details of a specific task list.
| Name | Type | Req | Description |
|---|---|---|---|
| task_list_id | string | yes | The ID of the task list to retrieve. |
| user_google_email | string | yes | The user's Google email address. Required. |
| Name | Type | Req | Description |
|---|---|---|---|
| result | string | yes | – |
No examples provided.
get_version Get Version ~63
Gets details of a specific version.
| Name | Type | Req | Description |
|---|---|---|---|
| script_id | string | yes | The script project ID |
| user_google_email | string | yes | User's email address |
| version_number | integer | yes | The version number to retrieve (1, 2, 3, etc.) |
| Name | Type | Req | Description |
|---|---|---|---|
| result | string | yes | – |
No examples provided.
import_to_google_doc 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.
| Name | Type | Req | Description |
|---|---|---|---|
| base64_content | – | – | Standard base64-encoded bytes for a binary source such as DOCX or ODT. |
| base64_sha256 | – | – | Expected SHA-256 of decoded base64_content. Recommended for binary payload integrity checks. |
| content | – | – | Text content for text-based formats. Use only for short snippets or content already in memory. |
| file_name | string | yes | The name for the new Google Doc (extension will be ignored). |
| file_path | – | – | 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_url | – | – | Remote URL to fetch the file from (http/https). |
| folder_id | string | – | The ID of the parent folder. Defaults to 'root'. |
| source_format | – | – | Source format hint ('md', 'markdown', 'docx', 'txt', 'html', 'rtf', 'odt'). Auto-detected from file_name extension if not provided. |
| user_google_email | string | yes | The user's Google email address. Required. |
| Name | Type | Req | Description |
|---|---|---|---|
| result | string | yes | – |
No examples provided.
import_to_google_sheets 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.
| Name | Type | Req | Description |
|---|---|---|---|
| base64_content | – | – | Standard base64-encoded bytes for an XLSX, XLS, or ODS source. |
| base64_sha256 | – | – | Expected SHA-256 of decoded base64_content. Recommended for binary payload integrity checks. |
| content | – | – | Text content for text-based formats (CSV, TSV). Use only for short snippets or content already in memory. |
| file_name | string | yes | The name for the new Google Sheets spreadsheet (extension will be ignored). |
| file_path | – | – | 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_url | – | – | Remote URL to fetch the spreadsheet from (http/https). |
| folder_id | string | – | The ID of the parent folder. Defaults to 'root'. |
| source_format | – | – | Source format hint ('xlsx', 'xls', 'ods', 'csv', 'tsv'). Auto-detected from file_name extension if not provided. |
| user_google_email | string | yes | The user's Google email address. Required. |
| Name | Type | Req | Description |
|---|---|---|---|
| result | string | yes | – |
No examples provided.
import_to_google_slides 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.
| Name | Type | Req | Description |
|---|---|---|---|
| base64_content | – | – | Standard base64-encoded bytes for a PPTX or ODP source. |
| base64_sha256 | – | – | Expected SHA-256 of decoded base64_content. Recommended for binary payload integrity checks. |
| file_name | string | yes | The name for the new Google Slides presentation (extension will be ignored). |
| file_path | – | – | 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_url | – | – | Remote URL to fetch the presentation from (http/https). |
| folder_id | string | – | The ID of the parent folder. Defaults to 'root'. |
| source_format | – | – | Source format hint ('pptx', 'ppt', 'odp'). Auto-detected from file_name extension if not provided. |
| user_google_email | string | yes | The user's Google email address. Required. |
| Name | Type | Req | Description |
|---|---|---|---|
| result | string | yes | – |
No examples provided.
insert_doc_elements Insert Doc Elements ~158
Inserts structural elements like tables, lists, or page breaks into a Google Doc.
| Name | Type | Req | Description |
|---|---|---|---|
| columns | integer | – | Number of columns for table (required for table) |
| document_id | string | yes | ID of the document to update |
| element_type | string | yes | Type of element to insert ("table", "list", "page_break") |
| index | integer | yes | Position to insert element (0-based) |
| list_type | string | – | Type of list ("UNORDERED", "ORDERED") (required for list) |
| rows | integer | – | Number of rows for table (required for table) |
| text | string | – | Initial text content for list items |
| user_google_email | string | yes | User's Google email address |
| Name | Type | Req | Description |
|---|---|---|---|
| result | string | yes | – |
No examples provided.
insert_doc_image Insert Doc Image ~105
Inserts an image into a Google Doc from Drive or a URL.
| Name | Type | Req | Description |
|---|---|---|---|
| document_id | string | yes | ID of the document to update |
| height | integer | – | Image height in points (optional) |
| image_source | string | yes | Drive file ID or public image URL |
| index | integer | yes | Position to insert image (0-based) |
| user_google_email | string | yes | User's Google email address |
| width | integer | – | Image width in points (optional) |
| Name | Type | Req | Description |
|---|---|---|---|
| result | string | yes | – |
No examples provided.
inspect_doc_structure 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…
| Name | Type | Req | Description |
|---|---|---|---|
| detailed | boolean | – | Whether to return detailed structure information |
| document_id | string | yes | ID of the document to inspect |
| preview_chars | – | – | 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_id | string | – | Optional ID of the tab to inspect. If not provided, inspects main document. |
| user_google_email | string | yes | User's Google email address |
| Name | Type | Req | Description |
|---|---|---|---|
| result | string | yes | – |
No examples provided.
list_calendars List Calendars ~75
Retrieves a list of calendars accessible to the authenticated user.
| Name | Type | Req | Description |
|---|---|---|---|
| max_results | – | – | Maximum calendars to return in one page. Omit to use the API default. |
| page_token | – | – | Token for the next page, taken from a previous response. |
| user_google_email | string | yes | The user's Google email address. Required. |
| Name | Type | Req | Description |
|---|---|---|---|
| result | string | yes | – |
No examples provided.
list_contact_groups List Contact Groups ~69
List contact groups (labels) for the user.
| Name | Type | Req | Description |
|---|---|---|---|
| page_size | integer | – | Maximum number of groups to return (default: 100, max: 1000). |
| page_token | – | – | Token for pagination. |
| user_google_email | string | yes | The user's Google email address. Required. |
| Name | Type | Req | Description |
|---|---|---|---|
| result | string | yes | – |
No examples provided.
list_contacts List Contacts ~100
List contacts for the authenticated user.
| Name | Type | Req | Description |
|---|---|---|---|
| page_size | integer | – | Maximum number of contacts to return (default: 100, max: 1000). |
| page_token | – | – | Token for pagination. |
| sort_order | – | – | Sort order: "LAST_MODIFIED_ASCENDING", "LAST_MODIFIED_DESCENDING", "FIRST_NAME_ASCENDING", or "LAST_NAME_ASCENDING". |
| user_google_email | string | yes | The user's Google email address. Required. |
| Name | Type | Req | Description |
|---|---|---|---|
| result | string | yes | – |
No examples provided.
list_deployments 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.
| Name | Type | Req | Description |
|---|---|---|---|
| script_id | string | yes | The script project ID |
| user_google_email | string | yes | User's email address |
| Name | Type | Req | Description |
|---|---|---|---|
| result | string | yes | – |
No examples provided.
list_docs_in_folder 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.
| Name | Type | Req | Description |
|---|---|---|---|
| folder_id | string | – | – |
| page_size | integer | – | – |
| user_google_email | string | yes | – |
| Name | Type | Req | Description |
|---|---|---|---|
| result | string | yes | – |
No examples provided.
list_document_comments List Document Comments ~47
List all comments from a Google Document (optional max_comments to limit results).
| Name | Type | Req | Description |
|---|---|---|---|
| document_id | string | yes | – |
| max_comments | – | – | – |
| user_google_email | string | yes | – |
| Name | Type | Req | Description |
|---|---|---|---|
| result | string | yes | – |
No examples provided.
list_drive_items 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.
| Name | Type | Req | Description |
|---|---|---|---|
| corpora | – | – | Corpus 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. |
| detailed | boolean | – | Whether to include size, modified time, and link in results. Defaults to True. |
| drive_id | – | – | ID of the shared drive. If provided, the listing is scoped to this drive. |
| file_type | – | – | Restrict results to a specific file type. Accepts a friendly name ('folder', 'document'/'doc', 'spreadsheet'/'sheet', 'presentation'/'slides', 'form', 'd… |
| folder_id | string | – | 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_drives | boolean | – | Whether items from all accessible shared drives should be included if `drive_id` is not set. Defaults to True. |
| include_organizers | boolean | – | When resource_type="shared_drives", include principals with the organizer role. This costs one extra permissions.list API call per shared drive returned.… |
| order_by | – | – | Sort order. Comma-separated list of sort keys with optional 'desc' modifier. Valid keys: 'createdTime', 'folder', 'modifiedByMeTime', 'modifiedTime', 'name… |
| page_size | integer | – | The maximum number of items to return. Defaults to 100. |
| page_token | – | – | Page token from a previous response's nextPageToken to retrieve the next page of results. |
| query | – | – | Shared drive query used only when resource_type="shared_drives", e.g. "name contains 'Engineering'". |
| resource_type | string | – | What to list. Use "items" for folder contents or "shared_drives" for shared drive containers. Defaults to "items". |
| user_google_email | string | yes | The user's Google email address. Required. |
| Name | Type | Req | Description |
|---|---|---|---|
| result | string | yes | – |
No examples provided.
list_form_responses List Form Responses ~77
List a form's responses.
| Name | Type | Req | Description |
|---|---|---|---|
| form_id | string | yes | The ID of the form. |
| page_size | integer | – | Maximum number of responses to return. Defaults to 10. |
| page_token | – | – | Token for retrieving next page of results. |
| user_google_email | string | yes | The user's Google email address. Required. |
| Name | Type | Req | Description |
|---|---|---|---|
| result | string | yes | – |
No examples provided.
list_gmail_filters List Gmail Filters ~36
Lists all Gmail filters configured in the user's mailbox.
| Name | Type | Req | Description |
|---|---|---|---|
| user_google_email | string | yes | The user's Google email address. Required. |
| Name | Type | Req | Description |
|---|---|---|---|
| result | string | yes | – |
No examples provided.
list_gmail_labels List Gmail Labels ~161
Lists labels in the user's Gmail account.
| Name | Type | Req | Description |
|---|---|---|---|
| compact | boolean | – | 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_system | boolean | – | Include Gmail system labels (INBOX, SENT, ...). Set False to return user labels only. |
| prefix | – | – | 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_email | string | yes | The user's Google email address. Required. |
| Name | Type | Req | Description |
|---|---|---|---|
| result | string | yes | – |
No examples provided.
list_presentation_comments List Presentation Comments ~48
List all comments from a Google Presentation (optional max_comments to limit results).
| Name | Type | Req | Description |
|---|---|---|---|
| max_comments | – | – | – |
| presentation_id | string | yes | – |
| user_google_email | string | yes | – |
| Name | Type | Req | Description |
|---|---|---|---|
| result | string | yes | – |
No examples provided.
list_script_processes List Script Processes ~77
Lists recent execution processes for user's scripts.
| Name | Type | Req | Description |
|---|---|---|---|
| page_size | integer | – | Number of results (default: 50) |
| script_id | – | – | Optional script ID. When set, lists all processes for that script visible to the user, including runs by other users. |
| user_google_email | string | yes | User's email address |
| Name | Type | Req | Description |
|---|---|---|---|
| result | string | yes | – |
No examples provided.
list_script_projects List Script Projects ~70
Lists Google Apps Script projects accessible to the user. Uses Drive API to find Apps Script files.
| Name | Type | Req | Description |
|---|---|---|---|
| page_size | integer | – | Number of results per page (default: 50) |
| page_token | – | – | Token for pagination (optional) |
| user_google_email | string | yes | User's email address |
| Name | Type | Req | Description |
|---|---|---|---|
| result | string | yes | – |
No examples provided.
list_sheet_tables 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.
| Name | Type | Req | Description |
|---|---|---|---|
| spreadsheet_id | string | yes | The ID of the spreadsheet. Required. |
| user_google_email | string | yes | The user's Google email address. Required. |
| Name | Type | Req | Description |
|---|---|---|---|
| result | string | yes | – |
No examples provided.
list_spaces 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.
| Name | Type | Req | Description |
|---|---|---|---|
| page_size | integer | – | – |
| space_type | string | – | – |
| user_google_email | string | yes | – |
| Name | Type | Req | Description |
|---|---|---|---|
| result | string | yes | – |
No examples provided.
list_spreadsheet_comments List Spreadsheet Comments ~49
List all comments from a Google Spreadsheet (optional max_comments to limit results).
| Name | Type | Req | Description |
|---|---|---|---|
| max_comments | – | – | – |
| spreadsheet_id | string | yes | – |
| user_google_email | string | yes | – |
| Name | Type | Req | Description |
|---|---|---|---|
| result | string | yes | – |
No examples provided.
list_spreadsheets List Spreadsheets ~57
Lists spreadsheets from Google Drive that the user has access to.
| Name | Type | Req | Description |
|---|---|---|---|
| max_results | integer | – | Maximum number of spreadsheets to return. Defaults to 25. |
| user_google_email | string | yes | The user's Google email address. Required. |
| Name | Type | Req | Description |
|---|---|---|---|
| result | string | yes | – |
No examples provided.
list_task_lists List Task Lists ~69
List all task lists for the user.
| Name | Type | Req | Description |
|---|---|---|---|
| max_results | integer | – | Maximum number of task lists to return (default: 1000, max: 1000). |
| page_token | – | – | Token for pagination. |
| user_google_email | string | yes | The user's Google email address. Required. |
| Name | Type | Req | Description |
|---|---|---|---|
| result | string | yes | – |
No examples provided.
list_tasks List Tasks ~269
List all tasks in a specific task list.
| Name | Type | Req | Description |
|---|---|---|---|
| completed_max | – | – | Upper bound for completion date (RFC 3339 timestamp). |
| completed_min | – | – | Lower bound for completion date (RFC 3339 timestamp). |
| due_max | – | – | Upper bound for due date (RFC 3339 timestamp). |
| due_min | – | – | Lower bound for due date (RFC 3339 timestamp). |
| max_results | integer | – | Maximum number of tasks to return. (default: 20, max: 10000). |
| page_token | – | – | Token for pagination. |
| show_assigned | boolean | – | Whether to include assigned tasks (default: False). |
| show_completed | boolean | – | 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_deleted | boolean | – | Whether to include deleted tasks (default: False). |
| show_hidden | boolean | – | Whether to include hidden tasks (default: False). |
| task_list_id | string | yes | The ID of the task list to retrieve tasks from. |
| updated_min | – | – | Lower bound for last modification time (RFC 3339 timestamp). |
| user_google_email | string | yes | The user's Google email address. Required. |
| Name | Type | Req | Description |
|---|---|---|---|
| result | string | yes | – |
No examples provided.
list_versions 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.
| Name | Type | Req | Description |
|---|---|---|---|
| script_id | string | yes | The script project ID |
| user_google_email | string | yes | User's email address |
| Name | Type | Req | Description |
|---|---|---|---|
| result | string | yes | – |
No examples provided.
manage_conditional_formatting Manage Conditional Formatting ~375
Manages conditional formatting rules on a Google Sheet. Supports adding, updating, and deleting conditional formatting rules via a single tool.
| Name | Type | Req | Description |
|---|---|---|---|
| action | string | yes | The operation to perform. Must be one of "add", "update", or "delete". |
| background_color | – | – | Hex background color to apply when condition matches. Used by "add" and "update". |
| condition_type | – | – | 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_name | – | – | A1-style range (optionally with sheet name). Required for "add". Optional for "update" (preserves existing ranges if omitted). Not used for "delete". |
| rule_index | – | – | 0-based index of the rule. For "add", optionally specifies insertion position. Required for "update" and "delete". |
| sheet_name | – | – | Sheet name to locate the rule when range_name is omitted. Defaults to the first sheet. Used by "update" and "delete". |
| spreadsheet_id | string | yes | The ID of the spreadsheet. Required. |
| text_color | – | – | Hex text color to apply when condition matches. Used by "add" and "update". |
| user_google_email | string | yes | The user's Google email address. Required. |
| Name | Type | Req | Description |
|---|---|---|---|
| result | string | yes | – |
No examples provided.
manage_contact Manage Contact ~786
Create, update, or delete a contact. Consolidated tool replacing create_contact, update_contact, and delete_contact.
| Name | Type | Req | Description |
|---|---|---|---|
| action | string | yes | The action to perform: "create", "update", or "delete". |
| address | – | – | Street address (for create/update). |
| birthday | – | – | Birthday as 'YYYY-MM-DD', 'MM-DD' (no year), or 'clear'/'' to remove. |
| contact_id | – | – | The contact ID. Required for "update" and "delete" actions. |
| – | – | [DEPRECATED] Email address. Use emails=[{"address":..., "type":"other"}]. | |
| emails | – | – | List of email dicts {address, type?}. |
| emails_mode | string | – | How to update emails on "update": "merge" (default), "replace", or "remove". |
| family_name | – | – | Last name (for create/update). |
| given_name | – | – | First name (for create/update). |
| job_title | – | – | [DEPRECATED] Job title. Use organizations=[{"title":...}]. |
| nicknames | – | – | 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_mode | string | – | How to update nicknames on "update": "merge" (default), "replace", or "remove". |
| notes | – | – | Additional notes (for create/update). |
| organization | – | – | [DEPRECATED] Company name. Use organizations=[{"name":...}]. |
| organizations | – | – | List of org dicts {name?, title?, department?, jobDescription?, type?}. |
| organizations_mode | string | – | How to update orgs on "update": "merge" (default), "replace", or "remove". |
| phone | – | – | [DEPRECATED] Single phone number. Use phones=[{"number":..., "type":"mobile"}]. |
| phones | – | – | 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_mode | string | – | 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.… |
| relations | – | – | List of relation dicts {person, type?}. Supported types: spouse, child, parent, friend, manager, assistant, etc. |
| relations_mode | string | – | How to update relations on "update": "merge" (default), "replace", or "remove". |
| urls | – | – | List of URL dicts {value, type?}. Supported types: homepage, blog, profile, work, ftp, reservations, other, etc. |
| urls_mode | string | – | How to update urls on "update": "merge" (default), "replace", or "remove". merge dedups by normalized URL (lowercased, trailing slash stripped). |
| user_defined | – | – | List of custom field dicts {key, value}. Useful for structured data like account numbers, IDs, or custom dates. |
| user_defined_mode | string | – | How to update custom fields on "update": "merge" (default), "replace", or "remove". merge overrides value on matching key; new keys appended. |
| user_google_email | string | yes | The user's Google email address. Required. |
| Name | Type | Req | Description |
|---|---|---|---|
| result | string | yes | – |
No examples provided.
manage_contact_group 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.
| Name | Type | Req | Description |
|---|---|---|---|
| action | string | yes | The action to perform: "create", "update", "delete", or "modify_members". |
| add_contact_ids | – | – | Contact IDs to add (for "modify_members"). |
| delete_contacts | boolean | – | If True and action is "delete", also delete contacts in the group (default: False). |
| group_id | – | – | The contact group ID. Required for "update", "delete", and "modify_members" actions. |
| name | – | – | The group name. Required for "create" and "update" actions. |
| remove_contact_ids | – | – | Contact IDs to remove (for "modify_members"). |
| user_google_email | string | yes | The user's Google email address. Required. |
| Name | Type | Req | Description |
|---|---|---|---|
| result | string | yes | – |
No examples provided.
manage_contacts_batch Manage Contacts Batch ~248
Batch create, update, or delete contacts. Consolidated tool replacing batch_create_contacts, batch_update_contacts, and batch_delete_contacts.
| Name | Type | Req | Description |
|---|---|---|---|
| action | string | yes | The action to perform: "create", "update", or "delete". |
| contact_ids | – | – | List of contact IDs for "delete" action. |
| contacts | – | – | List 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. |
| field | – | – | 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, userDefin… |
| updates | – | – | List of update dicts for "update" action. Each dict must contain contact_id and may contain the same fields as contacts. |
| user_google_email | string | yes | The user's Google email address. Required. |
| Name | Type | Req | Description |
|---|---|---|---|
| result | string | yes | – |
No examples provided.
manage_deployment Manage Deployment ~148
Manages Apps Script deployments. Supports creating, updating, and deleting deployments.
| Name | Type | Req | Description |
|---|---|---|---|
| action | string | yes | Action to perform - "create", "update", or "delete" |
| deployment_id | – | – | The deployment ID (required for update and delete) |
| description | – | – | Deployment description (required for create; optional for update when version_number is supplied) |
| script_id | string | yes | The script project ID |
| user_google_email | string | yes | User's email address |
| version_description | – | – | Optional version description (for create only) |
| version_number | – | – | Version number to point the deployment at (for update only). Required to roll a deployment forward to a newly created script version. |
| Name | Type | Req | Description |
|---|---|---|---|
| result | string | yes | – |
No examples provided.
manage_doc_tab Manage Doc Tab ~188
Manage document tabs: create, rename, delete, or populate from Markdown.
| Name | Type | Req | Description |
|---|---|---|---|
| action | string | yes | Action to perform - "create", "rename", "delete", or "populate_from_markdown" |
| document_id | string | yes | ID of the document |
| index | – | – | Position index for new tab, 0-based among siblings (required for create) |
| markdown_text | – | – | Markdown source to render (populate_from_markdown only) |
| parent_tab_id | – | – | Optional parent tab ID to nest under (create only) |
| replace_existing | boolean | – | Clear tab body before inserting markdown (default True) |
| tab_id | – | – | Tab ID (required for rename, delete, populate_from_markdown; use inspect_doc_structure to find IDs) |
| title | – | – | Tab title (required for create; used by rename) |
| user_google_email | string | yes | User's Google email address |
| Name | Type | Req | Description |
|---|---|---|---|
| result | – | yes | – |
No examples provided.
manage_document_comment 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.
| Name | Type | Req | Description |
|---|---|---|---|
| action | string | yes | – |
| comment_content | – | – | – |
| comment_id | – | – | – |
| document_id | string | yes | – |
| user_google_email | string | yes | – |
| Name | Type | Req | Description |
|---|---|---|---|
| result | string | yes | – |
No examples provided.
manage_drive_access 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.
| Name | Type | Req | Description |
|---|---|---|---|
| action | string | yes | The 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_discovery | – | – | For 'domain'/'anyone' shares, whether the file appears in search. Used by "grant". |
| email_message | – | – | Custom notification email message. Used by "grant" and "grant_batch". |
| expiration_time | – | – | Expiration in RFC 3339 format (e.g., "2025-01-15T00:00:00Z"). Used by "grant" and "update". |
| file_id | string | yes | The ID of the file or folder. Required. |
| move_to_new_owners_root | boolean | – | Move file to the new owner's My Drive root. Defaults to False. Used by "transfer_owner". |
| new_owner_email | – | – | Email of the new owner. Required for "transfer_owner". |
| permission_id | – | – | The permission ID to modify or remove. Required for "update" and "revoke" actions. |
| recipients | – | – | 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… |
| role | – | – | Permission role -- 'reader', 'commenter', or 'writer'. Used by "grant" (defaults to 'reader') and "update". |
| send_notification | boolean | – | Whether to send notification emails. Defaults to True. Used by "grant" and "grant_batch". |
| share_type | string | – | Type of sharing -- 'user', 'group', 'domain', or 'anyone'. Used by "grant". Defaults to 'user'. |
| share_with | – | – | Email address (user/group), domain name (domain), or omit for 'anyone'. Used by "grant". |
| user_google_email | string | yes | The user's Google email address. Required. |
| Name | Type | Req | Description |
|---|---|---|---|
| result | string | yes | – |
No examples provided.
manage_event Manage Event ~849
Manages calendar events. Supports creating, updating, deleting, and RSVP.
| Name | Type | Req | Description |
|---|---|---|---|
| action | string | yes | Action to perform - "create", "update", "delete", or "rsvp". |
| add_google_meet | – | – | Whether to add/remove native Google Meet. |
| attachments | – | – | 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. |
| attendees | – | – | Attendee email addresses or objects. |
| calendar_id | string | – | Calendar ID (default: 'primary'). |
| color_id | – | – | Event color ID (1-11, update only). |
| conference_data | – | – | 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_id | – | – | Optional provider-side conference/meeting ID. |
| conference_passcode | – | – | Optional passcode for the third-party conference. |
| conference_provider | – | – | 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_uri | – | – | Join URL for the third-party conference (e.g. "https://zoom.us/j/123456789"). Required when conference_provider is set. |
| description | – | – | Event description. |
| end_time | – | – | 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_timezone | – | – | IANA timezone for the end boundary only, overriding timezone. See start_timezone. |
| event_id | – | – | Event ID (required for update and delete). |
| guests_can_invite_others | – | – | Whether attendees can invite others. |
| guests_can_modify | – | – | Whether attendees can modify. |
| guests_can_see_other_guests | – | – | Whether attendees can see other guests. |
| location | – | – | Event location. |
| recurrence | – | – | RFC5545 recurrence rules for a recurring event, e.g. ["RRULE:FREQ=WEEKLY;COUNT=10"]. |
| reminders | – | – | Custom reminder objects. |
| response | – | – | RSVP response — "accepted", "declined", "tentative", or "needsAction" (rsvp action only). |
| rsvp_comment | – | – | Optional message to include with the RSVP response (rsvp action only). |
| send_updates | – | – | Notification behavior for create, update, delete, and rsvp — "all" (default), "externalOnly", or "none". |
| start_time | – | – | 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_timezone | – | – | 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… |
| summary | – | – | Event title (required for create). |
| timezone | – | – | 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.… |
| transparency | – | – | "opaque" (busy) or "transparent" (free). |
| use_default_reminders | – | – | Whether to use default reminders. |
| user_google_email | string | yes | The user's Google email address. Required. |
| visibility | – | – | "default", "public", "private", or "confidential". |
| Name | Type | Req | Description |
|---|---|---|---|
| result | string | yes | – |
No examples provided.
manage_focus_time 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.
| Name | Type | Req | Description |
|---|---|---|---|
| action | string | yes | Action to perform - "create", "list", "update", or "delete". |
| auto_decline_mode | – | – | How to handle conflicting invitations. One of: "declineAllConflictingInvitations" (default), "declineOnlyNewConflictingInvitations", "declineNone". |
| calendar_id | string | – | 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_status | – | – | Google Chat status during the focus time. Supports "doNotDisturb" (default) and "available". |
| decline_message | – | – | Message included when auto-declining invitations. |
| description | – | – | Event description. Useful for adding context about what the focus time is for. |
| end_time | – | – | 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_id | – | – | Event ID. Required for "update" and "delete" actions. |
| max_results | integer | – | For "list" action: maximum events to return. Defaults to 10. |
| recurrence | – | – | RFC5545 recurrence rules for a recurring Focus Time series, e.g. ["RRULE:FREQ=WEEKLY;COUNT=10"]. |
| start_time | – | – | 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. |
| summary | – | – | Display text on the calendar. Defaults to "Focus Time". |
| time_max | – | – | For "list" action: end of time range. |
| time_min | – | – | For "list" action: start of time range. Defaults to current time. Recurring series are expanded into individual instances in the requested range. |
| timezone | – | – | 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_email | string | yes | The user's Google email address. Required. |
| Name | Type | Req | Description |
|---|---|---|---|
| result | string | yes | – |
No examples provided.
manage_gmail_filter Manage Gmail Filter ~110
Manages Gmail filters. Supports creating and deleting filters.
| Name | Type | Req | Description |
|---|---|---|---|
| action | string | yes | Action to perform - "create" or "delete". |
| criteria | – | – | Filter criteria object (required for create). |
| filter_action | – | – | Filter action object (required for create). Named 'filter_action' to avoid shadowing the 'action' parameter. |
| filter_id | – | – | ID of the filter to delete (required for delete). |
| user_google_email | string | yes | The user's Google email address. Required. |
| Name | Type | Req | Description |
|---|---|---|---|
| result | string | yes | – |
No examples provided.
manage_gmail_label Manage Gmail Label ~246
Manages Gmail labels: create, update, or delete labels.
| Name | Type | Req | Description |
|---|---|---|---|
| action | string | yes | Action to perform on the label. |
| background_color | – | – | 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_color | boolean | – | On update, remove the label's current color. Cannot be combined with background_color or text_color. |
| label_id | – | – | Label ID. Required for update and delete operations. |
| label_list_visibility | string | – | Whether the label is shown in the label list. |
| message_list_visibility | string | – | Whether the label is shown in the message list. |
| name | – | – | Label name. Required for create, optional for update. |
| text_color | – | – | 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_email | string | yes | The user's Google email address. Required. |
| Name | Type | Req | Description |
|---|---|---|---|
| result | string | yes | – |
No examples provided.
manage_out_of_office 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.
| Name | Type | Req | Description |
|---|---|---|---|
| action | string | yes | Action to perform - "create", "list", "update", or "delete". |
| auto_decline_mode | – | – | How to handle conflicting invitations. One of: "declineAllConflictingInvitations" (default), "declineOnlyNewConflictingInvitations", "declineNone". |
| calendar_id | string | – | 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_message | – | – | Message included when auto-declining invitations. |
| end_time | – | – | 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_id | – | – | Event ID. Required for "update" and "delete" actions. |
| max_results | integer | – | For "list" action: maximum events to return. Defaults to 10. |
| recurrence | – | – | RFC5545 recurrence rules for a recurring Out of Office series, e.g. ["RRULE:FREQ=WEEKLY;COUNT=10"]. |
| start_time | – | – | 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. |
| summary | – | – | Display text on the calendar. Defaults to "Out of Office". |
| time_max | – | – | For "list" action: end of time range. |
| time_min | – | – | For "list" action: start of time range. Defaults to current time. Recurring series are expanded into individual instances in the requested range. |
| timezone | – | – | 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_email | string | yes | The user's Google email address. Required. |
| Name | Type | Req | Description |
|---|---|---|---|
| result | string | yes | – |
No examples provided.
manage_presentation_comment 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.
| Name | Type | Req | Description |
|---|---|---|---|
| action | string | yes | – |
| comment_content | – | – | – |
| comment_id | – | – | – |
| presentation_id | string | yes | – |
| user_google_email | string | yes | – |
| Name | Type | Req | Description |
|---|---|---|---|
| result | string | yes | – |
No examples provided.
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.