Google Workspace MCP VE
The Google Workspace MCP VE server provides comprehensive AI-driven natural language control over 12+ Google Workspace services, supporting both read and write operations with advanced authentication and deployment options.
๐ง Gmail
Search, read, and batch-retrieve messages and threads
Send emails, create drafts, manage attachments, labels, and filters
๐ Google Drive
Search, list, create, copy, update, and delete files/folders
Read content (Docs, Sheets, Slides, PDFs, images, Office files)
Manage permissions (grant, revoke, transfer ownership)
Recursively copy folder trees, view/restore revision history
Import Markdown/DOCX/HTML as Google Docs
๐ Google Calendar
List calendars; create, update, delete, and RSVP to events
Manage Out of Office and Focus Time events
Query free/busy information; create secondary calendars
๐ Google Docs
Create, read, format, and export documents (Markdown, PDF)
Insert native Markdown, images, tables, lists, page breaks
Manage tabs, headers/footers, paragraph styles, and smart chips (person, Drive file)
Batch atomic updates; find/replace; continuous numbering
๐ Google Sheets
Read/write cell ranges; format (colors, fonts, alignment, number formats)
Manage conditional formatting, data validation, named ranges, and protected ranges
Resize rows/columns, freeze panes, hide/unhide; work with structured tables
๐ผ๏ธ Google Slides
Create presentations; apply batch updates
Create/reorder/duplicate slides; insert images, shapes, and text boxes with positioning
Format text, shapes, and backgrounds; manage speaker notes and comments
๐ Google Forms
Create and retrieve forms; manage questions and settings via batch updates
List and retrieve form responses
โ Google Tasks
Manage tasks and task lists (create, update, delete, move, clear completed)
๐ค Google Contacts
Search, create, update, delete contacts; manage contact groups
๐ฌ Google Chat
List spaces, search/send messages (with threading), add emoji reactions, download attachments
โก Google Apps Script
List, create, and update script projects; execute functions; manage deployments
๐ Custom Search
Perform web searches via Google Programmable Search Engine
๐ Authentication & Deployment
OAuth 2.0/2.1 (PKCE) for single- and multi-user scenarios; service account mode with domain-wide delegation
Stateless/container-friendly operation; external OAuth provider support
HTTP and stdio transports; compatible with Claude Desktop, Claude Code, VS Code MCP, LM Studio, and other MCP clients
Granular scope control, read-only mode, no telemetry, open-source MIT license
Tool tier system (Core โ Extended โ Complete) for controlled API access
Provides complete email management capabilities including sending, receiving, organizing, and managing Gmail messages through the Google Workspace API.
Enables cross-application workflow automation including project management, deployments, versions, execution, and debugging.
Offers full event management with advanced features for creating, updating, and managing calendar events and schedules.
Provides space management, messaging, and reactions capabilities for Google Chat communication platform.
Provides deep, fine-grained editing, formatting, comments, and document manipulation capabilities for Google Docs.
Enables file operations with sharing, permissions, and management of Office files, PDFs, images, and other content stored in Google Drive.
Allows creation, publish settings, and response management for Google Forms surveys and questionnaires.
Enables flexible cell management, formatting, conditional rules, and data manipulation in Google Sheets spreadsheets.
Supports presentation creation, updates, content manipulation, and slide management for Google Slides.
Offers task and list management with hierarchy support for Google Tasks.
VE Google Workspace MCP (ve-gws)
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
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 ยท |
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 calendarSecretless / 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 calendarCredential setup โ ยท All launch options โ ยท Tier details โ
Variable | Purpose | |
๐ Authentication | ||
| required | OAuth client ID from Google Cloud |
| OAuth client secret for confidential clients; optional for public OAuth 2.1 PKCE clients | |
| required* | Set to |
| Default email for single-user auth | |
| Custom path to | |
| Credential directory โ default | |
๐ฅ๏ธ Server | ||
| Base server URI (no port) โ default | |
| Listening port โ default | |
| Bind host โ default | |
| External URL for reverse proxy setups | |
| Downloaded attachments dir โ default | |
| Remote MCP endpoint URL for CLI | |
| Colon-separated allowlist for local file reads | |
๐ OAuth 2.1 & Multi-User | ||
|
| |
|
| |
|
| |
| Override OAuth callback URL โ default auto-constructed | |
| Comma-separated additional redirect URIs | |
| Comma-separated additional CORS origins | |
|
| |
| Custom encryption key for OAuth proxy storage; required for public OAuth 2.1 clients when | |
๐ง Service Account | ||
| Path to service account JSON key file (domain-wide delegation) | |
| Inline service account JSON key (alternative to file) | |
๐ Custom Search | ||
| API key for Programmable Search Engine | |
| 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
.dxtbundles server, deps & manifest โ download โ double-click โ done. No terminal, no JSON editing.
Download the latest
google_workspace_mcp.dxtfrom ReleasesInstall โ double-click the file, Claude Desktop prompts to install
Configure โ Settings โ Extensions โ Google Workspace MCP, paste your OAuth credentials
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
Create Project โ Open Console โ โ Create new project
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
Enable APIs โ APIs & Services โ Library, then enable each service:
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_SECRETand setFASTMCP_SERVER_AUTH_GOOGLE_JWT_SIGNING_KEYinstead.
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)2. Get API Key
developers.google.com
/custom-search/v1/overview
โ Create/select project
โ Enable Custom Search API
โ Create credentials (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:
Create Search Engine - Visit the Control Panel
Choose "Search the entire web" or specify sites
Copy the Search Engine ID (looks like:
017643444788157684527:6ivsjbpxpqw)
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)
Configure Environment - Add to your shell or
.env:export GOOGLE_PSE_API_KEY="AIzaSy..." export GOOGLE_PSE_ENGINE_ID="01764344478..."
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-userSimplified 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-onlyRead-only mode provides secure, restricted access by:
Requesting only
*.readonlyOAuth 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 coreGranular 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;manageallows create/update/move but deniesdeleteandclear_completed)Other services currently support:
readonly,full--permissionsand--read-onlyare mutually exclusive--permissionscannot be combined with--tools; enabled services are determined by the--permissionsentries (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-mcpAvailable 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 listView all available tools
โ Call a Tool
uv run workspace-cli call search_gmail_messages \
query="is:unread" max_results=5Execute 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 editorsSee 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.jsonTraditional method
โก .env File
cp .env.oauth21 .env
# Edit .env with credentialsBest for development
Loading Priority
Environment variables (
export VAR=value).envfile in project root (warning - if you run viauvxrather thanuv runfrom 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)client_secret.jsonviaGOOGLE_CLIENT_SECRET_PATHDefault
client_secret.jsonin 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 |
| Core | List accessible calendars |
| Core | Retrieve events with time range filtering |
| Core | Create, update, or delete calendar events |
| Extended | Create a new secondary Google Calendar |
| Extended | Query free/busy information for calendars |
| Extended | Create, list, update, or delete Out of Office events |
| Extended | Create, list, update, or delete Focus Time events |
๐ Google Drive drive_tools.py
Tool | Tier | Description |
| Core | Search files with query syntax |
| Core | Read file content (Office, PDF, image) |
| Core | Download Drive files to local disk |
| Core | Create files or fetch from URLs |
| Core | Create empty folders in Drive or shared drives |
| Core | Import files (MD, DOCX, HTML, etc.) as Google Docs |
| Core | Get shareable links for a file |
| Extended | List folder contents |
| Extended | Copy existing files (templates) with optional renaming |
| Extended | Update file metadata, move between folders |
| Extended | Grant, update, revoke permissions, and transfer ownership |
| Extended | Set link sharing and file-level sharing settings |
| Complete | Get detailed file permissions |
| Complete | Check public sharing status |
| Complete | Recursively copy a folder tree (folders + files) to a new location |
| Complete | List a file's revision history (modified time, user, size) |
| 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 |
| Core | Search with Gmail operators |
| Core | Retrieve message content |
| Core | Batch retrieve message content |
| Core | Send emails |
| Extended | Get full thread content |
| Extended | Modify message labels |
| Extended | List available labels |
| Extended | List Gmail filters |
| Extended | Create/update/delete labels |
| Extended | Create or delete Gmail filters |
| Extended | Create drafts |
| Complete | Batch retrieve thread content |
| Complete | Batch modify labels |
| 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 |
| Core | Extract document text |
| Core | Create new documents (set |
| Core | Insert, replace, and richly format text with tab/segment targeting, append-to-segment support, advanced typography, link management, and native markdown rendering ( |
| Extended | Find documents by name |
| Extended | Find and replace text |
| Extended | List docs in folder |
| Extended | Add tables, lists, page breaks |
| Extended | Apply advanced paragraph styling including headings, spacing, direction, pagination controls, shading, and bulleted/numbered/checkbox lists with nesting |
| Extended | Export document as formatted Markdown with optional comments |
| Extended | Insert markdown content with native Docs formatting (headings, bold/italic, bullets, numbered lists); supports tab/segment targeting and end-of-segment append |
| Extended | Insert clickable linked text at a specified index (tab-aware) |
| Extended | List all tabs (and nested child tabs) with tab IDs, titles, indices, and nesting depth |
| Complete | Insert images from Drive/URLs |
| Complete | Create or update headers and footers with correct segment-aware writes |
| 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 |
| Complete | Analyze document structure, including safe insertion points, tables, section breaks, headers/footers, and named ranges |
| Extended | Export document to PDF |
| Complete | Create data tables |
| Complete | Debug table issues |
| Complete | List all document comments |
| Complete | Create, reply to, or resolve comments |
| Complete | Insert an @mention person smart chip by email |
| Complete | Insert a Drive file smart chip from its URL |
| Complete | Extract all person and rich-link smart chips from the document |
๐ Google Sheets sheets_tools.py
Tool | Tier | Description |
| Core | Read cell ranges |
| Core | Write/update/clear cells |
| Core | Create new spreadsheets |
| Extended | List accessible spreadsheets |
| Extended | Get spreadsheet metadata |
| Extended | Apply colors, number formats, text wrapping, alignment, bold/italic, font size |
| Extended | List structured tables with IDs, names, ranges, and columns |
| Complete | Add sheets to existing files |
| Complete | Append rows to a structured table, auto-extending the table range |
| Complete | List all spreadsheet comments |
| Complete | Create, reply to, or resolve comments |
| Complete | Add, update, or delete conditional formatting rules |
| Complete | Add dropdowns, number bounds, date/text rules, or custom-formula validation to a range |
| Complete | Create a named range that can be referenced by formulas |
| Complete | Protect a range with optional editor whitelist and warning-only mode |
| Complete | Rename, delete, or duplicate sheet tabs (single action-based tool) |
๐ผ๏ธ Google Slides slides_tools.py
Tool | Tier | Description |
| Core | Create new presentations |
| Core | Retrieve presentation details |
| Extended | Apply multiple updates |
| Extended | Get specific slide information |
| Extended | Generate slide thumbnails |
| Extended | Apply text formatting (bold/italic/underline/strikethrough/color/font/size) to a slide element |
| Extended | Apply text formatting to EVERY text element on a slide, or across the whole presentation in one call |
| Extended | Apply paragraph alignment, line spacing, spacing above/below, and bullet presets |
| Extended | Style a shape's fill color, outline color/weight, and dash style |
| Extended | Set the background color of a slide |
| Extended | Create a positioned text box with initial text and optional formatting |
| Extended | Create a positioned shape (rectangle, ellipse, triangle, star, arrow, etc.) |
| Extended | Read speaker notes from a slide |
| Extended | Replace speaker notes on a slide |
| Extended | Insert an image onto a slide from a public URL |
| Extended | Delete a slide or any page element by object ID |
| Extended | Find and replace text across an entire presentation |
| Extended | Duplicate a slide (or any object) and return the new object ID |
| Extended | Move one or more slides to a new position |
| Complete | List all presentation comments |
| Complete | Create, reply to, or resolve comments |
๐ Google Forms forms_tools.py
Tool | Tier | Description |
| Core | Create new forms |
| Core | Retrieve form details & URLs |
| Complete | Configure form settings |
| Complete | Get individual responses |
| Extended | List all responses with pagination |
| Complete | Apply batch updates (questions, settings) |
โ Google Tasks tasks_tools.py
Tool | Tier | Description |
| Core | List tasks with filtering |
| Core | Retrieve task details |
| Core | Create, update, delete, or move tasks |
| Complete | List task lists |
| Complete | Get task list details |
| Complete | Create, update, delete task lists, or clear completed tasks |
๐ค Google Contacts contacts_tools.py
Tool | Tier | Description |
| Core | Search contacts by name, email, phone |
| Core | Retrieve detailed contact info |
| Core | List contacts with pagination |
| Core | Create, update, or delete contacts |
| Extended | List contact groups/labels |
| Extended | Get group details with members |
| Complete | Batch create, update, or delete contacts |
| Complete | Create, update, delete groups, or modify membership |
๐ฌ Google Chat chat_tools.py
Tool | Tier | Description |
| Extended | List chat spaces/rooms |
| Core | Retrieve space messages |
| Core | Send messages to spaces |
| Core | Search across chat history |
| Core | Add emoji reaction to a message |
| Extended | Download attachment from a chat message |
๐ Google Custom Search search_tools.py
Tool | Tier | Description |
| Core | Perform web searches (supports site restrictions via sites parameter) |
| Complete | Retrieve search engine metadata |
โก Google Apps Script apps_script_tools.py
Tool | Tier | Description |
| Core | List accessible Apps Script projects |
| Core | Get complete project with all files |
| Core | Retrieve specific file content |
| Core | Create new standalone or bound project |
| Core | Update or create script files |
| Core | Execute function with parameters |
| Extended | List all project deployments |
| Extended | Create, update, or delete script deployments |
| 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)
Open Claude Desktop Settings โ Developer โ Edit Config
macOS:
~/Library/Application Support/Claude/claude_desktop_config.jsonWindows:
%APPDATA%\Claude\claude_desktop_config.json
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 calendarNote: Configure OAuth credentials before running. Supports environment variables,
.envfile, orclient_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 pytestuv sync --group testinstalls only the testing stack if you need a slimmer environment.uv run main.py --transport streamable-httplaunches the server with your checked-out code for manual verification.Ruff is part of the
devgroup because pre-push hooks callruff checkautomaticallyโ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-httpIf 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:
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.
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-httpKey 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=trueIncompatible 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=6379Disk support requires
workspace-mcp[disk](orpy-key-value-aio[disk]) when installing from source. The official Docker image includes thediskextra by default. Valkey support is optional. Installworkspace-mcp[valkey](orpy-key-value-aio[valkey]) only if you enable the Valkey backend. Windows: buildingvalkey-glidefrom source requires MSVC C++ build tools with C11 support. If you seeaws-lc-sysC11 errors, setCFLAGS=/std:c11.
Variable | Default | Description |
| localhost | Valkey/Redis host |
| 6379 | Port (6380 auto-enables TLS) |
| 0 | Database number |
| auto | Enable TLS (auto if port 6380) |
| - | Authentication username |
| - | Authentication password |
| 5000 | Request timeout for remote hosts |
| 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-httpHow It Works:
Protocol-level auth enabled: All MCP requests (including
initializeandtools/list) require a valid Bearer token, following the standard OAuth 2.1 flow. Unauthenticated requests receive a401with 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/registerendpoints โ only resource metadataBearer token only: All authentication via
Authorization: Bearer <token>headersStateless by design: Works seamlessly with
WORKSPACE_MCP_STATELESS_MODE=trueExternal identity providers: Integrate with your existing authentication infrastructure
Requirements:
Must be used with
MCP_ENABLE_OAUTH21=trueOAuth client ID still required for token validation; client secret is optional for public clients (
GOOGLE_OAUTH_CLIENT_ID, optionalGOOGLE_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.pyPrerequisites:
A Google Cloud service account with a JSON key
Domain-wide delegation enabled for the service account in your Google Workspace Admin Console (Security โ API controls โ Domain-wide delegation)
The required OAuth scopes authorized for the service account's client ID in the Admin Console
USER_GOOGLE_EMAILset to the domain user the service account will impersonate
Incompatibilities:
Cannot be combined with
--single-usermodeCannot be combined with
MCP_ENABLE_OAUTH21=trueOnly one key source may be provided โ set either
GOOGLE_SERVICE_ACCOUNT_KEY_FILEorGOOGLE_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_emailparameters) 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-workspaceOr 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_URLwhen all OAuth endpoints should use the external URL (recommended for reverse proxy setups)Use
GOOGLE_OAUTH_REDIRECT_URIwhen you only need to override the callback URLThe 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-httpRequires 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.pyDevelopment 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:
Server returns authorization URL
Open URL in browser and authorize
Google provides an authorization code
Paste the code when prompted (or it's handled automatically)
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 mainBecause 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 # DependenciesAdding 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 objectsArchitecture Highlights
Service Caching: 30-minute TTL reduces authentication overhead
Scope Management: Centralized in
SCOPE_GROUPSfor easy maintenanceError 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:
CredentialStorebase class defines standard operations (get, store, delete, list users)Local File Storage:
LocalDirectoryCredentialStoreimplementation stores credentials as JSON filesConfigurable Storage: Environment variable
GOOGLE_MCP_CREDENTIALS_DIRsets storage locationMulti-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.jsonor the.credentials/directory to source control!OAuth Callback: Uses
http://localhost:8000/oauth2callbackfor development (requiresOAUTHLIB_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 theALLOWED_FILE_DIRSenvironment 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:
Available Tools
149 toolsadd_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.
| Name | Required | Description | Default |
|---|---|---|---|
| user_google_email | Yes | The user's Google email address (authenticated account). | |
| spreadsheet_id | Yes | Target spreadsheet ID. | |
| range_name | Yes | A1 range, e.g. "Sheet1!A1:A10" or "A1:A10". | |
| validation_type | Yes | ONE_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. | |
| values | No | For ONE_OF_LIST: allowed dropdown options. For NUMBER_BETWEEN: [min, max]. For single-value conditions: [value]. Ignored for BOOLEAN and CUSTOM_FORMULA. | |
| custom_formula | No | For CUSTOM_FORMULA only โ an expression returning TRUE to allow, e.g. "=A1>0" or "=REGEXMATCH(A1,"^\d+$")". | |
| strict | No | True rejects invalid input outright. False shows a warning but accepts the entry. | |
| show_dropdown | No | For ONE_OF_LIST โ True (default) renders the dropdown arrow; False hides it while still enforcing the rule. | |
| input_message | No | Optional help text shown when the cell is focused. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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).
| Name | Required | Description | Default |
|---|---|---|---|
| user_google_email | Yes | ||
| spreadsheet_id | Yes | Google Sheets spreadsheet ID (from the URL after `/d/`). | |
| name | Yes | Identifier 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_name | Yes | A1-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
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| user_google_email | Yes | The user's Google email address (authenticated account). | |
| spreadsheet_id | Yes | Target spreadsheet ID. | |
| table_id | Yes | Table ID from list_sheet_tables (a numeric string; distinct from sheetId). | |
| values | Yes | 2D list (each inner list = one row of cell values) or a JSON-encoded version of same. Column count should match the table. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| user_google_email | Yes | ||
| document_id | Yes | Google Docs document ID. | |
| tab_id | No | Optional tab ID to scope the operation to a specific tab. | |
| strip_plain_text | No | If 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
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| user_google_email | Yes | The user's Google email address (authenticated account). | |
| message_ids | Yes | Gmail message IDs from search_gmail_messages. | |
| add_label_ids | No | Label 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_ids | No | Label IDs to remove across all messages. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| user_google_email | Yes | User's Google email address | |
| document_id | Yes | ID of the document to update | |
| operations | Yes | List of operation dicts. Each operation MUST have a 'type' field. All operations accept an optional 'tab_id' to target a specific tab. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| user_google_email | Yes | The user's Google email address (authenticated account). | |
| form_id | Yes | Form ID from the edit URL. | |
| requests | Yes | List 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
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| user_google_email | Yes | The user's Google email address (authenticated account). | |
| presentation_id | Yes | Target presentation ID. | |
| requests | Yes | List 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
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| user_google_email | Yes | The user's Google email address (authenticated account). | |
| file_name | Yes | Exact display name (case-sensitive) as shown in Drive. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| user_google_email | Yes | The user's Google email address (authenticated account). | |
| file_id | Yes | Drive file ID of the source. | |
| new_name | No | Name for the copy. Defaults to "Copy of <original>". | |
| parent_folder_id | No | Target folder ID. Default "root" (My Drive). Shared-drive folder IDs work. | root |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| user_google_email | Yes | ||
| source_folder_id | Yes | ID of the folder to copy. | |
| destination_parent_id | No | Parent folder ID where the new copy goes. "root" by default. | root |
| new_folder_name | No | Optional name for the top-level copied folder. Defaults to "Copy of [original name]". |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| user_google_email | Yes | The user's Google email address (authenticated account). | |
| summary | Yes | Calendar display name, e.g. "Client Meetings" or "Personal - Fitness". | |
| description | No | Optional longer description shown in calendar settings. | |
| timezone | No | IANA timezone string like "America/New_York" or "Europe/London". Defaults to the account's default timezone when omitted. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| user_google_email | Yes | User's Google email address | |
| title | Yes | Title of the new document | |
| content | No | Optional initial content to insert. | |
| format_as_markdown | No | If 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
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| user_google_email | Yes | The user's Google email address (authenticated account). | |
| file_name | Yes | Name for the new Drive file (include the file extension for clarity, though the MIME type is authoritative). | |
| content | No | Text content for the new file. Mutually exclusive with fileUrl. Provide one of content or fileUrl. | |
| folder_id | No | Parent folder ID. "root" = My Drive root; for shared drives pass a folder ID inside that drive. Default "root". | root |
| mime_type | No | MIME 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 |
| fileUrl | No | Source URL โ supports file:// (local path), http://, and https://. When provided, the bytes are streamed into Drive. SSRF-protected with size limits. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| user_google_email | Yes | The user's Google email address (authenticated account). | |
| folder_name | Yes | Display name for the new folder. Forward slashes are treated as literal characters, not nesting. | |
| parent_folder_id | No | Parent folder ID. "root" for My Drive root, or a folder ID within a shared drive for shared-drive folders. | root |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| user_google_email | Yes | The user's Google email address (authenticated account). | |
| title | Yes | Form title shown at the top of the form to respondents. | |
| description | No | Optional subtitle text shown under the title. | |
| document_title | No | Optional browser-tab/Drive title. Defaults to the form's `title` if omitted. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| user_google_email | Yes | The user's Google email address (authenticated account). | |
| title | No | Display title for the new deck. Default "Untitled Presentation". | Untitled Presentation |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| user_google_email | Yes | The user's Google email address (authenticated account). | |
| message_id | Yes | Message resource name ("spaces/<space>/messages/<msg>") from get_messages or search_messages. | |
| emoji_unicode | Yes | Single Unicode emoji character, e.g. "๐" (thumbs up) or a literal emoji like a smiley. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| user_google_email | Yes | The user's Google email address (authenticated account). | |
| title | Yes | Display title for the new project. | |
| parent_id | No | Optional Drive ID of the container (Sheet/Doc/Form/ Slides) the script is bound to. Omit for a standalone project. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| user_google_email | Yes | The user's Google email address (authenticated account). | |
| spreadsheet_id | Yes | Target spreadsheet ID. | |
| sheet_name | Yes | Display name for the new tab. Must be unique within the spreadsheet. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.).
| Name | Required | Description | Default |
|---|---|---|---|
| user_google_email | Yes | ||
| presentation_id | Yes | Google Slides presentation ID (from the URL after `/d/`). | |
| page_object_id | Yes | Object ID of the slide where the shape will be placed. Get it from `get_presentation.slides[].objectId` or `get_page`. | |
| shape_type | Yes | Shape 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 | |
| left | No | X 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. | |
| top | No | Y position (top-left corner) in EMUs. Default `914400` = 1 inch down. | |
| width | No | Shape width in EMUs. Default `2000000` โ 2.19 inches. | |
| height | No | Shape height in EMUs. Default `2000000` โ 2.19 inches. | |
| fill_color | No | Optional 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
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| user_google_email | Yes | The user's Google email address (authenticated account). | |
| presentation_id | Yes | Target presentation ID. | |
| page_object_id | Yes | Slide objectId where the box is placed (from get_presentation.slides[].objectId). | |
| text | Yes | Initial text content for the box. | |
| left | No | X offset from slide's left edge in EMU. Default 914400 (1 in). | |
| top | No | Y offset from top in EMU. Default 914400 (1 in). | |
| width | No | Box width in EMU. Default 3000000 (โ3.28 in). | |
| height | No | Box height in EMU. Default 1000000 (โ1.09 in). | |
| font_size | No | Font size in points for the initial text. | |
| bold | No | True to bold the initial text. | |
| italic | No | True to italicize the initial text. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| user_google_email | Yes | The user's Google email address (authenticated account). | |
| title | Yes | Display title for the new spreadsheet. | |
| sheet_names | No | Initial tab names. When omitted, one default tab is created ("Sheet1"). Example: ["Raw Data", "Summary", "Charts"]. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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
| Name | Required | Description | Default |
|---|---|---|---|
| user_google_email | Yes | User's Google email address | |
| document_id | Yes | ID of the document to update | |
| table_data | Yes | 2D list of strings - EXACT format: [["col1", "col2"], ["row1col1", "row1col2"]] | |
| index | Yes | Document position (MANDATORY: get from inspect_doc_structure 'total_length') | |
| bold_headers | No | Whether to make first row bold (default: true) | |
| tab_id | No | Optional tab ID to create the table in a specific tab |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| user_google_email | Yes | The user's Google email address (authenticated account). | |
| script_id | Yes | Target project ID. | |
| description | No | Optional version note (e.g. release notes, ticket number). |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| user_google_email | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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:
After creating table โ Use this to verify structure
Before populating โ Use this to plan your data format
After population fails โ Use this to see what went wrong
When debugging โ Compare your data array to actual table structure
| Name | Required | Description | Default |
|---|---|---|---|
| user_google_email | Yes | User's Google email address | |
| document_id | Yes | ID of the document to inspect | |
| table_index | No | Which table to debug (0 = first table, 1 = second table, etc.) |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| user_google_email | Yes | The user's Google email address (authenticated account). | |
| document_id | Yes | Target document ID. | |
| tab_id | Yes | Tab ID to delete. Get from list_doc_tabs or inspect_doc_structure. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| user_google_email | Yes | The user's Google email address (authenticated account). | |
| script_id | Yes | Target Apps Script project ID (same as the Drive file ID). |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| user_google_email | Yes | ||
| presentation_id | Yes | Google Slides presentation ID (from the URL after `/d/`). | |
| object_id | Yes | Object 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
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| user_google_email | Yes | The user's Google email address (authenticated account). | |
| message_id | Yes | Message resource name ("spaces/<space>/messages/<msg>") from get_messages. | |
| attachment_index | No | 0-based index into the message's attachments list. Default 0 (first attachment). |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| user_google_email | Yes | The user's Google email address. Required for authentication. | |
| subject | Yes | Email subject. | |
| body | Yes | Email body (plain text). | |
| body_format | No | Email body format. Use 'plain' for plaintext or 'html' for HTML content. | plain |
| to | No | Optional recipient email address. | |
| cc | No | Optional CC email address. | |
| bcc | No | Optional BCC email address. | |
| from_name | No | Optional sender display name (e.g., 'Peter Hartree'). If provided, the From header will be formatted as 'Name <email>'. | |
| from_email | No | Optional '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_id | No | Optional Gmail thread ID to reply within. | |
| in_reply_to | No | Optional RFC Message-ID of the message being replied to (e.g., '<message123@gmail.com>'). | |
| references | No | Optional chain of Message-IDs for proper threading. | |
| attachments | No | Optional 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_signature | No | Whether to append the Gmail signature from Settings > Signature when available. Defaults to true. | |
| quote_original | No | Whether to include the original message as a quoted reply. Requires thread_id. Defaults to false. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| user_google_email | Yes | ||
| presentation_id | Yes | Google Slides presentation ID (from the URL after `/d/`). | |
| page_object_id | Yes | Object 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
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| user_google_email | Yes | The user's Google email address (authenticated account). | |
| document_id | Yes | Google Doc ID (must be a native Doc โ .docx stored in Drive is rejected). | |
| pdf_filename | No | Name for the generated PDF. Defaults to "<original>_PDF.pdf". ".pdf" extension is auto-appended. | |
| folder_id | No | Drive folder to save the PDF into. Defaults to My Drive root. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| user_google_email | Yes | User's Google email address | |
| document_id | Yes | ID of the document to update | |
| find_text | Yes | Text to search for | |
| replace_text | Yes | Text to replace with | |
| match_case | No | Whether to match case exactly | |
| tab_id | No | Optional ID of the tab to target |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| user_google_email | Yes | The user's Google email address (authenticated account). | |
| presentation_id | Yes | Target presentation ID. | |
| page_object_id | No | Slide objectId to scope the restyle to that one slide. Omit to restyle every slide in the deck. | |
| bold | No | True to bold, False to unbold, None to leave unchanged. | |
| italic | No | Same semantics as bold. | |
| underline | No | Same semantics as bold. | |
| strikethrough | No | Same semantics as bold. | |
| font_family | No | Font family name, e.g. "Arial". | |
| font_size | No | Font size in points. | |
| text_color | No | Hex color like "#333333". |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| user_google_email | Yes | The user's Google email address. Required. | |
| spreadsheet_id | Yes | The ID of the spreadsheet. Required. | |
| range_name | Yes | A1-style range (optionally with sheet name). Required. | |
| background_color | No | Hex background color (e.g., "#FFEECC"). | |
| text_color | No | Hex text color (e.g., "#000000"). | |
| number_format_type | No | Sheets number format type (e.g., "DATE"). | |
| number_format_pattern | No | Custom pattern for the number format. | |
| wrap_strategy | No | Text 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_alignment | No | Horizontal text alignment - LEFT, CENTER, or RIGHT. | |
| vertical_alignment | No | Vertical text alignment - TOP, MIDDLE, or BOTTOM. | |
| bold | No | Whether to apply bold formatting. | |
| italic | No | Whether to apply italic formatting. | |
| font_size | No | Font size in points. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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).
| Name | Required | Description | Default |
|---|---|---|---|
| user_google_email | Yes | ||
| presentation_id | Yes | Google Slides presentation ID (from the URL after `/d/`). | |
| page_element_id | Yes | Object 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. | |
| alignment | No | Paragraph horizontal alignment. One of `START` (left), `CENTER`, `END` (right), `JUSTIFIED`. Omit to leave unchanged. | |
| line_spacing | No | Line 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_above | No | Points of space above each paragraph (e.g., `12` for ~12pt gap). Omit to leave unchanged. | |
| space_below | No | Points of space below each paragraph. Omit to leave unchanged. | |
| bullet_preset | No | Bullet 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_index | No | Optional 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_index | No | Optional 0-based character offset (exclusive) where formatting ends. Must be greater than start_index if both provided. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| user_google_email | Yes | The user's Google email address (authenticated account). | |
| presentation_id | Yes | Parent presentation ID (from the URL after /d/). | |
| page_element_id | Yes | objectId of the text-bearing element (text box, shape, or placeholder) โ get from get_presentation or get_page. | |
| bold | No | True to bold, False to unbold, None to leave unchanged. | |
| italic | No | Same semantics as bold for italic. | |
| underline | No | Same semantics as bold for underline. | |
| strikethrough | No | Same semantics as bold for strikethrough. | |
| font_family | No | Font family name, e.g. "Arial", "Roboto", "Helvetica Neue". | |
| font_size | No | Font size in points, e.g. 14 or 24.5. | |
| text_color | No | Hex color like "#FF0000" or "#333333". | |
| start_index | No | 0-based character offset where formatting begins. Omit both indices to format ALL text in the element. | |
| end_index | No | 0-based character offset (exclusive) where formatting ends. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| trigger_type | Yes | Type 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_name | Yes | The function to run when trigger fires (e.g., "sendDailyReport") | |
| schedule | No | Schedule 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
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| user_google_email | Yes | The user's Google email address (authenticated account). | |
| contact_id | Yes | Contact ID โ either the short form ("c1234567890") or the full resource name ("people/c1234567890"). The short form is auto-prefixed. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| user_google_email | Yes | The user's Google email address (authenticated account). | |
| group_id | Yes | Group ID โ short ("myContacts"/"starred"/"abc123") or full resource name ("contactGroups/abc123"). Auto-prefixed when short. | |
| max_members | No | Max members to return. 1-1000. Default 100. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| user_google_email | Yes | User's Google email address | |
| document_id | Yes | ID of the Google Doc (or full URL) | |
| include_comments | No | Whether to include comments (default: True) | |
| comment_mode | No | How 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 included | inline |
| include_resolved | No | Whether to include resolved comments (default: False) | |
| suggestions_view_mode | No | How 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 rejected | DEFAULT_FOR_CURRENT_ACCESS |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| user_google_email | Yes | The user's Google email address (authenticated account). | |
| document_id | Yes | Doc ID or a full URL like docs.google.com/document/d/<id>/edit (either is accepted). | |
| suggestions_view_mode | No | How 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
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| user_google_email | Yes | ||
| document_id | Yes | Google Docs document ID (from the URL after `/document/d/`). |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| user_google_email | Yes | The user's Google email address (authenticated account). | |
| file_id | Yes | Drive file ID from search_drive_files, list_drive_items, or the URL like drive.google.com/file/d/<id>/view. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| user_google_email | Yes | The user's Google email address (authenticated account). | |
| file_id | Yes | Drive file ID from search_drive_files or a URL like drive.google.com/file/d/<id>/view. | |
| export_format | No | Export 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
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| user_google_email | Yes | The user's Google email address (authenticated account). | |
| file_id | Yes | Drive file ID from search_drive_files or a shareable URL. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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).
| Name | Required | Description | Default |
|---|---|---|---|
| user_google_email | Yes | ||
| file_id | Yes | Drive 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_size | No | Maximum 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
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| user_google_email | Yes | The user's Google email address (authenticated account). | |
| calendar_id | No | Calendar ID from list_calendars, or "primary" for the user's main calendar. Default "primary". | primary |
| event_id | No | Specific 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_min | No | Range start, RFC3339 (e.g. "2026-05-01T00:00:00Z" or "2026-05-01"). Defaults to now when omitted. | |
| time_max | No | Range end, RFC3339 exclusive. Omit for open-ended range (capped by max_results). | |
| max_results | No | Cap on events returned, 1-2500. Default 25. | |
| query | No | Free-text filter matched against summary, description, and location. | |
| detailed | No | False returns just summary + times + link; True adds description, location, attendees with response status, and organizer. | |
| include_attachments | No | When detailed=True, also include attachment fileId/fileUrl/mimeType/title for events with attached Drive files. Ignored when detailed=False. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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).
| Name | Required | Description | Default |
|---|---|---|---|
| user_google_email | Yes | The user's Google email address. Required. | |
| form_id | Yes | The 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
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| user_google_email | Yes | The user's Google email address. Required. | |
| form_id | Yes | The form ID โ the string after `/forms/d/` in the edit URL. | |
| response_id | Yes | The 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
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| message_id | Yes | Gmail message ID that owns the attachment. | |
| attachment_id | Yes | Attachment ID from the parent message's payload parts โ get this by calling get_gmail_message_content and reading the attachment metadata section. | |
| user_google_email | Yes | The user's Google email address (authenticated account). |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| message_id | Yes | Gmail message ID from search_gmail_messages or from the URL like mail.google.com/mail/u/0/#inbox/<id>. | |
| user_google_email | Yes | The user's Google email address (authenticated account). | |
| body_format | No | Body 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
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| message_ids | Yes | List of Gmail message IDs from search_gmail_messages. No hard cap โ the tool chunks into batches of 25 automatically. | |
| user_google_email | Yes | The user's Google email address (authenticated account). | |
| format | No | "full" (headers + body) or "metadata" (headers only, much faster for listing triage). | full |
| body_format | No | Body 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
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| thread_id | Yes | Gmail thread ID, typically the "threadId" field returned by search_gmail_messages or any message-get response. | |
| user_google_email | Yes | The user's Google email address (authenticated account). | |
| body_format | No | Body 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
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| thread_ids | Yes | List of Gmail thread IDs. No hard cap โ the tool chunks into batches of 25 automatically. | |
| user_google_email | Yes | The user's Google email address (authenticated account). | |
| body_format | No | Body 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
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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).
| Name | Required | Description | Default |
|---|---|---|---|
| user_google_email | Yes | The user's Google email address (authenticated account). | |
| space_id | Yes | Space resource name from list_spaces, formatted as "spaces/<id>". | |
| page_size | No | Max messages returned. Default 50. | |
| order_by | No | "createTime desc" (default, newest first) or "createTime" (oldest first). | createTime desc |
| message_filter | No | Chat 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
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| user_google_email | Yes | The user's Google email address (authenticated account). | |
| presentation_id | Yes | Parent presentation ID. | |
| page_object_id | Yes | Slide objectId from get_presentation's `slides[].objectId` field. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| user_google_email | Yes | The user's Google email address (authenticated account). | |
| presentation_id | Yes | Parent presentation ID. | |
| page_object_id | Yes | Slide objectId from get_presentation. | |
| thumbnail_size | No | "LARGE" (~1600px wide), "MEDIUM" (~800px, default), or "SMALL" (~200px). | MEDIUM |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| user_google_email | Yes | The user's Google email address (authenticated account). | |
| presentation_id | Yes | Presentation ID from a URL like docs.google.com/presentation/d/<id>/edit. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| user_google_email | Yes | The user's Google email address (authenticated account). | |
| script_id | Yes | Apps Script project ID. | |
| file_name | Yes | File name as it appears in the Apps Script editor (without extension โ e.g. "Code", "appsscript", "helpers"). Matched exactly. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| user_google_email | Yes | The user's Google email address (authenticated account). | |
| script_id | Yes | Target project ID. | |
| metrics_granularity | No | "DAILY" (last 7 days) or "WEEKLY" (last 8 weeks). Default "DAILY". | DAILY |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| user_google_email | Yes | The user's Google email address (authenticated account). | |
| script_id | Yes | Apps Script project ID from list_script_projects or a script URL like script.google.com/d/<scriptId>/edit. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| user_google_email | Yes | The user's Google email address. Required. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| user_google_email | Yes | ||
| presentation_id | Yes | Google Slides presentation ID (from the URL after `/d/`). | |
| page_object_id | No | Object 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_index | No | 0-based position of the slide in the deck. Used only if `page_object_id` is not provided. Index 0 = first slide. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| user_google_email | Yes | The user's Google email address (authenticated account). | |
| spreadsheet_id | Yes | Spreadsheet ID from list_spreadsheets or a URL like docs.google.com/spreadsheets/d/<id>/edit. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| user_google_email | Yes | The user's Google email address (authenticated account). | |
| task_list_id | Yes | Parent task list ID from list_task_lists. | |
| task_id | Yes | Task ID from list_tasks. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| user_google_email | Yes | The user's Google email address (authenticated account). | |
| task_list_id | Yes | Task list ID from list_task_lists. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| user_google_email | Yes | User's email address. Required. | |
| script_id | Yes | The 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_number | Yes | The 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
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| user_google_email | Yes | The user's Google email address (authenticated account). | |
| file_name | Yes | Display name for the resulting Google Doc (extension is stripped). | |
| content | No | Inline text for text formats (md, txt, html). Mutually exclusive with file_path and file_url. | |
| file_path | No | Local path or file:// URL to a binary source (docx/odt/rtf). Path safety validated. | |
| file_url | No | http:// or https:// URL to stream the source from. SSRF-protected with size limits. | |
| source_format | No | Override for format detection: "md"/"markdown", "docx", "txt", "html", "rtf", "odt". Auto-detected from file_name extension or content heuristics when omitted. | |
| folder_id | No | Parent folder ID. Default "root". | root |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| user_google_email | Yes | The user's Google email address (authenticated account). | |
| document_id | Yes | Target document ID. | |
| element_type | Yes | "table", "list", or "page_break". | |
| index | Yes | 0-based insertion index. Get stable positions from inspect_doc_structure. Index 0 is auto-bumped to 1. | |
| rows | No | Row count for a table. Required when element_type="table". | |
| columns | No | Column count for a table. Required when element_type="table". | |
| list_type | No | "UNORDERED" (bullets) or "ORDERED" (numbered). Required when element_type="list". | |
| text | No | Seed text for a list item. Defaults to "List item" when list_type is set but text is omitted. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| user_google_email | Yes | The user's Google email address (authenticated account). | |
| document_id | Yes | Target document ID. | |
| file_url | Yes | Full 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_text | No | Optional visible anchor text. Defaults to the URL itself (still renders as a chip on next open). | |
| index | No | 1-based document index to insert at. Default 1. | |
| tab_id | No | Tab ID from list_doc_tabs to scope to a specific tab. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| user_google_email | Yes | The user's Google email address (authenticated account). | |
| document_id | Yes | Target document ID. | |
| image_source | Yes | Drive file ID (non-URL string) or public HTTPS image URL. Drive IDs are auto-converted to https://drive.google.com/uc?id=<id>. | |
| index | Yes | 0-based insertion index from inspect_doc_structure. 0 auto-bumped to 1. | |
| width | No | Image width in points. 0 or omitted = auto-size. | |
| height | No | Image height in points. 0 or omitted = auto-size. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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_linkA
Insert clickable hyperlink text at a given document index.
Use this for a simple hyperlink; for a Drive-file smart chip use insert_doc_file_chip; for a person @mention chip use insert_doc_person_chip. Requires the documents OAuth scope.
| Name | Required | Description | Default |
|---|---|---|---|
| user_google_email | Yes | The user's Google email address (authenticated account). | |
| document_id | Yes | Target document ID. | |
| text | Yes | Visible link text inserted into the document. | |
| url | Yes | Target URL โ http://, https://, or mailto: schemes supported. | |
| index | No | 1-based document index where the text is inserted. Default 1 (start of body). Get stable indices from inspect_doc_structure. | |
| tab_id | No | Tab ID from list_doc_tabs to target a specific tab. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It states it inserts a hyperlink and requires OAuth, but does not disclose potential side effects (e.g., modifying document content, overwriting existing text at the index). More detail on behavior would improve transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise (three sentences), front-loaded with the main purpose, and each sentence adds essential information: action, sibling alternatives, and OAuth requirement. No waste.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
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 covers core purpose, usage guidelines, and OAuth. The input schema is fully described, and there is an output schema (not shown). Missing mention of document modification side effects, but overall adequate.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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; it only states 'simple hyperlink' without elaborating on parameter details. No significant added value.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'insert', the resource 'clickable hyperlink text', and the location 'at a given document index'. It distinguishes from sibling tools by naming alternatives (insert_doc_file_chip, insert_doc_person_chip) and their use cases.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
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 ('simple hyperlink') and when to use alternatives ('for a Drive-file smart chip' and 'for a person @mention chip'). It also mentions the required OAuth scope, providing 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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| user_google_email | Yes | The user's Google email address (authenticated account). | |
| document_id | Yes | Target document ID. | |
| markdown | Yes | Markdown source to insert. | |
| index | No | 1-based document index to insert at. Default 1 (start of body). Ignored when end_of_segment=True. | |
| tab_id | No | Tab ID from list_doc_tabs to target a specific tab. | |
| segment_id | No | Header/footer/footnote segment ID from inspect_doc_structure (do not invent IDs). | |
| end_of_segment | No | True appends to the end of the target segment without needing to calculate an index โ safest for repeatable inserts. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| user_google_email | Yes | ||
| document_id | Yes | Google Docs document ID (from the URL after `/document/d/`). | |
| Yes | Email 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. | ||
| index | No | 1-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_id | No | Optional tab ID to target a specific tab. Get it from `list_doc_tabs`. Omit for single-body (legacy) documents. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| user_google_email | Yes | The user's Google email address (authenticated account). | |
| document_id | Yes | Target document ID. | |
| title | Yes | Display title of the new tab. | |
| index | Yes | 0-based position among sibling tabs. 0 = first; use a large number to append at the end. | |
| parent_tab_id | No | Parent tab's tabId (from list_doc_tabs) to nest the new tab as a child. Omit for a top-level tab. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| user_google_email | Yes | ||
| presentation_id | Yes | Google Slides presentation ID (from the URL after `/d/`). | |
| page_object_id | Yes | Object ID of the slide to place the image on. Get it from `get_presentation.slides[].objectId`. | |
| image_url | Yes | Publicly 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.). | |
| left | No | X 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. | |
| top | No | Y position (top-left corner) in EMUs. Default `914400` = 1 inch down. | |
| width | No | Image 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. | |
| height | No | Image height in EMUs. Default `2000000` โ 2.19 inches. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| user_google_email | Yes | User's Google email address | |
| document_id | Yes | ID of the document to inspect | |
| detailed | No | Whether to return detailed structure information | |
| tab_id | No | Optional ID of the tab to inspect. If not provided, inspects main document. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| user_google_email | Yes | The user's Google email address (authenticated account). |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| user_google_email | Yes | The user's Google email address (authenticated account). | |
| page_size | No | Max groups per page. 1-1000. Default 100. | |
| page_token | No | Cursor from a prior response's "Next page token" line. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| user_google_email | Yes | The user's Google email address (authenticated account). | |
| page_size | No | Max contacts per page. 1-1000. Default 100. | |
| page_token | No | Cursor from a prior response's "Next page token" line. Omit for first page. | |
| sort_order | No | "LAST_MODIFIED_ASCENDING", "LAST_MODIFIED_DESCENDING", "FIRST_NAME_ASCENDING", or "LAST_NAME_ASCENDING". |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| user_google_email | Yes | The user's Google email address (authenticated account). | |
| script_id | Yes | Target project ID. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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).
| Name | Required | Description | Default |
|---|---|---|---|
| user_google_email | Yes | The user's Google email address. Required. | |
| folder_id | No | Drive 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_size | No | Maximum 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
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| user_google_email | Yes | ||
| document_id | Yes | Google Docs document ID (from the URL after `/document/d/`). |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| user_google_email | Yes | ||
| document_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| user_google_email | Yes | The user's Google email address (authenticated account). | |
| folder_id | No | Folder 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_size | No | Max items returned, 1-1000. Default 100. | |
| page_token | No | Cursor from a prior response's `nextPageToken`. | |
| drive_id | No | Shared drive ID to scope the listing. Omit for My Drive + shared-with-me. | |
| include_items_from_all_drives | No | True (default) to include shared drive items when drive_id is omitted. | |
| corpora | No | "user", "drive", or "allDrives". Defaults to "drive" when drive_id is set. | |
| file_type | No | Friendly alias ("folder", "doc", "sheet", "slides", "pdf", etc.) or raw MIME type. Filters to that type only. | |
| detailed | No | True (default) includes size, modified time, webViewLink; False returns just name/ID/type. | |
| order_by | No | Comma-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
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| user_google_email | Yes | The user's Google email address. Required. | |
| form_id | Yes | The form ID โ the string after `/forms/d/` in the edit URL. | |
| page_size | No | Maximum 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_token | No | Opaque 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
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| user_google_email | Yes | The user's Google email address (authenticated account). |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| user_google_email | Yes | The user's Google email address (authenticated account). |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| user_google_email | Yes | ||
| presentation_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| user_google_email | Yes | The user's Google email address (authenticated account). | |
| page_size | No | Max processes to return. Default 50. | |
| script_id | No | Optional โ scope to a single project's executions. Omit for all accessible scripts. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| user_google_email | Yes | The user's Google email address (authenticated account). | |
| page_size | No | Max projects per page. Default 50; Drive cap 1000. | |
| page_token | No | Cursor from a prior response's pagination token. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| user_google_email | Yes | The user's Google email address (authenticated account). | |
| spreadsheet_id | Yes | Target spreadsheet ID. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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).
| Name | Required | Description | Default |
|---|---|---|---|
| user_google_email | Yes | The user's Google email address. Required. | |
| page_size | No | Maximum 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_type | No | Filter 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
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| user_google_email | Yes | ||
| spreadsheet_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| user_google_email | Yes | The user's Google email address (authenticated account). | |
| max_results | No | Max spreadsheets to return. Default 25. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| user_google_email | Yes | The user's Google email address (authenticated account). | |
| max_results | No | Max lists per page. Default/cap 1000. | |
| page_token | No | Cursor from a prior response's "Next page token" line. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| user_google_email | Yes | The user's Google email address (authenticated account). | |
| task_list_id | Yes | Task list ID from list_task_lists. | |
| max_results | No | Cap on tasks returned across all pages. Default varies; hard cap 10000. | |
| page_token | No | Resume cursor from a prior call's "Next page token". | |
| show_completed | No | Include completed tasks. Default True. | |
| show_deleted | No | Include deleted tasks. Default False. | |
| show_hidden | No | Include tasks hidden from the UI (required alongside show_completed to see web/mobile-completed tasks). Default False. | |
| show_assigned | No | Include tasks assigned to the user. Default False. | |
| completed_max | No | RFC3339 upper bound on completion date. | |
| completed_min | No | RFC3339 lower bound on completion date. | |
| due_max | No | RFC3339 upper bound on due date. Auto-adjusted to include the boundary date's tasks. | |
| due_min | No | RFC3339 lower bound on due date. | |
| updated_min | No | RFC3339 lower bound on last-modified time โ useful for incremental sync. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| user_google_email | Yes | The user's Google email address (authenticated account). | |
| script_id | Yes | Target project ID. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| user_google_email | Yes | The user's Google email address. Required. | |
| spreadsheet_id | Yes | The ID of the spreadsheet. Required. | |
| action | Yes | The operation to perform. Must be one of "add", "update", or "delete". | |
| range_name | No | A1-style range (optionally with sheet name). Required for "add". Optional for "update" (preserves existing ranges if omitted). Not used for "delete". | |
| condition_type | No | Sheets condition type (e.g., NUMBER_GREATER, TEXT_CONTAINS, DATE_BEFORE, CUSTOM_FORMULA). Required for "add". Optional for "update" (preserves existing type if omitted). | |
| condition_values | No | Values for the condition; accepts a list or a JSON string representing a list. Depends on condition_type. Used by "add" and "update". | |
| background_color | No | Hex background color to apply when condition matches. Used by "add" and "update". | |
| text_color | No | Hex text color to apply when condition matches. Used by "add" and "update". | |
| rule_index | No | 0-based index of the rule. For "add", optionally specifies insertion position. Required for "update" and "delete". | |
| gradient_points | No | List (or JSON list) of gradient points for a color scale. If provided, a gradient rule is created and boolean parameters are ignored. Used by "add" and "update". | |
| sheet_name | No | Sheet name to locate the rule when range_name is omitted. Defaults to the first sheet. Used by "update" and "delete". |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| user_google_email | Yes | The user's Google email address. Required. | |
| action | Yes | The action to perform: "create", "update", or "delete". | |
| contact_id | No | The contact ID. Required for "update" and "delete" actions. | |
| given_name | No | First name (for create/update). | |
| family_name | No | Last name (for create/update). | |
| phones | No | List of phone dicts {number, type?}. Supported types: mobile, work, home, main, workMobile, internal, other, etc. Use type="internal" for internal PBX/ATS short numbers (e.g. 250, 301) โ stored as a standalone number without + prefix, displayed as "Internal: 250". | |
| emails | No | List of email dicts {address, type?}. | |
| organizations | No | List of org dicts {name?, title?, department?, jobDescription?, type?}. | |
| notes | No | Additional notes (for create/update). | |
| address | No | Street address (for create/update). | |
| phones_mode | No | How to update phones on "update": "merge" (default), "replace", or "remove". merge = read-modify-write with dedup by canonicalForm/normalized value. replace = overwrite all phones with provided list. remove = delete phones matching provided numbers. | merge |
| emails_mode | No | How to update emails on "update": "merge" (default), "replace", or "remove". | merge |
| organizations_mode | No | How to update orgs on "update": "merge" (default), "replace", or "remove". | merge |
| phone | No | [DEPRECATED] Single phone number. Use phones=[{"number":..., "type":"mobile"}]. | |
| No | [DEPRECATED] Email address. Use emails=[{"address":..., "type":"other"}]. | ||
| organization | No | [DEPRECATED] Company name. Use organizations=[{"name":...}]. | |
| job_title | No | [DEPRECATED] Job title. Use organizations=[{"title":...}]. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| user_google_email | Yes | The user's Google email address (authenticated account). | |
| action | Yes | "create", "update", "delete", or "modify_members". | |
| group_id | No | Group ID (short or "contactGroups/<id>"). Required for update, delete, modify_members. | |
| name | No | New group display name. Required for create and update. | |
| delete_contacts | No | Only with action="delete". True also deletes contacts inside the group; False (default) keeps them. | |
| add_contact_ids | No | For modify_members โ contact IDs to add. Short or "people/<id>"; auto-prefixed. | |
| remove_contact_ids | No | For modify_members โ contact IDs to remove. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| user_google_email | Yes | The user's Google email address. Required. | |
| action | Yes | The action to perform: "create", "update", or "delete". | |
| contacts | No | List of contact dicts for "create" action. Each dict may contain: given_name, family_name, phones, emails, organizations, notes, address. Deprecated: phone, email, organization, job_title. | |
| updates | No | List of update dicts for "update" action. Each dict must contain contact_id and may contain the same fields as contacts. | |
| contact_ids | No | List of contact IDs for "delete" action. | |
| field | No | For "update" action โ the single People API field to update across all contacts in this batch. Required. Must be one of: names, phoneNumbers, emailAddresses, organizations, biographies, addresses. Using a single field per batch call prevents unintentional data loss from a union updateMask overwriting unrelated fields. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| user_google_email | Yes | The user's Google email address (authenticated account). | |
| action | Yes | "create", "update", or "delete". | |
| script_id | Yes | Target project ID. | |
| deployment_id | No | Existing deployment ID. Required for update and delete (get from list_deployments). | |
| description | No | Deployment description shown in the Apps Script UI. Required for create and update. | |
| version_description | No | For create only โ description attached to the auto-created version. Defaults to `description` when omitted. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| user_google_email | Yes | ||
| document_id | Yes | ||
| action | Yes | ||
| comment_content | No | ||
| comment_id | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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).
| Name | Required | Description | Default |
|---|---|---|---|
| user_google_email | Yes | The user's Google email address (authenticated account). | |
| file_id | Yes | Drive file or folder ID. | |
| action | Yes | "grant", "grant_batch", "update", "revoke", or "transfer_owner". | |
| share_with | No | For "grant" โ recipient email (user/group) or domain name (domain). Omit for share_type="anyone". | |
| role | No | For "grant" (default "reader") and "update": "reader", "commenter", or "writer". | |
| share_type | No | For "grant": "user", "group", "domain", or "anyone". Default "user". | user |
| permission_id | No | Required for "update" and "revoke". Get it from get_drive_file_permissions. | |
| recipients | No | For "grant_batch": list of objects with keys email (or domain for domain shares), role, share_type, expiration_time. | |
| send_notification | No | Send the recipient an email. Default True. Applies to grant/grant_batch user/group shares. | |
| email_message | No | Custom body appended to the notification email. | |
| expiration_time | No | RFC3339 deadline ("2026-06-01T00:00:00Z") after which the permission auto-revokes. Applies to grant/update. | |
| allow_file_discovery | No | For domain/anyone shares, True = indexable in search, False = link-only. | |
| new_owner_email | No | Required for "transfer_owner". Must be inside the same Workspace domain in most cases. | |
| move_to_new_owners_root | No | After transfer, move the file to the new owner's My Drive root. Default False. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| user_google_email | Yes | The user's Google email address (authenticated account). | |
| action | Yes | "create", "update", "delete", or "rsvp". Case-insensitive. | |
| summary | No | Event title. Required for create; optional for update. | |
| start_time | No | RFC3339 start, e.g. "2026-05-01T15:00:00-04:00" or "2026-05-01" for all-day. Required for create. | |
| end_time | No | RFC3339 end (exclusive). Required for create. | |
| event_id | No | Event ID from get_events. Required for update, delete, rsvp. | |
| calendar_id | No | Calendar ID from list_calendars, or "primary". | primary |
| description | No | Event body text. Supports plain text and some HTML. | |
| location | No | Free-form location string or address. | |
| attendees | No | List of emails (e.g. ["alice@ex.com"]) or attendee objects (e.g. [{"email": "alice@ex.com", "optional": true}]). | |
| timezone | No | IANA zone like "America/New_York". Applied to start/end when they are tz-naive. | |
| attachments | No | Drive file IDs or sharable URLs โ attached as event files visible to attendees. | |
| add_google_meet | No | True to attach a Meet conference, False on update to remove it. | |
| reminders | No | List of reminder objects like [{"method": "popup", "minutes": 10}] or a JSON string of same. Ignored when use_default_reminders=True. | |
| use_default_reminders | No | True (default on create) to use the calendar's default reminders. Set False to use `reminders`. | |
| transparency | No | "opaque" shows as busy; "transparent" shows as free. | |
| visibility | No | "default", "public", "private", or "confidential". | |
| color_id | No | Color index 1-11 (update only); see Calendar color map. | |
| recurrence | No | RFC5545 rules, e.g. ["RRULE:FREQ=WEEKLY;BYDAY=MO,WE;COUNT=10"]. | |
| guests_can_modify | No | Allow attendees to edit the event. | |
| guests_can_invite_others | No | Allow attendees to invite more people. | |
| guests_can_see_other_guests | No | Allow attendees to see the guest list. | |
| response | No | RSVP value for action="rsvp" โ "accepted", "declined", "tentative", or "needsAction". | |
| rsvp_comment | No | Optional note sent with the RSVP. | |
| send_updates | No | RSVP notification behavior โ "all" (default), "externalOnly", or "none". |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| user_google_email | Yes | The user's Google email address (authenticated account). | |
| action | Yes | "create", "list", "update", or "delete". Case-insensitive. | |
| start_time | No | Start date/time. "YYYY-MM-DD" auto-converts to midnight; RFC3339 works for partial days. | |
| end_time | No | End (exclusive). For a full day on Apr 5 pass start="2026-04-05", end="2026-04-06". | |
| summary | No | Display label. Defaults to "Focus Time". | |
| description | No | Optional body text for context. | |
| auto_decline_mode | No | "declineAllConflictingInvitations" (default), "declineOnlyNewConflictingInvitations", or "declineNone". | |
| decline_message | No | Body of auto-decline replies. | |
| chat_status | No | "doNotDisturb" (default) or "available". | |
| recurrence | No | RFC5545 rules, e.g. ["RRULE:FREQ=WEEKLY;COUNT=10"]. | |
| timezone | No | IANA zone like "America/New_York". Required when start/end are date-only or lack a UTC offset. | |
| time_min | No | List-action range start. Defaults to now. | |
| time_max | No | List-action range end. | |
| max_results | No | List-action cap. Default 10. | |
| event_id | No | Event ID. Required for update and delete. | |
| calendar_id | No | Default "primary". Focus Time lives on primary calendars only โ pass "primary" or the user's primary email. | primary |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| user_google_email | Yes | The user's Google email address (authenticated account). | |
| action | Yes | "create" or "delete". Case-insensitive. | |
| criteria | No | Filter 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_action | No | What 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_id | No | Filter ID from list_gmail_filters. Required for delete. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| user_google_email | Yes | The user's Google email address (authenticated account). | |
| action | Yes | "create" (needs name), "update" (needs label_id; name optional), or "delete" (needs label_id). | |
| name | No | Label display name, e.g. "Clients/Acme" โ slash creates a nested label. Required for create. | |
| label_id | No | Label ID from list_gmail_labels (e.g. "Label_1234"). Required for update and delete. | |
| label_list_visibility | No | "labelShow" (appears in sidebar) or "labelHide" (hidden from sidebar). | labelShow |
| message_list_visibility | No | "show" (label pill shown on messages) or "hide" (no pill on messages). | show |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| user_google_email | Yes | The user's Google email address (authenticated account). | |
| action | Yes | "create", "list", "update", or "delete". Case-insensitive. | |
| start_time | No | Start 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_time | No | End (exclusive). For a single full day on Apr 5, pass start="2026-04-05", end="2026-04-06". | |
| summary | No | Display label. Defaults to "Out of Office". | |
| auto_decline_mode | No | "declineAllConflictingInvitations" (default), "declineOnlyNewConflictingInvitations", or "declineNone". | |
| decline_message | No | Body of auto-decline replies sent to organizers. | |
| recurrence | No | RFC5545 rules, e.g. ["RRULE:FREQ=WEEKLY;COUNT=10"]. | |
| timezone | No | IANA zone like "America/New_York". Required when start/end are date-only or lack a UTC offset. | |
| time_min | No | List-action range start. Defaults to now. Recurring series expand to instances within the range. | |
| time_max | No | List-action range end. | |
| max_results | No | List-action cap. Default 10. | |
| event_id | No | Event ID from a prior list call. Required for update and delete. | |
| calendar_id | No | Default "primary". OOO lives on primary calendars โ a user's primary ID or email works, secondary calendar IDs do not. | primary |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| user_google_email | Yes | ||
| presentation_id | Yes | ||
| action | Yes | ||
| comment_content | No | ||
| comment_id | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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).
| Name | Required | Description | Default |
|---|---|---|---|
| user_google_email | Yes | ||
| spreadsheet_id | Yes | Google Sheets spreadsheet ID (from the URL after `/d/`). | |
| action | Yes | Which 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_id | No | Numeric 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_name | No | Tab 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_name | No | New 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
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| user_google_email | Yes | ||
| spreadsheet_id | Yes | ||
| action | Yes | ||
| comment_content | No | ||
| comment_id | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| user_google_email | Yes | The user's Google email address (authenticated account). | |
| action | Yes | "create", "update", "delete", or "move". | |
| task_list_id | Yes | Parent task list ID from list_task_lists. Required for all actions. | |
| task_id | No | Task ID from list_tasks. Required for update, delete, move. | |
| title | No | Task title. Required for create; optional for update. | |
| notes | No | Body/description text. | |
| status | No | Only for update โ "needsAction" or "completed". | |
| due | No | RFC3339 due timestamp, e.g. "2026-12-31T23:59:59Z". Google Tasks ignores the time portion and uses the date only. | |
| parent | No | Parent task ID to make this a subtask (create/move). | |
| previous | No | ID of the preceding sibling task for ordering (create/move). Omit to place first. | |
| destination_task_list | No | For move โ moves the task into another list. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| user_google_email | Yes | The user's Google email address (authenticated account). | |
| action | Yes | "create", "update", "delete", or "clear_completed". | |
| task_list_id | No | Task list ID. Required for update, delete, clear_completed. Get from list_task_lists. | |
| title | No | New display title. Required for create and update. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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".
| Name | Required | Description | Default |
|---|---|---|---|
| user_google_email | Yes | User's Google email address | |
| document_id | Yes | ID of the document to update | |
| start_index | Yes | Start 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_index | No | End position for text replacement/formatting (if not provided with text, text is inserted) | |
| text | No | New text to insert or replace with (optional - can format existing text without changing it) | |
| tab_id | No | Optional document tab ID to target | |
| segment_id | No | Optional header/footer/footnote segment ID to target | |
| end_of_segment | No | Insert text at the end of the targeted segment instead of start_index | |
| bold | No | Whether to make text bold (True/False/None to leave unchanged) | |
| italic | No | Whether to make text italic (True/False/None to leave unchanged) | |
| underline | No | Whether to underline text (True/False/None to leave unchanged) | |
| strikethrough | No | Whether to strike through text (True/False/None to leave unchanged) | |
| font_size | No | Font size in points | |
| font_family | No | Font family name (e.g., "Arial", "Times New Roman") | |
| font_weight | No | Font weight (100-900 in steps of 100; requires font_family) | |
| text_color | No | Foreground text color (#RRGGBB) | |
| background_color | No | Background/highlight color (#RRGGBB) | |
| link_url | No | Hyperlink URL (http/https) | |
| clear_link | No | Remove hyperlink from the target range | |
| baseline_offset | No | One of NONE, SUPERSCRIPT, SUBSCRIPT | |
| small_caps | No | Whether to apply small caps | |
| format_as_markdown | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| user_google_email | Yes | The user's Google email address (authenticated account). | |
| message_id | Yes | Gmail message ID from search_gmail_messages. | |
| add_label_ids | No | Label 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_ids | No | Label IDs to remove, same ID rules as above. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| user_google_email | Yes | The user's Google email address (authenticated account). | |
| spreadsheet_id | Yes | Spreadsheet ID. | |
| range_name | Yes | A1 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. | |
| values | No | 2D array of row arrays (e.g. [["a", "b"], ["c", "d"]]), or a JSON string. Required unless clear_values=True. | |
| value_input_option | No | "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_values | No | True clears the range instead of writing. Ignores `values`. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| user_google_email | Yes | ||
| spreadsheet_id | Yes | Google Sheets spreadsheet ID (from the URL after `/d/`). | |
| range_name | Yes | A1-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`). | |
| description | No | Human-readable note shown in the Protected ranges sidebar (e.g., "Formulas โ do not edit"). Omit for no description. | |
| editor_emails | No | List 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_only | No | When `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
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| user_google_email | Yes | The user's Google email address (authenticated account). | |
| time_min | Yes | Interval start, RFC3339 ("2026-05-12T10:00:00Z" or "2026-05-12"). | |
| time_max | Yes | Interval end, RFC3339. | |
| calendar_ids | No | Calendars to query (primary calendar, room resource IDs, or colleague emails if you have access). Defaults to ["primary"]. | |
| group_expansion_max | No | Cap on members expanded from a Google group identifier, up to 100. | |
| calendar_expansion_max | No | Cap on calendars returned, up to 50. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| user_google_email | Yes | The user's Google email address (authenticated account). | |
| spreadsheet_id | Yes | Spreadsheet ID from list_spreadsheets. | |
| range_name | No | A1 notation, e.g. "Sheet1!A1:D10", "A:D", or unqualified "A1:D10" (first sheet). Default "A1:Z1000". | A1:Z1000 |
| include_hyperlinks | No | True adds a hyperlink-metadata section for cells containing URLs. Triggers an includeGridData request โ more expensive. | |
| include_notes | No | True adds a cell-notes section. Same cost caveat as include_hyperlinks. | |
| include_formulas | No | True fetches raw formula strings (=SUM(...), etc.) alongside displayed values โ useful before writing back to avoid clobbering cross-sheet references. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| user_google_email | Yes | ||
| presentation_id | Yes | Google Slides presentation ID (from the URL after `/d/`). | |
| slide_object_ids | Yes | List 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_index | Yes | 0-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
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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).
| Name | Required | Description | Default |
|---|---|---|---|
| user_google_email | Yes | ||
| presentation_id | Yes | Google Slides presentation ID (from the URL after `/d/`). | |
| find_text | Yes | Literal 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_text | Yes | Text to substitute for each occurrence. Can be empty to effectively delete matches. | |
| match_case | No | When `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
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| user_google_email | Yes | The user's Google email address. Required. | |
| spreadsheet_id | Yes | The ID of the spreadsheet. Required. | |
| sheet_name | No | Sheet name to target. Defaults to the first sheet if not provided. | |
| column_sizes | No | Dict mapping column letters to pixel widths. Example: {"A": 200, "C": 300}. Can be a JSON string or Python dict. | |
| row_sizes | No | Dict mapping 1-based row numbers to pixel heights. Example: {"1": 40, "3": 60}. Can be a JSON string or Python dict. | |
| auto_resize_columns | No | List of column letters to auto-resize to fit content. Example: ["A", "B"]. | |
| auto_resize_rows | No | List of 1-based row numbers to auto-resize to fit content. Example: [1, 2]. | |
| frozen_row_count | No | Number of rows to freeze from the top. Use 0 to unfreeze all rows. | |
| frozen_column_count | No | Number of columns to freeze from the left. Use 0 to unfreeze all columns. | |
| hide_columns | No | List of column letters to hide. Example: ["C", "D"]. | |
| unhide_columns | No | List of column letters to unhide. Example: ["C", "D"]. | |
| hide_rows | No | List of 1-based row numbers to hide. Example: [3, 4]. | |
| unhide_rows | No | List of 1-based row numbers to unhide. Example: [3, 4]. | |
| insert_rows | No | Number of rows to insert. | |
| insert_rows_at | No | 1-based row number to insert before. Appends to the end of the sheet if omitted. | |
| insert_columns | No | Number of columns to insert. | |
| insert_columns_at | No | Column letter to insert before (e.g. "C"). Appends to the end if omitted. | |
| delete_rows | No | List of 1-based row numbers to delete. Example: [5, 6]. | |
| delete_columns | No | List of column letters to delete. Example: ["E", "F"]. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| user_google_email | Yes | ||
| file_id | Yes | Drive 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_id | Yes | ID 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
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| user_google_email | Yes | The user's Google email address (authenticated account). | |
| script_id | Yes | Target project ID (must have an API-executable deployment). | |
| function_name | Yes | Name of the top-level function to invoke (e.g. "doWork"). Private/internal helpers cannot be called. | |
| parameters | No | Optional positional arguments to pass to the function. Must be JSON-serializable primitives or arrays. | |
| dev_mode | No | True runs the latest saved code (owner only); False (default) runs the deployed version. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| user_google_email | Yes | The user's Google email address (authenticated account). | |
| query | Yes | Free text substring. Matches names, email addresses, and phone numbers. | |
| page_size | No | Max results. 1-30. Default 30 (API cap). |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| user_google_email | Yes | The user's Google email address. Required. | |
| q | Yes | The search query. Required. | |
| num | No | Number of results to return (1-10). Defaults to 10. | |
| start | No | The index of the first result to return (1-based). Defaults to 1. | |
| safe | No | Safe search level. Defaults to "off". | off |
| search_type | No | Search for images if set to "image". | |
| site_search | No | Restrict search to a specific site/domain. | |
| site_search_filter | No | Exclude ("e") or include ("i") site_search results. | |
| date_restrict | No | Restrict results by date (e.g., "d5" for past 5 days, "m3" for past 3 months). | |
| file_type | No | Filter by file type (e.g., "pdf", "doc"). | |
| language | No | Language code for results (e.g., "lang_en"). | |
| country | No | Country code for results (e.g., "countryUS"). | |
| sites | No | List of sites/domains to restrict search to (e.g., ["example.com", "docs.example.com"]). When provided, results are limited to these sites. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| user_google_email | Yes | The user's Google email address. Required. | |
| query | Yes | Case-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_size | No | Maximum 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
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| user_google_email | Yes | The user's Google email address (authenticated account). | |
| query | Yes | Free 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_size | No | Max files returned, 1-1000. Default 10. | |
| page_token | No | Cursor from a prior response's `nextPageToken`. | |
| drive_id | No | Shared drive ID to restrict the search. Omit for My Drive + shared-with-me. | |
| include_items_from_all_drives | No | True (default) to include shared drive items when drive_id is omitted. | |
| corpora | No | Scope โ "user", "domain", "drive", or "allDrives". Defaults to "drive" when drive_id is set. Prefer "user" or "drive" over "allDrives" for performance. | |
| file_type | No | Friendly alias ("folder", "doc", "sheet", "slides", "form", "drawing", "pdf", "shortcut", "script", "site", "jamboard") or raw MIME type ("application/pdf"). Adds a mimeType filter. | |
| detailed | No | True (default) includes size, modified time, webViewLink per file; False returns just name/ID/type. | |
| order_by | No | Comma-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
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | Gmail search operators, e.g. "from:alice@ex.com has:attachment newer_than:7d label:INBOX -category:promotions". | |
| user_google_email | Yes | The user's Google email address (authenticated account). | |
| page_size | No | Max results per page, 1-500. Default 10. | |
| page_token | No | Pagination cursor โ pass the next_page_token value returned by a previous call to fetch the next page. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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).
| Name | Required | Description | Default |
|---|---|---|---|
| user_google_email | Yes | The user's Google email address (authenticated account). | |
| query | No | Case-insensitive substring to match in message text. Omit to return messages by time only. | |
| space_id | No | Restrict search to one space ("spaces/<id>"). Omit to search across accessible spaces (capped by max_spaces). | |
| page_size | No | Max messages fetched per space. Default 25. | |
| time_filter | No | Chat API createTime expression, e.g. 'createTime > "2026-03-18T00:00:00Z"' or a range joined with AND. Applied server-side. | |
| max_spaces | No | When space_id is omitted, cap on how many spaces are scanned. Default 10. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| user_google_email | Yes | The user's Google email address. Required for authentication. | |
| to | Yes | Recipient email address. | |
| subject | Yes | Email subject. | |
| body | Yes | Email body content (plain text or HTML). | |
| body_format | No | Email body format. Use 'plain' for plaintext or 'html' for HTML content. | plain |
| cc | No | Optional CC email address. | |
| bcc | No | Optional BCC email address. | |
| from_name | No | Optional sender display name (e.g., 'Peter Hartree'). If provided, the From header will be formatted as 'Name <email>'. | |
| from_email | No | Optional '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_id | No | Optional Gmail thread ID to reply within. | |
| in_reply_to | No | Optional RFC Message-ID of the message being replied to (e.g., '<message123@gmail.com>'). | |
| references | No | Optional chain of Message-IDs for proper threading. | |
| attachments | No | Optional 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
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| user_google_email | Yes | The user's Google email address (authenticated account). | |
| space_id | Yes | Target space resource name ("spaces/<id>") from list_spaces. | |
| message_text | Yes | Plain text body. Supports Chat markdown (e.g. *bold*, _italic_, `code`). | |
| thread_key | No | App-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_name | No | Resource 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
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| user_google_email | Yes | The user's Google email address (authenticated account). | |
| file_id | Yes | Drive file or folder ID. | |
| link_sharing | No | "off" removes anyone-with-link access; "reader", "commenter", or "writer" sets the link role. Omit to leave link sharing unchanged. | |
| writers_can_share | No | True lets editors re-share; False restricts sharing to owner only. | |
| copy_requires_writer_permission | No | True blocks viewers/commenters from copy/print/download; False allows. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| user_google_email | Yes | The user's Google email address (authenticated account). | |
| form_id | Yes | Form ID from the edit URL after /forms/d/. | |
| publish_as_template | No | True lists the form as a template in the Workspace template gallery. Default False. | |
| require_authentication | No | True requires respondents to sign in with a Google account to view/submit (their email is captured). False allows anonymous access. Default False. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| user_google_email | Yes | ||
| presentation_id | Yes | Google Slides presentation ID (from the URL after `/d/`). | |
| page_object_id | Yes | Object ID of the slide whose background to change. Get it from `get_presentation.slides[].objectId`. Must reference a slide page (not a master/layout). | |
| color | Yes | Hex color for the background, e.g., `#F5F5F5` or `F5F5F5`. Accepts `#RRGGBB` or `RRGGBB`. | |
| alpha | No | Opacity of the background fill, 0.0 (transparent) to 1.0 (opaque). Default `1.0`. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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:
You need to re-authenticate with different credentials
You want to proactively authenticate before using other tools
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.
| Name | Required | Description | Default |
|---|---|---|---|
| service_name | Yes | ||
| user_google_email | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| user_google_email | Yes | ||
| presentation_id | Yes | Google Slides presentation ID (from the URL after `/d/`). | |
| page_element_id | Yes | Object 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_color | No | Hex color for the shape interior, e.g., `#FFCC00` or `FFCC00`. Omit to leave existing fill unchanged. | |
| fill_alpha | No | Opacity of the fill, 0.0 (transparent) to 1.0 (opaque). Default `1.0`. Only meaningful when `fill_color` is also set. | |
| outline_color | No | Hex color for the shape's outline/border, e.g., `#000000`. Omit to leave outline color unchanged. | |
| outline_weight | No | Outline thickness in points (e.g., `1.5`, `3`, `6`). Omit to leave outline weight unchanged. | |
| outline_dash_style | No | Line style for the outline. One of `SOLID`, `DASH`, `DOT`, `DASH_DOT`, `LONG_DASH`, `LONG_DASH_DOT`. Omit to leave unchanged. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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_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.
| Name | Required | Description | Default |
|---|---|---|---|
| user_google_email | Yes | The user's Google email address (authenticated account). | |
| document_id | Yes | Target document ID. | |
| tab_id | Yes | Tab ID from list_doc_tabs. | |
| title | Yes | New display title. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| user_google_email | Yes | The user's Google email address (authenticated account). | |
| file_id | Yes | Drive file ID to update. | |
| name | No | New display name. | |
| description | No | New description text. | |
| mime_type | No | New MIME type (changing this rarely works without also uploading matching content). | |
| add_parents | No | Comma-separated folder IDs to add the file into (effectively moves when combined with remove_parents). | |
| remove_parents | No | Comma-separated folder IDs to detach from. | |
| starred | No | True to star, False to unstar. | |
| trashed | No | True moves to Trash (soft-delete), False restores. | |
| writers_can_share | No | Whether editors may re-share the file. | |
| copy_requires_writer_permission | No | When True, copies require writer access (reader copy/export blocked). | |
| properties | No | Dict of user-visible custom key-value pairs attached to the file. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| user_google_email | Yes | User's Google email address | |
| document_id | Yes | Document ID to modify | |
| start_index | Yes | Start 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_index | Yes | End position (exclusive) - should cover the entire paragraph | |
| heading_level | No | Heading level 0-6 (0 = NORMAL_TEXT, 1 = H1, 2 = H2, etc.) Use for semantic document structure | |
| alignment | No | Text alignment - 'START' (left), 'CENTER', 'END' (right), or 'JUSTIFIED' | |
| line_spacing | No | Line spacing multiplier (1.0 = single, 1.5 = 1.5x, 2.0 = double) | |
| indent_first_line | No | First line indent in points (e.g., 36 for 0.5 inch) | |
| indent_start | No | Left/start indent in points | |
| indent_end | No | Right/end indent in points | |
| space_above | No | Space above paragraph in points (e.g., 12 for one line) | |
| space_below | No | Space below paragraph in points | |
| named_style_type | No | Direct named style type - 'NORMAL_TEXT', 'TITLE', 'SUBTITLE', 'HEADING_1' through 'HEADING_6'. Mutually exclusive with heading_level. | |
| tab_id | No | Optional document tab ID to target | |
| segment_id | No | Optional header/footer/footnote segment ID to target | |
| direction | No | Paragraph direction - 'LEFT_TO_RIGHT' or 'RIGHT_TO_LEFT' | |
| keep_lines_together | No | Keep all lines of the paragraph together | |
| keep_with_next | No | Keep the paragraph with the next paragraph | |
| avoid_widow_and_orphan | No | Avoid widows/orphans for the paragraph | |
| page_break_before | No | Start the paragraph on a new page | |
| spacing_mode | No | 'NEVER_COLLAPSE' or 'COLLAPSE_LISTS' | |
| shading_color | No | Paragraph shading/background color (#RRGGBB) | |
| list_type | No | Create a list from existing paragraphs ('UNORDERED' for bullets, 'ORDERED' for numbers, 'CHECKBOX' for checklists) | |
| list_nesting_level | No | Nesting level for lists (0-8, where 0 is top level, default is 0) Use higher levels for nested/indented list items | |
| bullet_preset | No | Optional explicit Google Docs bullet preset |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| user_google_email | Yes | The user's Google email address (authenticated account). | |
| script_id | Yes | Target project ID. | |
| files | Yes | Complete 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
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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).
| Name | Required | Description | Default |
|---|---|---|---|
| user_google_email | Yes | ||
| presentation_id | Yes | Google Slides presentation ID (from the URL after `/d/`). | |
| page_object_id | Yes | Object 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. | |
| notes | Yes | New 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
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
119 tool updates
v1.0.0- Changed
add_sheet_data_validation9 fields changed- changed
Input schema / properties / custom_formula / descriptionPrevious 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+$\")\"." - changed
Input schema / properties / input_message / descriptionPrevious value: -"Optional help text shown on hover."New value: +"Optional help text shown when the cell is\nfocused." - changed
Input schema / properties / range_name / descriptionPrevious value: -"A1 range (e.g., \"Sheet1!A1:A10\" or \"A1:A10\")."New value: +"A1 range, e.g. \"Sheet1!A1:A10\" or \"A1:A10\"." - changed
Input schema / properties / show_dropdown / descriptionPrevious 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." - changed
Input schema / properties / spreadsheet_id / descriptionPrevious value: -"ID of the spreadsheet."New value: +"Target spreadsheet ID." - changed
Input schema / properties / strict / descriptionPrevious 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." - added
Input schema / properties / user_google_email / descriptionAdded value: +"The user's Google email address (authenticated\naccount)." - changed
Input schema / properties / validation_type / descriptionPrevious 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." - changed
Input schema / properties / values / descriptionPrevious 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."
- Changed
add_sheet_named_range3 fields changed- changed
Input schema / properties / name / descriptionPrevious 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`." - changed
Input schema / properties / range_name / descriptionPrevious 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\"`." - added
Input schema / properties / spreadsheet_id / descriptionAdded value: +"Google Sheets spreadsheet ID (from the URL after `/d/`)."
- Changed
append_table_rows4 fields changed- changed
Input schema / properties / spreadsheet_id / descriptionPrevious value: -"The ID of the spreadsheet. Required."New value: +"Target spreadsheet ID." - changed
Input schema / properties / table_id / descriptionPrevious 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)." - changed
Input schema / properties / user_google_email / descriptionPrevious value: -"The user's Google email address. Required."New value: +"The user's Google email address (authenticated\naccount)." - changed
Input schema / properties / values / descriptionPrevious 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."
- Changed
batch_modify_gmail_message_labels4 fields changed- changed
Input schema / properties / add_label_ids / descriptionPrevious 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." - changed
Input schema / properties / message_ids / descriptionPrevious value: -"A list of message IDs to modify."New value: +"Gmail message IDs from search_gmail_messages." - changed
Input schema / properties / remove_label_ids / descriptionPrevious value: -"List of label IDs to remove from the messages."New value: +"Label IDs to remove across all messages." - changed
Input schema / properties / user_google_email / descriptionPrevious value: -"The user's Google email address. Required."New value: +"The user's Google email address (authenticated\naccount)."
- Changed
batch_update_form3 fields changed- changed
Input schema / properties / form_id / descriptionPrevious value: -"The ID of the form to update."New value: +"Form ID from the edit URL." - changed
Input schema / properties / requests / descriptionPrevious 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." - changed
Input schema / properties / user_google_email / descriptionPrevious value: -"The user's Google email address. Required."New value: +"The user's Google email address (authenticated\naccount)."
- Changed
batch_update_presentation3 fields changed- changed
Input schema / properties / presentation_id / descriptionPrevious value: -"The ID of the presentation to update."New value: +"Target presentation ID." - changed
Input schema / properties / requests / descriptionPrevious 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." - changed
Input schema / properties / user_google_email / descriptionPrevious value: -"The user's Google email address. Required."New value: +"The user's Google email address (authenticated\naccount)."
- Changed
check_drive_file_public_access2 fields changed- changed
Input schema / properties / file_name / descriptionPrevious value: -"The name of the file to check."New value: +"Exact display name (case-sensitive) as shown in Drive." - changed
Input schema / properties / user_google_email / descriptionPrevious value: -"The user's Google email address. Required."New value: +"The user's Google email address (authenticated\naccount)."
- Changed
copy_drive_file4 fields changed- changed
Input schema / properties / file_id / descriptionPrevious value: -"The ID of the file to copy. Required."New value: +"Drive file ID of the source." - changed
Input schema / properties / new_name / descriptionPrevious 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>\"." - changed
Input schema / properties / parent_folder_id / descriptionPrevious 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." - changed
Input schema / properties / user_google_email / descriptionPrevious value: -"The user's Google email address. Required."New value: +"The user's Google email address (authenticated\naccount)."
- Changed
create_calendar4 fields changed- changed
Input schema / properties / description / descriptionPrevious value: -"An optional description for the calendar."New value: +"Optional longer description shown in calendar\nsettings." - changed
Input schema / properties / summary / descriptionPrevious value: -"The title/name of the new calendar."New value: +"Calendar display name, e.g. \"Client Meetings\" or\n\"Personal - Fitness\"." - changed
Input schema / properties / timezone / descriptionPrevious 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." - changed
Input schema / properties / user_google_email / descriptionPrevious value: -"The user's Google email address. Required."New value: +"The user's Google email address (authenticated\naccount)."
- Changed
create_drive_file6 fields changed- changed
Input schema / properties / content / descriptionPrevious 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." - changed
Input schema / properties / fileUrl / descriptionPrevious 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." - changed
Input schema / properties / file_name / descriptionPrevious 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)." - changed
Input schema / properties / folder_id / descriptionPrevious 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\"." - changed
Input schema / properties / mime_type / descriptionPrevious 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." - changed
Input schema / properties / user_google_email / descriptionPrevious value: -"The user's Google email address. Required."New value: +"The user's Google email address (authenticated\naccount)."
- Changed
create_drive_folder3 fields changed- changed
Input schema / properties / folder_name / descriptionPrevious value: -"The name for the new folder."New value: +"Display name for the new folder. Forward slashes are\ntreated as literal characters, not nesting." - changed
Input schema / properties / parent_folder_id / descriptionPrevious 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." - changed
Input schema / properties / user_google_email / descriptionPrevious value: -"The user's Google email address. Required."New value: +"The user's Google email address (authenticated\naccount)."
- Changed
create_form4 fields changed- changed
Input schema / properties / description / descriptionPrevious value: -"The description of the form."New value: +"Optional subtitle text shown under the title." - changed
Input schema / properties / document_title / descriptionPrevious value: -"The document title (shown in browser tab)."New value: +"Optional browser-tab/Drive title. Defaults to\nthe form's `title` if omitted." - changed
Input schema / properties / title / descriptionPrevious value: -"The title of the form."New value: +"Form title shown at the top of the form to respondents." - changed
Input schema / properties / user_google_email / descriptionPrevious value: -"The user's Google email address. Required."New value: +"The user's Google email address (authenticated\naccount)."
- Changed
create_presentation2 fields changed- changed
Input schema / properties / title / descriptionPrevious value: -"The title for the new presentation. Defaults to \"Untitled Presentation\"."New value: +"Display title for the new deck. Default \"Untitled\nPresentation\"." - changed
Input schema / properties / user_google_email / descriptionPrevious value: -"The user's Google email address. Required."New value: +"The user's Google email address (authenticated\naccount)."
- Changed
create_reaction3 fields changed- changed
Input schema / properties / emoji_unicode / descriptionPrevious 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." - changed
Input schema / properties / message_id / descriptionPrevious 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." - added
Input schema / properties / user_google_email / descriptionAdded value: +"The user's Google email address (authenticated\naccount)."
- Changed
create_script_project3 fields changed- changed
Input schema / properties / parent_id / descriptionPrevious 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." - changed
Input schema / properties / title / descriptionPrevious value: -"Project title"New value: +"Display title for the new project." - changed
Input schema / properties / user_google_email / descriptionPrevious value: -"User's email address"New value: +"The user's Google email address (authenticated\naccount)."
- Changed
create_sheet3 fields changed- changed
Input schema / properties / sheet_name / descriptionPrevious value: -"The name of the new sheet. Required."New value: +"Display name for the new tab. Must be unique within\nthe spreadsheet." - changed
Input schema / properties / spreadsheet_id / descriptionPrevious value: -"The ID of the spreadsheet. Required."New value: +"Target spreadsheet ID." - changed
Input schema / properties / user_google_email / descriptionPrevious value: -"The user's Google email address. Required."New value: +"The user's Google email address (authenticated\naccount)."
- Changed
create_slides_shape8 fields changed- changed
Input schema / properties / fill_color / descriptionPrevious 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)." - added
Input schema / properties / height / descriptionAdded value: +"Shape height in EMUs. Default `2000000` โ 2.19 inches." - added
Input schema / properties / left / descriptionAdded 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." - added
Input schema / properties / page_object_id / descriptionAdded value: +"Object ID of the slide where the shape will be placed.\nGet it from `get_presentation.slides[].objectId` or `get_page`." - added
Input schema / properties / presentation_id / descriptionAdded value: +"Google Slides presentation ID (from the URL after `/d/`)." - changed
Input schema / properties / shape_type / descriptionPrevious 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" - added
Input schema / properties / top / descriptionAdded value: +"Y position (top-left corner) in EMUs. Default `914400` = 1 inch down." - added
Input schema / properties / width / descriptionAdded value: +"Shape width in EMUs. Default `2000000` โ 2.19 inches."
- Changed
create_slides_text_box11 fields changed- added
Input schema / properties / bold / descriptionAdded value: +"True to bold the initial text." - added
Input schema / properties / font_size / descriptionAdded value: +"Font size in points for the initial text." - added
Input schema / properties / height / descriptionAdded value: +"Box height in EMU. Default 1000000 (โ1.09 in)." - added
Input schema / properties / italic / descriptionAdded value: +"True to italicize the initial text." - added
Input schema / properties / left / descriptionAdded value: +"X offset from slide's left edge in EMU. Default 914400\n(1 in)." - changed
Input schema / properties / page_object_id / descriptionPrevious 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)." - added
Input schema / properties / presentation_id / descriptionAdded value: +"Target presentation ID." - changed
Input schema / properties / text / descriptionPrevious value: -"Initial text content."New value: +"Initial text content for the box." - added
Input schema / properties / top / descriptionAdded value: +"Y offset from top in EMU. Default 914400 (1 in)." - added
Input schema / properties / user_google_email / descriptionAdded value: +"The user's Google email address (authenticated\naccount)." - added
Input schema / properties / width / descriptionAdded value: +"Box width in EMU. Default 3000000 (โ3.28 in)."
- Changed
create_spreadsheet3 fields changed- changed
Input schema / properties / sheet_names / descriptionPrevious 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\"]." - changed
Input schema / properties / title / descriptionPrevious value: -"The title of the new spreadsheet. Required."New value: +"Display title for the new spreadsheet." - changed
Input schema / properties / user_google_email / descriptionPrevious value: -"The user's Google email address. Required."New value: +"The user's Google email address (authenticated\naccount)."
- Changed
create_version3 fields changed- changed
Input schema / properties / description / descriptionPrevious value: -"Optional description for this version"New value: +"Optional version note (e.g. release notes, ticket\nnumber)." - changed
Input schema / properties / script_id / descriptionPrevious value: -"The script project ID"New value: +"Target project ID." - changed
Input schema / properties / user_google_email / descriptionPrevious value: -"User's email address"New value: +"The user's Google email address (authenticated\naccount)."
- Changed
delete_doc_tab3 fields changed- changed
Input schema / properties / document_id / descriptionPrevious value: -"ID of the document to update"New value: +"Target document ID." - changed
Input schema / properties / tab_id / descriptionPrevious 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." - changed
Input schema / properties / user_google_email / descriptionPrevious value: -"User's Google email address"New value: +"The user's Google email address (authenticated\naccount)."
- Changed
delete_script_project2 fields changed- changed
Input schema / properties / script_id / descriptionPrevious value: -"The script project ID to delete"New value: +"Target Apps Script project ID (same as the Drive\nfile ID)." - changed
Input schema / properties / user_google_email / descriptionPrevious value: -"User's email address"New value: +"The user's Google email address (authenticated\naccount)."
- Changed
delete_slides_element2 fields changed- changed
Input schema / properties / object_id / descriptionPrevious 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." - added
Input schema / properties / presentation_id / descriptionAdded value: +"Google Slides presentation ID (from the URL after `/d/`)."
- Changed
download_chat_attachment3 fields changed- changed
Input schema / properties / attachment_index / descriptionPrevious 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)." - changed
Input schema / properties / message_id / descriptionPrevious value: -"The message resource name (e.g. spaces/X/messages/Y)."New value: +"Message resource name\n(\"spaces/<space>/messages/<msg>\") from get_messages." - added
Input schema / properties / user_google_email / descriptionAdded value: +"The user's Google email address (authenticated\naccount)."
- Changed
duplicate_slide2 fields changed- changed
Input schema / properties / page_object_id / descriptionPrevious 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." - added
Input schema / properties / presentation_id / descriptionAdded value: +"Google Slides presentation ID (from the URL after `/d/`)."
- Changed
export_doc_to_pdf4 fields changed- changed
Input schema / properties / document_id / descriptionPrevious value: -"ID of the Google Doc to export"New value: +"Google Doc ID (must be a native Doc โ .docx stored\nin Drive is rejected)." - changed
Input schema / properties / folder_id / descriptionPrevious 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." - changed
Input schema / properties / pdf_filename / descriptionPrevious 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." - changed
Input schema / properties / user_google_email / descriptionPrevious value: -"User's Google email address"New value: +"The user's Google email address (authenticated\naccount)."
- Changed
format_all_slides_text10 fields changed- added
Input schema / properties / bold / descriptionAdded value: +"True to bold, False to unbold, None to leave unchanged." - changed
Input schema / properties / font_family / descriptionPrevious value: -"Optional font family (e.g., \"Arial\")."New value: +"Font family name, e.g. \"Arial\"." - changed
Input schema / properties / font_size / descriptionPrevious value: -"Optional size in points."New value: +"Font size in points." - added
Input schema / properties / italic / descriptionAdded value: +"Same semantics as bold." - changed
Input schema / properties / page_object_id / descriptionPrevious 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." - changed
Input schema / properties / presentation_id / descriptionPrevious value: -"ID of the presentation."New value: +"Target presentation ID." - added
Input schema / properties / strikethrough / descriptionAdded value: +"Same semantics as bold." - changed
Input schema / properties / text_color / descriptionPrevious value: -"Optional hex color (e.g., \"#333333\")."New value: +"Hex color like \"#333333\"." - added
Input schema / properties / underline / descriptionAdded value: +"Same semantics as bold." - added
Input schema / properties / user_google_email / descriptionAdded value: +"The user's Google email address (authenticated\naccount)."
- Changed
format_slides_paragraph9 fields changed- changed
Input schema / properties / alignment / descriptionPrevious 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." - changed
Input schema / properties / bullet_preset / descriptionPrevious 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." - added
Input schema / properties / end_index / descriptionAdded value: +"Optional 0-based character offset (exclusive) where\nformatting ends. Must be greater than start_index if both provided." - changed
Input schema / properties / line_spacing / descriptionPrevious 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." - added
Input schema / properties / page_element_id / descriptionAdded 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." - added
Input schema / properties / presentation_id / descriptionAdded value: +"Google Slides presentation ID (from the URL after `/d/`)." - added
Input schema / properties / space_above / descriptionAdded value: +"Points of space above each paragraph (e.g., `12` for\n~12pt gap). Omit to leave unchanged." - added
Input schema / properties / space_below / descriptionAdded value: +"Points of space below each paragraph. Omit to leave unchanged." - added
Input schema / properties / start_index / descriptionAdded 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."
- Changed
format_slides_text12 fields changed- added
Input schema / properties / bold / descriptionAdded value: +"True to bold, False to unbold, None to leave unchanged." - added
Input schema / properties / end_index / descriptionAdded value: +"0-based character offset (exclusive) where\nformatting ends." - changed
Input schema / properties / font_family / descriptionPrevious value: -"Optional font family name (e.g., \"Arial\")."New value: +"Font family name, e.g. \"Arial\", \"Roboto\",\n\"Helvetica Neue\"." - changed
Input schema / properties / font_size / descriptionPrevious value: -"Optional font size in points."New value: +"Font size in points, e.g. 14 or 24.5." - added
Input schema / properties / italic / descriptionAdded value: +"Same semantics as bold for italic." - changed
Input schema / properties / page_element_id / descriptionPrevious 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." - changed
Input schema / properties / presentation_id / descriptionPrevious value: -"ID of the presentation."New value: +"Parent presentation ID (from the URL after /d/)." - added
Input schema / properties / start_index / descriptionAdded value: +"0-based character offset where formatting begins.\nOmit both indices to format ALL text in the element." - added
Input schema / properties / strikethrough / descriptionAdded value: +"Same semantics as bold for strikethrough." - changed
Input schema / properties / text_color / descriptionPrevious value: -"Optional hex color (e.g., \"#FF0000\")."New value: +"Hex color like \"#FF0000\" or \"#333333\"." - added
Input schema / properties / underline / descriptionAdded value: +"Same semantics as bold for underline." - changed
Input schema / properties / user_google_email / descriptionPrevious value: -"The user's Google email address. Required."New value: +"The user's Google email address (authenticated\naccount)."
- Changed
get_contact2 fields changed- changed
Input schema / properties / contact_id / descriptionPrevious 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." - changed
Input schema / properties / user_google_email / descriptionPrevious value: -"The user's Google email address. Required."New value: +"The user's Google email address (authenticated\naccount)."
- Changed
get_contact_group3 fields changed- changed
Input schema / properties / group_id / descriptionPrevious value: -"The contact group ID."New value: +"Group ID โ short (\"myContacts\"/\"starred\"/\"abc123\") or\nfull resource name (\"contactGroups/abc123\"). Auto-prefixed\nwhen short." - changed
Input schema / properties / max_members / descriptionPrevious value: -"Maximum number of members to return (default: 100, max: 1000)."New value: +"Max members to return. 1-1000. Default 100." - changed
Input schema / properties / user_google_email / descriptionPrevious value: -"The user's Google email address. Required."New value: +"The user's Google email address (authenticated\naccount)."
- Changed
get_doc_content3 fields changed- changed
Input schema / properties / document_id / descriptionPrevious 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)." - changed
Input schema / properties / suggestions_view_mode / descriptionPrevious 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)." - changed
Input schema / properties / user_google_email / descriptionPrevious value: -"User's Google email address"New value: +"The user's Google email address (authenticated\naccount)."
- Changed
get_doc_smart_chips1 field changed- changed
Input schema / properties / document_id / descriptionPrevious value: -"ID of the document."New value: +"Google Docs document ID (from the URL after `/document/d/`)."
- Changed
get_drive_file_content2 fields changed- changed
Input schema / properties / file_id / descriptionPrevious 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." - changed
Input schema / properties / user_google_email / descriptionPrevious value: -"The userโs Google email address."New value: +"The user's Google email address (authenticated\naccount)."
- Changed
get_drive_file_download_url3 fields changed- changed
Input schema / properties / export_format / descriptionPrevious 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." - changed
Input schema / properties / file_id / descriptionPrevious 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." - changed
Input schema / properties / user_google_email / descriptionPrevious value: -"The user's Google email address. Required."New value: +"The user's Google email address (authenticated\naccount)."
- Changed
get_drive_file_permissions2 fields changed- changed
Input schema / properties / file_id / descriptionPrevious value: -"The ID of the file to check permissions for."New value: +"Drive file ID from search_drive_files or a shareable\nURL." - changed
Input schema / properties / user_google_email / descriptionPrevious value: -"The user's Google email address. Required."New value: +"The user's Google email address (authenticated\naccount)."
- Changed
get_drive_revisions2 fields changed- changed
Input schema / properties / file_id / descriptionPrevious 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`)." - changed
Input schema / properties / page_size / descriptionPrevious 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."
- Changed
get_drive_shareable_link2 fields changed- changed
Input schema / properties / file_id / descriptionPrevious value: -"The ID of the file or folder to get the shareable link for. Required."New value: +"Drive file or folder ID." - changed
Input schema / properties / user_google_email / descriptionPrevious value: -"The user's Google email address. Required."New value: +"The user's Google email address (authenticated\naccount)."
- Changed
get_events9 fields changed- changed
Input schema / properties / calendar_id / descriptionPrevious 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\"." - changed
Input schema / properties / detailed / descriptionPrevious 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." - changed
Input schema / properties / event_id / descriptionPrevious 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." - changed
Input schema / properties / include_attachments / descriptionPrevious 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." - changed
Input schema / properties / max_results / descriptionPrevious 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." - changed
Input schema / properties / query / descriptionPrevious 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." - changed
Input schema / properties / time_max / descriptionPrevious 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)." - changed
Input schema / properties / time_min / descriptionPrevious 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." - changed
Input schema / properties / user_google_email / descriptionPrevious value: -"The user's Google email address. Required."New value: +"The user's Google email address (authenticated\naccount)."
- Changed
get_form1 field changed- changed
Input schema / properties / form_id / descriptionPrevious 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."
- Changed
get_form_response2 fields changed- changed
Input schema / properties / form_id / descriptionPrevious value: -"The ID of the form."New value: +"The form ID โ the string after `/forms/d/` in the edit URL." - changed
Input schema / properties / response_id / descriptionPrevious 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."
- Changed
get_gmail_attachment_content3 fields changed- changed
Input schema / properties / attachment_id / descriptionPrevious 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." - changed
Input schema / properties / message_id / descriptionPrevious value: -"The ID of the Gmail message containing the attachment."New value: +"Gmail message ID that owns the attachment." - changed
Input schema / properties / user_google_email / descriptionPrevious value: -"The user's Google email address. Required."New value: +"The user's Google email address (authenticated\naccount)."
- Changed
get_gmail_message_content2 fields changed- changed
Input schema / properties / message_id / descriptionPrevious 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>." - changed
Input schema / properties / user_google_email / descriptionPrevious value: -"The user's Google email address. Required."New value: +"The user's Google email address (authenticated\naccount)."
- Changed
get_gmail_messages_content_batch3 fields changed- changed
Input schema / properties / format / descriptionPrevious value: -"Message format. \"full\" includes body, \"metadata\" only headers."New value: +"\"full\" (headers + body) or \"metadata\" (headers only, much\nfaster for listing triage)." - changed
Input schema / properties / message_ids / descriptionPrevious 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." - changed
Input schema / properties / user_google_email / descriptionPrevious value: -"The user's Google email address. Required."New value: +"The user's Google email address (authenticated\naccount)."
- Changed
get_gmail_thread_content2 fields changed- changed
Input schema / properties / thread_id / descriptionPrevious 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." - changed
Input schema / properties / user_google_email / descriptionPrevious value: -"The user's Google email address. Required."New value: +"The user's Google email address (authenticated\naccount)."
- Changed
get_gmail_threads_content_batch2 fields changed- changed
Input schema / properties / thread_ids / descriptionPrevious 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." - changed
Input schema / properties / user_google_email / descriptionPrevious value: -"The user's Google email address. Required."New value: +"The user's Google email address (authenticated\naccount)."
- Changed
get_messages5 fields changed- changed
Input schema / properties / message_filter / descriptionPrevious 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." - added
Input schema / properties / order_by / descriptionAdded value: +"\"createTime desc\" (default, newest first) or\n\"createTime\" (oldest first)." - added
Input schema / properties / page_size / descriptionAdded value: +"Max messages returned. Default 50." - added
Input schema / properties / space_id / descriptionAdded value: +"Space resource name from list_spaces, formatted as\n\"spaces/<id>\"." - added
Input schema / properties / user_google_email / descriptionAdded value: +"The user's Google email address (authenticated\naccount)."
- Changed
get_page3 fields changed- changed
Input schema / properties / page_object_id / descriptionPrevious value: -"The object ID of the page/slide to retrieve."New value: +"Slide objectId from get_presentation's\n`slides[].objectId` field." - changed
Input schema / properties / presentation_id / descriptionPrevious value: -"The ID of the presentation."New value: +"Parent presentation ID." - changed
Input schema / properties / user_google_email / descriptionPrevious value: -"The user's Google email address. Required."New value: +"The user's Google email address (authenticated\naccount)."
- Changed
get_page_thumbnail4 fields changed- changed
Input schema / properties / page_object_id / descriptionPrevious value: -"The object ID of the page/slide."New value: +"Slide objectId from get_presentation." - changed
Input schema / properties / presentation_id / descriptionPrevious value: -"The ID of the presentation."New value: +"Parent presentation ID." - changed
Input schema / properties / thumbnail_size / descriptionPrevious value: -"Size of thumbnail (\"LARGE\", \"MEDIUM\", \"SMALL\"). Defaults to \"MEDIUM\"."New value: +"\"LARGE\" (~1600px wide), \"MEDIUM\" (~800px, default),\nor \"SMALL\" (~200px)." - changed
Input schema / properties / user_google_email / descriptionPrevious value: -"The user's Google email address. Required."New value: +"The user's Google email address (authenticated\naccount)."
- Changed
get_presentation2 fields changed- changed
Input schema / properties / presentation_id / descriptionPrevious value: -"The ID of the presentation to retrieve."New value: +"Presentation ID from a URL like\ndocs.google.com/presentation/d/<id>/edit." - changed
Input schema / properties / user_google_email / descriptionPrevious value: -"The user's Google email address. Required."New value: +"The user's Google email address (authenticated\naccount)."
- Changed
get_script_content3 fields changed- changed
Input schema / properties / file_name / descriptionPrevious 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." - changed
Input schema / properties / script_id / descriptionPrevious value: -"The script project ID"New value: +"Apps Script project ID." - changed
Input schema / properties / user_google_email / descriptionPrevious value: -"User's email address"New value: +"The user's Google email address (authenticated\naccount)."
- Changed
get_script_metrics3 fields changed- changed
Input schema / properties / metrics_granularity / descriptionPrevious value: -"Granularity of metrics - \"DAILY\" or \"WEEKLY\""New value: +"\"DAILY\" (last 7 days) or \"WEEKLY\" (last 8\nweeks). Default \"DAILY\"." - changed
Input schema / properties / script_id / descriptionPrevious value: -"The script project ID"New value: +"Target project ID." - changed
Input schema / properties / user_google_email / descriptionPrevious value: -"User's email address"New value: +"The user's Google email address (authenticated\naccount)."
- Changed
get_script_project2 fields changed- changed
Input schema / properties / script_id / descriptionPrevious 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." - changed
Input schema / properties / user_google_email / descriptionPrevious value: -"User's email address"New value: +"The user's Google email address (authenticated\naccount)."
- Changed
get_slides_speaker_notes3 fields changed- changed
Input schema / properties / page_object_id / descriptionPrevious 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." - added
Input schema / properties / presentation_id / descriptionAdded value: +"Google Slides presentation ID (from the URL after `/d/`)." - changed
Input schema / properties / slide_index / descriptionPrevious 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."
- Changed
get_spreadsheet_info2 fields changed- changed
Input schema / properties / spreadsheet_id / descriptionPrevious 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." - changed
Input schema / properties / user_google_email / descriptionPrevious value: -"The user's Google email address. Required."New value: +"The user's Google email address (authenticated\naccount)."
- Changed
get_task3 fields changed- changed
Input schema / properties / task_id / descriptionPrevious value: -"The ID of the task to retrieve."New value: +"Task ID from list_tasks." - changed
Input schema / properties / task_list_id / descriptionPrevious value: -"The ID of the task list containing the task."New value: +"Parent task list ID from list_task_lists." - changed
Input schema / properties / user_google_email / descriptionPrevious value: -"The user's Google email address. Required."New value: +"The user's Google email address (authenticated\naccount)."
- Changed
get_task_list2 fields changed- changed
Input schema / properties / task_list_id / descriptionPrevious value: -"The ID of the task list to retrieve."New value: +"Task list ID from list_task_lists." - changed
Input schema / properties / user_google_email / descriptionPrevious value: -"The user's Google email address. Required."New value: +"The user's Google email address (authenticated\naccount)."
- Changed
get_version3 fields changed- changed
Input schema / properties / script_id / descriptionPrevious 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`." - changed
Input schema / properties / user_google_email / descriptionPrevious value: -"User's email address"New value: +"User's email address. Required." - changed
Input schema / properties / version_number / descriptionPrevious 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."
- Changed
import_to_google_doc7 fields changed- changed
Input schema / properties / content / descriptionPrevious 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." - changed
Input schema / properties / file_name / descriptionPrevious value: -"The name for the new Google Doc (extension will be ignored)."New value: +"Display name for the resulting Google Doc (extension\nis stripped)." - changed
Input schema / properties / file_path / descriptionPrevious 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." - changed
Input schema / properties / file_url / descriptionPrevious 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." - changed
Input schema / properties / folder_id / descriptionPrevious value: -"The ID of the parent folder. Defaults to 'root'."New value: +"Parent folder ID. Default \"root\"." - changed
Input schema / properties / source_format / descriptionPrevious 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." - changed
Input schema / properties / user_google_email / descriptionPrevious value: -"The user's Google email address. Required."New value: +"The user's Google email address (authenticated\naccount)."
- Changed
insert_doc_elements8 fields changed- changed
Input schema / properties / columns / descriptionPrevious value: -"Number of columns for table (required for table)"New value: +"Column count for a table. Required when\nelement_type=\"table\"." - changed
Input schema / properties / document_id / descriptionPrevious value: -"ID of the document to update"New value: +"Target document ID." - changed
Input schema / properties / element_type / descriptionPrevious value: -"Type of element to insert (\"table\", \"list\", \"page_break\")"New value: +"\"table\", \"list\", or \"page_break\"." - changed
Input schema / properties / index / descriptionPrevious 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." - changed
Input schema / properties / list_type / descriptionPrevious value: -"Type of list (\"UNORDERED\", \"ORDERED\") (required for list)"New value: +"\"UNORDERED\" (bullets) or \"ORDERED\" (numbered).\nRequired when element_type=\"list\"." - changed
Input schema / properties / rows / descriptionPrevious value: -"Number of rows for table (required for table)"New value: +"Row count for a table. Required when element_type=\"table\"." - changed
Input schema / properties / text / descriptionPrevious 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." - changed
Input schema / properties / user_google_email / descriptionPrevious value: -"User's Google email address"New value: +"The user's Google email address (authenticated\naccount)."
- Changed
insert_doc_file_chip6 fields changed- changed
Input schema / properties / display_text / descriptionPrevious 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)." - changed
Input schema / properties / document_id / descriptionPrevious value: -"ID of the document."New value: +"Target document ID." - changed
Input schema / properties / file_url / descriptionPrevious 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." - changed
Input schema / properties / index / descriptionPrevious value: -"Document index at which to insert."New value: +"1-based document index to insert at. Default 1." - changed
Input schema / properties / tab_id / descriptionPrevious value: -"Optional tab ID to scope the insertion to."New value: +"Tab ID from list_doc_tabs to scope to a specific tab." - added
Input schema / properties / user_google_email / descriptionAdded value: +"The user's Google email address (authenticated\naccount)."
- Changed
insert_doc_image6 fields changed- changed
Input schema / properties / document_id / descriptionPrevious value: -"ID of the document to update"New value: +"Target document ID." - changed
Input schema / properties / height / descriptionPrevious value: -"Image height in points (optional)"New value: +"Image height in points. 0 or omitted = auto-size." - changed
Input schema / properties / image_source / descriptionPrevious 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>." - changed
Input schema / properties / index / descriptionPrevious value: -"Position to insert image (0-based)"New value: +"0-based insertion index from inspect_doc_structure.\n0 auto-bumped to 1." - changed
Input schema / properties / user_google_email / descriptionPrevious value: -"User's Google email address"New value: +"The user's Google email address (authenticated\naccount)." - changed
Input schema / properties / width / descriptionPrevious value: -"Image width in points (optional)"New value: +"Image width in points. 0 or omitted = auto-size."
- Changed
insert_doc_link6 fields changed- changed
Input schema / properties / document_id / descriptionPrevious value: -"ID of the document."New value: +"Target document ID." - changed
Input schema / properties / index / descriptionPrevious 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." - changed
Input schema / properties / tab_id / descriptionPrevious value: -"Optional tab ID to scope the insertion to."New value: +"Tab ID from list_doc_tabs to target a specific tab." - changed
Input schema / properties / text / descriptionPrevious value: -"The visible text for the link."New value: +"Visible link text inserted into the document." - changed
Input schema / properties / url / descriptionPrevious value: -"The target URL (http/https/mailto supported)."New value: +"Target URL โ http://, https://, or mailto: schemes\nsupported." - added
Input schema / properties / user_google_email / descriptionAdded value: +"The user's Google email address (authenticated\naccount)."
- Changed
insert_doc_markdown7 fields changed- changed
Input schema / properties / document_id / descriptionPrevious value: -"ID of the document."New value: +"Target document ID." - changed
Input schema / properties / end_of_segment / descriptionPrevious 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." - changed
Input schema / properties / index / descriptionPrevious 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." - changed
Input schema / properties / markdown / descriptionPrevious value: -"Markdown content to insert."New value: +"Markdown source to insert." - changed
Input schema / properties / segment_id / descriptionPrevious value: -"Optional header/footer/footnote segment ID."New value: +"Header/footer/footnote segment ID from\ninspect_doc_structure (do not invent IDs)." - changed
Input schema / properties / tab_id / descriptionPrevious value: -"Optional tab ID to target a specific tab."New value: +"Tab ID from list_doc_tabs to target a specific tab." - added
Input schema / properties / user_google_email / descriptionAdded value: +"The user's Google email address (authenticated\naccount)."
- Changed
insert_doc_person_chip4 fields changed- changed
Input schema / properties / document_id / descriptionPrevious value: -"ID of the document."New value: +"Google Docs document ID (from the URL after `/document/d/`)." - changed
Input schema / properties / email / descriptionPrevious 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." - changed
Input schema / properties / index / descriptionPrevious 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." - changed
Input schema / properties / tab_id / descriptionPrevious 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."
- Changed
insert_doc_tab5 fields changed- changed
Input schema / properties / document_id / descriptionPrevious value: -"ID of the document to update"New value: +"Target document ID." - changed
Input schema / properties / index / descriptionPrevious 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." - changed
Input schema / properties / parent_tab_id / descriptionPrevious 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." - changed
Input schema / properties / title / descriptionPrevious value: -"Title of the new tab"New value: +"Display title of the new tab." - changed
Input schema / properties / user_google_email / descriptionPrevious value: -"User's Google email address"New value: +"The user's Google email address (authenticated\naccount)."
- Changed
insert_slides_image7 fields changed- added
Input schema / properties / height / descriptionAdded value: +"Image height in EMUs. Default `2000000` โ 2.19 inches." - changed
Input schema / properties / image_url / descriptionPrevious 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.)." - added
Input schema / properties / left / descriptionAdded 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." - added
Input schema / properties / page_object_id / descriptionAdded value: +"Object ID of the slide to place the image on. Get it\nfrom `get_presentation.slides[].objectId`." - added
Input schema / properties / presentation_id / descriptionAdded value: +"Google Slides presentation ID (from the URL after `/d/`)." - added
Input schema / properties / top / descriptionAdded value: +"Y position (top-left corner) in EMUs. Default `914400` = 1 inch down." - added
Input schema / properties / width / descriptionAdded 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."
- Changed
list_calendars1 field changed- changed
Input schema / properties / user_google_email / descriptionPrevious value: -"The user's Google email address. Required."New value: +"The user's Google email address (authenticated\naccount)."
- Changed
list_contact_groups3 fields changed- changed
Input schema / properties / page_size / descriptionPrevious value: -"Maximum number of groups to return (default: 100, max: 1000)."New value: +"Max groups per page. 1-1000. Default 100." - changed
Input schema / properties / page_token / descriptionPrevious value: -"Token for pagination."New value: +"Cursor from a prior response's \"Next page token\" line." - changed
Input schema / properties / user_google_email / descriptionPrevious value: -"The user's Google email address. Required."New value: +"The user's Google email address (authenticated\naccount)."
- Changed
list_contacts4 fields changed- changed
Input schema / properties / page_size / descriptionPrevious value: -"Maximum number of contacts to return (default: 100, max: 1000)."New value: +"Max contacts per page. 1-1000. Default 100." - changed
Input schema / properties / page_token / descriptionPrevious value: -"Token for pagination."New value: +"Cursor from a prior response's \"Next page token\"\nline. Omit for first page." - changed
Input schema / properties / sort_order / descriptionPrevious 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\"." - changed
Input schema / properties / user_google_email / descriptionPrevious value: -"The user's Google email address. Required."New value: +"The user's Google email address (authenticated\naccount)."
- Changed
list_deployments2 fields changed- changed
Input schema / properties / script_id / descriptionPrevious value: -"The script project ID"New value: +"Target project ID." - changed
Input schema / properties / user_google_email / descriptionPrevious value: -"User's email address"New value: +"The user's Google email address (authenticated\naccount)."
- Changed
list_doc_tabs1 field changed- changed
Input schema / properties / document_id / descriptionPrevious value: -"ID of the document."New value: +"Google Docs document ID (from the URL after `/document/d/`)."
- Changed
list_docs_in_folder3 fields changed- added
Input schema / properties / folder_id / descriptionAdded 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)." - added
Input schema / properties / page_size / descriptionAdded 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." - added
Input schema / properties / user_google_email / descriptionAdded value: +"The user's Google email address. Required."
- Changed
list_drive_items10 fields changed- changed
Input schema / properties / corpora / descriptionPrevious 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." - changed
Input schema / properties / detailed / descriptionPrevious 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." - changed
Input schema / properties / drive_id / descriptionPrevious 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." - changed
Input schema / properties / file_type / descriptionPrevious 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." - changed
Input schema / properties / folder_id / descriptionPrevious 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\"." - changed
Input schema / properties / include_items_from_all_drives / descriptionPrevious 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." - changed
Input schema / properties / order_by / descriptionPrevious 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." - changed
Input schema / properties / page_size / descriptionPrevious value: -"The maximum number of items to return. Defaults to 100."New value: +"Max items returned, 1-1000. Default 100." - changed
Input schema / properties / page_token / descriptionPrevious 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`." - changed
Input schema / properties / user_google_email / descriptionPrevious value: -"The user's Google email address. Required."New value: +"The user's Google email address (authenticated\naccount)."
- Changed
list_form_responses3 fields changed- changed
Input schema / properties / form_id / descriptionPrevious value: -"The ID of the form."New value: +"The form ID โ the string after `/forms/d/` in the edit URL." - changed
Input schema / properties / page_size / descriptionPrevious 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." - changed
Input schema / properties / page_token / descriptionPrevious 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."
- Changed
list_gmail_filters1 field changed- changed
Input schema / properties / user_google_email / descriptionPrevious value: -"The user's Google email address. Required."New value: +"The user's Google email address (authenticated\naccount)."
- Changed
list_gmail_labels1 field changed- changed
Input schema / properties / user_google_email / descriptionPrevious value: -"The user's Google email address. Required."New value: +"The user's Google email address (authenticated\naccount)."
- Changed
list_script_processes3 fields changed- changed
Input schema / properties / page_size / descriptionPrevious value: -"Number of results (default: 50)"New value: +"Max processes to return. Default 50." - changed
Input schema / properties / script_id / descriptionPrevious value: -"Optional filter by script ID"New value: +"Optional โ scope to a single project's executions.\nOmit for all accessible scripts." - changed
Input schema / properties / user_google_email / descriptionPrevious value: -"User's email address"New value: +"The user's Google email address (authenticated\naccount)."
- Changed
list_script_projects3 fields changed- changed
Input schema / properties / page_size / descriptionPrevious value: -"Number of results per page (default: 50)"New value: +"Max projects per page. Default 50; Drive cap 1000." - changed
Input schema / properties / page_token / descriptionPrevious value: -"Token for pagination (optional)"New value: +"Cursor from a prior response's pagination token." - changed
Input schema / properties / user_google_email / descriptionPrevious value: -"User's email address"New value: +"The user's Google email address (authenticated\naccount)."
- Changed
list_sheet_tables2 fields changed- changed
Input schema / properties / spreadsheet_id / descriptionPrevious value: -"The ID of the spreadsheet. Required."New value: +"Target spreadsheet ID." - changed
Input schema / properties / user_google_email / descriptionPrevious value: -"The user's Google email address. Required."New value: +"The user's Google email address (authenticated\naccount)."
- Changed
list_spaces3 fields changed- added
Input schema / properties / page_size / descriptionAdded 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." - added
Input schema / properties / space_type / descriptionAdded 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\"`." - added
Input schema / properties / user_google_email / descriptionAdded value: +"The user's Google email address. Required."
- Changed
list_spreadsheets2 fields changed- changed
Input schema / properties / max_results / descriptionPrevious value: -"Maximum number of spreadsheets to return. Defaults to 25."New value: +"Max spreadsheets to return. Default 25." - changed
Input schema / properties / user_google_email / descriptionPrevious value: -"The user's Google email address. Required."New value: +"The user's Google email address (authenticated\naccount)."
- Changed
list_task_lists3 fields changed- changed
Input schema / properties / max_results / descriptionPrevious value: -"Maximum number of task lists to return (default: 1000, max: 1000)."New value: +"Max lists per page. Default/cap 1000." - changed
Input schema / properties / page_token / descriptionPrevious value: -"Token for pagination."New value: +"Cursor from a prior response's \"Next page token\"\nline." - changed
Input schema / properties / user_google_email / descriptionPrevious value: -"The user's Google email address. Required."New value: +"The user's Google email address (authenticated\naccount)."
- Changed
list_tasks13 fields changed- changed
Input schema / properties / completed_max / descriptionPrevious value: -"Upper bound for completion date (RFC 3339 timestamp)."New value: +"RFC3339 upper bound on completion date." - changed
Input schema / properties / completed_min / descriptionPrevious value: -"Lower bound for completion date (RFC 3339 timestamp)."New value: +"RFC3339 lower bound on completion date." - changed
Input schema / properties / due_max / descriptionPrevious 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." - changed
Input schema / properties / due_min / descriptionPrevious value: -"Lower bound for due date (RFC 3339 timestamp)."New value: +"RFC3339 lower bound on due date." - changed
Input schema / properties / max_results / descriptionPrevious 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." - changed
Input schema / properties / page_token / descriptionPrevious value: -"Token for pagination."New value: +"Resume cursor from a prior call's \"Next page token\"." - changed
Input schema / properties / show_assigned / descriptionPrevious value: -"Whether to include assigned tasks (default: False)."New value: +"Include tasks assigned to the user. Default False." - changed
Input schema / properties / show_completed / descriptionPrevious 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." - changed
Input schema / properties / show_deleted / descriptionPrevious value: -"Whether to include deleted tasks (default: False)."New value: +"Include deleted tasks. Default False." - changed
Input schema / properties / show_hidden / descriptionPrevious 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." - changed
Input schema / properties / task_list_id / descriptionPrevious value: -"The ID of the task list to retrieve tasks from."New value: +"Task list ID from list_task_lists." - changed
Input schema / properties / updated_min / descriptionPrevious value: -"Lower bound for last modification time (RFC 3339 timestamp)."New value: +"RFC3339 lower bound on last-modified time โ useful\nfor incremental sync." - changed
Input schema / properties / user_google_email / descriptionPrevious value: -"The user's Google email address. Required."New value: +"The user's Google email address (authenticated\naccount)."
- Changed
list_versions2 fields changed- changed
Input schema / properties / script_id / descriptionPrevious value: -"The script project ID"New value: +"Target project ID." - changed
Input schema / properties / user_google_email / descriptionPrevious value: -"User's email address"New value: +"The user's Google email address (authenticated\naccount)."
- Changed
manage_contact_group7 fields changed- changed
Input schema / properties / action / descriptionPrevious value: -"The action to perform: \"create\", \"update\", \"delete\", or \"modify_members\"."New value: +"\"create\", \"update\", \"delete\", or \"modify_members\"." - changed
Input schema / properties / add_contact_ids / descriptionPrevious value: -"Contact IDs to add (for \"modify_members\")."New value: +"For modify_members โ contact IDs to add. Short\nor \"people/<id>\"; auto-prefixed." - changed
Input schema / properties / delete_contacts / descriptionPrevious 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." - changed
Input schema / properties / group_id / descriptionPrevious 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." - changed
Input schema / properties / name / descriptionPrevious value: -"The group name. Required for \"create\" and \"update\" actions."New value: +"New group display name. Required for create and update." - changed
Input schema / properties / remove_contact_ids / descriptionPrevious value: -"Contact IDs to remove (for \"modify_members\")."New value: +"For modify_members โ contact IDs to remove." - changed
Input schema / properties / user_google_email / descriptionPrevious value: -"The user's Google email address. Required."New value: +"The user's Google email address (authenticated\naccount)."
- Changed
manage_deployment6 fields changed- changed
Input schema / properties / action / descriptionPrevious value: -"Action to perform - \"create\", \"update\", or \"delete\""New value: +"\"create\", \"update\", or \"delete\"." - changed
Input schema / properties / deployment_id / descriptionPrevious value: -"The deployment ID (required for update and delete)"New value: +"Existing deployment ID. Required for update and\ndelete (get from list_deployments)." - changed
Input schema / properties / description / descriptionPrevious value: -"Deployment description (required for create and update)"New value: +"Deployment description shown in the Apps Script UI.\nRequired for create and update." - changed
Input schema / properties / script_id / descriptionPrevious value: -"The script project ID"New value: +"Target project ID." - changed
Input schema / properties / user_google_email / descriptionPrevious value: -"User's email address"New value: +"The user's Google email address (authenticated\naccount)." - changed
Input schema / properties / version_description / descriptionPrevious value: -"Optional version description (for create only)"New value: +"For create only โ description attached to\nthe auto-created version. Defaults to `description` when\nomitted."
- Changed
manage_drive_access14 fields changed- changed
Input schema / properties / action / descriptionPrevious 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\"." - changed
Input schema / properties / allow_file_discovery / descriptionPrevious 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." - changed
Input schema / properties / email_message / descriptionPrevious value: -"Custom notification email message.\nUsed by \"grant\" and \"grant_batch\"."New value: +"Custom body appended to the notification email." - changed
Input schema / properties / expiration_time / descriptionPrevious 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." - changed
Input schema / properties / file_id / descriptionPrevious value: -"The ID of the file or folder. Required."New value: +"Drive file or folder ID." - changed
Input schema / properties / move_to_new_owners_root / descriptionPrevious 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." - changed
Input schema / properties / new_owner_email / descriptionPrevious 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." - changed
Input schema / properties / permission_id / descriptionPrevious 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." - changed
Input schema / properties / recipients / descriptionPrevious 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." - changed
Input schema / properties / role / descriptionPrevious 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\"." - changed
Input schema / properties / send_notification / descriptionPrevious 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." - changed
Input schema / properties / share_type / descriptionPrevious 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\"." - changed
Input schema / properties / share_with / descriptionPrevious 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\"." - changed
Input schema / properties / user_google_email / descriptionPrevious value: -"The user's Google email address. Required."New value: +"The user's Google email address (authenticated\naccount)."
- Changed
manage_event24 fields changed- changed
Input schema / properties / action / descriptionPrevious value: -"Action to perform - \"create\", \"update\", \"delete\", or \"rsvp\"."New value: +"\"create\", \"update\", \"delete\", or \"rsvp\". Case-insensitive." - changed
Input schema / properties / add_google_meet / descriptionPrevious value: -"Whether to add/remove Google Meet."New value: +"True to attach a Meet conference, False on update\nto remove it." - changed
Input schema / properties / attachments / descriptionPrevious 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." - changed
Input schema / properties / attendees / descriptionPrevious 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}])." - changed
Input schema / properties / calendar_id / descriptionPrevious value: -"Calendar ID (default: 'primary')."New value: +"Calendar ID from list_calendars, or \"primary\"." - changed
Input schema / properties / color_id / descriptionPrevious value: -"Event color ID (1-11, update only)."New value: +"Color index 1-11 (update only); see Calendar color map." - changed
Input schema / properties / description / descriptionPrevious value: -"Event description."New value: +"Event body text. Supports plain text and some HTML." - changed
Input schema / properties / end_time / descriptionPrevious value: -"End time in RFC3339 format (required for create)."New value: +"RFC3339 end (exclusive). Required for create." - changed
Input schema / properties / event_id / descriptionPrevious value: -"Event ID (required for update and delete)."New value: +"Event ID from get_events. Required for update, delete,\nrsvp." - changed
Input schema / properties / guests_can_invite_others / descriptionPrevious value: -"Whether attendees can invite others."New value: +"Allow attendees to invite more people." - changed
Input schema / properties / guests_can_modify / descriptionPrevious value: -"Whether attendees can modify."New value: +"Allow attendees to edit the event." - changed
Input schema / properties / guests_can_see_other_guests / descriptionPrevious value: -"Whether attendees can see other guests."New value: +"Allow attendees to see the guest list." - changed
Input schema / properties / location / descriptionPrevious value: -"Event location."New value: +"Free-form location string or address." - changed
Input schema / properties / recurrence / descriptionPrevious 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\"]." - changed
Input schema / properties / reminders / descriptionPrevious 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." - changed
Input schema / properties / response / descriptionPrevious value: -"RSVP response โ \"accepted\", \"declined\", \"tentative\", or \"needsAction\" (rsvp action only)."New value: +"RSVP value for action=\"rsvp\" โ \"accepted\", \"declined\",\n\"tentative\", or \"needsAction\"." - changed
Input schema / properties / rsvp_comment / descriptionPrevious value: -"Optional message to include with the RSVP response (rsvp action only)."New value: +"Optional note sent with the RSVP." - changed
Input schema / properties / send_updates / descriptionPrevious value: -"Notification behavior for RSVP โ \"all\" (default), \"externalOnly\", or \"none\" (rsvp action only)."New value: +"RSVP notification behavior โ \"all\" (default),\n\"externalOnly\", or \"none\"." - changed
Input schema / properties / start_time / descriptionPrevious 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." - changed
Input schema / properties / summary / descriptionPrevious value: -"Event title (required for create)."New value: +"Event title. Required for create; optional for update." - changed
Input schema / properties / timezone / descriptionPrevious value: -"Timezone (e.g., \"America/New_York\")."New value: +"IANA zone like \"America/New_York\". Applied to start/end\nwhen they are tz-naive." - changed
Input schema / properties / transparency / descriptionPrevious value: -"\"opaque\" (busy) or \"transparent\" (free)."New value: +"\"opaque\" shows as busy; \"transparent\" shows as free." - changed
Input schema / properties / use_default_reminders / descriptionPrevious value: -"Whether to use default reminders."New value: +"True (default on create) to use the\ncalendar's default reminders. Set False to use `reminders`." - changed
Input schema / properties / user_google_email / descriptionPrevious value: -"The user's Google email address. Required."New value: +"The user's Google email address (authenticated\naccount)."
- Changed
manage_focus_time16 fields changed- changed
Input schema / properties / action / descriptionPrevious value: -"Action to perform - \"create\", \"list\", \"update\", or \"delete\"."New value: +"\"create\", \"list\", \"update\", or \"delete\". Case-insensitive." - changed
Input schema / properties / auto_decline_mode / descriptionPrevious value: -"How to handle conflicting invitations. One of: \"declineAllConflictingInvitations\" (default), \"declineOnlyNewConflictingInvitations\", \"declineNone\"."New value: +"\"declineAllConflictingInvitations\" (default),\n\"declineOnlyNewConflictingInvitations\", or \"declineNone\"." - changed
Input schema / properties / calendar_id / descriptionPrevious 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." - changed
Input schema / properties / chat_status / descriptionPrevious value: -"Google Chat status during the focus time. Supports \"doNotDisturb\" (default) and \"available\"."New value: +"\"doNotDisturb\" (default) or \"available\"." - changed
Input schema / properties / decline_message / descriptionPrevious value: -"Message included when auto-declining invitations."New value: +"Body of auto-decline replies." - changed
Input schema / properties / description / descriptionPrevious value: -"Event description. Useful for adding context about what the focus time is for."New value: +"Optional body text for context." - changed
Input schema / properties / end_time / descriptionPrevious 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\"." - changed
Input schema / properties / event_id / descriptionPrevious value: -"Event ID. Required for \"update\" and \"delete\" actions."New value: +"Event ID. Required for update and delete." - changed
Input schema / properties / max_results / descriptionPrevious value: -"For \"list\" action: maximum events to return. Defaults to 10."New value: +"List-action cap. Default 10." - changed
Input schema / properties / recurrence / descriptionPrevious 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\"]." - changed
Input schema / properties / start_time / descriptionPrevious 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." - changed
Input schema / properties / summary / descriptionPrevious value: -"Display text on the calendar. Defaults to \"Focus Time\"."New value: +"Display label. Defaults to \"Focus Time\"." - changed
Input schema / properties / time_max / descriptionPrevious value: -"For \"list\" action: end of time range."New value: +"List-action range end." - changed
Input schema / properties / time_min / descriptionPrevious 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." - changed
Input schema / properties / timezone / descriptionPrevious 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." - changed
Input schema / properties / user_google_email / descriptionPrevious value: -"The user's Google email address. Required."New value: +"The user's Google email address (authenticated\naccount)."
- Changed
manage_gmail_filter5 fields changed- changed
Input schema / properties / action / descriptionPrevious value: -"Action to perform - \"create\" or \"delete\"."New value: +"\"create\" or \"delete\". Case-insensitive." - changed
Input schema / properties / criteria / descriptionPrevious 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\"}." - changed
Input schema / properties / filter_action / descriptionPrevious 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\"]}." - changed
Input schema / properties / filter_id / descriptionPrevious value: -"ID of the filter to delete (required for delete)."New value: +"Filter ID from list_gmail_filters. Required for delete." - changed
Input schema / properties / user_google_email / descriptionPrevious value: -"The user's Google email address. Required."New value: +"The user's Google email address (authenticated\naccount)."
- Changed
manage_gmail_label6 fields changed- changed
Input schema / properties / action / descriptionPrevious value: -"Action to perform on the label."New value: +"\"create\" (needs name), \"update\" (needs label_id; name\noptional), or \"delete\" (needs label_id)." - changed
Input schema / properties / label_id / descriptionPrevious 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." - changed
Input schema / properties / label_list_visibility / descriptionPrevious value: -"Whether the label is shown in the label list."New value: +"\"labelShow\" (appears in sidebar) or\n\"labelHide\" (hidden from sidebar)." - changed
Input schema / properties / message_list_visibility / descriptionPrevious 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)." - changed
Input schema / properties / name / descriptionPrevious 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." - changed
Input schema / properties / user_google_email / descriptionPrevious value: -"The user's Google email address. Required."New value: +"The user's Google email address (authenticated\naccount)."
- Changed
manage_out_of_office14 fields changed- changed
Input schema / properties / action / descriptionPrevious value: -"Action to perform - \"create\", \"list\", \"update\", or \"delete\"."New value: +"\"create\", \"list\", \"update\", or \"delete\". Case-insensitive." - changed
Input schema / properties / auto_decline_mode / descriptionPrevious value: -"How to handle conflicting invitations. One of: \"declineAllConflictingInvitations\" (default), \"declineOnlyNewConflictingInvitations\", \"declineNone\"."New value: +"\"declineAllConflictingInvitations\" (default),\n\"declineOnlyNewConflictingInvitations\", or \"declineNone\"." - changed
Input schema / properties / calendar_id / descriptionPrevious 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." - changed
Input schema / properties / decline_message / descriptionPrevious value: -"Message included when auto-declining invitations."New value: +"Body of auto-decline replies sent to organizers." - changed
Input schema / properties / end_time / descriptionPrevious 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\"." - changed
Input schema / properties / event_id / descriptionPrevious value: -"Event ID. Required for \"update\" and \"delete\" actions."New value: +"Event ID from a prior list call. Required for update\nand delete." - changed
Input schema / properties / max_results / descriptionPrevious value: -"For \"list\" action: maximum events to return. Defaults to 10."New value: +"List-action cap. Default 10." - changed
Input schema / properties / recurrence / descriptionPrevious 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\"]." - changed
Input schema / properties / start_time / descriptionPrevious 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." - changed
Input schema / properties / summary / descriptionPrevious value: -"Display text on the calendar. Defaults to \"Out of Office\"."New value: +"Display label. Defaults to \"Out of Office\"." - changed
Input schema / properties / time_max / descriptionPrevious value: -"For \"list\" action: end of time range."New value: +"List-action range end." - changed
Input schema / properties / time_min / descriptionPrevious 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." - changed
Input schema / properties / timezone / descriptionPrevious 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." - changed
Input schema / properties / user_google_email / descriptionPrevious value: -"The user's Google email address. Required."New value: +"The user's Google email address (authenticated\naccount)."
- Changed
manage_sheet_tabs5 fields changed- changed
Input schema / properties / action / descriptionPrevious 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>\")." - changed
Input schema / properties / new_name / descriptionPrevious 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." - changed
Input schema / properties / sheet_id / descriptionPrevious 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." - changed
Input schema / properties / sheet_name / descriptionPrevious 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)." - added
Input schema / properties / spreadsheet_id / descriptionAdded value: +"Google Sheets spreadsheet ID (from the URL after `/d/`)."
- Changed
manage_task11 fields changed- changed
Input schema / properties / action / descriptionPrevious value: -"The action to perform. Must be one of: \"create\", \"update\", \"delete\", \"move\"."New value: +"\"create\", \"update\", \"delete\", or \"move\"." - changed
Input schema / properties / destination_task_list / descriptionPrevious value: -"Destination task list ID (for moving between lists). Used by \"move\" action."New value: +"For move โ moves the task into another\nlist." - changed
Input schema / properties / due / descriptionPrevious 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." - changed
Input schema / properties / notes / descriptionPrevious value: -"Notes/description for the task. Used by \"create\" and \"update\" actions."New value: +"Body/description text." - changed
Input schema / properties / parent / descriptionPrevious value: -"Parent task ID (for subtasks). Used by \"create\" and \"move\" actions."New value: +"Parent task ID to make this a subtask (create/move)." - changed
Input schema / properties / previous / descriptionPrevious 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." - changed
Input schema / properties / status / descriptionPrevious value: -"Task status (\"needsAction\" or \"completed\"). Used by \"update\" action."New value: +"Only for update โ \"needsAction\" or \"completed\"." - changed
Input schema / properties / task_id / descriptionPrevious 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." - changed
Input schema / properties / task_list_id / descriptionPrevious 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." - changed
Input schema / properties / title / descriptionPrevious value: -"The title of the task. Required for \"create\", optional for \"update\"."New value: +"Task title. Required for create; optional for update." - changed
Input schema / properties / user_google_email / descriptionPrevious value: -"The user's Google email address. Required."New value: +"The user's Google email address (authenticated\naccount)."
- Changed
manage_task_list4 fields changed- changed
Input schema / properties / action / descriptionPrevious value: -"The action to perform. Must be one of: \"create\", \"update\", \"delete\", \"clear_completed\"."New value: +"\"create\", \"update\", \"delete\", or \"clear_completed\"." - changed
Input schema / properties / task_list_id / descriptionPrevious 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." - changed
Input schema / properties / title / descriptionPrevious value: -"The title for the task list. Required for \"create\" and \"update\" actions."New value: +"New display title. Required for create and update." - changed
Input schema / properties / user_google_email / descriptionPrevious value: -"The user's Google email address. Required."New value: +"The user's Google email address (authenticated\naccount)."
- Changed
modify_gmail_message_labels4 fields changed- changed
Input schema / properties / add_label_ids / descriptionPrevious 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." - changed
Input schema / properties / message_id / descriptionPrevious value: -"The ID of the message to modify."New value: +"Gmail message ID from search_gmail_messages." - changed
Input schema / properties / remove_label_ids / descriptionPrevious value: -"List of label IDs to remove from the message."New value: +"Label IDs to remove, same ID rules as above." - changed
Input schema / properties / user_google_email / descriptionPrevious value: -"The user's Google email address. Required."New value: +"The user's Google email address (authenticated\naccount)."
- Changed
modify_sheet_values6 fields changed- changed
Input schema / properties / clear_values / descriptionPrevious 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`." - changed
Input schema / properties / range_name / descriptionPrevious 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." - changed
Input schema / properties / spreadsheet_id / descriptionPrevious value: -"The ID of the spreadsheet. Required."New value: +"Spreadsheet ID." - changed
Input schema / properties / user_google_email / descriptionPrevious value: -"The user's Google email address. Required."New value: +"The user's Google email address (authenticated\naccount)." - changed
Input schema / properties / value_input_option / descriptionPrevious 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)." - changed
Input schema / properties / values / descriptionPrevious 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."
- Changed
protect_sheet_range5 fields changed- changed
Input schema / properties / description / descriptionPrevious 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." - changed
Input schema / properties / editor_emails / descriptionPrevious 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." - changed
Input schema / properties / range_name / descriptionPrevious 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`)." - added
Input schema / properties / spreadsheet_id / descriptionAdded value: +"Google Sheets spreadsheet ID (from the URL after `/d/`)." - changed
Input schema / properties / warning_only / descriptionPrevious 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."
- Changed
query_freebusy6 fields changed- changed
Input schema / properties / calendar_expansion_max / descriptionPrevious 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." - changed
Input schema / properties / calendar_ids / descriptionPrevious 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\"]." - changed
Input schema / properties / group_expansion_max / descriptionPrevious 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." - changed
Input schema / properties / time_max / descriptionPrevious 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." - changed
Input schema / properties / time_min / descriptionPrevious 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\")." - changed
Input schema / properties / user_google_email / descriptionPrevious value: -"The user's Google email address. Required."New value: +"The user's Google email address (authenticated\naccount)."
- Changed
read_sheet_values6 fields changed- changed
Input schema / properties / include_formulas / descriptionPrevious 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." - changed
Input schema / properties / include_hyperlinks / descriptionPrevious 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." - changed
Input schema / properties / include_notes / descriptionPrevious 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." - changed
Input schema / properties / range_name / descriptionPrevious 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\"." - changed
Input schema / properties / spreadsheet_id / descriptionPrevious value: -"The ID of the spreadsheet. Required."New value: +"Spreadsheet ID from list_spreadsheets." - changed
Input schema / properties / user_google_email / descriptionPrevious value: -"The user's Google email address. Required."New value: +"The user's Google email address (authenticated\naccount)."
- Changed
reorder_slides3 fields changed- changed
Input schema / properties / insertion_index / descriptionPrevious 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)." - added
Input schema / properties / presentation_id / descriptionAdded value: +"Google Slides presentation ID (from the URL after `/d/`)." - changed
Input schema / properties / slide_object_ids / descriptionPrevious 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`."
- Changed
replace_slides_text4 fields changed- changed
Input schema / properties / find_text / descriptionPrevious 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." - changed
Input schema / properties / match_case / descriptionPrevious 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)." - added
Input schema / properties / presentation_id / descriptionAdded value: +"Google Slides presentation ID (from the URL after `/d/`)." - changed
Input schema / properties / replace_text / descriptionPrevious value: -"Replacement text."New value: +"Text to substitute for each occurrence. Can be empty to\neffectively delete matches."
- Changed
restore_drive_revision2 fields changed- changed
Input schema / properties / file_id / descriptionPrevious 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." - changed
Input schema / properties / revision_id / descriptionPrevious 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)."
- Changed
run_script_function5 fields changed- changed
Input schema / properties / dev_mode / descriptionPrevious 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." - changed
Input schema / properties / function_name / descriptionPrevious 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." - changed
Input schema / properties / parameters / descriptionPrevious value: -"Optional list of parameters to pass"New value: +"Optional positional arguments to pass to the\nfunction. Must be JSON-serializable primitives or arrays." - changed
Input schema / properties / script_id / descriptionPrevious value: -"The script project ID"New value: +"Target project ID (must have an API-executable\ndeployment)." - changed
Input schema / properties / user_google_email / descriptionPrevious value: -"User's email address"New value: +"The user's Google email address (authenticated\naccount)."
- Changed
search_contacts3 fields changed- changed
Input schema / properties / page_size / descriptionPrevious value: -"Maximum number of results to return (default: 30, max: 30)."New value: +"Max results. 1-30. Default 30 (API cap)." - changed
Input schema / properties / query / descriptionPrevious value: -"Search query string (searches names, emails, phone numbers)."New value: +"Free text substring. Matches names, email addresses, and\nphone numbers." - changed
Input schema / properties / user_google_email / descriptionPrevious value: -"The user's Google email address. Required."New value: +"The user's Google email address (authenticated\naccount)."
- Changed
search_docs3 fields changed- added
Input schema / properties / page_size / descriptionAdded 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." - added
Input schema / properties / query / descriptionAdded 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`)." - added
Input schema / properties / user_google_email / descriptionAdded value: +"The user's Google email address. Required."
- Changed
search_drive_files10 fields changed- changed
Input schema / properties / corpora / descriptionPrevious 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." - changed
Input schema / properties / detailed / descriptionPrevious 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." - changed
Input schema / properties / drive_id / descriptionPrevious 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." - changed
Input schema / properties / file_type / descriptionPrevious 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." - changed
Input schema / properties / include_items_from_all_drives / descriptionPrevious 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." - changed
Input schema / properties / order_by / descriptionPrevious 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\"." - changed
Input schema / properties / page_size / descriptionPrevious value: -"The maximum number of files to return. Defaults to 10."New value: +"Max files returned, 1-1000. Default 10." - changed
Input schema / properties / page_token / descriptionPrevious 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`." - changed
Input schema / properties / query / descriptionPrevious 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." - changed
Input schema / properties / user_google_email / descriptionPrevious value: -"The user's Google email address. Required."New value: +"The user's Google email address (authenticated\naccount)."
- Changed
search_gmail_messages4 fields changed- changed
Input schema / properties / page_size / descriptionPrevious value: -"The maximum number of messages to return. Defaults to 10."New value: +"Max results per page, 1-500. Default 10." - changed
Input schema / properties / page_token / descriptionPrevious 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." - changed
Input schema / properties / query / descriptionPrevious 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\"." - changed
Input schema / properties / user_google_email / descriptionPrevious value: -"The user's Google email address. Required."New value: +"The user's Google email address (authenticated\naccount)."
- Changed
search_messages6 fields changed- changed
Input schema / properties / max_spaces / descriptionPrevious 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." - changed
Input schema / properties / page_size / descriptionPrevious value: -"Maximum number of messages to return per space."New value: +"Max messages fetched per space. Default 25." - changed
Input schema / properties / query / descriptionPrevious 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." - changed
Input schema / properties / space_id / descriptionPrevious 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)." - changed
Input schema / properties / time_filter / descriptionPrevious 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." - added
Input schema / properties / user_google_email / descriptionAdded value: +"The user's Google email address (authenticated\naccount)."
- Changed
send_message5 fields changed- added
Input schema / properties / message_text / descriptionAdded value: +"Plain text body. Supports Chat markdown (e.g.\n*bold*, _italic_, `code`)." - added
Input schema / properties / space_id / descriptionAdded value: +"Target space resource name (\"spaces/<id>\") from\nlist_spaces." - changed
Input schema / properties / thread_key / descriptionPrevious 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." - changed
Input schema / properties / thread_name / descriptionPrevious 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." - added
Input schema / properties / user_google_email / descriptionAdded value: +"The user's Google email address (authenticated\naccount)."
- Changed
set_drive_file_permissions5 fields changed- changed
Input schema / properties / copy_requires_writer_permission / descriptionPrevious 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." - changed
Input schema / properties / file_id / descriptionPrevious value: -"The ID of the file or folder. Required."New value: +"Drive file or folder ID." - changed
Input schema / properties / link_sharing / descriptionPrevious 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." - changed
Input schema / properties / user_google_email / descriptionPrevious value: -"The user's Google email address. Required."New value: +"The user's Google email address (authenticated\naccount)." - changed
Input schema / properties / writers_can_share / descriptionPrevious 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."
- Changed
set_publish_settings4 fields changed- changed
Input schema / properties / form_id / descriptionPrevious value: -"The ID of the form to update publish settings for."New value: +"Form ID from the edit URL after /forms/d/." - changed
Input schema / properties / publish_as_template / descriptionPrevious 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." - changed
Input schema / properties / require_authentication / descriptionPrevious 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." - changed
Input schema / properties / user_google_email / descriptionPrevious value: -"The user's Google email address. Required."New value: +"The user's Google email address (authenticated\naccount)."
- Changed
set_slides_background4 fields changed- changed
Input schema / properties / alpha / descriptionPrevious value: -"0.0-1.0."New value: +"Opacity of the background fill, 0.0 (transparent) to 1.0\n(opaque). Default `1.0`." - changed
Input schema / properties / color / descriptionPrevious value: -"Hex color (e.g., \"#F5F5F5\")."New value: +"Hex color for the background, e.g., `#F5F5F5` or `F5F5F5`.\nAccepts `#RRGGBB` or `RRGGBB`." - changed
Input schema / properties / page_object_id / descriptionPrevious 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)." - added
Input schema / properties / presentation_id / descriptionAdded value: +"Google Slides presentation ID (from the URL after `/d/`)."
- Changed
style_slides_shape7 fields changed- changed
Input schema / properties / fill_alpha / descriptionPrevious 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." - changed
Input schema / properties / fill_color / descriptionPrevious 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." - changed
Input schema / properties / outline_color / descriptionPrevious 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." - changed
Input schema / properties / outline_dash_style / descriptionPrevious 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." - changed
Input schema / properties / outline_weight / descriptionPrevious value: -"Outline thickness in points."New value: +"Outline thickness in points (e.g., `1.5`, `3`, `6`).\nOmit to leave outline weight unchanged." - added
Input schema / properties / page_element_id / descriptionAdded 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." - added
Input schema / properties / presentation_id / descriptionAdded value: +"Google Slides presentation ID (from the URL after `/d/`)."
- Changed
update_doc_tab4 fields changed- changed
Input schema / properties / document_id / descriptionPrevious value: -"ID of the document to update"New value: +"Target document ID." - changed
Input schema / properties / tab_id / descriptionPrevious value: -"ID of the tab to rename (use inspect_doc_structure to find tab IDs)"New value: +"Tab ID from list_doc_tabs." - changed
Input schema / properties / title / descriptionPrevious value: -"New title for the tab"New value: +"New display title." - changed
Input schema / properties / user_google_email / descriptionPrevious value: -"User's Google email address"New value: +"The user's Google email address (authenticated\naccount)."
- Changed
update_drive_file12 fields changed- changed
Input schema / properties / add_parents / descriptionPrevious 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)." - changed
Input schema / properties / copy_requires_writer_permission / descriptionPrevious value: -"Whether copying requires writer permission."New value: +"When True, copies require\nwriter access (reader copy/export blocked)." - changed
Input schema / properties / description / descriptionPrevious value: -"New description for the file."New value: +"New description text." - changed
Input schema / properties / file_id / descriptionPrevious value: -"The ID of the file to update. Required."New value: +"Drive file ID to update." - changed
Input schema / properties / mime_type / descriptionPrevious 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)." - changed
Input schema / properties / name / descriptionPrevious value: -"New name for the file."New value: +"New display name." - changed
Input schema / properties / properties / descriptionPrevious value: -"Custom key-value properties for the file."New value: +"Dict of user-visible custom key-value pairs attached\nto the file." - changed
Input schema / properties / remove_parents / descriptionPrevious value: -"Comma-separated folder IDs to remove from parents."New value: +"Comma-separated folder IDs to detach from." - changed
Input schema / properties / starred / descriptionPrevious value: -"Whether to star/unstar the file."New value: +"True to star, False to unstar." - changed
Input schema / properties / trashed / descriptionPrevious value: -"Whether to move file to/from trash."New value: +"True moves to Trash (soft-delete), False restores." - changed
Input schema / properties / user_google_email / descriptionPrevious value: -"The user's Google email address. Required."New value: +"The user's Google email address (authenticated\naccount)." - changed
Input schema / properties / writers_can_share / descriptionPrevious value: -"Whether editors can share the file."New value: +"Whether editors may re-share the file."
- Changed
update_script_content3 fields changed- changed
Input schema / properties / files / descriptionPrevious 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." - changed
Input schema / properties / script_id / descriptionPrevious value: -"The script project ID"New value: +"Target project ID." - changed
Input schema / properties / user_google_email / descriptionPrevious value: -"User's email address"New value: +"The user's Google email address (authenticated\naccount)."
- Changed
update_slides_speaker_notes3 fields changed- changed
Input schema / properties / notes / descriptionPrevious 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." - changed
Input schema / properties / page_object_id / descriptionPrevious 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." - added
Input schema / properties / presentation_id / descriptionAdded value: +"Google Slides presentation ID (from the URL after `/d/`)."
149 tool updates
v1.19.0- First observed
add_sheet_data_validation - First observed
add_sheet_named_range - First observed
append_table_rows - First observed
apply_continuous_numbering - First observed
batch_modify_gmail_message_labels - First observed
batch_update_doc - First observed
batch_update_form - First observed
batch_update_presentation - First observed
check_drive_file_public_access - First observed
copy_drive_file - First observed
copy_drive_folder - First observed
create_calendar - First observed
create_doc - First observed
create_drive_file - First observed
create_drive_folder - First observed
create_form - First observed
create_presentation - First observed
create_reaction - First observed
create_script_project - First observed
create_sheet - First observed
create_slides_shape - First observed
create_slides_text_box - First observed
create_spreadsheet - First observed
create_table_with_data - First observed
create_version - First observed
debug_docs_runtime_info - First observed
debug_table_structure - First observed
delete_doc_tab - First observed
delete_script_project - First observed
delete_slides_element - First observed
download_chat_attachment - First observed
draft_gmail_message - First observed
duplicate_slide - First observed
export_doc_to_pdf - First observed
find_and_replace_doc - First observed
format_all_slides_text - First observed
format_sheet_range - First observed
format_slides_paragraph - First observed
format_slides_text - First observed
generate_trigger_code - First observed
get_contact - First observed
get_contact_group - First observed
get_doc_as_markdown - First observed
get_doc_content - First observed
get_doc_smart_chips - First observed
get_drive_file_content - First observed
get_drive_file_download_url - First observed
get_drive_file_permissions - First observed
get_drive_revisions - First observed
get_drive_shareable_link - First observed
get_events - First observed
get_form - First observed
get_form_response - First observed
get_gmail_attachment_content - First observed
get_gmail_message_content - First observed
get_gmail_messages_content_batch - First observed
get_gmail_thread_content - First observed
get_gmail_threads_content_batch - First observed
get_messages - First observed
get_page - First observed
get_page_thumbnail - First observed
get_presentation - First observed
get_script_content - First observed
get_script_metrics - First observed
get_script_project - First observed
get_search_engine_info - First observed
get_slides_speaker_notes - First observed
get_spreadsheet_info - First observed
get_task - First observed
get_task_list - First observed
get_version - First observed
import_to_google_doc - First observed
insert_doc_elements - First observed
insert_doc_file_chip - First observed
insert_doc_image - First observed
insert_doc_link - First observed
insert_doc_markdown - First observed
insert_doc_person_chip - First observed
insert_doc_tab - First observed
insert_slides_image - First observed
inspect_doc_structure - First observed
list_calendars - First observed
list_contact_groups - First observed
list_contacts - First observed
list_deployments - First observed
list_doc_tabs - First observed
list_docs_in_folder - First observed
list_document_comments - First observed
list_drive_items - First observed
list_form_responses - First observed
list_gmail_filters - First observed
list_gmail_labels - First observed
list_presentation_comments - First observed
list_script_processes - First observed
list_script_projects - First observed
list_sheet_tables - First observed
list_spaces - First observed
list_spreadsheet_comments - First observed
list_spreadsheets - First observed
list_task_lists - First observed
list_tasks - First observed
list_versions - First observed
manage_conditional_formatting - First observed
manage_contact - First observed
manage_contact_group - First observed
manage_contacts_batch - First observed
manage_deployment - First observed
manage_document_comment - First observed
manage_drive_access - First observed
manage_event - First observed
manage_focus_time - First observed
manage_gmail_filter - First observed
manage_gmail_label - First observed
manage_out_of_office - First observed
manage_presentation_comment - First observed
manage_sheet_tabs - First observed
manage_spreadsheet_comment - First observed
manage_task - First observed
manage_task_list - First observed
modify_doc_text - First observed
modify_gmail_message_labels - First observed
modify_sheet_values - First observed
protect_sheet_range - First observed
query_freebusy - First observed
read_sheet_values - First observed
reorder_slides - First observed
replace_slides_text - First observed
resize_sheet_dimensions - First observed
restore_drive_revision - First observed
run_script_function - First observed
search_contacts - First observed
search_custom - First observed
search_docs - First observed
search_drive_files - First observed
search_gmail_messages - First observed
search_messages - First observed
send_gmail_message - First observed
send_message - First observed
set_drive_file_permissions - First observed
set_publish_settings - First observed
set_slides_background - First observed
start_google_auth - First observed
style_slides_shape - First observed
update_doc_headers_footers - First observed
update_doc_tab - First observed
update_drive_file - First observed
update_paragraph_style - First observed
update_script_content - First observed
update_slides_speaker_notes
TDQS
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.
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.
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.
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
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
Read and edit GA4, Search Console and Google Tag Manager from any MCP client. 29 tools.
An agent-first office suite Claude & ChatGPT read and write over one MCP URL.
MCP-native collaborative markdown editor with real-time AI document editing
65+ AI tools as MCP: research, write, code, scrape, translate, RAG, agent memory, workflows
Related MCP Servers
- AlicenseBqualityAmaintenanceGoogle Workspace MCP Server1223,122PythonMIT
- AlicenseNot gradedqualityCmaintenanceRead and write Google Sheets, Docs, Drive, and Apps Script from any MCP client. 82 tools with OAuth2 auth, tested against live Google APIs.1MIT
- AlicenseAqualityBmaintenancePersistent memory and task board for Claude Code. 14 tools spanning projects, tasks, sessions, and activity logs โ backed by Firestore, runs on the free tier. Handoff notes survive context compaction; the next session reads the last handoff and picks up where you stopped.14MIT
- AlicenseNot gradedqualityAmaintenanceGoogle Drive + Workspace MCP โ 98 tools for Docs, Sheets, Slides, Shared Drives, Labels, Approvals. Supports OAuth2 and Service Account + Domain-Wide Delegation.550MIT
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
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