Skip to main content
Glama

VE Google Workspace MCP (ve-gws)

ve-gws MCP server License: MIT Python 3.10+ Tests

Most Google Workspace MCPs let you read. This one lets you write โ€” a Python fork of taylorwilsdon/google_workspace_mcp with 28 additional authoring tools on top (deeper Slides, markdown-to-Docs, smart chips, Sheets data validation, recursive Drive copy, revisions). See Why VE-GWS (vs. upstream) below.

Part of Vibe Entrepreneurs โ€” a community for any vibe coders shipping real work with AI: solo indie builders, product-minded devs, agency folks, side-project makers. You don't need to use ve-gws to join. Come say hi: vibeentrepreneurs.com.

Companion repo: HuntsDesk/ve-kit โ€” Vibe Coding Framework & Persistent Memory for Claude Code (persistent task board, process gates, Docker autonomous worker). Install standalone or alongside.


Google Workspace MCP Server

License: MIT Python 3.10+ PyPI PyPI Downloads Website

Full natural language control over Google Calendar, Drive, Gmail, Docs, Sheets, Slides, Forms, Tasks, Contacts, and Chat through all MCP clients, AI assistants and developer tools. Includes a full featured CLI for use with tools like Claude Code and Codex!

The most feature-complete Google Workspace MCP server, with Remote OAuth2.1 multi-user support and 1-click Claude installation. With native OAuth 2.1, stateless mode and external auth server support, it's the only Workspace MCP you can host for your whole organization centrally & securely!

Support for all free Google accounts (Gmail, Docs, Drive etc) & Google Workspace plans (Starter, Standard, Plus, Enterprise, Non Profit) with expanded app options like Chat & Spaces. Interested in a private, managed cloud instance? That can be arranged.

Why VE-GWS (vs. upstream)

HuntsDesk/ve-gws is a fork of taylorwilsdon/google_workspace_mcp that adds 28 tools in the gaps upstream doesn't cover โ€” mostly around authoring workflows (building presentations, rendering formatted docs, managing structured sheets).

Area

Additions

Slides

Create shapes + text boxes ยท set slide backgrounds ยท reorder slides ยท duplicate slides ยท read/write speaker notes ยท style shapes + text + paragraphs ยท delete elements

Docs

Insert native markdown (rendered, not as a code block) ยท insert person + file smart chips ยท read existing smart chips ยท find-and-replace ยท apply_continuous_numbering (convert plain-text "1. 2. 3." into a real numbered list that continues across intervening prompts and sub-bullets โ€” idempotent)

Sheets

Data validation rules ยท named ranges ยท range protection ยท sheet tab management (add/rename/delete/reorder)

Drive

Recursive folder copy ยท list revision history ยท restore prior revisions

Some feature ideas ported from blakesplay/apollo, which was itself based on piotr-agier/google-drive-mcp. See the Available Tools tables below โ€” additions are tagged Extended or Complete.

Quality: 822 tests pass (803 upstream + 19 new). Upstream commits from Taylor's repo are merged in periodically โ€” see Pulling Upstream Changes.

ve-* family: Companion to HuntsDesk/ve-kit (Vibe Coding Framework & Persistent Memory for Claude Code โ€” task board, process gates, Docker autonomous worker). VE-GWS is the Google Workspace MCP piece of that toolchain โ€” install standalone or alongside. See the intro at the top of this README for the community invite.


See it in action:


Related MCP server: google-suite-mcp

Overview

Workspace MCP is the single most complete MCP server that integrates all major Google Workspace services with AI assistants. It supports both single-user operation and multi-user authentication via OAuth 2.1, making it a powerful backend for custom applications. Built with FastMCP for optimal performance, featuring advanced authentication handling, service caching, and streamlined development patterns. The entire toolset is available for CLI usage supporting both local and remote instances.

Simplified Setup: can use Google Desktop OAuth clients for local runs - no redirect URIs or port configuration needed!

Features

12 services  โ€”  Gmail ยท Drive ยท Calendar ยท Docs ยท Sheets ยท Slides ยท Forms ยท Chat ยท Apps Script ยท Tasks ยท Contacts ยท Search

๐Ÿ“ง Gmail โ€” Complete email management, end-to-end coverage ๐Ÿ“ Drive โ€” File operations with sharing, permissions, Office files, PDFs & images ๐Ÿ“… Calendar โ€” Full event management with advanced features ๐Ÿ“ Docs โ€” Deep, fine-grained editing, formatting & comments ๐Ÿ“Š Sheets โ€” Flexible cell management, formatting & conditional rules ๐Ÿ–ผ๏ธ Slides โ€” Presentation creation, updates & content manipulation ๐Ÿ“‹ Forms โ€” Creation, publish settings & response management ๐Ÿ’ฌ Chat โ€” Space management, messaging & reactions

โšก Apps Script โ€” Cross-application workflow automation  Projects ยท deployments ยท versions ยท execution ยท debugging

โœ… Tasks โ€” Task & list management with hierarchy ๐Ÿ‘ค Contacts โ€” People API with groups & batch operations ๐Ÿ” Custom Search โ€” Programmable Search Engine integration


๐Ÿ” Authentication & Security OAuth 2.0 & 2.1 ยท auto token refresh ยท multi-user bearer tokens ยท transport-aware callbacks ยท CORS proxy


Security & Compliance

For Security Teams

This server sends no data anywhere except Google's APIs, on behalf of the authenticated user, using your own OAuth client credentials. There is no telemetry, no usage reporting, no analytics, no license server, and no SaaS dependency. The entire data path is: your infrastructure โ†’ Google APIs.

  • Fully open source โ€” every line is auditable in this repo

  • Your OAuth client, your GCP project โ€” credentials never leave your environment

  • You control the scopes โ€” read-only, granular per-service permissions, or full access

  • You control the network โ€” deploy behind your reverse proxy, in your VPC, on your own terms

  • No third-party services โ€” no intermediary servers, no token relays, no hosted backends

  • Stateless mode โ€” zero disk writes for locked-down container environments

  • Sensitive path blocking โ€” .env, .ssh/, .aws/, and credential files are blocked regardless of configuration

Full dependency tree in pyproject.toml, pinned in uv.lock.

For Legal & Procurement

This project is MIT licensed โ€” not "open core," not "source available," not "free with a CLA." There is no dual licensing, no commercial tier gating features, and no contributor license agreement.

  • Use commercially without restriction โ€” build products, sell services, deploy internally

  • Fork, embed, redistribute โ€” MIT requires only attribution

  • No CLA โ€” contributions remain under MIT

  • No telemetry to disclose โ€” nothing to flag in a privacy review

  • No network effects โ€” the server never contacts any endpoint you didn't configure

  • Standard dependency licenses โ€” MIT, Apache 2.0, and BSD throughout the dependency chain; no copyleft, no AGPL

The license is 21 lines and says what it means.


Quick Start

Set credentials โ†’ pick a launch command โ†’ connect your client

๐Ÿ’ก New to Workspace MCP? Check out the Interactive Quick Start Guide โ†’ with step-by-step setup, screenshots, and troubleshooting tips!

Confidential Client Quick Start

# 1. Credentials
export GOOGLE_OAUTH_CLIENT_ID="..."
export GOOGLE_OAUTH_CLIENT_SECRET="..."

# 2. Launch โ€” pick a tier
uvx workspace-mcp --tool-tier core       # essential tools
uvx workspace-mcp --tool-tier extended   # core + management ops
uvx workspace-mcp --tool-tier complete   # everything

# Or cherry-pick services
uv run main.py --tools gmail drive calendar

Secretless / Public OAuth 2.1 (PKCE) Quick Start

# 1. Credentials
export MCP_ENABLE_OAUTH21=true
export GOOGLE_OAUTH_CLIENT_ID="..."
export WORKSPACE_MCP_PORT=8000
export GOOGLE_OAUTH_REDIRECT_URI="http://localhost:${WORKSPACE_MCP_PORT}/oauth2callback"
export OAUTHLIB_INSECURE_TRANSPORT=1
# Leave GOOGLE_OAUTH_CLIENT_SECRET unset for public PKCE clients
export FASTMCP_SERVER_AUTH_GOOGLE_JWT_SIGNING_KEY="$(openssl rand -hex 32)"

# 2. Launch โ€” OAuth 2.1 requires HTTP transport
uvx workspace-mcp --transport streamable-http --tool-tier core
uvx workspace-mcp --transport streamable-http --tool-tier extended
uvx workspace-mcp --transport streamable-http --tool-tier complete

# Or cherry-pick services
uv run main.py --transport streamable-http --tools gmail drive calendar

Credential setup โ†’ ยท All launch options โ†’ ยท Tier details โ†’

Variable

Purpose

๐Ÿ” Authentication

GOOGLE_OAUTH_CLIENT_ID

required

OAuth client ID from Google Cloud

GOOGLE_OAUTH_CLIENT_SECRET

OAuth client secret for confidential clients; optional for public OAuth 2.1 PKCE clients

OAUTHLIB_INSECURE_TRANSPORT

required*

Set to 1 for development โ€” allows http:// redirect

USER_GOOGLE_EMAIL

Default email for single-user auth

GOOGLE_CLIENT_SECRET_PATH

Custom path to client_secret.json

GOOGLE_MCP_CREDENTIALS_DIR

Credential directory โ€” default ~/.google_workspace_mcp/credentials

๐Ÿ–ฅ๏ธ Server

WORKSPACE_MCP_BASE_URI

Base server URI (no port) โ€” default http://localhost

WORKSPACE_MCP_PORT

Listening port โ€” default 8000

WORKSPACE_MCP_HOST

Bind host โ€” default 0.0.0.0

WORKSPACE_EXTERNAL_URL

External URL for reverse proxy setups

WORKSPACE_ATTACHMENT_DIR

Downloaded attachments dir โ€” default ~/.workspace-mcp/attachments/

WORKSPACE_MCP_URL

Remote MCP endpoint URL for CLI

ALLOWED_FILE_DIRS

Colon-separated allowlist for local file reads

๐Ÿ”‘ OAuth 2.1 & Multi-User

MCP_ENABLE_OAUTH21

true to enable OAuth 2.1 multi-user support

EXTERNAL_OAUTH21_PROVIDER

true for external OAuth flow with bearer tokens

WORKSPACE_MCP_STATELESS_MODE

true for stateless container-friendly operation

GOOGLE_OAUTH_REDIRECT_URI

Override OAuth callback URL โ€” default auto-constructed

OAUTH_CUSTOM_REDIRECT_URIS

Comma-separated additional redirect URIs

OAUTH_ALLOWED_ORIGINS

Comma-separated additional CORS origins

WORKSPACE_MCP_OAUTH_PROXY_STORAGE_BACKEND

memory, disk, or valkey โ€” see storage backends

FASTMCP_SERVER_AUTH_GOOGLE_JWT_SIGNING_KEY

Custom encryption key for OAuth proxy storage; required for public OAuth 2.1 clients when GOOGLE_OAUTH_CLIENT_SECRET is omitted

๐Ÿ”ง Service Account

GOOGLE_SERVICE_ACCOUNT_KEY_FILE

Path to service account JSON key file (domain-wide delegation)

GOOGLE_SERVICE_ACCOUNT_KEY_JSON

Inline service account JSON key (alternative to file)

๐Ÿ” Custom Search

GOOGLE_PSE_API_KEY

API key for Programmable Search Engine

GOOGLE_PSE_ENGINE_ID

Search Engine ID for PSE

*Required for development only. Claude Desktop stores credentials securely in the OS keychain โ€” set them once in the extension pane.


One-Click Claude Desktop Install

.dxt bundles server, deps & manifest โ€” download โ†’ double-click โ†’ done. No terminal, no JSON editing.

  1. Download the latest google_workspace_mcp.dxt from Releases

  2. Install โ€” double-click the file, Claude Desktop prompts to install

  3. Configure โ€” Settings โ†’ Extensions โ†’ Google Workspace MCP, paste your OAuth credentials

  4. Use it โ€” start a new Claude chat and call any Google Workspace tool


Prerequisites

Python 3.10+ ยท uv/uvx ยท Google Cloud Project with OAuth 2.0 credentials

Configuration

  1. Create Project โ€” Open Console โ†’ โ†’ Create new project

  2. Create OAuth Credentials โ€” APIs & Services โ†’ Credentials โ†’ Create Credentials โ†’ OAuth Client ID

    • Choose Desktop Application for a public PKCE client (no redirect URIs needed) or Web Application for a confidential client

    • Download and note your Client ID and, if issued, Client Secret

  3. Enable APIs โ€” APIs & Services โ†’ Library, then enable each service:

  4. Set Credentials โ€” see Environment Variable Reference above, or:

    export GOOGLE_OAUTH_CLIENT_ID="your-client-id"
    export GOOGLE_OAUTH_CLIENT_SECRET="your-secret"

    For public OAuth 2.1 PKCE clients, omit GOOGLE_OAUTH_CLIENT_SECRET and set FASTMCP_SERVER_AUTH_GOOGLE_JWT_SIGNING_KEY instead.

Full OAuth documentation โ†’ ยท Credential setup details โ†’

Google Custom Search Setup

1. Create Search Engine

programmablesearchengine.google.com
/controlpanel/create

โ†’ Configure sites or entire web
โ†’ Note your Engine ID (cx)

Open Control Panel โ†’

2. Get API Key

developers.google.com
/custom-search/v1/overview

โ†’ Create/select project
โ†’ Enable Custom Search API
โ†’ Create credentials (API Key)

Get API Key โ†’

3. Set Variables

export GOOGLE_PSE_API_KEY=\
  "your-api-key"
export GOOGLE_PSE_ENGINE_ID=\
  "your-engine-id"

Configure in environment

Complete Setup Process:

  1. Create Search Engine - Visit the Control Panel

    • Choose "Search the entire web" or specify sites

    • Copy the Search Engine ID (looks like: 017643444788157684527:6ivsjbpxpqw)

  2. Enable API & Get Key - Visit Google Developers Console

    • Enable "Custom Search API" in your project

    • Create credentials โ†’ API Key

    • Restrict key to Custom Search API (recommended)

  3. Configure Environment - Add to your shell or .env:

    export GOOGLE_PSE_API_KEY="AIzaSy..."
    export GOOGLE_PSE_ENGINE_ID="01764344478..."

โ‰ก Full Documentation โ†’

Start the Server

๐Ÿ“Œ Transport Mode Guidance: Use streamable HTTP mode (--transport streamable-http) for all modern MCP clients including Claude Code, VS Code MCP, and MCP Inspector. Stdio mode is only for clients with incomplete MCP specification support.

โ–ถ Legacy Mode

uv run main.py

โš ๏ธ Stdio mode (incomplete MCP clients only)

โ—† HTTP Mode (Recommended)

uv run main.py \
  --transport streamable-http

โœ… Full MCP spec compliance & OAuth 2.1

@ Single User

uv run main.py \
  --single-user

Simplified authentication โš ๏ธ Cannot be used with OAuth 2.1 mode

โ–ถ Selective Tool Loading

# Load specific services only
uv run main.py --tools gmail drive calendar
uv run main.py --tools sheets docs

# Combine with other flags
uv run main.py --single-user --tools gmail

๐Ÿ”’ Read-Only Mode

# Requests only read-only scopes & disables write tools
uv run main.py --read-only

# Combine with specific tools or tiers
uv run main.py --tools gmail drive --read-only
uv run main.py --tool-tier core --read-only

Read-only mode provides secure, restricted access by:

  • Requesting only *.readonly OAuth scopes (e.g., gmail.readonly, drive.readonly)

  • Automatically filtering out tools that require write permissions at startup

  • Allowing read operations: list, get, search, and export across all services

๐Ÿ” Granular Permissions

# Per-service permission levels
uv run main.py --permissions gmail:organize drive:readonly

# Combine permissions with tier filtering
uv run main.py --permissions gmail:send drive:full --tool-tier core

Granular permissions mode provides service-by-service scope control:

  • Format: service:level (one entry per service)

  • Gmail levels: readonly, organize, drafts, send, full (cumulative)

  • Tasks levels: readonly, manage, full (cumulative; manage allows create/update/move but denies delete and clear_completed)

  • Other services currently support: readonly, full

  • --permissions and --read-only are mutually exclusive

  • --permissions cannot be combined with --tools; enabled services are determined by the --permissions entries (optionally filtered by --tool-tier)

  • With --tool-tier, only tier-matched tools are enabled and only services that have tools in the selected tier are imported

โ˜… Tool Tiers

uv run main.py --tool-tier core      # โ— Essential tools only
uv run main.py --tool-tier extended  # โ— Core + additional
uv run main.py --tool-tier complete  # โ—‹ All available tools

โ—† Docker Deployment

docker build -t workspace-mcp .
docker run -p 8000:8000 -v $(pwd):/app \
  workspace-mcp --transport streamable-http

# With tool selection via environment variables
docker run -e TOOL_TIER=core workspace-mcp
docker run -e TOOLS="gmail drive calendar" workspace-mcp

Available Services: gmail โ€ข drive โ€ข calendar โ€ข docs โ€ข sheets โ€ข forms โ€ข tasks โ€ข contacts โ€ข chat โ€ข search

CLI

The workspace-cli command lists tools and calls them against a running server โ€” with encrypted, disk-backed OAuth token caching so you only authenticate once. On first run it opens a browser for Google consent; subsequent runs reuse the cached tokens automatically.

Tokens are stored encrypted at ~/.workspace-mcp/cli-tokens/ using a Fernet key auto-generated at ~/.workspace-mcp/.cli-encryption-key.

โ–ถ List Tools

uv run workspace-cli list
uv run workspace-cli --url https://custom.server/mcp list

# Or, if installed globally:
workspace-cli list
workspace-cli --url https://custom.server/mcp list

View all available tools

โ—† Call a Tool

uv run workspace-cli call search_gmail_messages \
  query="is:unread" max_results=5

Execute a tool with key=value arguments

Set URL for remote endpoints with --url or the WORKSPACE_MCP_URL environment variable.

The upstream FastMCP CLI is also bundled and provides additional commands for schema inspection, client installation, and editor discovery. Note that fastmcp uses in-memory token storage, so each invocation may re-trigger the OAuth flow.

fastmcp inspect fastmcp_server.py                        # print tools, resources, prompts
fastmcp install claude-code fastmcp_server.py             # one-command client setup
fastmcp install cursor fastmcp_server.py
fastmcp discover                                          # find servers configured in editors

See fastmcp --help or the FastMCP CLI docs for the full command reference.

Tool Tiers

The server organizes tools into three progressive tiers for simplified deployment. Choose a tier that matches your usage needs and API quota requirements.

Available Tiers

โ— Core (--tool-tier core) Essential tools for everyday tasks. Perfect for light usage with minimal API quotas. Includes search, read, create, and basic modify operations across all services.

โ— Extended (--tool-tier extended) Core functionality plus management tools. Adds labels, folders, batch operations, and advanced search. Ideal for regular usage with moderate API needs.

โ— Complete (--tool-tier complete) Full API access including comments, headers/footers, publishing settings, and administrative functions. For power users needing maximum functionality.

Important Notes

โ–ถ Start with core and upgrade as needed โ–ถ Tiers are cumulative โ€“ each includes all previous โ–ถ Mix and match with --tools for specific services โ–ถ Configuration in core/tool_tiers.yaml โ–ถ Authentication included in all tiers

Usage Examples

# Basic tier selection
uv run main.py --tool-tier core                            # Start with essential tools only
uv run main.py --tool-tier extended                        # Expand to include management features
uv run main.py --tool-tier complete                        # Enable all available functionality

# Selective service loading with tiers
uv run main.py --tools gmail drive --tool-tier core        # Core tools for specific services
uv run main.py --tools gmail --tool-tier extended          # Extended Gmail functionality only
uv run main.py --tools docs sheets --tool-tier complete    # Full access to Docs and Sheets

# Combine tier selection with granular permission levels
uv run main.py --permissions gmail:organize drive:full --tool-tier core

๐Ÿ“‹ Credential Configuration

๐Ÿš€ Environment Variables

export GOOGLE_OAUTH_CLIENT_ID=\
  "your-client-id"
export GOOGLE_OAUTH_CLIENT_SECRET=\
  "your-secret"

Best for production

๐Ÿ“ File-based

# Download & place in project root
client_secret.json

# Or specify custom path
export GOOGLE_CLIENT_SECRET_PATH=\
  /path/to/secret.json

Traditional method

โšก .env File

cp .env.oauth21 .env
# Edit .env with credentials

Best for development

Loading Priority

  1. Environment variables (export VAR=value)

  2. .env file in project root (warning - if you run via uvx rather than uv run from the repo directory, you are spawning a standalone process not associated with your clone of the repo and it will not find your .env file without specifying it directly)

  3. client_secret.json via GOOGLE_CLIENT_SECRET_PATH

  4. Default client_secret.json in project root

Why Environment Variables?

  • โœ… Docker/K8s ready - Native container support

  • โœ… Cloud platforms - Heroku, Railway, Vercel

  • โœ… CI/CD pipelines - GitHub Actions, Jenkins

  • โœ… No secrets in git - Keep credentials secure

  • โœ… Easy rotation - Update without code changes


๐Ÿงฐ Available Tools

Note: All tools support automatic authentication via @require_google_service() decorators with 30-minute service caching.

๐Ÿ“– Looking for detailed parameters? Visit the Complete Documentation โ†’ for comprehensive tool reference, examples, and API guides!

๐Ÿ“… Google Calendar calendar_tools.py

Tool

Tier

Description

list_calendars

Core

List accessible calendars

get_events

Core

Retrieve events with time range filtering

manage_event

Core

Create, update, or delete calendar events

create_calendar

Extended

Create a new secondary Google Calendar

query_freebusy

Extended

Query free/busy information for calendars

manage_out_of_office

Extended

Create, list, update, or delete Out of Office events

manage_focus_time

Extended

Create, list, update, or delete Focus Time events

๐Ÿ“ Google Drive drive_tools.py

Tool

Tier

Description

search_drive_files

Core

Search files with query syntax

get_drive_file_content

Core

Read file content (Office, PDF, image)

get_drive_file_download_url

Core

Download Drive files to local disk

create_drive_file

Core

Create files or fetch from URLs

create_drive_folder

Core

Create empty folders in Drive or shared drives

import_to_google_doc

Core

Import files (MD, DOCX, HTML, etc.) as Google Docs

get_drive_shareable_link

Core

Get shareable links for a file

list_drive_items

Extended

List folder contents

copy_drive_file

Extended

Copy existing files (templates) with optional renaming

update_drive_file

Extended

Update file metadata, move between folders

manage_drive_access

Extended

Grant, update, revoke permissions, and transfer ownership

set_drive_file_permissions

Extended

Set link sharing and file-level sharing settings

get_drive_file_permissions

Complete

Get detailed file permissions

check_drive_file_public_access

Complete

Check public sharing status

copy_drive_folder

Complete

Recursively copy a folder tree (folders + files) to a new location

get_drive_revisions

Complete

List a file's revision history (modified time, user, size)

restore_drive_revision

Complete

Restore a binary file to a prior revision (native Docs/Sheets/Slides not supported โ€” use Docs UI)

๐Ÿ“ง Gmail gmail_tools.py

Tool

Tier

Description

search_gmail_messages

Core

Search with Gmail operators

get_gmail_message_content

Core

Retrieve message content

get_gmail_messages_content_batch

Core

Batch retrieve message content

send_gmail_message

Core

Send emails

get_gmail_thread_content

Extended

Get full thread content

modify_gmail_message_labels

Extended

Modify message labels

list_gmail_labels

Extended

List available labels

list_gmail_filters

Extended

List Gmail filters

manage_gmail_label

Extended

Create/update/delete labels

manage_gmail_filter

Extended

Create or delete Gmail filters

draft_gmail_message

Extended

Create drafts

get_gmail_threads_content_batch

Complete

Batch retrieve thread content

batch_modify_gmail_message_labels

Complete

Batch modify labels

start_google_auth

Complete

Legacy OAuth 2.0 auth (disabled when OAuth 2.1 is enabled)

Both send_gmail_message and draft_gmail_message support attachments via two methods:

Option 1: File Path (local server only)

attachments=[{"path": "/path/to/report.pdf"}]

Reads file from disk, auto-detects MIME type. Optional filename override.

Option 2: Base64 Content (works everywhere)

attachments=[{
    "filename": "report.pdf",
    "content": "JVBERi0xLjQK...",  # base64-encoded
    "mime_type": "application/pdf"   # optional
}]

โš ๏ธ Centrally Hosted Servers: When the MCP server runs remotely (cloud, shared instance), it cannot access your local filesystem. Use Option 2 with base64-encoded content. Your MCP client must encode files before sending.

When downloading Gmail attachments (get_gmail_attachment_content) or Drive files (get_drive_file_download_url), files are saved to a persistent local directory rather than a temporary folder in the working directory.

Default location: ~/.workspace-mcp/attachments/

Files are saved with their original filename plus a short UUID suffix for uniqueness (e.g., invoice_a1b2c3d4.pdf). In stdio mode, the tool returns the absolute file path for direct filesystem access. In HTTP mode, it returns a download URL via the /attachments/{file_id} endpoint.

To customize the storage directory:

export WORKSPACE_ATTACHMENT_DIR="/path/to/custom/dir"

Saved files expire after 1 hour and are cleaned up automatically.

๐Ÿ“ Google Docs docs_tools.py

Tool

Tier

Description

get_doc_content

Core

Extract document text

create_doc

Core

Create new documents (set format_as_markdown=True to render markdown content natively)

modify_doc_text

Core

Insert, replace, and richly format text with tab/segment targeting, append-to-segment support, advanced typography, link management, and native markdown rendering (format_as_markdown=True)

search_docs

Extended

Find documents by name

find_and_replace_doc

Extended

Find and replace text

list_docs_in_folder

Extended

List docs in folder

insert_doc_elements

Extended

Add tables, lists, page breaks

update_paragraph_style

Extended

Apply advanced paragraph styling including headings, spacing, direction, pagination controls, shading, and bulleted/numbered/checkbox lists with nesting

get_doc_as_markdown

Extended

Export document as formatted Markdown with optional comments

insert_doc_markdown

Extended

Insert markdown content with native Docs formatting (headings, bold/italic, bullets, numbered lists); supports tab/segment targeting and end-of-segment append

insert_doc_link

Extended

Insert clickable linked text at a specified index (tab-aware)

list_doc_tabs

Extended

List all tabs (and nested child tabs) with tab IDs, titles, indices, and nesting depth

insert_doc_image

Complete

Insert images from Drive/URLs

update_doc_headers_footers

Complete

Create or update headers and footers with correct segment-aware writes

batch_update_doc

Complete

Execute atomic multi-step Docs API operations including named ranges, section breaks, document/section layout, header/footer creation, segment-aware inserts, images, tables, and rich formatting

inspect_doc_structure

Complete

Analyze document structure, including safe insertion points, tables, section breaks, headers/footers, and named ranges

export_doc_to_pdf

Extended

Export document to PDF

create_table_with_data

Complete

Create data tables

debug_table_structure

Complete

Debug table issues

list_document_comments

Complete

List all document comments

manage_document_comment

Complete

Create, reply to, or resolve comments

insert_doc_person_chip

Complete

Insert an @mention person smart chip by email

insert_doc_file_chip

Complete

Insert a Drive file smart chip from its URL

get_doc_smart_chips

Complete

Extract all person and rich-link smart chips from the document

๐Ÿ“Š Google Sheets sheets_tools.py

Tool

Tier

Description

read_sheet_values

Core

Read cell ranges

modify_sheet_values

Core

Write/update/clear cells

create_spreadsheet

Core

Create new spreadsheets

list_spreadsheets

Extended

List accessible spreadsheets

get_spreadsheet_info

Extended

Get spreadsheet metadata

format_sheet_range

Extended

Apply colors, number formats, text wrapping, alignment, bold/italic, font size

list_sheet_tables

Extended

List structured tables with IDs, names, ranges, and columns

create_sheet

Complete

Add sheets to existing files

append_table_rows

Complete

Append rows to a structured table, auto-extending the table range

list_spreadsheet_comments

Complete

List all spreadsheet comments

manage_spreadsheet_comment

Complete

Create, reply to, or resolve comments

manage_conditional_formatting

Complete

Add, update, or delete conditional formatting rules

add_sheet_data_validation

Complete

Add dropdowns, number bounds, date/text rules, or custom-formula validation to a range

add_sheet_named_range

Complete

Create a named range that can be referenced by formulas

protect_sheet_range

Complete

Protect a range with optional editor whitelist and warning-only mode

manage_sheet_tabs

Complete

Rename, delete, or duplicate sheet tabs (single action-based tool)

๐Ÿ–ผ๏ธ Google Slides slides_tools.py

Tool

Tier

Description

create_presentation

Core

Create new presentations

get_presentation

Core

Retrieve presentation details

batch_update_presentation

Extended

Apply multiple updates

get_page

Extended

Get specific slide information

get_page_thumbnail

Extended

Generate slide thumbnails

format_slides_text

Extended

Apply text formatting (bold/italic/underline/strikethrough/color/font/size) to a slide element

format_all_slides_text

Extended

Apply text formatting to EVERY text element on a slide, or across the whole presentation in one call

format_slides_paragraph

Extended

Apply paragraph alignment, line spacing, spacing above/below, and bullet presets

style_slides_shape

Extended

Style a shape's fill color, outline color/weight, and dash style

set_slides_background

Extended

Set the background color of a slide

create_slides_text_box

Extended

Create a positioned text box with initial text and optional formatting

create_slides_shape

Extended

Create a positioned shape (rectangle, ellipse, triangle, star, arrow, etc.)

get_slides_speaker_notes

Extended

Read speaker notes from a slide

update_slides_speaker_notes

Extended

Replace speaker notes on a slide

insert_slides_image

Extended

Insert an image onto a slide from a public URL

delete_slides_element

Extended

Delete a slide or any page element by object ID

replace_slides_text

Extended

Find and replace text across an entire presentation

duplicate_slide

Extended

Duplicate a slide (or any object) and return the new object ID

reorder_slides

Extended

Move one or more slides to a new position

list_presentation_comments

Complete

List all presentation comments

manage_presentation_comment

Complete

Create, reply to, or resolve comments

๐Ÿ“‹ Google Forms forms_tools.py

Tool

Tier

Description

create_form

Core

Create new forms

get_form

Core

Retrieve form details & URLs

set_publish_settings

Complete

Configure form settings

get_form_response

Complete

Get individual responses

list_form_responses

Extended

List all responses with pagination

batch_update_form

Complete

Apply batch updates (questions, settings)

โœ“ Google Tasks tasks_tools.py

Tool

Tier

Description

list_tasks

Core

List tasks with filtering

get_task

Core

Retrieve task details

manage_task

Core

Create, update, delete, or move tasks

list_task_lists

Complete

List task lists

get_task_list

Complete

Get task list details

manage_task_list

Complete

Create, update, delete task lists, or clear completed tasks

๐Ÿ‘ค Google Contacts contacts_tools.py

Tool

Tier

Description

search_contacts

Core

Search contacts by name, email, phone

get_contact

Core

Retrieve detailed contact info

list_contacts

Core

List contacts with pagination

manage_contact

Core

Create, update, or delete contacts

list_contact_groups

Extended

List contact groups/labels

get_contact_group

Extended

Get group details with members

manage_contacts_batch

Complete

Batch create, update, or delete contacts

manage_contact_group

Complete

Create, update, delete groups, or modify membership

๐Ÿ’ฌ Google Chat chat_tools.py

Tool

Tier

Description

list_spaces

Extended

List chat spaces/rooms

get_messages

Core

Retrieve space messages

send_message

Core

Send messages to spaces

search_messages

Core

Search across chat history

create_reaction

Core

Add emoji reaction to a message

download_chat_attachment

Extended

Download attachment from a chat message

Tool

Tier

Description

search_custom

Core

Perform web searches (supports site restrictions via sites parameter)

get_search_engine_info

Complete

Retrieve search engine metadata

โšก Google Apps Script apps_script_tools.py

Tool

Tier

Description

list_script_projects

Core

List accessible Apps Script projects

get_script_project

Core

Get complete project with all files

get_script_content

Core

Retrieve specific file content

create_script_project

Core

Create new standalone or bound project

update_script_content

Core

Update or create script files

run_script_function

Core

Execute function with parameters

list_deployments

Extended

List all project deployments

manage_deployment

Extended

Create, update, or delete script deployments

list_script_processes

Extended

View recent executions and status

Tool Tier Legend: โ— Core โ€” Essential tools for basic functionality ยท Minimal API usage ยท Getting started โ— Extended โ€” Core + additional features ยท Regular usage ยท Expanded capabilities โ— Complete โ€” All available tools including advanced features ยท Power users ยท Full API access


Connect to Claude Desktop

The server supports two transport modes:

Stdio Mode (Legacy - For Clients with Incomplete MCP Support)

โš ๏ธ Important: Stdio mode is a legacy fallback for clients that don't properly implement the MCP specification with OAuth 2.1 and streamable HTTP support. Claude Code and other modern MCP clients should use streamable HTTP mode (--transport streamable-http) for proper OAuth flow and multi-user support.

In general, you should use the one-click DXT installer package for Claude Desktop. If you are unable to for some reason, you can configure it manually via claude_desktop_config.json

Manual Claude Configuration (Alternative)

  1. Open Claude Desktop Settings โ†’ Developer โ†’ Edit Config

    • macOS: ~/Library/Application Support/Claude/claude_desktop_config.json

    • Windows: %APPDATA%\Claude\claude_desktop_config.json

  2. Add the server configuration:

{
  "mcpServers": {
    "google_workspace": {
      "command": "uvx",
      "args": ["workspace-mcp"],
      "env": {
        "GOOGLE_OAUTH_CLIENT_ID": "your-client-id",
        "GOOGLE_OAUTH_CLIENT_SECRET": "your-secret",
        "OAUTHLIB_INSECURE_TRANSPORT": "1"
      }
    }
  }
}

Connect to LM Studio

Add a new MCP server in LM Studio (Settings โ†’ MCP Servers) using the same JSON format:

{
  "mcpServers": {
    "google_workspace": {
      "command": "uvx",
      "args": ["workspace-mcp"],
      "env": {
        "GOOGLE_OAUTH_CLIENT_ID": "your-client-id",
        "GOOGLE_OAUTH_CLIENT_SECRET": "your-secret",
        "OAUTHLIB_INSECURE_TRANSPORT": "1",
      }
    }
  }
}

2. Advanced / Cross-Platform Installation

If youโ€™re developing, deploying to servers, or using another MCP-capable client, keep reading.

Instant CLI (uvx)

# Requires Python 3.10+ and uvx
# First, set credentials (see Credential Configuration above)
uvx workspace-mcp --tool-tier core  # or --tools gmail drive calendar

Note: Configure OAuth credentials before running. Supports environment variables, .env file, or client_secret.json.

Local Development Setup

# Install everything needed for linting, tests, and release tooling
uv sync --group dev

# Run the same linter that git hooks invoke automatically
uv run ruff check .

# Execute the full test suite (async fixtures require pytest-asyncio)
uv run pytest
  • uv sync --group test installs only the testing stack if you need a slimmer environment.

  • uv run main.py --transport streamable-http launches the server with your checked-out code for manual verification.

  • Ruff is part of the dev group because pre-push hooks call ruff check automaticallyโ€”run it locally before committing to avoid hook failures.

OAuth 2.1 Support (Multi-User Bearer Token Authentication)

The server includes OAuth 2.1 support for bearer token authentication, enabling multi-user session management. OAuth 2.1 automatically reuses your existing GOOGLE_OAUTH_CLIENT_ID and, for confidential clients, GOOGLE_OAUTH_CLIENT_SECRET credentials - no additional Google-side configuration needed. Public PKCE clients are also supported: if you omit GOOGLE_OAUTH_CLIENT_SECRET, set FASTMCP_SERVER_AUTH_GOOGLE_JWT_SIGNING_KEY explicitly.

When to use OAuth 2.1:

  • Multiple users accessing the same MCP server instance

  • Need for bearer token authentication instead of passing user emails

  • Building web applications or APIs on top of the MCP server

  • Production environments requiring secure session management

  • Browser-based clients requiring CORS support

โš ๏ธ Important: Mutually exclusive authentication modes

OAuth 2.1 mode (MCP_ENABLE_OAUTH21=true) cannot be used together with --single-user or service account mode:

  • Single-user mode: For legacy clients that pass user emails in tool calls

  • OAuth 2.1 mode: For modern multi-user scenarios with bearer token authentication

  • Service account mode: For headless/server-to-server use via domain-wide delegation

Choose one authentication method - combining incompatible modes will result in a startup error.

Enabling OAuth 2.1: To enable OAuth 2.1, set the MCP_ENABLE_OAUTH21 environment variable to true.

# OAuth 2.1 requires HTTP transport mode
export MCP_ENABLE_OAUTH21=true
uv run main.py --transport streamable-http

If MCP_ENABLE_OAUTH21 is not set to true, the server will use legacy authentication, which is suitable for clients that do not support OAuth 2.1.

FastMCP ships a native GoogleProvider that we now rely on directly. It solves the two tricky parts of using Google OAuth with MCP clients:

  1. Dynamic Client Registration: Google still doesn't support OAuth 2.1 DCR, but the FastMCP provider exposes the full DCR surface and forwards registrations to Google using your fixed credentials. MCP clients register as usual and the provider hands them your Google client ID and, when configured, client secret under the hood.

  2. CORS & Browser Compatibility: The provider includes an OAuth proxy that serves all discovery, authorization, and token endpoints with proper CORS headers. We no longer maintain custom /oauth2/* routesโ€”the provider handles the upstream exchanges securely and advertises the correct metadata to clients.

The result is a leaner server that still enables any OAuth 2.1 compliant client (including browser-based ones) to authenticate through Google without bespoke code.

Stateless Mode (Container-Friendly)

The server supports a stateless mode designed for containerized environments where file system writes should be avoided:

Enabling Stateless Mode:

# Stateless mode requires OAuth 2.1 to be enabled
export MCP_ENABLE_OAUTH21=true
export WORKSPACE_MCP_STATELESS_MODE=true
uv run main.py --transport streamable-http

Key Features:

  • No file system writes: Credentials are never written to disk

  • No debug logs: File-based logging is completely disabled

  • Memory-only sessions: All tokens stored in memory via OAuth 2.1 session store

  • Container-ready: Perfect for Docker, Kubernetes, and serverless deployments

  • Token per request: Each request must include a valid Bearer token

Requirements:

  • Must be used with MCP_ENABLE_OAUTH21=true

  • Incompatible with single-user mode

  • Clients must handle OAuth flow and send valid tokens with each request

This mode is ideal for:

  • Cloud deployments where persistent storage is unavailable

  • Multi-tenant environments requiring strict isolation

  • Containerized applications with read-only filesystems

  • Serverless functions and ephemeral compute environments

MCP Inspector: No additional configuration needed with desktop OAuth client.

Claude Code: No additional configuration needed with desktop OAuth client.

OAuth Proxy Storage Backends

The server supports pluggable storage backends for OAuth proxy state management via FastMCP 2.13.0+. Choose a backend based on your deployment needs.

Available Backends:

Backend

Best For

Persistence

Multi-Server

Memory

Development, testing

โŒ

โŒ

Disk

Single-server production

โœ…

โŒ

Valkey/Redis

Distributed production

โœ…

โœ…

Configuration:

# Memory storage (fast, no persistence)
export WORKSPACE_MCP_OAUTH_PROXY_STORAGE_BACKEND=memory

# Disk storage (persists across restarts)
export WORKSPACE_MCP_OAUTH_PROXY_STORAGE_BACKEND=disk
export WORKSPACE_MCP_OAUTH_PROXY_DISK_DIRECTORY=~/.fastmcp/oauth-proxy

# Valkey/Redis storage (distributed, multi-server)
export WORKSPACE_MCP_OAUTH_PROXY_STORAGE_BACKEND=valkey
export WORKSPACE_MCP_OAUTH_PROXY_VALKEY_HOST=redis.example.com
export WORKSPACE_MCP_OAUTH_PROXY_VALKEY_PORT=6379

Disk support requires workspace-mcp[disk] (or py-key-value-aio[disk]) when installing from source. The official Docker image includes the disk extra by default. Valkey support is optional. Install workspace-mcp[valkey] (or py-key-value-aio[valkey]) only if you enable the Valkey backend. Windows: building valkey-glide from source requires MSVC C++ build tools with C11 support. If you see aws-lc-sys C11 errors, set CFLAGS=/std:c11.

Variable

Default

Description

WORKSPACE_MCP_OAUTH_PROXY_VALKEY_HOST

localhost

Valkey/Redis host

WORKSPACE_MCP_OAUTH_PROXY_VALKEY_PORT

6379

Port (6380 auto-enables TLS)

WORKSPACE_MCP_OAUTH_PROXY_VALKEY_DB

0

Database number

WORKSPACE_MCP_OAUTH_PROXY_VALKEY_USE_TLS

auto

Enable TLS (auto if port 6380)

WORKSPACE_MCP_OAUTH_PROXY_VALKEY_USERNAME

-

Authentication username

WORKSPACE_MCP_OAUTH_PROXY_VALKEY_PASSWORD

-

Authentication password

WORKSPACE_MCP_OAUTH_PROXY_VALKEY_REQUEST_TIMEOUT_MS

5000

Request timeout for remote hosts

WORKSPACE_MCP_OAUTH_PROXY_VALKEY_CONNECTION_TIMEOUT_MS

10000

Connection timeout for remote hosts

Encryption: Disk and Valkey storage are encrypted with Fernet. The encryption key is derived from FASTMCP_SERVER_AUTH_GOOGLE_JWT_SIGNING_KEY if set, otherwise from GOOGLE_OAUTH_CLIENT_SECRET. Public OAuth 2.1 client setups without a client secret must set FASTMCP_SERVER_AUTH_GOOGLE_JWT_SIGNING_KEY.

External OAuth 2.1 Provider Mode

The server supports an external OAuth 2.1 provider mode for scenarios where authentication is handled by an external system. In this mode, the MCP server does not manage the OAuth flow itself but expects valid bearer tokens in the Authorization header of tool calls.

Enabling External OAuth 2.1 Provider Mode:

# External OAuth provider mode requires OAuth 2.1 to be enabled
export MCP_ENABLE_OAUTH21=true
export EXTERNAL_OAUTH21_PROVIDER=true
uv run main.py --transport streamable-http

How It Works:

  • Protocol-level auth enabled: All MCP requests (including initialize and tools/list) require a valid Bearer token, following the standard OAuth 2.1 flow. Unauthenticated requests receive a 401 with resource metadata pointing to Google's authorization server.

  • External OAuth flow: Your external system handles the OAuth flow and obtains Google access tokens (ya29.*)

  • Token validation: Server validates bearer tokens by calling Google's userinfo API

  • Multi-user support: Each request is authenticated independently based on its bearer token

  • Resource metadata discovery: The server serves /.well-known/oauth-protected-resource (RFC 9728) advertising Google as the authorization server and the required scopes

Key Features:

  • No local OAuth flow: Server does not provide /authorize, /token, or /register endpoints โ€” only resource metadata

  • Bearer token only: All authentication via Authorization: Bearer <token> headers

  • Stateless by design: Works seamlessly with WORKSPACE_MCP_STATELESS_MODE=true

  • External identity providers: Integrate with your existing authentication infrastructure

Requirements:

  • Must be used with MCP_ENABLE_OAUTH21=true

  • OAuth client ID still required for token validation; client secret is optional for public clients (GOOGLE_OAUTH_CLIENT_ID, optional GOOGLE_OAUTH_CLIENT_SECRET)

  • External system must obtain valid Google OAuth access tokens (ya29.*)

  • Each tool call request must include valid bearer token

Use Cases:

  • Integrating with existing authentication systems

  • Custom OAuth flows managed by your application

  • API gateways that handle authentication upstream

  • Multi-tenant SaaS applications with centralized auth

  • Mobile or web apps with their own OAuth implementation

Service Account Mode (Domain-Wide Delegation)

WARNING: This mode uses Google Workspace domain-wide delegation, which grants the service account the ability to impersonate any user in your domain for the configured scopes. This is powerful and dangerous โ€” do not use this unless you fully understand the security implications. A misconfigured service account with broad scopes can read, modify, and delete data across every user in your organization. Only use this in tightly controlled environments where you know exactly what you're doing.

Service account mode allows the server to authenticate using a Google Cloud service account with domain-wide delegation instead of interactive OAuth flows. The service account impersonates a single configured domain user for all API calls.

When to use service account mode:

  • Headless or unattended environments where no browser is available for OAuth consent

  • Server-to-server integrations that need to act on behalf of a specific domain user

  • CI/CD pipelines or automation scripts

  • Environments where you cannot or do not want to manage per-user OAuth tokens

Enabling Service Account Mode:

# Option 1: Key file on disk
export GOOGLE_SERVICE_ACCOUNT_KEY_FILE="/path/to/service-account-key.json"
export USER_GOOGLE_EMAIL="user@yourdomain.com"
uv run main.py

# Option 2: Inline JSON key (e.g., from a secret manager)
export GOOGLE_SERVICE_ACCOUNT_KEY_JSON='{"type":"service_account","project_id":"...","private_key":"...","client_email":"..."}'
export USER_GOOGLE_EMAIL="user@yourdomain.com"
uv run main.py

Prerequisites:

  1. A Google Cloud service account with a JSON key

  2. Domain-wide delegation enabled for the service account in your Google Workspace Admin Console (Security โ†’ API controls โ†’ Domain-wide delegation)

  3. The required OAuth scopes authorized for the service account's client ID in the Admin Console

  4. USER_GOOGLE_EMAIL set to the domain user the service account will impersonate

Incompatibilities:

  • Cannot be combined with --single-user mode

  • Cannot be combined with MCP_ENABLE_OAUTH21=true

  • Only one key source may be provided โ€” set either GOOGLE_SERVICE_ACCOUNT_KEY_FILE or GOOGLE_SERVICE_ACCOUNT_KEY_JSON, not both

Key Behaviors:

  • The OAuth callback server is not started (no interactive auth needed)

  • Credentials directory permission checks are skipped

  • All operations impersonate the configured USER_GOOGLE_EMAIL โ€” any email addresses supplied in tool calls (e.g., user_email parameters) are ignored. This differs from OAuth modes where each user authenticates separately.

  • The service account key is validated at startup (checks for required fields and correct type)

VS Code MCP Client Support

โœ… Recommended: VS Code MCP extension properly supports the full MCP specification. Always use HTTP transport mode for proper OAuth 2.1 authentication.

{
    "servers": {
        "google-workspace": {
            "url": "http://localhost:8000/mcp/",
            "type": "http"
        }
    }
}

Note: Make sure to start the server with --transport streamable-http when using VS Code MCP.

Claude Code MCP Client Support

โœ… Recommended: Claude Code is a modern MCP client that properly supports the full MCP specification. Always use HTTP transport mode with Claude Code for proper OAuth 2.1 authentication and multi-user support.

# Start the server in HTTP mode first
uv run main.py --transport streamable-http

# Then add to Claude Code
claude mcp add --transport http workspace-mcp http://localhost:8000/mcp

# Optional: install the bundled Claude skill for better Workspace tool routing
mkdir -p ~/.claude/skills
ln -s "$(pwd)/skills/managing-google-workspace" ~/.claude/skills/managing-google-workspace

Or copy skills/managing-google-workspace into ~/.claude/skills/managing-google-workspace if you prefer not to symlink it.

Reverse Proxy Setup

If you're running the MCP server behind a reverse proxy (nginx, Apache, Cloudflare, etc.), you have two configuration options:

Problem: When behind a reverse proxy, the server constructs OAuth URLs using internal ports (e.g., http://localhost:8000) but external clients need the public URL (e.g., https://your-domain.com).

Solution 1: Set WORKSPACE_EXTERNAL_URL for all OAuth endpoints:

# This configures all OAuth endpoints to use your external URL
export WORKSPACE_EXTERNAL_URL="https://your-domain.com"

Solution 2: Set GOOGLE_OAUTH_REDIRECT_URI for just the callback:

# This only overrides the OAuth callback URL
export GOOGLE_OAUTH_REDIRECT_URI="https://your-domain.com/oauth2callback"

You also have options for: | OAUTH_CUSTOM_REDIRECT_URIS (optional) | Comma-separated list of additional redirect URIs | | OAUTH_ALLOWED_ORIGINS (optional) | Comma-separated list of additional CORS origins |

Important:

  • Use WORKSPACE_EXTERNAL_URL when all OAuth endpoints should use the external URL (recommended for reverse proxy setups)

  • Use GOOGLE_OAUTH_REDIRECT_URI when you only need to override the callback URL

  • The redirect URI must exactly match what's configured in your Google Cloud Console

  • Your reverse proxy must forward OAuth-related requests (/oauth2callback, /oauth2/*, /.well-known/*) to the MCP server

# Configure credentials first (see Credential Configuration section)

# Start with specific tools only
uvx workspace-mcp --tools gmail drive calendar tasks

# Start with tool tiers (recommended for most users)
uvx workspace-mcp --tool-tier core      # Essential tools
uvx workspace-mcp --tool-tier extended  # Core + additional features
uvx workspace-mcp --tool-tier complete  # All tools

# Start in HTTP mode for debugging
uvx workspace-mcp --transport streamable-http

Requires Python 3.10+ and uvx. The package is available on PyPI.

Development Installation

For development or customization:

git clone https://github.com/taylorwilsdon/google_workspace_mcp.git
cd google_workspace_mcp
uv run main.py

Development Installation (For Contributors):

{
  "mcpServers": {
    "google_workspace": {
      "command": "uv",
      "args": [
        "run",
        "--directory",
        "/path/to/repo/google_workspace_mcp",
        "main.py"
      ],
      "env": {
        "GOOGLE_OAUTH_CLIENT_ID": "your-client-id",
        "GOOGLE_OAUTH_CLIENT_SECRET": "your-secret",
        "OAUTHLIB_INSECURE_TRANSPORT": "1"
      }
    }
  }
}

HTTP Mode (For debugging or web interfaces)

If you need to use HTTP mode with Claude Desktop:

{
  "mcpServers": {
    "google_workspace": {
      "command": "npx",
      "args": ["mcp-remote", "http://localhost:8000/mcp"]
    }
  }
}

Note: Make sure to start the server with --transport streamable-http when using HTTP mode.

First-Time Authentication

The server uses Google Desktop OAuth for simplified authentication:

  • No redirect URIs needed: Desktop OAuth clients handle authentication without complex callback URLs

  • Automatic flow: The server manages the entire OAuth process transparently

  • Transport-agnostic: Works seamlessly in both stdio and HTTP modes

When calling a tool:

  1. Server returns authorization URL

  2. Open URL in browser and authorize

  3. Google provides an authorization code

  4. Paste the code when prompted (or it's handled automatically)

  5. Server completes authentication and retries your request


๐Ÿ”„ Pulling Upstream Changes

VE-GWS tracks taylorwilsdon/google_workspace_mcp as an upstream remote so improvements from the original project can be merged in periodically.

# First time only โ€” add upstream (already configured in this repo's clones)
git remote add upstream https://github.com/taylorwilsdon/google_workspace_mcp.git

# Fetch upstream commits
git fetch upstream

# Merge upstream main into your current branch
git merge upstream/main

# Or rebase instead, if you prefer linear history
# git rebase upstream/main

# Push to your fork
git push origin main

Because VE-GWS adds 25 tools and modifies gslides/slides_tools.py, gdocs/docs_tools.py, gsheets/sheets_tools.py, gdrive/drive_tools.py, and core/tool_tiers.yaml, merges will occasionally produce conflicts in those files. Resolve by keeping both sides' changes and re-running the test suite (uv run pytest tests/) before pushing.


โ—† Development

Project Structure

google_workspace_mcp/
โ”œโ”€โ”€ auth/              # Authentication system with decorators
โ”œโ”€โ”€ core/              # MCP server and utilities
โ”œโ”€โ”€ g{service}/        # Service-specific tools
โ”œโ”€โ”€ main.py            # Server entry point
โ”œโ”€โ”€ client_secret.json # OAuth credentials (not committed)
โ””โ”€โ”€ pyproject.toml     # Dependencies

Adding New Tools

from auth.service_decorator import require_google_service

@require_google_service("drive", "drive_read")  # Service + scope group
async def your_new_tool(service, param1: str, param2: int = 10):
    """Tool description"""
    # service is automatically injected and cached
    result = service.files().list().execute()
    return result  # Return native Python objects

Architecture Highlights

  • Service Caching: 30-minute TTL reduces authentication overhead

  • Scope Management: Centralized in SCOPE_GROUPS for easy maintenance

  • Error Handling: Native exceptions instead of manual error construction

  • Multi-Service Support: @require_multiple_services() for complex tools

Credential Store System

The server includes an abstract credential store API and a default backend for managing Google OAuth credentials with support for multiple storage backends:

Features:

  • Abstract Interface: CredentialStore base class defines standard operations (get, store, delete, list users)

  • Local File Storage: LocalDirectoryCredentialStore implementation stores credentials as JSON files

  • Configurable Storage: Environment variable GOOGLE_MCP_CREDENTIALS_DIR sets storage location

  • Multi-User Support: Store and manage credentials for multiple Google accounts

  • Automatic Directory Creation: Storage directory is created automatically if it doesn't exist

Configuration:

# Optional: Set custom credentials directory
export GOOGLE_MCP_CREDENTIALS_DIR="/path/to/credentials"

# Default locations (if GOOGLE_MCP_CREDENTIALS_DIR not set):
# - ~/.google_workspace_mcp/credentials (if home directory accessible)
# - ./.credentials (fallback)

Usage Example:

from auth.credential_store import get_credential_store

# Get the global credential store instance
store = get_credential_store()

# Store credentials for a user
store.store_credential("user@example.com", credentials)

# Retrieve credentials
creds = store.get_credential("user@example.com")

# List all users with stored credentials
users = store.list_users()

The credential store automatically handles credential serialization, expiry parsing, and provides error handling for storage operations.


โŠ  Security

  • Prompt Injection: This MCP server has the capability to retrieve your email, calendar events and drive files. Those emails, events and files could potentially contain prompt injections - i.e. hidden white text that tells it to forward your emails to a different address. You should exercise caution and in general, only connect trusted data to an LLM!

  • Credentials: Never commit .env, client_secret.json or the .credentials/ directory to source control!

  • OAuth Callback: Uses http://localhost:8000/oauth2callback for development (requires OAUTHLIB_INSECURE_TRANSPORT=1)

  • Transport-Aware Callbacks: Stdio mode starts a minimal HTTP server only for OAuth, ensuring callbacks work in all modes

  • Production: Use HTTPS & OAuth 2.1 and configure accordingly

  • Scope Minimization: Tools request only necessary permissions

  • Local File Access Control: Tools that read local files (e.g., attachments, file:// uploads) are restricted to the user's home directory by default. Override this with the ALLOWED_FILE_DIRS environment variable:

    # Colon-separated list of directories (semicolon on Windows) from which local file reads are permitted
    export ALLOWED_FILE_DIRS="/home/user/documents:/data/shared"

    Regardless of the allowlist, access to sensitive paths (.env, .ssh/, .aws/, /etc/shadow, credential files, etc.) is always blocked.



โ‰ก License

MIT License - see LICENSE file for details.


Validations: MCP Badge

Available Tools

149 tools
add_sheet_data_validationA

Apply a data-validation rule to a range (dropdowns, bounds, formulas).

Side effects: replaces any existing validation on the range. For conditional formatting (color rules) use manage_conditional_formatting. For protecting cells from edits use protect_sheet_range. Requires the spreadsheets OAuth scope.

ParametersJSON Schema
NameRequiredDescriptionDefault
user_google_emailYesThe user's Google email address (authenticated account).
spreadsheet_idYesTarget spreadsheet ID.
range_nameYesA1 range, e.g. "Sheet1!A1:A10" or "A1:A10".
validation_typeYesONE_OF_LIST, NUMBER_BETWEEN, NUMBER_GREATER, NUMBER_LESS, NUMBER_EQ, TEXT_CONTAINS, TEXT_EQ, DATE_AFTER, DATE_BEFORE, DATE_ON_OR_AFTER, DATE_ON_OR_BEFORE, CUSTOM_FORMULA, or BOOLEAN.
valuesNoFor ONE_OF_LIST: allowed dropdown options. For NUMBER_BETWEEN: [min, max]. For single-value conditions: [value]. Ignored for BOOLEAN and CUSTOM_FORMULA.
custom_formulaNoFor CUSTOM_FORMULA only โ€” an expression returning TRUE to allow, e.g. "=A1>0" or "=REGEXMATCH(A1,"^\d+$")".
strictNoTrue rejects invalid input outright. False shows a warning but accepts the entry.
show_dropdownNoFor ONE_OF_LIST โ€” True (default) renders the dropdown arrow; False hides it while still enforcing the rule.
input_messageNoOptional help text shown when the cell is focused.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Discloses the key side effect: 'replaces any existing validation on the range.' Without annotations, this is critical. Could mention more edge cases or performance, but sufficient.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three concise sentences: first states purpose, second adds side effect, third provides alternatives and auth requirement. No unnecessary words, front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Covers purpose, side effect, alternatives, and auth. Output schema exists, so return values are handled. Minor gaps in edge-case behavior, but overall complete for usage.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so parameters are well-documented. The description adds only a high-level summary (dropdowns, bounds, formulas), not enhancing individual parameter meaning.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb 'Apply' and the resource 'data-validation rule to a range', with examples (dropdowns, bounds, formulas). It distinguishes itself from sibling tools like manage_conditional_formatting and protect_sheet_range.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly tells when to use this tool (for data validation) and when not (conditional formatting -> manage_conditional_formatting, cell protection -> protect_sheet_range). Also notes the required OAuth scope.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

add_sheet_named_rangeA

Define a named range that formulas and scripts can reference by name.

Creates a persistent alias for a range โ€” e.g., =SUM(TaxRate) instead of =SUM(Config!B2:B2). Named ranges show up in the Data > Named ranges sidebar and in formula autocomplete. Makes formulas more readable and lets you move the underlying cells without breaking references. To use the named range, write it bare in a formula (=TaxRate) โ€” no quotes, no sheet prefix.

Requires OAuth scope: https://www.googleapis.com/auth/spreadsheets (write).

ParametersJSON Schema
NameRequiredDescriptionDefault
user_google_emailYes
spreadsheet_idYesGoogle Sheets spreadsheet ID (from the URL after `/d/`).
nameYesIdentifier for the range. Must start with a letter or underscore; can contain letters, digits, underscores. No spaces or special characters. Cannot be the same as an A1 cell reference (e.g., `A1`, `B2` are rejected). Examples: `TaxRate`, `Q1_Revenue`, `_Config`.
range_nameYesA1-notation range being named. Sheet name required for multi-sheet workbooks, e.g., `"Sheet1!A1:B10"`, `"Config!B2"`. Single cells work (`Sheet1!B2`). Full-column/row refs (`Sheet1!A:A`, `Sheet1!1:1`) are accepted. Sheet names with spaces must be single-quoted: `"'My Sheet'!A1:B5"`.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.9/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden. It discloses the OAuth write scope, but does not mention potential side effects (e.g., overwriting existing named ranges with the same name, behavior on invalid range, or scope of effect beyond the spreadsheet). The description is adequate for a simple creation tool but could be more transparent about conflict resolution.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with the main purpose and provides examples in a well-structured manner. However, it is slightly verbose, including details like the Data > Named ranges sidebar and autocomplete behavior. Every sentence adds value, but some conciseness is sacrificed for thoroughness.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the presence of an output schema (as per context signals), the description need not explain return values. It covers the concept, usage in formulas, and OAuth requirement. However, it lacks information on error handling (e.g., duplicate name or invalid range) and does not reference any prerequisites beyond auth. Overall, it provides solid context but has minor gaps.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 75%, and the schema itself provides detailed descriptions for parameters like 'name' and 'range_name'. The tool description adds no new parameter semantics beyond the schema; it provides usage context (e.g., how to use named ranges in formulas) but does not elaborate on the parameters themselves. Hence, it meets the baseline for the given coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose: 'Define a named range that formulas and scripts can reference by name.' It provides specific examples and explains the benefit of readability and reference stability. This distinguishes it from sibling sheet tools like 'add_sheet_data_validation' or 'format_sheet_range'.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explains when to use the tool (to make formulas more readable, allow cell movement without breaking references) and notes the required OAuth scope. However, it does not explicitly mention when not to use it or compare to alternatives like direct A1 references. The context is clear but lacks exclusionary guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

append_table_rowsA

Append rows to a structured Sheets table, auto-extending its range.

Side effects: mutates the table โ€” new rows are added after the last existing row and the table range grows to include them. Values are typed automatically: bool โ†’ boolean, numeric โ†’ number, strings starting with "=" โ†’ formula, otherwise string. For plain range writes use modify_sheet_values. Requires the spreadsheets OAuth scope.

ParametersJSON Schema
NameRequiredDescriptionDefault
user_google_emailYesThe user's Google email address (authenticated account).
spreadsheet_idYesTarget spreadsheet ID.
table_idYesTable ID from list_sheet_tables (a numeric string; distinct from sheetId).
valuesYes2D list (each inner list = one row of cell values) or a JSON-encoded version of same. Column count should match the table.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden. It discloses key behaviors: mutation, auto-extending range, automatic type conversion (bool, number, formula), and OAuth scope requirement. It lacks explicit error conditions or idempotency, but covers essential traits well.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise with two short paragraphs. It front-loads the purpose and uses clear, non-redundant language. Every sentence adds value with no fluff.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool complexity (mutation with typing) and presence of an output schema, the description covers purpose, side effects, typing, alternatives, and auth scope. It omits error handling and return value details, but is largely complete for agent usage.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Input schema coverage is 100%, so baseline is 3. The description does not add significant meaning beyond the schema. It mentions auto-extending range related to values, but no additional parameter-level details.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states 'Append rows to a structured Sheets table, auto-extending its range.' It uses a specific verb+resource and explicitly distinguishes from the sibling tool modify_sheet_values for plain range writes.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides explicit guidance on when to use this tool (for structured table appends) and when not to (use modify_sheet_values for plain range writes). It also mentions prerequisites like table_id from list_sheet_tables.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

apply_continuous_numberingA

Convert plain-text "N. " step prefixes in a Google Doc (or specific tab) into a real numbered list whose numbering continues across intervening prompt paragraphs and sub-bullet lists. Idempotent โ€” safe to re-run on documents already processed.

ParametersJSON Schema
NameRequiredDescriptionDefault
user_google_emailYes
document_idYesGoogle Docs document ID.
tab_idNoOptional tab ID to scope the operation to a specific tab.
strip_plain_textNoIf True (default), strip the literal "N. " prefix text after applying numbered bullets. If False, leaves the text intact โ€” useful for debugging or when the prefix is intentional.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description bears full responsibility. It discloses the tool modifies the document (converts text to numbered lists) and states idempotency. However, it omits details about permissions required, effect on existing formatting, or behavior with non-standard prefixes.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single sentence plus an idempotency note, which is concise and front-loaded. It avoids unnecessary words but could be slightly more structured with separate sections for parameters and behavior.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool modifies documents and has an output schema (unspecified), the description provides enough context for basic usage but lacks details on handling edge cases like existing numbered lists, mixed content, or error scenarios. The mention of 'prompt paragraphs' and 'sub-bullet lists' adds useful specificity.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The description does not explain any parameters. The schema covers 75% of parameters with descriptions, but user_google_email lacks a description. The tool description adds no value beyond the schema, failing to clarify the required email parameter or the effect of strip_plain_text.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool converts plain-text 'N. ' step prefixes into a real numbered list with continuous numbering. It specifies the resource (Google Doc or specific tab) and distinguishes this from sibling tools like modify_doc_text or update_paragraph_style.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description notes idempotency and safety for re-running, providing some guidance. However, it does not explicitly state when to use this tool over alternatives (e.g., when to use apply_continuous_numbering vs modify_doc_text for list formatting).

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

batch_modify_gmail_message_labelsA

Add or remove labels on many Gmail messages in one API call.

Side effects: mutates label sets on every message in message_ids. Uses the Gmail batchModify endpoint (up to 1000 IDs per call โ€” Gmail's limit, not enforced here). For single messages use modify_gmail_message_labels. Requires the gmail.modify OAuth scope.

ParametersJSON Schema
NameRequiredDescriptionDefault
user_google_emailYesThe user's Google email address (authenticated account).
message_idsYesGmail message IDs from search_gmail_messages.
add_label_idsNoLabel IDs to add across all messages. Use system IDs ("INBOX", "TRASH", "UNREAD") or user label IDs from list_gmail_labels. Names do NOT work.
remove_label_idsNoLabel IDs to remove across all messages.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries full burden. It discloses that the tool mutates label sets on every message and notes the Gmail API limit not enforced. While it doesn't detail error handling or atomicity, it provides sufficient behavioral context for a mutation tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is three compact sentences: purpose, side effects and API detail, sibling tool and auth. Every sentence adds value with no redundancy or unnecessary information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the presence of an output schema, the description need not cover return values. It adequately covers purpose, behavioral traits, limits, alternatives, and auth. Minor gaps like error handling or batch size enforcement are acceptable for a batch tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Input schema has 100% coverage, with each parameter clearly described (e.g., message_ids from search, label IDs with system/user distinction). The description adds no additional parameter details beyond the schema, so baseline score applied.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description explicitly states the tool adds or removes labels on many Gmail messages, clearly defining the action and resource. It also distinguishes from the sibling tool by noting that single messages should use modify_gmail_message_labels.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides explicit guidance on when to use this tool (batch operations) and when not to (single messages, directing users to modify_gmail_message_labels). It also mentions the Gmail API limit of 1000 IDs and the required OAuth scope, helping agents select correctly.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

batch_update_docA

Executes multiple low-level document operations in a single atomic batch update.

For normal header/footer text, prefer update_doc_headers_footers. Only use create_header_footer here for advanced section-break layouts.

RECOMMENDED WORKFLOW FOR BUILDING DOCUMENTS:

To avoid index calculation errors, build documents in phases:

PHASE 1 - INSERT ALL CONTENT (use end_of_segment=true, no index math): Append text, section breaks, and page breaks sequentially. Each operation appends to the end of the body. No index needed. Example batch: [ {"type": "insert_text", "end_of_segment": true, "text": "Report Title\n"}, {"type": "insert_text", "end_of_segment": true, "text": "\nExecutive Summary\n"}, {"type": "insert_text", "end_of_segment": true, "text": "Revenue grew 15%.\n"}, {"type": "insert_section_break", "end_of_segment": true, "section_type": "NEXT_PAGE"}, {"type": "insert_text", "end_of_segment": true, "text": "Detailed Analysis\n"} ]

PHASE 2 - CREATE HEADERS/FOOTERS (if needed): For normal header/footer text, use update_doc_headers_footers (it auto-creates if missing and writes the content for you). Only include create_header_footer operations in a batch when you are intentionally managing advanced section-break-specific layouts.

ParametersJSON Schema
NameRequiredDescriptionDefault
user_google_emailYesUser's Google email address
document_idYesID of the document to update
operationsYesList of operation dicts. Each operation MUST have a 'type' field. All operations accept an optional 'tab_id' to target a specific tab.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden. It covers atomicity (single atomic batch), low-level nature, and includes caveats about index calculation errors and the workflow to avoid them. It does not explicitly state error handling or return values, but the presence of an output schema mitigates this. Overall, good transparency.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is relatively long but well-structured with clear sections (RECOMMENDED WORKFLOW, PHASE 1, etc.). It front-loads the purpose and then provides detailed guidelines. Every sentence adds value, though it could be slightly more concise.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the complexity of the tool (many operation types) and the presence of an output schema, the description is fairly complete. It covers main workflows, alternatives, and common pitfalls. It could include more on error handling or specific edge cases, but overall it's thorough.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so baseline is 3. The description adds value beyond the schema by explaining the recommended use of end_of_segment, the purpose of tab_id and segment_id, and the overall workflow. It provides context that helps the agent use parameters correctly.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states it executes multiple low-level document operations in a single atomic batch update. It specifies the verb (executes), resource (low-level document operations), and distinguishes from siblings by mentioning alternatives like update_doc_headers_footers.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides explicit guidance on when to use this tool and when to prefer alternatives. It says 'For normal header/footer text, prefer update_doc_headers_footers' and 'Only use create_header_footer here for advanced section-break layouts.' It also includes a recommended workflow for building documents in phases, which is highly actionable.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

batch_update_formA

Apply a batch of Forms API edit requests in one atomic call.

Primary way to modify a form after creation โ€” add/update/delete questions, reorder items, update info, toggle quiz mode, etc. All requests apply atomically: partial failure rolls the whole batch back. Use get_form first to discover existing itemIds/questionIds. For publish settings use set_publish_settings. Requires the forms OAuth scope.

ParametersJSON Schema
NameRequiredDescriptionDefault
user_google_emailYesThe user's Google email address (authenticated account).
form_idYesForm ID from the edit URL.
requestsYesList of Forms API request objects โ€” each has exactly one key: `createItem` (with item body + location.index), `updateItem` (item + updateMask), `deleteItem` (location index), `moveItem` (originalLocation + newLocation), `updateFormInfo` (info + updateMask), or `updateSettings` (settings + updateMask). See https://developers.google.com/forms/api/reference/rest/v1/forms/batchUpdate for full schemas.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Discloses atomicity (partial failure rolls back entire batch), requires forms OAuth scope, and implies destructive nature (modification). No annotations are provided, so the description carries the full burden. It could be improved by noting idempotency or rate limits, but it is adequate and accurate.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two compact paragraphs with no wasted words. The first sentence captures the core purpose. Details are organized logically: atomicity, usage order, alternatives, and auth scope.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the complexity of batch update (multiple request types, atomicity) and the presence of an output schema, the description covers all essential behavioral and contextual aspects: what it does, prerequisites, alternatives, scope requirements, and atomicity behavior. No significant gaps.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so baseline is 3. The description adds value by explaining that each request object must have exactly one key (createItem, updateItem, etc.) and provides a link to full schemas. It also clarifies form_id source (edit URL) and user_google_email (authenticated account), going beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states it applies a batch of Forms API edit requests atomically, listing specific operations (add/update/delete questions, reorder, update info, toggle quiz mode). It distinguishes itself from sibling tools like set_publish_settings and get_form by positioning itself as the primary way to modify a form after creation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly advises to use get_form first to discover existing itemIds/questionIds, and for publish settings to use set_publish_settings. This provides clear when-to-use and when-not-to-use guidance, with specific alternatives named.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

batch_update_presentationA

Apply a batch of Slides API edit requests in one atomic call.

This is the low-level escape hatch for anything not covered by the high-level helpers (create_slides_shape, create_slides_text_box, format_slides_text, duplicate_slide, reorder_slides, etc.). All requests in a single call apply atomically โ€” partial failure rolls back the whole batch. Requires the presentations OAuth scope.

ParametersJSON Schema
NameRequiredDescriptionDefault
user_google_emailYesThe user's Google email address (authenticated account).
presentation_idYesTarget presentation ID.
requestsYesList of Slides API request objects โ€” each has one key like "createSlide", "updateTextStyle", "deleteObject", "createShape", "insertText", "replaceAllText", etc. See https://developers.google.com/slides/api/reference/rest/v1/presentations/request for the full schema.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Despite no annotations, the description discloses atomic execution with rollback on partial failure and OAuth scope requirement. It could mention potential destructiveness, but the core behavioral traits are covered.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three concise sentences that front-load purpose, then add context and behavioral details. No unnecessary words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a low-level batch API, the description covers purpose, usage, atomicity, and authentication. The presence of an output schema likely covers return values, making this complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% with clear parameter descriptions. The description does not add additional meaning beyond the schema, earning baseline score.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool applies a batch of Slides API edit requests atomically. It explicitly contrasts with high-level helpers, distinguishing it as the low-level escape hatch.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly states when to use this tool (for operations not covered by high-level helpers) and notes atomicity and rollback behavior, providing clear guidelines.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

check_drive_file_public_accessA

Search by filename and report whether the file is publicly linked.

Quick helper for Google Docs embedding โ€” a file must have "Anyone with the link" access before insert_doc_image can render it. If multiple files match the name, checks the first. For a specific file use get_drive_file_permissions. Requires the drive.readonly OAuth scope.

ParametersJSON Schema
NameRequiredDescriptionDefault
user_google_emailYesThe user's Google email address (authenticated account).
file_nameYesExact display name (case-sensitive) as shown in Drive.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Discloses that it checks first match, requires drive.readonly scope, and is a helper for embedding. However, does not explicitly state output format or error behavior (e.g., if no file found). Still good for a simple tool with no annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Concise, well-structured with main action first, then context and alternatives. Every sentence adds value. No redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's simplicity and presence of an output schema, the description covers purpose, usage context, sibling differentiation, and OAuth requirement. It is self-contained and complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% so baseline is 3. Description adds context about filename search and multiple matches but does not elaborate on the email parameter. Sufficient overlap with schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Clear verb 'Search' and 'report' with specific resource 'whether file is publicly linked'. Differentiates from sibling 'get_drive_file_permissions' for specific files. Aligns with Google Docs embedding use case.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly states when to use (before insert_doc_image), limitation (checks first if multiple matches), and alternative for specific file (get_drive_file_permissions). Also mentions required OAuth scope.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

copy_drive_fileA

Duplicate a Drive file (including Google Docs/Sheets/Slides).

Side effects: creates a new owned-by-caller file; formatting and content are preserved. For folders use copy_drive_folder (deep copy). For Google Docs specifically this is the standard "duplicate from template" pattern โ€” copy, then edit via batch_update_doc. Requires the drive.file OAuth scope.

ParametersJSON Schema
NameRequiredDescriptionDefault
user_google_emailYesThe user's Google email address (authenticated account).
file_idYesDrive file ID of the source.
new_nameNoName for the copy. Defaults to "Copy of <original>".
parent_folder_idNoTarget folder ID. Default "root" (My Drive). Shared-drive folder IDs work.root

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations provided, so description bears full burden. It discloses side effects (creates new file owned by caller, preserves content/formatting) and required scope. Could be more specific about permission handling or limits, but sufficiently transparent for typical use.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Description is concise (three sentences) but packed with essential info: action, side effects, usage guidance, and scope. Front-loaded with verb and resource, no unnecessary words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given output schema exists (handles return values), description covers all key aspects: purpose, side effects, alternatives, and prerequisites. No gaps for effective tool invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so baseline is 3. Description adds minimal extra meaning beyond schema (e.g., default name pattern, parent folder default 'root'). No in-depth parameter elaboration.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('Duplicate a Drive file'), specifies the resource (Drive file including Google Docs/Sheets/Slides), and distinguishes from sibling tool 'copy_drive_folder' by explicitly mentioning folder handling.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides explicit when-to-use guidance: for folders, use copy_drive_folder; for Google Docs, describes a standard pattern (copy then edit). Also mentions required OAuth scope, giving clear instructions for invocation.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

copy_drive_folderA

Recursively copy a Drive folder (and all its contents) to a new location.

Walks the source folder tree, creating the same structure under the destination and copying every file. Sequential to avoid rate-limit errors.

ParametersJSON Schema
NameRequiredDescriptionDefault
user_google_emailYes
source_folder_idYesID of the folder to copy.
destination_parent_idNoParent folder ID where the new copy goes. "root" by default.root
new_folder_nameNoOptional name for the top-level copied folder. Defaults to "Copy of [original name]".

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.7/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries full burden. It discloses recursive copy and sequential processing to avoid rate-limit errors, but fails to mention permissions handling, overwrite behavior, or file size limits. This is adequate but has notable gaps.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences: the first succinctly defines the action, the second adds key details (tree walk, sequential). No redundant or unnecessary information. Perfectly front-loaded and concise.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity (4 params, no annotations, output schema exists), the description covers recursive nature and sequential processing but omits error handling, permission requirements, and what happens on naming conflicts. Sufficient but not fully comprehensive.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 75%, and the existing schema descriptions are clear. The tool description does not add extra meaning beyond the schema for parameters; e.g., 'user_google_email' lacks description in both. Baseline of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool recursively copies a Drive folder and all its contents to a new location. It explicitly mentions 'sequential' behavior to avoid rate-limit errors, distinguishing it from sibling tools like copy_drive_file (single file) and create_drive_folder (empty folder).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies the tool is for copying entire folder trees but does not explicitly state when to use it over alternatives like copy_drive_file for single files or create_drive_folder for empty folders. No when-not-to-use guidance is provided, which is a gap given the large list of sibling tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

create_calendarA

Create a new secondary calendar owned by the user.

Side effects: creates a new calendar and adds it to the user's calendar list. To add events use manage_event with the returned calendar_id. To share the calendar with others, use the Calendar web UI or ACL APIs (not exposed by this tool). Requires the full calendar OAuth scope.

ParametersJSON Schema
NameRequiredDescriptionDefault
user_google_emailYesThe user's Google email address (authenticated account).
summaryYesCalendar display name, e.g. "Client Meetings" or "Personal - Fitness".
descriptionNoOptional longer description shown in calendar settings.
timezoneNoIANA timezone string like "America/New_York" or "Europe/London". Defaults to the account's default timezone when omitted.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Discloses side effects (creates calendar, adds to list) and required OAuth scope. With no annotations, this is helpful, though it could mention limits or error handling.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Four short sentences, front-loaded with purpose, followed by side effects, guidance, and scope. No unnecessary words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no annotations, the description covers purpose, side effects, scope, and returns (implied calendar_id). Missing output schema details but adequate for a creation tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema already covers all parameters with detailed descriptions (100% coverage). The description adds no extra parameter-specific meaning beyond what schema provides.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description clearly states the tool creates a secondary calendar for the user, with specific verb and resource. It differentiates from siblings like list_calendars (listing) and manage_event (events).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly tells when to use this tool (creating a calendar) and when not to (use manage_event for events, web UI/ACL for sharing), providing clear alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

create_docA

Creates a new Google Doc and optionally inserts initial content.

After creation, the document body starts at index 1. A new empty doc has total length 2 (one section break at index 0, one newline at index 1).

To build a rich document after creation, use batch_update_doc with insert_text operations using end_of_segment=true to append content sequentially without calculating indices. Then call inspect_doc_structure to get exact positions before applying formatting in a separate batch call.

ParametersJSON Schema
NameRequiredDescriptionDefault
user_google_emailYesUser's Google email address
titleYesTitle of the new document
contentNoOptional initial content to insert.
format_as_markdownNoIf True, parses `content` as markdown and inserts it with native Docs formatting (headings, bold, italic, bullet/numbered/ checkbox lists). Supports `# H1`-`### H3`, `**bold**`, `*italic*`, `- bullets`, `1. numbered`, and `- [ ] checkbox` (also `- [x]`). Default False (insert as plain text).

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Details document body indexing (starts at 1, empty doc length 2), markdown parsing behavior, and sequential workflow. With no annotations, description effectively discloses structural and behavioral traits.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three paragraphs with no wasted sentences. Front-loaded with main purpose, then structural details, then workflow. Efficiently organized.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given output schema exists, description need not explain return values. Covers creation, structure, and complete workflow guidance with sibling tool references. Sufficient for an agent to use correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Input schema has 100% coverage, so baseline 3. Description adds marginal context about document indexing but largely restates schema info. No significant additional parameter detail.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Clearly states it creates a new Google Doc with optional initial content. Specifically names the resource and action, distinguishing it from siblings like batch_update_doc and insert_doc_markdown.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides explicit after-creation workflow: use batch_update_doc for rich content and inspect_doc_structure before formatting. Implicitly differentiates when to use this vs other tools, though no direct 'when not to use' statement.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

create_drive_fileA

Upload a file to Drive from content, a URL, or a local path.

Side effects: creates a new Drive file. To convert source files (Markdown, DOCX, etc.) into native Google Docs use import_to_google_doc instead. For a brand-new empty Google Doc/Sheet/Slide use create_doc/create_spreadsheet/create_presentation. Requires the drive.file OAuth scope.

ParametersJSON Schema
NameRequiredDescriptionDefault
user_google_emailYesThe user's Google email address (authenticated account).
file_nameYesName for the new Drive file (include the file extension for clarity, though the MIME type is authoritative).
contentNoText content for the new file. Mutually exclusive with fileUrl. Provide one of content or fileUrl.
folder_idNoParent folder ID. "root" = My Drive root; for shared drives pass a folder ID inside that drive. Default "root".root
mime_typeNoMIME type of the uploaded bytes. Default "text/plain". When fileUrl is used and the server responds with a Content-Type, it overrides this.text/plain
fileUrlNoSource URL โ€” supports file:// (local path), http://, and https://. When provided, the bytes are streamed into Drive. SSRF-protected with size limits.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations provided, so description carries full burden. It mentions side effects ('creates a new Drive file') and the required OAuth scope ('drive.file'), adding useful behavioral context beyond the schema.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Four sentences, front-loaded with core purpose. Each sentence adds distinct value: purpose, side effects, alternatives, and auth requirement. Minor redundancy but overall efficient.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Covers core action, alternatives, and auth requirement. With good schema coverage and output schema, description is nearly complete. Could mention mutual exclusivity of content and fileUrl, but schema already does.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so baseline is 3. Description only hints at parameters ('from content, a URL, or a local path') without adding significant meaning beyond the schema's detailed descriptions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool uploads a file to Drive from content, URL, or local path, and distinguishes itself from sibling tools like import_to_google_doc and create_doc for specific use cases.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly provides when to use alternatives: 'To convert source files... use import_to_google_doc instead. For a brand-new empty Google Doc/Sheet/Slide use create_doc/create_spreadsheet/create_presentation.' Also notes the required OAuth scope.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

create_drive_folderA

Create a new folder in Drive (or inside a shared drive).

Side effects: creates a folder owned by the authenticated user (or by the shared drive when parent_folder_id lives in one). To upload files into the new folder use create_drive_file with folder_id set to the returned ID. Requires the drive.file OAuth scope.

ParametersJSON Schema
NameRequiredDescriptionDefault
user_google_emailYesThe user's Google email address (authenticated account).
folder_nameYesDisplay name for the new folder. Forward slashes are treated as literal characters, not nesting.
parent_folder_idNoParent folder ID. "root" for My Drive root, or a folder ID within a shared drive for shared-drive folders.root

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations provided, but description discloses ownership side effects, relationship to create_drive_file, and OAuth scope requirement. Does not mention error conditions or rate limits, but sufficient for a creation tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three concise sentences, front-loaded with the primary action. Every sentence adds necessary context without redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Explains purpose, side effects, and next steps. Implies return value (ID) but does not detail the output schema. Slightly incomplete for a tool with output schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the description adds value by explaining ownership implications of parent_folder_id and clarifying that forward slashes in folder_name are literal. This goes beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states 'Create a new folder in Drive (or inside a shared drive)', specifying the verb and resource. It distinguishes from sibling tools like create_drive_file by mentioning folder creation and shared drive context.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Describes side effects (ownership) and explicitly directs to use create_drive_file for uploading files, indicating when to use this tool vs alternatives. Mentions required OAuth scope but lacks explicit 'when not to use' guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

create_formA

Create a new Google Form with title and optional description.

Side effects: creates a new empty form owned by the user. To add questions/items afterward use batch_update_form with createItem requests; inspect the form with get_form. Requires the forms OAuth scope.

ParametersJSON Schema
NameRequiredDescriptionDefault
user_google_emailYesThe user's Google email address (authenticated account).
titleYesForm title shown at the top of the form to respondents.
descriptionNoOptional subtitle text shown under the title.
document_titleNoOptional browser-tab/Drive title. Defaults to the form's `title` if omitted.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Discloses side effects (creates empty form owned by user) and required OAuth scope. With no annotations, the description carries the transparency burden and does it well, though it could mention failure modes or response structure.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three concise sentences: purpose, side effects/alternatives, and scope. No unnecessary words, well front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool is a creation action with an output schema, the description covers creation, side effects, follow-up steps, and authorization. Minor omission: does not explain that the created form is empty and requires additional calls, but that is implied by the batch_update_form reference.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so baseline is 3. The description only reiterates 'title and optional description' which is already in the schema. It does not add extra context for the user_google_email or document_title parameters.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states it creates a new Google Form with a title and optional description. It distinguishes itself from siblings like batch_update_form (modifies) and get_form (reads) by focusing on creation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly tells when to use this tool (to create a new form) and provides alternatives for adding items (batch_update_form) and inspecting (get_form). Also mentions required OAuth scope.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

create_presentationA

Create a new empty Google Slides presentation.

Side effects: creates a new Slides file owned by the user in My Drive root. The new deck contains one default blank slide. To add more slides use batch_update_presentation with createSlide; to duplicate an existing deck use copy_drive_file. Requires the presentations OAuth scope.

ParametersJSON Schema
NameRequiredDescriptionDefault
user_google_emailYesThe user's Google email address (authenticated account).
titleNoDisplay title for the new deck. Default "Untitled Presentation".Untitled Presentation

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Given no annotations, the description discloses side effects (creates file in My Drive root, contains one default slide) and the OAuth requirement, but omits details about the return value or persistent behavior beyond creation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Five short, front-loaded sentences efficiently convey purpose, side effects, alternatives, and requirements without redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Covers the essential context for creating a presentation, including differences from related tools and a prerequisite. The presence of an output schema reduces the need to explain return values.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the description adds no new semantic meaning beyond what the schema already provides for the two parameters.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('Create a new empty Google Slides presentation') with a specific verb and resource, differentiating it from siblings like 'copy_drive_file' and 'batch_update_presentation'.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly mentions when to use alternative tools ('To add more slides use batch_update_presentation with createSlide; to duplicate an existing deck use copy_drive_file') and the required OAuth scope.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

create_reactionA

Add an emoji reaction to a Chat message.

Side effects: creates a reaction visible to everyone in the space. Custom Workspace emoji are not supported here (Unicode only). For posting a new message use send_message. Requires the chat_write OAuth scope.

ParametersJSON Schema
NameRequiredDescriptionDefault
user_google_emailYesThe user's Google email address (authenticated account).
message_idYesMessage resource name ("spaces/<space>/messages/<msg>") from get_messages or search_messages.
emoji_unicodeYesSingle Unicode emoji character, e.g. "๐Ÿ‘" (thumbs up) or a literal emoji like a smiley.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations provided, so the description carries full burden. It discloses side effects ('creates a reaction visible to everyone'), limitations (Unicode only), and auth requirements. Could be more detailed about idempotency or response, but covers key behavioral aspects.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is four sentences, each serving a purpose: action, side effects, limitations/alternative, auth. No redundant information, efficiently front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given no annotations, the description covers purpose, usage guidelines, side effects, and limitations. An output schema exists, so return value details are not needed. The description is thorough enough for a typical create tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, but the description adds value by clarifying that 'emoji_unicode' must be a Unicode character and that custom emoji are not supported. This extra context helps the agent avoid invalid inputs.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states 'Add an emoji reaction to a Chat message' with a specific verb and resource. It distinguishes from sibling tools like 'send_message' by noting that it is for reactions, not posting new messages.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly says when not to use it (Custom Workspace emoji not supported), provides an alternative ('For posting a new message use send_message'), and specifies the required OAuth scope ('Requires the chat_write OAuth scope').

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

create_script_projectA

Create a new (standalone or container-bound) Apps Script project.

Side effects: creates a new Apps Script project in Drive. Pass a parent_id of a Sheet/Doc/Form/Slides file ID to create a bound script; omit for a standalone script. To add files afterwards use update_script_content. Requires the script.projects OAuth scope.

ParametersJSON Schema
NameRequiredDescriptionDefault
user_google_emailYesThe user's Google email address (authenticated account).
titleYesDisplay title for the new project.
parent_idNoOptional Drive ID of the container (Sheet/Doc/Form/ Slides) the script is bound to. Omit for a standalone project.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description discloses the side effect of creating a Drive project and the required OAuth scope. However, it omits details like project privacy, location, rate limits, or whether the user must be the owner. This is adequate but not rich.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Four concise sentences, front-loaded with the core purpose. Each sentence adds distinct information: purpose, side effects, parameter usage, and prerequisites. No redundancy or filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 3-parameter creation tool with an output schema, the description covers side effects, prerequisites, optional parameter guidance, and references a follow-up tool. It fully equips the agent to decide and invoke correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so baseline is 3. The description adds value by explicitly stating that omitting parent_id creates a standalone project, which complements the schema's description. It clarifies the decision point for using the optional parameter.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description starts with a clear verb-resource pair: "Create a new (standalone or container-bound) Apps Script project." It distinctly specifies the resource (Apps Script project) and differentiates from siblings like list_script_projects, update_script_content, and delete_script_project.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explains when to use the optional parent_id (bound script) versus omit (standalone), mentions the prerequisite OAuth scope, and directs to update_script_content for adding files. It lacks explicit 'when not to use' statements but provides adequate contextual guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

create_sheetA

Add a new tab (sheet) to an existing spreadsheet.

Side effects: appends a new tab at the end. To rename/reorder/delete tabs use manage_sheet_tabs. For a brand-new spreadsheet use create_spreadsheet. Requires the spreadsheets OAuth scope.

ParametersJSON Schema
NameRequiredDescriptionDefault
user_google_emailYesThe user's Google email address (authenticated account).
spreadsheet_idYesTarget spreadsheet ID.
sheet_nameYesDisplay name for the new tab. Must be unique within the spreadsheet.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden. It discloses the side effect ('appends a new tab at the end') and the OAuth requirement. However, it could also mention that the operation modifies the spreadsheet, which is implied but not explicit.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise with two targeted sentences plus a line about alternatives and auth. Every sentence adds value, no fluff, and the key action is front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the simplicity (3 required params, high schema coverage, output schema exists), the description covers purpose, side effects, auth, and alternatives sufficiently. No gaps remain for agent decision-making.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and each parameter has a good description. The tool description does not add extra meaning beyond the schema, as the uniqueness constraint for sheet_name is already in the schema. Baseline score is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action: 'Add a new tab (sheet) to an existing spreadsheet.' It uses a specific verb ('Add') and resource ('tab to spreadsheet'), effectively distinguishing from siblings like create_spreadsheet (new spreadsheet) and manage_sheet_tabs (rename/reorder/delete).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly provides alternatives: 'To rename/reorder/delete tabs use manage_sheet_tabs. For a brand-new spreadsheet use create_spreadsheet.' It also mentions the required OAuth scope, guiding proper usage.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

create_slides_shapeA

Create a new shape element (rectangle, ellipse, arrow, etc.) on a Google Slide.

Use this to build layouts programmatically โ€” callouts, diagrams, backgrounds. For a TEXT-focused box, use create_slides_text_box (simpler + auto-sized for text). For styling an EXISTING shape (outline, shadow, filled color), use style_slides_shape. To add text inside a shape after creation, use batch_update_presentation with insertText.

Requires OAuth scope: https://www.googleapis.com/auth/presentations (write). Creates exactly one shape per call. Returns the new shape's object ID so you can reference it in follow-up calls (inserting text, setting fill, etc.).

ParametersJSON Schema
NameRequiredDescriptionDefault
user_google_emailYes
presentation_idYesGoogle Slides presentation ID (from the URL after `/d/`).
page_object_idYesObject ID of the slide where the shape will be placed. Get it from `get_presentation.slides[].objectId` or `get_page`.
shape_typeYesShape enum from Google's API. Common values: `RECTANGLE`, `ROUND_RECTANGLE`, `ELLIPSE`, `TRIANGLE`, `RIGHT_TRIANGLE`, `DIAMOND`, `PENTAGON`, `HEXAGON`, `OCTAGON`, `PARALLELOGRAM`, `TRAPEZOID`, `STAR_5`, `STAR_6`, `STAR_8`, `STAR_12`, `STAR_16`, `STAR_24`, `STAR_32`, `ARROW_RIGHT`, `ARROW_LEFT`, `ARROW_UP`, `ARROW_DOWN`, `LEFT_RIGHT_ARROW`, `CLOUD`, `SUN`, `MOON`, `HEART`, `LIGHTNING_BOLT`, `SPEECH`, `CLOUD_CALLOUT`. Full list: https://developers.google.com/slides/api/reference/rest/v1/pages/pageElements#Type
leftNoX position (top-left corner) in EMUs (English Metric Units). Default `914400` EMU = 1 inch from the slide's left edge. Conversion: 1 inch = 914,400 EMU; 1 point = 12,700 EMU; 1 cm = 360,000 EMU.
topNoY position (top-left corner) in EMUs. Default `914400` = 1 inch down.
widthNoShape width in EMUs. Default `2000000` โ‰ˆ 2.19 inches.
heightNoShape height in EMUs. Default `2000000` โ‰ˆ 2.19 inches.
fill_colorNoOptional hex color for the shape interior, e.g., `#4285F4`. Accepts `#RRGGBB` or `RRGGBB`. Omit for the default transparent fill (shape renders as an outline only until you set a fill later).

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations provided, so description carries full burden. Details OAuth scope, creates exactly one shape per call, returns object ID, and explains transparent fill behavior. Could add more about error cases but sufficient.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Well-structured, front-loaded with purpose, bullet points for alternatives, and clear notes. Every sentence adds value without redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given complexity (9 params, 4 required) and presence of output schema, description covers behavior, usage, parameters, and return value. No gaps identified.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 89% (baseline 3). Description adds significant value: explains shape_type with common values and link, EMU units for position/size, and fill_color optionality. Exceeds baseline.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Clearly states it creates a shape element (rectangle, ellipse, etc.) on a Google Slide. Distinguishes from sibling tools like create_slides_text_box and style_slides_shape.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly says when to use (build layouts programmatically) and when not (use create_slides_text_box for text, style_slides_shape for styling). Also mentions follow-up actions like adding text via batch_update_presentation.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

create_slides_text_boxA

Add a text box to a slide with initial content and position.

Use this for text content; use create_slides_shape for geometric shapes (rectangles, callouts, arrows). To edit text inside an existing element use batch_update_presentation with insertText / deleteText. All positions are in EMU (English Metric Units): 914400 EMU = 1 inch, 12700 EMU = 1 point. Requires the presentations OAuth scope.

ParametersJSON Schema
NameRequiredDescriptionDefault
user_google_emailYesThe user's Google email address (authenticated account).
presentation_idYesTarget presentation ID.
page_object_idYesSlide objectId where the box is placed (from get_presentation.slides[].objectId).
textYesInitial text content for the box.
leftNoX offset from slide's left edge in EMU. Default 914400 (1 in).
topNoY offset from top in EMU. Default 914400 (1 in).
widthNoBox width in EMU. Default 3000000 (โ‰ˆ3.28 in).
heightNoBox height in EMU. Default 1000000 (โ‰ˆ1.09 in).
font_sizeNoFont size in points for the initial text.
boldNoTrue to bold the initial text.
italicNoTrue to italicize the initial text.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, description carries full burden. It discloses behavior (adds text box, positions in EMU, requires OAuth scope) but lacks details on potential side effects, error cases, or limits (e.g., max text length). Still, it covers key behavioral traits sufficiently.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Concise at 5 sentences, front-loaded with purpose and alternatives, then units and auth. Every sentence adds value with no redundancy or filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given 11 parameters, no annotations, and existing output schema, the description is fairly complete. It covers purpose, usage guidelines, units, and auth. Lacks details on behavior when optional parameters are omitted or output format, but schema and output schema compensate. Good overall.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% with descriptions for each parameter. Description adds context about EMU units and OAuth scope but does not enrich individual parameter meanings. Baseline of 3 is appropriate since schema already does the heavy lifting.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Clearly states 'Add a text box to a slide with initial content and position' and distinguishes from sibling tools (create_slides_shape for shapes, batch_update_presentation for editing existing text). The verb+resource combination is specific and unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly tells when to use this tool (for text content), and when to use alternatives (create_slides_shape for geometric shapes, batch_update_presentation for editing existing text). Provides clear context and exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

create_spreadsheetA

Create a brand-new empty Google Spreadsheet in My Drive.

Side effects: creates a new file owned by the authenticated user in My Drive root. To add tabs to an existing spreadsheet use create_sheet. To upload an existing .xlsx use create_drive_file or import_to_google_doc (for content) instead. Requires the spreadsheets OAuth scope.

ParametersJSON Schema
NameRequiredDescriptionDefault
user_google_emailYesThe user's Google email address (authenticated account).
titleYesDisplay title for the new spreadsheet.
sheet_namesNoInitial tab names. When omitted, one default tab is created ("Sheet1"). Example: ["Raw Data", "Summary", "Charts"].

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries full burden. It discloses side effects (creates new file owned by user in My Drive root) and auth requirement (spreadsheets OAuth scope). It doesn't describe return value, but output schema exists. Minor omission of whether creation is reversible or conflicts.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences plus side effect/alternatives, no wasted words. Front-loaded with purpose, then important context. Highly efficient.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given output schema exists, the description sufficiently covers purpose, side effects, alternatives, and auth. It doesn't explain return values but that's covered by schema. Lacks mention of what happens if file with same title exists, which could be added for completeness.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Input schema has 100% coverage with descriptions for all 3 parameters. The description adds no additional detail beyond schema, so baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states it creates a new empty Google Spreadsheet in My Drive with specific verb and resource. It distinguishes from siblings like create_sheet (adds tabs to existing), create_drive_file, and import_to_google_doc, providing precise differentiation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It provides clear context for when to use this tool vs alternatives (create_sheet for tabs, create_drive_file/import_to_google_doc for .xlsx uploads) and mentions required OAuth scope. However, it doesn't explicitly exclude all inappropriate uses, such as editing existing files.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

create_table_with_dataA

Creates a table and populates it with data in one reliable operation.

CRITICAL: YOU MUST CALL inspect_doc_structure FIRST TO GET THE INDEX!

MANDATORY WORKFLOW - DO THESE STEPS IN ORDER:

Step 1: ALWAYS call inspect_doc_structure first Step 2: Use the 'total_length' value from inspect_doc_structure as your index Step 3: Format data as 2D list: [["col1", "col2"], ["row1col1", "row1col2"]] Step 4: Call this function with the correct index and data

EXAMPLE DATA FORMAT: table_data = [ ["Header1", "Header2", "Header3"], # Row 0 - headers ["Data1", "Data2", "Data3"], # Row 1 - first data row ["Data4", "Data5", "Data6"] # Row 2 - second data row ]

CRITICAL INDEX REQUIREMENTS:

  • NEVER use index values like 1, 2, 10 without calling inspect_doc_structure first

  • ALWAYS get index from inspect_doc_structure 'total_length' field

  • Index must be a valid insertion point in the document

DATA FORMAT REQUIREMENTS:

  • Must be 2D list of strings only

  • Each inner list = one table row

  • All rows MUST have same number of columns

  • Use empty strings "" for empty cells, never None

  • Use debug_table_structure after creation to verify results

ParametersJSON Schema
NameRequiredDescriptionDefault
user_google_emailYesUser's Google email address
document_idYesID of the document to update
table_dataYes2D list of strings - EXACT format: [["col1", "col2"], ["row1col1", "row1col2"]]
indexYesDocument position (MANDATORY: get from inspect_doc_structure 'total_length')
bold_headersNoWhether to make first row bold (default: true)
tab_idNoOptional tab ID to create the table in a specific tab

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations provided, so description carries full burden. Discloses it creates and populates reliably, data format rules, and suggests verification. Does not detail potential failures or side effects, but sufficient.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Structured with steps and critical notes, front-loaded. Some redundancy (example repeats format requirements) but overall well-organized and helpful.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given complexity (6 params, output schema exists, no annotations), description is comprehensive. Includes workflow, data format, index criticality. Return values covered by output schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, but description adds value with data format example, index source requirement, and bold_headers default behavior. Provides meaning beyond schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Clearly states 'Creates a table and populates it with data' โ€“ specific verb and resource. Distinguishes from siblings like append_table_rows which appends to existing tables.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides explicit mandatory workflow (inspect_doc_structure first, use total_length as index) and data format requirements. Lacks explicit when-not-to-use or alternatives, but steps are clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

create_versionA

Create a new immutable version snapshot of an Apps Script project.

Side effects: freezes the current code into a new versionNumber. Versions cannot be edited or deleted. A deployment can then be pinned to this version via manage_deployment. To list versions use list_versions. Requires the full script.projects OAuth scope.

ParametersJSON Schema
NameRequiredDescriptionDefault
user_google_emailYesThe user's Google email address (authenticated account).
script_idYesTarget project ID.
descriptionNoOptional version note (e.g. release notes, ticket number).

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations exist, so description carries full burden. Describes side effects (freezes code, creates versionNumber), immutability (cannot edit/delete), required OAuth scope. Could mention return value, but output schema exists.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with clear action sentence, followed by essential side effects, constraints, and references. No redundant text.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Output schema exists, so return values are covered. Description addresses side effects, immutability, related tools, and auth scope. Lacks mention of prerequisite script project existence, but overall sufficient for a creation tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so parameters are fully documented in schema. Description adds contextual meaning but no extra parameter-specific details beyond schema. Baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description clearly uses verb 'create' with specific resource 'immutable version snapshot of an Apps Script project', distinguishing it from sibling tools like list_versions (listing) and manage_deployment (deployment management).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides context on when to use this tool (create a snapshot for deployment), and references alternatives: manage_deployment for pinning and list_versions for listing. Does not explicitly state prerequisites or exclusions, but adequate.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

debug_docs_runtime_infoB

Return runtime/source information for diagnosing stale MCP server instances.

This is a temporary diagnostic tool intended to verify which code checkout the running MCP server has loaded.

ParametersJSON Schema
NameRequiredDescriptionDefault
user_google_emailYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.3/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description must fully disclose behavioral traits. It only mentions returning runtime/source information but fails to specify if the operation is read-only, what permissions are needed, or any side effects. The temporary nature is noted but insufficient for a diagnostic tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description consists of two sentences that are clear and front-loaded. It is efficient but could potentially be more concise without losing meaning.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple tool with one parameter and an output schema, the description covers purpose and context but lacks details on what exactly is returned or how to interpret the output. The temporary nature is highlighted, but completeness is moderate.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters1/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has one required parameter with 0% coverage (no description). The tool description does not mention the parameter at all, failing to add context about the 'user_google_email' parameter's role or usage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool returns runtime/source information for diagnosing stale MCP server instances, with a specific verb and resource. It distinguishes itself from sibling tools as the only diagnostic tool focused on runtime verification.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly states its temporary diagnostic purpose and intent to verify which code checkout is loaded. However, it does not provide explicit when-not-to-use instructions or alternatives, though no sibling offers similar functionality.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

debug_table_structureA

ESSENTIAL DEBUGGING TOOL - Use this whenever tables don't work as expected.

USE THIS IMMEDIATELY WHEN:

  • Table population put data in wrong cells

  • You get "table not found" errors

  • Data appears concatenated in first cell

  • Need to understand existing table structure

  • Planning to use populate_existing_table

WHAT THIS SHOWS YOU:

  • Exact table dimensions (rows ร— columns)

  • Each cell's position coordinates (row,col)

  • Current content in each cell

  • Insertion indices for each cell

  • Table boundaries and ranges

HOW TO READ THE OUTPUT:

  • "dimensions": "2x3" = 2 rows, 3 columns

  • "position": "(0,0)" = first row, first column

  • "current_content": What's actually in each cell right now

  • "insertion_index": Where new text would be inserted in that cell

WORKFLOW INTEGRATION:

  1. After creating table โ†’ Use this to verify structure

  2. Before populating โ†’ Use this to plan your data format

  3. After population fails โ†’ Use this to see what went wrong

  4. When debugging โ†’ Compare your data array to actual table structure

ParametersJSON Schema
NameRequiredDescriptionDefault
user_google_emailYesUser's Google email address
document_idYesID of the document to inspect
table_indexNoWhich table to debug (0 = first table, 1 = second table, etc.)

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description fully covers behavioral aspects: it explains what the tool shows (dimensions, positions, content, insertion indices) and how to interpret the output, leaving no ambiguity about its non-destructive, read-only nature.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured with headings and bullet points, making it easy to scan. While slightly verbose, it front-loads key information and each section adds value, earning a high score.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description is fully complete for a debugging tool: it covers when to use, what to expect, how to read output, and integrates into workflow. Presence of output schema further ensures no gaps.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, and the description does not add significant new meaning beyond the schema's parameter descriptions. The baseline of 3 is appropriate because the schema already provides clear definitions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly identifies the tool as a debugging utility for tables, listing specific error scenarios and use cases. It distinguishes itself from sibling tools by being diagnostic rather than manipulative.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly states when to use the tool (immediately on table issues, after creation, before population, after failure) and references a sibling tool (populate_existing_table) for workflow context, providing clear usage boundaries.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

delete_doc_tabA

Delete a tab (and its entire sub-document) from a Google Doc.

Side effects: PERMANENTLY removes the tab and all its content โ€” UI-undo via Edit > Undo still works if the caller has the Doc open, but there is no API undo. To just rename a tab use update_doc_tab. Requires the documents OAuth scope.

ParametersJSON Schema
NameRequiredDescriptionDefault
user_google_emailYesThe user's Google email address (authenticated account).
document_idYesTarget document ID.
tab_idYesTab ID to delete. Get from list_doc_tabs or inspect_doc_structure.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description fully carries the burden. It discloses permanent removal, notes that UI undo works but no API undo, and states the required OAuth scope. This provides complete behavioral insight.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise at three sentences, front-loaded with the primary action, and every sentence adds value. There is no redundant or extraneous information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given that an output schema exists (not shown) and the tool is a destructive operation, the description covers side effects, prerequisites, and alternatives. It is complete for an agent to understand impact and requirements.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema already covers all three parameters with descriptions (100% coverage). The description adds value by explaining the source of tab_id ('Get from list_doc_tabs or inspect_doc_structure'), but does not significantly expand beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('Delete a tab') and the resource ('and its entire sub-document from a Google Doc'). It distinguishes from the sibling tool 'update_doc_tab' by noting that renaming is an alternative.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides explicit guidance by stating when to use this tool (permanent delete) and offers an alternative: 'To just rename a tab use update_doc_tab.' It also mentions that there is no API undo, which helps set expectations.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

delete_script_projectA

Permanently delete an Apps Script project (Drive-backed).

Side effects: PERMANENTLY deletes the script project via the Drive API (Apps Script projects are stored as Drive files). No undo via API โ€” Drive Trash may still allow restore for up to 30 days via the web UI. For disabling without deletion, remove deployments via manage_deployment instead. Requires the drive full OAuth scope.

ParametersJSON Schema
NameRequiredDescriptionDefault
user_google_emailYesThe user's Google email address (authenticated account).
script_idYesTarget Apps Script project ID (same as the Drive file ID).

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations provided, but description details permanence, Drive API usage, no API undo, web UI restore possibility, and OAuth scope. Thorough for a destructive tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Concise, front-loaded with purpose, then side effects, alternatives, requirements. Every sentence adds value, no waste.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given output schema exists and schema coverage is high, description covers key behavioral aspects: permanence, side effects, restore path, alternative, auth scope. Complete for decision-making.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so baseline is 3. Description does not add extra meaning beyond schema descriptions; it mentions the authenticated account and script ID implicitly.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states 'Permanently delete an Apps Script project' with specific verb and resource. It distinguishes from sibling like manage_deployment for disabling.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly says when to use (permanent deletion), when not (use manage_deployment for disabling), and provides OAuth scope requirement. Clear guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

delete_slides_elementA

Delete any object from a Google Slides presentation by its object ID.

Works on any deletable object: an entire slide, a shape, a text box, an image, a table, a chart, a video, a line, etc. Passing a slide's object ID removes the whole slide (and everything on it). Passing a page element's object ID removes only that element. Deletion is permanent via API โ€” use the Slides UI's undo if you need to recover.

Requires OAuth scope: https://www.googleapis.com/auth/presentations (write). Not idempotent: re-calling with the same ID after success returns an error because the object no longer exists.

ParametersJSON Schema
NameRequiredDescriptionDefault
user_google_emailYes
presentation_idYesGoogle Slides presentation ID (from the URL after `/d/`).
object_idYesObject ID of the slide or page element to delete. Get slide IDs from `get_presentation.slides[].objectId`. Get element IDs from `get_presentation.slides[].pageElements[].objectId` or from the return value of creator tools (`create_slides_shape`, `insert_slides_image`, etc.). Cannot delete master/layout pages.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Discloses key behaviors: permanence of deletion, use of Slides UI undo for recovery, non-idempotent nature ('re-calling with the same ID after success returns an error'), and required OAuth scope. No annotations provided, so the description carries full burden and does so thoroughly.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Description is concise (~100 words), front-loaded with the core action, followed by usage details, requirements, and warnings. Every sentence adds meaningful information without redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Covers all essential aspects: what it does, what it works on, permanence, idempotency, recovery options, and scope requirement. Existence of an output schema (not shown) likely complements return value information, but description itself is self-sufficient.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema covers 2 of 3 parameters with descriptions (presentation_id, object_id). The description adds value by explaining how to obtain object IDs from get_presentation or creator tools. However, user_google_email parameter is not described in either the schema or the description.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description explicitly states 'Delete any object from a Google Slides presentation by its object ID', clearly enumerating supported object types (slide, shape, text box, etc.). Distinct from sibling tools like duplicate_slide or batch_update_presentation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides clear context on what can be deleted and the effect of different object IDs, and includes a limitation ('Cannot delete master/layout pages'). However, it does not explicitly discuss when to use this tool versus alternatives like batch_update_presentation.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

download_chat_attachmentA

Download a Chat message attachment to disk or expose via URL.

Side effects: writes a file to the configured attachment storage (stdio mode) or publishes a 1-hour download URL (HTTP mode). In stateless mode, returns a base64 preview. Use get_messages to discover the message ID and per-message attachment indices. Requires the chat_read OAuth scope.

ParametersJSON Schema
NameRequiredDescriptionDefault
user_google_emailYesThe user's Google email address (authenticated account).
message_idYesMessage resource name ("spaces/<space>/messages/<msg>") from get_messages.
attachment_indexNo0-based index into the message's attachments list. Default 0 (first attachment).

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Details side effects across modes (stdio writes file, HTTP publishes URL, stateless returns base64 preview) with no annotations provided, fulfilling the behavioral disclosure burden.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Four concise sentences, front-loaded with purpose, no fluff.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema present, description covers prerequisites, side effects, and auth scope comprehensively, leaving no gaps.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, but description adds context like message_id format and attachment_index default, adding value beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb 'download' and the resource 'Chat message attachment', distinguishing it from sibling tools like get_messages and other file download tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly mentions using get_messages to discover message ID and attachment index, and the required OAuth scope. No explicit when-not-to-use but context is clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

draft_gmail_messageA

Creates a draft email in the user's Gmail account. Supports both new drafts and reply drafts with optional attachments. Supports Gmail's "Send As" feature to draft from configured alias addresses.

ParametersJSON Schema
NameRequiredDescriptionDefault
user_google_emailYesThe user's Google email address. Required for authentication.
subjectYesEmail subject.
bodyYesEmail body (plain text).
body_formatNoEmail body format. Use 'plain' for plaintext or 'html' for HTML content.plain
toNoOptional recipient email address.
ccNoOptional CC email address.
bccNoOptional BCC email address.
from_nameNoOptional sender display name (e.g., 'Peter Hartree'). If provided, the From header will be formatted as 'Name <email>'.
from_emailNoOptional 'Send As' alias email address. Must be configured in Gmail settings (Settings > Accounts > Send mail as). If not provided, uses the authenticated user's email.
thread_idNoOptional Gmail thread ID to reply within.
in_reply_toNoOptional RFC Message-ID of the message being replied to (e.g., '<message123@gmail.com>').
referencesNoOptional chain of Message-IDs for proper threading.
attachmentsNoOptional list of attachments. Each can have: 'url' (fetch from URL โ€” works with MCP attachment URLs from get_drive_file_download_url / get_gmail_attachment_content), OR 'path' (file path, auto-encodes), OR 'content' (standard base64, not urlsafe) + 'filename'. Optional 'mime_type' (auto-detected if not provided).
include_signatureNoWhether to append the Gmail signature from Settings > Signature when available. Defaults to true.
quote_originalNoWhether to include the original message as a quoted reply. Requires thread_id. Defaults to false.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.5/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries full burden. It discloses basic action and optional features but omits side effects, authentication details, rate limits, and return value behavior (though output schema exists).

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two succinct sentences front-loading the primary action and adding key features. No unnecessary words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given 15 parameters and high schema coverage, the description is complete enough for core purpose but lacks usage guidelines and behavioral transparency for a comprehensive evaluation. Sibling tools provide context.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so each parameter is already described. The description adds context for reply drafts and 'Send As', but does not significantly enhance understanding beyond schema. Baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states it creates a draft email in Gmail, supports new and reply drafts, attachments, and 'Send As' feature. It effectively distinguishes from sibling 'send_gmail_message' which sends immediately.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage for drafting, but does not explicitly state when to use vs alternatives like 'send_gmail_message'. No when-not or direct alternative mention.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

duplicate_slideA

Duplicate a slide (or any single page element) within a presentation.

Creates an exact copy โ€” same layout, content, text, styling, speaker notes (for slides). The duplicate is inserted immediately after the source in slide order. Returns the new object's ID so you can modify the copy independently. To move the duplicate to a different position, chain with reorder_slides. To copy a slide into a DIFFERENT presentation, use the Drive copy + batch-update pattern (not this tool).

Requires OAuth scope: https://www.googleapis.com/auth/presentations (write). Each call duplicates one object; to duplicate many, call in a loop.

ParametersJSON Schema
NameRequiredDescriptionDefault
user_google_emailYes
presentation_idYesGoogle Slides presentation ID (from the URL after `/d/`).
page_object_idYesObject ID of the slide OR page element to duplicate. Get slide IDs from `get_presentation.slides[].objectId`. Get element IDs from `slides[].pageElements[].objectId`. Duplicating a slide clones everything on it; duplicating a shape clones just that shape.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations, so description covers key behaviors: exact copy, insertion position, return of new ID, and required OAuth scope. Lacks mention of potential side effects like auto-save, but generally transparent.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Efficient 8-sentence structure, front-loaded with main purpose, each sentence adds distinct value. No redundant or vague language.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Covers core functionality, limitations, chaining, alternatives, and auth. Lacks error handling details, but overall sufficient for agent invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Adds meaning beyond schema: explains page_object_id can be slide or element with examples, and clarifies cloning behavior. Schema has 67% coverage; description fills gaps for the undocumented parameter and adds context for others.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Clearly states duplicate slide or page element within a presentation, specific verb and resource. Distinguishes from siblings like copy_drive_file and mentions chaining with reorder_slides.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly says when to use (exact copy, same presentation), when not to (different presentation), and provides alternatives. Also notes limitation of one object per call and loop for many.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

export_doc_to_pdfA

Export a Google Doc as PDF and save the PDF back into Drive.

Side effects: creates a new PDF file in Drive (separate file from the Doc โ€” the Doc itself is untouched). To download bytes without saving use get_drive_file_download_url with export_format="pdf". To convert the source to DOCX or other formats use get_drive_file_download_url. Requires both docs (read) and drive.file OAuth scopes.

ParametersJSON Schema
NameRequiredDescriptionDefault
user_google_emailYesThe user's Google email address (authenticated account).
document_idYesGoogle Doc ID (must be a native Doc โ€” .docx stored in Drive is rejected).
pdf_filenameNoName for the generated PDF. Defaults to "<original>_PDF.pdf". ".pdf" extension is auto-appended.
folder_idNoDrive folder to save the PDF into. Defaults to My Drive root.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden. It discloses the side effect of creating a new PDF file while leaving the original Doc untouched. It also mentions required scopes. However, it could mention rate limits or specific error conditions for non-native Docs.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise with three focused sentences: first states the core function, second covers side effects and alternatives, third lists requirements. No extraneous words, front-loaded with main action.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given that an output schema exists, the description need not detail return values. It adequately covers side effects, usage alternatives, and scopes. However, it might mention that the tool will fail if the document_id is not a native Doc, which is implied but not explicit.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so baseline is 3. The description adds value by noting that pdf_filename auto-appends '.pdf' and folder_id defaults to My Drive root. It also clarifies that document_id must be a native Doc, enriching the schema descriptions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's primary action: 'Export a Google Doc as PDF and save the PDF back into Drive.' It specifies the verb (export), resource (Google Doc), and outcome (save to Drive), distinguishing it from siblings that download bytes without saving.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly provides when-not-to-use guidance by directing to 'get_drive_file_download_url with export_format="pdf"' for downloading without saving, and for other export formats. Also mentions required OAuth scopes, which helps the agent understand prerequisites.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

find_and_replace_docA

Finds and replaces text throughout a Google Doc. No index calculation required.

This is the safest way to update specific text in a document because it does not require knowing any indices. Use this tool when you need to:

  • Replace placeholder text (e.g., {{TITLE}}) with real content

  • Update specific words or phrases throughout the document

  • Make targeted text changes without risk of index errors

For building documents from scratch, consider inserting text with unique placeholders via batch_update_doc, then using this tool to replace them.

ParametersJSON Schema
NameRequiredDescriptionDefault
user_google_emailYesUser's Google email address
document_idYesID of the document to update
find_textYesText to search for
replace_textYesText to replace with
match_caseNoWhether to match case exactly
tab_idNoOptional ID of the tab to target

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description discloses that it operates on the entire document without index calculation, and implies all occurrences are replaced. However, it does not explicitly confirm replacement behavior for multiple occurrences or edge cases.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured with clear paragraphs, front-loaded with the main action, and includes examples. It is concise but could be slightly shorter without losing clarity.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description covers purpose, safety, use cases, and alternatives adequately. It notes an output schema exists, so return value details are not required. Lacks explicit note about replacing all occurrences, but context is sufficient.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the schema documents all parameters. The description does not add new parameter meanings beyond the schema, but provides contextual usage examples.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool finds and replaces text throughout a Google Doc, distinguishes from siblings like batch_update_doc and modify_doc_text, and provides specific use cases (e.g., replacing placeholders).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly recommends this tool for safe text updates without indices, and advises using batch_update_doc for building documents from scratch, providing clear when-to-use guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

format_all_slides_textA

Bulk-apply character formatting to every text element on a slide or deck.

Walks the presentation, collects every page element containing text, and issues one updateTextStyle per element in a single batchUpdate. For a specific element use format_slides_text. For paragraph-level rules (alignment, spacing) use format_slides_paragraph. Requires the presentations OAuth scope.

ParametersJSON Schema
NameRequiredDescriptionDefault
user_google_emailYesThe user's Google email address (authenticated account).
presentation_idYesTarget presentation ID.
page_object_idNoSlide objectId to scope the restyle to that one slide. Omit to restyle every slide in the deck.
boldNoTrue to bold, False to unbold, None to leave unchanged.
italicNoSame semantics as bold.
underlineNoSame semantics as bold.
strikethroughNoSame semantics as bold.
font_familyNoFont family name, e.g. "Arial".
font_sizeNoFont size in points.
text_colorNoHex color like "#333333".

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Describes internal behavior: walks presentation, collects text elements, issues one updateTextStyle per element in a single batchUpdate. No annotations exist, so description fully carries the burden.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences, each valuable: purpose, internal mechanics, sibling differentiation, auth requirement. No unnecessary words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Covers batch behavior, sibling alternatives, OAuth scope. Output schema exists, so return values are documented. Complete for the tool's complexity.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Input schema has 100% description coverage, so baseline 3. Description does not add additional parameter meaning, but not required.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool bulk-applies character formatting to every text element on a slide or deck, distinguishing it from siblings format_slides_text and format_slides_paragraph.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly instructs when to use this tool vs alternatives: for a specific element use format_slides_text, for paragraph-level rules use format_slides_paragraph. Also mentions required OAuth scope.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

format_sheet_rangeA

Applies formatting to a range: colors, number formats, text wrapping, alignment, and text styling.

Colors accept hex strings (#RRGGBB). Number formats follow Sheets types (e.g., NUMBER, CURRENCY, DATE, PERCENT). If no sheet name is provided, the first sheet is used.

ParametersJSON Schema
NameRequiredDescriptionDefault
user_google_emailYesThe user's Google email address. Required.
spreadsheet_idYesThe ID of the spreadsheet. Required.
range_nameYesA1-style range (optionally with sheet name). Required.
background_colorNoHex background color (e.g., "#FFEECC").
text_colorNoHex text color (e.g., "#000000").
number_format_typeNoSheets number format type (e.g., "DATE").
number_format_patternNoCustom pattern for the number format.
wrap_strategyNoText wrap strategy - WRAP (wrap text within cell), CLIP (clip text at cell boundary), or OVERFLOW_CELL (allow text to overflow into adjacent empty cells).
horizontal_alignmentNoHorizontal text alignment - LEFT, CENTER, or RIGHT.
vertical_alignmentNoVertical text alignment - TOP, MIDDLE, or BOTTOM.
boldNoWhether to apply bold formatting.
italicNoWhether to apply italic formatting.
font_sizeNoFont size in points.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.6/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries full burden. It discusses color formats and number format types, but does not disclose key behavioral traits: whether formatting is incremental or resets unset properties, if the operation is reversible, or any permission/rate-limit requirements. This is insufficient for a formatting tool with 13 parameters.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is extremely concise: three sentences, no filler. It is front-loaded with the main purpose, then provides format-specific details, and ends with a practical usage note. Every sentence earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Despite having an output schema (not shown) and 13 parameters, the description lacks completeness. It does not explain interaction of multiple formatting properties, whether the operation is an update or replacement, or error scenarios. For a complex tool, more context is needed to ensure correct use.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so baseline is 3. The description adds value beyond schema: it clarifies that colors accept hex strings (#RRGGBB) and that number formats follow Sheets types (e.g., NUMBER, CURRENCY, DATE, PERCENT). It also notes the sheet name behavior for range_name. This enhances parameter understanding.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states it applies formatting to a range, listing specific categories (colors, number formats, text wrapping, alignment, text styling). It is a specific verb+resource that distinguishes this tool from siblings (which operate on other Google Workspace entities like Docs or Slides).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides implicit usage context (e.g., 'If no sheet name is provided, the first sheet is used') but does not explicitly state when to use this tool versus alternatives like 'modify_sheet_values' or 'manage_conditional_formatting'. No exclusions or alternative tool references are given.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

format_slides_paragraphA

Apply paragraph-level formatting (alignment, spacing, bullets) to text inside a shape, text box, or table cell on a Google Slide.

Use this for paragraph concerns โ€” alignment, line spacing, space above/below, bullet lists. For character-level styling (bold, font size, color), use format_slides_text instead. For styling the shape itself (fill, outline, shadow), use style_slides_shape.

Requires OAuth scope: https://www.googleapis.com/auth/presentations (write). Idempotent: re-running with the same values is safe. No rate limits beyond Google Slides API defaults (~300 req/min per user).

ParametersJSON Schema
NameRequiredDescriptionDefault
user_google_emailYes
presentation_idYesGoogle Slides presentation ID (from the URL after `/d/`).
page_element_idYesObject ID of the target shape/text box/table cell. Get it from `get_presentation` or `get_page`. Must be a text-bearing element; passing an image element will return a no-op error.
alignmentNoParagraph horizontal alignment. One of `START` (left), `CENTER`, `END` (right), `JUSTIFIED`. Omit to leave unchanged.
line_spacingNoLine spacing as percentage โ€” `100.0` = single-spaced, `115.0` = 1.15x (Google Docs default), `150.0` = 1.5x, `200.0` = double. Omit to leave unchanged.
space_aboveNoPoints of space above each paragraph (e.g., `12` for ~12pt gap). Omit to leave unchanged.
space_belowNoPoints of space below each paragraph. Omit to leave unchanged.
bullet_presetNoBullet list preset name from the Google Slides API, e.g., `BULLET_DISC_CIRCLE_SQUARE`, `BULLET_DIAMONDX_ARROW3D_SQUARE`, `NUMBERED_DIGIT_ALPHA_ROMAN`, `NUMBERED_UPPERALPHA_ALPHA_ROMAN`. Pass `NONE` (uppercase) to REMOVE existing bullets. Omit to leave bullet state unchanged.
start_indexNoOptional 0-based character offset within the element's text where formatting starts. When both start/end are omitted, formatting applies to ALL paragraphs in the element.
end_indexNoOptional 0-based character offset (exclusive) where formatting ends. Must be greater than start_index if both provided.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.9/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Given no annotations, description fully carries burden: discloses OAuth write scope, idempotent behavior, safe re-execution, rate limit context, and a specific error case (image element returns no-op). No contradictions.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three-sentence structure: purpose, guidelines, behavioral notes. No fluff, front-loaded with key info. Every sentence adds distinct value.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With output schema present, return values not needed. Description covers how to obtain page_element_id, scope requirements, error behavior, and parameter application scope (all paragraphs vs. range). Complete for a 10-param formatting tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is high (90%), but the description adds value by summarizing parameter groups (alignment, spacing, bullets) and clarifying 'Omit to leave unchanged' for each. Bullet preset examples add meaning beyond enum-less schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Clearly states verb+resource: 'Apply paragraph-level formatting (alignment, spacing, bullets) to text inside a shape, text box, or table cell on a Google Slide.' Explicitly distinguishes from siblings format_slides_text and style_slides_shape.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides explicit when-to-use (paragraph concerns) and when-not-to (character-level, shape styling) with specific alternative tool names. Also mentions idempotence and rate limits for safe usage.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

format_slides_textA

Apply character-level formatting to text inside a slide element.

Use this for inline styling (bold, italic, font, color); use format_slides_paragraph for alignment/spacing/bullets, and style_slides_shape for the shape outline/fill/shadow. For bulk re-style across every text element use format_all_slides_text. Requires the presentations OAuth scope.

ParametersJSON Schema
NameRequiredDescriptionDefault
user_google_emailYesThe user's Google email address (authenticated account).
presentation_idYesParent presentation ID (from the URL after /d/).
page_element_idYesobjectId of the text-bearing element (text box, shape, or placeholder) โ€” get from get_presentation or get_page.
boldNoTrue to bold, False to unbold, None to leave unchanged.
italicNoSame semantics as bold for italic.
underlineNoSame semantics as bold for underline.
strikethroughNoSame semantics as bold for strikethrough.
font_familyNoFont family name, e.g. "Arial", "Roboto", "Helvetica Neue".
font_sizeNoFont size in points, e.g. 14 or 24.5.
text_colorNoHex color like "#FF0000" or "#333333".
start_indexNo0-based character offset where formatting begins. Omit both indices to format ALL text in the element.
end_indexNo0-based character offset (exclusive) where formatting ends.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries full burden. It states the type of formatting applied but does not disclose potential side effects (e.g., whether formatting overwrites or merges with existing styles, behavior for invalid indices, or scope of changes). The parameter semantics in the schema are detailed, but the description could add more context on idempotency and error handling.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise (two sentences plus targeted alternatives), front-loaded with the core purpose, and every sentence earns its place. No redundant or filler content.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description covers purpose, usage guidelines, and parameter intent. It does not mention the return value, but an output schema exists (as per context), reducing the need. It could briefly note behavior for start/end indices (e.g., omitting indices formats all text). Overall, sufficiently complete for a straightforward formatting tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the baseline is 3. The description does not add additional meaning beyond listing the formatting attributes (bold, italic, etc.), which are already detailed in the schema. No extra semantics beyond what the schema provides.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool applies character-level formatting to text inside a slide element, with specific examples (bold, italic, font, color). It explicitly distinguishes from sibling tools format_slides_paragraph, style_slides_shape, and format_all_slides_text, leaving no ambiguity about its scope.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides explicit guidance on when to use this tool versus alternatives ('use format_slides_paragraph for alignment/spacing/bullets, and style_slides_shape for the shape outline/fill/shadow. For bulk re-style across every text element use format_all_slides_text'). It also mentions the required OAuth scope, helping the agent assess prerequisites.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

generate_trigger_codeA

Generates Apps Script code for creating triggers.

The Apps Script API cannot create triggers directly - they must be created from within Apps Script itself. This tool generates the code you need.

ParametersJSON Schema
NameRequiredDescriptionDefault
trigger_typeYesType of trigger. One of: - "time_minutes" (run every N minutes: 1, 5, 10, 15, 30) - "time_hours" (run every N hours: 1, 2, 4, 6, 8, 12) - "time_daily" (run daily at a specific hour: 0-23) - "time_weekly" (run weekly on a specific day) - "on_open" (simple trigger - runs when document opens) - "on_edit" (simple trigger - runs when user edits) - "on_form_submit" (runs when form is submitted) - "on_change" (runs when content changes)
function_nameYesThe function to run when trigger fires (e.g., "sendDailyReport")
scheduleNoSchedule details (depends on trigger_type): - For time_minutes: "1", "5", "10", "15", or "30" - For time_hours: "1", "2", "4", "6", "8", or "12" - For time_daily: hour as "0"-"23" (e.g., "9" for 9am) - For time_weekly: "MONDAY", "TUESDAY", etc. - For simple triggers (on_open, on_edit): not needed

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations exist, so the description carries the full burden. It explicitly states the tool generates code rather than performing the trigger creation, which is a key behavioral trait. While it doesn't detail output format or limitations, it sufficiently discloses the core non-obvious behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is only two sentences, with the first sentence stating the purpose and the second providing rationale. It is front-loaded and contains no unnecessary words, making it highly concise and well-structured.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool has an output schema (not shown) but the description implies the output is Apps Script code. It covers the essential 'why' and 'what' adequately for a simple code generation tool. Missing details about output format or example usage are minor gaps, keeping it from a 5.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has 100% description coverage for all 3 parameters, so the schema already provides detailed parameter semantics. The description does not add additional parameter information beyond context, warranting the baseline score of 3.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('generates') and the resource ('Apps Script code for creating triggers'). It distinguishes this tool from siblings by emphasizing that it generates code rather than performing direct API calls, which is unique among the listed sibling tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explains why this tool is needed: the API cannot create triggers directly, so code generation is required. This provides clear context for when to use it, though it does not explicitly list when not to use or mention alternatives, which would warrant a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_contactA

Fetch a single contact with all details (emails, phones, orgs, addresses).

Use this when you already have a contact ID from list_contacts or search_contacts and need the full record (including notes, addresses, multiple emails/phones). For creating/updating use manage_contact. Requires the contacts.readonly OAuth scope.

ParametersJSON Schema
NameRequiredDescriptionDefault
user_google_emailYesThe user's Google email address (authenticated account).
contact_idYesContact ID โ€” either the short form ("c1234567890") or the full resource name ("people/c1234567890"). The short form is auto-prefixed.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries full burden. It discloses the required OAuth scope (contacts.readonly), implying a read-only operation. While it does not detail side effects (none expected), it adequately conveys the tool's safe, non-destructive nature.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is four sentences, front-loaded with the core purpose. Every sentence adds value: purpose, usage context, alternative tool, and authentication requirement. No redundancy or filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given that an output schema exists, the description need not detail return values. It covers purpose, usage, alternatives, and authentication. For a simple fetch tool, the description is fully complete and leaves no ambiguity.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% with clear parameter descriptions. The description adds no new parameter information beyond what the schema provides, resulting in minimal added value. Baseline score of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description begins with 'Fetch a single contact with all details,' using a specific verb and resource. It lists included data fields (emails, phones, orgs, addresses) and distinguishes from sibling tools like list_contacts (which returns summaries) and manage_contact (for create/update).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicit guidance: 'Use this when you already have a contact ID from list_contacts or search_contacts and need the full record.' It also directs to manage_contact for creating/updating, providing clear when-to-use and when-not-to instructions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_contact_groupA

Fetch a contact group's details and list of member contact IDs.

Use get_contact on each returned member ID to fetch full member records. For managing group membership (add/remove contacts) use manage_contact_group. Requires the contacts.readonly OAuth scope.

ParametersJSON Schema
NameRequiredDescriptionDefault
user_google_emailYesThe user's Google email address (authenticated account).
group_idYesGroup ID โ€” short ("myContacts"/"starred"/"abc123") or full resource name ("contactGroups/abc123"). Auto-prefixed when short.
max_membersNoMax members to return. 1-1000. Default 100.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations provided, but description discloses read operation and required scope. No mention of rate limits or side effects, but not needed for simple read.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three focused sentences: purpose, usage, requirements. No wasted words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With output schema separate, description covers purpose, usage, sibling tools, and requirements comprehensively for a simple retrieval tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema has 100% coverage; description adds context on using member IDs with get_contact, reinforcing parameter use without redundancy.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Clearly states fetching contact group details and member IDs. Distinguishes from sibling tools get_contact and manage_contact_group.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly tells when to use get_contact for full records and manage_contact_group for membership changes. Also specifies required OAuth scope.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_doc_as_markdownA

Reads a Google Doc and returns it as clean Markdown with optional comment context.

Unlike get_doc_content which returns plain text, this tool preserves document formatting as Markdown: headings, bold/italic/strikethrough, links, code spans, ordered/unordered lists with nesting, and tables.

When comments are included (the default), each comment's anchor text โ€” the specific text the comment was attached to โ€” is preserved, giving full context for the discussion.

ParametersJSON Schema
NameRequiredDescriptionDefault
user_google_emailYesUser's Google email address
document_idYesID of the Google Doc (or full URL)
include_commentsNoWhether to include comments (default: True)
comment_modeNoHow to display comments: - "inline": Footnote-style references placed at the anchor text location (default) - "appendix": All comments grouped at the bottom with blockquoted anchor text - "none": No comments includedinline
include_resolvedNoWhether to include resolved comments (default: False)
suggestions_view_modeNoHow to render suggestions in the returned content: - "DEFAULT_FOR_CURRENT_ACCESS": Default based on user's access level - "SUGGESTIONS_INLINE": Suggested changes appear inline in the document - "PREVIEW_SUGGESTIONS_ACCEPTED": Preview as if all suggestions were accepted - "PREVIEW_WITHOUT_SUGGESTIONS": Preview as if all suggestions were rejectedDEFAULT_FOR_CURRENT_ACCESS

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries full burden. It discloses key behaviors: returns Markdown, includes comment anchor text by default, and comment mode options. However, it does not mention safety/read-only nature explicitly, potential errors, or rate limits, leaving some gaps for an agent.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise at about 6 sentences, well structured with the main action first, then distinct differences, followed by comment behavior. Every sentence adds value without repetition or waste.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's moderate complexity (6 parameters, output schema exists), the description covers the primary output format and comment handling. It does not explain the return value structure (handled by output schema) or error cases, but for a read tool, it is mostly complete. A minor gap is lack of explicit read-only guarantee.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the schema already documents all parameters in detail. The description adds context about comment anchor text but does not provide significant additional meaning beyond the schema for most parameters. Baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states it reads a Google Doc and returns it as clean Markdown with optional comment context. It explicitly distinguishes from the sibling tool get_doc_content which returns plain text, making the purpose highly specific and unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly differentiates from get_doc_content by noting this tool preserves formatting, providing clear guidance on when to use it. However, it does not address exclusions or other alternative tools (e.g., inspect_doc_structure, export_doc_to_pdf), though the main alternative is well covered.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_doc_contentA

Retrieve Doc body text (native Google Docs or Drive-stored .docx).

For native Google Docs uses the Docs API and walks tabs (including nested child tabs). For non-native Drive files (.docx, etc.) falls back to the Drive download + text extraction path. For markdown output use get_doc_as_markdown; for structural inspection (style, headings, objects) use inspect_doc_structure. Requires both drive.readonly and docs.readonly OAuth scopes.

ParametersJSON Schema
NameRequiredDescriptionDefault
user_google_emailYesThe user's Google email address (authenticated account).
document_idYesDoc ID or a full URL like docs.google.com/document/d/<id>/edit (either is accepted).
suggestions_view_modeNoHow tracked-changes are rendered: "DEFAULT_FOR_CURRENT_ACCESS" (default), "SUGGESTIONS_INLINE" (show suggestions inline), "PREVIEW_SUGGESTIONS_ACCEPTED" (render as if accepted), or "PREVIEW_WITHOUT_SUGGESTIONS" (render as if rejected).DEFAULT_FOR_CURRENT_ACCESS

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Describes internal behavior: uses Docs API for native docs and walks tabs; falls back to Drive download for .docx. Required scopes are listed. No annotations provided, so description carries full burden and does so well.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three concise sentences, front-loaded with purpose, then behavior and alternatives, then scopes. No unnecessary words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Covers purpose, behavior, alternatives, and scopes adequately for a content retrieval tool. With output schema present, no need to describe return values. Minor omission: no mention of error handling for missing documents.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% with good descriptions; description adds value by noting that document_id accepts full URLs, going beyond schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool retrieves Doc body text for both native Google Docs and .docx files, and distinguishes from siblings like get_doc_as_markdown and inspect_doc_structure.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly provides alternatives: 'For markdown output use get_doc_as_markdown; for structural inspection use inspect_doc_structure.' Also mentions required OAuth scopes, guiding appropriate use.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_doc_smart_chipsA

Extract every smart chip in a Google Doc โ€” person mentions and rich links.

Walks the document body, finds all person and richLink inline elements, and returns their type, character range, and key properties. Useful for auditing @mentions (who is referenced where), validating links to external resources, or building a chip inventory before batch-editing. Does NOT include inline hyperlinks that never upgraded to chips (use a direct text scan for those).

Requires OAuth scope: https://www.googleapis.com/auth/documents.readonly (or broader). Read-only โ€” safe to call repeatedly.

Scope note: This inspects the main document body only. Chips inside headers, footers, footnotes, or secondary tabs are not returned. Only chips that have been rendered/saved by the Docs client appear here โ€” chips inserted programmatically via insert_doc_person_chip or insert_doc_file_chip won't show up in this result until a user opens the doc in the Docs UI and Docs upgrades the raw linked text into a chip.

ParametersJSON Schema
NameRequiredDescriptionDefault
user_google_emailYes
document_idYesGoogle Docs document ID (from the URL after `/document/d/`).

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description fully discloses behavioral traits: it walks the document body, finds person and richLink elements, returns type/character range/key properties, requires OAuth scope, is read-only, safe to call repeatedly, and explains limitations (no headers/footers, only rendered chips). No contradictions with annotations (none).

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured: it starts with a clear purpose, then details extracted elements, limitations, auth, and a scope note. Each sentence adds value without redundancy. It is appropriately sized for the tool's complexity.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the presence of an output schema (implied), the description covers all necessary context: what is extracted, scope restrictions, auth requirements, and important notes about rendering. It is complete for an agent to decide when and how to use the tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 50% (only document_id has a description). The description does not add meaning for the user_google_email parameter beyond its name, which is fairly self-explanatory. However, the description adds value to the overall tool behavior, not the parameters. Given moderate coverage and clear parameter names, a score of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb 'extract' and the resource 'smart chips' with specific types (person mentions and rich links). It distinguishes from sibling tools like insert_doc_person_chip and insert_doc_file_chip by noting that programmatically inserted chips are not included, and contrasts with inline hyperlinks.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly lists use cases (auditing @mentions, validating links, building chip inventory) and explicitly states what it does NOT include, providing alternatives (direct text scan for hyperlinks, user opening doc in UI for programmatic chips). This gives clear guidance on when to use this tool versus other methods.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_drive_file_contentA

Download a Drive file and return its text (auto-extracting per type).

Use this when you need file text; for a URL to the raw bytes use get_drive_file_download_url, for metadata use get_file_metadata (in hosted clients) or list fields. Handles shared drives. Extraction: Google Docs/Sheets/Slides export to text/CSV; Office .docx/.xlsx/.pptx unzipped and parsed; PDFs extracted with pypdf (scanned PDFs fall back to a download hint); images returned as base64 for multimodal clients; other files decoded as UTF-8 or flagged binary. Requires the drive.readonly OAuth scope.

ParametersJSON Schema
NameRequiredDescriptionDefault
user_google_emailYesThe user's Google email address (authenticated account).
file_idYesDrive file ID from search_drive_files, list_drive_items, or the URL like drive.google.com/file/d/<id>/view.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description fully covers behavior: extraction details for each file type, fallback for scanned PDFs, and OAuth scope requirement. It is transparent about what the tool does without contradictions.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise and front-loaded, but the second paragraph is somewhat dense. It efficiently conveys extraction behavior without unnecessary fluff.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity and the presence of an output schema, the description covers all necessary aspects: extraction logic, fallbacks, OAuth requirement, and shared drive support. It is complete for agent decision-making.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% with parameter descriptions. The tool description does not add extra semantics beyond the schema (e.g., does not redefine or elaborate on parameters), so baseline of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states 'Download a Drive file and return its text (auto-extracting per type)', specifying the verb and resource. It distinguishes from sibling tools like get_drive_file_download_url and get_file_metadata by contrasting use cases.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly advises when to use this tool ('Use this when you need file text') and provides alternatives for URL and metadata. Also mentions handling shared drives, giving clear guidance on context.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_drive_file_download_urlA

Save a Drive file to disk (or expose a temporary URL).

Side effects: writes a file to the configured attachment storage (stdio mode) or publishes a download URL valid for 1 hour (HTTP mode). For file text content use get_drive_file_content instead; use this when you specifically need the binary file or an export. Google-native files are exported โ€” Docs โ†’ PDF or DOCX; Sheets โ†’ XLSX, PDF, or CSV; Slides โ†’ PDF or PPTX. Other files download as-is. Requires the drive.readonly OAuth scope.

ParametersJSON Schema
NameRequiredDescriptionDefault
user_google_emailYesThe user's Google email address (authenticated account).
file_idYesDrive file ID from search_drive_files or a URL like drive.google.com/file/d/<id>/view.
export_formatNoExport target for Google-native files. Docs: "pdf" (default) or "docx". Sheets: "xlsx" (default), "pdf", or "csv". Slides: "pdf" (default) or "pptx". Ignored for non-native files.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description fully covers behavioral traits: writes to storage or exposes a time-limited URL, exports Google-native files with specific formats, requires drive.readonly scope, and has side effects. It is transparent and does not contradict any annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise with front-loaded action, followed by side effects, comparison to sibling, export details, and auth requirement. Every sentence adds value without redundancy, making it efficient and easy to parse.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the presence of an output schema, the description adequately covers purpose, usage guidelines, side effects, auth requirements, export behavior, and differentiation from a sibling tool. It is complete for an agent to correctly select and invoke the tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Input schema coverage is 100% and includes detailed descriptions for all parameters (user_google_email, file_id, export_format). The description adds context about export behavior but does not provide new parameter-specific dimensions beyond the schema, so a score of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool saves a Drive file to disk or exposes a temporary URL, distinctly differentiating it from get_drive_file_content by noting it handles binary files and exports. The verb 'Save' and resource 'Drive file' are specific, and the differentiation from a sibling tool is explicit.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It explicitly directs to use get_drive_file_content for text content and advises using this tool when needing binary files or exports. It also describes behavior in stdio vs HTTP modes and export formats, providing clear when-to-use and when-not-to-use guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_drive_file_permissionsA

Inspect a Drive file's sharing permissions and public-link status.

Use this to audit who can access a file before sharing externally. To change sharing use set_drive_file_permissions or manage_drive_access. For a quick public-vs-private check by filename use check_drive_file_public_access. Requires the drive.readonly OAuth scope.

ParametersJSON Schema
NameRequiredDescriptionDefault
user_google_emailYesThe user's Google email address (authenticated account).
file_idYesDrive file ID from search_drive_files or a shareable URL.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations provided, so description carries full burden. Mentions 'requires the drive.readonly OAuth scope', implying read-only behavior. Could add more detail about what data is returned, but output schema exists. Good overall.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences, each with purpose: states action, provides usage guidance with alternatives, and lists scope requirement. No wasted words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the presence of an output schema and complete parameter descriptions, the description adds appropriate context: purpose, usage scenario, alternatives, and auth requirement. Fully sufficient for an agent to understand when and how to use the tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% with descriptive parameter names and descriptions. Description does not add new parameter details but reinforces usage context (file_id from search_drive_files or shareable URL). Meets baseline.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Clearly states it 'inspects' permissions and public-link status of a Drive file. Distinguishes from siblings like set_drive_file_permissions and check_drive_file_public_access by explicitly naming them for alternative actions.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly says 'Use this to audit who can access a file before sharing externally.' Provides clear alternatives: set_drive_file_permissions or manage_drive_access for changing, check_drive_file_public_access for quick check. Also mentions required OAuth scope.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_drive_revisionsA

List the revision history for a Drive file, newest first.

Returns each revision's ID, modification timestamp, last-modifying user (display name + email), size in bytes (when available), MIME type, and whether it's pinned via keepForever. Use this to discover revision IDs before calling restore_drive_revision, or to audit who changed what.

Requires OAuth scope: https://www.googleapis.com/auth/drive.readonly (or broader). Read-only.

Limitation: Google-native files (Docs, Sheets, Slides) expose revisions in the API list but their binary content is not retrievable โ€” only non-native files (PDF, DOCX, images, etc.) support content restore. By default, Drive retains up to 100 revisions or 30 days, whichever comes first, unless a revision is pinned (keepForever: true).

ParametersJSON Schema
NameRequiredDescriptionDefault
user_google_emailYes
file_idYesDrive file ID (from a file URL like `drive.google.com/file/d/<file_id>/view`, or from `search_drive_files`, or from `get_drive_file_metadata`).
page_sizeNoMaximum number of revisions to return. Clamped to `[1, 1000]`. Default `25`. No pagination token support in this tool โ€” if the file has more than `page_size` revisions, only the most recent are returned.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations provided, so description carries full burden. Discloses read-only nature via OAuth scope, limitations on content retrieval, retention policy, and default page_size behavior with no pagination token support. Adds significant transparency beyond structured fields.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Description is well-structured and informative at about 150 words. Every sentence adds value, no fluff. Could be slightly tighter but remains clear and front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a list tool with an output schema (not shown but referenced), the description provides complete context: purpose, parameters, behavioral traits, limitations, sibling reference, and security/scope info. No gaps identified.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 67% (2 of 3 params described). Description adds no additional parameter details beyond schema; however, schema descriptions for file_id and page_size are detailed. The missing user_google_email parameter is not addressed. Baseline 3 is appropriate since schema does most work but leaves a gap.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Clearly states it lists revision history for a Drive file, newest first, and lists specific return fields (ID, timestamp, user info, size, MIME type, pinned status). Distinguishes itself from sibling tool restore_drive_revision by stating its purpose is to discover revision IDs before calling that tool.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly states when to use it (discovering revision IDs before restore, auditing changes) and provides OAuth scope. Mentions limitations (Google-native files not restorable, retention policy). Missing explicit 'when not to use' but context makes it clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_eventsA

Fetch events from a calendar โ€” one by ID, or a filtered range.

Two modes: (1) pass event_id to retrieve a single event (range/query params ignored); (2) omit event_id to list events in a time window, optionally filtered by keyword. For free/busy scanning across many calendars use query_freebusy instead. For creating/updating events use manage_event. Requires the calendar.readonly OAuth scope.

ParametersJSON Schema
NameRequiredDescriptionDefault
user_google_emailYesThe user's Google email address (authenticated account).
calendar_idNoCalendar ID from list_calendars, or "primary" for the user's main calendar. Default "primary".primary
event_idNoSpecific event ID to fetch. From a prior get_events call or a calendar URL like calendar.google.com/calendar/u/0/r/eventedit/<id>. When set, all range/query filters are ignored.
time_minNoRange start, RFC3339 (e.g. "2026-05-01T00:00:00Z" or "2026-05-01"). Defaults to now when omitted.
time_maxNoRange end, RFC3339 exclusive. Omit for open-ended range (capped by max_results).
max_resultsNoCap on events returned, 1-2500. Default 25.
queryNoFree-text filter matched against summary, description, and location.
detailedNoFalse returns just summary + times + link; True adds description, location, attendees with response status, and organizer.
include_attachmentsNoWhen detailed=True, also include attachment fileId/fileUrl/mimeType/title for events with attached Drive files. Ignored when detailed=False.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries full burden. It explains mode behavior, parameter interactions (event_id overrides range), defaults, and filtering. Slightly missing details on pagination or error handling, but largely transparent.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise (3 sentences) with clear structure: mode breakdown, sibling tool references, and auth note. No filler words; every sentence adds value.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the presence of output schema, return values need not be detailed. The description covers modes, parameters, filtering, and auth. Minor omission: no mention of pagination or error states, but it's sufficient for a read tool with good schema coverage.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so baseline is 3. The description adds value by explaining the two modes and how event_id overrides range/query params, and clarifies time_min default and max_results cap. This goes beyond schema descriptions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool fetches calendar events by ID or filtered range, specifying two modes. It distinguishes itself from siblings like query_freebusy and manage_event, providing a precise verb+resource+scope definition.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly details when to use each mode (event_id vs. time window), mentions alternatives (query_freebusy for free/busy, manage_event for create/update), and lists required OAuth scope. Clear guidance for agent selection.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_formA

Fetch a Google Form's metadata and full item list (questions, sections, grids, media items) by its form ID.

Use this before editing a form with batch_update_form โ€” the returned item indices and itemId/questionId values are the handles you pass into update/delete requests. For response data (submitted answers), use list_form_responses or get_form_response instead.

Requires OAuth scope: https://www.googleapis.com/auth/forms.body or forms.body.readonly (read-only).

ParametersJSON Schema
NameRequiredDescriptionDefault
user_google_emailYesThe user's Google email address. Required.
form_idYesThe form ID โ€” the string after `/forms/d/` in the edit URL (NOT the full URL). Example: `1FAIpQLSe...`. Both user-owned and shared forms work if the user has at least read access.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations provided, so the description carries full burden. It explains that the returned item indices and IDs are handles for updates, and that it requires read-only OAuth scope. It implies a read-only operation, and does not mention any destructive side effects.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three concise paragraphs, each with a distinct purpose: stating functionality, usage guidance with sibling differentiation, and authorization requirement. No redundant or filler sentences.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only fetch tool with an existing output schema, the description fully explains purpose, usage context, and prerequisites. It also distinguishes from sibling tools for response data, making it self-contained.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Input schema covers 100% of parameters with descriptions. The description adds helpful real-world context (e.g., form_id is the string after /forms/d/ in the URL, supports both user-owned and shared forms), supplementing the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb 'fetch', the resource 'Google Form', and the scope 'metadata and full item list'. It distinguishes from sibling tools (list_form_responses, get_form_response) by specifying that this tool is for form structure, not response data.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly advises using this tool before batch_update_form and distinguishes from response data tools. Mentions required OAuth scope, but does not explicitly state when not to use.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_form_responseA

Fetch a single submitted response to a Google Form, including all answers keyed by question ID.

Use this when you already know the specific responseId (e.g., from a prior list_form_responses call or from a webhook/trigger). For bulk listing of all responses on a form, use list_form_responses. To look up which questionId maps to which question prompt, call get_form and read the item list.

Requires OAuth scope: https://www.googleapis.com/auth/forms.responses.readonly.

ParametersJSON Schema
NameRequiredDescriptionDefault
user_google_emailYesThe user's Google email address. Required.
form_idYesThe form ID โ€” the string after `/forms/d/` in the edit URL.
response_idYesThe unique response ID returned by `list_form_responses` (field `responseId`). Opaque string assigned by Google at submit time; not the same as a row number.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, description carries full burden. It discloses the OAuth scope requirement, implying read-only access (scope is readonly). While it doesn't explicitly state 'read-only' or 'no side effects', the scope and fetch operation imply non-destructiveness. Could be more explicit but still adds useful behavioral context.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Description is three short paragraphs. First sentence states purpose, second provides usage guidance and alternatives, third lists OAuth scope. No filler, every sentence earns its place. Front-loaded with purpose.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Output schema exists, so return value documentation is handled. Description covers usage context, alternatives, and auth requirements. It does not address error handling (e.g., invalid responseId) but for a simple fetch tool this is acceptable. Slightly incomplete but sufficient for the complexity level.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, all parameters have descriptions. Description adds meaning by explaining response_id as 'opaque string not the same as row number' and links to list_form_responses for source. It also explains the output structure ('keyed by question ID') and how to map questionId via get_form, adding value beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description clearly states 'Fetch a single submitted response to a Google Form, including all answers keyed by question ID', which specifies verb and resource. It distinguishes from sibling tools by explicitly mentioning when to use 'list_form_responses' for bulk listing and 'get_form' for question ID mapping.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Description explicitly says 'Use this when you already know the specific responseId' and provides alternatives: 'For bulk listing... use list_form_responses' and 'To look up which questionId maps to which question prompt, call get_form'. Clear guidance on when and when not to use.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_gmail_attachment_contentA

Download a Gmail attachment to disk (or expose via download URL).

Side effects: writes a file to the configured attachment storage (stdio mode) or publishes a temporary download URL valid for 1 hour (HTTP mode). In stateless mode, no file is written and a base64 preview is returned instead. Attachment IDs are ephemeral โ€” always re-fetch the parent message (get_gmail_message_content) just before calling this. Requires the gmail.readonly OAuth scope.

ParametersJSON Schema
NameRequiredDescriptionDefault
message_idYesGmail message ID that owns the attachment.
attachment_idYesAttachment ID from the parent message's payload parts โ€” get this by calling get_gmail_message_content and reading the attachment metadata section.
user_google_emailYesThe user's Google email address (authenticated account).

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.3/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description fully carries the burden. It discloses side effects (writing file, temporary URL), stateless mode behavior (base64 preview), and ephemeral nature of attachment IDs. This is comprehensive for the tool's safety profile.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise and well-structured, with a main sentence followed by bullet-point-like details. Each sentence adds value, though it could be slightly more compact. No wasted words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity (file download, multiple modes), the description covers key aspects: download vs URL, stateless mode, ephemeral IDs, and OAuth scope. Output schema exists, so return values are handled. Minor omissions like file size limits are acceptable.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the schema already describes all three parameters. The description adds context about attachment_id needed from parent message, but this is also in the schema. Minimal extra value beyond schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose: 'Download a Gmail attachment'. It specifies the verb (download) and resource (Gmail attachment), and distinguishes it from siblings like get_gmail_message_content by focusing on attachment content rather than the message body.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides clear guidance: to download an attachment, and notes that attachment IDs are ephemeral, advising to re-fetch the parent message before calling. It also mentions required OAuth scope. However, it does not explicitly state when not to use this tool or name alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_gmail_message_contentA

Retrieve one Gmail message's headers and body by ID.

Use this for a single message; for multiple IDs prefer get_gmail_messages_content_batch to avoid round trips. For an entire conversation use get_gmail_thread_content. Attachment bytes are not returned here โ€” use get_gmail_attachment_content. Requires the gmail.readonly OAuth scope.

ParametersJSON Schema
NameRequiredDescriptionDefault
message_idYesGmail message ID from search_gmail_messages or from the URL like mail.google.com/mail/u/0/#inbox/<id>.
user_google_emailYesThe user's Google email address (authenticated account).
body_formatNoBody output format. 'text' (default) returns plaintext (HTML converted to text as fallback). 'html' returns the raw HTML body as-is without conversion. 'raw' fetches the full raw MIME message and returns the base64url-decoded content.text

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries full burden. It discloses that attachment bytes are not returned and mentions the required OAuth scope. It could additionally state if the body can be large, but the information is adequate for a read operation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences with zero wasted words. First sentence states purpose, second provides usage alternatives, third clarifies exclusions and scope. Efficient and well-structured.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given that an output schema exists, the description adequately covers return content (headers, body) and exclusions (attachments). It lacks mention of potential size limits but is otherwise complete for a single-message retrieval tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% with all parameters described. The description adds little beyond schema: it mentions 'headers and body' which contextualizes the output, but body_format is already detailed in schema. Baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states 'Retrieve one Gmail message's headers and body', providing a specific verb and resource. It distinguishes from siblings like get_gmail_messages_content_batch and get_gmail_thread_content by explicitly specifying use for a single message.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives explicit when-to-use and when-not-to-use guidance, recommending alternatives for multiple IDs (batch), conversations (thread), and attachments. It also mentions required OAuth scope, aiding correct invocation.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_gmail_messages_content_batchA

Fetch many Gmail messages in one batch, chunked internally.

Prefer this over calling get_gmail_message_content in a loop โ€” uses the Gmail batch API (25 per request, auto-chunked) and falls back to sequential fetches if the batch call fails. Use format="metadata" when you only need headers for triage (cheaper + faster). Requires the gmail.readonly OAuth scope.

ParametersJSON Schema
NameRequiredDescriptionDefault
message_idsYesList of Gmail message IDs from search_gmail_messages. No hard cap โ€” the tool chunks into batches of 25 automatically.
user_google_emailYesThe user's Google email address (authenticated account).
formatNo"full" (headers + body) or "metadata" (headers only, much faster for listing triage).full
body_formatNoBody output format (only applies when format='full'). 'text' (default) returns plaintext (HTML converted to text as fallback). 'html' returns the raw HTML body as-is without conversion. 'raw' fetches the full raw MIME message and returns the base64url-decoded content.text

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries full burden. It discloses internal chunking, fallback behavior, format options, and auth scope. While not exhaustive (e.g., rate limits, error handling beyond fallback), it provides sufficient transparency for safe usage.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three well-structured sentences: first states core action, second provides usage guidance and internal details, third adds format recommendation and auth requirement. No unnecessary words, perfectly front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the presence of an output schema, the description need not detail return values. It covers batch behavior, alternatives, format nuances, and auth requirement, making it complete for the tool's complexity.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema already covers parameters 100% with descriptions. The description adds value by clarifying message_ids has no hard cap (auto-chunked), format='metadata' is faster for triage, and body_format applies only when format='full'. This enhances understanding beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool fetches many Gmail messages in batch, internally chunked. It distinguishes itself from the sibling tool get_gmail_message_content by recommending this batch approach, making its purpose unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly advises to prefer this over a loop of get_gmail_message_content, explains the batch API chunking (25 per request) and fallback to sequential fetches, and recommends using format='metadata' for headers-only triage. Also specifies the required OAuth scope, providing comprehensive usage guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_gmail_thread_contentA

Retrieve every message in one Gmail conversation thread.

Use this when you need the whole back-and-forth (replies, forwards, quoted history) โ€” for a single standalone message use get_gmail_message_content. For many threads at once use get_gmail_threads_content_batch. Requires the gmail.readonly OAuth scope.

ParametersJSON Schema
NameRequiredDescriptionDefault
thread_idYesGmail thread ID, typically the "threadId" field returned by search_gmail_messages or any message-get response.
user_google_emailYesThe user's Google email address (authenticated account).
body_formatNoBody output format. 'text' (default) returns plaintext (HTML converted to text as fallback). 'html' returns the raw HTML body as-is without conversion. 'raw' fetches each message's full raw MIME content and returns the base64url-decoded body.text

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden. It implies read-only behavior via the word 'Retrieve' and discloses the OAuth scope requirement. However, it does not explicitly state that no data is modified or list any side effects, which is a minor gap.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences, each with a clear purpose: purpose statement, usage guidelines with alternatives, and scope requirement. No redundant or unnecessary words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool has an output schema, so return values are covered elsewhere. The description covers purpose, usage, and authentication requirements. It is complete for an agent to decide whether to invoke this tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so baseline is 3. The description adds minimal meaning beyond the schema (e.g., hinting that thread_id comes from search). No further parameter details are needed given complete schema descriptions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('Retrieve') and resource ('every message in one Gmail conversation thread'). It clearly distinguishes itself from siblings by naming get_gmail_message_content for single messages and get_gmail_threads_content_batch for multiple threads.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly states when to use this tool (need whole back-and-forth), when not to use it (single standalone message), and provides specific alternative tool names. It also mentions the required OAuth scope.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_gmail_threads_content_batchA

Fetch many Gmail threads in one batch, chunked internally.

Prefer this over calling get_gmail_thread_content in a loop โ€” uses the Gmail batch API (25 per request, auto-chunked) and falls back to sequential fetches if the batch call fails. Requires the gmail.readonly OAuth scope.

ParametersJSON Schema
NameRequiredDescriptionDefault
thread_idsYesList of Gmail thread IDs. No hard cap โ€” the tool chunks into batches of 25 automatically.
user_google_emailYesThe user's Google email address (authenticated account).
body_formatNoBody output format. 'text' (default) returns plaintext (HTML converted to text as fallback). 'html' returns the raw HTML body as-is without conversion. 'raw' fetches each message's full raw MIME content and returns the base64url-decoded body.text

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description covers key behavioral details: uses Gmail batch API (25 per request), auto-chunked, fallback to sequential fetches, and required OAuth scope. Missing details on error handling for partial failures or rate limits, but still informative.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences, no wasted words. Front-loaded with main purpose, followed by key advantages and requirements. Excellent structure.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity (batch, chunking, fallback), the description covers essential behavior. Output schema exists so return value is documented. Could mention that it fetches thread content (including messages), but still adequate.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so description adds little new parameter info. The description reinforces chunking behavior already noted in schema for thread_ids. No additional semantics beyond what schema provides.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Clearly states 'Fetch many Gmail threads in one batch', distinguishing it from the singular get_gmail_thread_content. The description explicitly contrasts with looping over get_gmail_thread_content, making the purpose unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly advises 'Prefer this over calling get_gmail_thread_content in a loop', providing a clear usage rule. It details batch API usage, auto-chunking, and fallback behavior. However, it could explicitly state when not to use (e.g., for a single thread).

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_messagesA

List messages in a Google Chat space with sender names resolved.

Use this to read a room/DM's recent messages. For text search across spaces use search_messages. For sending messages use send_message. For attachment downloads use download_chat_attachment. Senders are resolved to display names via the People API (both chat.read and contacts.readonly OAuth scopes required).

ParametersJSON Schema
NameRequiredDescriptionDefault
user_google_emailYesThe user's Google email address (authenticated account).
space_idYesSpace resource name from list_spaces, formatted as "spaces/<id>".
page_sizeNoMax messages returned. Default 50.
order_byNo"createTime desc" (default, newest first) or "createTime" (oldest first).createTime desc
message_filterNoChat API filter expression. Supports createTime and thread.name, e.g. 'createTime > "2026-03-18T00:00:00Z"' or 'thread.name = spaces/X/threads/Y'. Full-text search is NOT supported here โ€” use search_messages.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Describes that sender names are resolved via People API and lists required OAuth scopes. However, it does not mention pagination behavior or rate limits. Since no annotations are present, the description carries the burden; it covers the most important behavioral aspects but lacks details on limits.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Description is concise with four sentences. Main action is stated first, followed by usage guidelines and behavioral notes. No unnecessary information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool has 5 parameters, required fields are stated, and output schema exists, the description covers purpose, usage, and key behaviors. Missing explicit details on pagination and default ordering beyond what schema provides, but largely sufficient.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Input schema has 100% coverage with parameter descriptions. The description does not add additional meaning to parameters beyond what is in the schema. Baseline 3 applies as schema already provides parameter semantics.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description clearly states 'List messages in a Google Chat space with sender names resolved' and specifies 'Use this to read a room/DM's recent messages'. It distinguishes from siblings like search_messages, send_message, and download_chat_attachment.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly tells when to use this tool and when not, with alternative tool names: 'For text search across spaces use search_messages. For sending messages use send_message. For attachment downloads use download_chat_attachment.' Also mentions required OAuth scopes.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_pageA

Fetch one slide's element list, types, and layout.

Use this when you need a single slide's details after get_presentation has given you the list of slide objectIds. For a thumbnail image use get_page_thumbnail. For the speaker notes text use get_slides_speaker_notes. Requires the presentations.readonly OAuth scope.

ParametersJSON Schema
NameRequiredDescriptionDefault
user_google_emailYesThe user's Google email address (authenticated account).
presentation_idYesParent presentation ID.
page_object_idYesSlide objectId from get_presentation's `slides[].objectId` field.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Discloses read-only nature via the required OAuth scope (presentations.readonly) and specifies the data returned. No annotations to supplement, but the description covers key behavioral traits.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Description is four sentences, front-loaded with the action, then usage guidance. No unnecessary words, but could be slightly more compact.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the presence of an output schema, the description adequately explains the return content (element list, types, layout) and authentication requirement. No missing context.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema covers 100% of parameter descriptions. The description adds value by linking page_object_id to get_presentation's output format, which helps the agent construct the correct input.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('Fetch one slide's element list, types, and layout') and distinguishes from sibling tools like get_page_thumbnail and get_slides_speaker_notes.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly tells when to use this tool (after get_presentation for slide details), and provides alternatives for thumbnails and speaker notes.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_page_thumbnailA

Generate a PNG thumbnail URL for one slide.

Useful for visual previews. Returns a Google-hosted URL (not the image bytes). The URL is short-lived โ€” fetch and cache quickly. For slide element details use get_page. Requires the presentations.readonly OAuth scope.

ParametersJSON Schema
NameRequiredDescriptionDefault
user_google_emailYesThe user's Google email address (authenticated account).
presentation_idYesParent presentation ID.
page_object_idYesSlide objectId from get_presentation.
thumbnail_sizeNo"LARGE" (~1600px wide), "MEDIUM" (~800px, default), or "SMALL" (~200px).MEDIUM

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Since no annotations are provided, the description carries the full burden of behavioral disclosure. It reveals that the tool is read-only (requires presentations.readonly scope), returns a URL not image bytes, and that the URL is short-lived. No contradictions.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three concise sentences. First sentence states purpose, second gives usage guidance and return type, third explains URL behavior and scope. No wasted words, front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given no output schema in the input, the description effectively explains what is returned (a Google-hosted URL) and its ephemeral nature. It also covers the OAuth scope and alternative tool. Complete for the tool's complexity.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents all parameters. The description adds no additional meaning beyond the schema for parameters. Baseline of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description explicitly states 'Generate a PNG thumbnail URL for one slide', which is a specific verb+resource combination. It distinguishes from sibling 'get_page' by noting 'For slide element details use get_page', making the purpose clear.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides explicit guidance on when to use ('Useful for visual previews') and when not to ('For slide element details use get_page'). It also advises to fetch and cache quickly due to short-lived URLs, and mentions the required OAuth scope.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_presentationA

Retrieve a presentation's structure and extract text per slide.

Returns slide objectIds needed by other tools (get_page, format_slides_text, format_slides_paragraph, insert_slides_image, etc.). For a single-slide deep dive use get_page. For a rendered thumbnail image use get_page_thumbnail. Requires the presentations.readonly OAuth scope.

ParametersJSON Schema
NameRequiredDescriptionDefault
user_google_emailYesThe user's Google email address (authenticated account).
presentation_idYesPresentation ID from a URL like docs.google.com/presentation/d/<id>/edit.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations provided, but description indicates read-only behavior via 'presentations.readonly OAuth scope.' Details that it returns slide objectIds needed by other tools, providing helpful behavioral context without contradicting any annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three concise, front-loaded sentences with no unnecessary words. Each sentence adds value: purpose, return value relationship to other tools, and scope requirement.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given output schema exists, description adequately covers context: read-only scope, return information linking to other tools, and alternative tools for specific needs. No gaps.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema covers 100% of parameters with descriptions; the description adds no additional semantic detail beyond what's already in the schema. Baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Clearly states verb 'retrieve' and 'extract' with specific resource 'presentation's structure and text per slide.' Distinguishes from sibling tools like get_page and get_page_thumbnail by specifying its broader scope.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly tells when to use this tool vs alternatives: 'For a single-slide deep dive use get_page. For a rendered thumbnail image use get_page_thumbnail.' Also mentions required OAuth scope.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_script_contentA

Retrieve the full source of one file in an Apps Script project.

Use this after get_script_project has surfaced the file names. For project-wide overview use get_script_project. Requires the script.projects readonly OAuth scope.

ParametersJSON Schema
NameRequiredDescriptionDefault
user_google_emailYesThe user's Google email address (authenticated account).
script_idYesApps Script project ID.
file_nameYesFile name as it appears in the Apps Script editor (without extension โ€” e.g. "Code", "appsscript", "helpers"). Matched exactly.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description indicates a read operation via 'Retrieve' and the required 'script.projects readonly OAuth scope', but does not explicitly state it makes no changes. Adequate but could be more explicit.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, front-loaded with purpose, no redundant information. Very concise and well-structured.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Prerequisites, usage advice, OAuth scope, and output schema (implied) are covered. Complete for a simple retrieval tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3. The description adds context about using after get_script_project but does not enhance parameter semantics beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool retrieves the full source of one file in an Apps Script project. It distinguishes from sibling tools like get_script_project (overview) and update_script_content.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly advises using this after get_script_project for file names, and mentions get_script_project as an alternative for project-wide overview. Also specifies the required OAuth scope.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_script_metricsA

Fetch execution analytics (users, runs, failures) for a script.

Returns time-series metrics over the last 7 days (DAILY) or 8 weeks (WEEKLY). Useful for adoption audits and error monitoring. For per-execution details use list_script_processes. Requires the script.metrics readonly OAuth scope.

ParametersJSON Schema
NameRequiredDescriptionDefault
user_google_emailYesThe user's Google email address (authenticated account).
script_idYesTarget project ID.
metrics_granularityNo"DAILY" (last 7 days) or "WEEKLY" (last 8 weeks). Default "DAILY".DAILY

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries full burden. It discloses the read-only nature via OAuth scope, time series granularity (7 days/8 weeks), and required permissions. However, it lacks details on pagination or rate limits, which are absent but not critical given the output schema exists.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences, each adding unique value: main action, time range and granularity, usage context and alternative. No wasted words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the presence of an output schema and complete schema descriptions, the description covers purpose, usage, alternative, and required scope. It is sufficiently complete for an agent to select and invoke the tool correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so baseline is 3. The description does not add extra semantics beyond the schema descriptions for the parameters. It does not explain default behavior or constraints further.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description clearly states the verb 'Fetch', resource 'execution analytics for a script', and specific metrics (users, runs, failures). It distinguishes itself from sibling 'list_script_processes' by contrasting per-execution details.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly states when to use ('adoption audits and error monitoring') and provides an alternative ('For per-execution details use list_script_processes'). This gives clear guidance for tool selection.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_script_projectA

Retrieve an Apps Script project's metadata and all file contents.

Dumps every file in the project (gs/html/json) with a 200-char source preview. For the full content of one file use get_script_content. For writing use update_script_content. Requires the script.projects readonly OAuth scope.

ParametersJSON Schema
NameRequiredDescriptionDefault
user_google_emailYesThe user's Google email address (authenticated account).
script_idYesApps Script project ID from list_script_projects or a script URL like script.google.com/d/<scriptId>/edit.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations provided, so description carries full burden. It discloses that the tool retrieves metadata and all file contents with a 200-char preview, implying a read-only operation. It mentions readonly OAuth scope. While it doesn't explicitly state no side effects, the 'Retrieve' verb and scope make it clear. Slight omission of explicit non-modification statement prevents a 5.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is three sentences: first sentence states purpose, second adds detail on output, third gives alternatives and scope. It is front-loaded, concise, and every sentence adds value. No wasted words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the presence of an output schema (which likely details metadata fields and file content format), the description's mention of 'metadata and all file contents' with a preview length is sufficient. It also includes required OAuth scope. For a read-only tool with two straightforward parameters, the description is complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Input schema has 100% coverage, so baseline is 3. The description adds value by contextualizing script_id usage ('from list_script_projects or a script URL'), which goes beyond the schema description. This enhances understanding of how to obtain the parameter value.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states 'Retrieve an Apps Script project's metadata and all file contents' with specific verb and resource. It distinguishes from sibling tools get_script_content and update_script_content by noting the 200-char preview and directing to alternatives for full content or writing.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly directs to get_script_content for full file content and update_script_content for writing, providing clear context for when to use this tool vs alternatives. It also mentions required OAuth scope. It lacks explicit 'when not to use' guidance, but the alternatives are well stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_search_engine_infoB

Retrieves metadata about a Programmable Search Engine.

ParametersJSON Schema
NameRequiredDescriptionDefault
user_google_emailYesThe user's Google email address. Required.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.1/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations provided, so description carries full burden. It only states 'retrieves metadata,' implying no side effects, but does not disclose any behavioral traits such as permissions, error handling, or rate limits.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single sentence that is concise and front-loaded. Every word adds value with no redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description is minimal but adequate given the tool has an output schema (so return values need not be explained). However, it could mention prerequisites like a configured search engine.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% with a clear description for the only parameter. The tool description adds no additional meaning beyond the schema, so baseline score of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states it retrieves metadata about a Programmable Search Engine, which is a specific verb-resource combination. It distinguishes from sibling tools that deal with different resources like contacts or documents.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance on when to use this tool over alternatives. While it is the only tool for search engine metadata, the description lacks context on prerequisites or scenarios.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_slides_speaker_notesA

Read the speaker notes text from a single slide.

Returns the plain-text contents of the slide's speaker-notes pane (the area shown to the presenter in Presenter View, hidden from the audience). Useful for auditing/exporting notes, reviewing coverage per slide, or piping into transcripts. To modify notes, use update_slides_speaker_notes.

Requires OAuth scope: https://www.googleapis.com/auth/presentations.readonly (or broader). Read-only โ€” safe to call repeatedly.

ParametersJSON Schema
NameRequiredDescriptionDefault
user_google_emailYes
presentation_idYesGoogle Slides presentation ID (from the URL after `/d/`).
page_object_idNoObject ID of the target slide. Either this OR `slide_index` is required. Get it from `get_presentation.slides[].objectId`. Preferred over `slide_index` because object IDs are stable across slide reordering.
slide_indexNo0-based position of the slide in the deck. Used only if `page_object_id` is not provided. Index 0 = first slide.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries full burden. It declares read-only nature, safe for repeated calls, and required scope. It does not specify error behavior (e.g., missing notes) or rate limits, but covers key behavioral traits.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Four sentences, each serving a purpose: action statement, output description, use case and alternative, authority and safety. No redundancy, front-loaded with key information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Covers purpose, usage, authority, and safety. Assumes output schema exists (not shown) so return details are adequately described as plain-text. Missing edge-case handling but sufficient for typical use.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 75% (3 of 4 params have descriptions). The description adds context that the tool works on a single slide but does not elaborate on parameters beyond what schema provides. Baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Clearly states it reads speaker notes from a single slide, specifies the return type (plain-text), and distinguishes from sibling tool update_slides_speaker_notes. Use cases for auditing/exporting are mentioned.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly tells when to use (auditing/exporting notes) and when not (for modifications, use update_slides_speaker_notes). Also lists required OAuth scope and confirms it's safe to call repeatedly.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_spreadsheet_infoA

Inspect a spreadsheet's metadata (title, locale, tabs, sizes).

Use this to discover sheet (tab) names and sheetIds before calling read_sheet_values, manage_sheet_tabs, or protect_sheet_range. Also surfaces conditional format counts per tab. Does not read cell values โ€” use read_sheet_values for that. Requires the spreadsheets.readonly OAuth scope.

ParametersJSON Schema
NameRequiredDescriptionDefault
user_google_emailYesThe user's Google email address (authenticated account).
spreadsheet_idYesSpreadsheet ID from list_spreadsheets or a URL like docs.google.com/spreadsheets/d/<id>/edit.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Since no annotations are provided, the description carries full burden. It discloses the required OAuth scope (spreadsheets.readonly), states that it surfaces conditional format counts per tab, and explicitly states it does not read cell values. This covers safety and behavioral traits beyond the structured metadata.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is four sentences, well-structured, and front-loaded with the core purpose. It then provides usage guidance and a clarifying note. Every sentence adds value without redundancy, making it highly efficient.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the presence of an output schema (so return values need not be detailed), the description covers purpose, usage guidance, behavioral traits, and OAuth scope. For a metadata inspection tool, this is fully complete and leaves no gaps.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has 100% parameter description coverage, so baseline is 3. The description adds minimal extra meaning for the parameters themselves, but does provide context that the output is metadata (title, locale, tabs, sizes). This is adequate but does not exceed expectations.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states it inspects spreadsheet metadata (title, locale, tabs, sizes) and distinguishes itself from siblings like read_sheet_values by noting it does not read cell values. It also lists specific sibling tools it supports (read_sheet_values, manage_sheet_tabs, protect_sheet_range), making its purpose unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly tells when to use this tool: to discover sheet names and sheetIds before calling certain sibling tools. It also clarifies what the tool does NOT do (read cell values), directing users to read_sheet_values for that. This provides clear guidance on appropriate use cases.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_taskA

Fetch a single Google Tasks task by ID.

Returns full details including parent task ID (for subtasks), position, notes, due date, and web view link. For the full list of tasks in a list use list_tasks. For mutations use manage_task. Requires the tasks.readonly OAuth scope.

ParametersJSON Schema
NameRequiredDescriptionDefault
user_google_emailYesThe user's Google email address (authenticated account).
task_list_idYesParent task list ID from list_task_lists.
task_idYesTask ID from list_tasks.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries full burden. It discloses read-only nature (via 'Fetch' and 'tasks.readonly' scope) and lists returned fields. Lacks mention of error cases, but sufficient for a read operation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise, front-loaded with the main purpose, and uses 5 sentences without redundancy. Each sentence adds value, including return details, sibling guidance, and OAuth requirement.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the output schema exists, the description covers return fields, OAuth scope, and alternative tools. It is fully adequate for correct tool selection and invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Although schema coverage is 100%, the description adds meaningful context by specifying that IDs come from other tools (list_task_lists and list_tasks), which aids correct parameter selection.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states 'Fetch a single Google Tasks task by ID' and lists the returned fields. It explicitly distinguishes from siblings: 'For the full list of tasks in a list use list_tasks. For mutations use manage_task.'

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description tells when to use this tool vs alternatives (list_tasks for list, manage_task for mutations) and specifies the required OAuth scope, providing clear context for invocation.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_task_listA

Fetch metadata for a single Google Tasks task list.

Returns list-level info only (title, last updated); for the list's tasks use list_tasks. Requires the tasks.readonly OAuth scope.

ParametersJSON Schema
NameRequiredDescriptionDefault
user_google_emailYesThe user's Google email address (authenticated account).
task_list_idYesTask list ID from list_task_lists.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations provided, so description carries full burden. Discloses return value scope ('list-level info only, title, last updated') and required permissions (OAuth scope). Does not detail potential errors or idempotency, but for a simple read operation, this is sufficient and transparent.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences, front-loaded with purpose, efficient with no redundant words. Each sentence adds value: purpose, return info with alternative, and authentication requirement.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given output schema exists (not shown), description need not detail return structure. Covers input expectations (requires list ID from list_task_lists), contrasts with sibling, and explains scope. Complete for a simple metadata fetch tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% with descriptions already clear. Description does not add extra parameter meaning beyond schema. Baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Clear verb 'Fetch metadata' with specific resource 'single Google Tasks task list'. Distinguishes from sibling 'list_tasks' by stating that for tasks, use that alternative. No ambiguity.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly states when to use (get list metadata) and when not to (use list_tasks for tasks). Mentions required OAuth scope (tasks.readonly), which is a key prerequisite. Provides clear guidance for correct invocation.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_versionA

Fetch metadata for a specific immutable version of a Google Apps Script project.

A "version" in Apps Script is a snapshot of script code taken at a point in time โ€” versions are referenced by deployments and cannot be edited after creation. Use this to inspect the description/create-time of one known version. For the full list of versions on a project, use list_versions. To create a new version from the current code, use create_version. To inspect deployments that point to versions, use list_deployments.

Requires OAuth scope: https://www.googleapis.com/auth/script.projects.readonly (read-only) or the broader script.projects scope.

ParametersJSON Schema
NameRequiredDescriptionDefault
user_google_emailYesUser's email address. Required.
script_idYesThe Apps Script project ID โ€” the string after `/d/` in the `script.google.com/home/projects/<id>` URL, or the `scriptId` field returned by `create_script_project` / `list_script_projects`.
version_numberYesThe 1-indexed integer version number to retrieve (1 for the first version, 2 for the second, etc.). Must refer to an already-created version; requesting a non-existent number raises a `404 Not Found` handled by the error decorator.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations provided, but description notes immutability (cannot be edited), error on non-existent version (404), and required OAuth scope. Could mention that it only returns metadata, not code.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Few sentences, well-structured with bullet points for alternatives. Every sentence adds value without redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Output schema exists, so return values not needed. Description covers purpose, usage, prerequisites, alternatives, and error behaviorโ€”complete for a metadata retrieval tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% with good parameter descriptions. Description adds value by explaining version concept, 1-indexing of version_number, and error handling, going beyond schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description clearly states 'Fetch metadata for a specific immutable version', with verb and resource. It differentiates from siblings like list_versions, create_version, and list_deployments.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly tells when to use this tool ('inspect the description/create-time of one known version') and when to use alternatives (list_versions, create_version, list_deployments).

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

import_to_google_docA

Convert a source file into a native Google Doc on upload.

Drive performs the conversion server-side, preserving headings, lists, inline formatting, tables, etc. Use this (not create_drive_file) when you want a real Google Doc editable in the web UI. For adding content to an existing Doc use insert_doc_markdown or insert_doc_elements. Requires the drive.file OAuth scope.

ParametersJSON Schema
NameRequiredDescriptionDefault
user_google_emailYesThe user's Google email address (authenticated account).
file_nameYesDisplay name for the resulting Google Doc (extension is stripped).
contentNoInline text for text formats (md, txt, html). Mutually exclusive with file_path and file_url.
file_pathNoLocal path or file:// URL to a binary source (docx/odt/rtf). Path safety validated.
file_urlNohttp:// or https:// URL to stream the source from. SSRF-protected with size limits.
source_formatNoOverride for format detection: "md"/"markdown", "docx", "txt", "html", "rtf", "odt". Auto-detected from file_name extension or content heuristics when omitted.
folder_idNoParent folder ID. Default "root".root

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Discloses conversion behavior (preserves formatting), server-side processing, and required OAuth scope. Lacks details on file disposition (original file kept/deleted) but covers key behavioral traits beyond annotations (none provided).

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Four sentences, front-loaded with main purpose. Every sentence adds value: conversion description, use case guidance, sibling differentiation, and scope requirement. No wasted words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With 7 parameters, 100% schema coverage, and an output schema, the description covers purpose, usage, and key behaviors. It does not detail return values (handled by output schema) but provides sufficient context for a conversion tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so baseline is 3. Description adds value by noting mutual exclusivity of content/file_path/file_url (though already in schema) and providing safety context for file_path ('Path safety validated') and file_url ('SSRF-protected with size limits').

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description clearly states 'Convert a source file into a native Google Doc on upload' with specific verb and resource. It differentiates from sibling tools like create_drive_file and insert_doc_markdown/insert_doc_elements.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicit guidance: 'Use this (not create_drive_file) when you want a real Google Doc editable in the web UI. For adding content to an existing Doc use insert_doc_markdown or insert_doc_elements.' Clearly states when and when not to use.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

insert_doc_elementsA

Insert a table, list, or page break into a Google Doc.

For plain text or inline markdown use modify_doc_text (with format_as_markdown=True for rich output). For images use insert_doc_image. For Drive-file chips use insert_doc_file_chip. Note: index 0 is automatically bumped to 1 (to skip the opening section break). Requires the documents OAuth scope.

ParametersJSON Schema
NameRequiredDescriptionDefault
user_google_emailYesThe user's Google email address (authenticated account).
document_idYesTarget document ID.
element_typeYes"table", "list", or "page_break".
indexYes0-based insertion index. Get stable positions from inspect_doc_structure. Index 0 is auto-bumped to 1.
rowsNoRow count for a table. Required when element_type="table".
columnsNoColumn count for a table. Required when element_type="table".
list_typeNo"UNORDERED" (bullets) or "ORDERED" (numbered). Required when element_type="list".
textNoSeed text for a list item. Defaults to "List item" when list_type is set but text is omitted.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Describes the automatic index bump from 0 to 1 and the OAuth scope requirement. No annotations present, so description bears full burden. Could mention error handling or permission requirements.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Concise, well-structured, and front-loaded with the main purpose. Every sentence adds value without fluff.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given 8 parameters with full schema coverage and an output schema, the description covers purpose, usage alternatives, and a key behavioral detail (index bump). No gaps for an insertion tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so baseline is 3. Description repeats some schema info (e.g., rows/columns for table) but adds value with the index bump note. No additional semantic detail beyond schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Clearly states the action (insert) and resources (table, list, page break into a Google Doc). Distinguishes from sibling tools like modify_doc_text, insert_doc_image, etc.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly provides when to use this tool versus alternatives for plain text, images, and file chips. Also notes the index bump behavior and required OAuth scope.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

insert_doc_file_chipA

Insert a Drive-file smart chip at an index in a Google Doc.

Side effect note: chip rendering happens client-side โ€” the API stores a linked URL, and Google Docs upgrades it to a chip with filename/ icon/preview on the next render. For a person @mention use insert_doc_person_chip; for a plain hyperlink use insert_doc_link. Requires the documents OAuth scope.

ParametersJSON Schema
NameRequiredDescriptionDefault
user_google_emailYesThe user's Google email address (authenticated account).
document_idYesTarget document ID.
file_urlYesFull Drive URL, e.g. a share/edit URL like https://docs.google.com/document/d/<id>/edit, https://drive.google.com/file/d/<id>/view, or a Sheets/Slides URL.
display_textNoOptional visible anchor text. Defaults to the URL itself (still renders as a chip on next open).
indexNo1-based document index to insert at. Default 1.
tab_idNoTab ID from list_doc_tabs to scope to a specific tab.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description fully discloses a key side effect: chip rendering happens client-side and the API only stores a linked URL. It also calls out the OAuth scope requirement.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is three sentences, tightly packed with actionable information: purpose, side effect, alternatives, and auth. No wasted words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with 6 parameters (3 required) and an output schema present, the description covers purpose, side effects, usage context, and auth. No gaps remain.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the description does not need to add parameter details. Baseline 3 applies; the description adds no extra parameter meaning beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states 'Insert a Drive-file smart chip at an index in a Google Doc,' providing a specific verb and resource. It distinguishes from siblings like insert_doc_person_chip and insert_doc_link by explicitly naming alternatives.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives explicit guidance on when to use this tool versus alternatives ('For a person @mention use insert_doc_person_chip; for a plain hyperlink use insert_doc_link') and mentions the required OAuth scope.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

insert_doc_imageA

Insert an image into a Google Doc from Drive or an HTTPS URL.

When image_source is a Drive file ID, its sharing MUST allow "Anyone with the link" โ€” check with check_drive_file_public_access first. HTTPS URLs must serve image bytes directly (no redirects, login walls, or signed URLs). PNG/JPEG/GIF supported. Index 0 is auto-bumped to 1. Requires both docs and drive.readonly OAuth scopes.

ParametersJSON Schema
NameRequiredDescriptionDefault
user_google_emailYesThe user's Google email address (authenticated account).
document_idYesTarget document ID.
image_sourceYesDrive file ID (non-URL string) or public HTTPS image URL. Drive IDs are auto-converted to https://drive.google.com/uc?id=<id>.
indexYes0-based insertion index from inspect_doc_structure. 0 auto-bumped to 1.
widthNoImage width in points. 0 or omitted = auto-size.
heightNoImage height in points. 0 or omitted = auto-size.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations provided, so description carries burden. It discloses auto-conversion of Drive IDs, index 0 bump to 1, and OAuth scope requirements. Lacks error handling details but is otherwise transparent.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Concise and front-loaded with main action. Each sentence adds value without redundancy. No fluff or unnecessary details.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given output schema exists, return values need not be explained. All 6 parameters covered, behavior well-described, prerequisites and scope noted. Complete for correct tool invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, baseline 3. Description adds value by explaining image_source types and auto-conversion, index bump, and width/height default meaning (0=auto-size). Enhances schema understanding.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states 'Insert an image into a Google Doc from Drive or an HTTPS URL,' specifying the verb, resource, and data sources. It distinguishes itself from sibling tools like insert_slides_image (for Slides) and insert_doc_elements (more general).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides explicit when-to-use and prerequisites: Drive files must allow 'Anyone with the link' and suggest checking with check_drive_file_public_access; HTTPS URLs must be direct image bytes. Also mentions supported formats and index behavior.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

insert_doc_markdownA

Insert markdown-formatted content into a Google Doc with native styling.

Converts markdown to Docs API batch requests so output renders with real Docs styles (headings, bold, lists), not raw markdown. For plain text insertion use modify_doc_text; for find-and-replace patterns use find_and_replace_doc. Supports # H1..### H3, **bold**, *italic*, - bullets, 1. numbered, and - [ ] checkbox (plus - [x]). Requires the documents OAuth scope.

ParametersJSON Schema
NameRequiredDescriptionDefault
user_google_emailYesThe user's Google email address (authenticated account).
document_idYesTarget document ID.
markdownYesMarkdown source to insert.
indexNo1-based document index to insert at. Default 1 (start of body). Ignored when end_of_segment=True.
tab_idNoTab ID from list_doc_tabs to target a specific tab.
segment_idNoHeader/footer/footnote segment ID from inspect_doc_structure (do not invent IDs).
end_of_segmentNoTrue appends to the end of the target segment without needing to calculate an index โ€” safest for repeatable inserts.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden. It discloses key behaviors: conversion to Docs API batch requests, rendering with real Docs styles (not raw markdown), and supported markdown elements. However, it does not mention error handling for invalid markdown or potential size limits, which would make it fully transparent.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise (3 sentences) and front-loaded with the core purpose. It efficiently compares to siblings, lists supported features, and mentions scope, with no redundant or trivial information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given that an output schema exists (return values not needed) and schema coverage is 100%, the description covers all key aspects: purpose, alternatives, supported syntax, scope, and parameter semantics for the main parameter. It is complete for the tool's complexity.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so baseline is 3. The description adds value by detailing supported markdown syntax for the 'markdown' parameter, going beyond the schema's 'Markdown source to insert.' Other parameters are not enriched beyond schema, but the addition to the most critical parameter justifies a 4.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states it inserts markdown with native styling into a Google Doc. It specifies the verb-resource pair ('Insert markdown-formatted content into a Google Doc') and explicitly distinguishes from siblings modify_doc_text (plain text) and find_and_replace_doc (find-replace).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides explicit when-to-use guidance (for markdown insertion with native styling) and when-not-to (use modify_doc_text for plain text, find_and_replace_doc for patterns). It also lists supported markdown syntax and notes the required OAuth scope.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

insert_doc_person_chipA

Insert an @mention-style person chip at a specific position in a document.

Writes the person's email as linked text (href = mailto:<email>). When Google Docs renders the document, that linked-email pattern is auto-converted into a rich person chip โ€” a small inline pill showing the person's name, avatar, and hover card. The chip is a "smart chip" and shows up in get_doc_smart_chips as type person.

Requires OAuth scope: https://www.googleapis.com/auth/documents (write). For a Drive-file chip instead, use insert_doc_file_chip. For a plain hyperlink, use insert_doc_link.

Note: The chip only renders correctly once a collaborator or the owner opens the doc in the Google Docs UI โ€” Docs does the text-to-chip conversion client-side on render. The API always stores the raw linked email. Person resolution uses the email only; if the email doesn't match a Google account visible to the viewer, it falls back to plain linked text.

ParametersJSON Schema
NameRequiredDescriptionDefault
user_google_emailYes
document_idYesGoogle Docs document ID (from the URL after `/document/d/`).
emailYesEmail address of the person to @mention, e.g., `alice@example.com`. Must be a valid email; the Docs client uses it to look up the contact card at render time.
indexNo1-based character position in the document body where the chip is inserted. Default `1` = start of body. Use `inspect_doc_structure` to find exact indices for non-trivial placements. Ignored contextually when `tab_id` is set โ€” index resolves within the specified tab's content.
tab_idNoOptional tab ID to target a specific tab. Get it from `list_doc_tabs`. Omit for single-body (legacy) documents.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations exist, so the description carries full burden. It discloses that the underlying representation is a linked email, the client-side conversion to a rich chip, fallback behavior, and how the chip appears in `get_doc_smart_chips`. It does not mention reversibility or idempotency, but overall is thorough.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is moderately sized and well-structured: primary action first, then technical details, scope requirement, sibling references, and a note. It could be slightly more terse, but every sentence adds value.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the moderate parameter count (5), presence of output schema, and lack of annotations, the description adequately covers behavior, requirements, and alternatives. It explains the rendering nuance that is critical for correct usage, and the existence of an output schema covers return values.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 80%, so baseline is 3. The tool's main description does not add parameter-specific semantics beyond what the schema already provides. For example, the `index` parameter's default and use with `tab_id` is explained in the schema, not in the description.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('Insert an @mention-style person chip'), the resource (person chip), and the context (specific position in a document). It immediately distinguishes from siblings by naming `insert_doc_file_chip` and `insert_doc_link` as alternatives.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly states the required OAuth write scope and provides clear guidance on when to use alternative tools (Drive-file chip, plain hyperlink). It also notes a behavioral quirk (chip only renders client-side) that affects usage decisions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

insert_doc_tabA

Create a new tab in a multi-tab Google Doc.

Side effects: creates a new empty tab (a sub-document) in the target Doc. Google Docs tabs (introduced Oct 2024) let one Doc hold multiple sub-documents. To list existing tabs + IDs use list_doc_tabs; to rename use update_doc_tab; to delete use delete_doc_tab. Requires the documents OAuth scope.

ParametersJSON Schema
NameRequiredDescriptionDefault
user_google_emailYesThe user's Google email address (authenticated account).
document_idYesTarget document ID.
titleYesDisplay title of the new tab.
indexYes0-based position among sibling tabs. 0 = first; use a large number to append at the end.
parent_tab_idNoParent tab's tabId (from list_doc_tabs) to nest the new tab as a child. Omit for a top-level tab.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Discloses side effects (creates empty tab), context about Google Docs tabs (Oct 2024), and scope requirement. No annotations provided, so description carries full burden; lacks detail on rate limits or reversibility but sufficient for a create operation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded purpose, then side effects and alternatives. Five sentences with no fluff, each sentence adds value.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With output schema present, description doesn't need to explain return values. Covers side effects, scope, and usage context. Complete for a create tool with well-documented parameters.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema covers all 5 parameters with descriptions. The description adds context about parent_tab_id for nesting and index for positioning, but this is already in schema. Baseline score of 3 appropriate given high schema coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Clearly states 'Create a new tab in a multi-tab Google Doc.' Distinguishes from sibling tools list_doc_tabs, update_doc_tab, and delete_doc_tab.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly lists when to use alternatives: 'To list existing tabs + IDs use list_doc_tabs; to rename use update_doc_tab; to delete use delete_doc_tab.' Also mentions required OAuth scope.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

insert_slides_imageA

Insert an image onto a slide from a publicly accessible URL.

Google Slides fetches the image from the URL at insert time and embeds a reference in the presentation. The URL must be publicly accessible (or accessible to Google's servers) at the moment of the call โ€” private Drive URLs, signed URLs, and localhost URLs will fail. Supported formats: PNG, JPEG, GIF (Slides does not embed SVG).

Requires OAuth scope: https://www.googleapis.com/auth/presentations (write). Returns the new image's object ID so you can reference it later (reposition, resize, delete, etc.). Image size limit: 50 MB, 25 megapixels.

ParametersJSON Schema
NameRequiredDescriptionDefault
user_google_emailYes
presentation_idYesGoogle Slides presentation ID (from the URL after `/d/`).
page_object_idYesObject ID of the slide to place the image on. Get it from `get_presentation.slides[].objectId`.
image_urlYesPublicly accessible HTTPS URL pointing to a PNG/JPEG/GIF. Google fetches this URL server-side; must return the image bytes directly (no login walls, redirects to interstitial pages, etc.).
leftNoX position (top-left corner) in EMUs (English Metric Units). Default `914400` EMU = 1 inch from the slide's left edge. Conversion: 1 inch = 914,400 EMU; 1 point = 12,700 EMU.
topNoY position (top-left corner) in EMUs. Default `914400` = 1 inch down.
widthNoImage width in EMUs. Default `3000000` โ‰ˆ 3.28 inches. Image is stretched/compressed to this size; aspect ratio is NOT preserved automatically โ€” compute width:height from the source image to avoid distortion.
heightNoImage height in EMUs. Default `2000000` โ‰ˆ 2.19 inches.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Without annotations, the description fully discloses behavior: fetches image at insert time, embeds reference, requires public URL, formats, OAuth scope, return value, size limits, and EMU defaults. No contradictions.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Concise paragraph with clear first sentence and structured details. Every sentence adds value with no redundancy or fluff.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given 8 parameters, no annotations, and an output schema (implied), the description covers behavior, constraints, return value, sizing, and defaults comprehensively.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Adds significant meaning beyond the schema: explains EMU conversions, default positioning, aspect ratio warning, and image size limits. Schema coverage is 88%, but description compensates for missing user_google_email description with other rich details.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool inserts an image onto a slide from a URL, with specific verb and resource. It distinguishes from siblings like insert_doc_image (for Docs) and create_slides_shape (for shapes).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides explicit instructions: URL must be publicly accessible, supported formats, OAuth scope required, returns object ID, and size limits. Tells when to use and when not (e.g., private URLs, SVG).

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

inspect_doc_structureA

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)

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_doc call.

HEADER/FOOTER WORKFLOW: For ordinary header/footer text, use update_doc_headers_footers. If you need low-level segment editing, call this tool first and use the real segment_id values returned under headers/footers. Do not invent IDs.

The detailed output includes elements[].start_index and elements[].end_index with text_preview for each paragraph, making it easy to identify which ranges to format.

ParametersJSON Schema
NameRequiredDescriptionDefault
user_google_emailYesUser's Google email address
document_idYesID of the document to inspect
detailedNoWhether to return detailed structure information
tab_idNoOptional ID of the tab to inspect. If not provided, inspects main document.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description fully discloses the tool's read-only nature and details of its output fields (e.g., total_length, tables, headers). It also warns against inventing segment IDs, adding important behavioral context beyond what annotations would cover.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured with sections, bullet points, and a workflow format, making it easy to scan. However, it is somewhat verbose and could be trimmed (e.g., repeated emphasis on calling before table creation).

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity and the presence of an output schema, the description thoroughly covers all aspects: purpose, usage, output fields, and workflows. It leaves no obvious gaps for an agent to understand how to use the tool effectively.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

While schema coverage is 100% and parameters are described clearly, the description adds value by explaining when to use the `detailed` parameter (e.g., in formatting workflow) and how `tab_id` affects output. This goes beyond the schema definitions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool is for 'finding safe insertion points and understanding document structure' and lists specific use cases like finding table insertion indices and locating existing tables. It distinguishes itself from siblings by focusing on structure inspection for table operations.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides explicit guidance on when to use the tool: before table creation, during formatting workflows, and for header/footer editing. It contrasts with `update_doc_headers_footers` for normal header/footer usage and includes step-by-step workflows for table insertion and formatting.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_calendarsA

List every calendar the user owns or has access to.

Use this to discover calendar IDs before calling get_events, manage_event, or create_calendar โ€” calendar IDs (not names) are what those tools require. The user's main calendar is always addressable as "primary". Requires the calendar.readonly OAuth scope.

ParametersJSON Schema
NameRequiredDescriptionDefault
user_google_emailYesThe user's Google email address (authenticated account).

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.1/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations provided, so the description carries the burden. It mentions the OAuth scope required and the 'primary' alias, but lacks details on pagination, filtering, or any side effects (though none expected). Adequate but not thorough.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three efficient sentences with the purpose first, followed by usage context and OAuth requirement. No wasted words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the output schema exists, the description doesn't need return details. It covers purpose, usage, OAuth scope, and the 'primary' alias. Complete for a simple list tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% for the single parameter 'user_google_email,' and the description adds no additional meaning beyond the schema's description. Baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states 'List every calendar the user owns or has access to' with a specific verb and resource. It distinguishes from siblings by explaining its role in providing calendar IDs for other tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly says 'Use this to discover calendar IDs before calling get_events, manage_event, or create_calendar,' providing clear when-to-use guidance. It does not list when not to use, but the positive guidance is strong.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_contact_groupsA

List contact groups (labels) visible to the user.

Contact groups are the "labels" you see in Google Contacts sidebar (e.g. "Family", "Starred"). Use this to discover group IDs for get_contact_group or manage_contact_group. Requires the contacts.readonly OAuth scope.

ParametersJSON Schema
NameRequiredDescriptionDefault
user_google_emailYesThe user's Google email address (authenticated account).
page_sizeNoMax groups per page. 1-1000. Default 100.
page_tokenNoCursor from a prior response's "Next page token" line.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations provided, so description carries full burden. Mentions required OAuth scope and visibility to user. Does not describe pagination behavior or output structure; relies on schema for parameters.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences with no fluff. Front-loaded with purpose, followed by explanation and usage hint. Every sentence adds value.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Covers purpose, usage, and scope. With output schema present, return values are assumed documented. Could mention that output is a list of group objects, but overall adequate for a list tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so parameters are well-documented in schema. Description adds no additional meaning for parameters beyond what schema provides.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Clearly states purpose: list contact groups (labels). Distinguishes from siblings get_contact_group and manage_contact_group by specifying it's for discovering group IDs. Provides concrete examples ('Family', 'Starred').

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly advises use to discover group IDs for other tools. Implicitly indicates not to use if you already have the ID. Lacks explicit 'when not to use' but provides clear context.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_contactsA

List the authenticated user's personal Google contacts.

Returns contacts from "people/me" connections. For contact groups use list_contact_groups. For a fuzzy name/email search use search_contacts. For batch mutations use manage_contacts_batch. Requires the contacts.readonly OAuth scope.

ParametersJSON Schema
NameRequiredDescriptionDefault
user_google_emailYesThe user's Google email address (authenticated account).
page_sizeNoMax contacts per page. 1-1000. Default 100.
page_tokenNoCursor from a prior response's "Next page token" line. Omit for first page.
sort_orderNo"LAST_MODIFIED_ASCENDING", "LAST_MODIFIED_DESCENDING", "FIRST_NAME_ASCENDING", or "LAST_NAME_ASCENDING".

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Though no annotations exist, the description clarifies the data source (people/me) and OAuth scope. Implied read-only operation, but does not explicitly mention pagination behavior or other nuances. Absence of annotations makes description carry full burden; it adequately covers key behavioral aspects.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three concise sentences: purpose, alternative tools, and scope requirement. No extraneous information, well-structured and front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's simplicity, with an output schema and fully described parameters, the description provides all essential context: purpose, usage guidance, and authentication requirements. No significant gaps.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so parameters are well-documented in the schema. The description adds context that contacts are personal and from the authenticated user, which supplements the parameter meaning beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states it lists the authenticated user's personal Google contacts from 'people/me', distinguishing it from sibling tools like list_contact_groups (groups), search_contacts (fuzzy search), and manage_contacts_batch (batch mutations).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly provides when to use this tool vs alternatives, referencing sibling tools by name. Also specifies the required OAuth scope, setting clear usage context.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_deploymentsA

List all deployments (versioned snapshots) of an Apps Script project.

Deployments are how Apps Script exposes a script as a web app, API executable, add-on, or library. For managing deployments use manage_deployment; for code versions use list_versions. Requires the script.deployments.readonly OAuth scope.

ParametersJSON Schema
NameRequiredDescriptionDefault
user_google_emailYesThe user's Google email address (authenticated account).
script_idYesTarget project ID.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden. It discloses the required OAuth scope ('script.deployments.readonly'), indicating a read-only operation. However, it does not mention potential pagination or error handling for invalid script IDs, which are minor gaps.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is four sentences, each serving a distinct purpose: main action, definition, sibling guidance, and auth requirement. No fluff, well-structured, and front-loaded with the key purpose.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple list tool with an output schema and clear parameters, the description covers the purpose, the concept of deployments, sibling differentiation, and auth. No missing elements.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% with descriptions for both parameters. The description adds no additional meaning beyond the schema, so it's at the baseline of 3.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states 'List all deployments (versioned snapshots) of an Apps Script project,' providing a specific verb and resource. It distinguishes itself from sibling tools by mentioning 'manage_deployment' for management and 'list_versions' for code versions.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly directs when to use this tool vs alternatives: 'For managing deployments use manage_deployment; for code versions use list_versions.' This provides clear usage context and avoids confusion.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_docs_in_folderA

List all Google Docs (native application/vnd.google-apps.document) that live directly inside a given Drive folder.

Use this when you want to enumerate Docs inside a known folder (e.g., a team drive subfolder). For name-based search across the whole Drive, use search_docs. For non-Doc files (Sheets, Slides, PDFs, etc.) in the folder, use list_drive_items or search_drive_files.

Only direct children are returned โ€” subfolders are NOT recursed. Shared drives are supported via supportsAllDrives=True + includeItemsFromAllDrives=True. Trashed docs are excluded.

Requires OAuth scope: https://www.googleapis.com/auth/drive.readonly (or broader drive scope).

ParametersJSON Schema
NameRequiredDescriptionDefault
user_google_emailYesThe user's Google email address. Required.
folder_idNoDrive folder ID (the string after `/folders/` in the folder URL). Defaults to `"root"` which is the user's My Drive root. For shared drives, pass the shared-drive ID. Passing an invalid or inaccessible folder ID returns "No Google Docs found" (Drive treats missing folders as an empty set rather than raising an error in most cases).root
page_sizeNoMaximum number of docs to return. Defaults to 100. Google's hard cap is 1000. No pagination token is exposed โ€” raise this value if a folder may contain more docs.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Describes non-obvious behaviors: only direct children returned, trashed excluded, shared drive flags needed, and error handling for invalid folders. No annotations were provided, so description carries full burden and meets it.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Concise, front-loaded with purpose, then usage, behavior, auth. Every sentence adds value without repetition.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Covers scope, alternatives, recursion, shared drives, trashed items, auth scope, and error behavior. Output schema exists so return details not needed. Complete for this tool's complexity.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, and schema already has detailed descriptions for each parameter (e.g., folder_id explains default, shared drives, error). Description does not add further parameter details, but baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Clearly states 'list all Google Docs directly inside a given Drive folder', specifying verb, resource type, and scope. Distinguishes from siblings like search_docs and list_drive_items by stating when to use each.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly tells when to use (enumerate Docs in known folder) and when not to, naming alternatives (search_docs for name search, list_drive_items for non-Docs). Also explains no recursion and shared drive support.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_doc_tabsA

List all tabs in a Google Doc, including nested child tabs, as a flat tree.

Google Docs tabs (launched Oct 2024) let a single document contain multiple sub-documents organized hierarchically. Most doc-editing tools need a tab_id to target a specific tab โ€” call this first to discover IDs, titles, and the tab hierarchy. Returned tabs preserve document order; indentation in the output indicates nesting depth (child tabs shown under their parent).

Requires OAuth scope: https://www.googleapis.com/auth/documents.readonly (or broader). Read-only.

ParametersJSON Schema
NameRequiredDescriptionDefault
user_google_emailYes
document_idYesGoogle Docs document ID (from the URL after `/document/d/`).

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Describes output format (flat tree with indentation for nesting), document order, and read-only nature. Specifies OAuth scope. No annotations provided, so description carries the burden adequately.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Description is three paragraphs, front-loaded with key purpose. Some redundancy but overall efficient and well-structured.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Covers purpose, usage, scope, and hierarchy representation adequately for a list tool. Has output schema, so return structure not required. Minor omissions like handling of empty documents, but still complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Input schema has 2 parameters with only 50% schema description coverage. Description does not add details about 'user_google_email' or further clarify 'document_id' beyond what's in schema. Fails to compensate for low coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Clearly states 'List all tabs in a Google Doc, including nested child tabs, as a flat tree.' Explains purpose for discovering IDs, titles, and hierarchy. Distinguishes from sibling tools that require a tab_id.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly says 'call this first to discover IDs, titles, and the tab hierarchy.' Provides context for when to use. Lacks explicit when-not-to-use, but guidance is clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_document_commentsC

List all comments from a Google Document.

ParametersJSON Schema
NameRequiredDescriptionDefault
user_google_emailYes
document_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description lacks behavioral details beyond the brief 'List all comments.' No annotations are present. It does not disclose whether the operation is read-only, whether it requires specific permissions, whether comments include replies or resolved comments, or whether there are rate limits or pagination.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, concise sentence with no unnecessary words. It is front-loaded and delivers the core purpose immediately.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the absence of annotations and low schema coverage, the description is too sparse. It does not explain how to obtain the required document_id, what the output format entails (despite an output schema existing), or edge cases like documents with no comments. The context from sibling tools suggests a rich set of comment management features, but this tool's description offers minimal support for an AI agent to use it effectively.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters1/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema provides two parameters (user_google_email and document_id) with no description coverage (0%). The tool description does not explain the meaning or purpose of these parameters, leaving the agent to infer from names alone. This is insufficient for correct invocation.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description explicitly states 'List all comments from a Google Document,' specifying the verb 'list' and the resource 'comments from a Google Document.' This clearly differentiates the tool from siblings like list_spreadsheet_comments and list_presentation_comments, which operate on different Google Workspace document types.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is provided on when to use this tool versus alternatives like manage_document_comment (which may add or delete comments). There is no mention of prerequisites, contexts, or scenarios where listing comments is appropriate or inappropriate.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_drive_itemsA

List files in one Drive folder (children of folder_id).

Use this to browse by folder; for content-based search use search_drive_files. Scoped to a folder's direct children. If drive_id is set, folder_id is interpreted inside that shared drive. Requires the drive.readonly OAuth scope.

ParametersJSON Schema
NameRequiredDescriptionDefault
user_google_emailYesThe user's Google email address (authenticated account).
folder_idNoFolder ID to list. "root" = My Drive root. For a shared drive, pass the drive ID to list its root or a folder ID within it. Default "root".root
page_sizeNoMax items returned, 1-1000. Default 100.
page_tokenNoCursor from a prior response's `nextPageToken`.
drive_idNoShared drive ID to scope the listing. Omit for My Drive + shared-with-me.
include_items_from_all_drivesNoTrue (default) to include shared drive items when drive_id is omitted.
corporaNo"user", "drive", or "allDrives". Defaults to "drive" when drive_id is set.
file_typeNoFriendly alias ("folder", "doc", "sheet", "slides", "pdf", etc.) or raw MIME type. Filters to that type only.
detailedNoTrue (default) includes size, modified time, webViewLink; False returns just name/ID/type.
order_byNoComma-separated sort keys with optional " desc", e.g. "folder,modifiedTime desc". Valid keys: createdTime, folder, modifiedByMeTime, modifiedTime, name, name_natural, quotaBytesUsed, recency, sharedWithMeTime, starred, viewedByMeTime.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Without annotations, the description provides good behavioral context: read-only operation (drive.readonly scope), lists direct children, and shared drive behavior. It could mention pagination implicitly but parameters cover it.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is four concise sentences, front-loaded with core purpose, followed by usage guidance, scope clarification, and authentication. Every sentence adds value.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity (10 parameters, 1 required), the description covers use case, alternatives, scope, and authentication. Output schema exists, so return values need not be described.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so baseline is 3. The description adds high-level context (folder_id as main parameter, drive_id interaction) but mostly repeats schema info.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb "List" and the resource "files in one Drive folder (children of folder_id)". It distinguishes from sibling tool "search_drive_files" and specifies the scope (direct children) and shared drive interpretation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly states when to use this tool (browse by folder) and when to use the alternative (search_drive_files for content-based search). It also covers scope and OAuth scope requirement.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_form_responsesA

List submitted responses for a Google Form with basic metadata (response IDs, timestamps, answer counts). Paginated.

Use this to discover response IDs and submission times, then call get_form_response with a specific responseId to pull the full answer payload. For the form's structure (questions, options), use get_form.

Requires OAuth scope: https://www.googleapis.com/auth/forms.responses.readonly.

ParametersJSON Schema
NameRequiredDescriptionDefault
user_google_emailYesThe user's Google email address. Required.
form_idYesThe form ID โ€” the string after `/forms/d/` in the edit URL.
page_sizeNoMaximum number of responses per page. Defaults to 10. Google's hard cap is 5000; practical cap depends on response payload size. Use smaller values (10โ€“100) for UI-facing calls and larger (500โ€“5000) for batch export.
page_tokenNoOpaque token from a prior call's `Next page token` line. Omit to fetch the first page. Tokens are one-shot โ€” never reuse the same token across sessions.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations provided, so description carries full burden. It correctly identifies as a read operation (OAuth read scope). Mentions pagination and basic metadata. Could be improved by noting it only returns submitted responses and any rate limits, but still good.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Concise, front-loaded with main purpose, then usage flow, then auth. Every sentence adds value. No fluff.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given 4 parameters, output schema present, the description covers purpose, usage guidance, pagination, auth, and integration with siblings. No gaps.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so baseline is 3. Description adds value by explaining page_size caps and default, page_token one-shot nature, and required OAuth scope, going beyond schema descriptions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Clearly states it lists form responses with basic metadata (response IDs, timestamps, answer counts) and is paginated. Distinguished from sibling tools like get_form_response (full payload) and get_form (structure).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly guides to use this for discovery of response IDs and timestamps, then use get_form_response for full details, and get_form for form structure. Provides clear when-to-use and when-not-to-use.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_gmail_filtersA

List every server-side Gmail filter configured on the mailbox.

Filters auto-apply actions (label, forward, archive) to incoming mail matching their criteria. Use this to audit or discover filter IDs before calling manage_gmail_filter for delete. Requires the gmail.settings.basic OAuth scope.

ParametersJSON Schema
NameRequiredDescriptionDefault
user_google_emailYesThe user's Google email address (authenticated account).

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries full burden. It implies read-only behavior via 'List', mentions OAuth scope, but does not disclose pagination, rate limits, or exact behavior beyond listing. Adequate but not detailed.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences: first states purpose, second gives context about filters, third provides usage guidance and scope. No fluff, well-structured and front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the output schema exists, the description adequately covers purpose, usage context, and scope. Could mention if all filters are returned or if there is pagination, but overall sufficient for a list tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the description adds no extra meaning. Baseline 3 is appropriate as the schema already describes the parameter adequately.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('List') and resource ('server-side Gmail filters'). It differentiates from sibling tools like manage_gmail_filter and list_gmail_labels by specifying filters and use for audit/discovery.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides explicit guidance to use before calling manage_gmail_filter for delete, and mentions required OAuth scope. Does not explicitly state when not to use, but context is clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_gmail_labelsA

List every label in the user's mailbox, split system vs user.

Use this to discover label IDs before calling modify_gmail_message_labels / batch_modify_gmail_message_labels / manage_gmail_filter โ€” label IDs (not names) are what those tools require. Requires the gmail.readonly OAuth scope.

ParametersJSON Schema
NameRequiredDescriptionDefault
user_google_emailYesThe user's Google email address (authenticated account).

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, description carries full burden. It discloses that it lists all labels, splits them by type, and requires readonly scope. It doesn't address pagination or rate limits, but for a simple list operation with output schema present, this is sufficient.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, no fluff. First sentence states purpose, second gives usage context. Every sentence earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple list tool with one parameter and an output schema, the description fully covers purpose, usage context, and prerequisites. No additional details needed.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Only one parameter (user_google_email) with 100% schema coverage. Description adds no extra semantics beyond schema; baseline of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description clearly states it 'list every label in the user's mailbox, split system vs user.' This is a specific verb+resource pair, distinguishing it from sibling tools like manage_gmail_label which modify labels.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly states use case: 'Use this to discover label IDs before calling modify_gmail_message_labels / batch_modify_gmail_message_labels / manage_gmail_filter โ€” label IDs (not names) are what those tools require.' Also notes required OAuth scope, providing clear guidance on when to apply.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_presentation_commentsC

List all comments from a Google Presentation.

ParametersJSON Schema
NameRequiredDescriptionDefault
user_google_emailYes
presentation_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

C2.7/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations present, the description must fully disclose behavioral traits, but it only states the basic action. It does not mention whether the operation is read-only, requires authentication, handles pagination, or what happens on errors.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single sentence, making it concise but overly terse. It sacrifices completeness for brevity, lacking essential details.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Despite having an output schema (which may document return values), the description is incomplete. It does not clarify what 'all comments' includes (e.g., replies, metadata) or any usage context. For a simple list tool, at least parameter descriptions are expected.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters1/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% and the description does not explain the meaning or purpose of the two required parameters (user_google_email, presentation_id). The tool fails to add any value beyond the raw schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses the specific verb 'list' and resource 'comments from a Google Presentation', clearly identifying the tool's function. It is distinct from sibling tools like list_document_comments by explicitly mentioning presentations.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives such as list_document_comments or manage_presentation_comment. No context about prerequisites or use cases is given.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_script_processesA

List recent Apps Script executions (across all scripts or one).

Useful for debugging failed runs or auditing triggered executions. Reports function name, status, start time, and duration per process. Requires the script.processes.readonly OAuth scope.

ParametersJSON Schema
NameRequiredDescriptionDefault
user_google_emailYesThe user's Google email address (authenticated account).
page_sizeNoMax processes to return. Default 50.
script_idNoOptional โ€” scope to a single project's executions. Omit for all accessible scripts.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description fully discloses the reported fields (function name, status, start time, duration) and required OAuth scope, giving adequate behavioral context.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Four concise sentences, each adding value: purpose, use case, reported fields, and scope requirement. No wasted words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the output schema exists, the description adequately covers purpose, use case, and output fields. Requires no additional context for a list tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% so baseline is 3; description adds marginal value by listing output fields but does not further clarify parameters.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('List') and resource ('Apps Script executions'), and clearly states the scope ('across all scripts or one'), making it distinct from sibling list tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides clear use cases ('debugging failed runs or auditing triggered executions') but does not explicitly mention when not to use or compare alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_script_projectsA

Find Apps Script projects by scanning the user's Drive.

Uses Drive API search (mimeType='application/vnd.google-apps.script') because the Apps Script API has no list endpoint of its own. For content of a specific script use get_script_project or get_script_content. Requires the drive.readonly OAuth scope.

ParametersJSON Schema
NameRequiredDescriptionDefault
user_google_emailYesThe user's Google email address (authenticated account).
page_sizeNoMax projects per page. Default 50; Drive cap 1000.
page_tokenNoCursor from a prior response's pagination token.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations provided, but description explains the underlying mechanism (Drive API search with specific mimeType) and the required OAuth scope. This compensates for lack of annotations, though no mention of pagination limits or performance.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Four sentences, front-loaded with purpose. No redundant information; every sentence adds value (purpose, reason for approach, alternatives, scope requirement).

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given that an output schema exists, the description does not need to explain return values. It covers purpose, underlying method, alternatives, and auth requirements, making it fully informative for a list tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so baseline is 3. Description does not add per-parameter details beyond schema, but explains the overall Drive API approach, which provides context. No additional semantic value for individual parameters.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description starts with a clear verb-resource pair ('Find Apps Script projects') and distinguishes from sibling tools like get_script_project and get_script_content by stating its scope (scanning Drive vs content retrieval).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly states why this tool is used (no native list endpoint in Apps Script API) and points to alternatives for content (get_script_project/get_script_content). Does not explicitly list when not to use, but the context is sufficient. Also notes required OAuth scope.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_sheet_tablesA

List all structured tables (native Sheets tables) in a spreadsheet.

A "table" here is the newer native Sheets Table feature, not any bounded range. Use this to discover table_id before calling append_table_rows. Requires the spreadsheets.readonly OAuth scope.

ParametersJSON Schema
NameRequiredDescriptionDefault
user_google_emailYesThe user's Google email address (authenticated account).
spreadsheet_idYesTarget spreadsheet ID.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations provided, so description carries full burden. It implies read-only behavior via 'list' and mentions the OAuth scope, but does not disclose potential limitations like pagination, rate limits, or behavior when no tables exist. Adequate but not comprehensive.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three concise sentences: first for core purpose, second for clarification, third for usage guidance and scope. No unnecessary words, well structured and front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Tool is simple with only 2 required parameters and an output schema present. Description covers purpose, usage hint, and scope. Could briefly mention that output is a list of tables, but the existence of output schema makes this acceptable. Overall sufficient.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Input schema has 100% description coverage, so schema itself fully documents parameters. Description adds no extra semantic detail beyond the schema, meeting baseline but not exceeding.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description clearly states it lists all structured tables (native Sheets tables) in a spreadsheet, distinguishing them from bounded ranges. It also notes the primary use case of discovering table_id for append_table_rows, making the purpose highly specific and actionable.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly tells when to use the tool (to discover table_id before append_table_rows) and notes the required OAuth scope. However, it does not mention when not to use or provide alternatives, slightly limiting completeness.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_spacesA

List Google Chat spaces (rooms and direct messages) the authenticated user is a member of.

Use this to discover the space_id (in spaces/<id> format) needed for get_messages, send_message, and related Chat tools. The user only sees spaces they have joined โ€” this will not surface public spaces in the workspace they haven't joined.

Requires OAuth scope: https://www.googleapis.com/auth/chat.spaces.readonly (read-only).

ParametersJSON Schema
NameRequiredDescriptionDefault
user_google_emailYesThe user's Google email address. Required.
page_sizeNoMaximum number of spaces to return in one call. Defaults to 100; Google's hard cap is 1000. No pagination token is exposed by this tool โ€” request a larger page_size if a user is in more than 100 spaces.
space_typeNoFilter by space type. One of: - `"all"` (default): both rooms and direct messages - `"room"`: multi-member named spaces (`SPACE`) - `"dm"`: 1:1 or group direct messages (`DIRECT_MESSAGE`) Any other value is treated as `"all"`.all

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Discloses read-only nature via OAuth scope, notes no pagination token is exposed, and explains scope of results (only joined spaces). No annotations exist, so description carries full burden and meets it well.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Five sentences, each adding unique value. Front-loaded with purpose. No redundancy or unnecessary verbosity.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Covers purpose, usage, limitations, auth, and parameter details. Given the presence of an output schema (context signal), describing return values is unnecessary. Complete for a listing tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Adds meaningful context beyond the schema: explains page_size default and Google hard cap, details space_type filter options, and notes pagination limitation. Schema coverage is 100% but description enhances understanding.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Clearly states 'List Google Chat spaces' with specific verb and resource. Distinguishes from sibling tools by explaining its role in discovering space_id for get_messages, send_message, etc.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly tells when to use ('discover the space_id needed for get_messages, send_message') and what it cannot do ('will not surface public spaces the user hasn't joined').

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_spreadsheet_commentsC

List all comments from a Google Spreadsheet.

ParametersJSON Schema
NameRequiredDescriptionDefault
user_google_emailYes
spreadsheet_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

C2.6/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, and the description does not disclose behavioral traits like pagination, rate limits, authentication requirements, or performance considerations for large spreadsheets. The agent is left unaware of these aspects.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single concise sentence. It is appropriately short but could be structured to include parameter hints or usage context. No waste, but also no enhancement.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's simplicity, the description does not provide contextual details like the scope of 'all comments', potential limitations, or relationship to output schema. It feels incomplete for an production tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters1/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has two parameters with no descriptions, and the tool description does not mention them or add any semantic meaning. Schema description coverage is 0%, so the description fails to compensate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb 'List' and resource 'comments from a Google Spreadsheet', indicating the tool returns all comments. The name distinguishes it from sibling tools like 'list_document_comments' and 'list_presentation_comments', but no explicit differentiation is provided.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is given on when to use this tool versus alternatives, such as 'manage_spreadsheet_comment' or other listing tools. The description lacks any context for usage decisions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_spreadsheetsA

List accessible Google Sheets spreadsheets (most-recently-modified first).

Use this as a discovery step when the user only has a spreadsheet name โ€” the returned ID feeds get_spreadsheet_info, read_sheet_values, etc. For a broader Drive search by name use search_drive_files with file_type="sheet". Requires the drive.readonly OAuth scope.

ParametersJSON Schema
NameRequiredDescriptionDefault
user_google_emailYesThe user's Google email address (authenticated account).
max_resultsNoMax spreadsheets to return. Default 25.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries full responsibility. It discloses sorting order, required OAuth scope (drive.readonly), and that the returned ID feeds other tools. It does not detail pagination or exact output, but an output schema exists. It could be more explicit about 'accessible' meaning spreadsheets the user has access to, but overall is transparent.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences long, front-loaded with the key purpose and ordering, then use case, alternative, and scope. Every sentence adds value, with no wasted words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple list tool with two parameters and an output schema, the description is complete. It covers purpose, usage guidelines, behavioral traits (ordering, scope), and provides an alternative. No gaps are apparent.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so both parameters are described in the schema. The description adds no additional information about the parameters beyond what the schema provides. Baseline 3 is appropriate as the schema does the heavy lifting.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states 'List accessible Google Sheets spreadsheets' with ordering 'most-recently-modified first', clearly specifying the verb and resource. It distinguishes from the sibling tool search_drive_files by mentioning that for a broader search by name, the sibling should be used.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly says 'Use this as a discovery step when the user only has a spreadsheet name', providing when to use the tool. It also gives an alternative: 'For a broader Drive search by name use search_drive_files with file_type="sheet"', offering clear when-not and alternative guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_task_listsA

List the user's Google Tasks task lists.

Use this to discover task_list_id before calling list_tasks, get_task, or manage_task. Every user has a default list ("My Tasks"). For modifying task lists themselves use manage_task_list. Requires the tasks.readonly OAuth scope.

ParametersJSON Schema
NameRequiredDescriptionDefault
user_google_emailYesThe user's Google email address (authenticated account).
max_resultsNoMax lists per page. Default/cap 1000.
page_tokenNoCursor from a prior response's "Next page token" line.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations provided, so description carries full burden. It discloses the required read-only scope ('Requires the tasks.readonly OAuth scope') and implies the operation is safe. However, does not mention pagination behavior beyond schema fields.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Four sentences, each adding value: purpose, usage flow, sibling differentiation, and auth requirement. Front-loaded with the action. No redundant information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's simplicity and presence of an output schema, this description covers all necessary context: what it does, why to use it, alternatives, and auth. Completes the picture for an AI agent to select and invoke correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, baseline is 3. Description adds context for output but does not enhance parameter meanings beyond the schema descriptions. The mention of 'discover task_list_id' hints at output but not parameter usage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states 'List the user's Google Tasks task lists' with a specific verb and resource. It distinguishes from siblings by mentioning 'list_tasks' and 'manage_task_list', making the tool's purpose unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly says 'Use this to discover task_list_id before calling list_tasks, get_task, or manage_task' and 'For modifying task lists themselves use manage_task_list', providing clear when-to-use and when-not-to guidance. Also mentions required OAuth scope.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_tasksA

List tasks in one task list, with rich filters and auto-pagination.

Auto-paginates internally to fill up to max_results. For one specific task use get_task. For write operations use manage_task. Completed tasks from the web UI / mobile apps are "hidden" by default โ€” to see them set both show_completed=True AND show_hidden=True. Requires the tasks.readonly OAuth scope.

ParametersJSON Schema
NameRequiredDescriptionDefault
user_google_emailYesThe user's Google email address (authenticated account).
task_list_idYesTask list ID from list_task_lists.
max_resultsNoCap on tasks returned across all pages. Default varies; hard cap 10000.
page_tokenNoResume cursor from a prior call's "Next page token".
show_completedNoInclude completed tasks. Default True.
show_deletedNoInclude deleted tasks. Default False.
show_hiddenNoInclude tasks hidden from the UI (required alongside show_completed to see web/mobile-completed tasks). Default False.
show_assignedNoInclude tasks assigned to the user. Default False.
completed_maxNoRFC3339 upper bound on completion date.
completed_minNoRFC3339 lower bound on completion date.
due_maxNoRFC3339 upper bound on due date. Auto-adjusted to include the boundary date's tasks.
due_minNoRFC3339 lower bound on due date.
updated_minNoRFC3339 lower bound on last-modified time โ€” useful for incremental sync.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description fully explains auto-pagination behavior, the hidden completed tasks nuance requiring both show_completed and show_hidden, and the required OAuth scope. This goes beyond basic functionality.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is very concise, with two short paragraphs front-loading the purpose. Every sentence provides essential information with no redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the complexity (13 parameters, filters, pagination), the description covers key behavioral aspects: auto-pagination, hidden tasks quirk, OAuth scope, and sibling differentiation. It doesn't detail date filters, but schema descriptions cover them, and output schema exists for return values.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so baseline is 3. The description adds crucial context beyond schema, particularly the show_completed/show_hidden interaction and auto-pagination. This elevates the score above baseline.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool lists tasks in one task list with rich filters and auto-pagination. It distinguishes from sibling tools get_task and manage_task, and specifies the required OAuth scope.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly guides when to use this tool vs alternatives: 'For one specific task use get_task. For write operations use manage_task.' Also provides a specific caveat about hidden completed tasks and scope requirement.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_versionsA

List all versions (immutable snapshots) of an Apps Script project.

Versions are the snapshots that deployments reference. Created automatically when you deploy, or manually via create_version. For deployments use list_deployments. Requires the script.projects readonly OAuth scope.

ParametersJSON Schema
NameRequiredDescriptionDefault
user_google_emailYesThe user's Google email address (authenticated account).
script_idYesTarget project ID.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, description bears full burden. It explains versions are immutable snapshots, requires readonly scope, and mentions automatic or manual creation. Does not detail pagination or order, but adequate for a read-only list operation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Four sentences, front-loaded with purpose. Every sentence provides value: definition, relationship to deployments, sibling reference, and authorization. No waste.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given output schema exists, return values are covered. Description explains version concepts, creation methods, and scope. Complete for a simple list tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema has 100% description coverage, so baseline is 3. Description does not add extra parameter-level meaning beyond scope info. No improvement over schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Clearly states the tool lists all versions of an Apps Script project, with specific verb and resource. Differentiates from sibling list_deployments by explaining versions are snapshots referenced by deployments.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides explicit guidance on when to use this tool (to list versions) and when to use alternatives (list_deployments for deployments). Also mentions the required readonly OAuth scope, aiding correct invocation.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

manage_conditional_formattingA

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

ParametersJSON Schema
NameRequiredDescriptionDefault
user_google_emailYesThe user's Google email address. Required.
spreadsheet_idYesThe ID of the spreadsheet. Required.
actionYesThe operation to perform. Must be one of "add", "update", or "delete".
range_nameNoA1-style range (optionally with sheet name). Required for "add". Optional for "update" (preserves existing ranges if omitted). Not used for "delete".
condition_typeNoSheets condition type (e.g., NUMBER_GREATER, TEXT_CONTAINS, DATE_BEFORE, CUSTOM_FORMULA). Required for "add". Optional for "update" (preserves existing type if omitted).
condition_valuesNoValues for the condition; accepts a list or a JSON string representing a list. Depends on condition_type. Used by "add" and "update".
background_colorNoHex background color to apply when condition matches. Used by "add" and "update".
text_colorNoHex text color to apply when condition matches. Used by "add" and "update".
rule_indexNo0-based index of the rule. For "add", optionally specifies insertion position. Required for "update" and "delete".
gradient_pointsNoList (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".
sheet_nameNoSheet name to locate the rule when range_name is omitted. Defaults to the first sheet. Used by "update" and "delete".

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.7/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden. It states the tool 'manages' rules but does not disclose behavioral details such as permission requirements, side effects, or limitations. The description is truthful but lacks depth.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, front-loaded sentence that efficiently communicates the tool's purpose and supported operations with no wasted words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity (multiple actions, 11 parameters) and the presence of an output schema, the description is minimal. It covers the basic purpose but does not explain how actions interrelate or provide context about rule indices and priorities. It is adequate but not comprehensive.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

All 11 parameters have descriptions in the input schema (100% coverage), so the description does not need to add parameter-specific info. It provides a general overview but no additional semantic value beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool manages conditional formatting rules and specifies the supported actions (add, update, delete). It distinguishes itself from sibling tools like format_sheet_range by focusing on rule management rather than direct range formatting.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explains the tool covers adding, updating, and deleting conditional formatting rules, but lacks explicit guidance on when to use this tool versus alternatives or when not to use it. No exclusions or context-specific recommendations are provided.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

manage_contactB

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

ParametersJSON Schema
NameRequiredDescriptionDefault
user_google_emailYesThe user's Google email address. Required.
actionYesThe action to perform: "create", "update", or "delete".
contact_idNoThe contact ID. Required for "update" and "delete" actions.
given_nameNoFirst name (for create/update).
family_nameNoLast name (for create/update).
phonesNoList 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 standalone number without + prefix, displayed as "Internal: 250".
emailsNoList of email dicts {address, type?}.
organizationsNoList of org dicts {name?, title?, department?, jobDescription?, type?}.
notesNoAdditional notes (for create/update).
addressNoStreet address (for create/update).
phones_modeNoHow 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. remove = delete phones matching provided numbers.merge
emails_modeNoHow to update emails on "update": "merge" (default), "replace", or "remove".merge
organizations_modeNoHow to update orgs on "update": "merge" (default), "replace", or "remove".merge
phoneNo[DEPRECATED] Single phone number. Use phones=[{"number":..., "type":"mobile"}].
emailNo[DEPRECATED] Email address. Use emails=[{"address":..., "type":"other"}].
organizationNo[DEPRECATED] Company name. Use organizations=[{"name":...}].
job_titleNo[DEPRECATED] Job title. Use organizations=[{"title":...}].

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.2/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description must disclose behavioral traits. It does not mention side effects (e.g., irreversible changes), required permissions, or rate limits. The schema shows update modes, but the description lacks this context, leaving the agent unaware of nondestructive versus destructive update behaviors.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is extremely concise with two sentences that front-load the core action and consolidation context. Every sentence earns its place without fluff.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool has 17 parameters and an output schema, a two-sentence description is inadequate. It omits critical context such as required conditions for update/delete, update modes, and differentiation from batch operations. The description does not sufficiently equip an agent to handle the tool's complexity.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the schema itself documents all parameters. The description adds no additional meaning beyond the already detailed schema. A score of 3 is appropriate as the baseline for high coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states it creates, updates, or deletes a contact and explicitly positions itself as a consolidated replacement for three prior tools. This makes the purpose unambiguous and distinguishes it from other contact-related tools like get_contact or list_contacts.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description does not provide any guidance on when to use this tool versus alternatives such as manage_contacts_batch or search_contacts. It only mentions it replaces older tools, which is helpful but insufficient for selecting the right contextual tool.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

manage_contact_groupA

Create, update, delete, or modify members of a contact group.

Side effects: create/update/delete mutates the group itself; modify_members shifts contact membership without deleting contacts (unless action="delete" with delete_contacts=True). For reading use list_contact_groups / get_contact_group. Requires the contacts OAuth scope.

ParametersJSON Schema
NameRequiredDescriptionDefault
user_google_emailYesThe user's Google email address (authenticated account).
actionYes"create", "update", "delete", or "modify_members".
group_idNoGroup ID (short or "contactGroups/<id>"). Required for update, delete, modify_members.
nameNoNew group display name. Required for create and update.
delete_contactsNoOnly with action="delete". True also deletes contacts inside the group; False (default) keeps them.
add_contact_idsNoFor modify_members โ€” contact IDs to add. Short or "people/<id>"; auto-prefixed.
remove_contact_idsNoFor modify_members โ€” contact IDs to remove.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden. It details side effects for each action, including the nuance of delete_contacts. It also mentions the OAuth scope requirement. It does not cover rate limits or error conditions, but for this context, it is fairly transparent.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is three sentences, front-loaded with purpose, and each sentence serves a distinct function: purpose, side effects, and usage alternatives/auth. No wasted words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity (7 parameters) and the presence of an output schema, the description covers purpose, all action behaviors, deletion nuance, reading alternatives, and auth. It omits error handling and prerequisites beyond auth, but is largely complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the baseline is 3. The description adds marginal value beyond the schema by summarizing actions, but each parameter is already well-described in the schema. No new parameter semantics are provided.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose: 'Create, update, delete, or modify members of a contact group.' It uses specific verbs and specifies the resource (contact group), effectively distinguishing it from sibling tools like list_contact_groups and manage_contact.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly says 'For reading use list_contact_groups / get_contact_group,' providing a clear when-not scenario. However, it doesn't differentiate from sibling mutation tools like manage_contact (individual contacts) or manage_contacts_batch, leaving some ambiguity for the agent.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

manage_contacts_batchA

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

ParametersJSON Schema
NameRequiredDescriptionDefault
user_google_emailYesThe user's Google email address. Required.
actionYesThe action to perform: "create", "update", or "delete".
contactsNoList 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.
updatesNoList of update dicts for "update" action. Each dict must contain contact_id and may contain the same fields as contacts.
contact_idsNoList of contact IDs for "delete" action.
fieldNoFor "update" action โ€” the single People API field to update across all contacts in this batch. Required. Must be one of: names, phoneNumbers, emailAddresses, organizations, biographies, addresses. Using a single field per batch call prevents unintentional data loss from a union updateMask overwriting unrelated fields.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.7/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description must carry the full burden. It only states the purpose and does not disclose behavioral traits such as permissions, atomicity, error handling, or requirements beyond what is in the schema.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences, front-loaded with the core purpose, and contains no unnecessary words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description is brief but adequate given the rich schema; however, it could add a hint about mapping actions to parameters (e.g., contact_ids for delete) or output structure. The replacement note is useful.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so baseline is 3. The description adds no additional meaning to the parameters beyond what the schema already provides.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb (batch create, update, or delete) and resource (contacts), and distinguishes itself from sibling tools by declaring it is a consolidated replacement for three specific tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description mentions it replaces three tools, implying when to use it over them, but does not explicitly compare with singular manage_contact or provide when-not-to-use scenarios.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

manage_deploymentA

Create, update, or delete an Apps Script deployment.

Side effects: create first generates a new version then deploys it (two API calls atomically); delete is destructive. To list existing deployments use list_deployments. For executing code via the API use run_script_function. Requires the script.deployments OAuth scope.

ParametersJSON Schema
NameRequiredDescriptionDefault
user_google_emailYesThe user's Google email address (authenticated account).
actionYes"create", "update", or "delete".
script_idYesTarget project ID.
deployment_idNoExisting deployment ID. Required for update and delete (get from list_deployments).
descriptionNoDeployment description shown in the Apps Script UI. Required for create and update.
version_descriptionNoFor create only โ€” description attached to the auto-created version. Defaults to `description` when omitted.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description fully covers behavioral traits: side effects of create (two API calls atomically) and destructiveness of delete. It also discloses the OAuth scope requirement, going beyond what the schema provides.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise (4 sentences) and front-loaded: first sentence states purpose, second covers side effects, third gives alternatives, fourth notes OAuth. No superfluous words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the complexity (CRUD with side effects and OAuth), the description covers purpose, side effects, alternatives, and authorization. Input schema handles parameters, and an output schema exists (per context), so return values are covered. The description is complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% with clear descriptions for each parameter. The tool description adds no additional parameter-level meaning, so baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states 'Create, update, or delete an Apps Script deployment', providing a specific verb and resource. It distinguishes itself from siblings by explicitly naming list_deployments for listing and run_script_function for execution.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description tells when to use this tool (for CRUD operations on deployments) and when not to (listing via list_deployments, code execution via run_script_function). It also mentions the required OAuth scope, providing clear guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

manage_document_commentA

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
user_google_emailYes
document_idYes
actionYes
comment_contentNo
comment_idNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden. It discloses a key limitation (Drive API cannot anchor comments to specific text) and specifies requirements for each action. However, it omits permission needs, rate limits, error behavior, and idempotency details.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is very concise, using bullet points for clarity. Every sentence is relevant and there is no unnecessary information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the output schema exists, return values are not needed. The description covers the action-specific parameters well and includes a key limitation. However, it lacks details on the required parameters user_google_email and document_id, and could benefit from examples or format constraints.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 0% schema description coverage, the description adds meaning by explaining when comment_content and comment_id are needed for each action. However, it does not explain user_google_email or document_id beyond being required, leaving some parameters underspecified.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool manages comments on a Google Document with three specific actions (create, reply, resolve). It distinguishes from sibling tools like list_document_comments and manage_presentation_comment by focusing on comment management actions.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage when you need to modify document comments but lacks explicit guidance on when to choose this tool over alternatives. No exclusions or alternative tool mentions are provided.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

manage_drive_accessA

Grant, batch-grant, update, revoke, or transfer ownership on a Drive item.

Side effects: all actions mutate permissions; transfer_owner permanently changes the file's owner. Notification emails are sent per send_notification. For read-only inspection use get_drive_file_permissions. Requires the drive.file OAuth scope (or higher for cross-domain transfers).

ParametersJSON Schema
NameRequiredDescriptionDefault
user_google_emailYesThe user's Google email address (authenticated account).
file_idYesDrive file or folder ID.
actionYes"grant", "grant_batch", "update", "revoke", or "transfer_owner".
share_withNoFor "grant" โ€” recipient email (user/group) or domain name (domain). Omit for share_type="anyone".
roleNoFor "grant" (default "reader") and "update": "reader", "commenter", or "writer".
share_typeNoFor "grant": "user", "group", "domain", or "anyone". Default "user".user
permission_idNoRequired for "update" and "revoke". Get it from get_drive_file_permissions.
recipientsNoFor "grant_batch": list of objects with keys email (or domain for domain shares), role, share_type, expiration_time.
send_notificationNoSend the recipient an email. Default True. Applies to grant/grant_batch user/group shares.
email_messageNoCustom body appended to the notification email.
expiration_timeNoRFC3339 deadline ("2026-06-01T00:00:00Z") after which the permission auto-revokes. Applies to grant/update.
allow_file_discoveryNoFor domain/anyone shares, True = indexable in search, False = link-only.
new_owner_emailNoRequired for "transfer_owner". Must be inside the same Workspace domain in most cases.
move_to_new_owners_rootNoAfter transfer, move the file to the new owner's My Drive root. Default False.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden. It discloses that all actions mutate permissions, transfer_owner permanently changes ownership, and notification emails are sent per send_notification. It also notes the OAuth scope requirement. This provides substantial behavioral context beyond the schema.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is composed of five focused sentences, front-loading the core action and then covering side effects, alternatives, and auth requirements. It is efficient but could be slightly more concise by grouping related information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's high complexity (14 parameters) and the presence of an output schema, the description provides a solid overview of functionality, side effects, and usage alternatives. It adequately covers the key behavioral aspects, though it could mention handling of different actions more explicitly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the baseline is 3. The description does not add additional parameter-level meaning beyond the schema definitions, but it does explain side effects and relationships (e.g., send_notification applies to grant/grant_batch). This is adequate but not exceptional.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states 'Grant, batch-grant, update, revoke, or transfer ownership on a Drive item,' providing a specific verb and resource. It distinguishes itself from sibling tools like get_drive_file_permissions (read-only) by explicitly naming an alternative.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description offers explicit guidance by stating 'For read-only inspection use get_drive_file_permissions' and mentions the required OAuth scope. However, it does not fully elaborate on when to choose this tool over other mutation tools like set_drive_file_permissions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

manage_eventA

Create, update, delete, or RSVP to a calendar event.

Side effects: mutates calendar state on the account. Delete is destructive. Attendee email notifications follow send_updates. For read-only fetches use get_events; for focus-time blocks use manage_focus_time. Requires the calendar.events OAuth scope.

ParametersJSON Schema
NameRequiredDescriptionDefault
user_google_emailYesThe user's Google email address (authenticated account).
actionYes"create", "update", "delete", or "rsvp". Case-insensitive.
summaryNoEvent title. Required for create; optional for update.
start_timeNoRFC3339 start, e.g. "2026-05-01T15:00:00-04:00" or "2026-05-01" for all-day. Required for create.
end_timeNoRFC3339 end (exclusive). Required for create.
event_idNoEvent ID from get_events. Required for update, delete, rsvp.
calendar_idNoCalendar ID from list_calendars, or "primary".primary
descriptionNoEvent body text. Supports plain text and some HTML.
locationNoFree-form location string or address.
attendeesNoList of emails (e.g. ["alice@ex.com"]) or attendee objects (e.g. [{"email": "alice@ex.com", "optional": true}]).
timezoneNoIANA zone like "America/New_York". Applied to start/end when they are tz-naive.
attachmentsNoDrive file IDs or sharable URLs โ€” attached as event files visible to attendees.
add_google_meetNoTrue to attach a Meet conference, False on update to remove it.
remindersNoList of reminder objects like [{"method": "popup", "minutes": 10}] or a JSON string of same. Ignored when use_default_reminders=True.
use_default_remindersNoTrue (default on create) to use the calendar's default reminders. Set False to use `reminders`.
transparencyNo"opaque" shows as busy; "transparent" shows as free.
visibilityNo"default", "public", "private", or "confidential".
color_idNoColor index 1-11 (update only); see Calendar color map.
recurrenceNoRFC5545 rules, e.g. ["RRULE:FREQ=WEEKLY;BYDAY=MO,WE;COUNT=10"].
guests_can_modifyNoAllow attendees to edit the event.
guests_can_invite_othersNoAllow attendees to invite more people.
guests_can_see_other_guestsNoAllow attendees to see the guest list.
responseNoRSVP value for action="rsvp" โ€” "accepted", "declined", "tentative", or "needsAction".
rsvp_commentNoOptional note sent with the RSVP.
send_updatesNoRSVP notification behavior โ€” "all" (default), "externalOnly", or "none".

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description fully carries the burden, disclosing side effects ('mutates calendar state', 'Delete is destructive'), attendee notifications, and required scope. This is comprehensive for safe agent usage.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is three sentences, front-loaded with core purpose, followed by side effects and alternatives. Every sentence earns its place with no waste.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given 25 parameters, an output schema, and no annotations, the description provides essential context: purpose, side effects, alternatives, and required scope. It is complete for safe and effective usage.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the schema already documents all parameters. The description adds no additional parameter-specific semantics beyond the action types. Baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose: 'Create, update, delete, or RSVP to a calendar event.' It uses a specific verb and resource, and distinguishes itself from siblings like get_events and manage_focus_time.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly provides when to use this tool vs alternatives: 'For read-only fetches use get_events; for focus-time blocks use manage_focus_time.' It also mentions side effects and required OAuth scope.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

manage_focus_timeA

Create, list, update, or delete Focus Time events.

Focus Time is a special event type that auto-declines conflicting invitations and (by default) sets Google Chat to Do Not Disturb for the duration. Lives on the primary calendar only. For regular events use manage_event; for OOO use manage_out_of_office. Side effects: mutating actions may auto-decline existing/incoming invites and flip chat presence. Requires the calendar.events OAuth scope.

ParametersJSON Schema
NameRequiredDescriptionDefault
user_google_emailYesThe user's Google email address (authenticated account).
actionYes"create", "list", "update", or "delete". Case-insensitive.
start_timeNoStart date/time. "YYYY-MM-DD" auto-converts to midnight; RFC3339 works for partial days.
end_timeNoEnd (exclusive). For a full day on Apr 5 pass start="2026-04-05", end="2026-04-06".
summaryNoDisplay label. Defaults to "Focus Time".
descriptionNoOptional body text for context.
auto_decline_modeNo"declineAllConflictingInvitations" (default), "declineOnlyNewConflictingInvitations", or "declineNone".
decline_messageNoBody of auto-decline replies.
chat_statusNo"doNotDisturb" (default) or "available".
recurrenceNoRFC5545 rules, e.g. ["RRULE:FREQ=WEEKLY;COUNT=10"].
timezoneNoIANA zone like "America/New_York". Required when start/end are date-only or lack a UTC offset.
time_minNoList-action range start. Defaults to now.
time_maxNoList-action range end.
max_resultsNoList-action cap. Default 10.
event_idNoEvent ID. Required for update and delete.
calendar_idNoDefault "primary". Focus Time lives on primary calendars only โ€” pass "primary" or the user's primary email.primary

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries full burden. It discloses key behaviors: auto-declines conflicting invitations, sets Chat to Do Not Disturb by default, lives on primary calendar only, and requires 'calendar.events' scope. This is good but lacks details on error handling or limits.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single paragraph but concise, covering purpose, usage alternatives, behaviors, and scope. It is front-loaded with the verb and resource. Slightly long but every sentence is informative.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given 16 parameters and high complexity, the description combined with the schema provides sufficient context for selection and invocation: what it does, side effects, usage guidelines, and a required scope. It could mention output schema or error scenarios but is adequate.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so baseline is 3. The description adds value by explaining the Focus Time concept and side effects (auto-decline, Chat DND), which gives semantic context beyond parameter descriptions. This lifts the score to 4.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool creates, lists, updates, or deletes Focus Time events, a specific event type. It distinguishes from siblings 'manage_event' and 'manage_out_of_office' by explicitly naming them and specifying what each handles.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly says when to use this tool (for Focus Time events) and when to use alternatives (manage_event for regular events, manage_out_of_office for OOO). It also notes side effects and OAuth scope requirements, providing clear guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

manage_gmail_filterA

Create or delete a server-side Gmail filter.

Side effects: creates a persistent auto-action rule or permanently deletes one. Filter updates are not supported by the Gmail API โ€” delete and recreate instead. Use list_gmail_filters first to inspect existing filters. Requires the gmail.settings.basic OAuth scope.

ParametersJSON Schema
NameRequiredDescriptionDefault
user_google_emailYesThe user's Google email address (authenticated account).
actionYes"create" or "delete". Case-insensitive.
criteriaNoFilter match criteria for create. Keys: from, to, subject, query (Gmail search operators like "label:INBOX older_than:30d"), negatedQuery, hasAttachment, size, sizeComparison, excludeChats. Example: {"from": "newsletter@", "subject": "deal"}.
filter_actionNoWhat to do on match for create. Keys: addLabelIds (list of label IDs from list_gmail_labels), removeLabelIds, forward (alias email). Example: {"addLabelIds": ["Label_1"], "removeLabelIds": ["INBOX"]}.
filter_idNoFilter ID from list_gmail_filters. Required for delete.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description fully discloses side effects (persistent auto-action rule creation or permanent deletion) and the required OAuth scope. It also notes the lack of update support, which is critical behavioral information.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is extremely conciseโ€”two sentences that cover purpose, side effects, workaround, prerequisite, and auth requirement. No wasted words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity (5 parameters, create/delete) and the presence of an output schema, the description covers all essential behavioral context, including side effects, unsupported operations, recommended usage, and auth scope.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and parameter descriptions in the schema are thorough. The tool description does not add new meaning beyond the schema, so a baseline of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool creates or deletes a server-side Gmail filter, using specific verbs and resource. It distinguishes from sibling tools like 'manage_gmail_label' or 'list_gmail_filters' by focusing on filter management.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly mentions that filter updates are not supported and advises to delete and recreate instead. Also recommends using 'list_gmail_filters' first to inspect existing filters, providing clear when-to-use guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

manage_gmail_labelA

Create, update, or delete a Gmail label.

Side effects: creates/mutates/deletes a label on the account โ€” delete is destructive and unrecoverable. To only apply or remove labels from messages (not manage the labels themselves) use modify_gmail_message_labels instead. Requires the gmail.labels OAuth scope.

ParametersJSON Schema
NameRequiredDescriptionDefault
user_google_emailYesThe user's Google email address (authenticated account).
actionYes"create" (needs name), "update" (needs label_id; name optional), or "delete" (needs label_id).
nameNoLabel display name, e.g. "Clients/Acme" โ€” slash creates a nested label. Required for create.
label_idNoLabel ID from list_gmail_labels (e.g. "Label_1234"). Required for update and delete.
label_list_visibilityNo"labelShow" (appears in sidebar) or "labelHide" (hidden from sidebar).labelShow
message_list_visibilityNo"show" (label pill shown on messages) or "hide" (no pill on messages).show

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description discloses side effects (creates/mutates/deletes a label) and notes that delete is destructive and unrecoverable. It also mentions the OAuth scope. With no annotations provided, this is good but lacks details on edge cases like duplicate names or invalid label IDs.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise with three sentences. The first sentence states the purpose, followed by side effects, alternative tool, and auth requirement. No unnecessary words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool manages CRUD on labels with explicit side effects and alternative guidance, plus the schema covers all parameters, the description provides sufficient context for correct tool selection and invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 100% schema coverage, the baseline is 3. The description does not add new parameter details beyond what the schema provides (e.g., it doesn't elaborate on the meaning of label_list_visibility or message_list_visibility).

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool creates, updates, or deletes a Gmail label, specifying the resource (label) and actions. It differentiates from the sibling tool modify_gmail_message_labels by noting that tool handles applying/removing labels from messages, not managing labels themselves.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It provides explicit when-to-use guidance, including when not to use (for message label changes) and directs to an alternative tool (modify_gmail_message_labels). It also states the required OAuth scope (gmail.labels).

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

manage_out_of_officeA

Create, list, update, or delete Out of Office events.

OOO events are a special event type that auto-declines conflicting invitations and sets Workspace presence to "Out of office". They live on the primary calendar only. For normal events use manage_event; for focus-time blocks use manage_focus_time. Side effects: mutating actions may auto-decline existing/incoming invites based on auto_decline_mode. Requires the calendar.events OAuth scope.

ParametersJSON Schema
NameRequiredDescriptionDefault
user_google_emailYesThe user's Google email address (authenticated account).
actionYes"create", "list", "update", or "delete". Case-insensitive.
start_timeNoStart date/time for create/update. "YYYY-MM-DD" is auto-converted to midnight; RFC3339 ("2026-04-05T09:00:00-04:00") works for partial days.
end_timeNoEnd (exclusive). For a single full day on Apr 5, pass start="2026-04-05", end="2026-04-06".
summaryNoDisplay label. Defaults to "Out of Office".
auto_decline_modeNo"declineAllConflictingInvitations" (default), "declineOnlyNewConflictingInvitations", or "declineNone".
decline_messageNoBody of auto-decline replies sent to organizers.
recurrenceNoRFC5545 rules, e.g. ["RRULE:FREQ=WEEKLY;COUNT=10"].
timezoneNoIANA zone like "America/New_York". Required when start/end are date-only or lack a UTC offset.
time_minNoList-action range start. Defaults to now. Recurring series expand to instances within the range.
time_maxNoList-action range end.
max_resultsNoList-action cap. Default 10.
event_idNoEvent ID from a prior list call. Required for update and delete.
calendar_idNoDefault "primary". OOO lives on primary calendars โ€” a user's primary ID or email works, secondary calendar IDs do not.primary

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations, so description carries full burden. It discloses side effects: 'mutating actions may auto-decline existing/incoming invites based on auto_decline_mode.' It also notes OOO events live on primary calendar and require 'calendar.events' OAuth scope. Lacks rate limits but covers key behaviors.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Description is concise with three key sentences: purpose, sibling distinction, and side effects/requirements. It front-loads the purpose. Slightly verbose with the side effects paragraph, but no unnecessary words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Complexity is high (14 params, output schema exists). Description covers purpose, sibling tools, side effects, scope, and calendar placement. It does not detail return values, but output schema handles that. Missing maybe an example usage, but overall sufficient.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, baseline 3. Description adds value beyond schema: it explains that OOO events auto-decline invitations and that calendar_id must be primary (echoed in param description). Also clarifies that start_time/end_time can accept date-only strings. Provides context for action parameter.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description clearly states 'Create, list, update, or delete Out of Office events,' using a specific verb and resource. It distinguishes itself from siblings 'manage_event' and 'manage_focus_time' by explicitly naming them as alternatives for normal events and focus-time blocks.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Description provides explicit guidance: 'For normal events use manage_event; for focus-time blocks use manage_focus_time.' It also explains when OOO events appropriate (auto-decline, presence change). However, it lacks explicit 'when not to use' beyond the sibling references.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

manage_presentation_commentA

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
user_google_emailYes
presentation_idYes
actionYes
comment_contentNo
comment_idNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description must fully disclose behavior. It specifies required parameters for each action and mentions a key API constraint (no arbitrary text anchoring). However, it omits permission requirements, error handling, or side effects like notifications. The 'resolve' action is ambiguous (marks resolved vs deletes).

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Description is concise with a clear header, bulleted actions, and a note. Every sentence is informative with no repetition or fluff. Structure allows quick scanning.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the presence of an output schema, return values need not be described. The description covers core functionality and a key limitation. However, it lacks comparison with similar sibling tools (e.g., manage_document_comment) and does not explain the effect of 'resolve' (e.g., if comments can be unresolved). Minor gaps for a simple tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must add meaning. It explains that comment_content is needed for create and reply, comment_id for reply and resolve, and action values. It does not detail user_google_email or presentation_id, but those are standard. Overall, it adds substantial value beyond bare schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description clearly states it manages comments on Google Presentations and lists three specific actions (create, reply, resolve). The inclusion of 'Slides comments are element-scoped via the API' differentiates it from document and spreadsheet comment tools, as seen in sibling tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies when to use the tool (when you need to create, reply, or resolve comments) but does not explicitly compare with alternatives like list_presentation_comments or similar tools for docs/spreadsheets. It provides no guidance on when not to use it or best practices.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

manage_sheet_tabsA

Rename, delete, or duplicate a sheet tab inside a spreadsheet.

Single entrypoint for the three most common tab lifecycle operations. To CREATE a new tab from scratch, use create_sheet (separate tool). To reorder tabs, use batch_update with updateSheetProperties.index. Deletion is permanent โ€” the undo is only available through the Sheets UI, not via the API.

Requires OAuth scope: https://www.googleapis.com/auth/spreadsheets (write).

ParametersJSON Schema
NameRequiredDescriptionDefault
user_google_emailYes
spreadsheet_idYesGoogle Sheets spreadsheet ID (from the URL after `/d/`).
actionYesWhich operation to perform. One of: - `"rename"` โ€” change the tab's title. Requires `new_name`. - `"delete"` โ€” remove the tab and all its data. Cannot delete the last remaining sheet in a spreadsheet (Google API error). - `"duplicate"` โ€” create a copy of the tab. `new_name` optional (defaults to "Copy of <original>").
sheet_idNoNumeric sheet ID (NOT the spreadsheet ID). Preferred over `sheet_name` because it's unique and stable. Get it from `get_spreadsheet_info` under `sheets[].properties.sheetId`. The first sheet is typically `0`. Either `sheet_id` or `sheet_name` must be provided.
sheet_nameNoTab title (case-sensitive). Used only when `sheet_id` is omitted โ€” the tool looks up the ID by name. Ambiguous if multiple tabs share the name (rare โ€” Sheets UI normally prevents this).
new_nameNoNew title for the tab. Required for `"rename"`. Optional for `"duplicate"` (auto-generated if omitted). Ignored for `"delete"`. Must be unique within the spreadsheet.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Discloses permanent deletion (no API undo) and inability to delete the last remaining sheet. No annotations provided, so description carries full burden. Lacks details on other behaviors like rate limits or auth specifics beyond scope.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Six well-structured sentences with no redundant information. Each sentence adds value: purpose, summary, alternatives, limitations, and scope.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With output schema present and high schema coverage, description covers key aspects. Some minor gaps like error handling but overall complete enough for moderate complexity.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 83% and already explains parameters well (e.g., action options, sheet_id preference). Description adds minimal extra value beyond schema, so baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description clearly states the tool renames, deletes, or duplicates sheet tabs. It distinguishes from siblings by mentioning 'create_sheet' for new tabs and 'batch_update' for reordering.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly states when to use (three tab lifecycle operations) and when not to (creating: use create_sheet; reordering: use batch_update). Also notes required OAuth scope.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

manage_spreadsheet_commentA

Manage comments on a Google Spreadsheet.

Actions:

  • create: Create a new comment. Requires comment_content. Note: The Drive API cannot anchor comments to arbitrary text; Sheets comments are cell-scoped via the API.

  • reply: Reply to a comment. Requires comment_id and comment_content.

  • resolve: Resolve a comment. Requires comment_id.

ParametersJSON Schema
NameRequiredDescriptionDefault
user_google_emailYes
spreadsheet_idYes
actionYes
comment_contentNo
comment_idNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description adds useful behavioral details, notably that the Drive API cannot anchor comments to arbitrary text and that Sheets comments are cell-scoped. It implies mutability but does not discuss permissions, rate limits, or idempotency.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise with four sentences, using bullet points for actions. It includes a relevant note about API limitations. Minor improvement could be removing 'Actions:' prefix for brevity.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description covers the three actions and their parameter dependencies, but omits output/return values (despite an existing output schema), error scenarios, and prerequisites like spreadsheet access permissions.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate. It explains comment_content and comment_id usage per action, but leaves user_google_email and spreadsheet_id completely unexplained. Action is partially explained via the action list.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool manages comments on a Google Spreadsheet and lists three specific actions (create, reply, resolve). It distinguishes from sibling comment tools by specifying the spreadsheet context, providing a clear verb-resource mapping.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides per-action parameter requirements (e.g., create needs comment_content) but lacks cross-tool guidance. It does not explicitly state when to use this tool over manage_document_comment or manage_presentation_comment, nor does it mention when not to use it.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

manage_taskA

Create, update, delete, or move a task inside a task list.

Side effects: mutates Google Tasks state. "move" can reparent a task (make it a subtask) and/or relocate it to a different list. Complete a task by calling action="update" with status="completed". For list-level operations use manage_task_list. Requires the tasks OAuth scope.

ParametersJSON Schema
NameRequiredDescriptionDefault
user_google_emailYesThe user's Google email address (authenticated account).
actionYes"create", "update", "delete", or "move".
task_list_idYesParent task list ID from list_task_lists. Required for all actions.
task_idNoTask ID from list_tasks. Required for update, delete, move.
titleNoTask title. Required for create; optional for update.
notesNoBody/description text.
statusNoOnly for update โ€” "needsAction" or "completed".
dueNoRFC3339 due timestamp, e.g. "2026-12-31T23:59:59Z". Google Tasks ignores the time portion and uses the date only.
parentNoParent task ID to make this a subtask (create/move).
previousNoID of the preceding sibling task for ordering (create/move). Omit to place first.
destination_task_listNoFor move โ€” moves the task into another list.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations provided, so description carries full burden. Discloses side effects (mutates state), special behavior (move reparents/relocates), and OAuth requirement. Lacks details on error handling or deletion cascading, but sufficient for typical CRUD.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three concise sentences with front-loaded purpose, followed by side effects, usage tip, sibling reference, and auth requirement. Every sentence earns its place with no redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given 11 parameters and 4 actions with no annotations, description covers actions at high level, provides specific usage tips, and references sibling tool. Output schema exists, so return details not needed. Minor gaps: could mention error handling, but overall complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so baseline 3. Description adds value beyond schema by clarifying usage patterns (e.g., completing task, ordering via 'previous'), improving parameter understanding.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description explicitly states the tool creates, updates, deletes, or moves tasks, with clear verb+resource. It distinguishes from manage_task_list by noting 'For list-level operations use manage_task_list.'

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides when-to-use context (e.g., completing a task via action='update' with status='completed') and a sibling tool reference (manage_task_list). Does not explicitly exclude read-only alternatives like get_task or list_tasks, but usage is implied.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

manage_task_listA

Create, rename, delete a task list, or clear its completed tasks.

Side effects: delete is destructive โ€” removes the list AND all its tasks. clear_completed hides completed tasks from default views (they remain retrievable via list_tasks with show_hidden=True). For tasks inside a list use manage_task. Requires the tasks OAuth scope.

ParametersJSON Schema
NameRequiredDescriptionDefault
user_google_emailYesThe user's Google email address (authenticated account).
actionYes"create", "update", "delete", or "clear_completed".
task_list_idNoTask list ID. Required for update, delete, clear_completed. Get from list_task_lists.
titleNoNew display title. Required for create and update.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Despite no annotations, the description fully discloses side effects: 'delete is destructive โ€” removes the list AND all its tasks' and 'clear_completed hides completed tasks from default views (they remain retrievable via list_tasks with show_hidden=True).' Also specifies auth requirements.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences, front-loaded with purpose, then side effects, then alternative tool and auth. Every sentence adds value. Highly efficient and well-structured.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity (multiple actions, destructive behavior, auth), the description covers all essential aspects. An output schema exists, so return values need not be described. No gaps.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema descriptions cover all 4 parameters with 100% coverage. The description adds context on action behaviors but doesn't significantly enhance parameter-level meaning beyond the schema. Baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose: 'Create, rename, delete a task list, or clear its completed tasks.' It identifies the resource (task list) and the specific actions, and distinguishes from the sibling tool 'manage_task' which handles tasks inside a list.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly provides guidance: 'For tasks inside a list use manage_task.' Also mentions the required OAuth scope, giving clear context on when and how to use the tool.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

modify_doc_textA

Modifies text in a Google Doc - can insert/replace text and/or apply formatting in a single operation.

TIP: To append text to the end of the document without calculating indices, set end_of_segment=true. This avoids index calculation errors.

MARKDOWN MODE: Set format_as_markdown=True to parse text as markdown and insert it with native Docs formatting (headings, bold, italic, bullets, numbered lists). Works for both plain insertion and range replacement. When enabled, explicit formatting parameters (bold, italic, font_size, etc.) must NOT be set โ€” markdown brings its own formatting.

For ordinary header/footer text, prefer update_doc_headers_footers. Only pass segment_id when you already have a real header/footer/footnote segment ID from inspect_doc_structure output. Do not guess IDs such as "kix.header" or "kix.footer".

ParametersJSON Schema
NameRequiredDescriptionDefault
user_google_emailYesUser's Google email address
document_idYesID of the document to update
start_indexYesStart position for operation using Docs API indices from inspect_doc_structure. For the main body, 0 is also accepted as an alias for the first writable position.
end_indexNoEnd position for text replacement/formatting (if not provided with text, text is inserted)
textNoNew text to insert or replace with (optional - can format existing text without changing it)
tab_idNoOptional document tab ID to target
segment_idNoOptional header/footer/footnote segment ID to target
end_of_segmentNoInsert text at the end of the targeted segment instead of start_index
boldNoWhether to make text bold (True/False/None to leave unchanged)
italicNoWhether to make text italic (True/False/None to leave unchanged)
underlineNoWhether to underline text (True/False/None to leave unchanged)
strikethroughNoWhether to strike through text (True/False/None to leave unchanged)
font_sizeNoFont size in points
font_familyNoFont family name (e.g., "Arial", "Times New Roman")
font_weightNoFont weight (100-900 in steps of 100; requires font_family)
text_colorNoForeground text color (#RRGGBB)
background_colorNoBackground/highlight color (#RRGGBB)
link_urlNoHyperlink URL (http/https)
clear_linkNoRemove hyperlink from the target range
baseline_offsetNoOne of NONE, SUPERSCRIPT, SUBSCRIPT
small_capsNoWhether to apply small caps
format_as_markdownNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden. It explains behavioral traits like markdown's interaction with explicit formatting, the end_of_segment shortcut, and the safe use of segment_id. However, it lacks details on error cases or what happens when indices are out of bounds.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Description is concise and well-structured: first sentence summarizes purpose, then tips, markdown mode, and warnings. Every sentence adds unique value; no redundancy or fluff.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given 22 parameters, high schema coverage, and an output schema, the description covers key behavioral points: markdown mode constraints, index calculation tip, sibling differentiation, and segment ID guidance. It addresses the most common use cases and pitfalls.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 95%, so baseline is 3. The description adds significant value by explaining end_of_segment, format_as_markdown limitations, segment_id origin requirements, and start_index alias (0 accepted). These go well beyond the schema's brief descriptions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool modifies text in a Google Doc, supporting insert/replace and/or formatting in one operation. It distinguishes from siblings by explicitly recommending update_doc_headers_footers for header/footer text and warning against guessing segment IDs.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides explicit when-to-use guidance: preferring update_doc_headers_footers for header/footer text, setting end_of_segment=true for simple appends, and using markdown mode for formatted text. Also warns not to guess segment IDs, covering both when to use and when to avoid.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

modify_gmail_message_labelsA

Add or remove labels on one Gmail message.

Side effects: mutates the message's label set. Common recipes: remove "INBOX" to archive, add "TRASH" to delete (soft), add "STARRED" to star. For many messages at once use batch_modify_gmail_message_labels. To create/delete the labels themselves use manage_gmail_label. Requires the gmail.modify OAuth scope.

ParametersJSON Schema
NameRequiredDescriptionDefault
user_google_emailYesThe user's Google email address (authenticated account).
message_idYesGmail message ID from search_gmail_messages.
add_label_idsNoLabel IDs to add. Use system IDs like "INBOX", "STARRED", "TRASH", "UNREAD", or user label IDs from list_gmail_labels (e.g. "Label_1234"). Names do NOT work.
remove_label_idsNoLabel IDs to remove, same ID rules as above.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, description carries full burden. It discloses side effects (mutates label set) and required OAuth scope (gmail.modify). Could add more on error handling or idempotency, but covers key behavioral traits.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Five sentences, front-loaded purpose, then side effects, recipes, alternatives, and scope. Every sentence adds value; no waste.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Covers all necessary context: usage boundaries, parameter specifics, side effects, permissions, and relationships to siblings. Output schema exists, so return values are handled.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Adds significant meaning beyond schema: explains that label IDs must be system IDs or user label IDs (names do not work), and that message_id comes from search_gmail_messages. This prevents common mistakes.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states 'Add or remove labels on one Gmail message', specifying verb and resource. It distinguishes from sibling tools like batch_modify_gmail_message_labels and manage_gmail_label, ensuring no confusion.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides explicit guidance: use batch_modify_gmail_message_labels for bulk operations, use manage_gmail_label for creating/deleting labels. Also includes common recipes (archive, delete, star) and required OAuth scope.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

modify_sheet_valuesA

Write, overwrite, or clear values in an A1 range.

Side effects: overwrites existing cells in the exact range. To append new rows to a table use append_table_rows instead. For formatting use format_sheet_range. Requires the spreadsheets OAuth scope.

ParametersJSON Schema
NameRequiredDescriptionDefault
user_google_emailYesThe user's Google email address (authenticated account).
spreadsheet_idYesSpreadsheet ID.
range_nameYesA1 range, e.g. "Sheet1!A1:D10". Range extent determines how many cells are overwritten regardless of values length โ€” for example a 10x4 range clears leftover cells not covered by values.
valuesNo2D array of row arrays (e.g. [["a", "b"], ["c", "d"]]), or a JSON string. Required unless clear_values=True.
value_input_optionNo"USER_ENTERED" (default โ€” strings parsed as dates/numbers/formulas, matches typing into the UI) or "RAW" (strings stored verbatim; formulas stored as literal text).USER_ENTERED
clear_valuesNoTrue clears the range instead of writing. Ignores `values`.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden. It discloses side effects (overwriting existing cells) and explains that the range extent determines overwrite area and clears leftover cells. It could mention atomicity or limits, but provides sufficient transparency.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is three sentences with no waste. The first sentence states purpose, the second covers side effects and alternatives, and the third notes OAuth scope. It is front-loaded and efficient.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the complexity (6 params, 3 required) and the presence of an output schema, the description covers purpose, side effects, alternatives, and scope. It does not need to explain return values. It is complete enough for correct selection and use.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the baseline is 3. The description adds no extra detail beyond the schema for parameters, but the schema already documents each parameter adequately.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool writes, overwrites, or clears values in an A1 range, with a specific verb and resource. It distinguishes itself from siblings by naming append_table_rows and format_sheet_range as alternatives.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly tells when not to use this tool (append rows, formatting) and points to specific alternatives. It also mentions the required OAuth scope, providing clear usage context.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

protect_sheet_rangeA

Protect a range in a spreadsheet so unauthorized users cannot edit it.

Adds a Sheets "Protected range" entry (Data > Protect sheets and ranges) restricting who can modify the cells. Two enforcement modes: strict (non-editors are blocked) or warning-only (a confirmation dialog appears, but edits are allowed). Use strict for financial data, formula cells, or anything where an accidental overwrite would corrupt downstream calcs.

Requires OAuth scope: https://www.googleapis.com/auth/spreadsheets (write). Protection does NOT prevent the owner or anyone with file-level "Editor" permission on the Drive file from bypassing via the Sheets UI โ€” it only gates in-cell edits. For hard access control, use Drive sharing.

ParametersJSON Schema
NameRequiredDescriptionDefault
user_google_emailYes
spreadsheet_idYesGoogle Sheets spreadsheet ID (from the URL after `/d/`).
range_nameYesA1-notation range to protect, e.g., `"Sheet1!A1:D10"`, `"Summary!B:B"` (entire column), `"'My Sheet'!A1:Z100"` (sheet name with spaces). To protect an entire sheet, use `manage_sheet_tabs` or pass the full sheet range (`Sheet1!A1:ZZ1000000`).
descriptionNoHuman-readable note shown in the Protected ranges sidebar (e.g., "Formulas โ€” do not edit"). Omit for no description.
editor_emailsNoList of Google account email addresses allowed to edit this range. Omit (or pass `None`) to restrict edits to the spreadsheet owner only. Editors must already have access to the file at the Drive level; adding emails here does not share the file.
warning_onlyNoWhen `True`, edits are allowed after a "Are you sure?" confirmation dialog (suitable for nudging users). When `False` (default), edits are strictly blocked for non-editors.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations provided, so description carries full burden. It discloses required OAuth scope, the two enforcement modes, limitation about bypassing, and that it's a UI-level protection. Missing potential error handling or permissions details, but covers key traits.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three well-organized paragraphs: purpose/modes, usage advice, scope and limitations. No fluff, every sentence adds value. Front-loaded with core action.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given output schema exists, description does not need return details. It covers purpose, modes, limitations, and scope adequately for a protection tool. No gaps observed.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 83%, and description adds meaningful context for parameters: explains warning_only behavior, range name examples, editor_emails access requirement. Only user_google_email lacks added context. Adds value beyond schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description clearly states verb 'protect a range' and resource 'spreadsheet', specifies it adds a 'Protected range' entry, and distinguishes from sibling tools like manage_sheet_tabs (sheet-level) and format_sheet_range (formatting).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides context for using strict vs warning-only modes, and warns that protection does not block owners/editors via UI, recommending Drive sharing for hard control. Lacks explicit when-not-to-use but offers clear guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

query_freebusyA

Query busy-time windows across one or more calendars.

Use this to find scheduling conflicts or free slots before creating an event โ€” it returns only busy periods, not event details. For event details use get_events. This is the efficient way to compare availability across multiple people/rooms. Requires the calendar.readonly OAuth scope.

ParametersJSON Schema
NameRequiredDescriptionDefault
user_google_emailYesThe user's Google email address (authenticated account).
time_minYesInterval start, RFC3339 ("2026-05-12T10:00:00Z" or "2026-05-12").
time_maxYesInterval end, RFC3339.
calendar_idsNoCalendars to query (primary calendar, room resource IDs, or colleague emails if you have access). Defaults to ["primary"].
group_expansion_maxNoCap on members expanded from a Google group identifier, up to 100.
calendar_expansion_maxNoCap on calendars returned, up to 50.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries full burden. It discloses it returns only busy periods (not details), requires calendar.readonly OAuth scope, and is efficient for availability comparison. No contradictions.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Four concise sentences: purpose, usage with alternative, efficiency note, and auth requirement. No fluff, well front-loaded with the main action.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given 6 parameters (3 required) and existence of output schema, the description adequately covers purpose, usage context, behavior, and auth. It is complete for an agent to decide when and how to use this tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so baseline is 3. The description does not add significant meaning beyond what the schema already provides for parameters like time_min, time_max, calendar_ids. It only mentions 'across one or more calendars' which is implicit.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states it queries busy-time windows across calendars, distinguishing from get_events for event details. It uses a specific verb-resource combination and explicitly names the sibling tool.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly states when to use (before creating an event to find conflicts/slots) and when not ('For event details use get_events'). Also notes it's efficient for multiple people/rooms.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

read_sheet_valuesA

Read cell values from an A1 range (optionally with formulas/notes).

Output is capped at 50 rows for readability โ€” widen the range or paginate manually for more. For writing use modify_sheet_values. For appending to a table use append_table_rows. Requires the spreadsheets.readonly OAuth scope.

ParametersJSON Schema
NameRequiredDescriptionDefault
user_google_emailYesThe user's Google email address (authenticated account).
spreadsheet_idYesSpreadsheet ID from list_spreadsheets.
range_nameNoA1 notation, e.g. "Sheet1!A1:D10", "A:D", or unqualified "A1:D10" (first sheet). Default "A1:Z1000".A1:Z1000
include_hyperlinksNoTrue adds a hyperlink-metadata section for cells containing URLs. Triggers an includeGridData request โ€” more expensive.
include_notesNoTrue adds a cell-notes section. Same cost caveat as include_hyperlinks.
include_formulasNoTrue fetches raw formula strings (=SUM(...), etc.) alongside displayed values โ€” useful before writing back to avoid clobbering cross-sheet references.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Discloses output cap (50 rows) and OAuth scope requirement. No annotations provided, so description carries full burden. Cost info for hyperlinks/notes is in parameter descriptions but not main body.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Four sentences, front-loaded with core purpose, each sentence adds value without redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Covers purpose, limitations, alternatives, and authorization fully. Output schema handles return format, so description is complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, but description adds practical guidance on range parameter use due to output cap, providing semantics beyond schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Clearly states 'Read cell values from an A1 range' with optional formulas/notes. Distinguishes from sibling tools modify_sheet_values and append_table_rows.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly tells when to use this tool vs write/modify alternatives, and mentions output cap behavior and required OAuth scope.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

reorder_slidesA

Move one or more slides to a new position in the deck.

Reorders slides by inserting them at insertion_index in the slide list. When multiple slide IDs are passed, they are placed consecutively at the target position, preserving the order given in slide_object_ids. This tool only reorders slides โ€” it does not reorder page elements inside a slide. For that, use batch_update_presentation with updatePageElementZOrder.

Requires OAuth scope: https://www.googleapis.com/auth/presentations (write). Google Slides API enforces that all listed IDs must currently belong to the presentation; mixing element IDs with slide IDs is an error.

ParametersJSON Schema
NameRequiredDescriptionDefault
user_google_emailYes
presentation_idYesGoogle Slides presentation ID (from the URL after `/d/`).
slide_object_idsYesList of slide object IDs to move, in the order you want them to appear after the move. Each must be a slide page ID (from `get_presentation.slides[].objectId`), not a page element. Example: `["slide_3", "slide_1"]` will place slide_3 first, then slide_1 at `insertion_index`.
insertion_indexYes0-based position in the re-ordered deck where the moved slides start. `0` = move to the front. Index is computed AFTER removing the slides being moved โ€” pass the final desired position, not adjusted math. To move slides to the end, use the current slide count (e.g., if the deck has 10 slides, `10` puts them last; the API clamps out-of-range values to end-of-deck).

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.9/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries full burden. It details the insertion behavior (preserving order, index computation after removal, clamping out-of-range values) and side effects (requires write scope, mixing IDs is an error). This fully discloses the tool's behavioral traits.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise with a clear lead sentence, followed by organized paragraphs. Each sentence adds value (e.g., index calculation, alternatives, errors). No wasted words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity (reordering with multiple slide IDs, index logic) and the presence of an output schema (indicated by context), the description is complete. It covers the core behavior, index details, error conditions, and permissions. The output schema (not shown) likely explains return values, so no further description needed.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 75% (3 of 4 parameters have descriptions). The description adds significant meaning beyond the schema: explains slide_object_ids order preservation with example, and insertion_index computation after removal with clamping behavior. The user_google_email parameter lacks description but is self-explanatory.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('Move one or more slides to a new position') and the resource ('the deck'). It distinguishes itself from sibling tools like duplicate_slide and format_slides_* by explicitly stating what it does and does not do (e.g., not reordering page elements).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides explicit when-to-use guidance ('Reorders slides...') and when-not-to-use ('does not reorder page elements...'). It directly points to an alternative tool (batch_update_presentation with updatePageElementZOrder) for different needs. Also includes required OAuth scope and error conditions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

replace_slides_textA

Find-and-replace a literal string across every text element in the deck.

Scans all slides, text boxes, shapes, table cells, and speaker notes. Replaces every occurrence of find_text with replace_text in a single batch operation. Plain substring match โ€” no regex, wildcards, or whole-word matching. To do scoped replacement within a single element, edit the text range directly via format_slides_text or modify_doc_text equivalents.

Requires OAuth scope: https://www.googleapis.com/auth/presentations (write). Idempotent: re-running after all matches are replaced is a no-op (returns 0 occurrences).

ParametersJSON Schema
NameRequiredDescriptionDefault
user_google_emailYes
presentation_idYesGoogle Slides presentation ID (from the URL after `/d/`).
find_textYesLiteral text to search for. Exact-match substring; no regex, no special characters. Must be non-empty (empty string errors). Newlines inside `find_text` only match if the original document has the same literal newline characters.
replace_textYesText to substitute for each occurrence. Can be empty to effectively delete matches.
match_caseNoWhen `True` (default), matching is case-sensitive (`Hello` won't match `hello`). When `False`, case-insensitive โ€” any capitalization variant matches and is replaced by the literal `replace_text` verbatim (original casing is not preserved).

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description fully carries the burden of behavioral disclosure. It explains scanning all text elements, batch operation, substring matching, idempotency (re-run no-op), and OAuth scope requirement. It lacks mention of whether it modifies the presentation in-place or potential rate limits, but covers most key behaviors.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise and well-structured, with five sentences that front-load the main purpose. Every sentence adds value: scope, batch nature, matching mode, alternatives, OAuth, and idempotency. No fluff or repetition.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity (5 parameters, output schema exists), the description covers all necessary aspects: scanning scope, matching mode, behavioral traits (idempotency, OAuth), and alternatives for scoped replacement. The existence of an output schema reduces the need to explain return values, but the description still hints at the return (0 occurrences). This is complete for agent understanding.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 80%, so baseline is 3. The description adds meaning beyond the schema: it clarifies that find_text is an exact substring match with literal newline interpretation, and explains match_case behavior (case-sensitive default, case-insensitive doesn't preserve original casing). This adds value for two parameters, lifting the score above baseline.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states it performs a find-and-replace of a literal string across all text elements in a Google Slides presentation. It specifies the resource (slides text) and scope (all slides, text boxes, shapes, table cells, speaker notes), distinguishing it from sibling tools like format_slides_text (scoped) and modify_doc_text (for Docs).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly provides guidance on when to use this tool vs. alternatives: for global replacement, while for scoped replacement within a single element, it directs to format_slides_text or modify_doc_text. It also clarifies it's a batch operation with plain substring matching, no regex or wildcards, helping the agent decide appropriateness.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

resize_sheet_dimensionsC

Manages sheet-level dimension properties: resize columns/rows, auto-resize to fit content, freeze rows/columns, hide/unhide rows/columns, and insert/delete rows/columns.

ParametersJSON Schema
NameRequiredDescriptionDefault
user_google_emailYesThe user's Google email address. Required.
spreadsheet_idYesThe ID of the spreadsheet. Required.
sheet_nameNoSheet name to target. Defaults to the first sheet if not provided.
column_sizesNoDict mapping column letters to pixel widths. Example: {"A": 200, "C": 300}. Can be a JSON string or Python dict.
row_sizesNoDict mapping 1-based row numbers to pixel heights. Example: {"1": 40, "3": 60}. Can be a JSON string or Python dict.
auto_resize_columnsNoList of column letters to auto-resize to fit content. Example: ["A", "B"].
auto_resize_rowsNoList of 1-based row numbers to auto-resize to fit content. Example: [1, 2].
frozen_row_countNoNumber of rows to freeze from the top. Use 0 to unfreeze all rows.
frozen_column_countNoNumber of columns to freeze from the left. Use 0 to unfreeze all columns.
hide_columnsNoList of column letters to hide. Example: ["C", "D"].
unhide_columnsNoList of column letters to unhide. Example: ["C", "D"].
hide_rowsNoList of 1-based row numbers to hide. Example: [3, 4].
unhide_rowsNoList of 1-based row numbers to unhide. Example: [3, 4].
insert_rowsNoNumber of rows to insert.
insert_rows_atNo1-based row number to insert before. Appends to the end of the sheet if omitted.
insert_columnsNoNumber of columns to insert.
insert_columns_atNoColumn letter to insert before (e.g. "C"). Appends to the end if omitted.
delete_rowsNoList of 1-based row numbers to delete. Example: [5, 6].
delete_columnsNoList of column letters to delete. Example: ["E", "F"].

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries full burden but only lists actions without disclosing behavioral traits like write permissions, data shifting on insert/delete, or that freeze replaces existing settings. It lacks detail on side effects.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single sentence but effectively front-loads the purpose. It is concise, though packing a list of operations makes it slightly dense.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool has 19 parameters, the description is too high-level. It does not explain how parameters relate or typical usage patterns, leaving the agent without sufficient context despite the existence of an output schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, and parameter descriptions are detailed. The tool description adds little beyond listing categories; it does not enhance understanding beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool manages sheet-level dimension properties and lists specific actions (resize, auto-resize, freeze, hide/unhide, insert/delete). It distinguishes from sibling tools like format_sheet_range or modify_sheet_values by focusing on dimensions.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives, such as format_sheet_range for formatting or modify_sheet_values for data changes. No exclusions or prerequisites are mentioned.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

restore_drive_revisionA

Restore a Drive file's content to a previous revision.

Downloads the raw bytes of the specified revision and re-uploads them as the file's current content. This creates a NEW revision identical to the old one (it does not rewind the revision history โ€” older revisions remain accessible). Original file ID, name, and sharing permissions are preserved.

Requires OAuth scope: https://www.googleapis.com/auth/drive (write). Large files (>100 MB) may take several seconds due to download+upload cycle.

Limitation: Google-native files (Docs, Sheets, Slides โ€” MIME type application/vnd.google-apps.*) do NOT expose raw revision content via the Drive API. Attempting to restore a native file returns an explanatory error. For those, open the file in Google Docs/Sheets/Slides and use the built-in "Version history" UI (File > Version history > See version history). Binary-content files (PDFs, DOCX, XLSX, images, ZIP, etc.) are fully supported.

ParametersJSON Schema
NameRequiredDescriptionDefault
user_google_emailYes
file_idYesDrive file ID (from a file URL like `drive.google.com/file/d/<file_id>/view`, or from `search_drive_files`). File must be a non-Google-native type.
revision_idYesID of the revision to restore TO. Get it from `get_drive_revisions` โ€” the `id` field on each revision entry. The revision must still be retained (pinned with `keepForever` OR within Drive's normal retention window).

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.9/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description fully discloses behavioral traits: the operation creates a new revision, preserves file metadata, requires write scope, may be slow for large files, and fails with an explanatory error for Google-native files. This is comprehensive.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise yet thorough, with clear sections and bullet points. It front-loads the main action and efficiently conveys limitations and alternatives without redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the complexity of the operation and the presence of an output schema, the description covers all necessary context: behavior, prerequisites, limitations, and error cases. It is complete for an agent to invoke correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 67%, and the description adds valuable context for file_id and revision_id (how to obtain them, constraints). The user_google_email parameter lacks description in both schema and description, but the overall guidance for two key parameters is strong.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the purpose: 'Restore a Drive file's content to a previous revision.' It distinguishes this tool from siblings like 'get_drive_revisions' or 'update_drive_file' by explaining the unique mechanism (download+upload) and that it creates a new revision rather than rewinding history.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly covers when to use (non-Google-native files) and when not (Google-native files), provides an alternative (use Google Docs UI), and lists prerequisites (OAuth scope, file and revision IDs). This guides the agent effectively.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

run_script_functionA

Execute a function inside an Apps Script project.

Requires the project to have an API-executable deployment configured (Deploy > New deployment > Library/API executable). dev_mode=True runs the latest saved code without needing a fresh deployment โ€” available only to the script's OWN Google account. For managing deployments themselves use manage_deployment. Requires the script.projects OAuth scope plus any scopes the target function needs.

ParametersJSON Schema
NameRequiredDescriptionDefault
user_google_emailYesThe user's Google email address (authenticated account).
script_idYesTarget project ID (must have an API-executable deployment).
function_nameYesName of the top-level function to invoke (e.g. "doWork"). Private/internal helpers cannot be called.
parametersNoOptional positional arguments to pass to the function. Must be JSON-serializable primitives or arrays.
dev_modeNoTrue runs the latest saved code (owner only); False (default) runs the deployed version.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Discloses key traits like deployment requirement, dev_mode ownership, and OAuth scopes, but does not mention potential side effects, error handling, or return value behavior. Since no annotations are present, the description carries the full burden but omits important safety warnings.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Very concise: three sentences covering purpose, prerequisites, dev_mode note, alternative tool, and scopes. Front-loaded and no unnecessary words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given no annotations and a complex tool with 5 params, the description covers purpose, prerequisites, alternative, scopes, and param nuances. Missing details on error/timeout handling, but output schema likely fills return value gap. Still solid for agent decision-making.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Input schema has 100% coverage, and the tool description adds context beyond schema: deployment requirement, dev_mode owner-only, and scope needed. This elevates the baseline of 3 to a 4.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states 'Execute a function inside an Apps Script project,' specifying the verb and resource. It distinguishes from siblings like manage_deployment by referencing deployment management separately, ensuring no confusion.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly states prerequisites (API-executable deployment), dev_mode restrictions (owner only), and directs to manage_deployment for deployment management. Also notes required OAuth scopes, providing clear guidance on when and how to use.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

search_contactsA

Search contacts by substring across names, emails, phones.

Uses the People API searchContacts endpoint (max 30 results). For paginated full enumeration use list_contacts. For a known contact ID use get_contact. A cache warm-up call is issued on first use since the search index is user-specific and lazily populated. Requires the contacts.readonly OAuth scope.

ParametersJSON Schema
NameRequiredDescriptionDefault
user_google_emailYesThe user's Google email address (authenticated account).
queryYesFree text substring. Matches names, email addresses, and phone numbers.
page_sizeNoMax results. 1-30. Default 30 (API cap).

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Since no annotations are provided, the description carries the full burden. It discloses important behavioral traits: uses People API searchContacts endpoint, max 30 results, cache warm-up on first use due to lazily populated search index, and required OAuth scope (contacts.readonly). While it doesn't detail edge cases or error behavior, the provided context is substantial and adds value beyond the schema.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise (4 sentences) and well-structured: first sentence states purpose, second gives API details, third provides usage guidelines, fourth mentions cache and auth. Every sentence adds value, and the most critical information is front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity (3 params, no annotations, but an output schema exists), the description covers behavioral traits, usage guidelines, and auth requirements adequately. It does not need to explain return values due to the output schema. The description is complete enough for an agent to decide when and how to use the tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% with descriptive parameter descriptions. The tool description does not add significant new meaning to the parameters beyond summarizing the query functionality. However, it adds context like cache warm-up and OAuth scope, which are not parameter-specific. Thus, score is at baseline 3.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb 'Search' and the resource 'contacts', specifying the search across names, emails, and phones. It distinguishes from siblings 'list_contacts' (full enumeration) and 'get_contact' (by ID), providing clear differentiation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly instructs when to use alternatives: 'For paginated full enumeration use list_contacts. For a known contact ID use get_contact.' This provides clear when-to-use and when-not-to guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

search_customC

Performs a search using Google Custom Search JSON API.

ParametersJSON Schema
NameRequiredDescriptionDefault
user_google_emailYesThe user's Google email address. Required.
qYesThe search query. Required.
numNoNumber of results to return (1-10). Defaults to 10.
startNoThe index of the first result to return (1-based). Defaults to 1.
safeNoSafe search level. Defaults to "off".off
search_typeNoSearch for images if set to "image".
site_searchNoRestrict search to a specific site/domain.
site_search_filterNoExclude ("e") or include ("i") site_search results.
date_restrictNoRestrict results by date (e.g., "d5" for past 5 days, "m3" for past 3 months).
file_typeNoFilter by file type (e.g., "pdf", "doc").
languageNoLanguage code for results (e.g., "lang_en").
countryNoCountry code for results (e.g., "countryUS").
sitesNoList of sites/domains to restrict search to (e.g., ["example.com", "docs.example.com"]). When provided, results are limited to these sites.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

C2.8/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations provided. The description does not disclose behavioral traits like authentication requirements, rate limits, or that the search relies on a Custom Search Engine setup. It only states it performs a search.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single concise sentence, but it is too minimal, sacrificing useful context. It fits the tool but lacks structure to highlight key information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool has 13 parameters and an output schema, the description is incomplete. It does not mention the return value format or any of the rich options available, requiring the agent to rely solely on the schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Input schema has 100% coverage with descriptions for all 13 parameters. The description adds no additional meaning beyond what the schema provides, meeting the baseline expectation.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states it performs a search using Google Custom Search JSON API, indicating a web search tool. It distinguishes from sibling search tools like search_docs or search_drive_files by specifying the API, but could be more explicit about it being for general web search.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance on when to use this tool vs alternatives such as search_docs, search_gmail_messages, etc. The description lacks context about appropriate use cases or prerequisites.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

search_docsA

Search for Google Docs by filename substring across the user's entire Drive (including shared drives and items shared with them).

Use this for name-only lookups โ€” it runs a Drive files.list query with name contains '<query>' and a mimeType filter pinned to native Google Docs. It does NOT search document content; for full-text search use search_drive_files with a fullText query, or an external search index. For listing docs in a specific folder, use list_docs_in_folder.

Requires OAuth scope: https://www.googleapis.com/auth/drive.readonly (or broader drive scope). trashed=false is always applied โ€” trashed docs are excluded.

ParametersJSON Schema
NameRequiredDescriptionDefault
user_google_emailYesThe user's Google email address. Required.
queryYesCase-insensitive substring to match against Doc filenames. Single quotes are auto-escaped before being embedded in the Drive query, so apostrophes in titles are safe. Empty string matches all Docs (bounded by `page_size`).
page_sizeNoMaximum number of results. Defaults to 10. Google's hard cap is 1000. No pagination token is exposed โ€” increase this value if you need more results in one call.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Since no annotations are provided, the description fully carries the burden. It discloses the query method (Drive files.list with name contains), mimeType filter, exclusion of trashed docs, OAuth scope requirement, auto-escaping of single quotes, and the absence of pagination token. This is comprehensive.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is somewhat long but well-structured with clear sections. Each sentence adds informational value, and it avoids unnecessary fluff. It could be more concise, but it is far from wasteful.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool complexity (3 params, full schema coverage, output schema exists), the description is very complete. It explains the underlying API, scope, limitations, and provides alternatives, leaving no critical gaps for an agent.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema covers all parameters (100% coverage). The description adds value by explaining case-insensitivity, auto-escaping, empty string behavior, and page_size cap, which goes beyond the schema descriptions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose: searching Google Docs by filename substring across the user's entire Drive. It specifies the action, resource, and scope, and distinguishes from sibling tools like search_drive_files and list_docs_in_folder by explaining the underlying query method and limitations.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly tells when to use the tool ('name-only lookups') and when not to use it ('does NOT search document content; for full-text search use search_drive_files'). It also provides alternatives for listing docs in a folder, giving clear context for selection.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

search_drive_filesA

Search Drive (including shared drives) for files and folders.

Free-text queries are auto-wrapped in fullText contains '...'; structured Drive queries pass through as-is. For listing a single folder by parent use list_drive_items. For file content use get_drive_file_content. Requires the drive.readonly OAuth scope.

ParametersJSON Schema
NameRequiredDescriptionDefault
user_google_emailYesThe user's Google email address (authenticated account).
queryYesFree text (auto-wrapped) or a Drive query expression like `name contains 'Q3' and mimeType = 'application/pdf' and modifiedTime > '2026-01-01T00:00:00'`. Owner-based queries ("x@y.com in owners") do NOT work inside shared drives โ€” search by modifiedTime and order_by="modifiedTime desc" instead.
page_sizeNoMax files returned, 1-1000. Default 10.
page_tokenNoCursor from a prior response's `nextPageToken`.
drive_idNoShared drive ID to restrict the search. Omit for My Drive + shared-with-me.
include_items_from_all_drivesNoTrue (default) to include shared drive items when drive_id is omitted.
corporaNoScope โ€” "user", "domain", "drive", or "allDrives". Defaults to "drive" when drive_id is set. Prefer "user" or "drive" over "allDrives" for performance.
file_typeNoFriendly alias ("folder", "doc", "sheet", "slides", "form", "drawing", "pdf", "shortcut", "script", "site", "jamboard") or raw MIME type ("application/pdf"). Adds a mimeType filter.
detailedNoTrue (default) includes size, modified time, webViewLink per file; False returns just name/ID/type.
order_byNoComma-separated sort keys: createdTime, folder, modifiedByMeTime, modifiedTime, name, name_natural, quotaBytesUsed, recency, sharedWithMeTime, starred, viewedByMeTime. Append " desc" to reverse. Example: "folder,modifiedTime desc,name".

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, description covers auto-wrapping, query limitations in shared drives (owner-based queries fail), workaround using modifiedTime, and parameter behaviors like pagination and file_type aliases. Implicitly read-only.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Concise yet comprehensive; each sentence adds new information. Structured with purpose, query types, alternatives, and OAuth scope. No redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given complexity (10 params, broad use), description covers purpose, differentiation, parameter details, limitations, and OAuth. Output schema handles return values, so completeness is high.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, but description adds significant value: explains query wrapping, file_type alias resolution, order_by format with examples, corpora performance, and drive_id restriction. Goes well beyond schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Clearly states 'Search Drive (including shared drives) for files and folders.' Distinguishes from sibling tools like list_drive_items (for listing a folder by parent) and get_drive_file_content (for file content), providing specific verb and resource.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explains free-text vs. structured queries and offers alternatives (list_drive_items for parent listing, get_drive_file_content for content). Also mentions required OAuth scope and performance suggestions for corpora. Lacks explicit 'when not to use' but provides sufficient context.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

search_gmail_messagesA

Search Gmail messages and return their IDs plus clickable web links.

Use this to locate messages by subject/sender/date before calling get_gmail_message_content (single) or get_gmail_messages_content_batch (many). This tool returns IDs only, not bodies โ€” fetch bodies in a second step. Requires the gmail.readonly OAuth scope.

ParametersJSON Schema
NameRequiredDescriptionDefault
queryYesGmail search operators, e.g. "from:alice@ex.com has:attachment newer_than:7d label:INBOX -category:promotions".
user_google_emailYesThe user's Google email address (authenticated account).
page_sizeNoMax results per page, 1-500. Default 10.
page_tokenNoPagination cursor โ€” pass the next_page_token value returned by a previous call to fetch the next page.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations provided, but description discloses the required OAuth scope (gmail.readonly) and explicitly states the tool returns only IDs and links, not bodies. This adds value beyond the schema, though pagination behavior is left to schema parameters.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences, each adding value. Front-loaded with purpose, no wasted words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Description covers OAuth scope, return type, workflow, and alternatives. Given the output schema exists, further detail on return values is unnecessary. Complete for an agent to use this tool correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so description does not need to add much. The description itself does not elaborate on parameters beyond the schema. Baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description clearly states it searches Gmail messages and returns IDs plus clickable links. It distinguishes from siblings like get_gmail_message_content and get_gmail_messages_content_batch by specifying that this tool returns only IDs, not bodies.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly tells when to use (before fetching bodies) and names alternatives (get_gmail_message_content for single, get_gmail_messages_content_batch for many). Also clarifies the two-step process.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

search_messagesA

Search Chat messages across one or many spaces by text and/or time.

The Chat API does not support server-side full-text search, so this tool fetches messages per space (with optional createTime filter applied server-side) and does a case-insensitive substring match on message text client-side. For a single space list without filtering use get_messages. Requires both chat.read and contacts.readonly OAuth scopes (senders are resolved to names via People API).

ParametersJSON Schema
NameRequiredDescriptionDefault
user_google_emailYesThe user's Google email address (authenticated account).
queryNoCase-insensitive substring to match in message text. Omit to return messages by time only.
space_idNoRestrict search to one space ("spaces/<id>"). Omit to search across accessible spaces (capped by max_spaces).
page_sizeNoMax messages fetched per space. Default 25.
time_filterNoChat API createTime expression, e.g. 'createTime > "2026-03-18T00:00:00Z"' or a range joined with AND. Applied server-side.
max_spacesNoWhen space_id is omitted, cap on how many spaces are scanned. Default 10.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description fully discloses the client-side matching mechanism, server-side createTime filtering, per-space fetching, and the resolution of senders via People API. It omits mention of rate limits or pagination behavior, but the effect of page_size is described in the schema.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise with two short paragraphs. The first sentence captures the core purpose. Every sentence adds value: scope, mechanism, sibling reference, and auth requirements. No redundant or filler text.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool has moderate complexity (6 parameters, client-side search across spaces) and an output schema exists. The description covers the algorithm, scope distinction, and OAuth scopes. It does not discuss error handling or what happens with no results, but the output schema likely covers return structure. Overall sufficient for effective invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

All 6 parameters have schema descriptions (100% coverage), achieving baseline 3. The description adds value by explaining how parameters like query (case-insensitive substring) and time_filter (applied server-side) are used in the overall algorithm, and notes the max_spaces cap when space_id is omitted.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool searches Chat messages by text and/or time across one or many spaces. It specifies the client-side substring matching approach and explicitly distinguishes from the sibling tool get_messages for unfiltered single-space retrieval.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides explicit guidance to use get_messages for a single space without filtering. It also lists required OAuth scopes. However, it does not mention when to use alternative search tools like search_gmail_messages, though that is a different domain (Gmail vs Chat).

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

send_gmail_messageA

Sends an email using the user's Gmail account. Supports both new emails and replies with optional attachments. Supports Gmail's "Send As" feature to send from configured alias addresses.

ParametersJSON Schema
NameRequiredDescriptionDefault
user_google_emailYesThe user's Google email address. Required for authentication.
toYesRecipient email address.
subjectYesEmail subject.
bodyYesEmail body content (plain text or HTML).
body_formatNoEmail body format. Use 'plain' for plaintext or 'html' for HTML content.plain
ccNoOptional CC email address.
bccNoOptional BCC email address.
from_nameNoOptional sender display name (e.g., 'Peter Hartree'). If provided, the From header will be formatted as 'Name <email>'.
from_emailNoOptional 'Send As' alias email address. Must be configured in Gmail settings (Settings > Accounts > Send mail as). If not provided, uses the authenticated user's email.
thread_idNoOptional Gmail thread ID to reply within.
in_reply_toNoOptional RFC Message-ID of the message being replied to (e.g., '<message123@gmail.com>').
referencesNoOptional chain of Message-IDs for proper threading.
attachmentsNoOptional list of attachments. Each can have: "url" (fetch from URL โ€” works with MCP attachment URLs from get_drive_file_download_url / get_gmail_attachment_content), OR "path" (file path, auto-encodes), OR "content" (standard base64, not urlsafe) + "filename". Optional "mime_type". Example: [{"url": "https://host/attachments/abc-123", "filename": "report.pdf"}]

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden. It adds some behavioral context (e.g., supports replies, 'Send As' feature) but does not disclose authentication requirements beyond the required user_google_email, potential failure points (e.g., alias not configured), or side effects. The description is adequate but not thorough.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences, front-loaded with purpose, and contains no fluff. Every sentence adds value, making it highly efficient for an agent to quickly understand the tool's core functionality.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given 13 parameters with 100% schema coverage and an output schema, the description covers main capabilities (new emails, replies, attachments, aliases). It lacks details on error handling or post-send behavior, but for a sending tool with rich schema, it is sufficiently complete for most use cases.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so baseline is 3. The description summarizes key features like replies and attachments but does not add significant meaning beyond the schema descriptions. It provides high-level context but not deeper per-parameter semantics.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb 'sends', the resource 'email using the user's Gmail account', and distinguishes from siblings by specifying Gmail-specific features like 'Send As' and replies, setting it apart from draft_gmail_message and send_message.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

While the description indicates it supports new emails, replies, and aliases, it lacks explicit guidance on when to use this tool versus alternatives like draft_gmail_message or send_message. No 'when not to use' or comparisons are provided, leaving the agent to infer usage context.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

send_messageA

Post a text message to a Google Chat space (optionally threaded).

Side effects: creates a new visible message in the space. For adding an emoji reaction to an existing message use create_reaction. For listing what's in a space use get_messages. Requires the chat.messages.create (chat_write) OAuth scope.

ParametersJSON Schema
NameRequiredDescriptionDefault
user_google_emailYesThe user's Google email address (authenticated account).
space_idYesTarget space resource name ("spaces/<id>") from list_spaces.
message_textYesPlain text body. Supports Chat markdown (e.g. *bold*, _italic_, `code`).
thread_keyNoApp-defined thread key โ€” messages with the same key thread together. If no thread exists with this key, a new one is created. Mutually exclusive with thread_name.
thread_nameNoResource name of an existing thread ("spaces/X/threads/Y") to reply to. Falls back to a new thread if the specified one is not found.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations provided, so description carries full burden. Describes side effect: 'creates a new visible message in the space.' Mentions required OAuth scope. Lacks discussion of rate limits or other constraints, but still provides strong behavioral context.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Very concise: three short sentences with clear front-loading. Every sentence adds value (purpose, side effects, alternatives, scope). No fluff.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With output schema present, no need to describe return values. Description covers purpose, side effects, threading, required scope, and alternatives. Complete for an agent to use the tool correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%. Description adds minimal parameter-specific detail beyond schema; it mentions threading and markdown but those are already in schema. Baseline 3 due to high coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Clearly states 'Post a text message to a Google Chat space (optionally threaded).' Uses specific verb 'post' and resource 'text message'. Distinguishes from siblings by explicitly naming alternative tools for reactions and listing messages.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly provides when to use this tool vs alternatives: 'For adding an emoji reaction... use create_reaction. For listing... use get_messages.' Also mentions required OAuth scope and side effects.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

set_drive_file_permissionsA

Toggle link-sharing and common file-level sharing controls.

Side effects: mutates sharing policy. Use this for high-level toggles ("anyone with the link", editor share rights, viewer copy-prevention). For per-user/group permission changes use manage_drive_access. At least one of the three flags must be set. Requires the drive.file OAuth scope.

ParametersJSON Schema
NameRequiredDescriptionDefault
user_google_emailYesThe user's Google email address (authenticated account).
file_idYesDrive file or folder ID.
link_sharingNo"off" removes anyone-with-link access; "reader", "commenter", or "writer" sets the link role. Omit to leave link sharing unchanged.
writers_can_shareNoTrue lets editors re-share; False restricts sharing to owner only.
copy_requires_writer_permissionNoTrue blocks viewers/commenters from copy/print/download; False allows.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden. It mentions 'Side effects: mutates sharing policy' and the required OAuth scope. However, it doesn't discuss potential reversibility, rate limits, or error conditions, which would add completeness.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise, with 5 sentences that are well-structured and front-loaded with the main purpose. Every sentence adds value without unnecessary fluff.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given that an output schema exists (so description doesn't need to explain return values) and the schema covers all parameters, the description provides sufficient context: purpose, side effects, usage guidance, and OAuth requirement. It is complete for this tool's complexity.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so baseline is 3. The description summarizes the three toggle flags (link_sharing, writers_can_share, copy_requires_writer_permission) but does not add significant new meaning beyond what the schema already provides for each parameter.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb 'Toggle' and the resource 'link-sharing and common file-level sharing controls'. It distinguishes itself from the sibling 'manage_drive_access' by specifying that this tool is for high-level toggles while the sibling is for per-user/group changes.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly tells when to use this tool (high-level toggles) and when not to (use manage_drive_access for per-user/group changes). Also states 'At least one of the three flags must be set' and the required OAuth scope, providing clear usage context.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

set_publish_settingsA

Update a Google Form's publishing and auth requirements.

Side effects: mutates publish settings โ€” changes how the form is discoverable (template) and who can submit (auth required). Does NOT change which items are on the form; for that use batch_update_form. Requires the forms OAuth scope.

ParametersJSON Schema
NameRequiredDescriptionDefault
user_google_emailYesThe user's Google email address (authenticated account).
form_idYesForm ID from the edit URL after /forms/d/.
publish_as_templateNoTrue lists the form as a template in the Workspace template gallery. Default False.
require_authenticationNoTrue requires respondents to sign in with a Google account to view/submit (their email is captured). False allows anonymous access. Default False.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Describes side effects: mutates publish settings, changes discoverability and authentication requirements. States non-effects. No annotations provided, so description carries full burden. Lacks details on return values or potential failures, but sufficient.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Four sentences, front-loaded with purpose, side effects, exclusions, and requirements. No redundant information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool complexity (4 params, 2 required, output schema exists), description covers purpose, side effects, non-effects, alternative, and auth requirement. Complete for selection and invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so baseline is 3. Description adds context about the role of parameters (template, auth) but does not provide additional semantic meaning beyond schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Clearly states 'Update a Google Form's publishing and auth requirements.' Specific verb+resource, distinguishes from sibling batch_update_form which changes items.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly states what it does and what it does not do, and provides an alternative: 'Does NOT change which items are on the form; for that use batch_update_form.' Also mentions required OAuth scope.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

set_slides_backgroundA

Set the background fill color of a single slide (the page itself).

Changes the slide's own background โ€” distinct from styling a shape placed on the slide. For per-shape fill, use style_slides_shape. To change background for multiple slides, call this tool once per slide.

Requires OAuth scope: https://www.googleapis.com/auth/presentations (write). Overrides any inherited master/layout background with a solid color.

ParametersJSON Schema
NameRequiredDescriptionDefault
user_google_emailYes
presentation_idYesGoogle Slides presentation ID (from the URL after `/d/`).
page_object_idYesObject ID of the slide whose background to change. Get it from `get_presentation.slides[].objectId`. Must reference a slide page (not a master/layout).
colorYesHex color for the background, e.g., `#F5F5F5` or `F5F5F5`. Accepts `#RRGGBB` or `RRGGBB`.
alphaNoOpacity of the background fill, 0.0 (transparent) to 1.0 (opaque). Default `1.0`.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden. It discloses the write nature (OAuth scope) and the important behavior of overriding inherited master/layout backgrounds with a solid color. However, it does not mention reversibility, side effects on other slide properties, or error conditions, which would elevate it to a 5.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is extremely concise: three sentences, each serving a distinct purpose. The first sentence is the action, second distinguishes from alternatives, third covers usage pattern and key behavior. No fluff, well front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's simplicity and the presence of an output schema, the description covers purpose, alternatives, usage pattern, OAuth scope, and key behavioral trait. It is complete enough for an agent to use correctly, but lacks error handling or edge case details that would make it a 5.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 80%, so the baseline is 3. The description does not add any parameter-specific semantics beyond what the schema already provides (e.g., for color, alpha, page_object_id). The `user_google_email` parameter lacks schema description and is not elaborated in the description, meaning the description adds no extra value for parameters.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action: 'Set the background fill color of a single slide' with the verb 'set' and resource 'background fill color'. It distinguishes from shape styling by noting it affects the page itself, not a shape, and explicitly names the sibling tool `style_slides_shape`. This provides high specificity and differentiation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly provides an alternative tool for shape fills (`style_slides_shape`) and instructs to call this tool once per slide for multiple slides. It also documents the required OAuth scope, giving clear when-to-use and what-not-to-use guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

start_google_authA

Manually initiate Google OAuth authentication flow.

NOTE: This is a legacy OAuth 2.0 tool and is disabled when OAuth 2.1 is enabled. The authentication system automatically handles credential checks and prompts for authentication when needed. Only use this tool if:

  1. You need to re-authenticate with different credentials

  2. You want to proactively authenticate before using other tools

  3. The automatic authentication flow failed and you need to retry

In most cases, simply try calling the Google Workspace tool you need - it will automatically handle authentication if required.

ParametersJSON Schema
NameRequiredDescriptionDefault
service_nameYes
user_google_emailNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations provided, so description carries full burden. It fully explains the tool's manual nature and its relationship to automatic authentication. Could mention potential side effects of improper use, but overall transparent.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Concise, well-structured with clear lead sentence followed by bullet-pointed usage conditions. Every sentence adds value, no redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given output schema exists, return values don't need explanation. However, the tool has 2 parameters with zero schema descriptions, and the description doesn't compensate for that gap, leaving the agent to guess parameter semantics.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, yet description offers no explanation of the two parameters ('service_name' required, 'user_google_email' optional). The schema itself lacks descriptions, so the agent must infer parameter meanings from name only.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states 'Manually initiate Google OAuth authentication flow' using specific verb and resource. It distinguishes from sibling tools by explicitly contrasting with automatic authentication and providing usage scenarios.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides explicit when-to-use conditions (re-authenticate, proactive, retry) and when-not (most cases just call the needed tool). Also notes it's legacy and disabled when OAuth 2.1 is enabled, giving clear guidance on alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

style_slides_shapeA

Style an existing shape's fill and outline on a Google Slide.

Use this to change the look of a shape that already exists โ€” background fill color/opacity, outline color, outline thickness, dash pattern. For paragraph-level text formatting inside the shape (alignment, bullets), use format_slides_paragraph. For character styling of text (bold, font size), use format_slides_text. To create the shape in the first place, use create_slides_shape.

Requires OAuth scope: https://www.googleapis.com/auth/presentations (write). Only fields passed in will be updated โ€” omitted args are left unchanged.

ParametersJSON Schema
NameRequiredDescriptionDefault
user_google_emailYes
presentation_idYesGoogle Slides presentation ID (from the URL after `/d/`).
page_element_idYesObject ID of the target shape. Get it from `get_presentation.slides[].pageElements[].objectId` or `get_page`. Must be a shape element; table cells and images will error.
fill_colorNoHex color for the shape interior, e.g., `#FFCC00` or `FFCC00`. Omit to leave existing fill unchanged.
fill_alphaNoOpacity of the fill, 0.0 (transparent) to 1.0 (opaque). Default `1.0`. Only meaningful when `fill_color` is also set.
outline_colorNoHex color for the shape's outline/border, e.g., `#000000`. Omit to leave outline color unchanged.
outline_weightNoOutline thickness in points (e.g., `1.5`, `3`, `6`). Omit to leave outline weight unchanged.
outline_dash_styleNoLine style for the outline. One of `SOLID`, `DASH`, `DOT`, `DASH_DOT`, `LONG_DASH`, `LONG_DASH_DOT`. Omit to leave unchanged.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries full burden. It discloses the OAuth write requirement, the partial-update behavior (only passed fields changed), and implicitly that it modifies the presentation. However, it does not mention the response structure (error handling, success status) or explicitly state that the shape must exist. The parameter-level note that table cells and images will error is helpful but in param description, not main. Overall, it's transparent but could add a note on return value.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact: two sentences for purpose and alternatives, plus a third for auth and update behavior. It front-loads the core action, wastes no words, and every sentence earns its place. Ideal length for an AI agent to parse quickly.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given 8 parameters (3 required), high schema coverage, and presence of an output schema, the description covers all essential aspects: purpose, differentiation from siblings, auth requirements, and update semantics. It leaves no major gaps for an AI agent to understand when and how to invoke the tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 88%, so the schema already provides detailed meaning for most parameters. The main description only summarizes the categories (fill color/opacity, outline color/thickness/dash). It does not add new semantics beyond the schema, hence baseline 3. No parameter semantics improvement from the description itself.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb 'style' and the resource 'existing shape's fill and outline'. It explicitly distinguishes from sibling tools: format_slides_paragraph for paragraph text, format_slides_text for character styling, and create_slides_shape for creation. This leaves no ambiguity about the tool's core purpose.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides explicit guidance: use for styling existing shapes, not for text formatting or creation. It lists the specific alternatives and conditions, such as requiring write OAuth scope and that only passed fields are updated. This fully informs when to choose this tool over its siblings.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_doc_headers_footersA

Safely creates or updates header/footer text in a Google Doc.

This is the default tool for header/footer content. Do NOT use batch_update_doc with create_header_footer just to set header/footer text; that low-level operation is only for advanced section-break workflows and can fail when the default header/footer already exists.

This tool handles both creation and update in one call:

  • If the header/footer does not exist, it is automatically created first.

  • If the header/footer already exists, its content is replaced.

You do NOT need to create a header/footer separately before calling this tool. Simply call it with the desired content and it will work whether the header/footer exists or not.

ParametersJSON Schema
NameRequiredDescriptionDefault
user_google_emailYesUser's Google email address
document_idYesID of the document to update
section_typeYesType of section to create or update ("header" or "footer")
contentYesText content for the header/footer
header_footer_typeNoType of header/footer ("DEFAULT", "FIRST_PAGE_ONLY", "EVEN_PAGE")DEFAULT

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries full burden. It discloses that the tool handles both creation and update in one call, automatically creates if missing, and replaces existing content. It also advises that no prior creation is needed. While it doesn't cover permissions or error handling (e.g., invalid header/footer type), the key behavioral traits are well communicated.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Description is two paragraphs with clear front-loading: first sentence immediately states the purpose. Each sentence adds value, no fluff. Structured with bullet-like emphasis using 'If...' clauses. Efficiently conveys all essential information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given 5 parameters (4 required) and presence of an output schema, the description covers the tool's core purpose and usage guidelines. It lacks details on error conditions (e.g., non-existent document) or parameter constraints (e.g., valid header_footer_type values), but for a straightforward tool, it provides sufficient context for an agent to invoke it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Input schema has 100% coverage with descriptions. Baseline is 3. The description adds limited extra meaning beyond the schema: it explains that section_type is 'header' or 'footer' and that content is text, but these are already clear from schema. The description's main value is explaining how parameters relate to tool behavior (e.g., no need to create separately), which is more behavioral than parametric.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description clearly states the tool's function: 'Safely creates or updates header/footer text in a Google Doc.' It specifies the verb (creates or updates), resource (header/footer text in a Google Doc), and distinguishes from sibling tool batch_update_doc by noting this is the 'default tool' for header/footer content.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Description explicitly tells the agent when to use this tool ('default tool for header/footer content') and when not to use alternatives ('Do NOT use batch_update_doc with create_header_footer just to set header/footer text'), naming the alternative and explaining why the low-level approach is inferior ('only for advanced section-break workflows and can fail').

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_doc_tabA

Rename an existing tab in a Google Doc.

Changes the tab's display title only โ€” does not move or delete its content. For creating tabs use insert_doc_tab; for deleting use delete_doc_tab. Requires the documents OAuth scope.

ParametersJSON Schema
NameRequiredDescriptionDefault
user_google_emailYesThe user's Google email address (authenticated account).
document_idYesTarget document ID.
tab_idYesTab ID from list_doc_tabs.
titleYesNew display title.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries full burden. It discloses that the tool only changes the display title and does not move or delete content, and mentions required OAuth scope. This is transparent and aligns with expected behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences, front-loaded with the primary action, and contains no redundant information. Every sentence adds value.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the simplicity of the tool (rename only) and the presence of an output schema, the description covers purpose, behavior, limitations, OAuth scope, and differentiation adequately. No missing context.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Input schema has 100% description coverage, so baseline is 3. The description adds no further meaning beyond the schema's parameter descriptions, which are already clear.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states 'Rename an existing tab' and specifies the action is limited to changing the display title. It distinguishes from sibling tools insert_doc_tab and delete_doc_tab by explicitly naming them for creation and deletion.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly provides guidance on when to use this tool (rename) and when not to, referring to insert_doc_tab for creation and delete_doc_tab for deletion, offering clear alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_drive_fileA

Update a Drive file's metadata, folder parents, and flags.

Side effects: mutates the file (rename, move via add/remove_parents, trash/untrash, star). Does NOT upload new content โ€” for content use a native-app tool or create_drive_file. trashed=True is reversible with trashed=False until the file is permanently deleted. Requires the drive.file OAuth scope.

ParametersJSON Schema
NameRequiredDescriptionDefault
user_google_emailYesThe user's Google email address (authenticated account).
file_idYesDrive file ID to update.
nameNoNew display name.
descriptionNoNew description text.
mime_typeNoNew MIME type (changing this rarely works without also uploading matching content).
add_parentsNoComma-separated folder IDs to add the file into (effectively moves when combined with remove_parents).
remove_parentsNoComma-separated folder IDs to detach from.
starredNoTrue to star, False to unstar.
trashedNoTrue moves to Trash (soft-delete), False restores.
writers_can_shareNoWhether editors may re-share the file.
copy_requires_writer_permissionNoWhen True, copies require writer access (reader copy/export blocked).
propertiesNoDict of user-visible custom key-value pairs attached to the file.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Discloses side effects (rename, move, trash, star) and notes that trashing is reversible. It also warns that changing mime_type rarely works without content. With no annotations provided, the description carries the transparency burden and does so adequately.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise, with each sentence adding distinct information: purpose, side effects, exclusions, reversibility, and authentication. No redundancy or fluff.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Covers the main aspects of the tool: what it updates, side effects, what it does not do, reversibility, and auth scope. An output schema exists, so return values are handled externally. A minor gap is lack of explanation for add_parents/remove_parents move behavior, but the schema covers that detail.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the description does not need to explain individual parameters. It adds value by grouping parameters into categories (metadata, parents, flags) and adding clarifying notes like the reversibility of trashed, but this does not significantly exceed the schema's information.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool updates metadata, folder parents, and flags. It distinguishes itself from content creation tools by explicitly stating it does NOT upload content, and mentions alternatives like create_drive_file.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides guidance on when not to use (for content uploads) and mentions the required OAuth scope. It could be more explicit about when to prefer this over other update tools, but the context is clear given the sibling list.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_paragraph_styleB

Apply paragraph-level formatting, heading styles, and/or list formatting to a range in a Google Doc.

This tool can apply named heading styles (H1-H6) for semantic document structure, create bulleted or numbered lists with nested indentation, and customize paragraph properties like alignment, spacing, and indentation. All operations can be applied in a single call.

ParametersJSON Schema
NameRequiredDescriptionDefault
user_google_emailYesUser's Google email address
document_idYesDocument ID to modify
start_indexYesStart position using Docs API indices from inspect_doc_structure. For the main body, 0 is also accepted as an alias for the first writable position.
end_indexYesEnd position (exclusive) - should cover the entire paragraph
heading_levelNoHeading level 0-6 (0 = NORMAL_TEXT, 1 = H1, 2 = H2, etc.) Use for semantic document structure
alignmentNoText alignment - 'START' (left), 'CENTER', 'END' (right), or 'JUSTIFIED'
line_spacingNoLine spacing multiplier (1.0 = single, 1.5 = 1.5x, 2.0 = double)
indent_first_lineNoFirst line indent in points (e.g., 36 for 0.5 inch)
indent_startNoLeft/start indent in points
indent_endNoRight/end indent in points
space_aboveNoSpace above paragraph in points (e.g., 12 for one line)
space_belowNoSpace below paragraph in points
named_style_typeNoDirect named style type - 'NORMAL_TEXT', 'TITLE', 'SUBTITLE', 'HEADING_1' through 'HEADING_6'. Mutually exclusive with heading_level.
tab_idNoOptional document tab ID to target
segment_idNoOptional header/footer/footnote segment ID to target
directionNoParagraph direction - 'LEFT_TO_RIGHT' or 'RIGHT_TO_LEFT'
keep_lines_togetherNoKeep all lines of the paragraph together
keep_with_nextNoKeep the paragraph with the next paragraph
avoid_widow_and_orphanNoAvoid widows/orphans for the paragraph
page_break_beforeNoStart the paragraph on a new page
spacing_modeNo'NEVER_COLLAPSE' or 'COLLAPSE_LISTS'
shading_colorNoParagraph shading/background color (#RRGGBB)
list_typeNoCreate a list from existing paragraphs ('UNORDERED' for bullets, 'ORDERED' for numbers, 'CHECKBOX' for checklists)
list_nesting_levelNoNesting level for lists (0-8, where 0 is top level, default is 0) Use higher levels for nested/indented list items
bullet_presetNoOptional explicit Google Docs bullet preset

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.1/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description must fully disclose behavioral traits. However, it lacks details such as whether the operation is destructive (overwrites existing formatting), what permissions are required, or if the changes are reversible. It does not mention that applying a list type will convert existing paragraphs, nor does it address potential side effects. The description is too shallow for a complex mutation tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise and well-structured. A single introductory sentence states the core function, followed by two sentences elaborating on capabilities. Every sentence adds value, and there is no unnecessary repetition or fluff.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity (25 parameters, many optional), the description is somewhat sparse. It covers the main features but omits important context such as the need to obtain indices from inspect_doc_structure, the fact that list_type requires existing paragraphs, and that the operation can be applied in a single call. The presence of an output schema (unseen) slightly reduces the burden, but more completeness would help.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has 100% description coverage, meaning each parameter is already well-documented. The description adds overall context but does not significantly enhance individual parameter understanding beyond the schema. Baseline 3 is appropriate as the schema does the heavy lifting.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's function: applying paragraph-level formatting, heading styles, and list formatting to a range in a Google Doc. It lists specific capabilities (headings, lists, alignment, spacing, indentation). The name is descriptive, but it does not explicitly differentiate from sibling tools like modify_doc_text or format_slides_text, which might also handle formatting. A slight improvement would be to contrast with similar tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives. There is no mention of prerequisites (e.g., requiring indices from inspect_doc_structure), exclusions, or comparison with other paragraph-formatting tools among the many siblings. An agent would need to infer usage from the schema alone.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_script_contentA

Write files into an Apps Script project (replacing the full set).

Side effect: this is a full replace of the project's files โ€” any file NOT included in files is deleted. Always fetch via get_script_project first, modify the set, and pass the complete list back. Requires the script.projects OAuth scope.

ParametersJSON Schema
NameRequiredDescriptionDefault
user_google_emailYesThe user's Google email address (authenticated account).
script_idYesTarget project ID.
filesYesComplete list of file objects. Each dict needs: - "name" (str): file name without extension. - "type" (str): "SERVER_JS", "HTML", or "JSON" (the "JSON" type is only valid for the manifest file named "appsscript"). - "source" (str): full text content.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Discloses critical side effect: 'any file NOT included in files is deleted.' Also mentions required OAuth scope. With no annotations provided, the description fully carries the behavioral transparency burden and does so excellently.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences, no fluff. First sentence states purpose, second warns of side effect, third gives usage guidance. Front-loaded and efficient.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Covers purpose, side effect, prerequisite action, auth requirement. With an output schema present for return value details, the description is complete for a mutation tool of moderate complexity.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so baseline is 3. The schema itself already describes parameters in detail (e.g., files array structure). Description adds no extra parameter-specific meaning beyond behavioral context.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Clearly states 'Write files into an Apps Script project (replacing the full set)'. Specific verb (write), resource (Apps Script project), and key differentiator (full replace). Distinguishes from sibling tools like get_script_content or run_script_function.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly instructs to 'Always fetch via get_script_project first, modify the set, and pass the complete list back.' Provides a clear prerequisite and workflow. Missing explicit 'when not to use', but the guidance is strong.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_slides_speaker_notesA

Replace the speaker notes on a slide (deletes existing, inserts new).

Fully overwrites the slide's speaker-notes pane โ€” this is NOT an append. Existing notes are deleted first, then the new text is inserted. Pass an empty string to clear notes without adding any. To read current notes before overwriting, use get_slides_speaker_notes.

Requires OAuth scope: https://www.googleapis.com/auth/presentations (write).

ParametersJSON Schema
NameRequiredDescriptionDefault
user_google_emailYes
presentation_idYesGoogle Slides presentation ID (from the URL after `/d/`).
page_object_idYesObject ID of the target slide. Get it from `get_presentation.slides[].objectId`. Must reference an existing slide with a notes-page shape; if the slide has no notes shape (rare โ€” some custom layouts), the call returns an error string rather than failing.
notesYesNew speaker notes text to insert. Plain text only (no rich formatting). Replaces ALL existing notes on this slide. Pass `""` to clear without adding.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description fully explains behavior: it deletes existing notes and inserts new ones, and mentions that an empty string clears notes. It discloses a failure mode (slide without notes shape returns an error string), providing full transparency.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences, front-loaded with the main action, and every sentence adds value without redundancy. It is highly concise yet complete.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's straightforward nature, an existing output schema, and no annotations, the description covers purpose, behavior, failure modes, and alternatives. It provides all necessary context for correct agent invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has 75% coverage with descriptions for three of four parameters. The description does not add extra parameter-level details beyond the overall behavior, so it meets but does not exceed the baseline for the given coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states 'Replace the speaker notes on a slide' with a specific verb and resource. It distinguishes from appending by saying 'NOT an append' and references a sibling tool for reading, providing clear purpose differentiation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly says when to use (to replace notes) and when not (if you need to read first, use get_slides_speaker_notes). It also states the OAuth scope required, giving complete usage guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.

  1. 119 tool updatesv1.0.0
    • Changedadd_sheet_data_validation9 fields changed
      • changedInput schema / properties / custom_formula / description
        Previous value: -"For CUSTOM_FORMULA type, the formula (e.g., \"=A1>0\")."New value: +"For CUSTOM_FORMULA only โ€” an expression returning\nTRUE to allow, e.g. \"=A1>0\" or \"=REGEXMATCH(A1,\"^\\d+$\")\"."
      • changedInput schema / properties / input_message / description
        Previous value: -"Optional help text shown on hover."New value: +"Optional help text shown when the cell is\nfocused."
      • changedInput schema / properties / range_name / description
        Previous value: -"A1 range (e.g., \"Sheet1!A1:A10\" or \"A1:A10\")."New value: +"A1 range, e.g. \"Sheet1!A1:A10\" or \"A1:A10\"."
      • changedInput schema / properties / show_dropdown / description
        Previous value: -"For ONE_OF_LIST, whether to show the dropdown UI."New value: +"For ONE_OF_LIST โ€” True (default) renders the\ndropdown arrow; False hides it while still enforcing the\nrule."
      • changedInput schema / properties / spreadsheet_id / description
        Previous value: -"ID of the spreadsheet."New value: +"Target spreadsheet ID."
      • changedInput schema / properties / strict / description
        Previous value: -"If True, rejects invalid input. If False, shows a warning."New value: +"True rejects invalid input outright. False shows a\nwarning but accepts the entry."
      • addedInput schema / properties / user_google_email / description
        Added value: +"The user's Google email address (authenticated\naccount)."
      • changedInput schema / properties / validation_type / description
        Previous value: -"One of ONE_OF_LIST, NUMBER_BETWEEN, NUMBER_GREATER,\nNUMBER_LESS, NUMBER_EQ, TEXT_CONTAINS, TEXT_EQ, DATE_AFTER, DATE_BEFORE,\nDATE_ON_OR_AFTER, DATE_ON_OR_BEFORE, CUSTOM_FORMULA, BOOLEAN."New value: +"ONE_OF_LIST, NUMBER_BETWEEN, NUMBER_GREATER,\nNUMBER_LESS, NUMBER_EQ, TEXT_CONTAINS, TEXT_EQ, DATE_AFTER,\nDATE_BEFORE, DATE_ON_OR_AFTER, DATE_ON_OR_BEFORE,\nCUSTOM_FORMULA, or BOOLEAN."
      • changedInput schema / properties / values / description
        Previous value: -"List of allowed values (for ONE_OF_LIST) or bounds (for NUMBER_BETWEEN\npass [min, max]). For single-value conditions, pass [value]."New value: +"For ONE_OF_LIST: allowed dropdown options. For\nNUMBER_BETWEEN: [min, max]. For single-value conditions:\n[value]. Ignored for BOOLEAN and CUSTOM_FORMULA."
    • Changedadd_sheet_named_range3 fields changed
      • changedInput schema / properties / name / description
        Previous value: -"The name of the range (must be a valid Sheets identifier, e.g., \"TaxRate\")."New value: +"Identifier for the range. Must start with a letter or underscore;\ncan contain letters, digits, underscores. No spaces or special\ncharacters. Cannot be the same as an A1 cell reference (e.g., `A1`,\n`B2` are rejected). Examples: `TaxRate`, `Q1_Revenue`, `_Config`."
      • changedInput schema / properties / range_name / description
        Previous value: -"A1 range (e.g., \"Sheet1!A1:B10\")."New value: +"A1-notation range being named. Sheet name required for\nmulti-sheet workbooks, e.g., `\"Sheet1!A1:B10\"`, `\"Config!B2\"`.\nSingle cells work (`Sheet1!B2`). Full-column/row refs\n(`Sheet1!A:A`, `Sheet1!1:1`) are accepted. Sheet names with spaces\nmust be single-quoted: `\"'My Sheet'!A1:B5\"`."
      • addedInput schema / properties / spreadsheet_id / description
        Added value: +"Google Sheets spreadsheet ID (from the URL after `/d/`)."
    • Changedappend_table_rows4 fields changed
      • changedInput schema / properties / spreadsheet_id / description
        Previous value: -"The ID of the spreadsheet. Required."New value: +"Target spreadsheet ID."
      • changedInput schema / properties / table_id / description
        Previous value: -"The ID of the table to append to (get from list_sheet_tables). Required."New value: +"Table ID from list_sheet_tables (a numeric string;\ndistinct from sheetId)."
      • changedInput schema / properties / user_google_email / description
        Previous value: -"The user's Google email address. Required."New value: +"The user's Google email address (authenticated\naccount)."
      • changedInput schema / properties / values / description
        Previous value: -"2D array of values to append. Each inner\nlist is one row. Can be a JSON string or Python list. Required."New value: +"2D list (each inner list = one row of cell values) or a\nJSON-encoded version of same. Column count should match the\ntable."
    • Changedbatch_modify_gmail_message_labels4 fields changed
      • changedInput schema / properties / add_label_ids / description
        Previous value: -"List of label IDs to add to the messages."New value: +"Label IDs to add across all messages. Use system IDs\n(\"INBOX\", \"TRASH\", \"UNREAD\") or user label IDs from\nlist_gmail_labels. Names do NOT work."
      • changedInput schema / properties / message_ids / description
        Previous value: -"A list of message IDs to modify."New value: +"Gmail message IDs from search_gmail_messages."
      • changedInput schema / properties / remove_label_ids / description
        Previous value: -"List of label IDs to remove from the messages."New value: +"Label IDs to remove across all messages."
      • changedInput schema / properties / user_google_email / description
        Previous value: -"The user's Google email address. Required."New value: +"The user's Google email address (authenticated\naccount)."
    • Changedbatch_update_form3 fields changed
      • changedInput schema / properties / form_id / description
        Previous value: -"The ID of the form to update."New value: +"Form ID from the edit URL."
      • changedInput schema / properties / requests / description
        Previous value: -"List of update requests to apply.\nSupported request types:\n- createItem: Add a new question or content item\n- updateItem: Modify an existing item\n- deleteItem: Remove an item\n- moveItem: Reorder an item\n- updateFormInfo: Update form title/description\n- updateSettings: Modify form settings (e.g., quiz mode)"New value: +"List of Forms API request objects โ€” each has exactly\none key: `createItem` (with item body + location.index),\n`updateItem` (item + updateMask), `deleteItem` (location\nindex), `moveItem` (originalLocation + newLocation),\n`updateFormInfo` (info + updateMask), or `updateSettings`\n(settings + updateMask). See\nhttps://developers.google.com/forms/api/reference/rest/v1/forms/batchUpdate\nfor full schemas."
      • changedInput schema / properties / user_google_email / description
        Previous value: -"The user's Google email address. Required."New value: +"The user's Google email address (authenticated\naccount)."
    • Changedbatch_update_presentation3 fields changed
      • changedInput schema / properties / presentation_id / description
        Previous value: -"The ID of the presentation to update."New value: +"Target presentation ID."
      • changedInput schema / properties / requests / description
        Previous value: -"List of update requests to apply."New value: +"List of Slides API request objects โ€” each has one key\nlike \"createSlide\", \"updateTextStyle\", \"deleteObject\",\n\"createShape\", \"insertText\", \"replaceAllText\", etc. See\nhttps://developers.google.com/slides/api/reference/rest/v1/presentations/request\nfor the full schema."
      • changedInput schema / properties / user_google_email / description
        Previous value: -"The user's Google email address. Required."New value: +"The user's Google email address (authenticated\naccount)."
    • Changedcheck_drive_file_public_access2 fields changed
      • changedInput schema / properties / file_name / description
        Previous value: -"The name of the file to check."New value: +"Exact display name (case-sensitive) as shown in Drive."
      • changedInput schema / properties / user_google_email / description
        Previous value: -"The user's Google email address. Required."New value: +"The user's Google email address (authenticated\naccount)."
    • Changedcopy_drive_file4 fields changed
      • changedInput schema / properties / file_id / description
        Previous value: -"The ID of the file to copy. Required."New value: +"Drive file ID of the source."
      • changedInput schema / properties / new_name / description
        Previous value: -"New name for the copied file. If not provided, uses \"Copy of [original name]\"."New value: +"Name for the copy. Defaults to \"Copy of <original>\"."
      • changedInput schema / properties / parent_folder_id / description
        Previous value: -"The ID of the folder where the copy should be created. Defaults to 'root' (My Drive)."New value: +"Target folder ID. Default \"root\" (My Drive).\nShared-drive folder IDs work."
      • changedInput schema / properties / user_google_email / description
        Previous value: -"The user's Google email address. Required."New value: +"The user's Google email address (authenticated\naccount)."
    • Changedcreate_calendar4 fields changed
      • changedInput schema / properties / description / description
        Previous value: -"An optional description for the calendar."New value: +"Optional longer description shown in calendar\nsettings."
      • changedInput schema / properties / summary / description
        Previous value: -"The title/name of the new calendar."New value: +"Calendar display name, e.g. \"Client Meetings\" or\n\"Personal - Fitness\"."
      • changedInput schema / properties / timezone / description
        Previous value: -"IANA timezone for the calendar (e.g. 'America/New_York')."New value: +"IANA timezone string like \"America/New_York\" or\n\"Europe/London\". Defaults to the account's default timezone\nwhen omitted."
      • changedInput schema / properties / user_google_email / description
        Previous value: -"The user's Google email address. Required."New value: +"The user's Google email address (authenticated\naccount)."
    • Changedcreate_drive_file6 fields changed
      • changedInput schema / properties / content / description
        Previous value: -"If provided, the content to write to the file."New value: +"Text content for the new file. Mutually exclusive with\nfileUrl. Provide one of content or fileUrl."
      • changedInput schema / properties / fileUrl / description
        Previous value: -"If provided, fetches the file content from this URL. Supports file://, http://, and https:// protocols."New value: +"Source URL โ€” supports file:// (local path), http://, and\nhttps://. When provided, the bytes are streamed into Drive.\nSSRF-protected with size limits."
      • changedInput schema / properties / file_name / description
        Previous value: -"The name for the new file."New value: +"Name for the new Drive file (include the file extension\nfor clarity, though the MIME type is authoritative)."
      • changedInput schema / properties / folder_id / description
        Previous value: -"The ID of the parent folder. Defaults to 'root'. For shared drives, this must be a folder ID within the shared drive."New value: +"Parent folder ID. \"root\" = My Drive root; for shared\ndrives pass a folder ID inside that drive. Default \"root\"."
      • changedInput schema / properties / mime_type / description
        Previous value: -"The MIME type of the file. Defaults to 'text/plain'."New value: +"MIME type of the uploaded bytes. Default\n\"text/plain\". When fileUrl is used and the server responds\nwith a Content-Type, it overrides this."
      • changedInput schema / properties / user_google_email / description
        Previous value: -"The user's Google email address. Required."New value: +"The user's Google email address (authenticated\naccount)."
    • Changedcreate_drive_folder3 fields changed
      • changedInput schema / properties / folder_name / description
        Previous value: -"The name for the new folder."New value: +"Display name for the new folder. Forward slashes are\ntreated as literal characters, not nesting."
      • changedInput schema / properties / parent_folder_id / description
        Previous value: -"The ID of the parent folder. Defaults to 'root'.\nFor shared drives, use a folder ID within that shared drive."New value: +"Parent folder ID. \"root\" for My Drive root, or a\nfolder ID within a shared drive for shared-drive folders."
      • changedInput schema / properties / user_google_email / description
        Previous value: -"The user's Google email address. Required."New value: +"The user's Google email address (authenticated\naccount)."
    • Changedcreate_form4 fields changed
      • changedInput schema / properties / description / description
        Previous value: -"The description of the form."New value: +"Optional subtitle text shown under the title."
      • changedInput schema / properties / document_title / description
        Previous value: -"The document title (shown in browser tab)."New value: +"Optional browser-tab/Drive title. Defaults to\nthe form's `title` if omitted."
      • changedInput schema / properties / title / description
        Previous value: -"The title of the form."New value: +"Form title shown at the top of the form to respondents."
      • changedInput schema / properties / user_google_email / description
        Previous value: -"The user's Google email address. Required."New value: +"The user's Google email address (authenticated\naccount)."
    • Changedcreate_presentation2 fields changed
      • changedInput schema / properties / title / description
        Previous value: -"The title for the new presentation. Defaults to \"Untitled Presentation\"."New value: +"Display title for the new deck. Default \"Untitled\nPresentation\"."
      • changedInput schema / properties / user_google_email / description
        Previous value: -"The user's Google email address. Required."New value: +"The user's Google email address (authenticated\naccount)."
    • Changedcreate_reaction3 fields changed
      • changedInput schema / properties / emoji_unicode / description
        Previous value: -"The emoji character to react with (e.g. ๐Ÿ‘)."New value: +"Single Unicode emoji character, e.g. \"๐Ÿ‘\"\n(thumbs up) or a literal emoji like a smiley."
      • changedInput schema / properties / message_id / description
        Previous value: -"The message resource name (e.g. spaces/X/messages/Y)."New value: +"Message resource name\n(\"spaces/<space>/messages/<msg>\") from get_messages or\nsearch_messages."
      • addedInput schema / properties / user_google_email / description
        Added value: +"The user's Google email address (authenticated\naccount)."
    • Changedcreate_script_project3 fields changed
      • changedInput schema / properties / parent_id / description
        Previous value: -"Optional Drive folder ID or bound container ID"New value: +"Optional Drive ID of the container (Sheet/Doc/Form/\nSlides) the script is bound to. Omit for a standalone\nproject."
      • changedInput schema / properties / title / description
        Previous value: -"Project title"New value: +"Display title for the new project."
      • changedInput schema / properties / user_google_email / description
        Previous value: -"User's email address"New value: +"The user's Google email address (authenticated\naccount)."
    • Changedcreate_sheet3 fields changed
      • changedInput schema / properties / sheet_name / description
        Previous value: -"The name of the new sheet. Required."New value: +"Display name for the new tab. Must be unique within\nthe spreadsheet."
      • changedInput schema / properties / spreadsheet_id / description
        Previous value: -"The ID of the spreadsheet. Required."New value: +"Target spreadsheet ID."
      • changedInput schema / properties / user_google_email / description
        Previous value: -"The user's Google email address. Required."New value: +"The user's Google email address (authenticated\naccount)."
    • Changedcreate_slides_shape8 fields changed
      • changedInput schema / properties / fill_color / description
        Previous value: -"Optional hex color for the shape fill."New value: +"Optional hex color for the shape interior, e.g., `#4285F4`.\nAccepts `#RRGGBB` or `RRGGBB`. Omit for the default transparent fill\n(shape renders as an outline only until you set a fill later)."
      • addedInput schema / properties / height / description
        Added value: +"Shape height in EMUs. Default `2000000` โ‰ˆ 2.19 inches."
      • addedInput schema / properties / left / description
        Added value: +"X position (top-left corner) in EMUs (English Metric Units).\nDefault `914400` EMU = 1 inch from the slide's left edge.\nConversion: 1 inch = 914,400 EMU; 1 point = 12,700 EMU; 1 cm = 360,000 EMU."
      • addedInput schema / properties / page_object_id / description
        Added value: +"Object ID of the slide where the shape will be placed.\nGet it from `get_presentation.slides[].objectId` or `get_page`."
      • addedInput schema / properties / presentation_id / description
        Added value: +"Google Slides presentation ID (from the URL after `/d/`)."
      • changedInput schema / properties / shape_type / description
        Previous value: -"One of RECTANGLE, ROUND_RECTANGLE, ELLIPSE, TRIANGLE, DIAMOND,\nSTAR_5, ARROW_RIGHT, etc. See Google Slides API Shape enum."New value: +"Shape enum from Google's API. Common values:\n`RECTANGLE`, `ROUND_RECTANGLE`, `ELLIPSE`, `TRIANGLE`, `RIGHT_TRIANGLE`,\n`DIAMOND`, `PENTAGON`, `HEXAGON`, `OCTAGON`, `PARALLELOGRAM`, `TRAPEZOID`,\n`STAR_5`, `STAR_6`, `STAR_8`, `STAR_12`, `STAR_16`, `STAR_24`, `STAR_32`,\n`ARROW_RIGHT`, `ARROW_LEFT`, `ARROW_UP`, `ARROW_DOWN`, `LEFT_RIGHT_ARROW`,\n`CLOUD`, `SUN`, `MOON`, `HEART`, `LIGHTNING_BOLT`, `SPEECH`, `CLOUD_CALLOUT`.\nFull list: https://developers.google.com/slides/api/reference/rest/v1/pages/pageElements#Type"
      • addedInput schema / properties / top / description
        Added value: +"Y position (top-left corner) in EMUs. Default `914400` = 1 inch down."
      • addedInput schema / properties / width / description
        Added value: +"Shape width in EMUs. Default `2000000` โ‰ˆ 2.19 inches."
    • Changedcreate_slides_text_box11 fields changed
      • addedInput schema / properties / bold / description
        Added value: +"True to bold the initial text."
      • addedInput schema / properties / font_size / description
        Added value: +"Font size in points for the initial text."
      • addedInput schema / properties / height / description
        Added value: +"Box height in EMU. Default 1000000 (โ‰ˆ1.09 in)."
      • addedInput schema / properties / italic / description
        Added value: +"True to italicize the initial text."
      • addedInput schema / properties / left / description
        Added value: +"X offset from slide's left edge in EMU. Default 914400\n(1 in)."
      • changedInput schema / properties / page_object_id / description
        Previous value: -"Object ID of the slide to add the text box to."New value: +"Slide objectId where the box is placed (from\nget_presentation.slides[].objectId)."
      • addedInput schema / properties / presentation_id / description
        Added value: +"Target presentation ID."
      • changedInput schema / properties / text / description
        Previous value: -"Initial text content."New value: +"Initial text content for the box."
      • addedInput schema / properties / top / description
        Added value: +"Y offset from top in EMU. Default 914400 (1 in)."
      • addedInput schema / properties / user_google_email / description
        Added value: +"The user's Google email address (authenticated\naccount)."
      • addedInput schema / properties / width / description
        Added value: +"Box width in EMU. Default 3000000 (โ‰ˆ3.28 in)."
    • Changedcreate_spreadsheet3 fields changed
      • changedInput schema / properties / sheet_names / description
        Previous value: -"List of sheet names to create. If not provided, creates one sheet with default name."New value: +"Initial tab names. When omitted, one default tab is\ncreated (\"Sheet1\"). Example: [\"Raw Data\", \"Summary\", \"Charts\"]."
      • changedInput schema / properties / title / description
        Previous value: -"The title of the new spreadsheet. Required."New value: +"Display title for the new spreadsheet."
      • changedInput schema / properties / user_google_email / description
        Previous value: -"The user's Google email address. Required."New value: +"The user's Google email address (authenticated\naccount)."
    • Changedcreate_version3 fields changed
      • changedInput schema / properties / description / description
        Previous value: -"Optional description for this version"New value: +"Optional version note (e.g. release notes, ticket\nnumber)."
      • changedInput schema / properties / script_id / description
        Previous value: -"The script project ID"New value: +"Target project ID."
      • changedInput schema / properties / user_google_email / description
        Previous value: -"User's email address"New value: +"The user's Google email address (authenticated\naccount)."
    • Changeddelete_doc_tab3 fields changed
      • changedInput schema / properties / document_id / description
        Previous value: -"ID of the document to update"New value: +"Target document ID."
      • changedInput schema / properties / tab_id / description
        Previous value: -"ID of the tab to delete (use inspect_doc_structure to find tab IDs)"New value: +"Tab ID to delete. Get from list_doc_tabs or\ninspect_doc_structure."
      • changedInput schema / properties / user_google_email / description
        Previous value: -"User's Google email address"New value: +"The user's Google email address (authenticated\naccount)."
    • Changeddelete_script_project2 fields changed
      • changedInput schema / properties / script_id / description
        Previous value: -"The script project ID to delete"New value: +"Target Apps Script project ID (same as the Drive\nfile ID)."
      • changedInput schema / properties / user_google_email / description
        Previous value: -"User's email address"New value: +"The user's Google email address (authenticated\naccount)."
    • Changeddelete_slides_element2 fields changed
      • changedInput schema / properties / object_id / description
        Previous value: -"Object ID of the element (or slide) to delete."New value: +"Object ID of the slide or page element to delete. Get slide\nIDs from `get_presentation.slides[].objectId`. Get element IDs\nfrom `get_presentation.slides[].pageElements[].objectId` or from\nthe return value of creator tools (`create_slides_shape`,\n`insert_slides_image`, etc.). Cannot delete master/layout pages."
      • addedInput schema / properties / presentation_id / description
        Added value: +"Google Slides presentation ID (from the URL after `/d/`)."
    • Changeddownload_chat_attachment3 fields changed
      • changedInput schema / properties / attachment_index / description
        Previous value: -"Zero-based index of the attachment to download (default 0)."New value: +"0-based index into the message's attachments\nlist. Default 0 (first attachment)."
      • changedInput schema / properties / message_id / description
        Previous value: -"The message resource name (e.g. spaces/X/messages/Y)."New value: +"Message resource name\n(\"spaces/<space>/messages/<msg>\") from get_messages."
      • addedInput schema / properties / user_google_email / description
        Added value: +"The user's Google email address (authenticated\naccount)."
    • Changedduplicate_slide2 fields changed
      • changedInput schema / properties / page_object_id / description
        Previous value: -"Object ID of the slide/object to duplicate."New value: +"Object ID of the slide OR page element to duplicate.\nGet slide IDs from `get_presentation.slides[].objectId`. Get element\nIDs from `slides[].pageElements[].objectId`. Duplicating a slide\nclones everything on it; duplicating a shape clones just that shape."
      • addedInput schema / properties / presentation_id / description
        Added value: +"Google Slides presentation ID (from the URL after `/d/`)."
    • Changedexport_doc_to_pdf4 fields changed
      • changedInput schema / properties / document_id / description
        Previous value: -"ID of the Google Doc to export"New value: +"Google Doc ID (must be a native Doc โ€” .docx stored\nin Drive is rejected)."
      • changedInput schema / properties / folder_id / description
        Previous value: -"Drive folder ID to save PDF in (optional - if not provided, saves in root)"New value: +"Drive folder to save the PDF into. Defaults to My\nDrive root."
      • changedInput schema / properties / pdf_filename / description
        Previous value: -"Name for the PDF file (optional - if not provided, uses original name + \"_PDF\")"New value: +"Name for the generated PDF. Defaults to\n\"<original>_PDF.pdf\". \".pdf\" extension is auto-appended."
      • changedInput schema / properties / user_google_email / description
        Previous value: -"User's Google email address"New value: +"The user's Google email address (authenticated\naccount)."
    • Changedformat_all_slides_text10 fields changed
      • addedInput schema / properties / bold / description
        Added value: +"True to bold, False to unbold, None to leave unchanged."
      • changedInput schema / properties / font_family / description
        Previous value: -"Optional font family (e.g., \"Arial\")."New value: +"Font family name, e.g. \"Arial\"."
      • changedInput schema / properties / font_size / description
        Previous value: -"Optional size in points."New value: +"Font size in points."
      • addedInput schema / properties / italic / description
        Added value: +"Same semantics as bold."
      • changedInput schema / properties / page_object_id / description
        Previous value: -"Optional slide ID. If provided, only formats text on\nthat one slide. If omitted, formats every slide in the presentation."New value: +"Slide objectId to scope the restyle to that one\nslide. Omit to restyle every slide in the deck."
      • changedInput schema / properties / presentation_id / description
        Previous value: -"ID of the presentation."New value: +"Target presentation ID."
      • addedInput schema / properties / strikethrough / description
        Added value: +"Same semantics as bold."
      • changedInput schema / properties / text_color / description
        Previous value: -"Optional hex color (e.g., \"#333333\")."New value: +"Hex color like \"#333333\"."
      • addedInput schema / properties / underline / description
        Added value: +"Same semantics as bold."
      • addedInput schema / properties / user_google_email / description
        Added value: +"The user's Google email address (authenticated\naccount)."
    • Changedformat_slides_paragraph9 fields changed
      • changedInput schema / properties / alignment / description
        Previous value: -"One of START, CENTER, END, JUSTIFIED."New value: +"Paragraph horizontal alignment. One of `START` (left),\n`CENTER`, `END` (right), `JUSTIFIED`. Omit to leave unchanged."
      • changedInput schema / properties / bullet_preset / description
        Previous value: -"Bullet style preset (e.g., BULLET_DISC_CIRCLE_SQUARE,\nNUMBERED_DIGIT_ALPHA_ROMAN). Pass \"NONE\" to remove bullets."New value: +"Bullet list preset name from the Google Slides API, e.g.,\n`BULLET_DISC_CIRCLE_SQUARE`, `BULLET_DIAMONDX_ARROW3D_SQUARE`,\n`NUMBERED_DIGIT_ALPHA_ROMAN`, `NUMBERED_UPPERALPHA_ALPHA_ROMAN`.\nPass `NONE` (uppercase) to REMOVE existing bullets. Omit to leave\nbullet state unchanged."
      • addedInput schema / properties / end_index / description
        Added value: +"Optional 0-based character offset (exclusive) where\nformatting ends. Must be greater than start_index if both provided."
      • changedInput schema / properties / line_spacing / description
        Previous value: -"Line spacing as percentage (100.0 = single, 150.0 = 1.5x)."New value: +"Line spacing as percentage โ€” `100.0` = single-spaced,\n`115.0` = 1.15x (Google Docs default), `150.0` = 1.5x, `200.0` = double.\nOmit to leave unchanged."
      • addedInput schema / properties / page_element_id / description
        Added value: +"Object ID of the target shape/text box/table cell.\nGet it from `get_presentation` or `get_page`. Must be a text-bearing\nelement; passing an image element will return a no-op error."
      • addedInput schema / properties / presentation_id / description
        Added value: +"Google Slides presentation ID (from the URL after `/d/`)."
      • addedInput schema / properties / space_above / description
        Added value: +"Points of space above each paragraph (e.g., `12` for\n~12pt gap). Omit to leave unchanged."
      • addedInput schema / properties / space_below / description
        Added value: +"Points of space below each paragraph. Omit to leave unchanged."
      • addedInput schema / properties / start_index / description
        Added value: +"Optional 0-based character offset within the element's\ntext where formatting starts. When both start/end are omitted,\nformatting applies to ALL paragraphs in the element."
    • Changedformat_slides_text12 fields changed
      • addedInput schema / properties / bold / description
        Added value: +"True to bold, False to unbold, None to leave unchanged."
      • addedInput schema / properties / end_index / description
        Added value: +"0-based character offset (exclusive) where\nformatting ends."
      • changedInput schema / properties / font_family / description
        Previous value: -"Optional font family name (e.g., \"Arial\")."New value: +"Font family name, e.g. \"Arial\", \"Roboto\",\n\"Helvetica Neue\"."
      • changedInput schema / properties / font_size / description
        Previous value: -"Optional font size in points."New value: +"Font size in points, e.g. 14 or 24.5."
      • addedInput schema / properties / italic / description
        Added value: +"Same semantics as bold for italic."
      • changedInput schema / properties / page_element_id / description
        Previous value: -"Object ID of the element containing the text."New value: +"objectId of the text-bearing element (text box,\nshape, or placeholder) โ€” get from get_presentation or\nget_page."
      • changedInput schema / properties / presentation_id / description
        Previous value: -"ID of the presentation."New value: +"Parent presentation ID (from the URL after /d/)."
      • addedInput schema / properties / start_index / description
        Added value: +"0-based character offset where formatting begins.\nOmit both indices to format ALL text in the element."
      • addedInput schema / properties / strikethrough / description
        Added value: +"Same semantics as bold for strikethrough."
      • changedInput schema / properties / text_color / description
        Previous value: -"Optional hex color (e.g., \"#FF0000\")."New value: +"Hex color like \"#FF0000\" or \"#333333\"."
      • addedInput schema / properties / underline / description
        Added value: +"Same semantics as bold for underline."
      • changedInput schema / properties / user_google_email / description
        Previous value: -"The user's Google email address. Required."New value: +"The user's Google email address (authenticated\naccount)."
    • Changedget_contact2 fields changed
      • changedInput schema / properties / contact_id / description
        Previous value: -"The contact ID (e.g., \"c1234567890\" or full resource name \"people/c1234567890\")."New value: +"Contact ID โ€” either the short form (\"c1234567890\")\nor the full resource name (\"people/c1234567890\"). The short\nform is auto-prefixed."
      • changedInput schema / properties / user_google_email / description
        Previous value: -"The user's Google email address. Required."New value: +"The user's Google email address (authenticated\naccount)."
    • Changedget_contact_group3 fields changed
      • changedInput schema / properties / group_id / description
        Previous value: -"The contact group ID."New value: +"Group ID โ€” short (\"myContacts\"/\"starred\"/\"abc123\") or\nfull resource name (\"contactGroups/abc123\"). Auto-prefixed\nwhen short."
      • changedInput schema / properties / max_members / description
        Previous value: -"Maximum number of members to return (default: 100, max: 1000)."New value: +"Max members to return. 1-1000. Default 100."
      • changedInput schema / properties / user_google_email / description
        Previous value: -"The user's Google email address. Required."New value: +"The user's Google email address (authenticated\naccount)."
    • Changedget_doc_content3 fields changed
      • changedInput schema / properties / document_id / description
        Previous value: -"ID of the Google Doc (or full URL)"New value: +"Doc ID or a full URL like\ndocs.google.com/document/d/<id>/edit (either is accepted)."
      • changedInput schema / properties / suggestions_view_mode / description
        Previous value: -"How to render suggestions in the returned content:\n- \"DEFAULT_FOR_CURRENT_ACCESS\": Default based on user's access level\n- \"SUGGESTIONS_INLINE\": Suggested changes appear inline in the document\n- \"PREVIEW_SUGGESTIONS_ACCEPTED\": Preview as if all suggestions were accepted\n- \"PREVIEW_WITHOUT_SUGGESTIONS\": Preview as if all suggestions were rejected"New value: +"How tracked-changes are rendered:\n\"DEFAULT_FOR_CURRENT_ACCESS\" (default), \"SUGGESTIONS_INLINE\"\n(show suggestions inline), \"PREVIEW_SUGGESTIONS_ACCEPTED\"\n(render as if accepted), or \"PREVIEW_WITHOUT_SUGGESTIONS\"\n(render as if rejected)."
      • changedInput schema / properties / user_google_email / description
        Previous value: -"User's Google email address"New value: +"The user's Google email address (authenticated\naccount)."
    • Changedget_doc_smart_chips1 field changed
      • changedInput schema / properties / document_id / description
        Previous value: -"ID of the document."New value: +"Google Docs document ID (from the URL after `/document/d/`)."
    • Changedget_drive_file_content2 fields changed
      • changedInput schema / properties / file_id / description
        Previous value: -"Drive file ID."New value: +"Drive file ID from search_drive_files, list_drive_items,\nor the URL like drive.google.com/file/d/<id>/view."
      • changedInput schema / properties / user_google_email / description
        Previous value: -"The userโ€™s Google email address."New value: +"The user's Google email address (authenticated\naccount)."
    • Changedget_drive_file_download_url3 fields changed
      • changedInput schema / properties / export_format / description
        Previous value: -"Optional export format for Google native files.\n          Options: 'pdf', 'docx', 'xlsx', 'csv', 'pptx'.\n          If not specified, uses sensible defaults (PDF for Docs/Slides, XLSX for Sheets).\n          For Sheets: supports 'csv', 'pdf', or 'xlsx' (default)."New value: +"Export target for Google-native files. Docs:\n\"pdf\" (default) or \"docx\". Sheets: \"xlsx\" (default), \"pdf\",\nor \"csv\". Slides: \"pdf\" (default) or \"pptx\". Ignored for\nnon-native files."
      • changedInput schema / properties / file_id / description
        Previous value: -"The Google Drive file ID to download."New value: +"Drive file ID from search_drive_files or a URL like\ndrive.google.com/file/d/<id>/view."
      • changedInput schema / properties / user_google_email / description
        Previous value: -"The user's Google email address. Required."New value: +"The user's Google email address (authenticated\naccount)."
    • Changedget_drive_file_permissions2 fields changed
      • changedInput schema / properties / file_id / description
        Previous value: -"The ID of the file to check permissions for."New value: +"Drive file ID from search_drive_files or a shareable\nURL."
      • changedInput schema / properties / user_google_email / description
        Previous value: -"The user's Google email address. Required."New value: +"The user's Google email address (authenticated\naccount)."
    • Changedget_drive_revisions2 fields changed
      • changedInput schema / properties / file_id / description
        Previous value: -"Drive file ID."New value: +"Drive file ID (from a file URL like\n`drive.google.com/file/d/<file_id>/view`, or from `search_drive_files`,\nor from `get_drive_file_metadata`)."
      • changedInput schema / properties / page_size / description
        Previous value: -"Maximum revisions to return (1-1000). Default 25."New value: +"Maximum number of revisions to return. Clamped to `[1, 1000]`.\nDefault `25`. No pagination token support in this tool โ€” if the\nfile has more than `page_size` revisions, only the most recent are\nreturned."
    • Changedget_drive_shareable_link2 fields changed
      • changedInput schema / properties / file_id / description
        Previous value: -"The ID of the file or folder to get the shareable link for. Required."New value: +"Drive file or folder ID."
      • changedInput schema / properties / user_google_email / description
        Previous value: -"The user's Google email address. Required."New value: +"The user's Google email address (authenticated\naccount)."
    • Changedget_events9 fields changed
      • changedInput schema / properties / calendar_id / description
        Previous value: -"The ID of the calendar to query. Use 'primary' for the user's primary calendar. Defaults to 'primary'. Calendar IDs can be obtained using `list_calendars`."New value: +"Calendar ID from list_calendars, or \"primary\" for the\nuser's main calendar. Default \"primary\"."
      • changedInput schema / properties / detailed / description
        Previous value: -"Whether to return detailed event information including description, location, attendees, and attendee details (response status, organizer, optional flags). Defaults to False."New value: +"False returns just summary + times + link; True adds\ndescription, location, attendees with response status, and\norganizer."
      • changedInput schema / properties / event_id / description
        Previous value: -"The ID of a specific event to retrieve. If provided, retrieves only this event and ignores time filtering parameters."New value: +"Specific event ID to fetch. From a prior get_events call\nor a calendar URL like calendar.google.com/calendar/u/0/r/eventedit/<id>.\nWhen set, all range/query filters are ignored."
      • changedInput schema / properties / include_attachments / description
        Previous value: -"Whether to include attachment information in detailed event output. When True, shows attachment details (fileId, fileUrl, mimeType, title) for events that have attachments. Only applies when detailed=True. Set this to True when you need to view or access files that have been attached to calendar events, such as meeting documents, presentations, or other shared files. Defaults to False."New value: +"When detailed=True, also include attachment\nfileId/fileUrl/mimeType/title for events with attached Drive\nfiles. Ignored when detailed=False."
      • changedInput schema / properties / max_results / description
        Previous value: -"The maximum number of events to return. Defaults to 25. Ignored if event_id is provided."New value: +"Cap on events returned, 1-2500. Default 25."
      • changedInput schema / properties / query / description
        Previous value: -"A keyword to search for within event fields (summary, description, location). Ignored if event_id is provided."New value: +"Free-text filter matched against summary, description, and\nlocation."
      • changedInput schema / properties / time_max / description
        Previous value: -"The end of the time range (exclusive) in RFC3339 format. If omitted, events starting from `time_min` onwards are considered (up to `max_results`). Ignored if event_id is provided."New value: +"Range end, RFC3339 exclusive. Omit for open-ended range\n(capped by max_results)."
      • changedInput schema / properties / time_min / description
        Previous value: -"The start of the time range (inclusive) in RFC3339 format (e.g., '2024-05-12T10:00:00Z' or '2024-05-12'). If omitted, defaults to the current time. Ignored if event_id is provided."New value: +"Range start, RFC3339 (e.g. \"2026-05-01T00:00:00Z\" or\n\"2026-05-01\"). Defaults to now when omitted."
      • changedInput schema / properties / user_google_email / description
        Previous value: -"The user's Google email address. Required."New value: +"The user's Google email address (authenticated\naccount)."
    • Changedget_form1 field changed
      • changedInput schema / properties / form_id / description
        Previous value: -"The ID of the form to retrieve."New value: +"The form ID โ€” the string after `/forms/d/` in the edit URL\n(NOT the full URL). Example: `1FAIpQLSe...`. Both user-owned and\nshared forms work if the user has at least read access."
    • Changedget_form_response2 fields changed
      • changedInput schema / properties / form_id / description
        Previous value: -"The ID of the form."New value: +"The form ID โ€” the string after `/forms/d/` in the edit URL."
      • changedInput schema / properties / response_id / description
        Previous value: -"The ID of the response to retrieve."New value: +"The unique response ID returned by `list_form_responses`\n(field `responseId`). Opaque string assigned by Google at submit\ntime; not the same as a row number."
    • Changedget_gmail_attachment_content3 fields changed
      • changedInput schema / properties / attachment_id / description
        Previous value: -"The ID of the attachment to download."New value: +"Attachment ID from the parent message's payload parts\nโ€” get this by calling get_gmail_message_content and reading the\nattachment metadata section."
      • changedInput schema / properties / message_id / description
        Previous value: -"The ID of the Gmail message containing the attachment."New value: +"Gmail message ID that owns the attachment."
      • changedInput schema / properties / user_google_email / description
        Previous value: -"The user's Google email address. Required."New value: +"The user's Google email address (authenticated\naccount)."
    • Changedget_gmail_message_content2 fields changed
      • changedInput schema / properties / message_id / description
        Previous value: -"The unique ID of the Gmail message to retrieve."New value: +"Gmail message ID from search_gmail_messages or from the\nURL like mail.google.com/mail/u/0/#inbox/<id>."
      • changedInput schema / properties / user_google_email / description
        Previous value: -"The user's Google email address. Required."New value: +"The user's Google email address (authenticated\naccount)."
    • Changedget_gmail_messages_content_batch3 fields changed
      • changedInput schema / properties / format / description
        Previous value: -"Message format. \"full\" includes body, \"metadata\" only headers."New value: +"\"full\" (headers + body) or \"metadata\" (headers only, much\nfaster for listing triage)."
      • changedInput schema / properties / message_ids / description
        Previous value: -"List of Gmail message IDs to retrieve (max 25 per batch)."New value: +"List of Gmail message IDs from search_gmail_messages.\nNo hard cap โ€” the tool chunks into batches of 25 automatically."
      • changedInput schema / properties / user_google_email / description
        Previous value: -"The user's Google email address. Required."New value: +"The user's Google email address (authenticated\naccount)."
    • Changedget_gmail_thread_content2 fields changed
      • changedInput schema / properties / thread_id / description
        Previous value: -"The unique ID of the Gmail thread to retrieve."New value: +"Gmail thread ID, typically the \"threadId\" field returned\nby search_gmail_messages or any message-get response."
      • changedInput schema / properties / user_google_email / description
        Previous value: -"The user's Google email address. Required."New value: +"The user's Google email address (authenticated\naccount)."
    • Changedget_gmail_threads_content_batch2 fields changed
      • changedInput schema / properties / thread_ids / description
        Previous value: -"A list of Gmail thread IDs to retrieve. The function will automatically batch requests in chunks of 25."New value: +"List of Gmail thread IDs. No hard cap โ€” the tool chunks\ninto batches of 25 automatically."
      • changedInput schema / properties / user_google_email / description
        Previous value: -"The user's Google email address. Required."New value: +"The user's Google email address (authenticated\naccount)."
    • Changedget_messages5 fields changed
      • changedInput schema / properties / message_filter / description
        Previous value: -"Optional filter string using the Chat API filter syntax.\n            Supports createTime and thread.name.\n            Examples:\n              'createTime > \"2026-03-18T00:00:00-03:00\"'\n              'createTime > \"2026-03-18T00:00:00-03:00\" AND createTime < \"2026-03-19T00:00:00-03:00\"'\n              'thread.name = spaces/X/threads/Y'"New value: +"Chat API filter expression. Supports createTime\nand thread.name, e.g.\n'createTime > \"2026-03-18T00:00:00Z\"' or\n'thread.name = spaces/X/threads/Y'. Full-text search is NOT\nsupported here โ€” use search_messages."
      • addedInput schema / properties / order_by / description
        Added value: +"\"createTime desc\" (default, newest first) or\n\"createTime\" (oldest first)."
      • addedInput schema / properties / page_size / description
        Added value: +"Max messages returned. Default 50."
      • addedInput schema / properties / space_id / description
        Added value: +"Space resource name from list_spaces, formatted as\n\"spaces/<id>\"."
      • addedInput schema / properties / user_google_email / description
        Added value: +"The user's Google email address (authenticated\naccount)."
    • Changedget_page3 fields changed
      • changedInput schema / properties / page_object_id / description
        Previous value: -"The object ID of the page/slide to retrieve."New value: +"Slide objectId from get_presentation's\n`slides[].objectId` field."
      • changedInput schema / properties / presentation_id / description
        Previous value: -"The ID of the presentation."New value: +"Parent presentation ID."
      • changedInput schema / properties / user_google_email / description
        Previous value: -"The user's Google email address. Required."New value: +"The user's Google email address (authenticated\naccount)."
    • Changedget_page_thumbnail4 fields changed
      • changedInput schema / properties / page_object_id / description
        Previous value: -"The object ID of the page/slide."New value: +"Slide objectId from get_presentation."
      • changedInput schema / properties / presentation_id / description
        Previous value: -"The ID of the presentation."New value: +"Parent presentation ID."
      • changedInput schema / properties / thumbnail_size / description
        Previous value: -"Size of thumbnail (\"LARGE\", \"MEDIUM\", \"SMALL\"). Defaults to \"MEDIUM\"."New value: +"\"LARGE\" (~1600px wide), \"MEDIUM\" (~800px, default),\nor \"SMALL\" (~200px)."
      • changedInput schema / properties / user_google_email / description
        Previous value: -"The user's Google email address. Required."New value: +"The user's Google email address (authenticated\naccount)."
    • Changedget_presentation2 fields changed
      • changedInput schema / properties / presentation_id / description
        Previous value: -"The ID of the presentation to retrieve."New value: +"Presentation ID from a URL like\ndocs.google.com/presentation/d/<id>/edit."
      • changedInput schema / properties / user_google_email / description
        Previous value: -"The user's Google email address. Required."New value: +"The user's Google email address (authenticated\naccount)."
    • Changedget_script_content3 fields changed
      • changedInput schema / properties / file_name / description
        Previous value: -"Name of the file to retrieve"New value: +"File name as it appears in the Apps Script editor\n(without extension โ€” e.g. \"Code\", \"appsscript\",\n\"helpers\"). Matched exactly."
      • changedInput schema / properties / script_id / description
        Previous value: -"The script project ID"New value: +"Apps Script project ID."
      • changedInput schema / properties / user_google_email / description
        Previous value: -"User's email address"New value: +"The user's Google email address (authenticated\naccount)."
    • Changedget_script_metrics3 fields changed
      • changedInput schema / properties / metrics_granularity / description
        Previous value: -"Granularity of metrics - \"DAILY\" or \"WEEKLY\""New value: +"\"DAILY\" (last 7 days) or \"WEEKLY\" (last 8\nweeks). Default \"DAILY\"."
      • changedInput schema / properties / script_id / description
        Previous value: -"The script project ID"New value: +"Target project ID."
      • changedInput schema / properties / user_google_email / description
        Previous value: -"User's email address"New value: +"The user's Google email address (authenticated\naccount)."
    • Changedget_script_project2 fields changed
      • changedInput schema / properties / script_id / description
        Previous value: -"The script project ID"New value: +"Apps Script project ID from list_script_projects or\na script URL like script.google.com/d/<scriptId>/edit."
      • changedInput schema / properties / user_google_email / description
        Previous value: -"User's email address"New value: +"The user's Google email address (authenticated\naccount)."
    • Changedget_slides_speaker_notes3 fields changed
      • changedInput schema / properties / page_object_id / description
        Previous value: -"Object ID of the slide. Either this or slide_index is required."New value: +"Object ID of the target slide. Either this OR\n`slide_index` is required. Get it from\n`get_presentation.slides[].objectId`. Preferred over `slide_index`\nbecause object IDs are stable across slide reordering."
      • addedInput schema / properties / presentation_id / description
        Added value: +"Google Slides presentation ID (from the URL after `/d/`)."
      • changedInput schema / properties / slide_index / description
        Previous value: -"0-based slide index. Used if page_object_id not provided."New value: +"0-based position of the slide in the deck. Used only if\n`page_object_id` is not provided. Index 0 = first slide."
    • Changedget_spreadsheet_info2 fields changed
      • changedInput schema / properties / spreadsheet_id / description
        Previous value: -"The ID of the spreadsheet to get info for. Required."New value: +"Spreadsheet ID from list_spreadsheets or a URL\nlike docs.google.com/spreadsheets/d/<id>/edit."
      • changedInput schema / properties / user_google_email / description
        Previous value: -"The user's Google email address. Required."New value: +"The user's Google email address (authenticated\naccount)."
    • Changedget_task3 fields changed
      • changedInput schema / properties / task_id / description
        Previous value: -"The ID of the task to retrieve."New value: +"Task ID from list_tasks."
      • changedInput schema / properties / task_list_id / description
        Previous value: -"The ID of the task list containing the task."New value: +"Parent task list ID from list_task_lists."
      • changedInput schema / properties / user_google_email / description
        Previous value: -"The user's Google email address. Required."New value: +"The user's Google email address (authenticated\naccount)."
    • Changedget_task_list2 fields changed
      • changedInput schema / properties / task_list_id / description
        Previous value: -"The ID of the task list to retrieve."New value: +"Task list ID from list_task_lists."
      • changedInput schema / properties / user_google_email / description
        Previous value: -"The user's Google email address. Required."New value: +"The user's Google email address (authenticated\naccount)."
    • Changedget_version3 fields changed
      • changedInput schema / properties / script_id / description
        Previous value: -"The script project ID"New value: +"The Apps Script project ID โ€” the string after `/d/` in the\n`script.google.com/home/projects/<id>` URL, or the `scriptId`\nfield returned by `create_script_project` / `list_script_projects`."
      • changedInput schema / properties / user_google_email / description
        Previous value: -"User's email address"New value: +"User's email address. Required."
      • changedInput schema / properties / version_number / description
        Previous value: -"The version number to retrieve (1, 2, 3, etc.)"New value: +"The 1-indexed integer version number to retrieve\n(1 for the first version, 2 for the second, etc.). Must refer to\nan already-created version; requesting a non-existent number\nraises a `404 Not Found` handled by the error decorator."
    • Changedimport_to_google_doc7 fields changed
      • changedInput schema / properties / content / description
        Previous value: -"Text content for text-based formats (MD, TXT, HTML)."New value: +"Inline text for text formats (md, txt, html). Mutually\nexclusive with file_path and file_url."
      • changedInput schema / properties / file_name / description
        Previous value: -"The name for the new Google Doc (extension will be ignored)."New value: +"Display name for the resulting Google Doc (extension\nis stripped)."
      • changedInput schema / properties / file_path / description
        Previous value: -"Local file path for binary formats (DOCX, ODT). Supports file:// URLs."New value: +"Local path or file:// URL to a binary source\n(docx/odt/rtf). Path safety validated."
      • changedInput schema / properties / file_url / description
        Previous value: -"Remote URL to fetch the file from (http/https)."New value: +"http:// or https:// URL to stream the source from.\nSSRF-protected with size limits."
      • changedInput schema / properties / folder_id / description
        Previous value: -"The ID of the parent folder. Defaults to 'root'."New value: +"Parent folder ID. Default \"root\"."
      • changedInput schema / properties / source_format / description
        Previous value: -"Source format hint ('md', 'markdown', 'docx', 'txt', 'html', 'rtf', 'odt').\n                           Auto-detected from file_name extension if not provided."New value: +"Override for format detection: \"md\"/\"markdown\",\n\"docx\", \"txt\", \"html\", \"rtf\", \"odt\". Auto-detected from\nfile_name extension or content heuristics when omitted."
      • changedInput schema / properties / user_google_email / description
        Previous value: -"The user's Google email address. Required."New value: +"The user's Google email address (authenticated\naccount)."
    • Changedinsert_doc_elements8 fields changed
      • changedInput schema / properties / columns / description
        Previous value: -"Number of columns for table (required for table)"New value: +"Column count for a table. Required when\nelement_type=\"table\"."
      • changedInput schema / properties / document_id / description
        Previous value: -"ID of the document to update"New value: +"Target document ID."
      • changedInput schema / properties / element_type / description
        Previous value: -"Type of element to insert (\"table\", \"list\", \"page_break\")"New value: +"\"table\", \"list\", or \"page_break\"."
      • changedInput schema / properties / index / description
        Previous value: -"Position to insert element (0-based)"New value: +"0-based insertion index. Get stable positions from\ninspect_doc_structure. Index 0 is auto-bumped to 1."
      • changedInput schema / properties / list_type / description
        Previous value: -"Type of list (\"UNORDERED\", \"ORDERED\") (required for list)"New value: +"\"UNORDERED\" (bullets) or \"ORDERED\" (numbered).\nRequired when element_type=\"list\"."
      • changedInput schema / properties / rows / description
        Previous value: -"Number of rows for table (required for table)"New value: +"Row count for a table. Required when element_type=\"table\"."
      • changedInput schema / properties / text / description
        Previous value: -"Initial text content for list items"New value: +"Seed text for a list item. Defaults to \"List item\" when\nlist_type is set but text is omitted."
      • changedInput schema / properties / user_google_email / description
        Previous value: -"User's Google email address"New value: +"The user's Google email address (authenticated\naccount)."
    • Changedinsert_doc_file_chip6 fields changed
      • changedInput schema / properties / display_text / description
        Previous value: -"Optional visible text for the link. Defaults to the URL."New value: +"Optional visible anchor text. Defaults to the URL\nitself (still renders as a chip on next open)."
      • changedInput schema / properties / document_id / description
        Previous value: -"ID of the document."New value: +"Target document ID."
      • changedInput schema / properties / file_url / description
        Previous value: -"Full Drive file URL (e.g. \"https://docs.google.com/document/d/.../edit\")."New value: +"Full Drive URL, e.g. a share/edit URL like\nhttps://docs.google.com/document/d/<id>/edit,\nhttps://drive.google.com/file/d/<id>/view, or a Sheets/Slides\nURL."
      • changedInput schema / properties / index / description
        Previous value: -"Document index at which to insert."New value: +"1-based document index to insert at. Default 1."
      • changedInput schema / properties / tab_id / description
        Previous value: -"Optional tab ID to scope the insertion to."New value: +"Tab ID from list_doc_tabs to scope to a specific tab."
      • addedInput schema / properties / user_google_email / description
        Added value: +"The user's Google email address (authenticated\naccount)."
    • Changedinsert_doc_image6 fields changed
      • changedInput schema / properties / document_id / description
        Previous value: -"ID of the document to update"New value: +"Target document ID."
      • changedInput schema / properties / height / description
        Previous value: -"Image height in points (optional)"New value: +"Image height in points. 0 or omitted = auto-size."
      • changedInput schema / properties / image_source / description
        Previous value: -"Drive file ID or public image URL"New value: +"Drive file ID (non-URL string) or public HTTPS\nimage URL. Drive IDs are auto-converted to\nhttps://drive.google.com/uc?id=<id>."
      • changedInput schema / properties / index / description
        Previous value: -"Position to insert image (0-based)"New value: +"0-based insertion index from inspect_doc_structure.\n0 auto-bumped to 1."
      • changedInput schema / properties / user_google_email / description
        Previous value: -"User's Google email address"New value: +"The user's Google email address (authenticated\naccount)."
      • changedInput schema / properties / width / description
        Previous value: -"Image width in points (optional)"New value: +"Image width in points. 0 or omitted = auto-size."
    • Changedinsert_doc_link6 fields changed
      • changedInput schema / properties / document_id / description
        Previous value: -"ID of the document."New value: +"Target document ID."
      • changedInput schema / properties / index / description
        Previous value: -"Document index at which to insert the link. Defaults to 1."New value: +"1-based document index where the text is inserted.\nDefault 1 (start of body). Get stable indices from\ninspect_doc_structure."
      • changedInput schema / properties / tab_id / description
        Previous value: -"Optional tab ID to scope the insertion to."New value: +"Tab ID from list_doc_tabs to target a specific tab."
      • changedInput schema / properties / text / description
        Previous value: -"The visible text for the link."New value: +"Visible link text inserted into the document."
      • changedInput schema / properties / url / description
        Previous value: -"The target URL (http/https/mailto supported)."New value: +"Target URL โ€” http://, https://, or mailto: schemes\nsupported."
      • addedInput schema / properties / user_google_email / description
        Added value: +"The user's Google email address (authenticated\naccount)."
    • Changedinsert_doc_markdown7 fields changed
      • changedInput schema / properties / document_id / description
        Previous value: -"ID of the document."New value: +"Target document ID."
      • changedInput schema / properties / end_of_segment / description
        Previous value: -"If True, append to the end of the targeted segment/body\nwithout needing to calculate an index. Most reliable for empty\nsegments; for non-empty segments, use inspect_doc_structure first\nto find the exact insertion index."New value: +"True appends to the end of the target segment\nwithout needing to calculate an index โ€” safest for repeatable\ninserts."
      • changedInput schema / properties / index / description
        Previous value: -"Document index at which to insert (default 1 โ€” start of body).\nIgnored when end_of_segment=True."New value: +"1-based document index to insert at. Default 1 (start of\nbody). Ignored when end_of_segment=True."
      • changedInput schema / properties / markdown / description
        Previous value: -"Markdown content to insert."New value: +"Markdown source to insert."
      • changedInput schema / properties / segment_id / description
        Previous value: -"Optional header/footer/footnote segment ID."New value: +"Header/footer/footnote segment ID from\ninspect_doc_structure (do not invent IDs)."
      • changedInput schema / properties / tab_id / description
        Previous value: -"Optional tab ID to target a specific tab."New value: +"Tab ID from list_doc_tabs to target a specific tab."
      • addedInput schema / properties / user_google_email / description
        Added value: +"The user's Google email address (authenticated\naccount)."
    • Changedinsert_doc_person_chip4 fields changed
      • changedInput schema / properties / document_id / description
        Previous value: -"ID of the document."New value: +"Google Docs document ID (from the URL after `/document/d/`)."
      • changedInput schema / properties / email / description
        Previous value: -"Email address of the person to mention."New value: +"Email address of the person to @mention, e.g., `alice@example.com`.\nMust be a valid email; the Docs client uses it to look up the\ncontact card at render time."
      • changedInput schema / properties / index / description
        Previous value: -"Document index at which to insert."New value: +"1-based character position in the document body where the chip\nis inserted. Default `1` = start of body. Use\n`inspect_doc_structure` to find exact indices for non-trivial\nplacements. Ignored contextually when `tab_id` is set โ€” index\nresolves within the specified tab's content."
      • changedInput schema / properties / tab_id / description
        Previous value: -"Optional tab ID to scope the insertion to."New value: +"Optional tab ID to target a specific tab. Get it from\n`list_doc_tabs`. Omit for single-body (legacy) documents."
    • Changedinsert_doc_tab5 fields changed
      • changedInput schema / properties / document_id / description
        Previous value: -"ID of the document to update"New value: +"Target document ID."
      • changedInput schema / properties / index / description
        Previous value: -"Position index for the new tab (0-based among sibling tabs)"New value: +"0-based position among sibling tabs. 0 = first; use a\nlarge number to append at the end."
      • changedInput schema / properties / parent_tab_id / description
        Previous value: -"Optional ID of a parent tab to nest the new tab under"New value: +"Parent tab's tabId (from list_doc_tabs) to nest\nthe new tab as a child. Omit for a top-level tab."
      • changedInput schema / properties / title / description
        Previous value: -"Title of the new tab"New value: +"Display title of the new tab."
      • changedInput schema / properties / user_google_email / description
        Previous value: -"User's Google email address"New value: +"The user's Google email address (authenticated\naccount)."
    • Changedinsert_slides_image7 fields changed
      • addedInput schema / properties / height / description
        Added value: +"Image height in EMUs. Default `2000000` โ‰ˆ 2.19 inches."
      • changedInput schema / properties / image_url / description
        Previous value: -"Publicly accessible image URL."New value: +"Publicly accessible HTTPS URL pointing to a PNG/JPEG/GIF.\nGoogle fetches this URL server-side; must return the image bytes\ndirectly (no login walls, redirects to interstitial pages, etc.)."
      • addedInput schema / properties / left / description
        Added value: +"X position (top-left corner) in EMUs (English Metric Units).\nDefault `914400` EMU = 1 inch from the slide's left edge.\nConversion: 1 inch = 914,400 EMU; 1 point = 12,700 EMU."
      • addedInput schema / properties / page_object_id / description
        Added value: +"Object ID of the slide to place the image on. Get it\nfrom `get_presentation.slides[].objectId`."
      • addedInput schema / properties / presentation_id / description
        Added value: +"Google Slides presentation ID (from the URL after `/d/`)."
      • addedInput schema / properties / top / description
        Added value: +"Y position (top-left corner) in EMUs. Default `914400` = 1 inch down."
      • addedInput schema / properties / width / description
        Added value: +"Image width in EMUs. Default `3000000` โ‰ˆ 3.28 inches. Image is\nstretched/compressed to this size; aspect ratio is NOT preserved\nautomatically โ€” compute width:height from the source image to avoid\ndistortion."
    • Changedlist_calendars1 field changed
      • changedInput schema / properties / user_google_email / description
        Previous value: -"The user's Google email address. Required."New value: +"The user's Google email address (authenticated\naccount)."
    • Changedlist_contact_groups3 fields changed
      • changedInput schema / properties / page_size / description
        Previous value: -"Maximum number of groups to return (default: 100, max: 1000)."New value: +"Max groups per page. 1-1000. Default 100."
      • changedInput schema / properties / page_token / description
        Previous value: -"Token for pagination."New value: +"Cursor from a prior response's \"Next page token\" line."
      • changedInput schema / properties / user_google_email / description
        Previous value: -"The user's Google email address. Required."New value: +"The user's Google email address (authenticated\naccount)."
    • Changedlist_contacts4 fields changed
      • changedInput schema / properties / page_size / description
        Previous value: -"Maximum number of contacts to return (default: 100, max: 1000)."New value: +"Max contacts per page. 1-1000. Default 100."
      • changedInput schema / properties / page_token / description
        Previous value: -"Token for pagination."New value: +"Cursor from a prior response's \"Next page token\"\nline. Omit for first page."
      • changedInput schema / properties / sort_order / description
        Previous value: -"Sort order: \"LAST_MODIFIED_ASCENDING\", \"LAST_MODIFIED_DESCENDING\", \"FIRST_NAME_ASCENDING\", or \"LAST_NAME_ASCENDING\"."New value: +"\"LAST_MODIFIED_ASCENDING\",\n\"LAST_MODIFIED_DESCENDING\", \"FIRST_NAME_ASCENDING\", or\n\"LAST_NAME_ASCENDING\"."
      • changedInput schema / properties / user_google_email / description
        Previous value: -"The user's Google email address. Required."New value: +"The user's Google email address (authenticated\naccount)."
    • Changedlist_deployments2 fields changed
      • changedInput schema / properties / script_id / description
        Previous value: -"The script project ID"New value: +"Target project ID."
      • changedInput schema / properties / user_google_email / description
        Previous value: -"User's email address"New value: +"The user's Google email address (authenticated\naccount)."
    • Changedlist_doc_tabs1 field changed
      • changedInput schema / properties / document_id / description
        Previous value: -"ID of the document."New value: +"Google Docs document ID (from the URL after `/document/d/`)."
    • Changedlist_docs_in_folder3 fields changed
      • addedInput schema / properties / folder_id / description
        Added value: +"Drive folder ID (the string after `/folders/` in the\nfolder URL). Defaults to `\"root\"` which is the user's My Drive\nroot. For shared drives, pass the shared-drive ID. Passing an\ninvalid or inaccessible folder ID returns \"No Google Docs found\"\n(Drive treats missing folders as an empty set rather than\nraising an error in most cases)."
      • addedInput schema / properties / page_size / description
        Added value: +"Maximum number of docs to return. Defaults to 100.\nGoogle's hard cap is 1000. No pagination token is exposed โ€”\nraise this value if a folder may contain more docs."
      • addedInput schema / properties / user_google_email / description
        Added value: +"The user's Google email address. Required."
    • Changedlist_drive_items10 fields changed
      • changedInput schema / properties / corpora / description
        Previous value: -"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."New value: +"\"user\", \"drive\", or \"allDrives\". Defaults to \"drive\"\nwhen drive_id is set."
      • changedInput schema / properties / detailed / description
        Previous value: -"Whether to include size, modified time, and link in results. Defaults to True."New value: +"True (default) includes size, modified time,\nwebViewLink; False returns just name/ID/type."
      • changedInput schema / properties / drive_id / description
        Previous value: -"ID of the shared drive. If provided, the listing is scoped to this drive."New value: +"Shared drive ID to scope the listing. Omit for My\nDrive + shared-with-me."
      • changedInput schema / properties / file_type / description
        Previous value: -"Restrict results to a specific file type. Accepts a friendly\n                       name ('folder', 'document'/'doc', 'spreadsheet'/'sheet',\n                       'presentation'/'slides', 'form', 'drawing', 'pdf', 'shortcut',\n                       'script', 'site', 'jam'/'jamboard') or any raw MIME type\n                       string (e.g. 'application/pdf'). Defaults to None (all types)."New value: +"Friendly alias (\"folder\", \"doc\", \"sheet\", \"slides\",\n\"pdf\", etc.) or raw MIME type. Filters to that type only."
      • changedInput schema / properties / folder_id / description
        Previous value: -"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."New value: +"Folder ID to list. \"root\" = My Drive root. For a\nshared drive, pass the drive ID to list its root or a folder\nID within it. Default \"root\"."
      • changedInput schema / properties / include_items_from_all_drives / description
        Previous value: -"Whether items from all accessible shared drives should be included if `drive_id` is not set. Defaults to True."New value: +"True (default) to include shared\ndrive items when drive_id is omitted."
      • changedInput schema / properties / order_by / description
        Previous value: -"Sort order. Comma-separated list of sort keys with optional 'desc' modifier.\n                      Valid keys: 'createdTime', 'folder', 'modifiedByMeTime', 'modifiedTime',\n                      'name', 'name_natural', 'quotaBytesUsed', 'recency', 'sharedWithMeTime',\n                      'starred', 'viewedByMeTime'. Example: 'modifiedTime desc' or 'folder,modifiedTime desc,name'.\n                      Defaults to None (Drive API default ordering)."New value: +"Comma-separated sort keys with optional \" desc\", e.g.\n\"folder,modifiedTime desc\". Valid keys: createdTime, folder,\nmodifiedByMeTime, modifiedTime, name, name_natural,\nquotaBytesUsed, recency, sharedWithMeTime, starred,\nviewedByMeTime."
      • changedInput schema / properties / page_size / description
        Previous value: -"The maximum number of items to return. Defaults to 100."New value: +"Max items returned, 1-1000. Default 100."
      • changedInput schema / properties / page_token / description
        Previous value: -"Page token from a previous response's nextPageToken to retrieve the next page of results."New value: +"Cursor from a prior response's `nextPageToken`."
      • changedInput schema / properties / user_google_email / description
        Previous value: -"The user's Google email address. Required."New value: +"The user's Google email address (authenticated\naccount)."
    • Changedlist_form_responses3 fields changed
      • changedInput schema / properties / form_id / description
        Previous value: -"The ID of the form."New value: +"The form ID โ€” the string after `/forms/d/` in the edit URL."
      • changedInput schema / properties / page_size / description
        Previous value: -"Maximum number of responses to return. Defaults to 10."New value: +"Maximum number of responses per page. Defaults to 10.\nGoogle's hard cap is 5000; practical cap depends on response\npayload size. Use smaller values (10โ€“100) for UI-facing calls\nand larger (500โ€“5000) for batch export."
      • changedInput schema / properties / page_token / description
        Previous value: -"Token for retrieving next page of results."New value: +"Opaque token from a prior call's `Next page token` line.\nOmit to fetch the first page. Tokens are one-shot โ€” never reuse\nthe same token across sessions."
    • Changedlist_gmail_filters1 field changed
      • changedInput schema / properties / user_google_email / description
        Previous value: -"The user's Google email address. Required."New value: +"The user's Google email address (authenticated\naccount)."
    • Changedlist_gmail_labels1 field changed
      • changedInput schema / properties / user_google_email / description
        Previous value: -"The user's Google email address. Required."New value: +"The user's Google email address (authenticated\naccount)."
    • Changedlist_script_processes3 fields changed
      • changedInput schema / properties / page_size / description
        Previous value: -"Number of results (default: 50)"New value: +"Max processes to return. Default 50."
      • changedInput schema / properties / script_id / description
        Previous value: -"Optional filter by script ID"New value: +"Optional โ€” scope to a single project's executions.\nOmit for all accessible scripts."
      • changedInput schema / properties / user_google_email / description
        Previous value: -"User's email address"New value: +"The user's Google email address (authenticated\naccount)."
    • Changedlist_script_projects3 fields changed
      • changedInput schema / properties / page_size / description
        Previous value: -"Number of results per page (default: 50)"New value: +"Max projects per page. Default 50; Drive cap 1000."
      • changedInput schema / properties / page_token / description
        Previous value: -"Token for pagination (optional)"New value: +"Cursor from a prior response's pagination token."
      • changedInput schema / properties / user_google_email / description
        Previous value: -"User's email address"New value: +"The user's Google email address (authenticated\naccount)."
    • Changedlist_sheet_tables2 fields changed
      • changedInput schema / properties / spreadsheet_id / description
        Previous value: -"The ID of the spreadsheet. Required."New value: +"Target spreadsheet ID."
      • changedInput schema / properties / user_google_email / description
        Previous value: -"The user's Google email address. Required."New value: +"The user's Google email address (authenticated\naccount)."
    • Changedlist_spaces3 fields changed
      • addedInput schema / properties / page_size / description
        Added value: +"Maximum number of spaces to return in one call. Defaults\nto 100; Google's hard cap is 1000. No pagination token is\nexposed by this tool โ€” request a larger page_size if a user is\nin more than 100 spaces."
      • addedInput schema / properties / space_type / description
        Added value: +"Filter by space type. One of:\n- `\"all\"` (default): both rooms and direct messages\n- `\"room\"`: multi-member named spaces (`SPACE`)\n- `\"dm\"`: 1:1 or group direct messages (`DIRECT_MESSAGE`)\nAny other value is treated as `\"all\"`."
      • addedInput schema / properties / user_google_email / description
        Added value: +"The user's Google email address. Required."
    • Changedlist_spreadsheets2 fields changed
      • changedInput schema / properties / max_results / description
        Previous value: -"Maximum number of spreadsheets to return. Defaults to 25."New value: +"Max spreadsheets to return. Default 25."
      • changedInput schema / properties / user_google_email / description
        Previous value: -"The user's Google email address. Required."New value: +"The user's Google email address (authenticated\naccount)."
    • Changedlist_task_lists3 fields changed
      • changedInput schema / properties / max_results / description
        Previous value: -"Maximum number of task lists to return (default: 1000, max: 1000)."New value: +"Max lists per page. Default/cap 1000."
      • changedInput schema / properties / page_token / description
        Previous value: -"Token for pagination."New value: +"Cursor from a prior response's \"Next page token\"\nline."
      • changedInput schema / properties / user_google_email / description
        Previous value: -"The user's Google email address. Required."New value: +"The user's Google email address (authenticated\naccount)."
    • Changedlist_tasks13 fields changed
      • changedInput schema / properties / completed_max / description
        Previous value: -"Upper bound for completion date (RFC 3339 timestamp)."New value: +"RFC3339 upper bound on completion date."
      • changedInput schema / properties / completed_min / description
        Previous value: -"Lower bound for completion date (RFC 3339 timestamp)."New value: +"RFC3339 lower bound on completion date."
      • changedInput schema / properties / due_max / description
        Previous value: -"Upper bound for due date (RFC 3339 timestamp)."New value: +"RFC3339 upper bound on due date. Auto-adjusted to\ninclude the boundary date's tasks."
      • changedInput schema / properties / due_min / description
        Previous value: -"Lower bound for due date (RFC 3339 timestamp)."New value: +"RFC3339 lower bound on due date."
      • changedInput schema / properties / max_results / description
        Previous value: -"Maximum number of tasks to return. (default: 20, max: 10000)."New value: +"Cap on tasks returned across all pages. Default\nvaries; hard cap 10000."
      • changedInput schema / properties / page_token / description
        Previous value: -"Token for pagination."New value: +"Resume cursor from a prior call's \"Next page token\"."
      • changedInput schema / properties / show_assigned / description
        Previous value: -"Whether to include assigned tasks (default: False)."New value: +"Include tasks assigned to the user. Default False."
      • changedInput schema / properties / show_completed / description
        Previous value: -"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."New value: +"Include completed tasks. Default True."
      • changedInput schema / properties / show_deleted / description
        Previous value: -"Whether to include deleted tasks (default: False)."New value: +"Include deleted tasks. Default False."
      • changedInput schema / properties / show_hidden / description
        Previous value: -"Whether to include hidden tasks (default: False)."New value: +"Include tasks hidden from the UI (required alongside\nshow_completed to see web/mobile-completed tasks). Default\nFalse."
      • changedInput schema / properties / task_list_id / description
        Previous value: -"The ID of the task list to retrieve tasks from."New value: +"Task list ID from list_task_lists."
      • changedInput schema / properties / updated_min / description
        Previous value: -"Lower bound for last modification time (RFC 3339 timestamp)."New value: +"RFC3339 lower bound on last-modified time โ€” useful\nfor incremental sync."
      • changedInput schema / properties / user_google_email / description
        Previous value: -"The user's Google email address. Required."New value: +"The user's Google email address (authenticated\naccount)."
    • Changedlist_versions2 fields changed
      • changedInput schema / properties / script_id / description
        Previous value: -"The script project ID"New value: +"Target project ID."
      • changedInput schema / properties / user_google_email / description
        Previous value: -"User's email address"New value: +"The user's Google email address (authenticated\naccount)."
    • Changedmanage_contact_group7 fields changed
      • changedInput schema / properties / action / description
        Previous value: -"The action to perform: \"create\", \"update\", \"delete\", or \"modify_members\"."New value: +"\"create\", \"update\", \"delete\", or \"modify_members\"."
      • changedInput schema / properties / add_contact_ids / description
        Previous value: -"Contact IDs to add (for \"modify_members\")."New value: +"For modify_members โ€” contact IDs to add. Short\nor \"people/<id>\"; auto-prefixed."
      • changedInput schema / properties / delete_contacts / description
        Previous value: -"If True and action is \"delete\", also delete contacts in\nthe group (default: False)."New value: +"Only with action=\"delete\". True also deletes\ncontacts inside the group; False (default) keeps them."
      • changedInput schema / properties / group_id / description
        Previous value: -"The contact group ID. Required for \"update\", \"delete\",\nand \"modify_members\" actions."New value: +"Group ID (short or \"contactGroups/<id>\"). Required for\nupdate, delete, modify_members."
      • changedInput schema / properties / name / description
        Previous value: -"The group name. Required for \"create\" and \"update\" actions."New value: +"New group display name. Required for create and update."
      • changedInput schema / properties / remove_contact_ids / description
        Previous value: -"Contact IDs to remove (for \"modify_members\")."New value: +"For modify_members โ€” contact IDs to remove."
      • changedInput schema / properties / user_google_email / description
        Previous value: -"The user's Google email address. Required."New value: +"The user's Google email address (authenticated\naccount)."
    • Changedmanage_deployment6 fields changed
      • changedInput schema / properties / action / description
        Previous value: -"Action to perform - \"create\", \"update\", or \"delete\""New value: +"\"create\", \"update\", or \"delete\"."
      • changedInput schema / properties / deployment_id / description
        Previous value: -"The deployment ID (required for update and delete)"New value: +"Existing deployment ID. Required for update and\ndelete (get from list_deployments)."
      • changedInput schema / properties / description / description
        Previous value: -"Deployment description (required for create and update)"New value: +"Deployment description shown in the Apps Script UI.\nRequired for create and update."
      • changedInput schema / properties / script_id / description
        Previous value: -"The script project ID"New value: +"Target project ID."
      • changedInput schema / properties / user_google_email / description
        Previous value: -"User's email address"New value: +"The user's Google email address (authenticated\naccount)."
      • changedInput schema / properties / version_description / description
        Previous value: -"Optional version description (for create only)"New value: +"For create only โ€” description attached to\nthe auto-created version. Defaults to `description` when\nomitted."
    • Changedmanage_drive_access14 fields changed
      • changedInput schema / properties / action / description
        Previous value: -"The access management action to perform. Required. One of:\n- \"grant\": Share with a single user, group, domain, or anyone.\n- \"grant_batch\": Share with multiple recipients in one call.\n- \"update\": Modify an existing permission (role or expiration).\n- \"revoke\": Remove an existing permission.\n- \"transfer_owner\": Transfer file ownership to another user."New value: +"\"grant\", \"grant_batch\", \"update\", \"revoke\", or\n\"transfer_owner\"."
      • changedInput schema / properties / allow_file_discovery / description
        Previous value: -"For 'domain'/'anyone' shares, whether\nthe file appears in search. Used by \"grant\"."New value: +"For domain/anyone shares, True = indexable\nin search, False = link-only."
      • changedInput schema / properties / email_message / description
        Previous value: -"Custom notification email message.\nUsed by \"grant\" and \"grant_batch\"."New value: +"Custom body appended to the notification email."
      • changedInput schema / properties / expiration_time / description
        Previous value: -"Expiration in RFC 3339 format\n(e.g., \"2025-01-15T00:00:00Z\"). Used by \"grant\" and \"update\"."New value: +"RFC3339 deadline (\"2026-06-01T00:00:00Z\") after\nwhich the permission auto-revokes. Applies to grant/update."
      • changedInput schema / properties / file_id / description
        Previous value: -"The ID of the file or folder. Required."New value: +"Drive file or folder ID."
      • changedInput schema / properties / move_to_new_owners_root / description
        Previous value: -"Move file to the new owner's My Drive root.\nDefaults to False. Used by \"transfer_owner\"."New value: +"After transfer, move the file to the\nnew owner's My Drive root. Default False."
      • changedInput schema / properties / new_owner_email / description
        Previous value: -"Email of the new owner.\nRequired for \"transfer_owner\"."New value: +"Required for \"transfer_owner\". Must be inside\nthe same Workspace domain in most cases."
      • changedInput schema / properties / permission_id / description
        Previous value: -"The permission ID to modify or remove.\nRequired for \"update\" and \"revoke\" actions."New value: +"Required for \"update\" and \"revoke\". Get it from\nget_drive_file_permissions."
      • changedInput schema / properties / recipients / description
        Previous value: -"List of recipient objects for\n\"grant_batch\". Each should have: email (str), role (str, optional),\nshare_type (str, optional), expiration_time (str, optional). For domain\nshares use 'domain' field instead of 'email'."New value: +"For \"grant_batch\": list of objects with keys email\n(or domain for domain shares), role, share_type,\nexpiration_time."
      • changedInput schema / properties / role / description
        Previous value: -"Permission role -- 'reader', 'commenter', or 'writer'.\nUsed by \"grant\" (defaults to 'reader') and \"update\"."New value: +"For \"grant\" (default \"reader\") and \"update\": \"reader\",\n\"commenter\", or \"writer\"."
      • changedInput schema / properties / send_notification / description
        Previous value: -"Whether to send notification emails. Defaults to True.\nUsed by \"grant\" and \"grant_batch\"."New value: +"Send the recipient an email. Default True.\nApplies to grant/grant_batch user/group shares."
      • changedInput schema / properties / share_type / description
        Previous value: -"Type of sharing -- 'user', 'group', 'domain', or 'anyone'.\nUsed by \"grant\". Defaults to 'user'."New value: +"For \"grant\": \"user\", \"group\", \"domain\", or \"anyone\".\nDefault \"user\"."
      • changedInput schema / properties / share_with / description
        Previous value: -"Email address (user/group), domain name (domain),\nor omit for 'anyone'. Used by \"grant\"."New value: +"For \"grant\" โ€” recipient email (user/group) or domain\nname (domain). Omit for share_type=\"anyone\"."
      • changedInput schema / properties / user_google_email / description
        Previous value: -"The user's Google email address. Required."New value: +"The user's Google email address (authenticated\naccount)."
    • Changedmanage_event24 fields changed
      • changedInput schema / properties / action / description
        Previous value: -"Action to perform - \"create\", \"update\", \"delete\", or \"rsvp\"."New value: +"\"create\", \"update\", \"delete\", or \"rsvp\". Case-insensitive."
      • changedInput schema / properties / add_google_meet / description
        Previous value: -"Whether to add/remove Google Meet."New value: +"True to attach a Meet conference, False on update\nto remove it."
      • changedInput schema / properties / attachments / description
        Previous value: -"List of Google Drive file URLs or IDs to attach."New value: +"Drive file IDs or sharable URLs โ€” attached as event\nfiles visible to attendees."
      • changedInput schema / properties / attendees / description
        Previous value: -"Attendee email addresses or objects."New value: +"List of emails (e.g. [\"alice@ex.com\"]) or attendee\nobjects (e.g. [{\"email\": \"alice@ex.com\", \"optional\": true}])."
      • changedInput schema / properties / calendar_id / description
        Previous value: -"Calendar ID (default: 'primary')."New value: +"Calendar ID from list_calendars, or \"primary\"."
      • changedInput schema / properties / color_id / description
        Previous value: -"Event color ID (1-11, update only)."New value: +"Color index 1-11 (update only); see Calendar color map."
      • changedInput schema / properties / description / description
        Previous value: -"Event description."New value: +"Event body text. Supports plain text and some HTML."
      • changedInput schema / properties / end_time / description
        Previous value: -"End time in RFC3339 format (required for create)."New value: +"RFC3339 end (exclusive). Required for create."
      • changedInput schema / properties / event_id / description
        Previous value: -"Event ID (required for update and delete)."New value: +"Event ID from get_events. Required for update, delete,\nrsvp."
      • changedInput schema / properties / guests_can_invite_others / description
        Previous value: -"Whether attendees can invite others."New value: +"Allow attendees to invite more people."
      • changedInput schema / properties / guests_can_modify / description
        Previous value: -"Whether attendees can modify."New value: +"Allow attendees to edit the event."
      • changedInput schema / properties / guests_can_see_other_guests / description
        Previous value: -"Whether attendees can see other guests."New value: +"Allow attendees to see the guest list."
      • changedInput schema / properties / location / description
        Previous value: -"Event location."New value: +"Free-form location string or address."
      • changedInput schema / properties / recurrence / description
        Previous value: -"RFC5545 recurrence rules for a recurring event, e.g. [\"RRULE:FREQ=WEEKLY;COUNT=10\"]."New value: +"RFC5545 rules, e.g. [\"RRULE:FREQ=WEEKLY;BYDAY=MO,WE;COUNT=10\"]."
      • changedInput schema / properties / reminders / description
        Previous value: -"Custom reminder objects."New value: +"List of reminder objects like\n[{\"method\": \"popup\", \"minutes\": 10}] or a JSON string of same.\nIgnored when use_default_reminders=True."
      • changedInput schema / properties / response / description
        Previous value: -"RSVP response โ€” \"accepted\", \"declined\", \"tentative\", or \"needsAction\" (rsvp action only)."New value: +"RSVP value for action=\"rsvp\" โ€” \"accepted\", \"declined\",\n\"tentative\", or \"needsAction\"."
      • changedInput schema / properties / rsvp_comment / description
        Previous value: -"Optional message to include with the RSVP response (rsvp action only)."New value: +"Optional note sent with the RSVP."
      • changedInput schema / properties / send_updates / description
        Previous value: -"Notification behavior for RSVP โ€” \"all\" (default), \"externalOnly\", or \"none\" (rsvp action only)."New value: +"RSVP notification behavior โ€” \"all\" (default),\n\"externalOnly\", or \"none\"."
      • changedInput schema / properties / start_time / description
        Previous value: -"Start time in RFC3339 format (required for create)."New value: +"RFC3339 start, e.g. \"2026-05-01T15:00:00-04:00\" or\n\"2026-05-01\" for all-day. Required for create."
      • changedInput schema / properties / summary / description
        Previous value: -"Event title (required for create)."New value: +"Event title. Required for create; optional for update."
      • changedInput schema / properties / timezone / description
        Previous value: -"Timezone (e.g., \"America/New_York\")."New value: +"IANA zone like \"America/New_York\". Applied to start/end\nwhen they are tz-naive."
      • changedInput schema / properties / transparency / description
        Previous value: -"\"opaque\" (busy) or \"transparent\" (free)."New value: +"\"opaque\" shows as busy; \"transparent\" shows as free."
      • changedInput schema / properties / use_default_reminders / description
        Previous value: -"Whether to use default reminders."New value: +"True (default on create) to use the\ncalendar's default reminders. Set False to use `reminders`."
      • changedInput schema / properties / user_google_email / description
        Previous value: -"The user's Google email address. Required."New value: +"The user's Google email address (authenticated\naccount)."
    • Changedmanage_focus_time16 fields changed
      • changedInput schema / properties / action / description
        Previous value: -"Action to perform - \"create\", \"list\", \"update\", or \"delete\"."New value: +"\"create\", \"list\", \"update\", or \"delete\". Case-insensitive."
      • changedInput schema / properties / auto_decline_mode / description
        Previous value: -"How to handle conflicting invitations. One of: \"declineAllConflictingInvitations\" (default), \"declineOnlyNewConflictingInvitations\", \"declineNone\"."New value: +"\"declineAllConflictingInvitations\" (default),\n\"declineOnlyNewConflictingInvitations\", or \"declineNone\"."
      • changedInput schema / properties / calendar_id / description
        Previous value: -"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."New value: +"Default \"primary\". Focus Time lives on primary\ncalendars only โ€” pass \"primary\" or the user's primary email."
      • changedInput schema / properties / chat_status / description
        Previous value: -"Google Chat status during the focus time. Supports \"doNotDisturb\" (default) and \"available\"."New value: +"\"doNotDisturb\" (default) or \"available\"."
      • changedInput schema / properties / decline_message / description
        Previous value: -"Message included when auto-declining invitations."New value: +"Body of auto-decline replies."
      • changedInput schema / properties / description / description
        Previous value: -"Event description. Useful for adding context about what the focus time is for."New value: +"Optional body text for context."
      • changedInput schema / properties / end_time / description
        Previous value: -"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."New value: +"End (exclusive). For a full day on Apr 5 pass\nstart=\"2026-04-05\", end=\"2026-04-06\"."
      • changedInput schema / properties / event_id / description
        Previous value: -"Event ID. Required for \"update\" and \"delete\" actions."New value: +"Event ID. Required for update and delete."
      • changedInput schema / properties / max_results / description
        Previous value: -"For \"list\" action: maximum events to return. Defaults to 10."New value: +"List-action cap. Default 10."
      • changedInput schema / properties / recurrence / description
        Previous value: -"RFC5545 recurrence rules for a recurring Focus Time series, e.g. [\"RRULE:FREQ=WEEKLY;COUNT=10\"]."New value: +"RFC5545 rules, e.g. [\"RRULE:FREQ=WEEKLY;COUNT=10\"]."
      • changedInput schema / properties / start_time / description
        Previous value: -"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."New value: +"Start date/time. \"YYYY-MM-DD\" auto-converts to\nmidnight; RFC3339 works for partial days."
      • changedInput schema / properties / summary / description
        Previous value: -"Display text on the calendar. Defaults to \"Focus Time\"."New value: +"Display label. Defaults to \"Focus Time\"."
      • changedInput schema / properties / time_max / description
        Previous value: -"For \"list\" action: end of time range."New value: +"List-action range end."
      • changedInput schema / properties / time_min / description
        Previous value: -"For \"list\" action: start of time range. Defaults to current time. Recurring series are expanded into individual instances in the requested range."New value: +"List-action range start. Defaults to now."
      • changedInput schema / properties / timezone / description
        Previous value: -"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."New value: +"IANA zone like \"America/New_York\". Required when\nstart/end are date-only or lack a UTC offset."
      • changedInput schema / properties / user_google_email / description
        Previous value: -"The user's Google email address. Required."New value: +"The user's Google email address (authenticated\naccount)."
    • Changedmanage_gmail_filter5 fields changed
      • changedInput schema / properties / action / description
        Previous value: -"Action to perform - \"create\" or \"delete\"."New value: +"\"create\" or \"delete\". Case-insensitive."
      • changedInput schema / properties / criteria / description
        Previous value: -"Filter criteria object (required for create)."New value: +"Filter match criteria for create. Keys: from, to,\nsubject, query (Gmail search operators like \"label:INBOX\nolder_than:30d\"), negatedQuery, hasAttachment, size,\nsizeComparison, excludeChats. Example: {\"from\": \"newsletter@\",\n\"subject\": \"deal\"}."
      • changedInput schema / properties / filter_action / description
        Previous value: -"Filter action object (required for create). Named 'filter_action' to avoid shadowing the 'action' parameter."New value: +"What to do on match for create. Keys: addLabelIds\n(list of label IDs from list_gmail_labels), removeLabelIds,\nforward (alias email). Example: {\"addLabelIds\": [\"Label_1\"],\n\"removeLabelIds\": [\"INBOX\"]}."
      • changedInput schema / properties / filter_id / description
        Previous value: -"ID of the filter to delete (required for delete)."New value: +"Filter ID from list_gmail_filters. Required for delete."
      • changedInput schema / properties / user_google_email / description
        Previous value: -"The user's Google email address. Required."New value: +"The user's Google email address (authenticated\naccount)."
    • Changedmanage_gmail_label6 fields changed
      • changedInput schema / properties / action / description
        Previous value: -"Action to perform on the label."New value: +"\"create\" (needs name), \"update\" (needs label_id; name\noptional), or \"delete\" (needs label_id)."
      • changedInput schema / properties / label_id / description
        Previous value: -"Label ID. Required for update and delete operations."New value: +"Label ID from list_gmail_labels (e.g. \"Label_1234\").\nRequired for update and delete."
      • changedInput schema / properties / label_list_visibility / description
        Previous value: -"Whether the label is shown in the label list."New value: +"\"labelShow\" (appears in sidebar) or\n\"labelHide\" (hidden from sidebar)."
      • changedInput schema / properties / message_list_visibility / description
        Previous value: -"Whether the label is shown in the message list."New value: +"\"show\" (label pill shown on messages) or\n\"hide\" (no pill on messages)."
      • changedInput schema / properties / name / description
        Previous value: -"Label name. Required for create, optional for update."New value: +"Label display name, e.g. \"Clients/Acme\" โ€” slash creates a\nnested label. Required for create."
      • changedInput schema / properties / user_google_email / description
        Previous value: -"The user's Google email address. Required."New value: +"The user's Google email address (authenticated\naccount)."
    • Changedmanage_out_of_office14 fields changed
      • changedInput schema / properties / action / description
        Previous value: -"Action to perform - \"create\", \"list\", \"update\", or \"delete\"."New value: +"\"create\", \"list\", \"update\", or \"delete\". Case-insensitive."
      • changedInput schema / properties / auto_decline_mode / description
        Previous value: -"How to handle conflicting invitations. One of: \"declineAllConflictingInvitations\" (default), \"declineOnlyNewConflictingInvitations\", \"declineNone\"."New value: +"\"declineAllConflictingInvitations\" (default),\n\"declineOnlyNewConflictingInvitations\", or \"declineNone\"."
      • changedInput schema / properties / calendar_id / description
        Previous value: -"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."New value: +"Default \"primary\". OOO lives on primary calendars โ€”\na user's primary ID or email works, secondary calendar IDs do\nnot."
      • changedInput schema / properties / decline_message / description
        Previous value: -"Message included when auto-declining invitations."New value: +"Body of auto-decline replies sent to organizers."
      • changedInput schema / properties / end_time / description
        Previous value: -"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."New value: +"End (exclusive). For a single full day on Apr 5, pass\nstart=\"2026-04-05\", end=\"2026-04-06\"."
      • changedInput schema / properties / event_id / description
        Previous value: -"Event ID. Required for \"update\" and \"delete\" actions."New value: +"Event ID from a prior list call. Required for update\nand delete."
      • changedInput schema / properties / max_results / description
        Previous value: -"For \"list\" action: maximum events to return. Defaults to 10."New value: +"List-action cap. Default 10."
      • changedInput schema / properties / recurrence / description
        Previous value: -"RFC5545 recurrence rules for a recurring Out of Office series, e.g. [\"RRULE:FREQ=WEEKLY;COUNT=10\"]."New value: +"RFC5545 rules, e.g. [\"RRULE:FREQ=WEEKLY;COUNT=10\"]."
      • changedInput schema / properties / start_time / description
        Previous value: -"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."New value: +"Start date/time for create/update. \"YYYY-MM-DD\" is\nauto-converted to midnight; RFC3339 (\"2026-04-05T09:00:00-04:00\")\nworks for partial days."
      • changedInput schema / properties / summary / description
        Previous value: -"Display text on the calendar. Defaults to \"Out of Office\"."New value: +"Display label. Defaults to \"Out of Office\"."
      • changedInput schema / properties / time_max / description
        Previous value: -"For \"list\" action: end of time range."New value: +"List-action range end."
      • changedInput schema / properties / time_min / description
        Previous value: -"For \"list\" action: start of time range. Defaults to current time. Recurring series are expanded into individual instances in the requested range."New value: +"List-action range start. Defaults to now. Recurring\nseries expand to instances within the range."
      • changedInput schema / properties / timezone / description
        Previous value: -"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."New value: +"IANA zone like \"America/New_York\". Required when\nstart/end are date-only or lack a UTC offset."
      • changedInput schema / properties / user_google_email / description
        Previous value: -"The user's Google email address. Required."New value: +"The user's Google email address (authenticated\naccount)."
    • Changedmanage_sheet_tabs5 fields changed
      • changedInput schema / properties / action / description
        Previous value: -"One of \"rename\", \"delete\", \"duplicate\"."New value: +"Which operation to perform. One of:\n- `\"rename\"` โ€” change the tab's title. Requires `new_name`.\n- `\"delete\"` โ€” remove the tab and all its data. Cannot delete the\n  last remaining sheet in a spreadsheet (Google API error).\n- `\"duplicate\"` โ€” create a copy of the tab. `new_name` optional\n  (defaults to \"Copy of <original>\")."
      • changedInput schema / properties / new_name / description
        Previous value: -"Required for \"rename\" and \"duplicate\" actions โ€” the new tab name."New value: +"New title for the tab. Required for `\"rename\"`. Optional\nfor `\"duplicate\"` (auto-generated if omitted). Ignored for\n`\"delete\"`. Must be unique within the spreadsheet."
      • changedInput schema / properties / sheet_id / description
        Previous value: -"Numeric sheet ID (preferred). Either this or sheet_name required."New value: +"Numeric sheet ID (NOT the spreadsheet ID). Preferred over\n`sheet_name` because it's unique and stable. Get it from\n`get_spreadsheet_info` under `sheets[].properties.sheetId`. The\nfirst sheet is typically `0`. Either `sheet_id` or `sheet_name`\nmust be provided."
      • changedInput schema / properties / sheet_name / description
        Previous value: -"Sheet tab name. Used if sheet_id not provided (will be looked up)."New value: +"Tab title (case-sensitive). Used only when `sheet_id` is\nomitted โ€” the tool looks up the ID by name. Ambiguous if multiple\ntabs share the name (rare โ€” Sheets UI normally prevents this)."
      • addedInput schema / properties / spreadsheet_id / description
        Added value: +"Google Sheets spreadsheet ID (from the URL after `/d/`)."
    • Changedmanage_task11 fields changed
      • changedInput schema / properties / action / description
        Previous value: -"The action to perform. Must be one of: \"create\", \"update\", \"delete\", \"move\"."New value: +"\"create\", \"update\", \"delete\", or \"move\"."
      • changedInput schema / properties / destination_task_list / description
        Previous value: -"Destination task list ID (for moving between lists). Used by \"move\" action."New value: +"For move โ€” moves the task into another\nlist."
      • changedInput schema / properties / due / description
        Previous value: -"Due date in RFC 3339 format (e.g., \"2024-12-31T23:59:59Z\"). Used by \"create\" and \"update\" actions."New value: +"RFC3339 due timestamp, e.g. \"2026-12-31T23:59:59Z\".\nGoogle Tasks ignores the time portion and uses the date only."
      • changedInput schema / properties / notes / description
        Previous value: -"Notes/description for the task. Used by \"create\" and \"update\" actions."New value: +"Body/description text."
      • changedInput schema / properties / parent / description
        Previous value: -"Parent task ID (for subtasks). Used by \"create\" and \"move\" actions."New value: +"Parent task ID to make this a subtask (create/move)."
      • changedInput schema / properties / previous / description
        Previous value: -"Previous sibling task ID (for positioning). Used by \"create\" and \"move\" actions."New value: +"ID of the preceding sibling task for ordering\n(create/move). Omit to place first."
      • changedInput schema / properties / status / description
        Previous value: -"Task status (\"needsAction\" or \"completed\"). Used by \"update\" action."New value: +"Only for update โ€” \"needsAction\" or \"completed\"."
      • changedInput schema / properties / task_id / description
        Previous value: -"The ID of the task. Required for \"update\", \"delete\", and \"move\" actions."New value: +"Task ID from list_tasks. Required for update, delete,\nmove."
      • changedInput schema / properties / task_list_id / description
        Previous value: -"The ID of the task list. Required for all actions."New value: +"Parent task list ID from list_task_lists.\nRequired for all actions."
      • changedInput schema / properties / title / description
        Previous value: -"The title of the task. Required for \"create\", optional for \"update\"."New value: +"Task title. Required for create; optional for update."
      • changedInput schema / properties / user_google_email / description
        Previous value: -"The user's Google email address. Required."New value: +"The user's Google email address (authenticated\naccount)."
    • Changedmanage_task_list4 fields changed
      • changedInput schema / properties / action / description
        Previous value: -"The action to perform. Must be one of: \"create\", \"update\", \"delete\", \"clear_completed\"."New value: +"\"create\", \"update\", \"delete\", or \"clear_completed\"."
      • changedInput schema / properties / task_list_id / description
        Previous value: -"The ID of the task list. Required for \"update\", \"delete\", and \"clear_completed\" actions."New value: +"Task list ID. Required for update, delete,\nclear_completed. Get from list_task_lists."
      • changedInput schema / properties / title / description
        Previous value: -"The title for the task list. Required for \"create\" and \"update\" actions."New value: +"New display title. Required for create and update."
      • changedInput schema / properties / user_google_email / description
        Previous value: -"The user's Google email address. Required."New value: +"The user's Google email address (authenticated\naccount)."
    • Changedmodify_gmail_message_labels4 fields changed
      • changedInput schema / properties / add_label_ids / description
        Previous value: -"List of label IDs to add to the message."New value: +"Label IDs to add. Use system IDs like \"INBOX\",\n\"STARRED\", \"TRASH\", \"UNREAD\", or user label IDs from\nlist_gmail_labels (e.g. \"Label_1234\"). Names do NOT work."
      • changedInput schema / properties / message_id / description
        Previous value: -"The ID of the message to modify."New value: +"Gmail message ID from search_gmail_messages."
      • changedInput schema / properties / remove_label_ids / description
        Previous value: -"List of label IDs to remove from the message."New value: +"Label IDs to remove, same ID rules as above."
      • changedInput schema / properties / user_google_email / description
        Previous value: -"The user's Google email address. Required."New value: +"The user's Google email address (authenticated\naccount)."
    • Changedmodify_sheet_values6 fields changed
      • changedInput schema / properties / clear_values / description
        Previous value: -"If True, clears the range instead of writing values. Defaults to False."New value: +"True clears the range instead of writing. Ignores\n`values`."
      • changedInput schema / properties / range_name / description
        Previous value: -"The range to modify (e.g., \"Sheet1!A1:D10\", \"A1:D10\"). Required."New value: +"A1 range, e.g. \"Sheet1!A1:D10\". Range extent\ndetermines how many cells are overwritten regardless of\nvalues length โ€” for example a 10x4 range clears leftover\ncells not covered by values."
      • changedInput schema / properties / spreadsheet_id / description
        Previous value: -"The ID of the spreadsheet. Required."New value: +"Spreadsheet ID."
      • changedInput schema / properties / user_google_email / description
        Previous value: -"The user's Google email address. Required."New value: +"The user's Google email address (authenticated\naccount)."
      • changedInput schema / properties / value_input_option / description
        Previous value: -"How to interpret input values (\"RAW\" or \"USER_ENTERED\"). Defaults to \"USER_ENTERED\"."New value: +"\"USER_ENTERED\" (default โ€” strings parsed as\ndates/numbers/formulas, matches typing into the UI) or \"RAW\"\n(strings stored verbatim; formulas stored as literal text)."
      • changedInput schema / properties / values / description
        Previous value: -"2D array of values to write/update. Can be a JSON string or Python list. Required unless clear_values=True."New value: +"2D array of row arrays (e.g. [[\"a\", \"b\"], [\"c\", \"d\"]]),\nor a JSON string. Required unless clear_values=True."
    • Changedprotect_sheet_range5 fields changed
      • changedInput schema / properties / description / description
        Previous value: -"Optional description of the protection."New value: +"Human-readable note shown in the Protected ranges sidebar\n(e.g., \"Formulas โ€” do not edit\"). Omit for no description."
      • changedInput schema / properties / editor_emails / description
        Previous value: -"List of user emails allowed to edit. If omitted, only the owner can."New value: +"List of Google account email addresses allowed to edit\nthis range. Omit (or pass `None`) to restrict edits to the\nspreadsheet owner only. Editors must already have access to the\nfile at the Drive level; adding emails here does not share the\nfile."
      • changedInput schema / properties / range_name / description
        Previous value: -"A1 range to protect."New value: +"A1-notation range to protect, e.g., `\"Sheet1!A1:D10\"`,\n`\"Summary!B:B\"` (entire column), `\"'My Sheet'!A1:Z100\"` (sheet\nname with spaces). To protect an entire sheet, use\n`manage_sheet_tabs` or pass the full sheet range\n(`Sheet1!A1:ZZ1000000`)."
      • addedInput schema / properties / spreadsheet_id / description
        Added value: +"Google Sheets spreadsheet ID (from the URL after `/d/`)."
      • changedInput schema / properties / warning_only / description
        Previous value: -"If True, shows warning but allows edits. If False, strictly blocks."New value: +"When `True`, edits are allowed after a \"Are you sure?\"\nconfirmation dialog (suitable for nudging users). When `False`\n(default), edits are strictly blocked for non-editors."
    • Changedquery_freebusy6 fields changed
      • changedInput schema / properties / calendar_expansion_max / description
        Previous value: -"Maximum number of calendars for which FreeBusy information is to be provided. Optional. Maximum value is 50."New value: +"Cap on calendars returned, up to 50."
      • changedInput schema / properties / calendar_ids / description
        Previous value: -"List of calendar identifiers to query. If not provided, queries the primary calendar. Use 'primary' for the user's primary calendar or specific calendar IDs obtained from `list_calendars`."New value: +"Calendars to query (primary calendar, room\nresource IDs, or colleague emails if you have access).\nDefaults to [\"primary\"]."
      • changedInput schema / properties / group_expansion_max / description
        Previous value: -"Maximum number of calendar identifiers to be provided for a single group. Optional. An error is returned for a group with more members than this value. Maximum value is 100."New value: +"Cap on members expanded from a Google group\nidentifier, up to 100."
      • changedInput schema / properties / time_max / description
        Previous value: -"The end of the interval for the query in RFC3339 format (e.g., '2024-05-12T18:00:00Z' or '2024-05-12')."New value: +"Interval end, RFC3339."
      • changedInput schema / properties / time_min / description
        Previous value: -"The start of the interval for the query in RFC3339 format (e.g., '2024-05-12T10:00:00Z' or '2024-05-12')."New value: +"Interval start, RFC3339 (\"2026-05-12T10:00:00Z\" or\n\"2026-05-12\")."
      • changedInput schema / properties / user_google_email / description
        Previous value: -"The user's Google email address. Required."New value: +"The user's Google email address (authenticated\naccount)."
    • Changedread_sheet_values6 fields changed
      • changedInput schema / properties / include_formulas / description
        Previous value: -"If True, also fetch raw formula strings for cells that\ncontain formulas. Useful for identifying cross-sheet references before writing\nback to a range. Defaults to False to avoid an extra API request."New value: +"True fetches raw formula strings (=SUM(...), etc.)\nalongside displayed values โ€” useful before writing back to\navoid clobbering cross-sheet references."
      • changedInput schema / properties / include_hyperlinks / description
        Previous value: -"If True, also fetch hyperlink metadata for the range.\nDefaults to False to avoid expensive includeGridData requests."New value: +"True adds a hyperlink-metadata section for\ncells containing URLs. Triggers an includeGridData request โ€”\nmore expensive."
      • changedInput schema / properties / include_notes / description
        Previous value: -"If True, also fetch cell notes for the range.\nDefaults to False to avoid expensive includeGridData requests."New value: +"True adds a cell-notes section. Same cost caveat\nas include_hyperlinks."
      • changedInput schema / properties / range_name / description
        Previous value: -"The range to read (e.g., \"Sheet1!A1:D10\", \"A1:D10\"). Defaults to \"A1:Z1000\"."New value: +"A1 notation, e.g. \"Sheet1!A1:D10\", \"A:D\", or unqualified\n\"A1:D10\" (first sheet). Default \"A1:Z1000\"."
      • changedInput schema / properties / spreadsheet_id / description
        Previous value: -"The ID of the spreadsheet. Required."New value: +"Spreadsheet ID from list_spreadsheets."
      • changedInput schema / properties / user_google_email / description
        Previous value: -"The user's Google email address. Required."New value: +"The user's Google email address (authenticated\naccount)."
    • Changedreorder_slides3 fields changed
      • changedInput schema / properties / insertion_index / description
        Previous value: -"0-based index where the slides should be inserted."New value: +"0-based position in the re-ordered deck where the\nmoved slides start. `0` = move to the front. Index is computed\nAFTER removing the slides being moved โ€” pass the final desired\nposition, not adjusted math. To move slides to the end, use the\ncurrent slide count (e.g., if the deck has 10 slides, `10` puts\nthem last; the API clamps out-of-range values to end-of-deck)."
      • addedInput schema / properties / presentation_id / description
        Added value: +"Google Slides presentation ID (from the URL after `/d/`)."
      • changedInput schema / properties / slide_object_ids / description
        Previous value: -"List of slide object IDs to move."New value: +"List of slide object IDs to move, in the order you\nwant them to appear after the move. Each must be a slide page ID\n(from `get_presentation.slides[].objectId`), not a page element.\nExample: `[\"slide_3\", \"slide_1\"]` will place slide_3 first, then\nslide_1 at `insertion_index`."
    • Changedreplace_slides_text4 fields changed
      • changedInput schema / properties / find_text / description
        Previous value: -"Text to search for."New value: +"Literal text to search for. Exact-match substring; no\nregex, no special characters. Must be non-empty (empty string\nerrors). Newlines inside `find_text` only match if the original\ndocument has the same literal newline characters."
      • changedInput schema / properties / match_case / description
        Previous value: -"Whether to match case (default True)."New value: +"When `True` (default), matching is case-sensitive (`Hello`\nwon't match `hello`). When `False`, case-insensitive โ€” any\ncapitalization variant matches and is replaced by the literal\n`replace_text` verbatim (original casing is not preserved)."
      • addedInput schema / properties / presentation_id / description
        Added value: +"Google Slides presentation ID (from the URL after `/d/`)."
      • changedInput schema / properties / replace_text / description
        Previous value: -"Replacement text."New value: +"Text to substitute for each occurrence. Can be empty to\neffectively delete matches."
    • Changedrestore_drive_revision2 fields changed
      • changedInput schema / properties / file_id / description
        Previous value: -"Drive file ID."New value: +"Drive file ID (from a file URL like\n`drive.google.com/file/d/<file_id>/view`, or from\n`search_drive_files`). File must be a non-Google-native type."
      • changedInput schema / properties / revision_id / description
        Previous value: -"ID of the revision to restore (from get_drive_revisions)."New value: +"ID of the revision to restore TO. Get it from\n`get_drive_revisions` โ€” the `id` field on each revision entry.\nThe revision must still be retained (pinned with `keepForever` OR\nwithin Drive's normal retention window)."
    • Changedrun_script_function5 fields changed
      • changedInput schema / properties / dev_mode / description
        Previous value: -"Whether to run latest code vs deployed version"New value: +"True runs the latest saved code (owner only); False\n(default) runs the deployed version."
      • changedInput schema / properties / function_name / description
        Previous value: -"Name of function to execute"New value: +"Name of the top-level function to invoke (e.g.\n\"doWork\"). Private/internal helpers cannot be called."
      • changedInput schema / properties / parameters / description
        Previous value: -"Optional list of parameters to pass"New value: +"Optional positional arguments to pass to the\nfunction. Must be JSON-serializable primitives or arrays."
      • changedInput schema / properties / script_id / description
        Previous value: -"The script project ID"New value: +"Target project ID (must have an API-executable\ndeployment)."
      • changedInput schema / properties / user_google_email / description
        Previous value: -"User's email address"New value: +"The user's Google email address (authenticated\naccount)."
    • Changedsearch_contacts3 fields changed
      • changedInput schema / properties / page_size / description
        Previous value: -"Maximum number of results to return (default: 30, max: 30)."New value: +"Max results. 1-30. Default 30 (API cap)."
      • changedInput schema / properties / query / description
        Previous value: -"Search query string (searches names, emails, phone numbers)."New value: +"Free text substring. Matches names, email addresses, and\nphone numbers."
      • changedInput schema / properties / user_google_email / description
        Previous value: -"The user's Google email address. Required."New value: +"The user's Google email address (authenticated\naccount)."
    • Changedsearch_docs3 fields changed
      • addedInput schema / properties / page_size / description
        Added value: +"Maximum number of results. Defaults to 10. Google's\nhard cap is 1000. No pagination token is exposed โ€” increase\nthis value if you need more results in one call."
      • addedInput schema / properties / query / description
        Added value: +"Case-insensitive substring to match against Doc filenames.\nSingle quotes are auto-escaped before being embedded in the\nDrive query, so apostrophes in titles are safe. Empty string\nmatches all Docs (bounded by `page_size`)."
      • addedInput schema / properties / user_google_email / description
        Added value: +"The user's Google email address. Required."
    • Changedsearch_drive_files10 fields changed
      • changedInput schema / properties / corpora / description
        Previous value: -"Bodies of items to query (e.g., 'user', 'domain', 'drive', 'allDrives').\n                     If 'drive_id' is specified and 'corpora' is None, it defaults to 'drive'.\n                     Otherwise, Drive API default behavior applies. Prefer 'user' or 'drive' over 'allDrives' for efficiency."New value: +"Scope โ€” \"user\", \"domain\", \"drive\", or \"allDrives\".\nDefaults to \"drive\" when drive_id is set. Prefer \"user\" or\n\"drive\" over \"allDrives\" for performance."
      • changedInput schema / properties / detailed / description
        Previous value: -"Whether to include size, modified time, and link in results. Defaults to True."New value: +"True (default) includes size, modified time, webViewLink\nper file; False returns just name/ID/type."
      • changedInput schema / properties / drive_id / description
        Previous value: -"ID of the shared drive to search. If None, behavior depends on `corpora` and `include_items_from_all_drives`."New value: +"Shared drive ID to restrict the search. Omit for My\nDrive + shared-with-me."
      • changedInput schema / properties / file_type / description
        Previous value: -"Restrict results to a specific file type. Accepts a friendly\n                       name ('folder', 'document'/'doc', 'spreadsheet'/'sheet',\n                       'presentation'/'slides', 'form', 'drawing', 'pdf', 'shortcut',\n                       'script', 'site', 'jam'/'jamboard') or any raw MIME type\n                       string (e.g. 'application/pdf'). Defaults to None (all types)."New value: +"Friendly alias (\"folder\", \"doc\", \"sheet\", \"slides\",\n\"form\", \"drawing\", \"pdf\", \"shortcut\", \"script\", \"site\",\n\"jamboard\") or raw MIME type (\"application/pdf\"). Adds a\nmimeType filter."
      • changedInput schema / properties / include_items_from_all_drives / description
        Previous value: -"Whether shared drive items should be included in results. Defaults to True. This is effective when not specifying a `drive_id`."New value: +"True (default) to include shared\ndrive items when drive_id is omitted."
      • changedInput schema / properties / order_by / description
        Previous value: -"Sort order. Comma-separated list of sort keys with optional 'desc' modifier.\n                      Valid keys: 'createdTime', 'folder', 'modifiedByMeTime', 'modifiedTime',\n                      'name', 'name_natural', 'quotaBytesUsed', 'recency', 'sharedWithMeTime',\n                      'starred', 'viewedByMeTime'. Example: 'modifiedTime desc' or 'folder,modifiedTime desc,name'.\n                      Defaults to None (Drive API default ordering)."New value: +"Comma-separated sort keys: createdTime, folder,\nmodifiedByMeTime, modifiedTime, name, name_natural,\nquotaBytesUsed, recency, sharedWithMeTime, starred,\nviewedByMeTime. Append \" desc\" to reverse. Example:\n\"folder,modifiedTime desc,name\"."
      • changedInput schema / properties / page_size / description
        Previous value: -"The maximum number of files to return. Defaults to 10."New value: +"Max files returned, 1-1000. Default 10."
      • changedInput schema / properties / page_token / description
        Previous value: -"Page token from a previous response's nextPageToken to retrieve the next page of results."New value: +"Cursor from a prior response's `nextPageToken`."
      • changedInput schema / properties / query / description
        Previous value: -"The search query string. Supports Google Drive search operators.\n         NOTE: Owner-based queries ('user@example.com' in owners) DO NOT WORK in Shared Drives\n         because files are owned by the shared drive itself, not individual users.\n         For recent files by a specific user in Shared Drives, search by modifiedTime\n         and use order_by='modifiedTime desc' instead."New value: +"Free text (auto-wrapped) or a Drive query expression like\n`name contains 'Q3' and mimeType = 'application/pdf' and\nmodifiedTime > '2026-01-01T00:00:00'`. Owner-based queries\n(\"x@y.com in owners\") do NOT work inside shared drives โ€”\nsearch by modifiedTime and order_by=\"modifiedTime desc\"\ninstead."
      • changedInput schema / properties / user_google_email / description
        Previous value: -"The user's Google email address. Required."New value: +"The user's Google email address (authenticated\naccount)."
    • Changedsearch_gmail_messages4 fields changed
      • changedInput schema / properties / page_size / description
        Previous value: -"The maximum number of messages to return. Defaults to 10."New value: +"Max results per page, 1-500. Default 10."
      • changedInput schema / properties / page_token / description
        Previous value: -"Token for retrieving the next page of results. Use the next_page_token from a previous response."New value: +"Pagination cursor โ€” pass the next_page_token value\nreturned by a previous call to fetch the next page."
      • changedInput schema / properties / query / description
        Previous value: -"The search query. Supports standard Gmail search operators."New value: +"Gmail search operators, e.g. \"from:alice@ex.com has:attachment\nnewer_than:7d label:INBOX -category:promotions\"."
      • changedInput schema / properties / user_google_email / description
        Previous value: -"The user's Google email address. Required."New value: +"The user's Google email address (authenticated\naccount)."
    • Changedsearch_messages6 fields changed
      • changedInput schema / properties / max_spaces / description
        Previous value: -"Maximum number of spaces to search when space_id is not provided (default 10)."New value: +"When space_id is omitted, cap on how many spaces\nare scanned. Default 10."
      • changedInput schema / properties / page_size / description
        Previous value: -"Maximum number of messages to return per space."New value: +"Max messages fetched per space. Default 25."
      • changedInput schema / properties / query / description
        Previous value: -"Optional text to search for. If omitted, only time_filter is applied."New value: +"Case-insensitive substring to match in message text. Omit\nto return messages by time only."
      • changedInput schema / properties / space_id / description
        Previous value: -"Optional space to restrict the search to."New value: +"Restrict search to one space (\"spaces/<id>\"). Omit to\nsearch across accessible spaces (capped by max_spaces)."
      • changedInput schema / properties / time_filter / description
        Previous value: -"Optional filter using Chat API createTime syntax.\n         Examples:\n           'createTime > \"2026-03-18T00:00:00-03:00\"'\n           'createTime > \"2026-03-18T00:00:00-03:00\" AND createTime < \"2026-03-19T00:00:00-03:00\"'"New value: +"Chat API createTime expression, e.g.\n'createTime > \"2026-03-18T00:00:00Z\"' or a range joined\nwith AND. Applied server-side."
      • addedInput schema / properties / user_google_email / description
        Added value: +"The user's Google email address (authenticated\naccount)."
    • Changedsend_message5 fields changed
      • addedInput schema / properties / message_text / description
        Added value: +"Plain text body. Supports Chat markdown (e.g.\n*bold*, _italic_, `code`)."
      • addedInput schema / properties / space_id / description
        Added value: +"Target space resource name (\"spaces/<id>\") from\nlist_spaces."
      • changedInput schema / properties / thread_key / description
        Previous value: -"Reply in a thread by app-defined key (creates thread if not found)."New value: +"App-defined thread key โ€” messages with the same key\nthread together. If no thread exists with this key, a new\none is created. Mutually exclusive with thread_name."
      • changedInput schema / properties / thread_name / description
        Previous value: -"Reply in an existing thread by its resource name (e.g. spaces/X/threads/Y)."New value: +"Resource name of an existing thread\n(\"spaces/X/threads/Y\") to reply to. Falls back to a new\nthread if the specified one is not found."
      • addedInput schema / properties / user_google_email / description
        Added value: +"The user's Google email address (authenticated\naccount)."
    • Changedset_drive_file_permissions5 fields changed
      • changedInput schema / properties / copy_requires_writer_permission / description
        Previous value: -"Whether viewers and commenters\nare prevented from copying, printing, or downloading. Defaults to None (no change)."New value: +"True blocks viewers/commenters\nfrom copy/print/download; False allows."
      • changedInput schema / properties / file_id / description
        Previous value: -"The ID of the file or folder. Required."New value: +"Drive file or folder ID."
      • changedInput schema / properties / link_sharing / description
        Previous value: -"Control \"anyone with the link\" access for the file.\n- \"off\": Disable \"anyone with the link\" access for this file.\n- \"reader\": Anyone with the link can view.\n- \"commenter\": Anyone with the link can comment.\n- \"writer\": Anyone with the link can edit."New value: +"\"off\" removes anyone-with-link access; \"reader\",\n\"commenter\", or \"writer\" sets the link role. Omit to leave\nlink sharing unchanged."
      • changedInput schema / properties / user_google_email / description
        Previous value: -"The user's Google email address. Required."New value: +"The user's Google email address (authenticated\naccount)."
      • changedInput schema / properties / writers_can_share / description
        Previous value: -"Whether editors can change permissions and share.\nIf False, only the owner can share. Defaults to None (no change)."New value: +"True lets editors re-share; False restricts\nsharing to owner only."
    • Changedset_publish_settings4 fields changed
      • changedInput schema / properties / form_id / description
        Previous value: -"The ID of the form to update publish settings for."New value: +"Form ID from the edit URL after /forms/d/."
      • changedInput schema / properties / publish_as_template / description
        Previous value: -"Whether to publish as a template. Defaults to False."New value: +"True lists the form as a template in the\nWorkspace template gallery. Default False."
      • changedInput schema / properties / require_authentication / description
        Previous value: -"Whether to require authentication to view/submit. Defaults to False."New value: +"True requires respondents to sign in\nwith a Google account to view/submit (their email is\ncaptured). False allows anonymous access. Default False."
      • changedInput schema / properties / user_google_email / description
        Previous value: -"The user's Google email address. Required."New value: +"The user's Google email address (authenticated\naccount)."
    • Changedset_slides_background4 fields changed
      • changedInput schema / properties / alpha / description
        Previous value: -"0.0-1.0."New value: +"Opacity of the background fill, 0.0 (transparent) to 1.0\n(opaque). Default `1.0`."
      • changedInput schema / properties / color / description
        Previous value: -"Hex color (e.g., \"#F5F5F5\")."New value: +"Hex color for the background, e.g., `#F5F5F5` or `F5F5F5`.\nAccepts `#RRGGBB` or `RRGGBB`."
      • changedInput schema / properties / page_object_id / description
        Previous value: -"Object ID of the slide."New value: +"Object ID of the slide whose background to change.\nGet it from `get_presentation.slides[].objectId`. Must reference\na slide page (not a master/layout)."
      • addedInput schema / properties / presentation_id / description
        Added value: +"Google Slides presentation ID (from the URL after `/d/`)."
    • Changedstyle_slides_shape7 fields changed
      • changedInput schema / properties / fill_alpha / description
        Previous value: -"Alpha 0.0-1.0 for fill."New value: +"Opacity of the fill, 0.0 (transparent) to 1.0 (opaque).\nDefault `1.0`. Only meaningful when `fill_color` is also set."
      • changedInput schema / properties / fill_color / description
        Previous value: -"Hex color for shape background (e.g., \"#FFCC00\")."New value: +"Hex color for the shape interior, e.g., `#FFCC00` or\n`FFCC00`. Omit to leave existing fill unchanged."
      • changedInput schema / properties / outline_color / description
        Previous value: -"Hex color for shape outline."New value: +"Hex color for the shape's outline/border, e.g., `#000000`.\nOmit to leave outline color unchanged."
      • changedInput schema / properties / outline_dash_style / description
        Previous value: -"SOLID, DASH, DOT, DASH_DOT, LONG_DASH, LONG_DASH_DOT."New value: +"Line style for the outline. One of `SOLID`, `DASH`,\n`DOT`, `DASH_DOT`, `LONG_DASH`, `LONG_DASH_DOT`. Omit to leave\nunchanged."
      • changedInput schema / properties / outline_weight / description
        Previous value: -"Outline thickness in points."New value: +"Outline thickness in points (e.g., `1.5`, `3`, `6`).\nOmit to leave outline weight unchanged."
      • addedInput schema / properties / page_element_id / description
        Added value: +"Object ID of the target shape. Get it from\n`get_presentation.slides[].pageElements[].objectId` or `get_page`.\nMust be a shape element; table cells and images will error."
      • addedInput schema / properties / presentation_id / description
        Added value: +"Google Slides presentation ID (from the URL after `/d/`)."
    • Changedupdate_doc_tab4 fields changed
      • changedInput schema / properties / document_id / description
        Previous value: -"ID of the document to update"New value: +"Target document ID."
      • changedInput schema / properties / tab_id / description
        Previous value: -"ID of the tab to rename (use inspect_doc_structure to find tab IDs)"New value: +"Tab ID from list_doc_tabs."
      • changedInput schema / properties / title / description
        Previous value: -"New title for the tab"New value: +"New display title."
      • changedInput schema / properties / user_google_email / description
        Previous value: -"User's Google email address"New value: +"The user's Google email address (authenticated\naccount)."
    • Changedupdate_drive_file12 fields changed
      • changedInput schema / properties / add_parents / description
        Previous value: -"Comma-separated folder IDs to add as parents."New value: +"Comma-separated folder IDs to add the file into\n(effectively moves when combined with remove_parents)."
      • changedInput schema / properties / copy_requires_writer_permission / description
        Previous value: -"Whether copying requires writer permission."New value: +"When True, copies require\nwriter access (reader copy/export blocked)."
      • changedInput schema / properties / description / description
        Previous value: -"New description for the file."New value: +"New description text."
      • changedInput schema / properties / file_id / description
        Previous value: -"The ID of the file to update. Required."New value: +"Drive file ID to update."
      • changedInput schema / properties / mime_type / description
        Previous value: -"New MIME type (note: changing type may require content upload)."New value: +"New MIME type (changing this rarely works without\nalso uploading matching content)."
      • changedInput schema / properties / name / description
        Previous value: -"New name for the file."New value: +"New display name."
      • changedInput schema / properties / properties / description
        Previous value: -"Custom key-value properties for the file."New value: +"Dict of user-visible custom key-value pairs attached\nto the file."
      • changedInput schema / properties / remove_parents / description
        Previous value: -"Comma-separated folder IDs to remove from parents."New value: +"Comma-separated folder IDs to detach from."
      • changedInput schema / properties / starred / description
        Previous value: -"Whether to star/unstar the file."New value: +"True to star, False to unstar."
      • changedInput schema / properties / trashed / description
        Previous value: -"Whether to move file to/from trash."New value: +"True moves to Trash (soft-delete), False restores."
      • changedInput schema / properties / user_google_email / description
        Previous value: -"The user's Google email address. Required."New value: +"The user's Google email address (authenticated\naccount)."
      • changedInput schema / properties / writers_can_share / description
        Previous value: -"Whether editors can share the file."New value: +"Whether editors may re-share the file."
    • Changedupdate_script_content3 fields changed
      • changedInput schema / properties / files / description
        Previous value: -"List of file objects with name, type, and source"New value: +"Complete list of file objects. Each dict needs:\n- \"name\" (str): file name without extension.\n- \"type\" (str): \"SERVER_JS\", \"HTML\", or \"JSON\" (the\n  \"JSON\" type is only valid for the manifest file named\n  \"appsscript\").\n- \"source\" (str): full text content."
      • changedInput schema / properties / script_id / description
        Previous value: -"The script project ID"New value: +"Target project ID."
      • changedInput schema / properties / user_google_email / description
        Previous value: -"User's email address"New value: +"The user's Google email address (authenticated\naccount)."
    • Changedupdate_slides_speaker_notes3 fields changed
      • changedInput schema / properties / notes / description
        Previous value: -"New speaker notes text (replaces existing)."New value: +"New speaker notes text to insert. Plain text only (no rich\nformatting). Replaces ALL existing notes on this slide. Pass `\"\"`\nto clear without adding."
      • changedInput schema / properties / page_object_id / description
        Previous value: -"Object ID of the slide."New value: +"Object ID of the target slide. Get it from\n`get_presentation.slides[].objectId`. Must reference an existing\nslide with a notes-page shape; if the slide has no notes shape\n(rare โ€” some custom layouts), the call returns an error string\nrather than failing."
      • addedInput schema / properties / presentation_id / description
        Added value: +"Google Slides presentation ID (from the URL after `/d/`)."
  2. 149 tool updatesv1.19.0
    • First observedadd_sheet_data_validation
    • First observedadd_sheet_named_range
    • First observedappend_table_rows
    • First observedapply_continuous_numbering
    • First observedbatch_modify_gmail_message_labels
    • First observedbatch_update_doc
    • First observedbatch_update_form
    • First observedbatch_update_presentation
    • First observedcheck_drive_file_public_access
    • First observedcopy_drive_file
    • First observedcopy_drive_folder
    • First observedcreate_calendar
    • First observedcreate_doc
    • First observedcreate_drive_file
    • First observedcreate_drive_folder
    • First observedcreate_form
    • First observedcreate_presentation
    • First observedcreate_reaction
    • First observedcreate_script_project
    • First observedcreate_sheet
    • First observedcreate_slides_shape
    • First observedcreate_slides_text_box
    • First observedcreate_spreadsheet
    • First observedcreate_table_with_data
    • First observedcreate_version
    • First observeddebug_docs_runtime_info
    • First observeddebug_table_structure
    • First observeddelete_doc_tab
    • First observeddelete_script_project
    • First observeddelete_slides_element
    • First observeddownload_chat_attachment
    • First observeddraft_gmail_message
    • First observedduplicate_slide
    • First observedexport_doc_to_pdf
    • First observedfind_and_replace_doc
    • First observedformat_all_slides_text
    • First observedformat_sheet_range
    • First observedformat_slides_paragraph
    • First observedformat_slides_text
    • First observedgenerate_trigger_code
    • First observedget_contact
    • First observedget_contact_group
    • First observedget_doc_as_markdown
    • First observedget_doc_content
    • First observedget_doc_smart_chips
    • First observedget_drive_file_content
    • First observedget_drive_file_download_url
    • First observedget_drive_file_permissions
    • First observedget_drive_revisions
    • First observedget_drive_shareable_link
    • First observedget_events
    • First observedget_form
    • First observedget_form_response
    • First observedget_gmail_attachment_content
    • First observedget_gmail_message_content
    • First observedget_gmail_messages_content_batch
    • First observedget_gmail_thread_content
    • First observedget_gmail_threads_content_batch
    • First observedget_messages
    • First observedget_page
    • First observedget_page_thumbnail
    • First observedget_presentation
    • First observedget_script_content
    • First observedget_script_metrics
    • First observedget_script_project
    • First observedget_search_engine_info
    • First observedget_slides_speaker_notes
    • First observedget_spreadsheet_info
    • First observedget_task
    • First observedget_task_list
    • First observedget_version
    • First observedimport_to_google_doc
    • First observedinsert_doc_elements
    • First observedinsert_doc_file_chip
    • First observedinsert_doc_image
    • First observedinsert_doc_link
    • First observedinsert_doc_markdown
    • First observedinsert_doc_person_chip
    • First observedinsert_doc_tab
    • First observedinsert_slides_image
    • First observedinspect_doc_structure
    • First observedlist_calendars
    • First observedlist_contact_groups
    • First observedlist_contacts
    • First observedlist_deployments
    • First observedlist_doc_tabs
    • First observedlist_docs_in_folder
    • First observedlist_document_comments
    • First observedlist_drive_items
    • First observedlist_form_responses
    • First observedlist_gmail_filters
    • First observedlist_gmail_labels
    • First observedlist_presentation_comments
    • First observedlist_script_processes
    • First observedlist_script_projects
    • First observedlist_sheet_tables
    • First observedlist_spaces
    • First observedlist_spreadsheet_comments
    • First observedlist_spreadsheets
    • First observedlist_task_lists
    • First observedlist_tasks
    • First observedlist_versions
    • First observedmanage_conditional_formatting
    • First observedmanage_contact
    • First observedmanage_contact_group
    • First observedmanage_contacts_batch
    • First observedmanage_deployment
    • First observedmanage_document_comment
    • First observedmanage_drive_access
    • First observedmanage_event
    • First observedmanage_focus_time
    • First observedmanage_gmail_filter
    • First observedmanage_gmail_label
    • First observedmanage_out_of_office
    • First observedmanage_presentation_comment
    • First observedmanage_sheet_tabs
    • First observedmanage_spreadsheet_comment
    • First observedmanage_task
    • First observedmanage_task_list
    • First observedmodify_doc_text
    • First observedmodify_gmail_message_labels
    • First observedmodify_sheet_values
    • First observedprotect_sheet_range
    • First observedquery_freebusy
    • First observedread_sheet_values
    • First observedreorder_slides
    • First observedreplace_slides_text
    • First observedresize_sheet_dimensions
    • First observedrestore_drive_revision
    • First observedrun_script_function
    • First observedsearch_contacts
    • First observedsearch_custom
    • First observedsearch_docs
    • First observedsearch_drive_files
    • First observedsearch_gmail_messages
    • First observedsearch_messages
    • First observedsend_gmail_message
    • First observedsend_message
    • First observedset_drive_file_permissions
    • First observedset_publish_settings
    • First observedset_slides_background
    • First observedstart_google_auth
    • First observedstyle_slides_shape
    • First observedupdate_doc_headers_footers
    • First observedupdate_doc_tab
    • First observedupdate_drive_file
    • First observedupdate_paragraph_style
    • First observedupdate_script_content
    • First observedupdate_slides_speaker_notes

TDQS

A3.9/5.0
Disambiguation5/5

Each tool has a clearly distinct purpose, with detailed descriptions that cross-reference other tools to guide correct selection. Overlapping tools (e.g., modify_doc_text vs. insert_doc_markdown) are differentiated by use case and behavior, minimizing ambiguity.

Naming Consistency4/5

Most tools follow a consistent verb_noun pattern (e.g., create_doc, list_spaces, manage_event). A few outliers like debug_docs_runtime_info and start_google_auth break the pattern, but overall the naming is predictable and readable.

Tool Count3/5

The 149 tools cover a wide range of Google Workspace services, which justifies a larger set. However, this exceeds the typical well-scoped range (3-15 tools), making the server heavy but still organized enough to navigate.

Completeness5/5

The tool set offers comprehensive CRUD and lifecycle coverage for each service (Docs, Sheets, Slides, Drive, Gmail, Calendar, Tasks, Contacts, Forms, Chat, Apps Script, etc.). Only niche features like advanced animations are missing, and most common workflows are fully supported.

Maintenance

ActivityInactive
ResponsivenessNo issues

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/HuntsDesk/ve-gws'

If you have feedback or need assistance with the MCP directory API, please join our Discord server