workspace-mcp
Provides full email management, including reading, sending, searching, and filtering messages.
Provides cross-application workflow automation through Apps Script project management, deployment, and execution.
Provides full calendar event management with support for creation, updates, and advanced scheduling.
Provides space management, messaging, and reactions in Google Chat.
Provides fine-grained editing, formatting, comment management, and document manipulation.
Provides file and folder management with sharing, permissions, and support for document conversion.
Provides form creation, response collection, and publish settings management.
Provides cell management, formatting, conditional rules, and spreadsheet manipulation.
Provides presentation creation, editing, slide management, and content insertion.
Provides task and list management with hierarchical organization.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@workspace-mcpcreate a new Google Doc called 'Project Plan' and share it with team@example.com"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
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 & Code Mode for use with tools like Claude Code and Codex!
The most feature-complete Google Workspace MCP server, it can do things that Google's own tooling and the built in integrations with Claude and ChatGPT can't even dream of. With Remote OAuth2.1 multi-user support, fine-grained editing tools and the most extensive coverage of any Google Workspace tool in existance, Workspace MCP is in a different class. Offering native OAuth 2.1, stateless mode and external auth server support, it's also the only Workspace MCP you can host for your whole organization centrally & securely!
Support for all free Google accounts & 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.
iAdvize copy. This repository is an iAdvize-maintained copy of taylorwilsdon/google_workspace_mcp (origin: theolefort-cyber/mcpworkspace). For how it stays in sync with upstream and how it's hosted for iAdvize employees, see docs/SYNC_UPSTREAM.md, docs/DEPLOY_CLOUD_RUN.md and docs/ONBOARDING_IADVIZE.md.
See it in action:
Overview
Workspace MCP is the single most complete MCP server, the only that integrates all major Google Workspace services with AI assistants and all agent platforms. The entire toolset is available for CLI usage supporting both local and remote instances.
Related MCP server: mcp-google-workspace
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 — local file reads default to the managed attachment directory, and
validate_file_path()still blocks.env*files plus common home-directory credential stores such as~/.ssh/and~/.aws/even ifALLOWED_FILE_DIRSis broadened
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 | |
|
| |
| Advanced legacy-stdio sidecar | |
| External URL for reverse proxy setups | |
| Downloaded attachments dir and default trusted local attachment directory — default | |
| Remote MCP endpoint URL for CLI | |
| Colon-separated allowlist for local file reads | |
🧰 Tool Selection | ||
| Comma-separated services, e.g. | |
|
| |
|
| |
| Space-separated | |
🔑 OAuth 2.1 & Multi-User | ||
|
| |
|
| |
|
| |
| Directory for | |
| 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 | |
| Comma-separated allowlist of redirect URIs that dynamically-registered OAuth clients may use. Default is unset (any URI permitted, per DCR). Supports FastMCP's glob patterns ( | |
🗄️ Credential Store | ||
|
| |
| Directory for the | |
| Backward-compatible alias for | |
| Required when backend is | |
| Optional object-name prefix for the | |
|
| |
🔧 Service Account | ||
| Path to service account JSON key file (domain-wide delegation) | |
| Inline service account JSON key (alternative to file) | |
| Comma-separated domain allowlist for per-request impersonation (optional) | |
🔍 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.
Quick Start — Connect Claude to Google Workspace
The recommended setup is to run an instance and connect Claude to it via a Connector. Full instructions at workspacemcp.com/quick-start.
Prerequisites
Python 3.10+ · uv/uvx · Google Cloud Project with OAuth 2.0 credentials
If you want the GCS credential store backend, install the optional dependency first:
uv sync --extra gcs
# or
pip install "workspace-mcp[gcs]"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. For Claude Desktop, run an instance and connect via a Connector. Stdio mode is a legacy fallback. For deployments, prefer OAuth 2.1 with stateless mode (MCP_ENABLE_OAUTH21=true,WORKSPACE_MCP_STATELESS_MODE=true) unless you need local attachment or credential storage.
OAuth state safety: Legacy stdio starts a local-only OAuth callback server. In single-user mode only, it may recover a missing Google
stateparameter by consuming the most recent pending local OAuth state. This fallback is intentionally disabled outside single-user mode because it can cross session boundaries. Do not enable or emulate this behavior in streamable HTTP, hosted, or multi-user deployments; those modes must require an explicit state match.
▶ Legacy Mode
uv run main.py⚠️ Stdio mode (incomplete MCP clients only)
◆ HTTP Mode (Recommended)
export MCP_ENABLE_OAUTH21=true
export GOOGLE_OAUTH_CLIENT_ID="..."
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
The WORKSPACE_MCP_TOOLS, WORKSPACE_MCP_TOOL_TIER, WORKSPACE_MCP_READ_ONLY, and WORKSPACE_MCP_PERMISSIONS environment variables provide the same controls for plugin and container installs. Empty strings are ignored. Non-empty malformed values fail closed at startup. Explicit CLI flags take precedence over mutually exclusive env vars.
Advanced legacy stdio sidecar
# Optional bridge only for local legacy stdio sessions
WORKSPACE_MCP_HTTP_PORT=8001 uv run main.py
workspace-cli --url http://127.0.0.1:8001/mcp listThe sidecar is disabled unless WORKSPACE_MCP_HTTP_PORT is set. It only exists to bridge local workspace-cli calls into a legacy stdio server. Do not use it for normal Claude Code, VS Code, hosted, or multi-user deployments; use streamable HTTP with OAuth 2.1 instead. When enabled, it validates ports in the 1..65535 range, binds to 127.0.0.1, and logs a warning if the port is already in use while keeping stdio running.
★ 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 \
-e MCP_ENABLE_OAUTH21=true \
-e GOOGLE_OAUTH_CLIENT_ID="..." \
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.
To use workspace-cli globally, you'll want to start in this repo and run uv tool install .
Once complete, you'll have workspace-cli available globally via workspace-cli
Note: there is a public (but abandoned) pypi package with the same name - do not use uvx, as it will pull the wrong thing.
▶ 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 | Import presentation files (PPTX, PPT, ODP) as Google Slides |
| Core | Import spreadsheet files (XLSX, CSV, TSV, etc.) as Google Sheets |
| Core | Get shareable links for a file |
| Extended | List folder contents or shared drives |
| Extended | Copy existing files (templates) with optional renaming |
| Extended | Update metadata, move files, or replace Google Apps content |
| Extended | Grant, update, revoke permissions, and transfer ownership |
| Extended | Set link sharing and file-level sharing settings |
| Complete | Get file metadata, parents, and permissions |
| Complete | Check public sharing status |
📧 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 |
| Core | Insert, replace, and richly format text with tab/segment targeting, append-to-segment support, advanced typography, and link management |
| 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 |
| 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 | Create, rename, delete, or populate tabs from markdown |
📊 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 | Move rows between sheets within a spreadsheet |
| 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 |
🖼️ 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 |
| 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 | Retrieve / search all messages within a single thread |
| Core | Send messages to spaces |
| Core | Search across chat history (paginated deep scan, multi-word matching) |
| 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 recommended way to use Google Workspace MCP with Claude Desktop is to run a server instance and connect Claude to it via a Connector. This provides proper OAuth flow, multi-user support, and the best experience.
See the Quick Start Guide for setup instructions.
⚠️ Note: Stdio mode is a legacy fallback for clients that don't support Connectors. Prefer the Connector-based approach above.
OAuth callback caveat: The legacy stdio callback path includes a local recovery fallback for rare Google redirects that omit the
stateparameter, but only when--single-useris active. That recovery can only be safe in a single-user local process; in HTTP or hosted multi-user scenarios it could consume another user's pending OAuth state. There is no environment variable to enable this globally.
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.MCP_ENABLE_OAUTH21=true GOOGLE_OAUTH_CLIENT_ID=... uv run main.py --transport streamable-httplaunches the HTTP 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 uses legacy authentication. In streamable-http mode, legacy authentication binds to 127.0.0.1 by default to keep cached Google credentials local. Set WORKSPACE_MCP_HOST explicitly only for trusted networks; use OAuth 2.1 for remote or shared HTTP deployments.
Streamable HTTP requests with an Origin header are checked against loopback origins, WORKSPACE_EXTERNAL_URL, and OAUTH_ALLOWED_ORIGINS to reduce DNS-rebinding risk. Non-browser MCP clients that omit Origin are unaffected.
vscode-webview origins: Origins with the
vscode-webview://scheme are scoped per-extension using the authority component (e.g.vscode-webview://publisher.extension). Adding a vscode-webview URI toOAUTH_ALLOWED_ORIGINSpermits only the specific extension identified by that authority; other extensions are rejected.
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.
Restricting DCR client redirect URIs:
By default, any client going through Dynamic Client Registration can declare any redirect_uri. For publicly-exposed deployments, this is a phishing vector — an attacker can register a client with a redirect_uri they control and harvest authorization codes from tricked users. Set WORKSPACE_MCP_ALLOWED_CLIENT_REDIRECT_URIS to a comma-separated allowlist of permitted URIs:
# Public deployment — restrict to Claude's hosted OAuth callbacks
export WORKSPACE_MCP_ALLOWED_CLIENT_REDIRECT_URIS="https://claude.ai/api/mcp/auth_callback,https://claude.com/api/mcp/auth_callback"
# Add Claude Code CLI (loopback redirects on ephemeral ports)
export WORKSPACE_MCP_ALLOWED_CLIENT_REDIRECT_URIS="https://claude.ai/api/mcp/auth_callback,https://claude.com/api/mcp/auth_callback,http://localhost:*/callback,http://127.0.0.1:*/callback"Patterns use FastMCP's matcher: * wildcards any port or path component; *.example.com matches subdomains. Leaving the variable unset preserves the default DCR behaviour (any URI accepted), which is appropriate for local development but unsafe for public deployments.
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 GOOGLE_OAUTH_CLIENT_ID="..."
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 GOOGLE_OAUTH_CLIENT_ID="..."
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
When a tool call supplies
user_google_email, service account mode uses that email as the domain-wide delegation impersonation subject.USER_GOOGLE_EMAILis still required and serves as the fallback when no caller email is provided.The service account key is validated at startup (checks for required fields and correct type)
Per-Request Impersonation:
The caller-supplied user_google_email on each tool call is used as the DWD impersonation subject instead of the static USER_GOOGLE_EMAIL. This lets a single server instance act on behalf of multiple domain users.
# Optional: restrict which domains may be impersonated
export DWD_ALLOWED_DOMAINS="corp.com,subsidiary.io"If
DWD_ALLOWED_DOMAINSis set, only emails whose domain appears in the comma-separated list are accepted; all others raise an authentication error.If
DWD_ALLOWED_DOMAINSis unset, any email accepted by the service account's delegation scope is allowed.
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. For remote or shared HTTP endpoints, see the OAuth 2.1 note in the HTTP Mode section.
Origin validation: VS Code webview clients send a
vscode-webview://<extension-id>origin, which is rejected by default. Add the specific origin toOAUTH_ALLOWED_ORIGINS(e.g.OAUTH_ALLOWED_ORIGINS=vscode-webview://your.extension-id) to permit it. Connections to alocalhost/127.0.0.1URL are allowed without extra configuration.
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
export MCP_ENABLE_OAUTH21=true
export GOOGLE_OAUTH_CLIENT_ID="..."
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 serverDo not set
Referrer-Policy: no-referreron your proxy. It makes browsers sendOrigin: nullon the same-origin consentPOST, which origin validation rejects with{"error": "Origin not allowed"}(logged asRejected HTTP request from Origin: null) even whenWORKSPACE_EXTERNAL_URLis correct. Usestrict-origin-when-cross-origin(the browser default) orsame-origininstead.
# 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
export MCP_ENABLE_OAUTH21=true
export GOOGLE_OAUTH_CLIENT_ID="..."
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. For remote or shared HTTP endpoints, also enable OAuth 2.1 with MCP_ENABLE_OAUTH21=true and GOOGLE_OAUTH_CLIENT_ID.
First-Time Authentication
Legacy local authentication uses the Google OAuth consent flow. In stdio mode, the server tries to open the browser automatically so long Google OAuth URLs do not wrap in terminals or get corrupted during copy/paste, which improves reliability of the redirect flow.
In
stdiomode, the server starts a local callback listener and tries to open the Google authorization page in your browser automatically.If the browser cannot be opened, the tool response includes the authorization URL to open manually.
In
streamable-http/ OAuth 2.1 mode, use your MCP client's OAuth flow instead; the server does not try to open a browser on the host running the HTTP service.When a legacy local auth tool call provides
user_google_email, the server adds that value aslogin_hinton the Google authorization URL so Google can pre-select the account on the consent screen. This applies to thestdioflow whether the server opens the browser or returns the URL;streamable-http/ OAuth 2.1 flows still rely on the MCP client's OAuth flow.
Example:
user_google_email="alex@example.com"
Authorization URL: https://accounts.google.com/o/oauth2/v2/auth?...&login_hint=alex%40example.comWhen calling a tool:
If an opened browser page appears, complete Google authorization there.
If no browser opens, open the returned authorization URL manually and complete Google authorization there.
After successful authorization, the callback page displays the authenticated email address.
Retry the original tool call with that email as
user_google_email; the server needs this value to associate the stored Google credentials with the tool request, so the original request is not authorized until it is retried.Server completes authentication using the stored Google credentials.
◆ 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 with pluggable backends for managing Google OAuth credentials:
Features:
Abstract Interface:
CredentialStorebase class defines standard operations (get, store, delete, list users)Local File Storage:
LocalDirectoryCredentialStore— plaintext JSON files protected by filesystem permissions (0o600 / 0o700)GCS-Backed Storage:
GCSCredentialStore— stores each user's credentials as an object in a Google Cloud Storage bucket. Supports atomic read-modify-write via generation preconditions, first-class Cloud IAM / Audit Logs integration, and transparent bucket-level CMEK encryption at restConfigurable Storage: Environment variables select backend and location
Multi-User Support: Store and manage credentials for multiple Google accounts
Automatic Directory Creation: Storage directory is created automatically if it doesn't exist (local backend)
Configuration:
# Install the optional dependency if you plan to use the GCS backend:
# uv sync --extra gcs
# or: pip install "workspace-mcp[gcs]"
#
# Select backend (default: local_directory). Supported: local_directory, gcs
export WORKSPACE_MCP_CREDENTIAL_STORE_BACKEND="gcs"
# --- local_directory options ---
export WORKSPACE_MCP_CREDENTIALS_DIR="/path/to/credentials"
# Backward-compatible alias:
export GOOGLE_MCP_CREDENTIALS_DIR="/path/to/credentials"
# Default directory locations (if no directory env var is set):
# - ~/.google_workspace_mcp/credentials (if home directory accessible)
# - ./.credentials (fallback)
# --- gcs options ---
export WORKSPACE_MCP_GCS_BUCKET="my-workspace-mcp-tokens" # required
export WORKSPACE_MCP_GCS_PREFIX="credentials/" # optional
export WORKSPACE_MCP_GCS_REQUIRE_CMEK="true" # optional; see belowBackend selection:
local_directory(default): Plaintext JSON records. Suitable for local development and single-user stdio mode. Existing pre-URL-encoding local credential filenames remain readable during migration; new writes use the URL-encoded filename mapping unless a legacy file already exists for that user.gcs: Stores credentials as objects in a GCS bucket using the JSON API. Authenticates via Application Default Credentials — on Cloud Run this means the runtime service account needsroles/storage.objectUser(or equivalent) on the bucket. Does not supportlist_users()— designed for multi-user OAuth 2.1 mode where users are looked up individually by email.
CMEK enforcement (gcs backend):
By default GCS encrypts objects with Google-managed keys. For customer-managed encryption, set a default KMS key on the bucket (e.g. via Terraform's google_storage_bucket.encryption.default_kms_key_name). All credentials written to the bucket will inherit the key transparently — no application-level key to manage.
To guard against accidentally deploying against a bucket without CMEK, set WORKSPACE_MCP_GCS_REQUIRE_CMEK=true. The store will verify the bucket has a default KMS key at startup and refuse to initialize otherwise. Note that this check reads bucket metadata, so the runtime service account additionally needs storage.buckets.get — grant roles/storage.bucketViewer on the bucket (or a custom role containing storage.buckets.get) in addition to the object-level role. roles/storage.objectUser alone covers only object operations.
Usage Example:
from auth.credential_store import get_credential_store, LocalDirectoryCredentialStore
# 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 (local_directory backend only;
# GCSCredentialStore intentionally does not support enumeration — use the
# upstream identity provider to enumerate users instead).
if isinstance(store, LocalDirectoryCredentialStore):
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). If another process is already using port 8000, setWORKSPACE_MCP_PORTto a free port to avoid conflicts — e.g.export WORKSPACE_MCP_PORT=8123. If you use a web/confidential OAuth client (not the recommended Desktop client), also update the redirect URI in Google Cloud Console to match the new port (e.g.http://localhost:8123/oauth2callback); Desktop and PKCE clients do not require this.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 managed attachment directory by default. Override this with theALLOWED_FILE_DIRSenvironment variable if you intentionally need broader access:# Colon-separated list of directories (semicolon on Windows) from which local file reads are permitted export ALLOWED_FILE_DIRS="/home/user/documents:/data/shared"The managed attachment directory is controlled by
WORKSPACE_ATTACHMENT_DIRand remains allowed even whenALLOWED_FILE_DIRSis set. Regardless of the allowlist, access to sensitive paths (.env,.ssh/,.aws/,/etc/shadow, credential files, etc.) is always blocked.Indirect Prompt Injection: In agentic clients, email bodies, documents, and calendar events can contain malicious instructions that try to coerce the model into exfiltrating local files. Do not broaden
ALLOWED_FILE_DIRSunless you trust the client, the model behavior, and the data sources it can read.
≡ License
MIT License - see LICENSE file for details.
Validations:
Available Tools
122 toolsappend_table_rowsAppend Table RowsA
Appends rows to a structured table in a Google Sheet. The rows are added to the end of the table body, automatically extending the table range.
Use list_sheet_tables first to find the table ID.
| Name | Required | Description | Default |
|---|---|---|---|
| user_google_email | Yes | The user's Google email address. Required. | |
| spreadsheet_id | Yes | The ID of the spreadsheet. Required. | |
| table_id | Yes | The ID of the table to append to (get from list_sheet_tables). Required. | |
| values | Yes | 2D array of values to append. Each inner list is one row. Can be a JSON string or Python list. Required. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate the tool is non-readOnly, non-destructive, non-idempotent, and openWorld. The description adds that rows are appended to the end and the table range auto-extends. This adds some behavioral context, but no details about limits, permissions, or side effects beyond what annotations convey.
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 plus a single directive. Every sentence serves a purpose: stating the action, clarifying the automatic extension, and providing a usage hint. No wasted words, and front-loaded with the 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 the tool's low complexity and the presence of an output schema (not shown but indicated), the description adequately covers what the tool does, the required parameters, and a prerequisite step. However, it omits potential error cases or limits (e.g., max rows), which would be useful for a complete picture.
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% coverage with descriptions for each parameter. The description adds value by explaining that rows are added to the end of the table body, auto-extending the range, and specifying that `table_id` should come from `list_sheet_tables`. This aids understanding beyond the schema alone.
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 'appends rows to a structured table' and the resource (Google Sheet table). It mentions automatic extension of the table range, which distinguishes behavior from similar tools like modify_sheet_values, but does not explicitly differentiate from create_table_with_data or other siblings.
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 a prerequisite ('Use list_sheet_tables first to find the table ID'), which gives context for when to use the tool. However, it does not specify when not to use it or compare with alternatives like modify_sheet_values, leaving room for potential misuse.
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_labelsBatch Modify Gmail Message LabelsADestructive
Adds or removes labels from multiple Gmail messages in a single batch request.
| Name | Required | Description | Default |
|---|---|---|---|
| user_google_email | Yes | The user's Google email address. Required. | |
| message_ids | Yes | A list of message IDs to modify. | |
| add_label_ids | No | List of label IDs to add to the messages. | |
| remove_label_ids | No | List of label IDs to remove from the messages. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true; the description adds no further behavioral context (e.g., irreversibility, rate limits, or prerequisites), leaving the agent with minimal insight beyond the 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?
Single sentence, 12 words, front-loaded, and concise 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?
With full schema coverage and an output schema present, the description is adequate but lacks details on error handling per message or prerequisites like label existence, which would improve 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?
Schema description coverage is 100%, so the baseline is 3. The description adds marginal value by confirming the batch nature but does not clarify edge cases like both add and remove in one call or the requirement for label IDs to exist.
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 verb ('adds or removes'), the resource ('labels from multiple Gmail messages'), and the scope ('batch request'), clearly distinguishing it from single-message 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 implies batch usage but does not explicitly contrast with siblings like 'modify_gmail_message_labels' for single messages, nor does it provide 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.
batch_update_docBatch Update DocADestructive
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?
The description discloses atomic batch behavior and warns about index calculation errors, recommending end_of_segment=true. It adds context beyond annotations (destructiveHint=true) by explaining how to avoid pitfalls. It could be more explicit about failure handling but is generally 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?
The description is lengthy and includes a detailed recommended workflow with examples. While well-structured with sections and bold headings, it could be more concise. The information is valuable but verbose, earning a mid-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?
Given the tool's complexity (multiple operation types) and the presence of annotations and an output schema, the description covers essential aspects: atomicity, alternative tools, and a workflow to avoid errors. It is complete enough for an agent to use 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?
Schema coverage is 100%, so the schema already documents all parameters. The description provides additional context on usage patterns (e.g., end_of_segment vs index) and includes example operations, which adds value but does not systematically describe each parameter 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 executes multiple low-level document operations in a single atomic batch update. It distinguishes itself from sibling tools like update_doc_headers_footers by specifying when to use each, providing a specific verb ('batch update') and resource ('doc').
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 guides when to use this tool versus alternatives, e.g., 'For normal header/footer text, prefer update_doc_headers_footers. Only use create_header_footer here for advanced section-break layouts.' It also provides a detailed recommended workflow with phases to avoid index calculation errors.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
batch_update_formBatch Update FormADestructive
Apply batch updates to a Google Form.
Supports adding, updating, and deleting form items, as well as updating form metadata and settings. This is the primary method for modifying form content after creation.
| Name | Required | Description | Default |
|---|---|---|---|
| user_google_email | Yes | The user's Google email address. Required. | |
| form_id | Yes | The ID of the form to update. | |
| requests | Yes | List of update requests to apply. Supported request types: - createItem: Add a new question or content item - updateItem: Modify an existing item - deleteItem: Remove an item - moveItem: Reorder an item - updateFormInfo: Update form title/description - updateSettings: Modify form settings (e.g., quiz mode) |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare destructiveHint=true, and description elaborates by listing destructive actions (deleteItem). It also mentions non-destructive updates (metadata, settings). Adds context beyond annotations, such as supporting add/update/delete operations. No contradiction with 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 sentences. First sentence states core purpose. Second lists operations (some redundancy with description). Third notes primary usage. No unnecessary words, but could be slightly more structured (e.g., bullet points).
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 3 required parameters, full schema coverage, and presence of output schema, the description covers the main use case. Does not mention prerequisites like permissions, but annotations (destructiveHint) imply mutation. Sufficient for typical 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% (all parameters described in schema). The description does not add extra parameter details beyond what the schema already provides. Baseline of 3 is appropriate since schema alone is sufficient.
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: 'Apply batch updates to a Google Form.' Lists supported operations (adding, updating, deleting items; updating metadata/settings). Distinguishes from sibling tools like create_form and get_form by noting it's the 'primary method for modifying form content after creation.' Purpose is specific and well-defined.
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?
Implies usage for modifications after creation ('primary method for modifying form content after creation'). Does not explicitly exclude creation or list alternatives, but the context of sibling tools (create_form) provides clear differentiation. Lacks explicit 'when not to use' guidance, but sufficient for an AI agent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
batch_update_presentationBatch Update PresentationBDestructive
Apply batch updates to a Google Slides presentation.
| Name | Required | Description | Default |
|---|---|---|---|
| user_google_email | Yes | The user's Google email address. Required. | |
| presentation_id | Yes | The ID of the presentation to update. | |
| requests | Yes | List of update requests to apply. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate destructiveHint=true and not idempotent. The description adds no additional behavioral context beyond stating the action. It does not contradict 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 a single, concise sentence. It is front-loaded with the key action and resource, with no unnecessary words. However, it could be expanded with minimal extra context without harming conciseness.
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 updates (arbitrary requests array, destructive operation), the description is too minimal. It lacks context about typical use cases, prerequisites, or what the output contains, despite having 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 covers all 3 parameters (100%), so the baseline is 3. The description does not add any extra semantic meaning to the parameters 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 action (apply batch updates) and the resource (Google Slides presentation), distinguishing it from siblings like batch_update_doc (for documents) and batch_update_form (for forms).
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, such as batch_update_doc or update_drive_file. No prerequisites or exclusions are mentioned.
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_accessCheck Drive File Public AccessARead-onlyIdempotent
Searches for a file by name and checks if it has public link sharing enabled.
| Name | Required | Description | Default |
|---|---|---|---|
| user_google_email | Yes | The user's Google email address. Required. | |
| file_name | Yes | The name of the file to check. | |
| drive_id | No | ID of the shared drive to scope the search to. When set, the underlying files.list call uses corpora='drive' and the given driveId, which is required to reliably find files that live only in that shared drive. When None, behaviour is unchanged (default API corpora applies). |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false, idempotentHint=true, and openWorldHint=true, covering safety and idempotency. The description adds that it searches by name and checks public access, but does not clarify edge cases (e.g., multiple matches, file not found). It provides some behavioral context beyond annotations, but not comprehensively.
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 that immediately states the core purpose. It is concise and front-loaded, with no wasted words. Every part 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?
Complexity is low with 3 parameters and an output schema. The description covers the essential purpose and relies on the schema for parameter details. It could mention search behavior (e.g., exact match, scope) but for a simple check tool, it is nearly complete given the annotations and 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%, with each parameter adequately described (user_google_email as required, file_name as the name, drive_id with a detailed explanation). The description does not add new meaning beyond the schema, so a 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 the tool's action: 'Searches for a file by name and checks if it has public link sharing enabled.' It identifies the specific verb (searches, checks), resource (drive file), and outcome (public access status). This differentiates it from sibling tools like get_drive_file_permissions or get_drive_shareable_link.
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 when-to-use guidance or contrast with alternatives. It does not mention when to use this tool over get_drive_file_permissions or other sibling tools. No exclusions or prerequisites are stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
copy_drive_fileCopy Drive FileA
Creates a copy of an existing Google Drive file.
This tool copies the template document to a new location with an optional new name. The copy maintains all formatting and content from the original file.
| Name | Required | Description | Default |
|---|---|---|---|
| user_google_email | Yes | The user's Google email address. Required. | |
| file_id | Yes | The ID of the file to copy. Required. | |
| new_name | No | New name for the copied file. If not provided, uses "Copy of [original name]". | |
| parent_folder_id | No | The ID of the folder where the copy should be created. Defaults to 'root' (My Drive). | root |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare non-read-only, non-destructive, non-idempotent. Description adds that formatting and content are preserved, but lacks details on permissions or side effects beyond the openWorldHint.
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, 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?
Adequate given full schema coverage and presence of output schema; could mention error conditions or permission requirements but not critical for this 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 coverage is 100% and description does not add new parameter semantics beyond what is already in the input 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 'Creates a copy of an existing Google Drive file', specifying verb and resource. It distinguishes from siblings like create_drive_file and update_drive_file by focusing on copying.
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?
Clear context provided: copies template document to a new location with optional new name. However, no explicit when-not-to-use or comparison to alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_calendarCreate CalendarA
Creates a new secondary Google Calendar.
| Name | Required | Description | Default |
|---|---|---|---|
| user_google_email | Yes | The user's Google email address. Required. | |
| summary | Yes | The title/name of the new calendar. | |
| description | No | An optional description for the calendar. | |
| timezone | No | IANA timezone for the calendar (e.g. 'America/New_York'). |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Description adds minimal behavioral context beyond annotations. Annotations already indicate non-read-only and non-destructive nature; description confirms creation of secondary calendar but doesn't disclose permissions, side effects, or handling of duplicates.
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?
Single sentence, six words, no filler. Efficiently conveys core 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?
With output schema present, description need only explain return values minimally. However, lacks details such as the meaning of 'secondary' or required permissions, which would aid 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?
Schema covers all parameters with descriptions (100% coverage). Description adds no extra parameter meaning, so baseline score applies.
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 'new secondary Google Calendar', using specific verb and resource. This distinguishes it from sibling create tools like create_doc or 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?
No guidance on when to use this tool versus alternatives like manage_event or list_calendars. Lacks context such as prerequisites or 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.
create_docCreate 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 plain text content to insert |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint=false and destructiveHint=false. The description adds behavioral details beyond annotations: mentions document body starts at index 1, total length of a new empty doc is 2, and explains index structure. 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?
The description is well-structured: first sentence states purpose, then provides technical details and workflow. It is not overly verbose, though the technical detail about indices could be slightly compressed. Front-loads 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 complex Google Docs API context, the description provides essential creation behavior and a clear workflow for building rich documents. The presence of an output schema (context signal) means return value explanation is unnecessary, so the description is sufficiently 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 covers all 3 parameters with descriptions, providing 100% coverage. The description adds minimal extra meaning beyond mentioning 'optional initial plain text content' for the content parameter, which is already clear from 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 new Google Doc and optionally inserts initial content' with a specific verb and resource. Distinguishes from sibling tools by describing subsequent steps using batch_update_doc and inspect_doc_structure, which are also in the sibling 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 explicit workflow guidance: after creation, use batch_update_doc with end_of_segment=true, then inspect_doc_structure. This helps the agent choose the right tool for subsequent steps. However, it does not explicitly state when not to use this tool or list alternatives for creation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_drive_fileCreate Drive FileA
Creates a new file in Google Drive, supporting creation within shared drives. Accepts either direct content or a fileUrl to fetch the content from.
| Name | Required | Description | Default |
|---|---|---|---|
| user_google_email | Yes | The user's Google email address. Required. | |
| file_name | Yes | The name for the new file. | |
| content | No | If provided, the content to write to the file. | |
| folder_id | No | The ID of the parent folder. Defaults to 'root'. For shared drives, this must be a folder ID within the shared drive. | root |
| mime_type | No | The MIME type of the file. Defaults to 'text/plain'. | text/plain |
| fileUrl | No | If provided, fetches the file content from this URL. Supports file://, http://, and https:// protocols. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate a write operation (readOnlyHint=false). The description adds value by disclosing the two content input modes (direct content or fileUrl) and support for shared drives, which is not apparent from annotations alone.
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 concise sentences: first states purpose and shared drive support, second lists the two content modes. No redundancy 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?
Covers core functionality (creation, shared drives, content sources) but lacks details like prerequisites or error handling. However, output schema exists and annotations are present, so the description is fairly complete for its 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 already documents all parameters. The description mentions 'direct content or fileUrl' and 'shared drives' but does not add new parameter semantics beyond reinforcing what the schema states.
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 it creates a new file in Google Drive, supporting shared drives and two content modes. This clearly differentiates it from sibling tools like create_doc (for Google Docs) or create_drive_folder (for folders).
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 explicit guidance on when to use this tool vs alternatives (e.g., when to use create_doc for Docs). The description implies generic file creation but does not contrast with other create tools, leaving the agent to infer from context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_drive_folderCreate Drive FolderB
Creates a new folder in Google Drive, supporting creation within shared drives.
| Name | Required | Description | Default |
|---|---|---|---|
| user_google_email | Yes | The user's Google email address. Required. | |
| folder_name | Yes | The name for the new folder. | |
| parent_folder_id | No | The ID of the parent folder. Defaults to 'root'. For shared drives, use a folder ID within that shared drive. | root |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate non-read-only and non-destructive behavior. The description adds the shared drive capability but omits other behaviors like permission requirements or 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?
A single sentence with no fluff, front-loading the core action. It is efficient but could be slightly expanded without losing conciseness.
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, the description is minimal. It lacks details such as default behavior, error conditions, or permission requirements, which would enhance completeness for a simple 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 described there. The description does not add any additional meaning beyond the schema, meeting the 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 creates a new folder in Google Drive and highlights support for shared drives, distinguishing it from generic file creation tools 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?
No guidance on when to use this tool versus alternatives (e.g., 'create_drive_file' for files), nor when not to use it. Lacks context about prerequisites or conditions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_formCreate FormC
Create a new form using the title given in the provided form message in the request.
| Name | Required | Description | Default |
|---|---|---|---|
| user_google_email | Yes | The user's Google email address. Required. | |
| title | Yes | The title of the form. | |
| description | No | The description of the form. | |
| document_title | No | The document title (shown in browser tab). |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate the tool is not read-only, not destructive, not idempotent, and open world. The description adds no behavioral details beyond 'create', such as authentication needs or 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 single sentence is wordy and includes ambiguous language ('provided form message'). It could be more concise and clear, e.g., omitting the confusing phrase.
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 an output schema, the description does not need to explain return values, but it fails to mention that the form is created under the specified user email or that the title and description are direct parameters. The description omits important 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 the description adds little value. The confusing mention of 'provided form message' does not align with the schema parameters and reduces clarity.
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 creating a new form, with verb 'create' and resource 'form'. However, the phrase 'using the title given in the provided form message' is confusing and detracts from clarity, as the title is a direct parameter.
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 batch_update_form or get_form. The description does not mention any prerequisites or context for use.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_presentationCreate PresentationB
Create a new Google Slides presentation.
| Name | Required | Description | Default |
|---|---|---|---|
| user_google_email | Yes | The user's Google email address. Required. | |
| title | No | The title for the new presentation. Defaults to "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?
The description adds minimal value beyond annotations. It does not disclose side effects, permissions, or response format. Annotations indicate it's not read-only or destructive, but the description provides no additional 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?
The description is appropriately concise at one sentence. It is front-loaded with the core action. However, it could include more structured information without losing conciseness.
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 existence of an output schema, the description is too minimal. It does not explain return values, prerequisites, or how it fits among many sibling create tools.
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 both parameters. The description adds no extra meaning beyond what the schema provides, meeting the baseline but not exceeding it.
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) and the resource (a new Google Slides presentation). It distinguishes from sibling tools like create_doc or create_sheet by specifying Google 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?
No guidance is provided on when to use this tool versus alternatives. The description does not mention any context or exclusions, leaving the agent without decision criteria.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_reactionCreate ReactionC
Adds an emoji reaction to a Google Chat message.
| Name | Required | Description | Default |
|---|---|---|---|
| user_google_email | Yes | ||
| message_id | Yes | The message resource name (e.g. spaces/X/messages/Y). | |
| emoji_unicode | Yes | The emoji character to react with (e.g. 👍). |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate non-read-only, non-destructive, non-idempotent, and open world, but the description adds no behavioral context beyond stating the action. It does not disclose side effects, rate limits, or that the reaction is associated with a specific user email parameter.
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 with no wasted words, but it is too minimal. It could be slightly expanded to include basic usage hints without losing conciseness.
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 three required parameters and an output schema (not shown), the description lacks completeness. It does not mention return values, error cases, or the need for user authorization. The tool is simple but important details are missing.
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 67% (user_google_email lacks description). The description does not clarify parameter meaning or relationships, nor does it compensate for the undocumented 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 action (adds) and the resource (emoji reaction) on a specific target (Google Chat message). It is specific and distinct from sibling tools, which primarily deal with messaging or document 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?
No guidance is provided on when to use this tool versus alternatives, such as sending messages or other reactions. There is no mention of prerequisites, user authorization, or context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_script_projectCreate Script ProjectB
Creates a new Apps Script project.
| Name | Required | Description | Default |
|---|---|---|---|
| user_google_email | Yes | User's email address | |
| title | Yes | Project title | |
| parent_id | No | Optional Drive folder ID or bound container ID |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Description adds no behavioral traits beyond what annotations provide. Annotations indicate it's not read-only, not destructive, not idempotent. Description merely restates 'creates', missing context like required scopes or effect on Drive.
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?
Single sentence, to the point, no redundant information. Every word contributes to the 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?
Has output schema (not provided) and schema covers params, but description lacks context on return value or behavior in edge cases (e.g., invalid parent_id). Adequate for a simple creation tool but could be more 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 covers all 3 parameters with descriptions (100% coverage). Description offers no additional parameter insight 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?
Description clearly states it creates a new Apps Script project, with a specific verb ('creates') and resource ('App Script project'). It distinguishes from sibling tools like create_doc and create_sheet by focusing on script projects.
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 (e.g., create_doc for documents). Does not mention prerequisites, limitations, or 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.
create_sheetCreate SheetB
Creates a new sheet or duplicates an existing sheet (user_google_email: str, spreadsheet_id: str, sheet_name: Optional[str] = None, source_sheet_name: Optional[str] = None, insert_sheet_index: Optional[int] = None).
| Name | Required | Description | Default |
|---|---|---|---|
| user_google_email | Yes | ||
| spreadsheet_id | Yes | ||
| sheet_name | No | ||
| source_sheet_name | No | ||
| insert_sheet_index | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate mutation (readOnlyHint=false) and non-destructive (destructiveHint=false). The description adds no additional behavioral context beyond the basic operation, such as what happens on conflict or duplicate failure.
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 includes a lengthy function signature that repeats schema information. It could be more concise by omitting the signature.
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 lack of parameter descriptions in schema, the tool description fails to explain parameters or return value (output schema exists but not mentioned). It lacks context for correct 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 0%, so the description needed to compensate. It lists parameter names and types but provides no explanation of their meaning or behavior (e.g., source_sheet_name for duplication, insert_sheet_index for position).
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 sheet or duplicates an existing one. This distinguishes it from creating a whole spreadsheet (create_spreadsheet) and other sheet manipulation 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?
No guidance on when to use this tool over alternatives, such as when to create a new sheet vs duplicate, or prerequisites like spreadsheet existence or user access.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_spreadsheetCreate SpreadsheetC
Creates a new Google Spreadsheet.
| Name | Required | Description | Default |
|---|---|---|---|
| user_google_email | Yes | The user's Google email address. Required. | |
| title | Yes | The title of the new spreadsheet. Required. | |
| sheet_names | No | List of sheet names to create. If not provided, creates one sheet with default name. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate readOnlyHint=false and destructiveHint=false, but the description adds no behavioral context beyond the annotations. It does not mention side effects, authentication requirements, or what happens with duplicate titles.
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 with no fluff, but it lacks structure and important details. It is appropriately sized but under-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 the complexity (3 params, no output schema shown, sibling tools), the description is too sparse. It does not explain return values, default behavior for sheet names, or where the spreadsheet is created.
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 parameters are well-documented in the schema. The description adds no extra meaning beyond the schema, meeting the baseline expectation 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 'Creates a new Google Spreadsheet' clearly states the verb and resource. It distinguishes from sibling tools like create_doc or create_sheet, though 'create_sheet' could be ambiguous.
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 create_sheet or create_drive_file. No context for prerequisites or 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.
create_table_with_dataCreate 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?
Beyond annotations (which only indicate mutability but not destructive), the description explains the exact behavior: creates a table at a specific index, populates it with provided data, formats headers optionally bold. It specifies that rows must have equal length and cells must be strings. However, it does not explain error handling for invalid indices or malformed data, nor the return value (though output schema exists). Good but not exhaustive.
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, all-caps warnings, step-by-step workflow, and a detailed example. While it is somewhat verbose and repeats some instructions (e.g., 'must call inspect_doc_structure' appears twice), every sentence adds necessary guidance. The front-loading with the main purpose and critical notes is effective.
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 (6 params, dependencies on other tools, specific data formatting), the description covers all aspects: mandatory prerequisite call, index acquisition, data format rules, optional features (bold headers, tab), and post-verification with debug_table_structure. It does not explain the output, but an output schema exists. For an agent, this description is complete and 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?
Schema description coverage is 100%, but the description adds significant value: it provides an explicit example of table_data format, reiterates the index source (inspect_doc_structure total_length), explains bold_headers default and tab_id optionality. It goes beyond the schema by giving a concrete data format example and workflow integration.
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 creates a table and populates it with data in one operation. Distinguishes from sibling tools like append_table_rows (which adds rows to existing tables) and debug_table_structure (which inspects). The verb 'creates' and resource 'table with data' are 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?
Provides explicit mandatory workflow: must call inspect_doc_structure first, use its total_length as index, format data as 2D list, and optionally debug after. Gives when-to-use (single reliable operation for table creation) and when-not-to-use (never guess index). Clearly states prerequisites and alternative verification steps.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_versionCreate VersionA
Creates a new immutable version of a script project.
Versions capture a snapshot of the current script code. Once created, versions cannot be modified.
| Name | Required | Description | Default |
|---|---|---|---|
| user_google_email | Yes | User's email address | |
| script_id | Yes | The script project ID | |
| description | No | Optional description for this version |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations provide readOnlyHint=false, destructiveHint=false, idempotentHint=false. The description adds that versions are immutable and cannot be modified, which is behavioral context beyond 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 three short sentences, front-loaded with the main action, 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?
For a simple tool with full schema coverage and an output schema, the description covers the essential behavior: creates an immutable version. 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% with descriptions for each parameter. The tool description adds no additional meaning beyond what the schema already provides, so baseline score of 3 applies.
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 a new immutable version of a script project, using a specific verb and resource. It distinguishes itself from sibling tools like create_script_project or get_version by focusing on version 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?
No explicit guidance on when to use this tool versus alternatives. Usage is implied from the purpose, but no when-not or alternative tools are mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
debug_docs_runtime_infoDebug Docs Runtime InfoARead-onlyIdempotent
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?
Annotations already indicate read-only, non-destructive, idempotent behavior. The description adds diagnostic and temporary nature, enhancing transparency beyond 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?
Two concise sentences front-load purpose and context 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 presence of output schema and rich annotations, the description adequately covers purpose and usage. It could benefit from specifying what runtime info is returned, but is sufficient for a simple diagnostic 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 description provides no explanation for the required parameter user_google_email, despite schema coverage being 0%. This is a critical 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?
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 like debug_table_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?
The description explains it is temporary and intended to verify which code checkout the server has loaded, providing clear context for when to use it. However, it does not explicitly mention when not to use it or alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
debug_table_structureDebug Table StructureARead-onlyIdempotent
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?
Annotations declare readOnlyHint=true, destructiveHint=false, idempotentHint=true. The description adds behavioral details beyond annotations by explaining what the tool reveals (dimensions, cell coordinates, content, insertion indices). It also aligns perfectly with annotations, with no contradiction.
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 labeled sections (ESSENTIAL DEBUGGING TOOL, USE THIS IMMEDIATELY WHEN, WHAT THIS SHOWS YOU, HOW TO READ THE OUTPUT, WORKFLOW INTEGRATION). While it is relatively long, every sentence adds value and the structure aids readability. Slightly verbose but not excessive.
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 an output schema exists, the description compensates by explaining how to interpret the output (dimensions, position, current_content, insertion_index). It covers common scenarios and integrates with other tools (populate_existing_table). Annotations provide safety guarantees, making the tool fully 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?
The input schema has 100% coverage with descriptions for all three parameters. The description does not add further semantic information about the parameters beyond what is already in the schema. 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 the tool's purpose: debugging table structure. It uses specific verbs like 'inspect' and 'debug', and explicitly lists conditions when it should be used, distinguishing it from sibling tools that deal with document structure or sheet 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?
The description provides explicit guidelines on when to use the tool: immediately when tables don't work, for planning before populating, and for debugging failures. It also integrates with a workflow (After creating, Before populating, After population fails, When debugging), leaving no ambiguity about usage context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_script_projectDelete Script ProjectADestructive
Deletes an Apps Script project.
This permanently deletes the script project. The action cannot be undone.
| Name | Required | Description | Default |
|---|---|---|---|
| user_google_email | Yes | User's email address | |
| script_id | Yes | The script project ID to delete |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate destructive behavior (destructiveHint=true). The description adds explicit emphasis on permanence ('permanently deletes', 'cannot be undone'), providing useful behavioral context beyond the 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?
Two concise sentences, no wasted words. The critical information (what it does, permanence, irreversibility) 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?
For a simple deletion tool with two well-documented parameters and clear annotations, the description covers the essential points. It does not mention the return value, but an output schema exists. Slight room for improvement but 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 coverage is 100% with clear parameter descriptions. The tool description adds no additional meaning to the parameters, but the baseline of 3 is appropriate since the schema already documents them 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 ('Deletes') and the resource ('an Apps Script project'). It distinguishes from sibling tools (e.g., create, list, get) which perform different 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?
No guidance on when to use this tool versus alternatives. It does not mention prerequisites, when not to use, or suggest any alternative tools for non-destructive operations.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
download_chat_attachmentDownload Chat AttachmentA
Downloads an attachment from a Google Chat message and saves it to local disk.
In stdio mode, returns the local file path for direct access. In HTTP mode, returns a temporary download URL (valid for 1 hour).
| Name | Required | Description | Default |
|---|---|---|---|
| user_google_email | Yes | ||
| message_id | Yes | The message resource name (e.g. spaces/X/messages/Y). | |
| attachment_index | No | Zero-based index of the attachment to download (default 0). |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations provide limited hints (not read-only, not destructive). The description adds valuable behavioral details: file path vs temporary URL based on mode, and URL expiration. No contradiction with 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?
Two sentences, front-loaded with main purpose, second sentence adds essential mode details. No unnecessary words 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 has 3 parameters with schema descriptions and an output schema, the description adequately covers behavior and return values. Lacks details on authorization requirements or edge cases, 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?
Input schema covers 67% of parameters with descriptions. The tool description does not add any parameter-specific meaning beyond what the schema provides. The user_google_email parameter lacks description both in schema and description, so baseline score applies.
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 downloads an attachment from a Google Chat message and saves it to local disk. The verb 'download' and resource 'attachment from a Google Chat message' are specific and distinct from sibling tools like get_gmail_attachment_content or get_drive_file_download_url.
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 clarifies mode-specific behavior (stdio vs HTTP) and mentions URL validity duration. However, it does not explicitly state when to use this tool over alternatives, though the tool name and context make the usage clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
draft_gmail_messageDraft 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'. Optional 'content_id' (string) makes the attachment inline-rendered: it lands in a multipart/related part with `Content-ID: <content_id>` and `Content-Disposition: inline`, and the HTML body can reference it via `<img src="cid:<content_id>">` (RFC 2392). Without `content_id` the attachment is a regular multipart/mixed attachment. | |
| 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?
Annotations indicate non-readOnly and non-destructive behavior. The description aligns with 'Creates a draft' but adds no behavioral context beyond what annotations already provide. No contradiction.
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, front-loaded with the core action. 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 output schema exists and schema coverage is 100%, the description covers the main purpose and key features. It is slightly brief for a 15-parameter tool, but sufficient for an agent to understand the tool's role.
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. The description adds high-level context (e.g., 'with optional attachments', 'Send As feature') but does not detail individual parameters. 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 it creates a draft email in Gmail, supports new and reply drafts with attachments, and mentions the Send As feature. It is distinct from siblings like '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 emails but does not explicitly state when to use this tool versus alternatives (e.g., send_gmail_message for sending). No exclusions or when-not-to-use guidance is provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
export_doc_to_pdfExport Doc to PDFA
Exports a Google Doc to PDF format and saves it to Google Drive.
| Name | Required | Description | Default |
|---|---|---|---|
| user_google_email | Yes | User's Google email address | |
| document_id | Yes | ID of the Google Doc to export | |
| pdf_filename | No | Name for the PDF file (optional - if not provided, uses original name + "_PDF") | |
| folder_id | No | Drive folder ID to save PDF in (optional - if not provided, saves in root) |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate a write operation (readOnlyHint=false). The description adds that the tool saves to Google Drive, but omits details on behavior if the file already exists, required permissions, or error conditions. With annotations present, the description provides minimal additional 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?
The description is a single, efficient sentence with no wasted words. It conveys the essential action, though it could be slightly more structured (e.g., listing steps). Overall, it is appropriately 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 that an output schema exists (not shown but indicated) and the parameters are fully described in the schema, the description is sufficient for basic usage. However, it lacks guidance on edge cases (e.g., non-existent doc), preventing a perfect score.
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 four parameters, so the schema already fully documents each parameter. The description adds no extra semantic meaning beyond what is in the schema, which is adequate but does not exceed the 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 verb 'exports', the resource 'Google Doc', the output format 'PDF', and the destination 'saves to Google Drive'. It distinguishes this tool from siblings by specifying a unique conversion and save operation not covered by other 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 does not provide explicit when-to-use or when-not-to-use guidance, nor does it suggest alternatives. The purpose is clear, but no usage boundaries or exclusions are given, leaving the agent to infer context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
find_and_replace_docFind and Replace DocADestructive
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?
Annotations already provide destructiveHint true and idempotentHint false. The description adds context that this is 'the safest way to update specific text' and explains why (no index errors). It does not contradict annotations and provides additional behavioral insight beyond the 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?
The description is short, well-structured with a clear lead sentence and bullet points for use cases. Every sentence adds value, and the content is front-loaded with the core 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?
Given the tool has 6 parameters (4 required), full schema coverage, annotations, and an output schema, the description covers purpose, usage guidance, and safety considerations. It explains when to use alternatives and does not need to elaborate on return values since an output schema exists. The description is 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 the schema already describes all parameters. The description adds meaning by explaining the use case for replace_text and find_text (e.g., placeholder replacement) and reinforces that no indices are needed, which informs the agent about parameter usage without repeating schema 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 finds and replaces text in a Google Doc and emphasizes 'No index calculation required.' It uses specific verbs and identifies the resource, distinguishing itself from sibling tools like batch_update_doc and modify_doc_text by highlighting the advantage of not needing indices.
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 the tool with three bullet-point examples (e.g., replacing placeholders) and provides guidance on when to use alternatives: 'For building documents from scratch, consider inserting text with unique placeholders via batch_update_doc, then using this tool to replace them.'
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
format_sheet_rangeFormat 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?
Annotations indicate destructiveHint=false, readOnlyHint=false. The description adds that it applies formatting (mutation, not destructive), specifies color hex format, number format types, and default sheet behavior. This adds helpful context beyond annotations, though it does not mention idempotency or 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 three sentences, each sentence adds value. It is front-loaded with the main action and key details. 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?
With 13 parameters, output schema present, and annotations, the description covers the tool's primary purpose and key formatting details. It does not discuss error cases or return values (output schema covers returns). Reasonably complete for a 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 each parameter is documented. The description adds general context on colors and number formats but does not elaborate on each parameter beyond the schema. Baseline 3 is appropriate as the description provides some added value but not extensive.
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 and lists specific formatting types (colors, number formats, text wrapping, alignment, text styling). This distinguishes it from siblings like modify_sheet_values (changes values) and manage_conditional_formatting (conditional rules).
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 explicit guidance on when to use this tool versus alternatives. It mentions default sheet behavior but lacks context on when to prefer formatting over other sheet manipulation tools. Minimal guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
generate_trigger_codeGenerate Trigger CodeARead-onlyIdempotent
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?
Annotations already declare readOnlyHint=true, destructiveHint=false, and idempotentHint=true, indicating it does not modify state. The description adds valuable context beyond annotations by explaining the API limitation and that it generates code rather than executing 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?
Description is two sentences, front-loading the purpose. Every sentence adds value: first states what the tool does, second provides necessary context. 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 (context indicates it exists), the description does not need to explain return values. It adequately covers the tool's purpose, why it exists, and the constraint (cannot create triggers via API). Complete for a code generation 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 detailed descriptions for each parameter, including enums and rules. The description does not add additional meaning beyond the schema, so a 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?
Description clearly states it 'Generates Apps Script code for creating triggers', using a specific verb and resource. It distinguishes from sibling tools because no other tool generates code – they directly manipulate resources or run functions.
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 reason for using this tool: 'The Apps Script API cannot create triggers directly - they must be created from within Apps Script itself.' This provides context on when to use it, though it does not explicitly mention when not to use or alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_contactGet ContactARead-onlyIdempotent
Get detailed information about a specific contact.
| Name | Required | Description | Default |
|---|---|---|---|
| user_google_email | Yes | The user's Google email address. Required. | |
| contact_id | Yes | The contact ID (e.g., "c1234567890" or full resource name "people/c1234567890"). |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, destructiveHint, and idempotentHint, so the safety profile is clear. The description adds 'get detailed information', which is consistent but does not disclose additional behavioral traits beyond what annotations provide.
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 that gets straight to the point. It is front-loaded with the key action and resource, 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 presence of an output schema and annotations covering behavior, the description is fairly complete for a simple getter. It does not mention error conditions or the need for both parameters, but the schema covers that.
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 both parameters described. The description does not add 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 the verb 'get' and the resource 'detailed information about a specific contact', which distinguishes it from sibling tools like 'list_contacts' and 'search_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 provides no guidance on when to use this tool versus alternatives such as 'list_contacts' or 'search_contacts'. Context signals and sibling tools suggest many contact-related tools, but the description lacks explicit usage context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_contact_groupGet Contact GroupARead-onlyIdempotent
Get details of a specific contact group including its members.
| Name | Required | Description | Default |
|---|---|---|---|
| user_google_email | Yes | The user's Google email address. Required. | |
| group_id | Yes | The contact group ID. | |
| max_members | No | Maximum number of members to return (default: 100, max: 1000). |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false, idempotentHint=true, and openWorldHint=true. The description 'Get details' aligns with these but adds no additional behavioral context beyond what annotations provide. Since annotations cover the safety profile, a baseline score of 3 is appropriate.
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, clear sentence with no redundant words. Every word adds value, 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?
Given the tool's low complexity (3 parameters, all described, output schema exists) and the presence of comprehensive annotations, the description adequately completes the picture. The output schema and annotations fill in any remaining 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% – all three parameters (user_google_email, group_id, max_members) have descriptions in the schema. The description adds no extra meaning or clarification beyond the schema, so baseline score of 3 applies.
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 'get' and resource 'contact group' with the scope 'including its members'. It distinguishes from sibling tools like 'get_contact' (gets a single contact) and 'list_contact_groups' (lists groups without 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?
The description provides no guidance on when to use this tool versus alternatives. It does not mention conditions, prerequisites, or exclusions, leaving agents to infer from sibling names alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_doc_as_markdownGet Doc as MarkdownARead-onlyIdempotent
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?
Annotations already declare safety (readOnly, idempotent). Description adds value by detailing output format (clean Markdown), formatting preservation, and comment anchor text context. 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 sentences front-loading purpose, then comparison, then comment detail. No fluff, 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?
With full schema coverage, annotations, and output schema, the description is complete. Explains output format, sibling distinction, and comment behavior adequately.
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 context for comment parameters by explaining anchor text preservation and default behavior, slightly improving beyond schema alone.
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 a Google Doc and returns Markdown, distinguishes from get_doc_content by specifying it preserves formatting and includes optional comments.
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 contrasts with get_doc_content for plain text, explaining when to use this tool. Provides details on comment modes but lacks explicit '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.
get_doc_contentGet Doc ContentARead-onlyIdempotent
Retrieves content of a Google Doc or a Drive file (like .docx) identified by document_id.
Native Google Docs: Fetches content via Docs API.
Office files (.docx, etc.) stored in Drive: Downloads via Drive API and extracts text.
| Name | Required | Description | Default |
|---|---|---|---|
| user_google_email | Yes | User's Google email address | |
| document_id | Yes | ID of the Google Doc (or full URL) | |
| 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?
Annotations already declare readOnlyHint=true, destructiveHint=false, idempotentHint=true. The description adds valuable behavioral context by explaining the different API calls based on file type (Docs API vs Drive API), which is beyond the annotations. 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?
Two succinct sentences with a bullet point for key differentiation. Every sentence adds value and is front-loaded. No unnecessary words or 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?
With an output schema present, the description does not need to explain return values. It covers the two file types and API handling, which is sufficient for this complexity. Minor gap: missing mention of potential limitations like file size or error conditions, but these may be covered in output schema or annotations.
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 does not add detail beyond the schema for parameters like user_google_email or suggestions_view_mode, but it mentions document_id in context. The schema already provides enum descriptions, so the description adds minimal 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 it retrieves content of Google Docs or Drive files (e.g., .docx) and distinguishes the handling via Docs API vs Drive API. This differentiates it from siblings like get_doc_as_markdown or get_drive_file_content, providing clear 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 implies usage for retrieving document content but does not explicitly state when to use it over alternatives like get_doc_as_markdown. There is no mention of exclusions or context for when not to use it, leaving the agent to infer based on file type.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_drive_file_contentGet Drive File ContentARead-onlyIdempotent
Retrieves the content of a specific Google Drive file by ID, supporting files in shared drives.
• Native Google Docs, Sheets, Slides → exported as text / CSV. • Office files (.docx, .xlsx, .pptx) → unzipped & parsed with std-lib to extract readable text. • PDFs → text extracted with pypdf when possible; scanned/image-only PDFs fall back to a download hint. • Images → returned as base64 with MIME metadata for multimodal clients. • Any other file → downloaded; tries UTF-8 decode, else notes binary.
| Name | Required | Description | Default |
|---|---|---|---|
| user_google_email | Yes | The user’s Google email address. | |
| file_id | Yes | Drive file ID. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide readOnlyHint, destructiveHint, idempotentHint, and openWorldHint. The description adds significant behavioral details: exporting native docs as text/CSV, unzipping and parsing Office files, PDF text extraction with fallbacks, base64 encoding for images, and handling for other files. This goes well beyond annotations and is complete.
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: one opening sentence followed by clear bullet points. It is front-loaded with the main purpose and then structured logically by file type. No redundant information; every sentence earns its place. Ideal length given the 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 complexity (multiple file types with different handling) and the presence of an output schema (context signals indicate it exists), the description covers all necessary cases. It explains fallbacks and edge cases (e.g., image-only PDFs) and handles all file categories. 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?
Both parameters have descriptions in the input schema (100% coverage). The description does not add any additional meaning or usage details about the parameters (e.g., how to obtain file_id or user_google_email). According to the rubric, when schema coverage is high (>80%), baseline is 3. No extra value is added.
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 the content of a specific Google Drive file by ID, and explicitly lists how different file types (native Google Docs, Office files, PDFs, images, others) are handled. This distinguishes it from siblings like get_doc_content (specific to Google Docs) or get_gmail_attachment_content (Gmail attachments), providing a 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?
The description implies usage for any Drive file and details per-type behavior, but does not explicitly state when to use this tool versus alternatives like get_doc_as_markdown, get_drive_file_download_url, or get_gmail_attachment_content. The lack of explicit when-to-use or when-not-to-use guidance lowers the score, though the context is clear.
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_urlGet Drive File Download URLARead-onlyIdempotent
Downloads a Google Drive file and saves it to local disk.
In stdio mode, returns the local file path for direct access. In HTTP mode, returns a temporary download URL (valid for 1 hour).
For Google native files (Docs, Sheets, Slides), exports to a useful format:
Google Docs -> PDF (default) or DOCX if export_format='docx'
Google Sheets -> XLSX (default), PDF if export_format='pdf', or CSV if export_format='csv'
Google Slides -> PDF (default) or PPTX if export_format='pptx'
For other files, downloads the original file format.
| Name | Required | Description | Default |
|---|---|---|---|
| user_google_email | Yes | The user's Google email address. Required. | |
| file_id | Yes | The Google Drive file ID to download. | |
| export_format | No | Optional export format for Google native files. Options: 'pdf', 'docx', 'xlsx', 'csv', 'pptx'. If not specified, uses sensible defaults (PDF for Docs/Slides, XLSX for Sheets). For Sheets: supports 'csv', 'pdf', or 'xlsx' (default). |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Discloses mode-dependent behavior (stdio vs HTTP), time limit on temporary URL (1 hour), and specifics of export formats for Google native files. Adds significant value beyond annotations, which already indicate safe read-only 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?
Well-structured and front-loaded with the main action, followed by mode differences and native file handling. Every sentence adds value with no 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?
Fully explains the tool's behavior, return types, export logic, and edge cases. Output schema exists but description doesn't need to repeat return values; it covers all necessary context 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%, so baseline is 3. Description adds meaningful context for export_format, including defaults per file type and valid options, which helps the agent select correct parameter values.
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 downloads a Google Drive file to local disk, with specific behavior for native vs other files. Distinguishes from siblings by detailing the download mechanism and export options.
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 for when to use (downloading files) and details export formats for different file types. Lacks explicit when-not-to-use or alternative tools, but the context is sufficient for an agent to infer usage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_drive_file_permissionsGet Drive File PermissionsARead-onlyIdempotent
Gets detailed metadata about a Google Drive file including sharing permissions, parent folder IDs, ownership, and lifecycle timestamps.
| Name | Required | Description | Default |
|---|---|---|---|
| user_google_email | Yes | The user's Google email address. Required. | |
| file_id | Yes | The ID of the file to check permissions for. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false, idempotentHint=true, openWorldHint=true, providing strong behavioral signals. The description adds valuable context about the specific metadata returned (permissions, parent IDs, ownership, timestamps), which is consistent with annotations. No contradictions and no missing disclosures beyond what annotations provide.
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 of 18 words, front-loaded with the tool's purpose. No redundant or extraneous information. Every word earns its place, making it highly efficient for an agent 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 does not need to detail return values. It covers the core functionality, and the annotations fully cover behavioral traits. With 2 well-documented parameters, complete annotations, and output schema present, there are no gaps in information needed for the agent to understand the tool's 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%: both parameters (user_google_email, file_id) have clear descriptions in the schema. The description does not add extra information about parameters beyond what the schema already provides. According to guidelines, baseline of 3 is appropriate when schema covers all 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 tool 'Gets detailed metadata about a Google Drive file including sharing permissions, parent folder IDs, ownership, and lifecycle timestamps.' The verb 'Gets' and resource 'detailed metadata' are specific, and the listed contents distinguish it from sibling tools like 'check_drive_file_public_access' (more narrow) and 'manage_drive_access' (write operation).
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. Given siblings like 'check_drive_file_public_access' for a specific check and 'manage_drive_access' for modifications, explicit usage context would help the agent select correctly. No when/when-not/exclusions mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_eventsGet EventsARead-onlyIdempotent
Retrieves events from a specified Google Calendar. Can retrieve a single event by ID or multiple events within a time range. You can also search for events by keyword by supplying the optional "query" param.
| Name | Required | Description | Default |
|---|---|---|---|
| user_google_email | Yes | The user's Google email address. Required. | |
| calendar_id | No | 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`. | primary |
| event_id | No | The ID of a specific event to retrieve. If provided, retrieves only this event and ignores time filtering parameters. | |
| time_min | No | 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. | |
| time_max | No | 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. | |
| max_results | No | The maximum number of events to return. Defaults to 25. Ignored if event_id is provided. | |
| query | No | A keyword to search for within event fields (summary, description, location). Ignored if event_id is provided. | |
| detailed | No | Whether to return detailed event information including description, location, attendees, and attendee details (response status, organizer, optional flags). Defaults to False. | |
| include_attachments | No | 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. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Description explains parameter precedence (event_id overrides time parameters) and default behavior (time_min defaults to current time). Annotations already provide readOnlyHint and idempotentHint, and description is consistent, adding context on parameter interactions.
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, concise, and 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?
Covers main use cases and parameter interactions. Output schema exists, so return value details are handled. Could mention pagination limits, but max_results parameter covers that.
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 detailed descriptions for all parameters. Tool description adds context about overall behavior (e.g., retrieval modes) but does not significantly enhance 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?
Description clearly states 'Retrieves events from a specified Google Calendar' and specifies two modes: single event by ID or multiple events within a time range, plus keyword search. This distinguishes it from sibling tools like list_calendars or manage_event.
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 when to use event_id vs time range vs query, providing clear guidance on parameter usage. Does not explicitly exclude use for writing or modifying events, but annotations already indicate read-only nature.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_formGet FormCRead-onlyIdempotent
Get a form.
| Name | Required | Description | Default |
|---|---|---|---|
| user_google_email | Yes | The user's Google email address. Required. | |
| form_id | Yes | The ID of the form to retrieve. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate read-only, non-destructive, idempotent behavior. The description adds no additional behavioral context (e.g., what happens if form doesn't exist, permissions needed).
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 (3 words) but lacks necessary context to be useful. It is under-specified rather than efficiently 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?
Despite rich annotations and a full schema, the description fails to mention what the tool returns (e.g., form definition vs. responses) or any additional context needed for effective 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?
The input schema fully describes both parameters with 100% coverage. The description adds no extra meaning beyond the schema, so baseline score of 3 applies.
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 'Get a form.' clearly states the verb and resource, but it does not differentiate from sibling tools like 'get_form_response' or 'get_doc_content'. It essentially restates the name/title.
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, or any contextual exclusions. The description lacks usage direction entirely.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_form_responseGet Form ResponseBRead-onlyIdempotent
Get one response from the form.
| Name | Required | Description | Default |
|---|---|---|---|
| user_google_email | Yes | The user's Google email address. Required. | |
| form_id | Yes | The ID of the form. | |
| response_id | Yes | The ID of the response to retrieve. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and non-destructive behavior. The description adds no additional behavioral traits (e.g., rate limits, permission details). It does not contradict annotations, but it also does not add value beyond them.
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, clear sentence that immediately conveys the tool's purpose with no extraneous words. It is perfectly concise 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 existence of an output schema and strong annotations, the description is sufficient for a simple read operation. However, it could mention that the response is retrieved by its ID, which is implied by the parameter name but not explicitly stated in the description.
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 100% of parameters with clear descriptions. The tool description adds no new information about parameters, so the 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 the verb 'Get' and the resource 'one response from the form,' distinguishing it from the sibling tool 'list_form_responses' which retrieves multiple responses. However, it does not elaborate on what a response contains, which could add clarity.
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 siblings like 'list_form_responses'. It does not mention prerequisites or when not to use it, leaving the agent to infer from the tool name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_gmail_attachment_contentGet Gmail Attachment ContentA
Downloads an email attachment and saves it to local disk.
In stdio mode, returns the local file path for direct access. In HTTP mode, returns a temporary download URL (valid for 1 hour). May re-fetch message metadata to resolve filename and MIME type.
| Name | Required | Description | Default |
|---|---|---|---|
| message_id | Yes | The ID of the Gmail message containing the attachment. | |
| attachment_id | Yes | The ID of the attachment to download. | |
| user_google_email | Yes | The user's Google email address. Required. | |
| return_base64 | No | When True, includes the full attachment as a standard base64 string in the response (in addition to any file path or download URL). Useful for sandboxed clients that cannot reach localhost download URLs or the MCP server's local file paths (e.g. containerized agents with network allowlists). The returned base64 uses the standard alphabet, so it can be passed directly to tools like ``draft_gmail_message`` that expect standard (not URL-safe) base64. Default False preserves the existing behavior and response size. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations are minimal, but the description adds behavioral context like 'May re-fetch message metadata to resolve filename and MIME type', which goes beyond the annotations. 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 sentences, front-loaded with the main action, followed by mode-specific behavior and a note on metadata re-fetching. 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?
Output schema exists, so return values are covered. Description explains modes and base64 option. Could mention exact response format more explicitly, but sufficient for 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?
With 100% schema coverage, baseline is 3. The description adds meaningful context for return_base64, explaining its utility for sandboxed clients, which 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 states 'Downloads an email attachment and saves it to local disk' with a specific verb and resource, clearly distinguishing it from siblings like get_gmail_message_content or 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?
The description explains when to use stdio vs HTTP modes and the return_base64 parameter for sandboxed clients, but does not explicitly state when not to use this tool or list 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_contentGet Gmail Message ContentARead-onlyIdempotent
Retrieves the full content (subject, sender, recipients, body) of a specific Gmail message.
| Name | Required | Description | Default |
|---|---|---|---|
| message_id | Yes | The unique ID of the Gmail message to retrieve. | |
| user_google_email | Yes | The user's Google email address. Required. | |
| 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?
Annotations already declare readOnlyHint, destructiveHint, idempotentHint, and openWorldHint. The description adds detail on returned fields (subject, sender, recipients, body) but no further behavioral traits like rate limits or side effects. With strong annotations, this is adequate but not enhanced.
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?
Single, front-loaded sentence with no extraneous words. Every element is essential and directly informs the agent's decision.
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 simple tool with output schema present, the description sufficiently covers the return structure. It could mention required parameters but schema already handles that. Overall, complete for a read operation.
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 description adds no extra meaning beyond what the input schema provides. Baseline of 3 is appropriate as schema fully documents 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 retrieves the full content of a specific Gmail message, using specific verbs and resources. It distinguishes well from sibling tools like get_gmail_attachment_content or batch variants.
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 retrieving a single message's content, providing clear context. However, it lacks explicit when-not-to-use guidance or alternatives, though the sibling list suggests other tools for different scopes.
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_batchGet Gmail Messages Content BatchARead-onlyIdempotent
Retrieves the content of multiple Gmail messages in a single batch request. Supports up to 25 messages per batch to prevent SSL connection exhaustion.
| Name | Required | Description | Default |
|---|---|---|---|
| message_ids | Yes | List of Gmail message IDs to retrieve (max 25 per batch). | |
| user_google_email | Yes | The user's Google email address. Required. | |
| format | No | Message format. "full" includes body, "metadata" only headers. | 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?
Adds batch size limit and rationale beyond annotations. Annotations already indicate read-only, idempotent, non-destructive, which are consistent.
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-loaded with core 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?
With output schema and clear annotations, description covers purpose, limit, and rationale. Complete for a batch retrieval operation.
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 100%, so baseline 3. Description adds context for limit but does not elaborate on parameter details 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 retrieval of multiple Gmail messages in batch, with 25 limit. Distinguishes from siblings like get_gmail_message_content (single) and get_gmail_threads_content_batch (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?
Implies batch for efficiency and preventing SSL exhaustion. Could explicitly contrast with single message retrieval, 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.
get_gmail_thread_contentGet Gmail Thread ContentARead-onlyIdempotent
Retrieves the complete content of a Gmail conversation thread, including all messages.
Optionally also returns structured ownership analysis so a caller can determine who sent the last message and who owes whom a response without re-parsing the formatted string or making a second tool call.
| Name | Required | Description | Default |
|---|---|---|---|
| thread_id | Yes | The unique ID of the Gmail thread to retrieve. | |
| user_google_email | Yes | The user's Google email address. Required. | |
| 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 |
| include_analysis | No | When True, the return value is a dict with both the formatted thread content AND structured ownership analysis (last sender, ball-in-court verdict, per-sender message counts, participants). Defaults to False, in which case the existing string return shape is preserved. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and non-destructive. The description adds valuable behavioral context about the optional ownership analysis and explains the body_format parameter's behavior. No contradictions with 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 two sentences, front-loading the main action. It is concise but could be slightly more structured; however, it efficiently conveys the core functionality and optional feature.
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 a full output schema and rich annotations, the description adequately covers the tool's behavior. It explains the optional analysis and body format options, though it could be more explicit about the default return type (string vs dict).
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 all parameters. The description adds extra context for include_analysis by mentioning its purpose and benefit, but does not elaborate on other parameters beyond what the schema provides. 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 it retrieves complete thread content with all messages and optionally provides ownership analysis. However, it does not explicitly specify that it is for a single thread, which could be inferred from the parameter but not stated; this lack of specificity slightly reduces clarity given siblings like get_gmail_threads_content_batch.
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 (e.g., batch tools, single message retrieval). It hints at the analysis feature as a benefit but does not explicitly state when to choose this over other tools or 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.
get_gmail_threads_content_batchGet Gmail Threads Content BatchARead-onlyIdempotent
Retrieves the content of multiple Gmail threads in a single batch request. Supports up to 25 threads per batch to prevent SSL connection exhaustion.
| Name | Required | Description | Default |
|---|---|---|---|
| thread_ids | Yes | A list of Gmail thread IDs to retrieve. The function will automatically batch requests in chunks of 25. | |
| user_google_email | Yes | The user's Google email address. Required. | |
| 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?
Annotations already indicate read-only, idempotent, non-destructive, and open-world. The description adds context about batching limit and SSL connection exhaustion, which is beyond annotations. Does not contradict annotations. Could mention error handling or response format, 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?
Two clear, front-loaded sentences with no wasted words. States purpose and limit efficiently.
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 retrieval, multiple threads) and presence of output schema, the description covers the essential purpose and key constraint. Missing explicit mention of error handling or authentication, but with good annotations and schema, it is sufficiently 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 parameters are fully described in schema. The description adds no extra semantic meaning beyond the schema; it only provides a usage constraint (batch limit) which is not parameter-specific. 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 retrieves content of multiple Gmail threads in batch, using specific verb 'retrieves' and resource 'Gmail threads'. It distinguishes from siblings like get_gmail_thread_content (single thread) and get_gmail_messages_content_batch (messages vs 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 mentions a limit of 25 threads per batch with a rationale (SSL exhaustion), providing some usage guidance. However, it does not explicitly state when to use this tool versus fetching individual threads, though the name and context imply batching is preferable for multiple threads.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_messagesGet MessagesBRead-onlyIdempotent
Retrieves messages from a Google Chat space.
| Name | Required | Description | Default |
|---|---|---|---|
| user_google_email | Yes | ||
| space_id | Yes | ||
| page_size | No | ||
| order_by | No | createTime desc | |
| message_filter | No | Optional filter string using the Chat API filter syntax. Supports createTime and thread.name. Examples: 'createTime > "2026-03-18T00:00:00-03:00"' 'createTime > "2026-03-18T00:00:00-03:00" AND createTime < "2026-03-19T00:00:00-03:00"' 'thread.name = spaces/X/threads/Y' |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations fully cover the behavioral traits: readOnlyHint=true, destructiveHint=false, idempotentHint=true, openWorldHint=true. The description adds 'Retrieves messages from a Google Chat space,' which is consistent and clarifies the scope but does not introduce new behavioral information beyond 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 a single sentence, which is very brief. While there is no wasted text, it is too short to provide necessary context for a tool with 5 parameters. A bit more structure (e.g., listing key parameters or usage) would improve it.
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 number of parameters, siblings, and the existence of an output schema, the description is too minimal. It does not mention pagination (page_size), ordering (order_by), or filtering capabilities, which are important for correct invocation. The output schema may cover return values, but the description lacks essential context for 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 only 20% (only 'message_filter' has a description). The tool description itself does not describe any parameter semantics, leaving most parameters (user_google_email, space_id, page_size, order_by) undocumentated in both the description and schema. The description fails to compensate for this 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?
The description clearly states 'Retrieves messages from a Google Chat space.' The verb 'retrieves' is specific, and the resource 'messages from a Google Chat space' distinguishes it from siblings like 'search_messages' (which searches across spaces) and 'list_spaces' (which lists spaces).
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. It does not mention that this is for retrieving messages from a specific space (requiring space_id) or when to prefer 'search_messages' for broader queries. No suggestions or exclusions are given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_pageGet PageBRead-onlyIdempotent
Get details about a specific page (slide) in a presentation.
| Name | Required | Description | Default |
|---|---|---|---|
| user_google_email | Yes | The user's Google email address. Required. | |
| presentation_id | Yes | The ID of the presentation. | |
| page_object_id | Yes | The object ID of the page/slide to retrieve. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false, idempotentHint=true, and openWorldHint=true. The description adds no behavioral details beyond the annotations—e.g., it does not mention that 'details' may include slide notes, elements, or layout, nor does it disclose any rate limits or authentication 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?
The description is a single concise sentence that front-loads the core purpose. However, it could be more informative without sacrificing conciseness, such as hinting at what 'details' includes.
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 does not need to explain return values. However, the tool has three required parameters and no nested objects, yet the description omits any context about the relationship between pages and presentations or how to identify a specific page. It is minimally adequate but not richly informative.
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 input schema fully describes all three parameters. The description does not add any meaning beyond the schema; for instance, it does not explain how to obtain the page_object_id or the user_google_email. 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 specifies the verb 'Get' and the resource 'details about a specific page (slide) in a presentation.' It distinguishes itself from sibling tools like get_presentation (which gets the full presentation) and get_page_thumbnail (which gets a thumbnail image), 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?
The description provides no guidance on when to use this tool versus alternatives, such as get_presentation or list_presentation_comments. It does not mention prerequisites, limitations, or situations where other tools would be more appropriate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_page_thumbnailGet Page ThumbnailBRead-onlyIdempotent
Generate a thumbnail URL for a specific page (slide) in a presentation.
| Name | Required | Description | Default |
|---|---|---|---|
| user_google_email | Yes | The user's Google email address. Required. | |
| presentation_id | Yes | The ID of the presentation. | |
| page_object_id | Yes | The object ID of the page/slide. | |
| thumbnail_size | No | Size of thumbnail ("LARGE", "MEDIUM", "SMALL"). Defaults to "MEDIUM". | MEDIUM |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate read-only, non-destructive, idempotent behavior. Description adds no additional behavioral context (e.g., authentication requirements, rate limits, or how thumbnails are generated).
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?
Single, concise sentence that is front-loaded with the main action and resource. 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?
With output schema assumed to cover return values and annotations providing behavioral hints, the description is mostly complete. Could hint at the generated nature of the thumbnail, 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 coverage is 100% with descriptions for all parameters. Description does not add further meaning beyond what the schema provides, so 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 ('Generate'), the resource ('thumbnail URL'), and the context ('for a specific page (slide) in a presentation'). It distinguishes from siblings like 'get_page' by specifying thumbnail generation.
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 versus alternatives (e.g., 'get_page' for page content). No mention of prerequisites or context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_presentationGet PresentationBRead-onlyIdempotent
Get details about a Google Slides presentation.
| Name | Required | Description | Default |
|---|---|---|---|
| user_google_email | Yes | The user's Google email address. Required. | |
| presentation_id | Yes | The ID of the presentation to retrieve. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint, destructiveHint, idempotentHint, and openWorldHint. The description adds no extra behavioral context (e.g., rate limits, authentication details, or side effects). It merely restates the obvious, failing to add value beyond 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 a single, efficient sentence (6 words). No waste, but it could be slightly more informative without harming conciseness. Front-loaded with the key 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 the tool's simplicity, existence of output schema, and comprehensive annotations, the description is minimally adequate. However, it could explicitly mention that it retrieves the full presentation object (slides, metadata) to enhance 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?
Schema description coverage is 100% (both parameters have clear descriptions). The tool description does not add additional meaning or context for parameters, but it does not detract. 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 action (get) and resource (details about a Google Slides presentation). It effectively distinguishes from sibling tools like batch_update_presentation (update) and get_page (specific page).
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 (e.g., get_page, list_presentation_comments). Lack of context or exclusion criteria limits an agent's ability to choose correctly among siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_script_contentGet Script ContentBRead-onlyIdempotent
Retrieves content of a specific file within a project.
| Name | Required | Description | Default |
|---|---|---|---|
| user_google_email | Yes | User's email address | |
| script_id | Yes | The script project ID | |
| file_name | Yes | Name of the file to retrieve |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare read-only, non-destructive, idempotent, and open-world behavior. The description adds no further behavioral context (e.g., permissions needed, output format). Given the comprehensive annotations, a 3 reflects acceptable 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 a single sentence, front-loaded with the key action and resource, and contains no unnecessary words. It is optimally 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?
For a simple retrieval tool, the description combined with the input schema, output schema (presumed present), and annotations provides sufficient context. It does not include potential size limits or error conditions, but these are not critical given the 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?
With 100% schema description coverage, the description does not add extra meaning beyond the parameter names and descriptions already present. Hence 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 the action (retrieves content) and the resource (specific file within a project). It is specific enough to distinguish from sibling tools like get_script_project or get_doc_content, but could be more explicit about the file type (e.g., script 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?
The description provides no guidance on when to use this tool versus alternatives, no prerequisites, and no exclusions. The agent has no context about scenarios where this tool is preferred over similar read tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_script_metricsGet Script MetricsARead-onlyIdempotent
Gets execution metrics for a script project.
Returns analytics data including active users, total executions, and failed executions over time.
| Name | Required | Description | Default |
|---|---|---|---|
| user_google_email | Yes | User's email address | |
| script_id | Yes | The script project ID | |
| metrics_granularity | No | Granularity of metrics - "DAILY" or "WEEKLY" | DAILY |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is clear. The description adds that it returns specific analytics data (active users, executions, failures), which goes beyond annotations. However, it does not disclose behavior like pagination, rate limits, or what happens if the script has no metrics.
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 concise sentences that front-load the purpose. No unnecessary 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 an output schema and annotations, the description is fairly complete. It explains what data is returned. It could mention that metrics are time-bounded or that a script project must exist, but overall it covers the essentials.
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 each parameter described. The description mentions the output but does not add additional meaning to the parameters. Baseline 3 is appropriate as the schema already does the work.
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 ('Gets'), resource ('execution metrics for a script project'), and specifies the returned data (active users, total executions, failed executions). It distinguishes itself from sibling tools, which are either for other types of data or script 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?
The description provides no guidance on when to use this tool vs. alternatives, no prerequisites, and no exclusions. For a tool that retrieves metrics, it should mention that it complements run_script_function or is used after script execution, but nothing is stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_script_projectGet Script ProjectARead-onlyIdempotent
Retrieves complete project details including all source files.
| Name | Required | Description | Default |
|---|---|---|---|
| user_google_email | Yes | User's email address | |
| script_id | Yes | The script project ID |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false, idempotentHint=true, openWorldHint=true. The description adds that source files are included, but otherwise does not disclose additional behavioral traits beyond what annotations 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 a single sentence with no wasted words. It is front-loaded and conveys the essential purpose efficiently.
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, full schema coverage, annotations, and presence of an output schema, the description is mostly adequate. It could potentially mention that it returns project metadata along with source files, but overall it is complete enough 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?
Schema description coverage is 100% for both parameters. The description does not add any extra meaning to the parameters 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 the verb 'retrieves' and the resource 'complete project details including all source files'. It distinguishes from sibling tools like 'get_script_content' (only content) and 'list_script_projects' (only 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?
The description implies use for retrieving full project details, but does not explicitly state when to use it vs alternatives like 'get_script_content' or 'list_script_projects'. No when-not-to-use guidance is provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_search_engine_infoGet Search Engine InfoARead-onlyIdempotent
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?
Annotations already declare readOnlyHint=true, destructiveHint=false, idempotentHint=true, and openWorldHint=true, which the description ('retrieves metadata') aligns with. The description adds no new behavioral traits beyond what the annotations convey, but does not contradict them.
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 conveys the tool's purpose. Every word is necessary, and no superfluous information is present.
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 (one parameter, rich annotations, and an output schema), the description is largely complete. It could briefly mention that the email must belong to the user owning the search engine, but that is already implied by the parameter description.
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 for the single parameter (user_google_email) is 100%, and its description is clear. The tool description does not add further meaning or context to the parameter, maintaining the 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 uses a specific verb ('Retrieves') and resource ('metadata about a Programmable Search Engine'), clearly stating the tool's sole function. No sibling tool has an overlapping purpose, so no confusion arises.
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, no when-not-to scenarios, and no mention of prerequisites. For a tool with many siblings, explicit usage context is missing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_spreadsheet_infoGet Spreadsheet InfoARead-onlyIdempotent
Gets information about a specific spreadsheet including its sheets.
| Name | Required | Description | Default |
|---|---|---|---|
| user_google_email | Yes | The user's Google email address. Required. | |
| spreadsheet_id | Yes | The ID of the spreadsheet to get info for. Required. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and idempotentHint, so the description adds minimal behavioral context beyond mentioning sheets. No contradiction.
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 a single concise sentence that efficiently communicates the tool's purpose without 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 read-only tool with clear parameters and annotations, the description is mostly complete. However, no information about the output schema or return values is provided.
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 new information about parameters beyond what is already in 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 information about a specific spreadsheet, including its sheets. It distinguishes from siblings like list_spreadsheets and create_spreadsheet.
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 explicit when-to-use or when-not-to-use guidance. Usage is implied by name and description, but alternatives are not mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_taskGet TaskARead-onlyIdempotent
Get details of a specific task.
| Name | Required | Description | Default |
|---|---|---|---|
| user_google_email | Yes | The user's Google email address. Required. | |
| task_list_id | Yes | The ID of the task list containing the task. | |
| task_id | Yes | The ID of the task to retrieve. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false, idempotentHint=true, and openWorldHint=true, which fully convey that this is a safe, non-destructive, and idempotent operation. The description adds no further behavioral context (e.g., success/failure conditions, throttling, or effect on underlying data). Given the declarations, the description's minimalism is acceptable but adds no extra 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 a single sentence of six words, with no filler or redundancy. It is front-loaded with the action and resource, making it easy to scan. Every word is essential.
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 read operation on a specific task, the description together with the schema and annotations provides a complete picture. The output schema (not shown but exists) would detail the returned fields. The only minor gap is no mention of error conditions (e.g., task not found), but the overall context is sufficient 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 100% description coverage for all three parameters (user_google_email, task_list_id, task_id), each with clear explanations. The description does not add any additional semantic meaning beyond what the schema already provides. 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 is precise: 'Get details of a specific task.' It clearly identifies the action (get) and resource (details of a task), and distinguishes from sibling tools like list_tasks (which lists multiple tasks) and manage_task (which modifies tasks).
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_tasks, get_task_list, or manage_task. No explicit context, prerequisites, or exclusions are given. For a tool that is one of many task-related tools, this omission reduces its usability.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_task_listGet Task ListARead-onlyIdempotent
Get details of a specific task list.
| Name | Required | Description | Default |
|---|---|---|---|
| user_google_email | Yes | The user's Google email address. Required. | |
| task_list_id | Yes | The ID of the task list to retrieve. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide readOnlyHint=true, destructiveHint=false, idempotentHint=true. The description adds no behavioral details beyond stating 'Get details', which is consistent. No contradiction, but no added 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?
Single sentence, no unnecessary words, front-loaded with the 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 the simplicity (2 required params, output schema present, full annotations), the description is mostly complete for a read operation. Could mention return type but output schema handles it.
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% with clear parameter descriptions. The tool description adds no additional meaning beyond what is in 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 is clear and specific: 'Get details of a specific task list.' It uses a specific verb (get) and resource (task list details), and distinguishes from sibling tools like list_task_lists and get_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?
No guidance on when to use this tool versus alternatives. It does not mention prerequisites, context, or 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.
get_versionGet VersionARead-onlyIdempotent
Gets details of a specific version.
| Name | Required | Description | Default |
|---|---|---|---|
| user_google_email | Yes | User's email address | |
| script_id | Yes | The script project ID | |
| version_number | Yes | The version number to retrieve (1, 2, 3, etc.) |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare readOnlyHint=true, destructiveHint=false, idempotentHint=true, and openWorldHint=true, which cover the safety and behavioral profile. The description adds no further behavioral context (e.g., what happens if version doesn't exist), but it does not contradict the 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 a single sentence that is front-loaded with the key verb and resource. No extraneous words; every part 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?
Given the rich annotations (readOnly, idempotent, open world), the presence of an output schema, and full parameter documentation, the description is minimally sufficient. It could be enhanced by noting that it complements list_versions, but it is complete enough for a simple getter.
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% (all three parameters are described in the schema). The description does not add any additional meaning beyond what the schema already provides, 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 states 'Gets details of a specific version,' which clearly specifies the verb (gets) and resource (version details). It distinguishes this from sibling tools like list_versions (which lists all versions) and create_version (which creates a version).
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 explicit guidance on when to use this tool versus alternatives. It does not mention that this should be used after listing versions to get full details, nor does it warn that it requires the specific version number.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
import_to_google_docImport to Google DocA
Imports a file (Markdown, DOCX, TXT, HTML, RTF, ODT) into Google Docs format with automatic conversion.
Google Drive automatically converts the source file to native Google Docs format, preserving formatting like headings, lists, bold, italic, etc. For batch operations, prefer file_path for files on disk so callers do not need to load full file contents into their context.
| Name | Required | Description | Default |
|---|---|---|---|
| user_google_email | Yes | The user's Google email address. Required. | |
| file_name | Yes | The name for the new Google Doc (extension will be ignored). | |
| content | No | Text content for text-based formats. Use only for short snippets or content already in memory. | |
| file_path | No | Local file path or file:// URL for any supported format (MD, TXT, HTML, DOCX, ODT, RTF). Appropriate for larger files than content, but file_path may still load the file into memory or perform non-streaming reads. Avoid very large files that could exceed memory or time limits; use streaming/chunked uploads or an alternative API for huge files. | |
| file_url | No | Remote URL to fetch the file from (http/https). | |
| source_format | No | Source format hint ('md', 'markdown', 'docx', 'txt', 'html', 'rtf', 'odt'). Auto-detected from file_name extension if not provided. | |
| folder_id | No | The ID of the parent folder. Defaults to 'root'. | root |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description reveals automatic conversion behavior and formatting preservation, and warns about file_path memory/streaming limitations: 'file_path may still load the file into memory or perform non-streaming reads. Avoid very large files...' This adds significant context beyond the annotations (readOnlyHint=false, etc.), which already indicate mutation without destruction. No contradiction.
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: first sentence states purpose and formats, second paragraph adds conversion details and usage guidance. Every sentence serves a clear purpose 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 tool has 7 parameters, 100% schema coverage, and an output schema (which reduces need to describe return values), the description covers purpose, supported formats, conversion behavior, and usage guidance. It could add differentiation from create_doc or mention authentication, but overall it's thorough enough for an AI 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?
Schema coverage is 100%, baseline 3. The description adds value by contextualizing file_path vs content usage (batch operations, memory considerations) and the conversion process, which supplements 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 imports a file into Google Docs format, listing supported formats (Markdown, DOCX, TXT, HTML, RTF, ODT). It uses a specific verb ('imports') and resource ('file into Google Docs format'), distinguishing it from sibling tools like import_to_google_sheets and import_to_google_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 explicit guidance: 'For batch operations, prefer file_path for files on disk so callers do not need to load full file contents into their context.' This advises when to use file_path vs content. However, it does not explicitly state when not to use this tool or alternatives beyond the sibling differentiation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
import_to_google_sheetsImport to Google SheetsA
Imports a spreadsheet (XLSX, XLS, ODS, CSV, TSV) into Google Sheets format with automatic conversion.
Google Drive automatically converts the source spreadsheet to native Google Sheets format, preserving rows, columns, sheets, and values. For batch operations, prefer file_path for files on disk so callers do not need to load full file contents into their context.
| Name | Required | Description | Default |
|---|---|---|---|
| user_google_email | Yes | The user's Google email address. Required. | |
| file_name | Yes | The name for the new Google Sheets spreadsheet (extension will be ignored). | |
| content | No | Text content for text-based formats (CSV, TSV). Use only for short snippets or content already in memory. | |
| file_path | No | Local file path or file:// URL for any supported format (XLSX, XLS, ODS, CSV, TSV). Appropriate for larger files than content, but file_path may still load the file into memory or perform non-streaming reads. Avoid very large files that could exceed memory or time limits; use streaming/chunked uploads or an alternative API for huge files. | |
| file_url | No | Remote URL to fetch the spreadsheet from (http/https). | |
| source_format | No | Source format hint ('xlsx', 'xls', 'ods', 'csv', 'tsv'). Auto-detected from file_name extension if not provided. | |
| folder_id | No | The ID of the parent folder. Defaults to 'root'. | root |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate a write operation (readOnlyHint=false) with no destructive or idempotent behavior. The description confirms it creates a new sheet via conversion, preserving content. It does not mention the original file is unchanged, but that is implicit. No contradiction with 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 4 sentences, front-loaded with the core purpose, followed by conversion details and usage guidance. 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 presence of an output schema (documenting return values) and the tool's moderate complexity (7 params, 2 required), the description covers conversion behavior, supported formats, usage recommendations, and a size warning. It adequately differentiates from siblings in 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?
With 100% schema description coverage, the schema already details each parameter. The description adds value by explaining the trade-off between content and file_path (e.g., file_path preferred for batch operations, warning about memory for large files), which supplements 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 (imports a spreadsheet into Google Sheets), lists supported formats (XLSX, XLS, ODS, CSV, TSV), and implies automatic conversion. It distinguishes from siblings like create_spreadsheet (creates empty sheet) and import_to_google_doc (imports to 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 offers explicit guidance: 'For batch operations, prefer file_path for files on disk so callers do not need to load full file contents into their context.' It also warns about file size limits. However, it does not explicitly state when not to use this tool (e.g., for creating empty sheets, use create_spreadsheet).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
import_to_google_slidesImport to Google SlidesA
Imports a presentation (PPTX, PPT, ODP) into Google Slides format with automatic conversion.
Google Drive automatically converts the source presentation to native Google Slides format, preserving slides, layouts, text, and images. For batch operations, prefer file_path for files on disk so callers do not need to load full file contents into their context.
| Name | Required | Description | Default |
|---|---|---|---|
| user_google_email | Yes | The user's Google email address. Required. | |
| file_name | Yes | The name for the new Google Slides presentation (extension will be ignored). | |
| file_path | No | Local file path or file:// URL for any supported format (PPTX, PPT, ODP). Appropriate for larger files than content, but file_path may still load the file into memory or perform non-streaming reads. Avoid very large files that could exceed memory or time limits; use streaming/chunked uploads or an alternative API for huge files. | |
| file_url | No | Remote URL to fetch the presentation from (http/https). | |
| source_format | No | Source format hint ('pptx', 'ppt', 'odp'). Auto-detected from file_name extension if not provided. | |
| folder_id | No | The ID of the parent folder. Defaults to 'root'. | root |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate readOnlyHint=false etc. Description adds value by explaining automatic conversion, preservation of elements, and warning about memory usage for large files via file_path. No contradiction with 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?
Four concise sentences front-loading the main purpose and key usage tip. 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?
Covers conversion behavior, format support, and a size warning. With an output schema present, return values are not needed. Lacks error handling details 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 100%, so description adds limited new semantic info. It hints at preferring file_path for batch operations but does not elaborate on each parameter 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 imports presentations in PPTX, PPT, ODP formats into Google Slides, with automatic conversion. It distinguishes itself from siblings like import_to_google_doc by specifying the target format.
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 to prefer file_path for batch operations to avoid loading full file contents into context. However, it does not explicitly compare to alternatives like create_presentation or suggest when to use file_url.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
insert_doc_elementsInsert Doc ElementsB
Inserts structural elements like tables, lists, or page breaks into a Google Doc.
| Name | Required | Description | Default |
|---|---|---|---|
| user_google_email | Yes | User's Google email address | |
| document_id | Yes | ID of the document to update | |
| element_type | Yes | Type of element to insert ("table", "list", "page_break") | |
| index | Yes | Position to insert element (0-based) | |
| rows | No | Number of rows for table (required for table) | |
| columns | No | Number of columns for table (required for table) | |
| list_type | No | Type of list ("UNORDERED", "ORDERED") (required for list) | |
| text | No | Initial text content for list items |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint=false and openWorldHint=true. The description only restates that it 'inserts', adding no behavioral details like shift of existing content or potential failure modes.
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, 12-word sentence with no unnecessary words, perfectly concise 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?
While the description covers basic purpose and there is an output schema, it omits important context such as prerequisites (e.g., edit permissions), error conditions (e.g., invalid index), or side effects, making it minimally 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 the description adds no extra meaning beyond what the schema provides, resulting in a 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 identifies the verb ('inserts'), the resource ('structural elements like tables, lists, or page breaks'), and the target ('Google Doc'), effectively distinguishing it from sibling tools such as modify_doc_text or 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?
The description offers no guidance on when to use this tool versus alternatives like batch_update_doc or insert_doc_image, leaving the agent without context for tool selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
insert_doc_imageInsert Doc ImageB
Inserts an image into a Google Doc from Drive or a URL.
| Name | Required | Description | Default |
|---|---|---|---|
| user_google_email | Yes | User's Google email address | |
| document_id | Yes | ID of the document to update | |
| image_source | Yes | Drive file ID or public image URL | |
| index | Yes | Position to insert image (0-based) | |
| width | No | Image width in points (optional) | |
| height | No | Image height in points (optional) |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description repeats the basic functionality but adds no behavioral detail beyond what annotations already convey (e.g., readOnlyHint=false, destructiveHint=false). It fails to disclose side effects, authorization needs, or constraints like image format or access restrictions.
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 wasted words. While it could include more structure or additional context, it is not overly verbose and communicates the core purpose efficiently.
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 full coverage of parameters, the description is minimally adequate. However, it could be more complete by mentioning whether the image is embedded or linked, or any size limitations, which would help the agent 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?
With 100% schema coverage, the parameter descriptions in the schema are already sufficient. The tool description does not add additional meaning or context to the parameters, so a 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 the action (inserts), the target resource (image into a Google Doc), and the source (from Drive or a URL), making it unambiguous and distinguishing it from related tools like 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?
The description does not provide any guidance on when to use this tool versus alternatives, nor does it mention prerequisites, caveats, or when not to use it. It is clear but lacks decision-support context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
inspect_doc_structureInspect Doc StructureARead-onlyIdempotent
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?
Annotations already declare readOnlyHint, destructiveHint, idempotentHint. The description adds significant behavioral context: it must be called before table creation, explains output fields (total_length, tables, etc.), and provides workflows. 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?
The description is lengthy but well-organized with clear headings and distinct sections. Each section adds unique information. Could be slightly more concise, but structure aids readability and scanability.
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 parameters, output schema exists), the description is comprehensive: it covers purpose, usage context, criticality for table ops, output details, and integrated workflows. No gaps with output schema present.
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 when to use the 'detailed' parameter (e.g., formatting workflow), and contextualizes the other parameters indirectly through workflows. Moves 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 explicitly states the tool is for 'finding safe insertion points and understanding document structure,' which is a specific verb and resource. It distinguishes from siblings by emphasizing safe insertion indices and document layout analysis.
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 'USE THIS FOR' list and workflows for table insertion, formatting, and header/footer editing, indicating when to use the tool. It lacks explicit alternatives or exclusions for when not to use it, but the guidance is strong overall.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_calendarsList CalendarsARead-onlyIdempotent
Retrieves a list of calendars accessible to the authenticated user.
| 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?
Annotations already declare readOnlyHint=true, destructiveHint=false, idempotentHint=true, openWorldHint=true. The description adds no behavioral detail beyond what annotations provide, missing opportunities to explain scope or limitations.
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 that directly states the tool's purpose. 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 presence of an output schema, annotations, and a simple parameter, the description sufficiently covers the tool's functionality. It could mention that it lists all calendars without filtering, but it is complete enough.
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 one required parameter fully described. The description does not add any additional meaning to the parameter 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 'Retrieves' and the resource 'list of calendars'. It distinguishes list_calendars from sibling tools like create_calendar and get_events by focusing on listing existing calendars.
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 context ('accessible to the authenticated user') but provides no explicit guidance on when to use this tool vs alternatives or 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.
list_contact_groupsList Contact GroupsARead-onlyIdempotent
List contact groups (labels) for the user.
| Name | Required | Description | Default |
|---|---|---|---|
| user_google_email | Yes | The user's Google email address. Required. | |
| page_size | No | Maximum number of groups to return (default: 100, max: 1000). | |
| page_token | No | Token for pagination. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false, idempotentHint=true, and openWorldHint=true, which cover safety and predictability. The description does not add any behavioral details beyond what annotations provide, but does not contradict them either.
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 conveys the core purpose without extraneous words. It earns its place, though it could be slightly more 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 the tool's simplicity, low parameter count, and presence of annotations and output schema, the description is adequate. It does not explain pagination or output format, but those are handled by the schema and the tool's natural behavior.
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, clearly documenting each parameter. The tool description adds no additional semantics beyond what the schema already provides. 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 verb 'List' and the resource 'contact groups (labels)', which is specific. It is distinguishable from sibling tools like 'get_contact_group' (single) and 'list_contacts' (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 provides no explicit guidance on when to use this tool versus alternatives. However, for a simple list tool, the purpose is clear enough that an agent can infer usage. No exclusions or contexts are given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_contactsList ContactsARead-onlyIdempotent
List contacts for the authenticated user.
| Name | Required | Description | Default |
|---|---|---|---|
| user_google_email | Yes | The user's Google email address. Required. | |
| page_size | No | Maximum number of contacts to return (default: 100, max: 1000). | |
| page_token | No | Token for pagination. | |
| sort_order | No | Sort order: "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?
Annotations already declare readOnlyHint=true, destructiveHint=false, and idempotentHint=true, which the description does not contradict. The description adds no further behavioral context, such as pagination behavior or rate limits, but the annotations sufficiently cover safety.
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 with no wasted words, efficiently conveying the core 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?
Given the schema covers parameters fully and an output schema exists, the description is sufficient for a simple list operation. Minor improvement could mention pagination or sorting, but not essential.
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 does not add meaning beyond the schema's parameter descriptions, but the schema itself is 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 the verb 'List' and the resource 'contacts for the authenticated user', distinguishing it from sibling tools like 'get_contact' (single) and 'search_contacts' (filtered 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 usage guidance is provided; the description does not mention when to use this tool versus alternatives like 'search_contacts' or 'get_contact', nor does it state prerequisites or disclaimers.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_deploymentsList DeploymentsARead-onlyIdempotent
Lists all deployments for a script project.
| Name | Required | Description | Default |
|---|---|---|---|
| user_google_email | Yes | User's email address | |
| script_id | Yes | The script project ID |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare safe read-only behavior. Description adds no additional behavioral context beyond restating the purpose.
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?
Single sentence, 7 words, front-loaded purpose. 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?
Simple read-only tool with full schema and annotations. Output schema exists, so description doesn't need to explain returns. 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 description adds no extra meaning. 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 uses specific verb 'Lists' and resource 'deployments for a script project', clearly distinguishing from sibling tools like list_script_projects.
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 explicit guidance on when to use this vs alternatives (e.g., list_versions). Usage context is implied but not stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_docs_in_folderList Docs in FolderBRead-onlyIdempotent
Lists Google Docs within a specific Drive folder.
Returns: str: A formatted list of Google Docs in the specified folder.
| Name | Required | Description | Default |
|---|---|---|---|
| user_google_email | Yes | ||
| folder_id | No | root | |
| page_size | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnly, idempotent, and non-destructive behavior. The description adds that it returns a formatted list, but does not elaborate on formatting details, pagination, or limits. Some value added beyond 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?
Two sentences, no fluff, front-loaded with purpose. Efficient for its 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?
With 0% schema coverage and 3 parameters, the description is insufficient. It omits details on paging, folder scope, and what 'formatted list' entails, despite having 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 coverage is 0% with no parameter descriptions. The description does not explain any parameter (e.g., user_google_email, folder_id, page_size), failing to compensate for the lack of schema 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?
The description clearly states the tool lists Google Docs within a specific Drive folder, providing a specific verb and resource. It distinguishes itself from sibling tools like list_drive_items or search_docs by focusing on docs in a 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?
No guidance on when to use this tool versus alternatives (e.g., list_drive_items) or when not to use it. The description lacks exclusions or context for selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_document_commentsList Document CommentsBRead-onlyIdempotent
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?
Annotations already declare readOnlyHint, destructiveHint, idempotentHint, and openWorldHint, so the safety profile is covered. The description adds minimal context beyond 'list all comments', which is consistent but not extensive.
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?
Single sentence, front-loaded with purpose, no filler. Could be slightly more informative without losing conciseness.
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, the description is too minimal. It omits parameter details and usage context, making it insufficient for an agent unfamiliar with 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?
The description provides no information about the two required parameters (user_google_email, document_id). With 0% schema description coverage, the description should compensate but fails to do so.
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 'all comments from a Google Document', which distinguishes it from sibling tools like list_spreadsheet_comments or list_presentation_comments.
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 versus alternatives like manage_document_comment or the other list comment tools. The description lacks context for decision-making.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_drive_itemsList Drive ItemsARead-onlyIdempotent
Lists files/folders or shared drive containers, supporting shared drives.
If drive_id is specified, lists items within that shared drive. folder_id is then relative to that drive (or use drive_id as folder_id for root).
If drive_id is not specified, lists items from user's "My Drive" and accessible shared drives (if include_items_from_all_drives is True).
Set resource_type to "shared_drives" to list shared drive containers instead of folder contents.
| Name | Required | Description | Default |
|---|---|---|---|
| user_google_email | Yes | The user's Google email address. Required. | |
| folder_id | No | 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. | root |
| page_size | No | The maximum number of items to return. Defaults to 100. | |
| page_token | No | Page token from a previous response's nextPageToken to retrieve the next page of results. | |
| drive_id | No | ID of the shared drive. If provided, the listing is scoped to this drive. | |
| include_items_from_all_drives | No | Whether items from all accessible shared drives should be included if `drive_id` is not set. Defaults to True. | |
| corpora | No | 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. | |
| file_type | No | Restrict results to a specific file type. Accepts a friendly name ('folder', 'document'/'doc', 'spreadsheet'/'sheet', 'presentation'/'slides', 'form', 'drawing', 'pdf', 'shortcut', 'script', 'site', 'jam'/'jamboard') or any raw MIME type string (e.g. 'application/pdf'). Defaults to None (all types). | |
| detailed | No | Whether to include size, modified time, and link in results. Defaults to True. | |
| order_by | No | Sort order. Comma-separated list of sort keys with optional 'desc' modifier. Valid keys: 'createdTime', 'folder', 'modifiedByMeTime', 'modifiedTime', 'name', 'name_natural', 'quotaBytesUsed', 'recency', 'sharedWithMeTime', 'starred', 'viewedByMeTime'. Example: 'modifiedTime desc' or 'folder,modifiedTime desc,name'. Defaults to None (Drive API default ordering). | |
| resource_type | No | What to list. Use "items" for folder contents or "shared_drives" for shared drive containers. Defaults to "items". | items |
| query | No | Shared drive query used only when resource_type="shared_drives", e.g. "name contains 'Engineering'". | |
| include_organizers | No | When resource_type="shared_drives", include principals with the organizer role. This costs one extra permissions.list API call per shared drive returned. Defaults to False. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false, idempotentHint=true. The description adds behavioral context like parameter interactions and shared drive support, but does not significantly extend beyond annotations. No contradiction.
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 (162 words) and front-loaded with the primary purpose. It uses conditional phrasing to cover multiple scenarios efficiently, with no redundant 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?
Given the complexity (13 parameters, output schema exists, annotations rich), the description covers all primary use cases and parameter relationships. It mentions the output schema is not needed, and the description is complete for an informed 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?
Schema description coverage is 100% with detailed parameter descriptions. The tool description adds value by explaining parameter interactions (e.g., drive_id and folder_id), but does not add new semantics beyond what the schema already provides. 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 that the tool lists files/folders or shared drive containers, supporting shared drives. It distinguishes itself from sibling tools like list_docs_in_folder and search_drive_files by explicitly covering both item listing and shared drive listing.
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 context on when to use drive_id vs not, and how to list shared drives via resource_type. However, it does not explicitly mention when to use sibling alternatives like search_drive_files for broader search or list_docs_in_folder for document-specific listing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_form_responsesList Form ResponsesBRead-onlyIdempotent
List a form's responses.
| Name | Required | Description | Default |
|---|---|---|---|
| user_google_email | Yes | The user's Google email address. Required. | |
| form_id | Yes | The ID of the form. | |
| page_size | No | Maximum number of responses to return. Defaults to 10. | |
| page_token | No | Token for retrieving next page of results. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, making the read-only nature clear. The description adds no additional behavioral context beyond what annotations provide, but there is no contradiction.
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 at one sentence, which is efficient and front-loaded. However, it could include more information without becoming verbose, so it is good but not perfect.
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 pagination parameters (page_size, page_token) and an output schema, the description should mention pagination or the response format. It is incomplete as it only states the basic function, leaving important usage details missing.
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 parameters have schema descriptions covering 100% of their meaning. The tool description does not add any extra semantic value beyond the schema, so it meets the baseline for full 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?
The description clearly states it lists a form's responses, which is a specific verb+resource combination. However, it does not differentiate from sibling tools like 'get_form_response' which retrieves a single response, leaving some ambiguity for an AI agent.
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 such as 'get_form_response' for single responses or other listing tools. The description lacks any contextual cues for appropriate usage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_gmail_filtersList Gmail FiltersARead-onlyIdempotent
Lists all Gmail filters configured in the user's mailbox.
| 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?
Annotations already provide readOnlyHint=true, destructiveHint=false, idempotentHint=true, openWorldHint=true, which fully convey the behavioral profile. The description adds no extra context beyond stating it lists filters, so it neither adds nor contradicts the 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 a single, well-structured sentence that immediately communicates the tool's purpose. It is concise with 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 simple list tool with one parameter, good annotations, and an existing output schema, the description is complete. It tells the agent exactly what the tool does, and the remaining details are covered by the schema and annotations.
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 description covers the single parameter (user_google_email) with a clear explanation. The tool description does not add any additional meaning beyond what the schema already provides, so it meets 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 the verb 'Lists', the resource 'Gmail filters', and the scope 'user's mailbox'. It distinguishes this tool from siblings like 'manage_gmail_filter' (for CRUD) and 'list_gmail_labels' (for 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 is straightforward and does not provide explicit guidance on when to use this tool versus alternatives. However, given it is a simple list action, the usage context is implicitly clear. No exclusions or when-not scenarios are mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_gmail_labelsList Gmail LabelsBRead-onlyIdempotent
Lists all labels in the user's Gmail account.
| 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?
Annotations already declare readOnlyHint=true, destructiveHint=false, idempotentHint=true, and openWorldHint=true, providing strong behavioral transparency. The description adds no additional behavioral context (e.g., it does not mention that system labels are included or that the output is an array). Thus, the description adds minimal value beyond 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 a single sentence with no fluff, perfectly front-loaded and efficient. Every word is necessary.
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 low complexity (simple list operation, one parameter, output schema exists), the description is mostly complete. However, it could mention that it retrieves all labels (including system labels) or indicate that the output is an array of label objects, but the output schema likely covers that.
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 one parameter ('user_google_email') already described in the schema as 'The user's Google email address. Required.' The description does not add further meaning, so it meets 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 the verb 'lists' and the resource 'labels in the user's Gmail account', making it highly specific and unambiguous. It distinguishes from sibling tools like 'list_gmail_filters' and 'manage_gmail_label' by focusing on listing all 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?
No guidance is provided on when to use this tool versus alternatives, such as 'manage_gmail_label' for modifying labels or 'search_gmail_messages' for messages. The description lacks 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_presentation_commentsList Presentation CommentsBRead-onlyIdempotent
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?
Annotations already declare readOnlyHint=true, destructiveHint=false, and idempotentHint=true, so the description adds little beyond stating 'List all comments', which aligns with these hints. The description does not elaborate on behavioral specifics such as pagination or rate limits, but given the annotations, the bar is lower.
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 that immediately communicates the tool's purpose. No wasted words or 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 rich annotations and an existing output schema, the description is adequate but minimal. It does not clarify whether comments are from all slides or just top-level, nor does it mention any scope limitations. It is acceptable but not fully complete 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?
The input schema has two required parameters with 0% description coverage. The description does not explain what user_google_email or presentation_id represent, nor how to obtain them. Since schema coverage is low, the description should compensate but does not.
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', the resource 'comments', and the scope 'from a Google Presentation'. It distinguishes from sibling tools like list_document_comments and list_spreadsheet_comments, which target different 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 guidelines are provided about when to use this tool versus alternatives like list_document_comments or manage_presentation_comment. There is no mention of prerequisites, context, or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_script_processesList Script ProcessesARead-onlyIdempotent
Lists recent execution processes for user's scripts.
| Name | Required | Description | Default |
|---|---|---|---|
| user_google_email | Yes | User's email address | |
| page_size | No | Number of results (default: 50) | |
| script_id | No | Optional filter by script ID |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare the tool as read-only, non-destructive, idempotent, and open-world. The description adds minimal behavioral context, only noting that results are 'recent' without defining recency, pagination, or ordering. Given the strong annotation coverage, a score of 3 is appropriate.
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 that front-loads the essential information. No unnecessary words or fluff; every word contributes to understanding.
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?
While the tool has an output schema (not shown), the description does not explain what an 'execution process' entails or what fields are returned. It also omits the necessity of the user_google_email parameter, though the schema makes that clear. The description is minimally complete but lacks explanatory depth.
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 three parameters. The description does not add additional meaning beyond the schema, so it meets the baseline expectation but does not enhance 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 the verb 'Lists', the resource 'execution processes', and the scope 'for user's scripts' with a qualifier 'recent'. It effectively distinguishes itself from sibling tools such as list_script_projects or get_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?
The description provides no guidance on when to use this tool versus alternatives, nor does it mention prerequisites or exclusions. It simply states the function without offering context for when it is appropriate to use over other listing tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_script_projectsList Script ProjectsARead-onlyIdempotent
Lists Google Apps Script projects accessible to the user.
Uses Drive API to find Apps Script files.
| Name | Required | Description | Default |
|---|---|---|---|
| user_google_email | Yes | User's email address | |
| page_size | No | Number of results per page (default: 50) | |
| page_token | No | Token for pagination (optional) |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare read-only, non-destructive, idempotent, and open-world hints. The description adds that it uses Drive API, which provides implementation context but does not disclose additional behavioral traits like pagination behavior, rate limits, or how many projects may be returned. The description adds some value beyond annotations but is limited.
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, with no unnecessary words. The first sentence states the purpose, and the second adds implementation detail. Every sentence earns its place, 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?
Given the presence of an output schema and comprehensive annotations, the description is largely complete. It mentions the underlying API and accessibility scope. However, it could be slightly more explicit about the scope (only Google Apps Script projects, not other Drive files) and provide more guidance on when to use this over other listing tools, but overall it 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%, and the description does not add any additional meaning to the parameters beyond what is already in the schema. The baseline of 3 applies as the description does not enrich 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 that the tool lists Google Apps Script projects accessible to the user, using Drive API. The title and description are aligned, and it distinguishes from siblings like get_script_project (single project) and create/delete script projects.
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 using Drive API to find Apps Script files, implying it is for listing script-specific items, but it does not explicitly provide guidance on when to use this tool versus alternatives like list_drive_items or search_drive_files. No exclusions or alternatives are named.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_sheet_tablesList Sheet TablesARead-onlyIdempotent
Lists all structured tables in a spreadsheet with their IDs, names, ranges, and column details. Use this to find table IDs for append_table_rows.
| Name | Required | Description | Default |
|---|---|---|---|
| user_google_email | Yes | The user's Google email address. Required. | |
| spreadsheet_id | Yes | The ID of the spreadsheet. Required. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, destructiveHint, idempotentHint, and openWorldHint. The description adds context about the returned data (IDs, names, ranges, column details) and restricts to 'structured tables', which is helpful behavioral information beyond annotations. No contradictions with 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 two sentences, front-loaded with the primary action, and includes a specific usage hint. 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 the tool's simplicity (two required parameters, full schema coverage, and an output schema), the description adequately covers the purpose and use case. The tool's nature as a read-only list operation is fully supported by the annotations and description.
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 both parameters described in the schema. The description does not add any new information about the parameters beyond what the schema provides. Per the baseline for high coverage, 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 lists all structured tables in a spreadsheet with specific details (IDs, names, ranges, column details). It also explicitly mentions a downstream use case (finding table IDs for append_table_rows), distinguishing it from 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 directly advises using this tool to find table IDs for append_table_rows, providing clear when-to-use guidance. It implies an alternative (append_table_rows) rather than listing exclusions, but the explicit use case is sufficient for an agent to select correctly.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_spacesList SpacesCRead-onlyIdempotent
Lists Google Chat spaces (rooms and direct messages) accessible to the user.
Returns: str: A formatted list of Google Chat spaces accessible to the user.
| Name | Required | Description | Default |
|---|---|---|---|
| user_google_email | Yes | ||
| page_size | No | ||
| space_type | No | all |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint=true, destructiveHint=false, idempotentHint=true, openWorldHint=true. The description adds minimal value by stating it returns a formatted list of accessible spaces, which is expected. No additional behavioral traits (e.g., pagination, rate limits) are disclosed.
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 brief (two sentences) but includes a redundant return type line ('Returns: str: ...') that does not add value since an output schema exists. The first sentence is concise and focused. Could be tighter by removing the docstring-style return.
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 rich annotations and an output schema, the description omits critical details about parameter usage (e.g., possible space_type values, effect of page_size). The tool is a list operation, but the description does not clarify filtering or pagination behavior, leaving the agent underinformed.
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 three parameters (user_google_email required, page_size with default 100, space_type with default 'all'), but the description provides no explanation of their meaning or expected values. Schema description coverage is 0%, so the description needed to compensate but failed entirely.
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 Google Chat spaces (rooms and direct messages) accessible to the user. The verb 'lists' matches the tool name, and the resource 'Google Chat spaces' distinguishes it from sibling tools that list other entities like calendars or drive 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?
The description provides no guidance on when to use this tool versus alternatives, nor does it mention any prerequisites or exclusions. It only states what it does, leaving the agent to infer usage context from the tool name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_spreadsheet_commentsList Spreadsheet CommentsBRead-onlyIdempotent
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?
Annotations already declare readOnlyHint, destructiveHint, idempotentHint, and openWorldHint. The description adds minimal behavioral context beyond 'list all'. It does not detail pagination, rate limits, or scope of comments (e.g., across all sheets).
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, well-formed sentence that conveys the core functionality without any extraneous information. It is appropriately front-loaded 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?
While an output schema exists (so return structure is defined elsewhere), the description does not outline what 'comments' includes (e.g., author, text, timestamp). It also lacks context on whether the list is limited to the user's comments or all comments on the spreadsheet, which could affect interpretation.
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%, meaning the input schema lacks parameter descriptions. The tool description does not elaborate on the purpose or format of 'user_google_email' or 'spreadsheet_id'. For instance, 'user_google_email' might be ambiguous (is it the authenticated user's email?), and this gap forces the agent to infer or hardcode.
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'), the resource ('comments'), and the scope ('from a Google Spreadsheet'). It differentiates from sibling tools like 'manage_spreadsheet_comment' (which modifies comments) and 'list_document_comments' (which targets 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 usage guidance is provided. There is no mention of when to use this tool versus alternatives (e.g., 'manage_spreadsheet_comment' for modifications), prerequisites, or scenarios where it should be avoided. The description is purely declarative.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_spreadsheetsList SpreadsheetsBRead-onlyIdempotent
Lists spreadsheets from Google Drive that the user has access to.
| Name | Required | Description | Default |
|---|---|---|---|
| user_google_email | Yes | The user's Google email address. Required. | |
| max_results | No | Maximum number of spreadsheets to return. Defaults to 25. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false, idempotentHint=true, and openWorldHint=true. The description adds only 'that the user has access to', which implies authentication-based scope. This is minimal additional context; the description does not elaborate on pagination, order, or response structure. No contradiction with 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 a single sentence of 12 words, conveying the essential action without any unnecessary wording. It is optimally 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?
The tool is simple, annotations are rich, and an output schema exists (as indicated by context signals). The description, while brief, covers the basic purpose. It could mention that it returns metadata, but the output schema likely handles that. For a straightforward list tool, this 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?
The input schema has 100% coverage for its two parameters. The description does not elaborate on parameter meaning beyond what the schema already provides. Baseline 3 is appropriate given 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 action ('Lists') and resource ('spreadsheets from Google Drive'). It is specific about what the tool does, though it does not differentiate from similar list tools among siblings (e.g., list_docs, list_calendars). The verb+resource combination is straightforward.
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 guidelines are provided about when to use this tool versus alternatives like 'list_drive_items' or 'search_drive_files'. There is no mention of prerequisites, limitations, or exclusions. The agent receives no direction on choosing this tool over siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_task_listsList Task ListsBRead-onlyIdempotent
List all task lists for the user.
| Name | Required | Description | Default |
|---|---|---|---|
| user_google_email | Yes | The user's Google email address. Required. | |
| max_results | No | Maximum number of task lists to return (default: 1000, max: 1000). | |
| page_token | No | Token for pagination. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description merely repeats the intended action. The annotations already fully declare the behavioral traits (readOnlyHint, idempotentHint, etc.), so the description adds no extra 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 a single sentence that is concise and front-loaded with the action. It could be slightly more informative but is appropriately sized for a simple list tool.
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 adequate for a basic list operation with well-documented parameters and an output schema. However, it omits mentioning pagination or max_results limit, though those are covered in 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?
Schema description coverage is 100%, so the description does not need to add parameter details. The description does not enhance understanding 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 'List all task lists for the user' uses a specific verb and resource, clearly differentiating it from sibling tools like 'list_tasks' and '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?
No guidance is provided on when to use this tool versus alternatives. The description is a simple statement with no context about prerequisites, exclusions, or preferred scenarios.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_tasksList TasksARead-onlyIdempotent
List all tasks in a specific task list.
| Name | Required | Description | Default |
|---|---|---|---|
| user_google_email | Yes | The user's Google email address. Required. | |
| task_list_id | Yes | The ID of the task list to retrieve tasks from. | |
| max_results | No | Maximum number of tasks to return. (default: 20, max: 10000). | |
| page_token | No | Token for pagination. | |
| show_completed | No | Whether to include completed tasks (default: True). Note that show_hidden must also be true to show tasks completed in first party clients, such as the web UI and Google's mobile apps. | |
| show_deleted | No | Whether to include deleted tasks (default: False). | |
| show_hidden | No | Whether to include hidden tasks (default: False). | |
| show_assigned | No | Whether to include assigned tasks (default: False). | |
| completed_max | No | Upper bound for completion date (RFC 3339 timestamp). | |
| completed_min | No | Lower bound for completion date (RFC 3339 timestamp). | |
| due_max | No | Upper bound for due date (RFC 3339 timestamp). | |
| due_min | No | Lower bound for due date (RFC 3339 timestamp). | |
| updated_min | No | Lower bound for last modification time (RFC 3339 timestamp). |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false, idempotentHint=true, and openWorldHint=true. The description adds no further behavioral context, such as pagination details or that results may change (already implied by openWorldHint). No contradiction with 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?
Single sentence, no fluff. All words are necessary. Perfectly concise for the core 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?
While the description is clear for a basic list operation, it does not mention the available filtering capabilities (by completion, due date, etc.) or pagination, which are significant for effective use. The output schema exists but the description could better summarize the tool's capabilities.
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 all parameters have descriptions. The tool description itself does not add any parameter-specific information, meeting 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 the action ('List') and the resource ('tasks'), and specifies the scope ('in a specific task list'), distinguishing it from sibling tools like 'get_task' (single task) and 'list_task_lists'.
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 explicit guidance on when to use this tool versus alternatives such as 'get_task' for a single task or other filtered search tools. The description implies the need for a task list ID but does not provide context beyond that.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_versionsList VersionsARead-onlyIdempotent
Lists all versions of a script project.
Versions are immutable snapshots of your script code. They are created when you deploy or explicitly create a version.
| Name | Required | Description | Default |
|---|---|---|---|
| user_google_email | Yes | User's email address | |
| script_id | Yes | The script project ID |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate read-only, non-destructive, idempotent behavior. The description adds context about versions being immutable snapshots, which is helpful but not essential. No contradictory 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?
Two sentences with no fluff. The main action is front-loaded in the first sentence. 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 (list all versions), the description is complete. Input schema covers both required params, and output schema exists. No additional context needed for effective 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 has 100% description coverage for parameters ('User's email address', 'The script project ID'), so the description does not need to add more. It provides no additional 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 lists all versions of a script project and explains what versions are (immutable snapshots). It distinguishes from siblings like 'get_version' (specific version) and 'create_version' (creation), though not explicitly contrasting.
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 versus alternatives like 'get_version' or when not to use it. The description lacks context about typical 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.
manage_conditional_formattingManage Conditional FormattingBDestructive
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?
Annotations already provide destructiveHint=true, indicating the tool modifies state. The description adds that it supports adding, updating, and deleting, which aligns. No additional behavioral details are given about side effects or prerequisites, but annotations cover the destructive nature 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 extremely concise with two sentences. The first sentence states the purpose, and the second adds the supported actions. No unnecessary words 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 (11 parameters, multiple actions) and the presence of an output schema, the description is minimal. It covers the basic operations but lacks details on rule interactions, ordering, or outcomes. 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?
Schema description coverage is 100%, so the baseline is 3. The description does not add any parameter-specific meaning beyond what the schema already provides. It simply reiterates the operations without enriching 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 the tool manages conditional formatting rules on Google Sheets and lists the three supported actions (add, update, delete). It is specific and includes the resource. However, it does not differentiate from sibling tools like format_sheet_range, which could also apply 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 gives no guidance on when to use this tool versus alternatives. No when-not or when-to-use context is provided. Siblings like format_sheet_range exist, and the lack of distinction reduces clarity 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_contactManage ContactADestructive
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?}. | |
| nicknames | No | List of nickname dicts {value, type?}. Useful for bilingual contacts (e.g. Hebrew/English alternative forms). Android dialer and WhatsApp search both index nicknames, enabling cross-script lookup. Supported types: default, alternate_name, maiden_name, initials, other, etc. | |
| urls | No | List of URL dicts {value, type?}. Supported types: homepage, blog, profile, work, ftp, reservations, other, etc. | |
| user_defined | No | List of custom field dicts {key, value}. Useful for structured data like account numbers, IDs, or custom dates. | |
| relations | No | List of relation dicts {person, type?}. Supported types: spouse, child, parent, friend, manager, assistant, etc. | |
| notes | No | Additional notes (for create/update). | |
| address | No | Street address (for create/update). | |
| birthday | No | Birthday as 'YYYY-MM-DD', 'MM-DD' (no year), or 'clear'/'' to remove. | |
| 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 |
| nicknames_mode | No | How to update nicknames on "update": "merge" (default), "replace", or "remove". | merge |
| urls_mode | No | How to update urls on "update": "merge" (default), "replace", or "remove". merge dedups by normalized URL (lowercased, trailing slash stripped). | merge |
| user_defined_mode | No | How to update custom fields on "update": "merge" (default), "replace", or "remove". merge overrides value on matching key; new keys appended. | merge |
| relations_mode | No | How to update relations 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?
The annotations already declare destructiveHint=true, so the description adds no new behavioral insights. It does not detail update modes (merge/replace/remove) or deprecations, which are left to the schema. No contradiction with 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 two sentences, front-loaded with the core purpose and the consolidation key point, with 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's complexity (26 parameters, multiple update modes, deprecated fields), the description is too terse. It doesn't explain the required user_google_email, the action enum, or the merge/replace/remove modes, relying entirely on the schema. For an agent to quickly grasp capabilities, more context is 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?
With 100% schema description coverage, the schema fully documents all 26 parameters, including enums, deprecated fields, and update modes. The tool description adds only the consolidation context, which does not significantly enhance 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 the tool creates, updates, or deletes a contact and explicitly says it replaces three separate tools (create_contact, update_contact, delete_contact), providing strong differentiation from similar tools like manage_contact_group or get_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 tells the agent to use this consolidated tool instead of the three individual ones, giving clear context on when to use it. However, it doesn't mention alternatives like manage_contacts_batch for batch operations, nor does it specify 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_contact_groupManage Contact GroupADestructive
Create, update, delete a contact group, or modify its members. Consolidated tool replacing create_contact_group, update_contact_group, delete_contact_group, and modify_contact_group_members.
| Name | Required | Description | Default |
|---|---|---|---|
| user_google_email | Yes | The user's Google email address. Required. | |
| action | Yes | The action to perform: "create", "update", "delete", or "modify_members". | |
| group_id | No | The contact group ID. Required for "update", "delete", and "modify_members" actions. | |
| name | No | The group name. Required for "create" and "update" actions. | |
| delete_contacts | No | If True and action is "delete", also delete contacts in the group (default: False). | |
| add_contact_ids | No | Contact IDs to add (for "modify_members"). | |
| remove_contact_ids | No | Contact IDs to remove (for "modify_members"). |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate mutability and destructiveness. Description repeats actions from schema but adds no extra behavioral context beyond what annotations and schema provide.
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 key actions, no redundancy. Every word 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?
Given output schema exists and annotations cover safety, the description effectively communicates the consolidated nature and core functionality without needing to detail 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?
Input schema has 100% coverage with descriptions; description does not add additional meaning beyond listing the actions, which are already in the action parameter 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 it creates, updates, deletes, or modifies members, and mentions it consolidates multiple previous tools, clearly differentiating from siblings.
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?
States it replaces specific tools, giving clear context for when to use this instead of alternatives. No explicit when-not or exclusions, but the consolidation message is effective.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
manage_contacts_batchManage Contacts BatchADestructive
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, nicknames, urls, userDefined, relations, biographies, addresses, birthdays. 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?
Annotations already indicate destructiveHint=true, readOnlyHint=false. Description adds that it handles create/update/delete actions, which aligns, but does not disclose additional traits (e.g., auth requirements, rate limits, or that it uses People API batch endpoints).
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 that front-load the core purpose and succinctly add context about consolidation. 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?
Covers the basic batch operation and consolidation, but does not describe return values, error behavior, or limits (e.g., batch size), despite the tool's complexity and 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 coverage is 100% with detailed parameter descriptions (e.g., actions enum, fields in contacts/updates). The description adds no extra parameter meaning beyond stating the actions, 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 'Batch create, update, or delete contacts' using specific verbs and resource, and distinguishes it from siblings by noting it is a consolidated replacement for three separate batch 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?
Implies usage for any batch operation on contacts and references the tools it replaces, but does not explicitly state when to use alternative tools like manage_contact for single contact operations or note any prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
manage_deploymentManage DeploymentCDestructive
Manages Apps Script deployments. Supports creating, updating, and deleting deployments.
| Name | Required | Description | Default |
|---|---|---|---|
| user_google_email | Yes | User's email address | |
| action | Yes | Action to perform - "create", "update", or "delete" | |
| script_id | Yes | The script project ID | |
| deployment_id | No | The deployment ID (required for update and delete) | |
| description | No | Deployment description (required for create and update) | |
| version_description | No | Optional version description (for create only) |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate destructiveHint=true and readOnlyHint=false. The description adds minimal behavioral context beyond 'creating, updating, and deleting deployments'. It does not disclose side effects or permissions needed.
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 short sentences with zero wasted words. Highly concise 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 has 6 parameters, an output schema, and many siblings, the description is too brief. It lacks mention of prerequisites, return values, or distinctions from similar tools.
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 general description does not add significant 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 manages Apps Script deployments and supports creating, updating, and deleting. The verb 'manages' is slightly broad but the second sentence specifies the actions, making the purpose clear. However, it does not differentiate from sibling tools like list_deployments, so not a 5.
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 versus alternatives (e.g., list_deployments for listing). The description only states what it does, without specifying context or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
manage_doc_tabManage Doc TabBDestructive
Manage document tabs: create, rename, delete, or populate from Markdown.
| Name | Required | Description | Default |
|---|---|---|---|
| user_google_email | Yes | User's Google email address | |
| document_id | Yes | ID of the document | |
| action | Yes | Action to perform - "create", "rename", "delete", or "populate_from_markdown" | |
| tab_id | No | Tab ID (required for rename, delete, populate_from_markdown; use inspect_doc_structure to find IDs) | |
| title | No | Tab title (required for create; used by rename) | |
| index | No | Position index for new tab, 0-based among siblings (required for create) | |
| parent_tab_id | No | Optional parent tab ID to nest under (create only) | |
| markdown_text | No | Markdown source to render (populate_from_markdown only) | |
| replace_existing | No | Clear tab body before inserting markdown (default True) |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate destructiveHint=true, confirming mutation. However, the description merely lists actions without disclosing side effects, error conditions, or behavioral nuances beyond what annotations already provide.
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 that front-loads the key actions. Every word is essential, with no wasted 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?
With 9 parameters, 3 required, and multiple actions, the description is too minimal. It fails to explain the overall workflow, parameter relationships, or how to use the tool effectively, leaving 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 the schema already documents all parameters. The description adds no additional per-parameter meaning beyond the overview, meeting 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 the verb 'Manage' and the resource 'document tabs', listing the specific actions (create, rename, delete, populate from Markdown). This distinguishes it from sibling tools like inspect_doc_structure or get_doc_as_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?
No explicit when-to-use or when-not-to-use guidance. The parameter description for tab_id mentions using inspect_doc_structure to find IDs, providing a cross-reference, but overall the description lacks context on when to choose this tool over alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
manage_document_commentManage 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?
Annotations indicate the tool is not read-only and not destructive. The description explains the behavior of each action (create, reply, resolve) and their required parameters, plus a limitation for create. This adds meaningful context beyond annotations, though it does not cover potential error states or side effects like 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?
The description is extremely concise, using a short introductory line followed by a clear bullet-like list of actions with required parameters. Every sentence adds value, with no extraneous information. The structure is easy to parse for an AI agent.
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 (3 actions, 5 params, output schema present), the description covers the core functionality and a notable limitation. It does not need to explain return values due to output schema. However, it omits details on some required parameters (user_google_email, document_id) and does not mention default values or null handling. Still, it is largely complete for actionable 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?
With 0% schema coverage, the description fully bears the burden. It explains which parameters are needed for each action (e.g., comment_content for create, comment_id for reply/resolve). However, it does not describe the meaning of 'user_google_email' or 'document_id', nor any constraints on string formats or allowed values for 'action'. The added value is moderate, 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?
The description clearly states 'Manage comments on a Google Document' and lists three specific actions (create, reply, resolve), providing a clear purpose. It distinguishes itself from sibling comment tools for other document types (presentation, spreadsheet) and includes a useful limitation note about text anchoring. However, the verb 'manage' is somewhat generic, and the description could be more explicit about the overall 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 implies usage for Google Docs comments and notes a key limitation (cannot anchor to text via Drive API). However, it does not explicitly state when to use this tool versus alternatives (e.g., list_document_comments for reading) or when not to use it. The guidance is mostly implied, missing explicit exclusion criteria.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
manage_drive_accessManage Drive AccessADestructive
Consolidated tool for managing Google Drive file and folder access permissions.
Supports granting, batch-granting, updating, revoking permissions, and transferring file ownership -- all through a single entry point.
| Name | Required | Description | Default |
|---|---|---|---|
| user_google_email | Yes | The user's Google email address. Required. | |
| file_id | Yes | The ID of the file or folder. Required. | |
| action | Yes | The access management action to perform. Required. One of: - "grant": Share with a single user, group, domain, or anyone. - "grant_batch": Share with multiple recipients in one call. - "update": Modify an existing permission (role or expiration). - "revoke": Remove an existing permission. - "transfer_owner": Transfer file ownership to another user. | |
| share_with | No | Email address (user/group), domain name (domain), or omit for 'anyone'. Used by "grant". | |
| role | No | Permission role -- 'reader', 'commenter', or 'writer'. Used by "grant" (defaults to 'reader') and "update". | |
| share_type | No | Type of sharing -- 'user', 'group', 'domain', or 'anyone'. Used by "grant". Defaults to 'user'. | user |
| permission_id | No | The permission ID to modify or remove. Required for "update" and "revoke" actions. | |
| recipients | No | List of recipient objects for "grant_batch". Each should have: email (str), role (str, optional), share_type (str, optional), expiration_time (str, optional). For domain shares use 'domain' field instead of 'email'. | |
| send_notification | No | Whether to send notification emails. Defaults to True. Used by "grant" and "grant_batch". | |
| email_message | No | Custom notification email message. Used by "grant" and "grant_batch". | |
| expiration_time | No | Expiration in RFC 3339 format (e.g., "2025-01-15T00:00:00Z"). Used by "grant" and "update". | |
| allow_file_discovery | No | For 'domain'/'anyone' shares, whether the file appears in search. Used by "grant". | |
| new_owner_email | No | Email of the new owner. Required for "transfer_owner". | |
| move_to_new_owners_root | No | Move file to the new owner's My Drive root. Defaults to False. Used by "transfer_owner". |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true. Description mentions supported actions but adds no extra behavioral context beyond what the schema provides. It does not contradict 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?
Description is concise (two sentences) and front-loaded with key purpose and scope. 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 (14 parameters, output schema present), the description provides a high-level overview but does not detail return values or prerequisites. However, the output schema and annotations fill some 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 description adds minimal extra meaning. It rephrases the action types but does not provide new insight into parameter usage 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 it is a consolidated tool for managing Google Drive access permissions, listing specific actions (grant, batch-grant, update, revoke, transfer_owner). It distinguishes from sibling tools by being a single entry point for all these permission management tasks.
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 implies use for any permission management task but does not explicitly differentiate from sibling tools like set_drive_file_permissions or get_drive_file_permissions. It lacks when-not-to-use guidance or alternative recommendations.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
manage_eventManage EventBDestructive
Manages calendar events. Supports creating, updating, deleting, and RSVP.
| Name | Required | Description | Default |
|---|---|---|---|
| user_google_email | Yes | The user's Google email address. Required. | |
| action | Yes | Action to perform - "create", "update", "delete", or "rsvp". | |
| summary | No | Event title (required for create). | |
| start_time | No | Start time in RFC3339 format (required for create). | |
| end_time | No | End time in RFC3339 format (required for create). | |
| event_id | No | Event ID (required for update and delete). | |
| calendar_id | No | Calendar ID (default: 'primary'). | primary |
| description | No | Event description. | |
| location | No | Event location. | |
| attendees | No | Attendee email addresses or objects. | |
| timezone | No | Timezone (e.g., "America/New_York"). | |
| attachments | No | List of Google Drive file URLs or IDs to attach. | |
| add_google_meet | No | Whether to add/remove Google Meet. | |
| reminders | No | Custom reminder objects. | |
| use_default_reminders | No | Whether to use default reminders. | |
| transparency | No | "opaque" (busy) or "transparent" (free). | |
| visibility | No | "default", "public", "private", or "confidential". | |
| color_id | No | Event color ID (1-11, update only). | |
| recurrence | No | RFC5545 recurrence rules for a recurring event, e.g. ["RRULE:FREQ=WEEKLY;COUNT=10"]. | |
| guests_can_modify | No | Whether attendees can modify. | |
| guests_can_invite_others | No | Whether attendees can invite others. | |
| guests_can_see_other_guests | No | Whether attendees can see other guests. | |
| response | No | RSVP response — "accepted", "declined", "tentative", or "needsAction" (rsvp action only). | |
| rsvp_comment | No | Optional message to include with the RSVP response (rsvp action only). | |
| send_updates | No | Notification behavior for create, update, delete, and rsvp — "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?
Annotations already indicate destructiveHint=true and readOnlyHint=false. The description adds no additional behavioral context about irreversibility of delete, notification impacts, or RSVP semantics. It is adequate but not enriched.
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 that concisely conveys the tool's purpose. It is front-loaded but could benefit from a slightly more structured breakdown per 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 the complexity (25 parameters, multiple actions, destructive behavior), the description is too minimal. It lacks guidance on which parameters are required for each action, and does not explain return values despite the presence 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 coverage is 100%, so each parameter is described in the schema. The tool description does not add meaning beyond what's already in the parameter descriptions, so a 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 that the tool manages calendar events and enumerates the supported actions (creating, updating, deleting, RSVP). However, it does not differentiate itself from sibling tools like get_events (read-only) or 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 provides no guidance on when to use this tool versus alternatives. It does not specify context, prerequisites, or exclusions for each action.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
manage_focus_timeManage Focus TimeADestructive
Manages Focus Time events on Google Calendar. These special events auto-decline meeting invitations and, by default, set the user's chat status to Do Not Disturb, helping protect blocks of uninterrupted work time.
| Name | Required | Description | Default |
|---|---|---|---|
| user_google_email | Yes | The user's Google email address. Required. | |
| action | Yes | Action to perform - "create", "list", "update", or "delete". | |
| start_time | No | 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. | |
| end_time | No | 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. | |
| summary | No | Display text on the calendar. Defaults to "Focus Time". | |
| description | No | Event description. Useful for adding context about what the focus time is for. | |
| auto_decline_mode | No | How to handle conflicting invitations. One of: "declineAllConflictingInvitations" (default), "declineOnlyNewConflictingInvitations", "declineNone". | |
| decline_message | No | Message included when auto-declining invitations. | |
| chat_status | No | Google Chat status during the focus time. Supports "doNotDisturb" (default) and "available". | |
| recurrence | No | RFC5545 recurrence rules for a recurring Focus Time series, e.g. ["RRULE:FREQ=WEEKLY;COUNT=10"]. | |
| timezone | No | 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. | |
| time_min | No | For "list" action: start of time range. Defaults to current time. Recurring series are expanded into individual instances in the requested range. | |
| time_max | No | For "list" action: end of time range. | |
| max_results | No | For "list" action: maximum events to return. Defaults to 10. | |
| event_id | No | Event ID. Required for "update" and "delete" actions. | |
| calendar_id | No | 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. | primary |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Description adds context about auto-decline and DND behavior beyond annotations (which mark it destructive). However, it doesn't mention deletion implications or that actions like update/delete require event_id.
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. Every word 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?
Description covers the essential behavior, and combined with rich schema and output schema, provides a complete picture. Minor gap: does not mention list expansion of recurring series, but schema covers it.
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 with detailed parameter descriptions. The description does not add significant meaning beyond what is already in the 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?
Clearly states it manages Focus Time events on Google Calendar and explains their special behavior (auto-decline, DND), differentiating from regular calendar events and sibling tools like manage_event.
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 explicit guidance on when to use this tool vs alternatives (e.g., manage_event or manage_out_of_office). The description only defines what Focus Time is, not usage context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
manage_gmail_filterManage Gmail FilterADestructive
Manages Gmail filters. Supports creating and deleting filters.
| Name | Required | Description | Default |
|---|---|---|---|
| user_google_email | Yes | The user's Google email address. Required. | |
| action | Yes | Action to perform - "create" or "delete". | |
| criteria | No | Filter criteria object (required for create). | |
| filter_action | No | Filter action object (required for create). Named 'filter_action' to avoid shadowing the 'action' parameter. | |
| filter_id | No | ID of the filter to delete (required for delete). |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint: true and readOnlyHint: false, so the tool's mutating and potentially destructive nature is known. The description adds that it supports creating and deleting, but does not elaborate on side effects, permissions, or other behavioral details. It is sufficient but not enhanced.
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 unnecessary words. Front-loaded with purpose and operations. 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?
Given the presence of an output schema and full parameter descriptions, the description is adequately complete for most use cases. It lacks implicit guidance on parameter dependencies (e.g., criteria required for create), but the schema clarifies these 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 coverage is 100% and each parameter has a clear description in the schema. The tool description adds no additional parameter context beyond restating actions. Baseline 3 applies as schema carries the semantic load.
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 it manages Gmail filters and explicitly supports creating and deleting, clearly distinguishing from read-only sibling tools like list_gmail_filters. However, it does not explicitly contrast with other filter-related tools, leaving slight 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?
It indicates that the tool is for creating or deleting filters, which provides basic when-to-use guidance. However, it lacks explicit when-not-to-use instructions, prerequisites, or alternatives, so guidance is minimal.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
manage_gmail_labelManage Gmail LabelADestructive
Manages Gmail labels: create, update, or delete labels.
| Name | Required | Description | Default |
|---|---|---|---|
| user_google_email | Yes | The user's Google email address. Required. | |
| action | Yes | Action to perform on the label. | |
| name | No | Label name. Required for create, optional for update. | |
| label_id | No | Label ID. Required for update and delete operations. | |
| label_list_visibility | No | Whether the label is shown in the label list. | labelShow |
| message_list_visibility | No | Whether the label is shown in the message list. | show |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate destructiveHint=true and readOnlyHint=false. The description adds no further behavioral context, such as side effects, rate limits, or required permissions. It merely confirms the actions, offering minimal added value beyond 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 a single sentence with no wasted words. It is front-loaded with the purpose. However, it could be slightly expanded to include key details like required relations (e.g., label_id for update/delete) without becoming verbose.
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 (6 parameters, CRUD operations) and the presence of an output schema, the description is adequate but brief. It does not explain return values or link parameters to actions, relying on schema descriptions. Some gaps remain, such as not clarifying that label_id is required for update/delete.
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 input schema already describes each parameter in detail. The description adds no extra meaning beyond listing the actions, which is already clear from the 'action' parameter's enum.
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: 'Manages Gmail labels: create, update, or delete labels.' It uses specific verbs and identifies the resource (Gmail labels), distinguishing it from sibling tools like list_gmail_labels and 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 implies when to use the tool (for CRUD on labels) but does not explicitly state when not to use it or mention alternatives such as list_gmail_labels for reading or modify_gmail_message_labels for labeling messages. No usage heuristics are provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
manage_out_of_officeManage Out of OfficeADestructive
Manages Out of Office events on Google Calendar. These special events auto-decline meeting invitations and set the user's status to "Out of office" across Google Workspace.
| Name | Required | Description | Default |
|---|---|---|---|
| user_google_email | Yes | The user's Google email address. Required. | |
| action | Yes | Action to perform - "create", "list", "update", or "delete". | |
| start_time | No | 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. | |
| end_time | No | 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. | |
| summary | No | Display text on the calendar. Defaults to "Out of Office". | |
| auto_decline_mode | No | How to handle conflicting invitations. One of: "declineAllConflictingInvitations" (default), "declineOnlyNewConflictingInvitations", "declineNone". | |
| decline_message | No | Message included when auto-declining invitations. | |
| recurrence | No | RFC5545 recurrence rules for a recurring Out of Office series, e.g. ["RRULE:FREQ=WEEKLY;COUNT=10"]. | |
| timezone | No | 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. | |
| time_min | No | For "list" action: start of time range. Defaults to current time. Recurring series are expanded into individual instances in the requested range. | |
| time_max | No | For "list" action: end of time range. | |
| max_results | No | For "list" action: maximum events to return. Defaults to 10. | |
| event_id | No | Event ID. Required for "update" and "delete" actions. | |
| calendar_id | No | 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. | primary |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds behavioral context beyond annotations: it explains that these events auto-decline invitations and set the status across Google Workspace. Annotations already indicate destructiveHint=true, but the description provides specifics. No contradictions exist.
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-loading the purpose and key behavior. Every sentence adds value, with no 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?
With 14 parameters fully described in the schema and an output schema available, the description is sufficient for most scenarios. It could mention the return type or typical success behavior, but the output schema covers that.
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 detailed parameter descriptions. The tool description adds no additional parameter-level information beyond the schema, so it meets the baseline but does not exceed it.
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 manages Out of Office events on Google Calendar, distinguishing them from regular events by explaining their special behavior (auto-decline invitations, set status across Workspace). This provides a specific verb and resource, differentiating it from sibling tools like manage_event.
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 explicitly state when to use this tool vs alternatives (e.g., manage_event or manage_focus_time). While the purpose is clear, there is no guidance on prerequisites or exclusions, leaving the agent to infer usage context from the schema.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
manage_presentation_commentManage 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?
The description adds behavioral context beyond annotations by noting that the Drive API cannot anchor comments to arbitrary text and that Slides comments are element-scoped. Annotations already indicate the tool is not read-only, but the description enriches understanding of constraints and action 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, using a short sentence followed by a bullet list for actions. Every sentence adds value without redundancy, and the structure front-loads the main purpose. It is well-organized and easy to scan.
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 (three actions, five parameters) and the presence of an output schema, the description covers the actions and their dependencies adequately. However, it lacks context on the two missing parameters and does not guide the agent to related tools like list_presentation_comments for obtaining comment IDs, leaving gaps 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?
With 0% schema description coverage, the description must compensate, but it only explains three of five parameters (action, comment_content, comment_id). It omits descriptions for the required parameters 'user_google_email' and 'presentation_id', which are critical for invocation. The action-specific parameter guidance is helpful but incomplete.
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 'Manage comments on a Google Presentation' and lists three specific actions (create, reply, resolve), providing a precise verb-resource pairing. The note about Slides comments being element-scoped further distinguishes it from similar comment tools for other Google apps.
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 each action and its parameter requirements, which implies when to use them. However, it does not explicitly state when to choose this tool over siblings (e.g., manage_document_comment, manage_spreadsheet_comment) or provide when-not-to-use guidance, limiting clarity on selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
manage_spreadsheet_commentManage Spreadsheet CommentB
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?
Annotations indicate it modifies data (readOnlyHint false) but destructiveHint false. Description adds context about cell-scoped comments via Drive API limitation, which is valuable beyond annotations. However, it does not disclose behavior like threading for replies or the effect of resolving a comment.
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 structured with action bullet points and a brief note. It is concise and front-loaded with purpose. The note adds valuable context without excessive length.
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?
Critical missing detail: how to specify which cell the comment attaches to. Description notes comments are cell-scoped but provides no parameter for cell location. With output schema present, return values are not required, but input parameters are incomplete for meaningful 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 0%, so description must compensate. It explains the action parameter and conditional param requirements (comment_content for create/reply, comment_id for reply/resolve). But user_google_email, spreadsheet_id, and comment_id are not explained; user may not know how to obtain comment_id.
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 manages comments on Google Spreadsheets and lists three specific actions (create, reply, resolve). It distinguishes from sibling tools like manage_document_comment by specifying 'Spreadsheet'. However, the verb 'manage' is generic and could be more specific.
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 explicit guidance on when to use this tool versus alternatives like manage_document_comment or manage_presentation_comment. The description lacks when-not-to-use scenarios or comparisons to sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
manage_taskManage TaskCDestructive
Manage tasks: create, update, delete, or move tasks within task lists.
| Name | Required | Description | Default |
|---|---|---|---|
| user_google_email | Yes | The user's Google email address. Required. | |
| action | Yes | The action to perform. Must be one of: "create", "update", "delete", "move". | |
| task_list_id | Yes | The ID of the task list. Required for all actions. | |
| task_id | No | The ID of the task. Required for "update", "delete", and "move" actions. | |
| title | No | The title of the task. Required for "create", optional for "update". | |
| notes | No | Notes/description for the task. Used by "create" and "update" actions. | |
| status | No | Task status ("needsAction" or "completed"). Used by "update" action. | |
| due | No | Due date in RFC 3339 format (e.g., "2024-12-31T23:59:59Z"). Used by "create" and "update" actions. | |
| parent | No | Parent task ID (for subtasks). Used by "create" and "move" actions. | |
| previous | No | Previous sibling task ID (for positioning). Used by "create" and "move" actions. | |
| destination_task_list | No | Destination task list ID (for moving between lists). Used by "move" action. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate destructive behavior (destructiveHint=true). Description adds no additional behavioral context beyond listing actions; no mention of side effects, permissions, or response characteristics.
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?
Single sentence front-loads the purpose and actions. No unnecessary words, efficient yet clear enough for the core function.
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 high schema coverage and existence of output schema, the description lacks any usage context or guidance. However, schema covers parameter dependencies and output, making it minimally 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 covers all 11 parameters with detailed descriptions (100% coverage). The tool description does not add extra parameter semantics beyond 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?
Description clearly states the tool manages tasks with specific actions (create, update, delete, move). Differentiates from sibling tools like list_tasks and manage_task_list, which handle listing or list-level 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?
No explicit guidance on when to use this tool vs alternatives. Lacks when/when-not criteria, prerequisites, or context for choosing among the four actions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
manage_task_listManage Task ListADestructive
Manage task lists: create, update, delete, or clear completed tasks.
| Name | Required | Description | Default |
|---|---|---|---|
| user_google_email | Yes | The user's Google email address. Required. | |
| action | Yes | The action to perform. Must be one of: "create", "update", "delete", "clear_completed". | |
| task_list_id | No | The ID of the task list. Required for "update", "delete", and "clear_completed" actions. | |
| title | No | The title for the task list. Required for "create" and "update" actions. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate destructiveHint=true and readOnlyHint=false. The description confirms destructive actions like 'delete' and 'clear_completed', but adds no new behavioral context beyond what annotations provide (e.g., permission requirements or irreversible 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 one concise sentence, front-loaded with the verb and resource, and contains no unnecessary words. It efficiently communicates the 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 the tool's complexity (4 actions with conditional parameter requirements), the description lacks critical execution context. It does not explain that task_list_id is required for update/delete/clear_completed, nor that title is needed for create/update. This omission hampers correct invocation despite having 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 coverage is 100%, so the input schema already documents all parameters. The description only lists action values, which are also included in the schema description. It does not clarify which parameters are required for each action, leaving that to 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's function with a specific verb 'Manage' and resource 'task lists', listing all four possible actions (create, update, delete, clear_completed). This distinguishes it from sibling read-only tools like 'get_task_list' and 'list_task_lists', and from 'manage_task' which handles individual tasks.
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 implicitly conveys usage for mutating task lists, but it does not explicitly state when to use this tool versus alternatives (e.g., for reading, use 'get_task_list'). No guidance is given on prerequisites or when actions are appropriate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
modify_doc_textModify Doc TextADestructive
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.
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 |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and idempotentHint=false. The description adds context beyond annotations by explaining the operation can both insert/replace and format text in one go, and warns about the risk of using invalid segment IDs. This is useful additional 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?
The description is concise with three key sentences: one for purpose, one for a useful tip, and one for critical usage distinctions. No wasted words; information is front-loaded 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 complexity (21 parameters) and the existence of an output schema (not shown but present), the description covers essential aspects: combining text and formatting, appending, alternatives, and segment ID handling. It could mention that it modifies the document in place, but annotations already imply mutation. Overall, it is sufficiently complete 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?
Schema coverage is 100%, so baseline 3. The description adds value by explaining the TIP for end_of_segment, clarifying that start_index=0 is an alias for the first writable position, and warning about segment_id guessing. These augment 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 it modifies text in a Google Doc with specific verbs: insert/replace text and apply formatting. It distinguishes from siblings by referencing a specific alternative (update_doc_headers_footers) and providing caution about segment_id, avoiding confusion with other doc 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 explicit guidance: a TIP for appending text without index calculation, explicit instruction to prefer update_doc_headers_footers for ordinary header/footer text, and a clear warning about segment ID usage ('do not guess IDs'). This helps the agent decide when to use this tool vs alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
modify_gmail_message_labelsModify Gmail Message LabelsADestructive
Adds or removes labels from a Gmail message. To archive an email, remove the INBOX label. To delete an email, add the TRASH label.
| Name | Required | Description | Default |
|---|---|---|---|
| user_google_email | Yes | The user's Google email address. Required. | |
| message_id | Yes | The ID of the message to modify. | |
| add_label_ids | No | List of label IDs to add to the message. | |
| remove_label_ids | No | List of label IDs to remove from the message. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already convey destructive and non-idempotent behavior. The description adds value by explaining how to achieve archive (remove INBOX) and delete (add TRASH), which provides behavioral context beyond the binary 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 three sentences, front-loading the main purpose and then providing two key use-cases. No redundant information, every sentence is essential.
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 4 parameters, 100% schema coverage, and an output schema (not shown), the description covers the main use cases. However, it does not mention what happens if both add and remove lists are empty, or error handling, but these are minor omissions.
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 all parameters are documented. The description does not add extra meaning beyond the schema; it only reiterates examples. A baseline score of 3 is appropriate since the schema already handles parameter semantics 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 'Adds or removes labels from a Gmail message', providing a specific verb and resource. It also gives concrete examples (archiving by removing INBOX, deleting by adding TRASH), which distinguishes it from sibling tools like list_gmail_labels or get_gmail_message_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?
The description gives practical examples of when to use the tool for archiving and deleting, but it does not explicitly mention when to use batch_modify_gmail_message_labels instead, nor does it outline scenarios where this tool is not appropriate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
modify_sheet_valuesModify Sheet ValuesADestructive
Modifies values in a specific range of a Google Sheet - can write, update, or clear values.
| 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 | The range to modify (e.g., "Sheet1!A1:D10", "A1:D10"). Required. | |
| values | No | 2D array of values to write/update. Can be a JSON string or Python list. Required unless clear_values=True. | |
| value_input_option | No | How to interpret input values ("RAW" or "USER_ENTERED"). Defaults to "USER_ENTERED". | USER_ENTERED |
| clear_values | No | If True, clears the range instead of writing values. Defaults to False. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and readOnlyHint=false. The description aligns by mentioning 'modify' and 'clear', but adds no new behavioral details beyond what annotations provide (e.g., no mention of permissions, formula impact, or 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 concise sentence (17 words) that front-loads the main action. No redundant or unnecessary 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 description covers the basic purpose but lacks important context for a multi-mode tool, such as how values and clear_values interact (e.g., omit values when clearing). Given the output schema exists, return values are likely covered elsewhere, but the description could be more helpful 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 baseline is 3. The description does not add extra meaning about parameters; the schema already describes 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 modifies values in a Google Sheet range, listing specific operations: write, update, or clear. It uses a specific verb and resource, and implicitly distinguishes from siblings like read_sheet_values (read-only) and append_table_rows (append mode).
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 explicit guidance on when to use this tool versus alternatives (e.g., append_table_rows for appending). The agent must infer from sibling names, which is insufficient for a tool with many siblings and multiple modes (write vs clear).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
move_sheet_rowsMove Sheet RowsADestructive
Moves rows from one sheet to another within the same spreadsheet. The move is performed in a single batchUpdate (copyPaste followed by deleteDimension). Note: batchUpdate executes requests sequentially but does not roll back on partial failure — if the copy succeeds but the delete fails, rows may be duplicated. Formulas, data types, and formatting are preserved (unlike a values.get/append round-trip). Row numbers are 1-based (matching the spreadsheet UI).
| Name | Required | Description | Default |
|---|---|---|---|
| user_google_email | Yes | The user's Google email address. Required. | |
| spreadsheet_id | Yes | The ID of the spreadsheet. Required. | |
| source_sheet | Yes | Name of the sheet to move rows from. Required. | |
| start_row | Yes | First row to move (1-based, inclusive). Required. | |
| end_row | Yes | Last row to move (1-based, inclusive). Required. | |
| destination_sheet | Yes | Name of the sheet to move rows to. Required. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description reveals important behavioral traits beyond annotations: the batchUpdate process (copyPaste followed by deleteDimension), potential partial failure leading to duplicate rows, and preservation of formulas/data types/formatting. This adds significant value as the annotations only indicate destructiveness.
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 filler. First sentence states purpose, second explains batchUpdate behavior and risk, third clarifies row numbering. Every sentence contributes essential 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?
Given the tool's complexity (6 parameters, output schema present), the description covers all necessary aspects: purpose, mechanism, failure mode, data preservation, and numbering convention. It does not need to explain return values as an output schema exists. This is comprehensive for the tool's nature.
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 the schema covers 100% of parameters, the description adds useful context: row numbers are 1-based (matching UI) and row range is inclusive. This goes beyond the schema descriptions which already mention 1-based. The extra note about inclusive range and UI alignment provides marginal 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 tool moves rows between sheets within the same spreadsheet, which is a specific verb and resource. It distinguishes itself from sibling tools like append_table_rows or modify_sheet_values by focusing on move operations with batch update behavior.
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 explicitly state when to use vs alternatives, but it contrasts with a values.get/append round-trip, implying this tool is better for preserving formulas and formatting. However, no direct exclusion criteria or alternative recommendations are given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
query_freebusyQuery FreebusyARead-onlyIdempotent
Returns free/busy information for a set of calendars.
| Name | Required | Description | Default |
|---|---|---|---|
| user_google_email | Yes | The user's Google email address. Required. | |
| time_min | Yes | The start of the interval for the query in RFC3339 format (e.g., '2024-05-12T10:00:00Z' or '2024-05-12'). | |
| time_max | Yes | The end of the interval for the query in RFC3339 format (e.g., '2024-05-12T18:00:00Z' or '2024-05-12'). | |
| calendar_ids | No | 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`. | |
| group_expansion_max | No | 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. | |
| calendar_expansion_max | No | Maximum number of calendars for which FreeBusy information is to be provided. Optional. Maximum value is 50. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and openWorldHint. The description adds that it queries 'a set of calendars', which is consistent but does not elaborate on the output or any constraints. Since annotations cover safety and idempotency, the description meets minimum adequacy.
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, efficient sentence that communicates the core functionality immediately. No unnecessary words 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 presence of a complete output schema and detailed parameter descriptions, the description is sufficient. It could optionally mention that it returns busy intervals for the specified time range, but the schema covers the expected output structure.
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 all parameters are well-documented in the schema. The description does not add any additional meaning beyond what the schema already 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?
The description clearly states the verb 'returns' and the resource 'free/busy information for a set of calendars'. It distinguishes from sibling tools like get_events (which returns event details) and list_calendars (which lists calendar metadata).
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 explicit guidance on when to use this tool versus alternatives such as get_events. It does not mention any prerequisites or scenarios where query_freebusy is preferred.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
read_sheet_valuesRead Sheet ValuesARead-onlyIdempotent
Reads values from a specific range in a Google Sheet.
| 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 | No | The range to read (e.g., "Sheet1!A1:D10", "A1:D10"). Defaults to "A1:Z1000". | A1:Z1000 |
| include_hyperlinks | No | If True, also fetch hyperlink metadata for the range. Defaults to False to avoid expensive includeGridData requests. | |
| include_notes | No | If True, also fetch cell notes for the range. Defaults to False to avoid expensive includeGridData requests. | |
| include_formulas | No | If True, also fetch raw formula strings for cells that contain formulas. Useful for identifying cross-sheet references before writing back to a range. Defaults to False to avoid an extra API request. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false, idempotentHint=true, openWorldHint=true, covering safety and idempotency. Description adds no extra behavioral context, but does not contradict annotations. With annotations present, a score of 3 is adequate.
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 a single, concise sentence that is front-loaded. No unnecessary words. Every word is meaningful.
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 (6 parameters, all documented), output schema exists (though not shown), and comprehensive annotations, the description is sufficient but could briefly mention optional features (hyperlinks, notes, formulas) for completeness. Still, it adequately covers the core purpose.
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 each parameter fully described in the input schema. The description does not add any additional meaning beyond what is in the schema. Baseline 3 applies.
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 reads values from a specific range in a Google Sheet. The verb 'Reads' and resource 'values from a specific range' are specific. This distinguishes it from sibling tools like modify_sheet_values (write) or get_spreadsheet_info (metadata).
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 versus alternatives (e.g., get_spreadsheet_info, format_sheet_range). No mention of prerequisites or context. The description is too brief to help an agent decide when to invoke it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
resize_sheet_dimensionsResize Sheet DimensionsBDestructive
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]. Best for non-contiguous rows. | |
| delete_row_range | No | Contiguous range of rows to delete, as "start:end" (1-based, inclusive). Example: "5:10" deletes rows 5 through 10. More efficient than delete_rows for large contiguous ranges. | |
| 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?
Annotations already declare destructiveHint=true and readOnlyHint=false. The description adds that it 'manages' properties, implying mutation, but does not elaborate on side effects (e.g., data shifting on insert/delete). No contradiction.
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?
Single sentence listing all operations; concise and front-loaded. No unnecessary words, though could be structured as a list for 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?
With 20 parameters and an output schema, the description provides a high-level overview of all operations. It is sufficient for an agent to understand the tool's purpose without needing to read 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?
Schema coverage is 100%, so parameters are well-documented in the schema. The description only lists categories (e.g., 'resize columns/rows') without adding meaningful detail 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 states the tool manages sheet-level dimension properties and lists key actions (resize, auto-resize, freeze, hide/unhide, insert/delete). This clearly indicates the tool's scope and distinguishes it from sibling tools like format_sheet_range or move_sheet_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?
No explicit guidance on when to use this tool vs alternatives. With many sibling tools, it would benefit from statements like 'Use this for dimension changes; for formatting, use format_sheet_range instead.'
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
run_script_functionRun Script FunctionBDestructive
Executes a function in a deployed script.
| Name | Required | Description | Default |
|---|---|---|---|
| user_google_email | Yes | User's email address | |
| script_id | Yes | The script project ID | |
| function_name | Yes | Name of function to execute | |
| parameters | No | Optional list of parameters to pass | |
| dev_mode | No | Whether to run latest code vs deployed version |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate destructiveHint=true, but the description adds no further behavioral context (e.g., what side effects occur, authentication needs, rate limits). It does not contradict annotations, but fails to elaborate on the destructive nature beyond what's in structured data.
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?
Single sentence, no wasted words, front-loaded with core action. However, could benefit from additional details (e.g., return value, destructive warning) without becoming verbose. Score reflects efficient but slightly under-informative 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 destructive nature (annotations) and complexity (5 params, required fields), the description is insufficient. It should explain return values, error handling, or caution about execution side effects. Output schema exists but description doesn't even mention response format.
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 5 parameters. The tool description does not add any additional meaning beyond the schema. Baseline score of 3 is appropriate since schema fully documents 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 'Executes a function in a deployed script' clearly states the verb 'executes' and the resource 'function in a deployed script'. It distinguishes itself from sibling tools like 'get_script_content' and 'manage_deployment' which handle different aspects of script 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?
No guidance on when to use this tool vs alternatives. Lacks prerequisites, when-not-to-use, or comparison with similar tools like 'generate_trigger_code' or 'manage_deployment'. The description provides no context for appropriate usage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_contactsSearch ContactsBRead-onlyIdempotent
Search contacts by name, email, phone number, or other fields.
| Name | Required | Description | Default |
|---|---|---|---|
| user_google_email | Yes | The user's Google email address. Required. | |
| query | Yes | Search query string (searches names, emails, phone numbers). | |
| page_size | No | Maximum number of results to return (default: 30, max: 30). |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false, idempotentHint=true, and openWorldHint=true, covering safety and side-effect profile. The description adds no new behavioral context (e.g., scope of search, pagination behavior), making it adequate but not enhanced beyond 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?
Single sentence, no unnecessary words, front-loaded with verb and resource. Every word 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?
With a simple input schema (3 params) and output schema present, the description is minimal but sufficient. It does not explain output details, but the output schema likely handles that. Lacks any mention of limitations or prerequisites beyond 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's mention of fields ('name, email, phone number, or other fields') adds no extra meaning beyond what the schema's 'query' parameter description already provides. Baseline of 3 applies.
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 contacts by specified fields (name, email, phone, other), which is specific and informative. However, it does not differentiate from sibling tools like 'list_contacts' or 'get_contact', missing an opportunity to clarify distinct 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?
No explicit guidance on when to use this tool versus alternatives (e.g., list_contacts for all contacts, get_contact for a single record). The description implies search functionality but lacks exclusions or context-aware recommendations.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_customSearch CustomBRead-onlyIdempotent
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?
Annotations already declare readOnlyHint=true, destructiveHint=false, and idempotentHint=true, indicating a safe, read-only operation. The description adds no extra behavioral context beyond these annotations. It does not mention potential issues like API key requirements or rate limits, but it also does not contradict the 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 a single sentence, making it very concise. However, it is too brief and could benefit from a brief usage context or additional sentences to improve value. It is efficient but does not fully earn 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 a rich schema and annotations, the description fails to provide context for a complex tool with 13 parameters. It does not explain the output schema, prerequisites (like setting up a custom search engine), or how this tool fits into workflows. The description is incomplete for the complexity involved.
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, so the schema already documents all 13 parameters with descriptions. The tool description adds no additional meaning to the parameters beyond what the schema provides. Baseline score 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 performs a search using the Google Custom Search JSON API. It specifies the verb (performs) and resource (search using Google Custom Search JSON API), making the purpose clear. However, it lacks differentiation from sibling search tools like search_docs or search_drive_files, which could cause confusion about which search to use.
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. There is no mention of prerequisites (e.g., having a custom search engine configured), limitations, or when not to use it. The description offers no context for selection among sibling search tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_docsSearch DocsARead-onlyIdempotent
Searches for Google Docs by name using Drive API (mimeType filter).
Returns: str: A formatted list of Google Docs matching the search query.
| Name | Required | Description | Default |
|---|---|---|---|
| user_google_email | Yes | ||
| query | Yes | ||
| page_size | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, destructiveHint, idempotentHint, openWorldHint. Description adds that it uses Drive API and returns a formatted list, but does not disclose behavioral traits beyond what annotations provide.
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 brief and front-loaded, with two sentences that directly convey the tool's purpose and output without extraneous 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?
Given annotations and output schema existence, description is largely complete for a simple search tool, though it could mention pagination or result format details.
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 description only implies that 'query' is for name search. It does not explain 'user_google_email' format, 'page_size' behavior, or provide parameter semantics beyond what the schema names suggest.
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 for Google Docs by name using Drive API, distinguishing it from sibling tools like search_drive_files which search all files.
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 implies usage context (searching docs by name) but does not explicitly provide when-to-use or alternatives, though it is clear enough to differentiate from broader searches.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_drive_filesSearch Drive FilesARead-onlyIdempotent
Searches for files and folders within a user's Google Drive, including shared drives.
| Name | Required | Description | Default |
|---|---|---|---|
| user_google_email | Yes | The user's Google email address. Required. | |
| query | Yes | The search query string. Supports Google Drive search operators. NOTE: Owner-based queries ('user@example.com' in owners) DO NOT WORK in Shared Drives because files are owned by the shared drive itself, not individual users. For recent files by a specific user in Shared Drives, search by modifiedTime and use order_by='modifiedTime desc' instead. | |
| page_size | No | The maximum number of files to return. Defaults to 10. | |
| page_token | No | Page token from a previous response's nextPageToken to retrieve the next page of results. | |
| drive_id | No | ID of the shared drive to search. If None, behavior depends on `corpora` and `include_items_from_all_drives`. | |
| include_items_from_all_drives | No | Whether shared drive items should be included in results. Defaults to True. This is effective when not specifying a `drive_id`. | |
| corpora | No | Bodies of items to query (e.g., 'user', 'domain', 'drive', 'allDrives'). If 'drive_id' is specified and 'corpora' is None, it defaults to 'drive'. Otherwise, Drive API default behavior applies. Prefer 'user' or 'drive' over 'allDrives' for efficiency. | |
| file_type | No | Restrict results to a specific file type. Accepts a friendly name ('folder', 'document'/'doc', 'spreadsheet'/'sheet', 'presentation'/'slides', 'form', 'drawing', 'pdf', 'shortcut', 'script', 'site', 'jam'/'jamboard') or any raw MIME type string (e.g. 'application/pdf'). Defaults to None (all types). | |
| detailed | No | Whether to include size, modified time, and link in results. Defaults to True. | |
| order_by | No | Sort order. Comma-separated list of sort keys with optional 'desc' modifier. Valid keys: 'createdTime', 'folder', 'modifiedByMeTime', 'modifiedTime', 'name', 'name_natural', 'quotaBytesUsed', 'recency', 'sharedWithMeTime', 'starred', 'viewedByMeTime'. Example: 'modifiedTime desc' or 'folder,modifiedTime desc,name'. Defaults to None (Drive API default ordering). |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false, and idempotentHint=true. The description confirms the read-only search behavior and adds that it searches shared drives, which is consistent. No contradictions, but little added value beyond 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 one concise sentence that is front-loaded and contains no redundant information. Every word 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?
Given the tool's complexity (10 parameters, many optional) and the existence of an output schema, the description is minimal but sufficient. It does not explain pagination or typical use beyond the schema. An average score because the schema carries most of the burden.
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 parameter information beyond the schema, but the schema's parameter descriptions are very detailed including examples and notes. Thus, 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 'Searches', the resource 'files and folders within a user's Google Drive', and the scope 'including shared drives'. This distinguishes it from sibling tools like 'search_docs' which likely focus on a specific document type, or 'list_drive_items' which may not support query strings.
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 explicitly provide when-to-use guidance or contrast with alternatives. The input schema includes detailed notes on search behavior, but the description itself lacks usage context. A 3 is appropriate as the schema partially compensates.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_gmail_messagesSearch Gmail MessagesARead-onlyIdempotent
Searches messages in a user's Gmail account based on a query. Returns both Message IDs and Thread IDs for each found message, along with Gmail web interface links for manual verification. Supports pagination via page_token parameter.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | The search query. Supports standard Gmail search operators. | |
| user_google_email | Yes | The user's Google email address. Required. | |
| page_size | No | The maximum number of messages to return. Defaults to 10. | |
| page_token | No | Token for retrieving the next page of results. Use the next_page_token from a previous response. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint=true and idempotentHint=true, so the description adds value by stating it returns Message IDs, Thread IDs, and web links, and supports pagination. However, it does not disclose rate limits, authentication details, or behavior with large result sets.
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 concise sentences, front-loaded with the core purpose. Each sentence adds essential information: action, return values, and pagination support. 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?
Given the presence of an output schema and annotations, the description is fairly complete. It covers returned fields and pagination. It could improve by mentioning query syntax or sorting order, but overall it meets the needs for a search 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?
With 100% schema coverage, the input schema already documents all parameters. The description mentions pagination via page_token but does not add significant meaning 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 searches Gmail messages based on a query, specifying the resource (Gmail messages) and action (search). It distinguishes from sibling tools like search_messages (generic) and get_gmail_message_content (retrieval) by mentioning Gmail-specific return fields and pagination.
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 searching Gmail messages but does not explicitly compare to alternatives like search_custom or search_drive_files. No guidance on when not to use this tool versus other search tools is provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_messagesSearch MessagesARead-onlyIdempotent
Searches for messages in Google Chat spaces by text content and/or time range.
| Name | Required | Description | Default |
|---|---|---|---|
| user_google_email | Yes | ||
| query | No | Optional text to search for. If omitted, only time_filter is applied. | |
| space_id | No | Optional space to restrict the search to. | |
| page_size | No | Maximum number of messages to return per space. | |
| time_filter | No | Optional filter using Chat API createTime syntax. Examples: 'createTime > "2026-03-18T00:00:00-03:00"' 'createTime > "2026-03-18T00:00:00-03:00" AND createTime < "2026-03-19T00:00:00-03:00"' | |
| max_spaces | No | Maximum number of spaces to search when space_id is not provided (default 10). |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, so the description's 'Searches' is consistent. However, it adds only the filtering context (text and time) without discussing pagination, cross-space behavior, or any side effects. No contradiction with 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 a single, front-loaded sentence of 14 words. Every word is essential; no fluff or 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 presence of an output schema and high schema coverage, the description is mostly adequate but lacks mention of search scope (e.g., all spaces vs. specific) or how the 'max_spaces' parameter affects behavior. Could be more complete for a search 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 83%, so the input schema already documents most parameters clearly. The description adds no additional parameter meaning beyond what's 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?
The description clearly states the verb 'Searches', the resource 'messages in Google Chat spaces', and the criteria 'by text content and/or time range'. It differentiates from siblings like 'get_messages' (retrieval by ID) and 'search_gmail_messages' (Gmail). 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?
While the description indicates the tool is for searching messages in Google Chat, it does not provide explicit guidance on when to use this tool versus alternatives (e.g., 'get_messages', 'search_gmail_messages'). There is no mention of prerequisites or scenarios to avoid.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
send_gmail_messageSend 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". Optional "content_id" (string) makes the attachment inline-rendered: it lands in a multipart/related part with `Content-ID: <content_id>` and `Content-Disposition: inline`, and the HTML body can reference it via `<img src="cid:<content_id>">` (RFC 2392). Without `content_id` the attachment is a regular multipart/mixed attachment. Example: [{"url": "https://host/attachments/abc-123", "filename": "report.pdf"}] | |
| include_signature | No | Whether to append the Gmail signature from Settings > Signature when available. Defaults to true. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate a non-read-only, non-destructive mutation. The description adds that it supports replies and Send As, but does not disclose rate limits, auth details beyond the user_google_email param, or idempotency concerns. The annotations already provide the basic behavioral profile, so the description adds marginal 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?
Two concise sentences: first covers core function, second covers a notable feature (Send As). No redundant or extraneous 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?
Given the tool's complexity (14 params), detailed schema, and output schema, the description covers the essentials (send new/reply, attachments, Send As). It could mention signature handling or body format, but those are covered in schema. The description 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%, and each parameter has detailed descriptions. The tool description does not add any new parameter information beyond what the schema already provides, so a 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 the verb ('sends'), the resource (Gmail email), and the scope (new emails and replies with attachments). It also mentions the Send As feature, distinguishing it from sibling tools like draft_gmail_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 implies usage scenarios (new emails, replies, Send As) but does not explicitly state when not to use it or compare it to alternatives like draft_gmail_message or send_message.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
send_messageSend MessageC
Sends a message to a Google Chat space.
| Name | Required | Description | Default |
|---|---|---|---|
| user_google_email | Yes | ||
| space_id | Yes | ||
| message_text | Yes | ||
| thread_key | No | Reply in a thread by app-defined key (creates thread if not found). | |
| thread_name | No | Reply in an existing thread by its resource name (e.g. spaces/X/threads/Y). |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations show write operation (readOnlyHint=false) but description adds no behavioral traits beyond that. Does not mention rate limits, permissions, or reply behavior despite schema hints in thread_key/thread_name.
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?
Extremely concise (one sentence, 6 words), but at the cost of omitting important context. Adequate for minimal viability but not optimal.
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, the description does not mention return values. With 5 parameters and thread options, the description is too brief to cover 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 40%; only thread_key and thread_name have descriptions. The tool description does not explain any parameters, failing to compensate for the 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?
Description states 'Sends a message to a Google Chat space' with a clear verb+resource. It distinguishes from siblings like send_gmail_message by specifying 'Google Chat space', but does not explicitly differentiate further.
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 versus alternatives (e.g., create_reaction, search_messages). No context on prerequisites, when not to use, or best practices.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_drive_file_permissionsSet Drive File PermissionsADestructive
Sets file-level sharing settings and controls link sharing for a Google Drive file or folder.
This is a high-level tool for the most common permission changes. Use this to toggle "anyone with the link" access or configure file-level sharing behavior. For managing individual user/group permissions, use share_drive_file or update_drive_permission instead.
| Name | Required | Description | Default |
|---|---|---|---|
| user_google_email | Yes | The user's Google email address. Required. | |
| file_id | Yes | The ID of the file or folder. Required. | |
| link_sharing | No | Control "anyone with the link" access for the file. - "off": Disable "anyone with the link" access for this file. - "reader": Anyone with the link can view. - "commenter": Anyone with the link can comment. - "writer": Anyone with the link can edit. | |
| writers_can_share | No | Whether editors can change permissions and share. If False, only the owner can share. Defaults to None (no change). | |
| copy_requires_writer_permission | No | Whether viewers and commenters are prevented from copying, printing, or downloading. Defaults to None (no change). |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate destructive (write) behavior; the description adds context about being 'high-level' and for common changes, which aids agent understanding. No contradiction with 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?
Four sentences, front-loaded with purpose, then scope, example use, and alternatives. No wasted words, perfectly 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, usage guidelines, and distinguishes from siblings. Output schema exists, so return values need not be explained. Could mention prerequisites or immediacy of changes, but overall 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 baseline is 3. The description adds no parameter details; all parameter meaning is conveyed by 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 ('sets file-level sharing settings and controls link sharing') and the resource ('Google Drive file or folder'). It distinguishes from siblings by naming alternatives for individual permission 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 says it's a 'high-level tool for the most common permission changes' and provides clear when-to-use and when-not-to-use guidance by referencing sibling tools for individual permissions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_publish_settingsSet Publish SettingsB
Updates the publish settings of a form.
| Name | Required | Description | Default |
|---|---|---|---|
| user_google_email | Yes | The user's Google email address. Required. | |
| form_id | Yes | The ID of the form to update publish settings for. | |
| publish_as_template | No | Whether to publish as a template. Defaults to False. | |
| require_authentication | No | Whether to require authentication to view/submit. Defaults to False. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate not read-only, not destructive, and not idempotent. The description adds no further behavioral disclosure beyond 'updates', which is consistent with annotations. No additional context about side effects or state changes.
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 a single sentence. It is front-loaded and efficient, though it could benefit from a bit more detail without losing 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?
Given the presence of an output schema and the tool's moderate complexity (4 parameters, 2 required booleans), the description is too minimal. It does not explain what 'publish settings' entails, the effects of parameters like publish_as_template or require_authentication, or how this tool relates to batch_update_form.
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 describes all parameters with 100% coverage, so the description adds no additional meaning. The baseline of 3 applies.
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 'updates' and the resource 'publish settings of a form', distinguishing it from other form-related sibling tools like get_form or batch_update_form. However, it does not elaborate on what specific settings are updated.
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 batch_update_form, nor any prerequisites or conditions for usage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
start_google_authStart 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?
The description discloses that the tool is legacy, disabled under OAuth 2.1, and that the system auto-handles credentials. It adds context beyond annotations (openWorldHint=true) by explaining automation behavior, but lacks specifics on the OAuth flow steps or 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 concise and well-structured, with a main sentence, a note, and bullet points. It front-loads the purpose and immediately provides guidance, with no superfluous 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?
Despite having an output schema, the description omits critical details: parameter meanings, authentication flow specifics, and output expectations. For a complex OAuth tool with zero schema parameter descriptions, this is incomplete.
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 fails to explain the parameters 'service_name' and 'user_google_email'. It does not clarify what values they expect or how they affect the OAuth flow, leaving the agent without necessary usage 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 states 'Manually initiate Google OAuth authentication flow,' which is a specific verb+resource combination. It clearly distinguishes itself from sibling tools that handle Google Workspace operations, indicating this tool is solely for authentication.
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 three conditions for use and advises that 'in most cases, simply try calling the Google Workspace tool you need' for automatic authentication. It also notes this is a legacy tool disabled when OAuth 2.1 is enabled, providing clear guidance on when to use alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_drive_fileUpdate Drive FileADestructive
Updates metadata, properties, and/or content of a Google Drive file.
Providing one of content, file_path, or file_url replaces the file's
content in place. The source is uploaded with its source MIME type so the Drive
API applies the same format conversion as import_to_google_doc (markdown headings,
tables, bold, etc.) while preserving the existing file ID, sharing, comments, and
links. Metadata and content can be updated in a single call.
| Name | Required | Description | Default |
|---|---|---|---|
| user_google_email | Yes | The user's Google email address. Required. | |
| file_id | Yes | The ID of the file to update. Required. | |
| name | No | New name for the file. | |
| description | No | New description for the file. | |
| mime_type | No | New MIME type (note: changing type may require content upload). | |
| add_parents | No | Comma-separated folder IDs to add as parents. | |
| remove_parents | No | Comma-separated folder IDs to remove from parents. | |
| starred | No | Whether to star/unstar the file. | |
| trashed | No | Whether to move file to/from trash. | |
| writers_can_share | No | Whether editors can share the file. | |
| copy_requires_writer_permission | No | Whether copying requires writer permission. | |
| properties | No | Custom key-value properties for the file. | |
| content | No | New text content for text-based formats (markdown, TXT, HTML). | |
| file_path | No | Local file path for binary formats (DOCX, ODT). Supports file:// URLs. | |
| file_url | No | Remote http(s) URL to fetch new content from. | |
| source_format | No | Source format hint for conversion (md, markdown, docx, txt, html, rtf, odt). Auto-detected when omitted. Provide at most one of content/file_path/file_url. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Disclosures beyond annotations: preserves file ID, sharing, comments, links; single call for metadata+content. No contradiction with 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?
Two tight paragraphs, front-loaded with core purpose; every sentence adds unique 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?
Adequately covers core behavior for a complex 16-parameter update tool; missing details are in schema/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?
100% schema coverage, baseline 3. Description adds value by explaining content replacement interplay and format conversion hints.
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 updates metadata, properties, and content of a Google Drive file, distinguishing it from creation or copying 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 explicit guidance on content replacement via content/file_path/file_url and compares to import_to_google_doc. Lacks explicit when-not-to-use but context suffices.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_paragraph_styleUpdate 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?
Annotations indicate readOnlyHint=false, destructiveHint=false, idempotentHint=false, openWorldHint=true. The description adds that operations can be applied in a single call but does not provide additional behavioral context (e.g., index validity, error handling). No contradiction with 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 two sentences, front-loading the core purpose, with no wasted 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 tool has 25 parameters and an output schema, the description adequately summarizes the main capabilities (heading styles, lists, formatting). It does not need to enumerate all parameters as schema covers them.
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 all parameters have descriptions in the schema. The description adds high-level context but does not add meaning beyond the schema's individual parameter 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 verb 'apply' and the resource 'paragraph-level formatting, heading styles, and/or list formatting'. It is specific about the tool's function but does not explicitly differentiate from sibling tools like modify_doc_text or 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?
The description provides no guidance on when to use this tool versus alternatives. It does not mention exclusions, prerequisites, or comparison to similar tools such as modify_doc_text.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_script_contentUpdate Script ContentADestructive
Updates or creates files in a script project.
| Name | Required | Description | Default |
|---|---|---|---|
| user_google_email | Yes | User's email address | |
| script_id | Yes | The script project ID | |
| files | Yes | List of file objects with name, type, and source |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare destructiveHint=true, so description's 'updates or creates' implies potential overwrites, but adds no additional behavioral context beyond annotations. No contradiction.
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?
Single sentence, no filler, perfectly concise and front-loaded with 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?
With output schema present and annotations covering safety, description is mostly sufficient. Could hint at idempotency or side effects, but overall adequate for a mutation tool with good annotations.
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%, with clear parameter descriptions. Description does not add extra 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?
Description clearly states it updates or creates files in a script project. Verb 'updates or creates' paired with resource 'files in a script project' is specific and distinguishes from sibling tools like get_script_content (read) and create_script_project (create 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?
No guidance on when to use this tool vs alternatives. Does not mention when to prefer get_script_content first, or that it can create new files in existing projects, or any prerequisites like script_id existence.
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.
122 tool updates
v1.21.3- First observed
append_table_rows - 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
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_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_script_project - First observed
download_chat_attachment - First observed
draft_gmail_message - First observed
export_doc_to_pdf - First observed
find_and_replace_doc - First observed
format_sheet_range - 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_drive_file_content - First observed
get_drive_file_download_url - First observed
get_drive_file_permissions - 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_spreadsheet_info - First observed
get_task - First observed
get_task_list - First observed
get_version - First observed
import_to_google_doc - First observed
import_to_google_sheets - First observed
import_to_google_slides - First observed
insert_doc_elements - First observed
insert_doc_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_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_doc_tab - 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_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
move_sheet_rows - First observed
query_freebusy - First observed
read_sheet_values - First observed
resize_sheet_dimensions - 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
start_google_auth - First observed
update_doc_headers_footers - First observed
update_drive_file - First observed
update_paragraph_style - First observed
update_script_content
TDQS
Tools cover many distinct Google Workspace actions with clear separation. Some slight overlap exists (e.g., get_doc_content vs get_doc_as_markdown) but descriptions clarify differences.
Most tools follow verb_noun pattern (create_doc, list_calendars). Minor inconsistencies like debug_docs_runtime_info and import_to_google_doc break the pattern slightly.
122 tools is excessive for a single server. While covering multiple services, this number overwhelms agents and increases selection difficulty.
The surface covers nearly all Google Workspace services (Docs, Sheets, Slides, Gmail, Calendar, Drive, Forms, Chat, Contacts, Tasks, Apps Script) with CRUD and lifecycle operations for each.
Maintenance
Related MCP Connectors
Hosted Google Calendar MCP server for AI agents. No self-hosting or Google Cloud setup.
AI-powered medical document management for cancer patients. Google Drive, Gmail, Calendar via MCP.
- AstrocalOAuthdev.astrocal
AI-native scheduling: check availability, book meetings, cancel and reschedule via MCP
Automate 1,000+ services from any MCP-compatible AI agent: build Applets, run actions and queries.
Related MCP Servers
- AlicenseNot gradedqualityAmaintenanceEnables management of Google Drive files, Docs, Sheets, Slides, and Calendar events through natural language using the MCP protocol.11,583215MIT
- AlicenseBqualityAmaintenanceMCP server integrating multiple Google Workspace services including Gmail, Calendar, Drive, Sheets, Docs, Tasks, People, Forms, and Slides, enabling users to manage emails, events, files, documents, and more through natural language.15MIT
- AlicenseNot gradedqualityDmaintenanceEnables management of Google Drive files, Docs, Sheets, and Slides through natural language using MCP, with support for file operations, search, and shared drives.20MIT
- AlicenseBqualityDmaintenanceEnables natural language control over Google Workspace services including Gmail, Calendar, Drive, Docs, Sheets, Slides, Forms, Tasks, Chat, Contacts, Apps Script, and Custom Search via a remote MCP server hosted on Google Cloud Run.114MIT
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/theolefort-cyber/mcpworkspace'
If you have feedback or need assistance with the MCP directory API, please join our Discord server