Documentation
Current reference for authentication, transport modes, CLI usage, and all Google Workspace tool groups.
Synced with v2.4.2 ·
Authentication
Legacy OAuth 2.0 and OAuth 2.1 multi-user flows, including stateless and external-provider modes.
Source: auth/
Enable Google Cloud APIs
Enable the API for each service you plan to use, in the same Google Cloud project as your OAuth client. Each link opens the Cloud Console enable flow for whichever project is currently selected, so check the project picker first. To enable them all from the CLI instead, run the gcloud command below with your project ID, dropping any services you will not use. Calls to a service whose API is disabled fail with a 403 SERVICE_DISABLED error. Google Chat also needs a Chat app configured on the Chat API Configuration tab before it accepts requests.
| Enable | API ID | Used by |
|---|---|---|
| Gmail API | gmail.googleapis.com | Gmail MCP |
| Google Drive API | drive.googleapis.com | Google Drive MCP |
| Google Calendar API | calendar-json.googleapis.com | Google Calendar MCP |
| Google Docs API | docs.googleapis.com | Google Docs MCP |
| Google Sheets API | sheets.googleapis.com | Google Sheets MCP |
| Google Slides API | slides.googleapis.com | Google Slides MCP |
| Google Forms API | forms.googleapis.com | Google Forms MCP |
| Google Tasks API | tasks.googleapis.com | Google Tasks MCP |
| People API | people.googleapis.com | Google Contacts MCP |
| Google Chat API | chat.googleapis.com | Google Chat MCP |
| Custom Search API | customsearch.googleapis.com | Google Custom Search MCP |
| Apps Script API | script.googleapis.com | Google Apps Script MCP |
gcloud services enable \
gmail.googleapis.com \
drive.googleapis.com \
calendar-json.googleapis.com \
docs.googleapis.com \
sheets.googleapis.com \
slides.googleapis.com \
forms.googleapis.com \
tasks.googleapis.com \
people.googleapis.com \
chat.googleapis.com \
customsearch.googleapis.com \
script.googleapis.com \
--project=PROJECT_IDOAuth 2.1 (Multi-User)
Enable with MCP_ENABLE_OAUTH21=true and run HTTP transport (--transport streamable-http). This is the recommended mode for modern MCP clients and bearer-token auth.
| Parameter | Required | Description |
|---|---|---|
MCP_ENABLE_OAUTH21 | Required | Set to true to enable OAuth 2.1 mode. |
--transport streamable-http | Required | Required transport for OAuth 2.1 and full MCP compliance. |
Legacy OAuth 2.0 (Single-User / Fallback)
Default mode when OAuth 2.1 is not enabled. Use this for older clients that do not support OAuth 2.1. --single-user cannot be combined with OAuth 2.1.
| Parameter | Required | Description |
|---|---|---|
--single-user | Optional | Legacy single-user flow; mutually exclusive with OAuth 2.1. |
OAUTHLIB_INSECURE_TRANSPORT | Optional | Set to 1 only for local HTTP development callbacks. |
Stateless Mode
Container-friendly mode with no filesystem writes. Requires OAuth 2.1 and bearer tokens on requests.
| Parameter | Required | Description |
|---|---|---|
WORKSPACE_MCP_STATELESS_MODE | Required | Set to true (requires OAuth 2.1). |
External OAuth 2.1 Provider
Use when your app handles OAuth externally. The server skips local OAuth flow and validates incoming bearer tokens.
| Parameter | Required | Description |
|---|---|---|
EXTERNAL_OAUTH21_PROVIDER | Required | Set to true with MCP_ENABLE_OAUTH21=true. |
OAuth Proxy Storage Backends
Select proxy storage backend for OAuth state in distributed deployments.
| Parameter | Required | Description |
|---|---|---|
WORKSPACE_MCP_OAUTH_PROXY_STORAGE_BACKEND | Optional | One of memory, disk, or valkey. |
WORKSPACE_MCP_OAUTH_PROXY_DISK_DIRECTORY | Optional | Disk backend path. |
WORKSPACE_MCP_OAUTH_PROXY_VALKEY_HOST | Optional | Valkey/Redis host for distributed storage. |
Service Account with Domain-Wide Delegation
Authenticate as a service account and impersonate domain users. When a tool call supplies user_google_email, it is used as the per-request impersonation subject, so one server instance can act for multiple domain users; USER_GOOGLE_EMAIL is the fallback subject.
| Parameter | Required | Description |
|---|---|---|
GOOGLE_SERVICE_ACCOUNT_KEY_FILE | Optional | Path to the service account JSON key file (or use GOOGLE_SERVICE_ACCOUNT_KEY_JSON inline — set one, not both). |
USER_GOOGLE_EMAIL | Required | Fallback impersonation subject when a tool call supplies no email. |
DWD_ALLOWED_DOMAINS | Optional | Comma-separated domain allowlist for per-request impersonation. Unset allows any email the delegation scope accepts. |
OAuth Consent Page Branding
Customize the OAuth 2.1 consent page shown to users during authorization.
| Parameter | Required | Description |
|---|---|---|
WORKSPACE_MCP_BRAND_NAME | Optional | Server name shown on the consent page. |
WORKSPACE_MCP_BRAND_ICON_URL | Optional | Consent-page logo (hosted URL or data: URI), shown at 64px wide. |
WORKSPACE_MCP_BRAND_WEBSITE_URL | Optional | Website link shown on the consent page. |
Server Modes and CLI
Transport guidance, CLI mode, tool tiers, and permission filtering options.
Source: main.py
HTTP Transport (Recommended)
Run with --transport streamable-http for Claude Code, VS Code MCP, MCP Inspector, and OAuth 2.1 support.
Stdio Transport (Legacy)
Use only for clients with incomplete MCP support. Not recommended for modern multi-user flows.
CLI Mode (`--cli`)
Directly list and invoke tools from the command line without running the full MCP server process.
| Parameter | Required | Description |
|---|---|---|
--cli list --json | Optional | List tools for scripting and automation. |
--cli <tool> --args <json> | Optional | Invoke a specific tool with JSON args. |
Tool Tiers
Three cumulative tiers for simplified deployments: core, extended, complete.
| Parameter | Required | Description |
|---|---|---|
--tool-tier core|extended|complete | Optional | Scope loaded tools to the selected tier. |
--disabled-tools TOOL_NAME ... | Optional | Block individual tools by name regardless of tier or permission selection. Composes with every other filtering option. Env var: WORKSPACE_MCP_DISABLED_TOOLS (comma-separated). |
X-MCP-Toolsets / X-MCP-Tools | Optional | HTTP request headers that narrow the tool list per request, using the same names as the GitHub MCP server: X-MCP-Toolsets takes comma-separated service names (the --tools names) and X-MCP-Tools takes tool names; both together give the union. Headers only filter what the server already loaded, so a tool removed by the tier, --tools, --read-only, --permissions or --disabled-tools stays unavailable. No header leaves the list unchanged. |
Read-Only and Granular Permissions
--read-only requests readonly scopes and hides write tools. --permissions sets a per-service access level and implicitly selects which services load — only the services you list are imported. Levels are cumulative: each one includes every level to its left. Mutually exclusive with --read-only and --tools; combine with --tool-tier to narrow further within the selected services.
| Parameter | Required | Description |
|---|---|---|
--read-only | Optional | Requests readonly scopes and filters write tools. |
--permissions service:level ... | Optional | Space-separated per-service access levels, for example --permissions gmail:send drive:readonly. Join levels with + (gmail:readonly+send) to grant exactly those levels instead of every level below. Env var: WORKSPACE_MCP_PERMISSIONS (space-separated). |
| Service | Levels (least to most permissive) | Notes |
|---|---|---|
gmail | readonlyorganizedraftssendfull | organize adds labels and modify, drafts adds compose, send adds sending, full adds basic settings. |
drive | readonlyfull | full adds full Drive access plus per-file access. |
calendar | readonlyfull | full adds calendar and event write access. |
docs | readonlyfull | Both levels include Drive readonly; full adds document write plus per-file Drive access. |
sheets | readonlyfull | Both levels include Drive readonly; full adds spreadsheet write access. |
slides | readonlyfull | full adds presentation write access. |
forms | readonlyfull | full adds form editing; responses stay read-only at both levels. |
chat | readonlyfull | full adds message and space write access. |
tasks | readonlymanagefull | manage creates and updates tasks but denies delete and clear_completed; full lifts those restrictions. |
contacts | readonlyfull | full adds contact write access. |
search | readonlyfull | Programmable Search is read-only by nature — both levels request the same scope. |
appscript | readonlyfull | Readonly covers projects, deployments, processes, and metrics; full adds project and deployment write. |
Reverse Proxy OAuth URL Overrides
Use external URL overrides when running behind a reverse proxy so generated OAuth endpoints match public domains.
| Parameter | Required | Description |
|---|---|---|
WORKSPACE_EXTERNAL_URL | Optional | Sets a public base URL for OAuth-related endpoints. |
GOOGLE_OAUTH_REDIRECT_URI | Optional | Override only the OAuth callback URL. |
OAUTH_CUSTOM_REDIRECT_URIS | Optional | Comma-separated additional redirect URIs. |
OAUTH_ALLOWED_ORIGINS | Optional | Comma-separated additional CORS origins. |
Attachment Storage
Downloaded Gmail/Drive attachments are stored in persistent local storage and exposed by URL in HTTP mode.
| Parameter | Required | Description |
|---|---|---|
WORKSPACE_ATTACHMENT_DIR | Optional | Override the default ~/.workspace-mcp/attachments/ location. |
OpenTelemetry Tracing (Optional)
Distributed tracing via the otel extra (pip install "workspace-mcp[otel]", included in the Docker image). Tracing is fully disabled unless an OTLP endpoint is configured; spans export only to the collector you specify. Standard OTLP variables for headers, TLS, sampling, and batching are honored.
| Parameter | Required | Description |
|---|---|---|
OTEL_EXPORTER_OTLP_ENDPOINT | Optional | OTLP collector endpoint. Unset means tracing is disabled. |
OTEL_EXPORTER_OTLP_PROTOCOL | Optional | grpc (default) or http/protobuf. |
OTEL_SERVICE_NAME | Optional | Service name — defaults to google-workspace-mcp. |
WORKSPACE_MCP_OTEL_USER_EMAIL | Optional | Set true to record the authenticated user's email (user.email) and the Google account calls run as (workspace_mcp.google.principal) on spans. PII, so off by default. |
Logging
Server logs default to INFO. DEBUG includes companion lines that may contain user text, so enable it only when needed and treat its output as sensitive.
| Parameter | Required | Description |
|---|---|---|
WORKSPACE_MCP_LOG_LEVEL | Optional | CRITICAL, ERROR, WARNING, INFO (default), or DEBUG. Invalid values fall back to INFO. |
WORKSPACE_MCP_LOG_DIR | Optional | Directory for mcp_server_debug.log — defaults to ~/.google_workspace_mcp/logs. |
Google Calendar MCP
Calendar operations with consolidated event management, availability, and working-status tooling.
Source: gcalendar/calendar_tools.py
list_calendars
CoreLists calendars accessible to the authenticated user, with each calendar's time zone.
| Parameter | Required | Description |
|---|---|---|
max_results | Optional | Maximum calendars to return in one page. |
page_token | Optional | Token for the next page, taken from a previous response. Responses include a next page token whenever more calendars remain. |
get_events
CoreRetrieves events for a calendar and time range.
| Parameter | Required | Description |
|---|---|---|
calendar_id | Optional | Defaults to primary. |
time_min | Optional | RFC3339 or date. |
time_max | Optional | RFC3339 or date. |
max_results | Optional | Maximum events to return. |
single_events | Optional | Whether to expand recurring series into individual instances. Defaults to true. Set to false to retrieve recurring master events and their RFC 5545 recurrence rules. |
page_token | Optional | Token for the next page, taken from a previous response. With single_events true, also pass the response's pagination time_min as time_min (even if you omitted it on the first call) and keep every other query parameter unchanged. Ignored when event_id is set. |
manage_event
CoreConsolidated create, update, and delete event operations.
| Parameter | Required | Description |
|---|---|---|
action | Required | create, update, or delete. |
event_id | Optional | Required for update and delete. |
start_time | Optional | Start time (required for create). A timestamp with a UTC offset is kept as that exact instant; omit the offset and pass a timezone to book a local wall-clock time. Date-only values create all-day events. |
end_time | Optional | End time (required for create). Same offset rules as start_time; all-day end dates are exclusive. |
start_timezone | Optional | IANA timezone for the start boundary, overriding the shared timezone. Offset-bearing timestamps keep their instant; offset-free ones are read as local time in this zone. |
end_timezone | Optional | IANA timezone for the end boundary, overriding the shared timezone. Use separate boundary zones for events such as flights whose departure and arrival have different local times. |
attachments | Optional | Drive file IDs or share URLs to attach. On update the list replaces the event's existing attachments rather than adding to them, so pass the full set you want to keep. |
color_id | Optional | Event color by name or ID (1-11): lavender, sage, grape, flamingo, banana, tangerine, peacock, graphite, blueberry, basil, tomato. Invalid values are rejected before the API call. |
this_and_following | Optional | 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 instances are kept. Updating the series ID instead changes every instance. Defaults to False. |
manage_calendar
ExtendedCreate secondary calendars and manage who a calendar is shared with. Replaces create_calendar.
| Parameter | Required | Description |
|---|---|---|
action | Required | create, list_sharing, share, update_sharing, or unshare. |
summary | Optional | Name for the new calendar. Required for create. |
description | Optional | Optional calendar description for create. |
timezone | Optional | IANA timezone for the new calendar (e.g., "America/New_York"). |
calendar_id | Optional | Calendar the sharing actions act on. Defaults to primary. |
role | Optional | Access level for share and update_sharing: freeBusyReader, reader, writerWithoutPrivateAccess, writer, owner, or none. |
scope_type | Optional | Who share grants access to: user, group, domain, or default (public). Defaults to user. |
scope_value | Optional | Email address for user or group, or the domain name for domain. Required for share unless scope_type is default. |
rule_id | Optional | Sharing rule from list_sharing (e.g. user:[email protected]). Required for update_sharing and unshare. The owner's own rule cannot be changed or removed. |
send_notifications | Optional | Email the grantee on share and update_sharing. Defaults to True. |
page_token | Optional | For list_sharing: token for the next page, from a previous response. |
query_freebusy
ExtendedQuery free/busy information across one or more calendars.
| Parameter | Required | Description |
|---|---|---|
time_min | Required | Start of the window (RFC3339). |
time_max | Required | End of the window (RFC3339). |
calendar_ids | Optional | Calendar IDs to query. Defaults to primary. |
group_expansion_max | Optional | Maximum calendars to expand per group. |
calendar_expansion_max | Optional | Maximum calendars for which to return busy information. |
manage_out_of_office
ExtendedCreate, list, update, or delete Out of Office events.
| Parameter | Required | Description |
|---|---|---|
action | Required | create, list, update, or delete. |
start_time | Optional | Start time (required for create). |
end_time | Optional | End time (required for create). |
summary | Optional | Event title. |
auto_decline_mode | Optional | How conflicting meetings are declined. |
decline_message | Optional | Message sent with auto-declines. |
recurrence | Optional | RRULE strings for recurring events. |
event_id | Optional | Required for update and delete. |
calendar_id | Optional | Defaults to primary. |
page_token | Optional | For list: token for the next page, from a previous response. Pass that response's pagination time_min too and keep the other query parameters unchanged. |
manage_focus_time
ExtendedCreate, list, update, or delete Focus Time events.
| Parameter | Required | Description |
|---|---|---|
action | Required | create, list, update, or delete. |
start_time | Optional | Start time (required for create). |
end_time | Optional | End time (required for create). |
summary | Optional | Event title. |
auto_decline_mode | Optional | How conflicting meetings are declined. |
decline_message | Optional | Message sent with auto-declines. |
chat_status | Optional | Chat availability during focus time (e.g., "doNotDisturb"). |
recurrence | Optional | RRULE strings for recurring events. |
event_id | Optional | Required for update and delete. |
calendar_id | Optional | Defaults to primary. |
page_token | Optional | For list: token for the next page, from a previous response. Pass that response's pagination time_min too and keep the other query parameters unchanged. |
Google Drive MCP
Drive content, sharing, import/export, and permission management.
Source: gdrive/drive_tools.py
search_drive_files
CoreSearch Drive files and folders.
| Parameter | Required | Description |
|---|---|---|
query | Required | The search query string. Supports Google Drive search operators; legacy v2 field names such as title and modifiedDate are translated automatically. |
page_size | Optional | The maximum number of files to return. Defaults to 10. |
page_token | Optional | Page token from a previous response's nextPageToken. |
drive_id | Optional | ID of the shared drive to search. |
file_type | Optional | Restrict results to specific file type (e.g., 'folder', 'document', 'pdf'). |
get_drive_file_content
CoreRead file content with export support. Images come back as image content, SVGs as markup with any embedded rasters attached. Long text comes back a page at a time (40,000 characters by default) with the offset to continue from.
| Parameter | Required | Description |
|---|---|---|
file_id | Required | Drive file ID. |
offset | Optional | Character offset to continue from after a truncated result. Defaults to 0. |
full_content | Optional | If True, return everything from offset onward in one call instead of a single page. Defaults to False. |
get_drive_file_download_url
CoreDownload Drive files via local path or HTTP attachment URL, or inline as an embedded resource in stateless mode unless a GCS attachment bucket is configured.
| Parameter | Required | Description |
|---|---|---|
file_id | Required | The Google Drive file ID to download. |
export_format | Optional | Optional export format for Google native files. Google Drawings export as PNG by default, or pdf, jpg/jpeg or svg. |
create_drive_file
CoreCreate files from inline content or source URLs, or create a shortcut to an existing file or folder.
| Parameter | Required | Description |
|---|---|---|
file_name | Required | The name for the new file. |
content | Optional | Text content to write to the file. |
folder_id | Optional | The ID of the parent folder. Defaults to 'root'. |
mime_type | Optional | The MIME type of the file. Defaults to 'text/plain'. |
fileUrl | Optional | If provided, fetches file content from this URL (http:// or https://; file:// only where local file access is enabled). Where it is disabled, use return_upload_url for files on the caller's machine. |
base64_content | Optional | Standard base64-encoded file bytes. Mutually exclusive with content and fileUrl. |
content_mime_type | Optional | MIME type for base64_content uploads. Required when using base64_content. |
base64_sha256 | Optional | Expected SHA-256 hex digest of the decoded payload for integrity verification. |
return_upload_url | Optional | Return a Google resumable-upload URL the client PUTs the bytes to directly, so large or binary files skip the server and model context. Offered only when WORKSPACE_MCP_DISABLE_LOCAL_FILES is set. |
shortcut_target_id | Optional | ID of an existing file or folder. Creates a Drive shortcut named file_name in folder_id that points to it, so the item shows up in a second folder without being copied. Not combinable with content, fileUrl or base64_content; mime_type may be omitted. |
create_drive_folder
CoreCreate folders in My Drive or shared drives.
| Parameter | Required | Description |
|---|---|---|
folder_name | Required | The name for the new folder. |
parent_folder_id | Optional | The ID of the parent folder. Defaults to 'root'. |
import_to_google_doc
CoreImport files (Markdown, DOCX, HTML, etc.) into Google Docs.
| Parameter | Required | Description |
|---|---|---|
file_name | Required | The name for the new Google Doc; the extension is dropped from the title. Without source_format, it also sets the format of the content (e.g. Notes.md so Markdown tables are not imported as plain text). |
content | Optional | Text content for text-based formats (MD, TXT, HTML). |
file_path | Optional | Local file path for binary formats (DOCX, ODT). |
file_url | Optional | Remote URL to fetch the file from (http/https). |
source_format | Optional | Source format hint ('md', 'markdown', 'docx', 'txt', 'html', 'rtf', 'odt'). |
base64_content | Optional | Standard base64-encoded file bytes for binary uploads. Mutually exclusive with content, file_path, and file_url. |
base64_sha256 | Optional | Expected SHA-256 hex digest of the decoded payload for integrity verification. |
return_upload_url | Optional | Return a Google resumable-upload URL the client PUTs the bytes to directly, so large or binary files skip the server and model context. Offered only when WORKSPACE_MCP_DISABLE_LOCAL_FILES is set. |
import_to_google_slides
CoreImport presentation files (PPTX, PPT, ODP) as Google Slides.
| Parameter | Required | Description |
|---|---|---|
file_name | Required | The name for the new Google Slides presentation; the extension is dropped from the title. Without source_format, it also sets the format of base64_content (e.g. Deck.pptx). |
file_path | Optional | Local file path to the presentation file. |
file_url | Optional | Remote URL to fetch the file from (http/https). |
source_format | Optional | Source format hint ('pptx', 'ppt', 'odp'). |
folder_id | Optional | Destination folder ID. Defaults to 'root'. |
base64_content | Optional | Standard base64-encoded file bytes for binary uploads. Mutually exclusive with file_path and file_url. |
base64_sha256 | Optional | Expected SHA-256 hex digest of the decoded payload for integrity verification. |
return_upload_url | Optional | Return a Google resumable-upload URL the client PUTs the bytes to directly, so large or binary files skip the server and model context. Offered only when WORKSPACE_MCP_DISABLE_LOCAL_FILES is set. |
import_to_google_sheets
CoreImport spreadsheet files (XLSX, CSV, TSV, etc.) as Google Sheets.
| Parameter | Required | Description |
|---|---|---|
file_name | Required | The name for the new Google Sheet; the extension is dropped from the title. Without source_format, it also sets the format of the content (e.g. Data.csv). |
content | Optional | Inline text content for text-based formats (CSV, TSV). |
file_path | Optional | Local file path for binary formats (XLSX, ODS). |
file_url | Optional | Remote URL to fetch the file from (http/https). |
source_format | Optional | Source format hint ('xlsx', 'csv', 'tsv', 'ods'). |
folder_id | Optional | Destination folder ID. Defaults to 'root'. |
base64_content | Optional | Standard base64-encoded file bytes for binary uploads. Mutually exclusive with content, file_path, and file_url. |
base64_sha256 | Optional | Expected SHA-256 hex digest of the decoded payload for integrity verification. |
return_upload_url | Optional | Return a Google resumable-upload URL the client PUTs the bytes to directly, so large or binary files skip the server and model context. Offered only when WORKSPACE_MCP_DISABLE_LOCAL_FILES is set. |
get_drive_shareable_link
CoreGenerate shareable links for files.
| Parameter | Required | Description |
|---|---|---|
file_id | Required | The ID of the file or folder to get the shareable link for. |
list_drive_items
ExtendedList folder contents or shared drives.
| Parameter | Required | Description |
|---|---|---|
folder_id | Optional | The ID of the Google Drive folder. Defaults to 'root'. |
page_size | Optional | The maximum number of items to return. Defaults to 100. |
page_token | Optional | Page token for pagination. |
drive_id | Optional | Shared drive ID to list from. |
resource_type | Optional | items (default) or drives to list shared drives. |
file_type | Optional | Restrict results to specific file type. |
copy_drive_file
ExtendedCopy existing Drive files with optional renaming.
| Parameter | Required | Description |
|---|---|---|
file_id | Required | The ID of the file to copy. |
new_name | Optional | New name for the copied file. If not provided, uses "Copy of [original name]". |
parent_folder_id | Optional | The ID of the folder where the copy should be created. Defaults to 'root'. |
copy_comments | Optional | Copy open comments and suggestions (Docs, Sheets, and Slides only). Defaults to false. |
update_drive_file
ExtendedUpdate metadata, move files, or replace/append to Google Apps content in place.
| Parameter | Required | Description |
|---|---|---|
file_id | Required | The ID of the file to update. |
name | Optional | New name for the file. |
description | Optional | New description for the file. |
add_parents | Optional | Comma-separated folder IDs to add as parents. |
remove_parents | Optional | Comma-separated folder IDs to remove from parents. |
starred | Optional | Star or unstar the file. |
trashed | Optional | Move the file to or from the trash. |
content | Optional | Replacement text content (Markdown, TXT, HTML), preserving the file ID. |
file_path | Optional | Local file path for binary replacement content (DOCX, ODT, etc.). |
file_url | Optional | Remote URL to fetch replacement content from. |
source_format | Optional | Format hint for replacement content ('md', 'docx', 'txt', 'html', 'rtf', 'odt'). |
mode | Optional | 'replace' (default), 'append', or 'prepend'. Append/prepend splice content onto the existing text server-side, so only the new text has to be sent. |
return_upload_url | Optional | Return a Google resumable-upload URL the client PUTs the bytes to directly, so large or binary files skip the server and model context. Offered only when WORKSPACE_MCP_DISABLE_LOCAL_FILES is set. |
manage_drive_access
ExtendedGrant, update, revoke permissions, and transfer ownership.
| Parameter | Required | Description |
|---|---|---|
file_id | Required | The ID of the file or folder. |
action | Required | The access management action to perform ('grant', 'revoke', 'update', 'transfer_ownership'). |
share_with | Optional | Email address (user/group) or domain name. |
role | Optional | Permission role ('reader', 'writer', 'commenter', 'owner'). |
permission_id | Optional | Permission ID for revoke/update actions. |
set_drive_file_permissions
ExtendedConfigure link sharing and file-level sharing.
| Parameter | Required | Description |
|---|---|---|
file_id | Required | The ID of the file or folder. |
link_sharing | Optional | Control "anyone with the link" access for the file. |
writers_can_share | Optional | Whether editors can change permissions and share. |
get_drive_file_permissions
CompleteGet file metadata, parents, and detailed permission entries.
| Parameter | Required | Description |
|---|---|---|
file_id | Required | The ID of the file to check permissions for. |
check_drive_file_public_access
CompleteCheck whether a file is publicly accessible.
| Parameter | Required | Description |
|---|---|---|
file_name | Required | The name of the file to check. |
Gmail MCP
Message, label, filter, thread, and attachment workflows.
Source: gmail/gmail_tools.py
search_gmail_messages
CoreSearch mail using Gmail query operators.
| Parameter | Required | Description |
|---|---|---|
query | Required | The search query. Supports standard Gmail search operators. |
page_size | Optional | The maximum number of messages to return. Defaults to 10. |
page_token | Optional | Token for retrieving the next page of results. |
include_headers | Optional | If True, also return Subject, From, Date and labels (e.g. DRAFT, SENT) per result, so drafts can be told apart from sent mail. Costs one metadata fetch per result. Defaults to False. |
get_gmail_message_content
CoreRetrieve message content. With full=True, returns the complete untruncated message via file/URL (or inline when no file storage is available).
| Parameter | Required | Description |
|---|---|---|
message_id | Required | The unique ID of the Gmail message to retrieve. |
body_format | Optional | Body output format: 'text' (default), 'html', or 'raw' (decoded MIME). |
full | Optional | If True, return the complete untruncated message. |
format | Optional | 'full' (default) or 'metadata' for headers only, skipping the body fetch. |
include_headers | Optional | When False, omit the Subject/From/To/Date summary (attached messages' too), and with full=True name the export after the message ID instead of the subject. Requires format='full'; body_format='raw' is only allowed when exporting to a file. Defaults to True. |
include_links | Optional | When True, append a LINKS section with the http(s) URLs from the HTML body that the text output omits. Only applies to body_format='text'. Defaults to False. |
page_offset | Optional | Read the rendered body (attachments and attached messages excluded) as JSON pages starting at this character position. Set 0, then follow next_offset until complete is true. Requires format='full', full=False and body_format of text or html. |
page_size | Optional | Maximum body characters per page, 1 to 20,000. Defaults to 20,000. Requires page_offset. |
expected_sha256 | Optional | The body_sha256 from the previous page; the call is rejected if the body has changed since. Requires page_offset. |
get_gmail_messages_content_batch
CoreBatch fetch message content.
| Parameter | Required | Description |
|---|---|---|
message_ids | Required | List of Gmail message IDs to retrieve (max 25 per batch). |
format | Optional | Message format. "full" includes body, "metadata" only headers. |
include_links | Optional | When True, append a LINKS section with the http(s) URLs from the HTML body that the text output omits. Only applies to body_format='text'. Defaults to False. |
send_gmail_message
CoreSend email messages (supports replies, forwards, and attachments). When thread_id is set, threading headers are derived from the thread automatically. Sends are never retried: a timeout or server error reports that the message may already have been delivered, so check Sent before sending again.
| Parameter | Required | Description |
|---|---|---|
to | Optional | Recipient email address. Optional when replying with reply_all=True, which derives it from the thread. |
subject | Optional | Email subject. Required for a new message; optional when replying with thread_id (inherits the parent subject, adding Re: only if missing) or forwarding (defaults to "Fwd: <original subject>"). |
body | Optional | Email body content. Required when sending. When forwarding, this is an optional note prepended above the quoted original. |
body_format | Optional | Email body format ('plain' or 'html'). Defaults to 'plain'. With 'html', bare newlines between text become <br> line breaks; well-formed block markup is left untouched. A body that starts with an entity-escaped tag (<div>) and has no real markup is rejected before sending. |
cc | Optional | Optional CC email address. |
bcc | Optional | Optional BCC email address. |
thread_id | Optional | Thread ID to reply within. |
reply_all | Optional | Derive reply-all recipients from the thread: To is the sender replied to, Cc the other participants, excluding the authenticated account. Requires thread_id; explicit to/cc win. Defaults to False. |
quote_original | Optional | Include the message being replied to as a quoted original. Only has an effect with thread_id. Defaults to False. |
direction | Optional | Base text direction of the body: auto (default) takes it from the first strong character, ltr/rtl force it. On a forward it orients the note. |
attachments | Optional | Optional list of attachments (path or base64 content). |
get_gmail_thread_content
ExtendedRetrieve full thread content.
| Parameter | Required | Description |
|---|---|---|
thread_id | Required | The unique ID of the Gmail thread to retrieve. |
include_links | Optional | When True, append a LINKS section with the http(s) URLs from each HTML body that the text output omits. Defaults to False. |
get_gmail_attachment_content
ExtendedDownload Gmail attachments to persistent attachment storage.
| Parameter | Required | Description |
|---|---|---|
message_id | Required | The ID of the Gmail message containing the attachment. |
attachment_id | Required | The ID of the attachment to download. |
return_base64 | Optional | If True, also return the attachment content as base64. |
attachment_index | Optional | Zero-based attachment position from the message-content response. Lets the server re-resolve Gmail's refreshed attachment IDs against current metadata before downloading. |
modify_gmail_message_labels
ExtendedAdd/remove labels on a message.
| Parameter | Required | Description |
|---|---|---|
message_id | Required | The ID of the message to modify. |
add_label_ids | Optional | List of label IDs to add to the message. |
remove_label_ids | Optional | List of label IDs to remove from the message. |
list_gmail_labels
ExtendedList account labels.
| Parameter | Required | Description |
|---|---|---|
prefix | Optional | Return only labels whose name starts with this string (case-sensitive). Useful for fetching a single subtree of a hierarchical label structure. |
compact | Optional | When true, returns minimal JSON with just id and name per label, sorted by name. |
include_system | Optional | When false, excludes Gmail system labels from the results. Defaults to true. |
list_gmail_filters
ExtendedList configured Gmail filters.
manage_gmail_label
ExtendedCreate/update/delete labels.
| Parameter | Required | Description |
|---|---|---|
action | Required | Action to perform on the label ('create', 'update', 'delete'). |
name | Optional | Label name. Required for create, optional for update. |
label_id | Optional | Label ID. Required for update and delete operations. |
background_color | Optional | Label background color as a hex string, e.g. #fb4c2f. Must be set together with text_color. Gmail accepts only its own palette, and an unsupported value is rejected before the request is sent. Applies to user labels, not system labels. |
text_color | Optional | Label text color as a hex string, e.g. #ffffff. Must be set together with background_color, from the same palette. On update, omitting both keeps the label's current color. |
clear_color | Optional | On update, remove the label's current color. Cannot be combined with background_color or text_color. |
manage_gmail_filter
ExtendedCreate, update, and delete Gmail filters, or apply one to existing mail.
| Parameter | Required | Description |
|---|---|---|
action | Required | "create", "update", "delete", or "apply". Update recreates the filter (new one first, then the old one is deleted), so its ID changes. |
criteria | Optional | Filter criteria object (required for create; optional for update/apply). |
filter_action | Optional | Filter action object (required for create; optional for update/apply). |
filter_id | Optional | ID of the filter (required for delete and update; optional for apply). |
dry_run | Optional | Apply only: count matching messages without changing anything. |
max_messages | Optional | Apply only: safety cap on messages changed. Defaults to 5000. |
draft_gmail_message
ExtendedCreate Gmail drafts, including a forward of an existing message saved for review.
| Parameter | Required | Description |
|---|---|---|
subject | Optional | Email subject. Required for a new draft; optional when replying with thread_id (inherits the parent subject) or forwarding (defaults to Fwd: <original subject>). |
body | Optional | Email body content. Required unless forwarding, where it becomes an optional note above the quoted original. |
body_format | Optional | Email body format ('plain' or 'html'). Defaults to 'plain'. With 'html', a body that starts with an entity-escaped tag (<div>) and has no real markup is rejected. |
direction | Optional | Base text direction of the body: auto (default) takes it from the first strong character, ltr/rtl force it. On a forward it orients the note. |
to | Optional | Optional recipient email address. |
cc | Optional | Optional CC email address. |
reply_all | Optional | Derive reply-all recipients from the thread: To is the sender replied to, Cc the other participants, excluding the authenticated account. Requires thread_id; explicit to/cc win. Defaults to False. |
attachments | Optional | Optional list of attachments. |
forward_message_id | Optional | Gmail message ID to forward. Saves a forward of that message as a draft, carrying over its subject and body. |
include_forwarded_attachments | Optional | When forwarding, whether to carry over the original attachments. Defaults to true. |
get_gmail_threads_content_batch
CompleteBatch fetch thread content.
| Parameter | Required | Description |
|---|---|---|
thread_ids | Required | A list of Gmail thread IDs to retrieve. |
include_links | Optional | When True, append a LINKS section with the http(s) URLs from each HTML body that the text output omits. Defaults to False. |
batch_modify_gmail_message_labels
CompleteBatch label modifications on messages or whole conversations.
| Parameter | Required | Description |
|---|---|---|
message_ids | Optional | A list of message IDs to modify. Can be combined with thread_ids; at least one is required. |
thread_ids | Optional | Thread (conversation) IDs to modify. Applies the change to every message in each thread and reports an outcome per thread. |
add_label_ids | Optional | List of label IDs to add to the messages. |
remove_label_ids | Optional | List of label IDs to remove from the messages. |
verify | Optional | Read messages back and report per-ID outcomes. Defaults to true; set to false to avoid one extra batched read per message when an unverified result is acceptable. |
start_google_auth
CompleteLegacy OAuth 2.0 auth helper (disabled with OAuth 2.1).
Google Docs MCP
Document creation, edits, exports, structured updates, and comment management.
Source: gdocs/docs_tools.py
get_doc_content
CoreExtract plain text document content, whole or a single heading section.
| Parameter | Required | Description |
|---|---|---|
document_id | Required | ID of the document to retrieve. |
tab_id | Optional | Read a single tab instead of the main document body. Take the ID from inspect_doc_structure. |
heading | Optional | Text of a body heading (case-insensitive, must match exactly one). Returns that heading and everything below it up to the next heading of equal or shallower level instead of the whole document. A heading that is not found lists the available headings. Not supported for Office files. |
heading_level | Optional | Heading level 1-6 to narrow the heading match when the same text appears at several levels. |
preserve_context | Optional | Return a readable plain-text view with link destinations, smart-chip values, table boundaries, headers, footers and footnotes. Off by default, because the default output stays index-aligned for editing. |
create_doc
CoreCreate new documents.
| Parameter | Required | Description |
|---|---|---|
title | Required | The title for the new document. |
content | Optional | Initial content, inserted as plain text (Markdown is not rendered). Use import_to_google_doc to create a doc from Markdown. |
folder_id | Optional | The ID of the parent folder. Defaults to 'root'. |
modify_doc_text
CoreModify document text with formatting and links.
| Parameter | Required | Description |
|---|---|---|
document_id | Required | ID of the document to update. |
start_index | Optional | Start position for operation, using indices from inspect_doc_structure. Required unless heading is set. |
end_index | Optional | End position for text replacement/formatting (if not provided with text, text is inserted). |
text | Optional | New text to insert or replace with (optional - can format existing text without changing it). Rendered as Markdown when heading is set. |
heading | Optional | Edit the section under this heading instead of using indices: text replaces the body up to the next heading of equal or shallower level. Case-insensitive and must match exactly one heading. |
heading_level | Optional | Heading level 1-6 to narrow the heading match. |
bold | Optional | Whether to make text bold (True/False/None to leave unchanged). |
italic | Optional | Whether to make text italic (True/False/None to leave unchanged). |
underline | Optional | Whether to underline text (True/False/None to leave unchanged). |
font_size | Optional | Font size in points. |
font_family | Optional | Font family name (e.g., "Arial", "Times New Roman"). |
text_color | Optional | Foreground text color (#RRGGBB). |
background_color | Optional | Background/highlight color (#RRGGBB). |
link_url | Optional | Hyperlink URL (http/https). |
search_docs
ExtendedSearch docs by name.
| Parameter | Required | Description |
|---|---|---|
query | Required | Search query to find documents by name. |
page_size | Optional | Maximum number of results to return. |
page_token | Optional | Page token from a previous response's nextPageToken to fetch the next page. |
corpora | Optional | Corpus to search ("user", "domain", "drive", "allDrives"). Defaults to "drive" when drive_id is set, otherwise "allDrives". |
drive_id | Optional | Shared drive ID to search. |
find_and_replace_doc
ExtendedFind and replace text.
| Parameter | Required | Description |
|---|---|---|
document_id | Required | ID of the document to update. |
find_text | Required | Text to search for. |
replace_text | Required | Text to replace with. |
match_case | Optional | Whether to match case exactly. |
list_docs_in_folder
ExtendedList docs in a Drive folder.
| Parameter | Required | Description |
|---|---|---|
folder_id | Optional | The ID of the folder. Defaults to root. |
page_size | Optional | Maximum number of documents to return. |
page_token | Optional | Page token from a previous response's nextPageToken to fetch the next page. |
insert_doc_elements
ExtendedInsert tables, lists, and page breaks.
| Parameter | Required | Description |
|---|---|---|
document_id | Required | ID of the document to update. |
element_type | Required | Type of element to insert ("table", "list", "page_break"). |
index | Required | Position to insert element (0-based). |
rows | Optional | Number of rows for table (required for table). |
columns | Optional | Number of columns for table (required for table). |
list_type | Optional | Type of list ("UNORDERED", "ORDERED") (required for list). |
text | Optional | Initial text content for list items. |
update_paragraph_style
ExtendedApply heading and paragraph styles, including nested lists and per-edge borders.
| Parameter | Required | Description |
|---|---|---|
document_id | Required | Document ID to modify. |
start_index | Required | Start position (1-based). |
end_index | Required | End position (exclusive) - should cover the entire paragraph. |
heading_level | Optional | Heading level 0-6 (0 = NORMAL_TEXT, 1 = H1, 2 = H2, etc.). |
alignment | Optional | Text alignment. |
line_spacing | Optional | Line spacing value. |
border_edges | Optional | Border edges to update ('top', 'bottom', 'left', 'right', 'between'). Omit to update all four outer edges. |
border_color | Optional | Border color as #RRGGBB. Defaults to black. |
border_width | Optional | Border width in points. Defaults to 1. |
border_padding | Optional | Border padding in points. Defaults to 4. |
border_dash | Optional | Border dash style ('SOLID', 'DOT', or 'DASH'). Defaults to 'SOLID'. |
list_type | Optional | List type for creating lists. |
list_nesting_level | Optional | Nesting level for lists. |
get_doc_as_markdown
ExtendedExport a document as formatted Markdown.
| Parameter | Required | Description |
|---|---|---|
document_id | Required | ID of the Google Doc (or full URL). |
include_comments | Optional | Whether to include comments (default: True). |
comment_mode | Optional | How to display comments. |
include_resolved | Optional | Whether to include resolved comments (default: False). |
tab_id | Optional | Export a single tab instead of the main document body. Take the ID from inspect_doc_structure. |
include_colors | Optional | Follow text that has an explicit RGB foreground color with [color: #rrggbb]. Theme colors are not shown. Defaults to False. |
heading | Optional | Text of a body heading (case-insensitive, must match exactly one). Exports that heading and everything below it up to the next heading of equal or shallower level instead of the whole document. A heading that is not found lists the available headings. |
heading_level | Optional | Heading level 1-6 to narrow the heading match when the same text appears at several levels. |
export_doc_to_pdf
ExtendedExport a doc to PDF.
| Parameter | Required | Description |
|---|---|---|
document_id | Required | ID of the Google Doc to export. |
pdf_filename | Optional | Name for the PDF file (optional - if not provided, uses original name + "_PDF"). |
folder_id | Optional | Drive folder ID to save PDF in (optional - if not provided, saves in root). |
list_document_comments
ExtendedList all document comments.
manage_document_comment
ExtendedCreate, reply to, resolve, update, or delete comments. Update and delete apply to top-level comments you wrote.
insert_doc_image
CompleteInsert images from Drive or URLs.
| Parameter | Required | Description |
|---|---|---|
document_id | Required | ID of the document to update. |
image_source | Required | Drive file ID or public image URL. |
index | Required | Position to insert image (0-based). |
width | Optional | Image width in points (optional). |
height | Optional | Image height in points (optional). |
update_doc_headers_footers
CompleteUpdate headers and footers.
| Parameter | Required | Description |
|---|---|---|
document_id | Required | ID of the document to update. |
section_type | Required | Type of section to update ("header" or "footer"). |
content | Required | Text content for the header/footer. |
header_footer_type | Optional | Type of header/footer ("DEFAULT", "FIRST_PAGE_ONLY", "EVEN_PAGE"). |
batch_update_doc
CompleteExecute multiple doc operations in one call, including insert_person to add a person chip by email and insert_date to add a date chip (YYYY-MM-DD or an ISO 8601 timestamp, with optional date format, time format and timezone).
| Parameter | Required | Description |
|---|---|---|
document_id | Required | ID of the document to update. |
operations | Required | List of operation dictionaries. |
inspect_doc_structure
CompleteInspect structural document elements. Both modes also report paragraph layout stats: empty-paragraph counts, up to 100 paragraph ranges with a truncation flag, and whether the last paragraph is empty or a list item.
| Parameter | Required | Description |
|---|---|---|
document_id | Required | ID of the document to inspect. |
detailed | Optional | Whether to return detailed structure information. Detailed output adds list membership and object anchors. |
tab_id | Optional | Inspect a single tab instead of the main document body. |
preview_chars | Optional | Maximum characters of paragraph, header, and footer text preview (default 100). Pass 0 or None for the full text, which you need to locate a token inside a longer paragraph: add its UTF-16 offset to the paragraph's start_index. |
create_table_with_data
CompleteCreate populated tables.
| Parameter | Required | Description |
|---|---|---|
document_id | Required | ID of the document to update. |
table_data | Required | 2D list of strings - EXACT format: [["col1", "col2"], ["row1col1", "row1col2"]]. |
index | Required | Document position (get from inspect_doc_structure 'total_length'). |
bold_headers | Optional | Whether to make first row bold (default: true). |
debug_table_structure
CompleteDebug table structures.
| Parameter | Required | Description |
|---|---|---|
document_id | Required | ID of the document to inspect. |
table_index | Optional | Which table to debug (0 = first table, 1 = second table, etc.). |
tab_id | Optional | ID of the tab containing the table (from inspect_doc_structure). Nested tabs are supported; an unknown tab is an error. |
manage_doc_tab
CompleteCreate, rename, delete, or populate document tabs from markdown.
| Parameter | Required | Description |
|---|---|---|
document_id | Required | ID of the document to update. |
action | Required | 'create', 'rename', 'delete', or 'populate_from_markdown'. |
tab_id | Optional | Tab ID (required for rename, delete, and populate). |
title | Optional | Tab title (required for create and rename). |
index | Optional | Position for the new tab. |
parent_tab_id | Optional | Parent tab ID for nested tabs. |
markdown_text | Optional | Markdown content for populate_from_markdown. GFM pipe tables become native Docs tables. |
replace_existing | Optional | Whether populate replaces existing tab content (default: True). |
Google Sheets MCP
Spreadsheet reads/writes, formatting, comments, and conditional formatting.
Source: gsheets/sheets_tools.py
read_sheet_values
CoreRead values from ranges as tab-separated rows, each labelled with its sheet row number.
| Parameter | Required | Description |
|---|---|---|
spreadsheet_id | Required | The ID of the spreadsheet. |
range_name | Optional | The range to read (e.g., "Sheet1!A1:D10", "A1:D10"). Defaults to "A1:Z1000". |
include_hyperlinks | Optional | If True, also fetch hyperlink metadata for the range. |
include_smart_chips | Optional | If True, also fetch smart chip metadata (Drive files/folders and People) for the range. |
modify_sheet_values
CoreWrite, update, and clear range values, insert Drive and People smart chips, or copy another range into place.
| Parameter | Required | Description |
|---|---|---|
spreadsheet_id | Required | The ID of the spreadsheet. |
range_name | Required | The range to modify (e.g., "Sheet1!A1:D10", "A1:D10"). |
values | Optional | 2D array of values to write/update. Can be a JSON string or Python list. Required unless clear_values=True. |
value_input_option | Optional | How to interpret input values ("RAW" or "USER_ENTERED"). Defaults to "USER_ENTERED". |
clear_values | Optional | If True, clears the range instead of writing values. Defaults to False. |
chips | Optional | Smart chips to write instead of values: a Drive URL or email, a list or 2D list of them, or dicts like {"type": "person", "email": "..."}. JSON strings are accepted. |
chip_type | Optional | "drive" (default for URLs/IDs) or "person" (default for emails) when passing raw strings in chips. |
source_range | Optional | A1 range in the same spreadsheet to copy into range_name, like UI copy and paste: relative formulas shift and formatting comes along. range_name can be just the top-left destination cell. Use instead of values, chips, or clear_values. |
paste_type | Optional | What source_range pastes: "PASTE_NORMAL" (values, formulas, formatting), "PASTE_VALUES", "PASTE_FORMAT", "PASTE_NO_BORDERS", "PASTE_FORMULA", "PASTE_DATA_VALIDATION", or "PASTE_CONDITIONAL_FORMATTING". Defaults to "PASTE_NORMAL". |
create_spreadsheet
CoreCreate spreadsheets.
| Parameter | Required | Description |
|---|---|---|
title | Required | The title of the new spreadsheet. |
sheet_names | Optional | List of sheet names to create. If not provided, creates one sheet with default name. |
folder_id | Optional | The ID of the parent folder. Defaults to 'root'. |
list_spreadsheets
ExtendedList available spreadsheets.
| Parameter | Required | Description |
|---|---|---|
max_results | Optional | Maximum number of spreadsheets to return. Defaults to 25. |
page_token | Optional | Page token from a previous response's nextPageToken to fetch the next page. |
corpora | Optional | Corpus to search ("user", "domain", "drive", "allDrives"). Defaults to "drive" when drive_id is set, otherwise "allDrives". |
drive_id | Optional | Shared drive ID to search. |
get_spreadsheet_info
ExtendedRead spreadsheet metadata and sheet info.
| Parameter | Required | Description |
|---|---|---|
spreadsheet_id | Required | The ID of the spreadsheet to get info for. |
format_sheet_range
ExtendedApply styling, number/text formats, cell merges, borders, and dropdowns to ranges.
| Parameter | Required | Description |
|---|---|---|
spreadsheet_id | Required | The ID of the spreadsheet. |
range_name | Required | A1-style range (optionally with sheet name). |
background_color | Optional | Hex background color (e.g., "#FFEECC"). |
text_color | Optional | Hex text color (e.g., "#000000"). |
number_format_type | Optional | Sheets number format type (e.g., "DATE"). |
number_format_pattern | Optional | Custom pattern for the number format. |
wrap_strategy | Optional | Text wrap strategy (WRAP, OVERFLOW_CELL, CLIP). |
horizontal_alignment | Optional | Horizontal alignment. |
vertical_alignment | Optional | Vertical alignment. |
bold | Optional | Whether to make text bold. |
italic | Optional | Whether to make text italic. |
font_size | Optional | Font size. |
merge_cells | Optional | True merges the range, false unmerges it. Merging keeps only the top-left value of each merged group. |
merge_type | Optional | MERGE_ALL (default), MERGE_COLUMNS, or MERGE_ROWS. Setting it implies merge_cells=true. |
borders | Optional | Borders to draw, comma-separated: all, outer, inner, top, bottom, left, right, inner_horizontal, inner_vertical. none removes every border in the range. |
border_style | Optional | SOLID (default), SOLID_MEDIUM, SOLID_THICK, DASHED, DOTTED, or DOUBLE. Requires borders. |
border_color | Optional | Hex border color (default black). Requires borders. |
dropdown_values | Optional | Turns every cell in the range into a dropdown offering these values (e.g., ["open", "done"]). |
dropdown_strict | Optional | With dropdown_values: reject other input (default true) or only show a warning (false). |
clear_dropdown | Optional | Remove all data validation from the range, including checkboxes and other rules, not only dropdowns. |
list_sheet_tables
ExtendedList structured tables with IDs, names, ranges, and columns.
| Parameter | Required | Description |
|---|---|---|
spreadsheet_id | Required | The ID of the spreadsheet. |
create_sheet
CompleteAdd sheets to existing spreadsheets, or duplicate a tab within or into another spreadsheet.
| Parameter | Required | Description |
|---|---|---|
spreadsheet_id | Required | The ID of the spreadsheet. |
sheet_name | Optional | The name of the new sheet. Defaults to a Google-assigned name when omitted. |
source_sheet_name | Optional | Title of an existing tab to duplicate, with its formatting and formulas, instead of creating a blank one. |
insert_sheet_index | Optional | Zero-based position for the new tab. |
destination_spreadsheet_id | Optional | With source_sheet_name, copies the tab into this spreadsheet instead of duplicating it in place, then applies sheet_name and insert_sheet_index there. If the rename fails the copy is removed so a retry leaves no orphan. |
manage_sheet_tab
CompleteManage an existing tab: rename, delete, hide, unhide, reorder, or style it. Use create_sheet to add a tab and resize_sheet_dimensions for row and column changes.
| Parameter | Required | Description |
|---|---|---|
spreadsheet_id | Required | The ID of the spreadsheet. |
sheet_name | Required | Title of the existing tab to act on. |
action | Required | One of rename, delete, hide, unhide, reorder, or style. |
new_name | Optional | New title. Required for rename. |
new_index | Optional | New zero-based position. Required for reorder. |
tab_color | Optional | For style: hex tab color (#RRGGBB), or none to remove it. |
show_gridlines | Optional | For style: show (true) or hide (false) the gridlines. |
append_table_rows
CompleteAppend rows to a structured table, auto-extending the table range.
| Parameter | Required | Description |
|---|---|---|
spreadsheet_id | Required | The ID of the spreadsheet. |
table_id | Required | The ID of the table (from list_sheet_tables). |
values | Required | 2D array of row values to append. |
move_sheet_rows
CompleteMove rows between sheets within a spreadsheet.
| Parameter | Required | Description |
|---|---|---|
spreadsheet_id | Required | The ID of the spreadsheet. |
source_sheet | Required | Name of the sheet to move rows from. |
start_row | Required | First row to move (1-based). |
end_row | Required | Last row to move (inclusive). |
destination_sheet | Required | Name of the sheet to move rows to. |
resize_sheet_dimensions
CompleteResize, hide, freeze, insert, or delete rows and columns.
| Parameter | Required | Description |
|---|---|---|
spreadsheet_id | Required | The ID of the spreadsheet. |
sheet_name | Optional | Sheet to modify. Defaults to the first sheet. |
column_sizes | Optional | Map of column letters to pixel widths. |
row_sizes | Optional | Map of row numbers to pixel heights. |
auto_resize_columns | Optional | Columns to auto-fit to content. |
frozen_row_count | Optional | Number of frozen header rows. |
frozen_column_count | Optional | Number of frozen columns. |
hide_columns | Optional | Columns to hide (unhide_columns reverses). |
hide_rows | Optional | Rows to hide (unhide_rows reverses). |
insert_rows | Optional | Number of rows to insert (with insert_rows_at). |
insert_columns | Optional | Number of columns to insert (with insert_columns_at). |
delete_rows | Optional | Rows to delete. |
delete_columns | Optional | Columns to delete. |
list_spreadsheet_comments
CompleteList comments on spreadsheets.
manage_spreadsheet_comment
CompleteCreate, reply to, resolve, update, and delete spreadsheet comments. Pass cell (A1 notation) on create to anchor a comment to a specific cell. Update and delete apply to top-level comments you wrote.
manage_conditional_formatting
CompleteAdd, update, and remove conditional formatting rules.
| Parameter | Required | Description |
|---|---|---|
spreadsheet_id | Required | The ID of the spreadsheet. |
action | Required | The operation to perform ("add", "update", "remove"). |
range_name | Optional | Range to apply conditional formatting to. |
condition_type | Optional | Type of condition. |
condition_values | Optional | Values for the condition. |
background_color | Optional | Background color for formatting. |
text_color | Optional | Text color for formatting. |
rule_index | Optional | Index of rule to update/remove. |
gradient_points | Optional | Gradient points for gradient formatting. |
sheet_name | Optional | Sheet name for the range. |
manage_named_range
CompleteList, create, update, and delete named ranges.
| Parameter | Required | Description |
|---|---|---|
spreadsheet_id | Required | The ID of the spreadsheet. |
action | Required | The operation to perform ("list", "create", "update", "delete"). |
name | Optional | Name of the named range. Required for create; identifies the range for update/delete. |
range_name | Optional | Target range in A1 notation, e.g. "Sheet1!A1:D10". Required for create. |
named_range_id | Optional | ID of the named range to update or delete. |
new_name | Optional | New name for the named range (update). |
new_range | Optional | New A1-style range for the named range (update). |
Google Slides MCP
Presentations, page retrieval, slide rendering, and comment management.
Source: gslides/slides_tools.py
create_presentation
CoreCreate presentations.
| Parameter | Required | Description |
|---|---|---|
title | Optional | The title for the new presentation. Defaults to "Untitled Presentation". |
get_presentation
CoreRetrieve presentation details.
| Parameter | Required | Description |
|---|---|---|
presentation_id | Required | The ID of the presentation to retrieve. |
include_speaker_notes | Optional | Also report each slide's speaker notes and its notes shape ID (needed to edit notes via batch_update_presentation). Defaults to False. |
include_geometry | Optional | Also list each slide's elements with their placement: transform (translate, plus scale/shear when not identity) and intrinsic size, in raw EMU. Set this when adding slides to an existing deck so new elements can match its established margins. Defaults to False. |
include_styles | Optional | Also list each slide's elements with text styling (see get_page). Defaults to False. |
raw | Optional | Return the complete Presentation resource as JSON instead of the summary. Nothing is filtered, so it can be large; prefer get_page with raw=True for one slide. Overrides the other flags. |
batch_update_presentation
ExtendedApply multiple slide updates in one request.
| Parameter | Required | Description |
|---|---|---|
presentation_id | Required | The ID of the presentation to update. |
requests | Required | List of update requests to apply. |
get_page
ExtendedRetrieve a specific page/slide.
| Parameter | Required | Description |
|---|---|---|
presentation_id | Required | The ID of the presentation. |
page_object_id | Required | The object ID of the page/slide to retrieve. |
include_geometry | Optional | Also report each element's placement: transform (translate, plus scale/shear when not identity) and intrinsic size, in raw EMU. This is the only way to discover an existing deck's margins, gutters, and content area before adding elements. Tables also report column widths, row heights, and cell text. Defaults to False. |
include_styles | Optional | Also report paragraph and run text styling, placeholder linkage, autofit, fill, and outline. Only explicitly set values appear. Useful for proofing font, color, and alignment consistency. |
raw | Optional | Return the complete Page resource as JSON instead of the summary. Use when the summary lacks a field you need. Overrides the other flags. |
render_page_to_image
ExtendedRender a slide or notes page to an image and return it as image content.
| Parameter | Required | Description |
|---|---|---|
presentation_id | Required | The ID of the presentation. |
page_object_id | Required | The object ID of the page/slide to render. |
size | Optional | Image width: "SMALL" (200px), "MEDIUM" (800px), "LARGE" (1600px), or "WIDTH2000_PX". Defaults to "MEDIUM", which reads titles and body text; use "LARGE" for tables, chart labels, and footnotes. |
list_presentation_comments
CompleteList all presentation comments, including each comment's anchor so it can be matched to the slide element it refers to.
manage_presentation_comment
CompleteCreate, reply to, resolve, update, and delete presentation comments. Update and delete apply to top-level comments you wrote.
Google Forms MCP
Form creation, response retrieval, publish settings, and batch updates.
Source: gforms/forms_tools.py
create_form
CoreCreate forms.
| Parameter | Required | Description |
|---|---|---|
title | Required | The title of the form. |
description | Optional | The description of the form. |
document_title | Optional | The document title (shown in browser tab). |
get_form
CoreRetrieve form metadata and URLs.
| Parameter | Required | Description |
|---|---|---|
form_id | Required | The ID of the form to retrieve. |
list_form_responses
ExtendedList responses with pagination.
| Parameter | Required | Description |
|---|---|---|
form_id | Required | The ID of the form. |
page_size | Optional | Maximum number of responses to return. Defaults to 10. |
page_token | Optional | Token for retrieving next page of results. |
set_publish_settings
CompleteConfigure whether a form is published and accepting responses.
| Parameter | Required | Description |
|---|---|---|
form_id | Required | The ID of the form to update publish settings for. |
is_published | Optional | Whether the form is published and visible to responders. Defaults to True. |
is_accepting_responses | Optional | Whether the form accepts responses. Only takes effect when the form is published. Defaults to True. |
get_form_response
CompleteRetrieve an individual response.
| Parameter | Required | Description |
|---|---|---|
form_id | Required | The ID of the form. |
response_id | Required | The ID of the response to retrieve. |
batch_update_form
CompleteApply batch updates to form structure/settings.
| Parameter | Required | Description |
|---|---|---|
form_id | Required | The ID of the form to update. |
requests | Required | List of update requests to apply. |
Google Tasks MCP
Consolidated task and task-list management APIs.
Source: gtasks/tasks_tools.py
list_tasks
CoreList tasks with filters.
| Parameter | Required | Description |
|---|---|---|
task_list_id | Required | The ID of the task list to retrieve tasks from. |
max_results | Optional | Maximum number of tasks to return (default: 20, max: 10000). |
page_token | Optional | Token for pagination. |
show_completed | Optional | Whether to include completed tasks (default: True). |
show_deleted | Optional | Whether to include deleted tasks (default: False). |
show_hidden | Optional | Whether to include hidden tasks (default: False). |
show_assigned | Optional | Whether to include assigned tasks (default: False). |
completed_max | Optional | Upper bound for completion date (RFC 3339 timestamp). |
completed_min | Optional | Lower bound for completion date (RFC 3339 timestamp). |
due_max | Optional | Upper bound for due date (RFC 3339 timestamp). |
due_min | Optional | Lower bound for due date (RFC 3339 timestamp). |
updated_min | Optional | Lower bound for last modification time (RFC 3339 timestamp). |
get_task
CoreRetrieve task details.
| Parameter | Required | Description |
|---|---|---|
task_list_id | Required | The ID of the task list containing the task. |
task_id | Required | The ID of the task to retrieve. |
manage_task
CoreConsolidated create, update, delete, and move task operations.
| Parameter | Required | Description |
|---|---|---|
action | Required | The action to perform ("create", "update", "delete", "move"). |
task_list_id | Required | The ID of the task list. |
task_id | Optional | The ID of the task (required for "update", "delete", and "move"). |
title | Optional | The title of the task (required for "create", optional for "update"). |
notes | Optional | Notes/description for the task. |
status | Optional | Task status ("needsAction" or "completed"). |
due | Optional | Due date in RFC 3339 format. |
parent | Optional | Parent task ID (for subtasks). |
previous | Optional | Previous sibling task ID (for positioning). |
destination_task_list | Optional | Destination task list ID (for moving between lists). |
list_task_lists
CompleteList task lists.
| Parameter | Required | Description |
|---|---|---|
max_results | Optional | Maximum number of task lists to return (default: 1000, max: 1000). |
page_token | Optional | Token for pagination. |
get_task_list
CompleteRetrieve task-list details.
| Parameter | Required | Description |
|---|---|---|
task_list_id | Required | The ID of the task list to retrieve. |
manage_task_list
CompleteConsolidated create/update/delete/clear-completed for task lists.
| Parameter | Required | Description |
|---|---|---|
action | Required | The action to perform ("create", "update", "delete", "clear_completed"). |
task_list_id | Optional | The ID of the task list (required for "update", "delete", and "clear_completed"). |
title | Optional | The title for the task list (required for "create" and "update"). |
Google Contacts MCP
People API contact and group workflows.
Source: gcontacts/contacts_tools.py
search_contacts
CoreSearch by name, email, and phone.
| Parameter | Required | Description |
|---|---|---|
query | Required | Search query string (searches names, emails, phone numbers). |
page_size | Optional | Maximum number of results to return (default: 30, max: 30). |
get_contact
CoreRetrieve detailed contact profiles.
| Parameter | Required | Description |
|---|---|---|
contact_id | Required | The contact ID (e.g., "c1234567890" or full resource name "people/c1234567890"). |
list_contacts
CoreList contacts with pagination.
| Parameter | Required | Description |
|---|---|---|
page_size | Optional | Maximum number of contacts to return (default: 100, max: 1000). |
page_token | Optional | Token for pagination. |
sort_order | Optional | Sort order: "LAST_MODIFIED_ASCENDING", "LAST_MODIFIED_DESCENDING", "FIRST_NAME_ASCENDING", or "LAST_NAME_ASCENDING". Not supported when syncing. |
request_sync_token | Optional | Start a full sync. The last page returns a sync token. |
sync_token | Optional | List only changes since the sync that returned this token, marking deleted contacts. The last page returns a new sync token. |
manage_contact
CoreCreate, update, or delete contacts.
| Parameter | Required | Description |
|---|---|---|
action | Required | The action to perform: "create", "update", or "delete". |
contact_id | Optional | The contact ID (required for "update" and "delete"). |
given_name | Optional | First name (for create/update). |
family_name | Optional | Last name (for create/update). |
email | Optional | Email address (for create/update). |
phone | Optional | Phone number (for create/update). |
organization | Optional | Company/organization name (for create/update). |
job_title | Optional | Job title (for create/update). |
notes | Optional | Additional notes (for create/update). |
list_contact_groups
ExtendedList contact groups.
| Parameter | Required | Description |
|---|---|---|
page_size | Optional | Maximum number of groups to return (default: 100, max: 1000). |
page_token | Optional | Token for pagination. |
get_contact_group
ExtendedRetrieve group details and members.
| Parameter | Required | Description |
|---|---|---|
group_id | Required | The contact group ID. |
max_members | Optional | Maximum number of members to return (default: 100, max: 1000). |
manage_contacts_batch
CompleteBatch create, update, or delete contacts.
| Parameter | Required | Description |
|---|---|---|
action | Required | The action to perform: "create", "update", or "delete". |
contacts | Optional | List of contact dicts for "create" action. |
updates | Optional | List of update dicts for "update" action. |
contact_ids | Optional | List of contact IDs for "delete" action. |
manage_contact_group
CompleteCreate, update, delete groups, and manage membership.
| Parameter | Required | Description |
|---|---|---|
action | Required | The action to perform: "create", "update", "delete", or "modify_members". |
group_id | Optional | The contact group ID (required for "update", "delete", and "modify_members"). |
name | Optional | Group name (required for "create", optional for "update"). |
delete_contacts | Optional | Whether to delete contacts when deleting group. |
add_contact_ids | Optional | Contact IDs to add to group. |
remove_contact_ids | Optional | Contact IDs to remove from group. |
Google Chat MCP
Space messaging, reactions, search, and attachment download.
Source: gchat/chat_tools.py
get_messages
CoreRetrieve messages in a space.
| Parameter | Required | Description |
|---|---|---|
space_id | Required | The space to retrieve messages from, as spaces/X or a bare ID. |
page_size | Optional | Maximum number of messages to return. |
order_by | Optional | How to order the messages. |
page_token | Optional | Token for the next page, taken from a previous response that said more pages remain. Keep every other argument unchanged. |
send_message
CoreSend messages to spaces, or edit a message already sent.
| Parameter | Required | Description |
|---|---|---|
space_id | Required | The space to send the message to, as spaces/X or a bare ID. |
message_text | Required | The text content of the message. |
thread_key | Optional | Reply in a thread by app-defined key (creates thread if not found). |
thread_name | Optional | Reply in an existing thread by its resource name (e.g. spaces/X/threads/Y). |
message_name | Optional | Edit this message in place instead of sending a new one, given as spaces/X/messages/Y. The message must belong to space_id, and this cannot be combined with thread_key or thread_name. |
search_messages
CoreSearch chat history.
| Parameter | Required | Description |
|---|---|---|
query | Optional | Text to search for. If omitted, only time_filter is applied. |
space_id | Optional | Optional space to limit search to, as spaces/X or a bare ID. |
page_size | Optional | Maximum number of results to return. |
create_reaction
CoreAdd emoji reactions to messages.
| Parameter | Required | Description |
|---|---|---|
message_id | Required | The message resource name (e.g. spaces/X/messages/Y). |
emoji_unicode | Required | The emoji character to react with (e.g. 👍). |
list_spaces
ExtendedList spaces and DMs, or the members of one space. Direct messages and unnamed group chats are labelled after their members.
| Parameter | Required | Description |
|---|---|---|
page_size | Optional | Maximum number of spaces to return. |
space_type | Optional | Filter by space type: "all" (default), "room", or "dm". |
space_id | Optional | List this space's members instead of spaces (spaces/X or a bare ID), up to page_size: people, apps and groups, with each member's role and pending invites marked. |
download_chat_attachment
ExtendedDownload chat attachments.
| Parameter | Required | Description |
|---|---|---|
message_id | Required | The message resource name (e.g. spaces/X/messages/Y). |
attachment_index | Optional | Zero-based index of the attachment to download (default 0). |
Google Custom Search MCP
Programmable Search Engine queries and metadata.
Source: gsearch/search_tools.py
search_custom
CoreRun custom search queries with optional site restrictions.
| Parameter | Required | Description |
|---|---|---|
q | Required | The search query. |
num | Optional | Number of results to return (1-10). Defaults to 10. |
start | Optional | The index of the first result to return (1-based). Defaults to 1. |
safe | Optional | Safe search level. Defaults to "off". |
search_type | Optional | Search for images if set to "image". |
site_search | Optional | Restrict search to a specific site/domain. |
site_search_filter | Optional | Exclude ("e") or include ("i") site_search results. |
date_restrict | Optional | Restrict results by date (e.g., "d5" for past 5 days, "m3" for past 3 months). |
file_type | Optional | Filter by file type (e.g., "pdf", "doc"). |
language | Optional | Language code for results (e.g., "lang_en"). |
country | Optional | Country code for results (e.g., "countryUS"). |
sites | Optional | List of sites/domains to restrict search to (e.g., ["example.com", "docs.example.com"]). |
get_search_engine_info
CompleteRetrieve search engine configuration metadata.
Google Apps Script MCP
Create, execute, and manage Apps Script projects and deployments.
Source: gappsscript/apps_script_tools.py
get_script_project
CoreList script projects, or read one project's structure or a single source file.
| Parameter | Required | Description |
|---|---|---|
action | Required | "list" (projects you can access) or "get" (one project). |
script_id | Optional | The script project ID (required for get). |
file_name | Optional | Return this complete source file instead of the project overview (get only). |
page_size | Optional | Number of results per page for list (default: 50). |
page_token | Optional | Token for pagination (list only). |
manage_script_project
CoreCreate standalone or bound script projects, or permanently delete one.
| Parameter | Required | Description |
|---|---|---|
action | Required | "create" or "delete". Delete cannot be undone. |
script_id | Optional | The script project ID (required for delete). |
title | Optional | Project title (required for create). |
parent_id | Optional | Optional Drive folder ID or bound container ID (create only). |
manage_script_content
CoreCreate or update script files.
| Parameter | Required | Description |
|---|---|---|
action | Required | "update". |
script_id | Required | The script project ID. |
files | Optional | List of file objects with name, type, and source (required for update). |
merge | Optional | Overlay files onto the project (default). False replaces the whole file set, deleting any file left out. |
run_script_function
CoreExecute deployed script functions with args.
| Parameter | Required | Description |
|---|---|---|
script_id | Required | The script project ID. |
function_name | Required | Name of function to execute. |
parameters | Optional | Optional list of parameters to pass. |
dev_mode | Optional | Whether to run latest code vs deployed version. |
deployment_id | Optional | API Executable deployment ID; defaults to the highest-versioned one. |
generate_trigger_code
CoreGenerate Apps Script code for time-driven and event triggers.
| Parameter | Required | Description |
|---|---|---|
trigger_type | Required | The kind of trigger to generate code for. |
function_name | Required | Function the trigger should invoke. |
schedule | Optional | Schedule expression for time-driven triggers. |
list_script_deployments
ExtendedList deployments for a project.
| Parameter | Required | Description |
|---|---|---|
script_id | Required | The script project ID. |
manage_deployment
ExtendedCreate, update, or delete deployments. Updates keep the deployment's existing settings and change only the fields you pass.
| Parameter | Required | Description |
|---|---|---|
action | Required | Action to perform - "create", "update", or "delete". |
script_id | Required | The script project ID. |
deployment_id | Optional | The deployment ID (required for update and delete). |
description | Optional | Deployment description (required for create; optional for update when version_number is set). |
version_description | Optional | Optional version description (for create only). |
version_number | Optional | Version to point the deployment at (update only). |
get_script_version
ExtendedList saved versions of a script project, or retrieve one.
| Parameter | Required | Description |
|---|---|---|
action | Required | "list" or "get". |
script_id | Required | The script project ID. |
version_number | Optional | The version number to retrieve (required for get). |
manage_script_version
ExtendedCreate an immutable version from the current project state.
| Parameter | Required | Description |
|---|---|---|
action | Required | "create". |
script_id | Required | The script project ID. |
description | Optional | Optional version description. |
get_script_activity
ExtendedInspect recent executions, or aggregate execution metrics for a script.
| Parameter | Required | Description |
|---|---|---|
action | Required | "processes" (recent runs) or "metrics" (active users, total and failed executions). |
script_id | Optional | Required for metrics. For processes, lists every run of that script visible to you, including runs by other users. |
page_size | Optional | Number of results for processes (default: 50). |
metrics_granularity | Optional | Granularity of metrics data: "DAILY" (default) or "WEEKLY". |
manage_script_trigger
ExtendedList or delete your installable triggers on a project, via a small helper file run through the Execution API.
| Parameter | Required | Description |
|---|---|---|
action | Required | "list" or "delete". |
script_id | Required | The script project ID. |
trigger_id | Optional | Unique ID of one trigger to delete (from list). |
handler_function | Optional | Delete every trigger calling this function. |
dev_mode | Optional | Run against the latest saved code (default; owner only) vs the deployed version. |
deployment_id | Optional | API Executable deployment ID; defaults to the highest-versioned one. |