Skip to main content
Glama

Google Workspace MCP Server

License: MIT Python 3.10+ PyPI PyPI Downloads Website

Full natural language control over Google Calendar, Drive, Gmail, Docs, Sheets, Slides, Forms, Tasks, Contacts, and Chat through all MCP clients, AI assistants and developer tools.

Includes a full featured CLI & 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.
NOTE

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 if ALLOWED_FILE_DIRS is 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 calendar

Secretless / Public OAuth 2.1 (PKCE) Quick Start

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

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

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

Credential setup → · All launch options → · Tier details →

Variable

Purpose

🔐 Authentication

GOOGLE_OAUTH_CLIENT_ID

required

OAuth client ID from Google Cloud

GOOGLE_OAUTH_CLIENT_SECRET

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

OAUTHLIB_INSECURE_TRANSPORT

required*

Set to 1 for development — allows http:// redirect

USER_GOOGLE_EMAIL

Default email for single-user auth

GOOGLE_CLIENT_SECRET_PATH

Custom path to client_secret.json

GOOGLE_MCP_CREDENTIALS_DIR

Credential directory — default ~/.google_workspace_mcp/credentials

🖥️ Server

WORKSPACE_MCP_BASE_URI

Base server URI (no port) — default http://localhost

WORKSPACE_MCP_PORT

Listening port — default 8000. Also controls the stdio-mode OAuth callback port. The PORT env var takes precedence if set.

WORKSPACE_MCP_HOST

Bind host — default 0.0.0.0 for OAuth 2.1 HTTP, 127.0.0.1 for legacy streamable HTTP.

WORKSPACE_MCP_TRANSPORT

stdio or streamable-http; used when --transport is not passed

WORKSPACE_MCP_HTTP_PORT

Advanced legacy-stdio sidecar /mcp port for local workspace-cli access. Disabled when empty. Binds to 127.0.0.1 only and is accessible to local processes.

WORKSPACE_EXTERNAL_URL

External URL for reverse proxy setups

WORKSPACE_ATTACHMENT_DIR

Downloaded attachments dir and default trusted local attachment directory — default ~/.workspace-mcp/attachments/

WORKSPACE_MCP_URL

Remote MCP endpoint URL for CLI

ALLOWED_FILE_DIRS

Colon-separated allowlist for local file reads

🧰 Tool Selection

WORKSPACE_MCP_TOOLS

Comma-separated services, e.g. gmail,drive,calendar; empty means all services

WORKSPACE_MCP_TOOL_TIER

core, extended, or complete; empty means all tools

WORKSPACE_MCP_READ_ONLY

true, 1, or yes to request read-only scopes and filter write tools

WORKSPACE_MCP_PERMISSIONS

Space-separated service:level entries, e.g. gmail:send drive:readonly; mutually exclusive with tools and read-only

🔑 OAuth 2.1 & Multi-User

MCP_ENABLE_OAUTH21

true to enable OAuth 2.1 multi-user support. Required for remote or shared HTTP endpoints (--transport streamable-http); optional for local-only legacy HTTP, which binds to 127.0.0.1 by default.

EXTERNAL_OAUTH21_PROVIDER

true for external OAuth flow with bearer tokens

WORKSPACE_MCP_STATELESS_MODE

true for stateless container-friendly operation

WORKSPACE_MCP_LOG_DIR

Directory for mcp_server_debug.log — defaults to ~/.google_workspace_mcp/logs

GOOGLE_OAUTH_REDIRECT_URI

Override OAuth callback URL — default auto-constructed

OAUTH_CUSTOM_REDIRECT_URIS

Comma-separated additional redirect URIs

OAUTH_ALLOWED_ORIGINS

Comma-separated additional CORS origins

WORKSPACE_MCP_OAUTH_PROXY_STORAGE_BACKEND

memory, disk, or valkey — see storage backends

FASTMCP_SERVER_AUTH_GOOGLE_JWT_SIGNING_KEY

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

WORKSPACE_MCP_ALLOWED_CLIENT_REDIRECT_URIS

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 (*, *.example.com)

🗄️ Credential Store

WORKSPACE_MCP_CREDENTIAL_STORE_BACKEND

local_directory (default) or gcs — see credential store system

WORKSPACE_MCP_CREDENTIALS_DIR

Directory for the local_directory backend

GOOGLE_MCP_CREDENTIALS_DIR

Backward-compatible alias for WORKSPACE_MCP_CREDENTIALS_DIR

WORKSPACE_MCP_GCS_BUCKET

Required when backend is gcs — GCS bucket name

WORKSPACE_MCP_GCS_PREFIX

Optional object-name prefix for the gcs backend

WORKSPACE_MCP_GCS_REQUIRE_CMEK

true to require a bucket default KMS key at startup (fails fast if unset)

🔧 Service Account

GOOGLE_SERVICE_ACCOUNT_KEY_FILE

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

GOOGLE_SERVICE_ACCOUNT_KEY_JSON

Inline service account JSON key (alternative to file)

DWD_ALLOWED_DOMAINS

Comma-separated domain allowlist for per-request impersonation (optional)

🔍 Custom Search

GOOGLE_PSE_API_KEY

API key for Programmable Search Engine

GOOGLE_PSE_ENGINE_ID

Search Engine ID for PSE

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


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

  1. Create ProjectOpen Console → → Create new project

  2. Create OAuth Credentials — APIs & Services → Credentials → Create Credentials → OAuth Client ID

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

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

  3. Enable APIs — APIs & Services → Library, then enable each service:

  4. Set Credentials — see Environment Variable Reference above, or:

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

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

Full OAuth documentation → · Credential setup details →

Google Custom Search Setup

1. Create Search Engine

programmablesearchengine.google.com
/controlpanel/create

→ Configure sites or entire web
→ Note your Engine ID (cx)

Open Control Panel →

2. Get API Key

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

→ Create/select project
→ Enable Custom Search API
→ Create credentials (API Key)

Get API Key →

3. Set Variables

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

Configure in environment

Complete Setup Process:

  1. Create Search Engine - Visit the Control Panel

    • Choose "Search the entire web" or specify sites

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

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

    • Enable "Custom Search API" in your project

    • Create credentials → API Key

    • Restrict key to Custom Search API (recommended)

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

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

Full Documentation →

Start the Server

📌 Transport Mode Guidance: Use streamable HTTP mode (--transport streamable-http) for all modern MCP clients including Claude Code, VS Code MCP, and MCP Inspector. 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 state parameter 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-user

Simplified authentication ⚠️ Cannot be used with OAuth 2.1 mode

▶ Selective Tool Loading

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

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

🔒 Read-Only Mode

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

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

Read-only mode provides secure, restricted access by:

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

  • Automatically filtering out tools that require write permissions at startup

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

🔐 Granular Permissions

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

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

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

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

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

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

  • Other services currently support: readonly, full

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

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

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

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 list

The 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-mcp

Available Services: gmaildrivecalendardocssheetsformstaskscontactschatsearch

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 list

View all available tools

◆ Call a Tool

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

Execute a tool with key=value arguments

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

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

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

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

Tool Tiers

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

Available Tiers

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

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

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

Important Notes

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

Usage Examples

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

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

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

📋 Credential Configuration

🚀 Environment Variables

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

Best for production

📁 File-based

# Download & place in project root
client_secret.json

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

Traditional method

⚡ .env File

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

Best for development

Loading Priority

  1. Environment variables (export VAR=value)

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

  3. client_secret.json via GOOGLE_CLIENT_SECRET_PATH

  4. Default client_secret.json in project root

Why Environment Variables?

  • Docker/K8s ready - Native container support

  • Cloud platforms - Heroku, Railway, Vercel

  • CI/CD pipelines - GitHub Actions, Jenkins

  • No secrets in git - Keep credentials secure

  • Easy rotation - Update without code changes


🧰 Available Tools

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

📖 Looking for detailed parameters? Visit the Complete Documentation → for comprehensive tool reference, examples, and API guides!

📅 Google Calendar calendar_tools.py

Tool

Tier

Description

list_calendars

Core

List accessible calendars

get_events

Core

Retrieve events with time range filtering

manage_event

Core

Create, update, or delete calendar events

create_calendar

Extended

Create a new secondary Google Calendar

query_freebusy

Extended

Query free/busy information for calendars

manage_out_of_office

Extended

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

manage_focus_time

Extended

Create, list, update, or delete Focus Time events

📁 Google Drive drive_tools.py

Tool

Tier

Description

search_drive_files

Core

Search files with query syntax

get_drive_file_content

Core

Read file content (Office, PDF, image)

get_drive_file_download_url

Core

Download Drive files to local disk

create_drive_file

Core

Create files or fetch from URLs

create_drive_folder

Core

Create empty folders in Drive or shared drives

import_to_google_doc

Core

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

import_to_google_slides

Core

Import presentation files (PPTX, PPT, ODP) as Google Slides

import_to_google_sheets

Core

Import spreadsheet files (XLSX, CSV, TSV, etc.) as Google Sheets

get_drive_shareable_link

Core

Get shareable links for a file

list_drive_items

Extended

List folder contents or shared drives

copy_drive_file

Extended

Copy existing files (templates) with optional renaming

update_drive_file

Extended

Update metadata, move files, or replace Google Apps content

manage_drive_access

Extended

Grant, update, revoke permissions, and transfer ownership

set_drive_file_permissions

Extended

Set link sharing and file-level sharing settings

get_drive_file_permissions

Complete

Get file metadata, parents, and permissions

check_drive_file_public_access

Complete

Check public sharing status

📧 Gmail gmail_tools.py

Tool

Tier

Description

search_gmail_messages

Core

Search with Gmail operators

get_gmail_message_content

Core

Retrieve message content

get_gmail_messages_content_batch

Core

Batch retrieve message content

send_gmail_message

Core

Send emails

get_gmail_thread_content

Extended

Get full thread content

modify_gmail_message_labels

Extended

Modify message labels

list_gmail_labels

Extended

List available labels

list_gmail_filters

Extended

List Gmail filters

manage_gmail_label

Extended

Create/update/delete labels

manage_gmail_filter

Extended

Create or delete Gmail filters

draft_gmail_message

Extended

Create drafts

get_gmail_threads_content_batch

Complete

Batch retrieve thread content

batch_modify_gmail_message_labels

Complete

Batch modify labels

start_google_auth

Complete

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

Both send_gmail_message and draft_gmail_message support attachments via two methods:

Option 1: File Path (local server only)

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

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

Option 2: Base64 Content (works everywhere)

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

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

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

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

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

To customize the storage directory:

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

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

📝 Google Docs docs_tools.py

Tool

Tier

Description

get_doc_content

Core

Extract document text

create_doc

Core

Create new documents

modify_doc_text

Core

Insert, replace, and richly format text with tab/segment targeting, append-to-segment support, advanced typography, and link management

search_docs

Extended

Find documents by name

find_and_replace_doc

Extended

Find and replace text

list_docs_in_folder

Extended

List docs in folder

insert_doc_elements

Extended

Add tables, lists, page breaks

update_paragraph_style

Extended

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

get_doc_as_markdown

Extended

Export document as formatted Markdown with optional comments

insert_doc_image

Complete

Insert images from Drive/URLs

update_doc_headers_footers

Complete

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

batch_update_doc

Complete

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

inspect_doc_structure

Complete

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

export_doc_to_pdf

Extended

Export document to PDF

create_table_with_data

Complete

Create data tables

debug_table_structure

Complete

Debug table issues

list_document_comments

Complete

List all document comments

manage_document_comment

Complete

Create, reply to, or resolve comments

manage_doc_tab

Complete

Create, rename, delete, or populate tabs from markdown

📊 Google Sheets sheets_tools.py

Tool

Tier

Description

read_sheet_values

Core

Read cell ranges

modify_sheet_values

Core

Write/update/clear cells

create_spreadsheet

Core

Create new spreadsheets

list_spreadsheets

Extended

List accessible spreadsheets

get_spreadsheet_info

Extended

Get spreadsheet metadata

format_sheet_range

Extended

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

list_sheet_tables

Extended

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

create_sheet

Complete

Add sheets to existing files

move_sheet_rows

Complete

Move rows between sheets within a spreadsheet

append_table_rows

Complete

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

list_spreadsheet_comments

Complete

List all spreadsheet comments

manage_spreadsheet_comment

Complete

Create, reply to, or resolve comments

manage_conditional_formatting

Complete

Add, update, or delete conditional formatting rules

🖼️ Google Slides slides_tools.py

Tool

Tier

Description

create_presentation

Core

Create new presentations

get_presentation

Core

Retrieve presentation details

batch_update_presentation

Extended

Apply multiple updates

get_page

Extended

Get specific slide information

get_page_thumbnail

Extended

Generate slide thumbnails

list_presentation_comments

Complete

List all presentation comments

manage_presentation_comment

Complete

Create, reply to, or resolve comments

📋 Google Forms forms_tools.py

Tool

Tier

Description

create_form

Core

Create new forms

get_form

Core

Retrieve form details & URLs

set_publish_settings

Complete

Configure form settings

get_form_response

Complete

Get individual responses

list_form_responses

Extended

List all responses with pagination

batch_update_form

Complete

Apply batch updates (questions, settings)

✓ Google Tasks tasks_tools.py

Tool

Tier

Description

list_tasks

Core

List tasks with filtering

get_task

Core

Retrieve task details

manage_task

Core

Create, update, delete, or move tasks

list_task_lists

Complete

List task lists

get_task_list

Complete

Get task list details

manage_task_list

Complete

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

👤 Google Contacts contacts_tools.py

Tool

Tier

Description

search_contacts

Core

Search contacts by name, email, phone

get_contact

Core

Retrieve detailed contact info

list_contacts

Core

List contacts with pagination

manage_contact

Core

Create, update, or delete contacts

list_contact_groups

Extended

List contact groups/labels

get_contact_group

Extended

Get group details with members

manage_contacts_batch

Complete

Batch create, update, or delete contacts

manage_contact_group

Complete

Create, update, delete groups, or modify membership

💬 Google Chat chat_tools.py

Tool

Tier

Description

list_spaces

Extended

List chat spaces/rooms

get_messages

Core

Retrieve space messages

get_thread_messages

Core

Retrieve / search all messages within a single thread

send_message

Core

Send messages to spaces

search_messages

Core

Search across chat history (paginated deep scan, multi-word matching)

create_reaction

Core

Add emoji reaction to a message

download_chat_attachment

Extended

Download attachment from a chat message

Tool

Tier

Description

search_custom

Core

Perform web searches (supports site restrictions via sites parameter)

get_search_engine_info

Complete

Retrieve search engine metadata

⚡ Google Apps Script apps_script_tools.py

Tool

Tier

Description

list_script_projects

Core

List accessible Apps Script projects

get_script_project

Core

Get complete project with all files

get_script_content

Core

Retrieve specific file content

create_script_project

Core

Create new standalone or bound project

update_script_content

Core

Update or create script files

run_script_function

Core

Execute function with parameters

list_deployments

Extended

List all project deployments

manage_deployment

Extended

Create, update, or delete script deployments

list_script_processes

Extended

View recent executions and status

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


Connect to Claude Desktop

The 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 state parameter, but only when --single-user is 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.

  1. Open Claude Desktop Settings → Developer → Edit Config

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

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

  2. Add the server configuration:

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

Connect to LM Studio

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

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

2. Advanced / Cross-Platform Installation

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

Instant CLI (uvx)

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

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

Local Development Setup

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

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

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

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

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

OAuth 2.1 Support (Multi-User Bearer Token Authentication)

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

When to use OAuth 2.1:

  • Multiple users accessing the same MCP server instance

  • Need for bearer token authentication instead of passing user emails

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

  • Production environments requiring secure session management

  • Browser-based clients requiring CORS support

⚠️ Important: Mutually exclusive authentication modes

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

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

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

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

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

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

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

If MCP_ENABLE_OAUTH21 is not set to true, the server 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 to OAUTH_ALLOWED_ORIGINS permits 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:

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

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

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

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-http

Key Features:

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

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

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

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

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

Requirements:

  • Must be used with MCP_ENABLE_OAUTH21=true

  • Incompatible with single-user mode

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

This mode is ideal for:

  • Cloud deployments where persistent storage is unavailable

  • Multi-tenant environments requiring strict isolation

  • Containerized applications with read-only filesystems

  • Serverless functions and ephemeral compute environments

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

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

OAuth Proxy Storage Backends

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

Available Backends:

Backend

Best For

Persistence

Multi-Server

Memory

Development, testing

Disk

Single-server production

Valkey/Redis

Distributed production

Configuration:

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

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

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

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

Variable

Default

Description

WORKSPACE_MCP_OAUTH_PROXY_VALKEY_HOST

localhost

Valkey/Redis host

WORKSPACE_MCP_OAUTH_PROXY_VALKEY_PORT

6379

Port (6380 auto-enables TLS)

WORKSPACE_MCP_OAUTH_PROXY_VALKEY_DB

0

Database number

WORKSPACE_MCP_OAUTH_PROXY_VALKEY_USE_TLS

auto

Enable TLS (auto if port 6380)

WORKSPACE_MCP_OAUTH_PROXY_VALKEY_USERNAME

-

Authentication username

WORKSPACE_MCP_OAUTH_PROXY_VALKEY_PASSWORD

-

Authentication password

WORKSPACE_MCP_OAUTH_PROXY_VALKEY_REQUEST_TIMEOUT_MS

5000

Request timeout for remote hosts

WORKSPACE_MCP_OAUTH_PROXY_VALKEY_CONNECTION_TIMEOUT_MS

10000

Connection timeout for remote hosts

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

External OAuth 2.1 Provider Mode

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

Enabling External OAuth 2.1 Provider Mode:

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

How It Works:

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

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

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

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

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

Key Features:

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

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

  • Stateless by design: Works seamlessly with WORKSPACE_MCP_STATELESS_MODE=true

  • External identity providers: Integrate with your existing authentication infrastructure

Requirements:

  • Must be used with MCP_ENABLE_OAUTH21=true

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

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

  • Each tool call request must include valid bearer token

Use Cases:

  • Integrating with existing authentication systems

  • Custom OAuth flows managed by your application

  • API gateways that handle authentication upstream

  • Multi-tenant SaaS applications with centralized auth

  • Mobile or web apps with their own OAuth implementation

Service Account Mode (Domain-Wide Delegation)

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

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

When to use service account mode:

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

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

  • CI/CD pipelines or automation scripts

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

Enabling Service Account Mode:

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

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

Prerequisites:

  1. A Google Cloud service account with a JSON key

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

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

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

Incompatibilities:

  • Cannot be combined with --single-user mode

  • Cannot be combined with MCP_ENABLE_OAUTH21=true

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

Key Behaviors:

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

  • Credentials directory permission checks are skipped

  • When a tool call supplies user_google_email, service account mode uses that email as the domain-wide delegation impersonation subject.

  • USER_GOOGLE_EMAIL is 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_DOMAINS is set, only emails whose domain appears in the comma-separated list are accepted; all others raise an authentication error.

  • If DWD_ALLOWED_DOMAINS is 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 to OAUTH_ALLOWED_ORIGINS (e.g. OAUTH_ALLOWED_ORIGINS=vscode-webview://your.extension-id) to permit it. Connections to a localhost/127.0.0.1 URL 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-workspace

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

Reverse Proxy Setup

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

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

Solution 1: Set WORKSPACE_EXTERNAL_URL for all OAuth endpoints:

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

Solution 2: Set GOOGLE_OAUTH_REDIRECT_URI for just the callback:

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

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

Important:

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

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

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

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

  • Do not set Referrer-Policy: no-referrer on your proxy. It makes browsers send Origin: null on the same-origin consent POST, which origin validation rejects with {"error": "Origin not allowed"} (logged as Rejected HTTP request from Origin: null) even when WORKSPACE_EXTERNAL_URL is correct. Use strict-origin-when-cross-origin (the browser default) or same-origin instead.

# 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-http

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

Development Installation

For development or customization:

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

Development Installation (For Contributors):

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

HTTP Mode (For debugging or web interfaces)

If you need to use HTTP mode with Claude Desktop:

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

Note: Make sure to start the server with --transport streamable-http when using HTTP mode. 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 stdio mode, 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 as login_hint on the Google authorization URL so Google can pre-select the account on the consent screen. This applies to the stdio flow 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.com

When calling a tool:

  1. If an opened browser page appears, complete Google authorization there.

  2. If no browser opens, open the returned authorization URL manually and complete Google authorization there.

  3. After successful authorization, the callback page displays the authenticated email address.

  4. 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.

  5. 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     # Dependencies

Adding New Tools

from auth.service_decorator import require_google_service

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

Architecture Highlights

  • Service Caching: 30-minute TTL reduces authentication overhead

  • Scope Management: Centralized in SCOPE_GROUPS for easy maintenance

  • Error Handling: Native exceptions instead of manual error construction

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

Credential Store System

The server includes an abstract credential store API with pluggable backends for managing Google OAuth credentials:

Features:

  • Abstract Interface: CredentialStore base 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 rest

  • Configurable 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 below

Backend 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 needs roles/storage.objectUser (or equivalent) on the bucket. Does not support list_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.json or the .credentials/ directory to source control!

  • OAuth Callback: Uses http://localhost:8000/oauth2callback for development (requires OAUTHLIB_INSECURE_TRANSPORT=1). If another process is already using port 8000, set WORKSPACE_MCP_PORT to 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 the ALLOWED_FILE_DIRS environment 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_DIR and remains allowed even when ALLOWED_FILE_DIRS is 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_DIRS unless you trust the client, the model behavior, and the data sources it can read.



≡ License

MIT License - see LICENSE file for details.


Validations: MCP Badge

Available Tools

122 tools
append_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.

ParametersJSON Schema
NameRequiredDescriptionDefault
user_google_emailYesThe user's Google email address. Required.
spreadsheet_idYesThe ID of the spreadsheet. Required.
table_idYesThe ID of the table to append to (get from list_sheet_tables). Required.
valuesYes2D array of values to append. Each inner list is one row. Can be a JSON string or Python list. Required.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.7/5.0
Behavior3/5

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

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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 LabelsA
Destructive

Adds or removes labels from multiple Gmail messages in a single batch request.

ParametersJSON Schema
NameRequiredDescriptionDefault
user_google_emailYesThe user's Google email address. Required.
message_idsYesA list of message IDs to modify.
add_label_idsNoList of label IDs to add to the messages.
remove_label_idsNoList of label IDs to remove from the messages.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.5/5.0
Behavior2/5

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

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters3/5

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

Schema description coverage is 100%, so the baseline is 3. The description adds marginal value 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.

Purpose5/5

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.

Usage Guidelines3/5

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 DocA
Destructive

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

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

RECOMMENDED WORKFLOW FOR BUILDING DOCUMENTS:

To avoid index calculation errors, build documents in phases:

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

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

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

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.2/5.0
Behavior4/5

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.

Conciseness3/5

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.

Completeness4/5

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

Given the tool's complexity (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.

Parameters3/5

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

Schema coverage is 100%, so the schema already documents all parameters. The description 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.

Purpose5/5

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

The description clearly states it executes multiple low-level document operations in a single atomic batch update. It 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.

Usage Guidelines5/5

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 FormA
Destructive

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
user_google_emailYesThe user's Google email address. Required.
form_idYesThe ID of the form to update.
requestsYesList 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

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.1/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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 PresentationB
Destructive

Apply batch updates to a Google Slides presentation.

ParametersJSON Schema
NameRequiredDescriptionDefault
user_google_emailYesThe user's Google email address. Required.
presentation_idYesThe ID of the presentation to update.
requestsYesList of update requests to apply.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.3/5.0
Behavior3/5

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.

Conciseness4/5

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.

Completeness2/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines2/5

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

No guidance is provided on when to use this tool versus alternatives, 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 AccessA
Read-onlyIdempotent

Searches for a file by name and checks if it has public link sharing enabled.

ParametersJSON Schema
NameRequiredDescriptionDefault
user_google_emailYesThe user's Google email address. Required.
file_nameYesThe name of the file to check.
drive_idNoID 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

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.6/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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

The description clearly states the tool's 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.

Usage Guidelines2/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
user_google_emailYesThe user's Google email address. Required.
file_idYesThe ID of the file to copy. Required.
new_nameNoNew name for the copied file. If not provided, uses "Copy of [original name]".
parent_folder_idNoThe ID of the folder where the copy should be created. Defaults to 'root' (My Drive).root

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4/5.0
Behavior3/5

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

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
user_google_emailYesThe user's Google email address. Required.
summaryYesThe title/name of the new calendar.
descriptionNoAn optional description for the calendar.
timezoneNoIANA timezone for the calendar (e.g. 'America/New_York').

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.5/5.0
Behavior3/5

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

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose5/5

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

Description clearly states the tool creates a '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.

Usage Guidelines2/5

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

No guidance on when to use this tool 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.

ParametersJSON Schema
NameRequiredDescriptionDefault
user_google_emailYesUser's Google email address
titleYesTitle of the new document
contentNoOptional initial plain text content to insert

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.1/5.0
Behavior4/5

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

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
user_google_emailYesThe user's Google email address. Required.
file_nameYesThe name for the new file.
contentNoIf provided, the content to write to the file.
folder_idNoThe ID of the parent folder. Defaults to 'root'. For shared drives, this must be a folder ID within the shared drive.root
mime_typeNoThe MIME type of the file. Defaults to 'text/plain'.text/plain
fileUrlNoIf provided, fetches the file content from this URL. Supports file://, http://, and https:// protocols.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4/5.0
Behavior4/5

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

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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

Schema coverage is 100%, so the schema already documents all parameters. The description 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.

Purpose5/5

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.

Usage Guidelines3/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
user_google_emailYesThe user's Google email address. Required.
folder_nameYesThe name for the new folder.
parent_folder_idNoThe ID of the parent folder. Defaults to 'root'. For shared drives, use a folder ID within that shared drive.root

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.4/5.0
Behavior3/5

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.

Conciseness4/5

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.

Completeness3/5

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.

Parameters3/5

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

Schema coverage is 100%, so parameters are fully 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.

Purpose5/5

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

The description clearly states the tool creates 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.

Usage Guidelines2/5

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

No guidance on when to use this tool 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.

ParametersJSON Schema
NameRequiredDescriptionDefault
user_google_emailYesThe user's Google email address. Required.
titleYesThe title of the form.
descriptionNoThe description of the form.
document_titleNoThe document title (shown in browser tab).

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

C2.7/5.0
Behavior2/5

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

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.

Conciseness2/5

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.

Completeness2/5

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.

Parameters3/5

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

Schema coverage is 100%, so the description adds 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.

Purpose4/5

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.

Usage Guidelines2/5

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

No guidance is provided on when to use this tool versus alternatives like 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.

ParametersJSON Schema
NameRequiredDescriptionDefault
user_google_emailYesThe user's Google email address. Required.
titleNoThe title for the new presentation. Defaults to "Untitled Presentation".Untitled Presentation

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.1/5.0
Behavior2/5

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

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.

Conciseness4/5

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.

Completeness2/5

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

Given the tool's simplicity 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.

Parameters3/5

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

Schema coverage is 100%, so the schema already documents 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.

Purpose5/5

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

The description clearly states the action (Create) 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.

Usage Guidelines2/5

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

No guidance is provided on when to use this tool versus alternatives. 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.

ParametersJSON Schema
NameRequiredDescriptionDefault
user_google_emailYes
message_idYesThe message resource name (e.g. spaces/X/messages/Y).
emoji_unicodeYesThe emoji character to react with (e.g. 👍).

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

C2.9/5.0
Behavior2/5

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

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.

Conciseness3/5

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.

Completeness2/5

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.

Parameters2/5

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.

Purpose5/5

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.

Usage Guidelines2/5

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

No guidance is provided on when to use this tool versus alternatives, 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.

ParametersJSON Schema
NameRequiredDescriptionDefault
user_google_emailYesUser's email address
titleYesProject title
parent_idNoOptional Drive folder ID or bound container ID

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.3/5.0
Behavior2/5

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

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines2/5

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

No guidance on when to use this tool vs alternatives (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).

ParametersJSON Schema
NameRequiredDescriptionDefault
user_google_emailYes
spreadsheet_idYes
sheet_nameNo
source_sheet_nameNo
insert_sheet_indexNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.1/5.0
Behavior3/5

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.

Conciseness3/5

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.

Completeness2/5

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.

Parameters2/5

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.

Purpose5/5

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

The description clearly states it creates a new 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.

Usage Guidelines2/5

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

No guidance on when to use this tool over alternatives, 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.

ParametersJSON Schema
NameRequiredDescriptionDefault
user_google_emailYesThe user's Google email address. Required.
titleYesThe title of the new spreadsheet. Required.
sheet_namesNoList of sheet names to create. If not provided, creates one sheet with default name.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

C2.8/5.0
Behavior2/5

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

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.

Conciseness3/5

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.

Completeness2/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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

The description provides no guidance on when to use this tool versus alternatives such as 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

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

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.6/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness5/5

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

Given the tool's complexity (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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
user_google_emailYesUser's email address
script_idYesThe script project ID
descriptionNoOptional description for this version

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.1/5.0
Behavior4/5

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

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters3/5

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

Schema coverage is 100% with descriptions for each parameter. 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.

Purpose5/5

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

The description clearly states the tool creates 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.

Usage Guidelines3/5

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 InfoA
Read-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.

ParametersJSON Schema
NameRequiredDescriptionDefault
user_google_emailYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.9/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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

Given the presence of output schema 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.

Parameters1/5

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.

Purpose5/5

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

The description clearly states the tool returns runtime/source information for diagnosing stale MCP server instances, with a specific verb and resource. It distinguishes itself from sibling tools 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.

Usage Guidelines4/5

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 StructureA
Read-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:

  1. After creating table → Use this to verify structure

  2. Before populating → Use this to plan your data format

  3. After population fails → Use this to see what went wrong

  4. When debugging → Compare your data array to actual table structure

ParametersJSON Schema
NameRequiredDescriptionDefault
user_google_emailYesUser's Google email address
document_idYesID of the document to inspect
table_indexNoWhich table to debug (0 = first table, 1 = second table, etc.)

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.6/5.0
Behavior5/5

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

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.

Conciseness4/5

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.

Completeness5/5

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.

Parameters3/5

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.

Purpose5/5

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

The description clearly states the tool's purpose: 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.

Usage Guidelines5/5

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 ProjectA
Destructive

Deletes an Apps Script project.

This permanently deletes the script project. The action cannot be undone.

ParametersJSON Schema
NameRequiredDescriptionDefault
user_google_emailYesUser's email address
script_idYesThe script project ID to delete

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.8/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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

Schema coverage is 100% with clear parameter descriptions. The 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.

Purpose5/5

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.

Usage Guidelines2/5

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

No guidance on when to use this tool 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).

ParametersJSON Schema
NameRequiredDescriptionDefault
user_google_emailYes
message_idYesThe message resource name (e.g. spaces/X/messages/Y).
attachment_indexNoZero-based index of the attachment to download (default 0).

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.2/5.0
Behavior4/5

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

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
user_google_emailYesThe user's Google email address. Required for authentication.
subjectYesEmail subject.
bodyYesEmail body (plain text).
body_formatNoEmail body format. Use 'plain' for plaintext or 'html' for HTML content.plain
toNoOptional recipient email address.
ccNoOptional CC email address.
bccNoOptional BCC email address.
from_nameNoOptional sender display name (e.g., 'Peter Hartree'). If provided, the From header will be formatted as 'Name <email>'.
from_emailNoOptional 'Send As' alias email address. Must be configured in Gmail settings (Settings > Accounts > Send mail as). If not provided, uses the authenticated user's email.
thread_idNoOptional Gmail thread ID to reply within.
in_reply_toNoOptional RFC Message-ID of the message being replied to (e.g., '<message123@gmail.com>').
referencesNoOptional chain of Message-IDs for proper threading.
attachmentsNoOptional list of attachments. Each can have: 'url' (fetch from URL — works with MCP attachment URLs from get_drive_file_download_url / get_gmail_attachment_content), OR 'path' (file path, auto-encodes), OR 'content' (standard base64, not urlsafe) + 'filename'. Optional 'mime_type'. 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_signatureNoWhether to append the Gmail signature from Settings > Signature when available. Defaults to true.
quote_originalNoWhether to include the original message as a quoted reply. Requires thread_id. Defaults to false.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.8/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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

Given the output schema exists 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.

Parameters3/5

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.

Purpose5/5

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

The description clearly states it creates a draft email in Gmail, supports new and reply drafts 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.

Usage Guidelines3/5

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

The description implies usage for drafting 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.

ParametersJSON Schema
NameRequiredDescriptionDefault
user_google_emailYesUser's Google email address
document_idYesID of the Google Doc to export
pdf_filenameNoName for the PDF file (optional - if not provided, uses original name + "_PDF")
folder_idNoDrive folder ID to save PDF in (optional - if not provided, saves in root)

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.7/5.0
Behavior3/5

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

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.

Conciseness4/5

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.

Completeness4/5

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

Given that an output schema exists (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.

Parameters3/5

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

The input schema has 100% description coverage for all 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.

Purpose5/5

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.

Usage Guidelines3/5

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 DocA
Destructive

Finds and replaces text throughout a Google Doc. No index calculation required.

This is the safest way to update specific text in a document because it does not require knowing any indices. Use this tool when you need to:

  • Replace placeholder text (e.g., {{TITLE}}) with real content

  • Update specific words or phrases throughout the document

  • Make targeted text changes without risk of index errors

For building documents from scratch, consider inserting text with unique placeholders via batch_update_doc, then using this tool to replace them.

ParametersJSON Schema
NameRequiredDescriptionDefault
user_google_emailYesUser's Google email address
document_idYesID of the document to update
find_textYesText to search for
replace_textYesText to replace with
match_caseNoWhether to match case exactly
tab_idNoOptional ID of the tab to target

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.7/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters4/5

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

Schema coverage is 100%, so the schema already describes all 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.

Purpose5/5

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

The description clearly states the tool finds and replaces text 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.

Usage Guidelines5/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
user_google_emailYesThe user's Google email address. Required.
spreadsheet_idYesThe ID of the spreadsheet. Required.
range_nameYesA1-style range (optionally with sheet name). Required.
background_colorNoHex background color (e.g., "#FFEECC").
text_colorNoHex text color (e.g., "#000000").
number_format_typeNoSheets number format type (e.g., "DATE").
number_format_patternNoCustom pattern for the number format.
wrap_strategyNoText wrap strategy - WRAP (wrap text within cell), CLIP (clip text at cell boundary), or OVERFLOW_CELL (allow text to overflow into adjacent empty cells).
horizontal_alignmentNoHorizontal text alignment - LEFT, CENTER, or RIGHT.
vertical_alignmentNoVertical text alignment - TOP, MIDDLE, or BOTTOM.
boldNoWhether to apply bold formatting.
italicNoWhether to apply italic formatting.
font_sizeNoFont size in points.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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

The description clearly states it applies formatting to a range 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.

Usage Guidelines3/5

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 CodeA
Read-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.

ParametersJSON Schema
NameRequiredDescriptionDefault
trigger_typeYesType of trigger. One of: - "time_minutes" (run every N minutes: 1, 5, 10, 15, 30) - "time_hours" (run every N hours: 1, 2, 4, 6, 8, 12) - "time_daily" (run daily at a specific hour: 0-23) - "time_weekly" (run weekly on a specific day) - "on_open" (simple trigger - runs when document opens) - "on_edit" (simple trigger - runs when user edits) - "on_form_submit" (runs when form is submitted) - "on_change" (runs when content changes)
function_nameYesThe function to run when trigger fires (e.g., "sendDailyReport")
scheduleNoSchedule details (depends on trigger_type): - For time_minutes: "1", "5", "10", "15", or "30" - For time_hours: "1", "2", "4", "6", "8", or "12" - For time_daily: hour as "0"-"23" (e.g., "9" for 9am) - For time_weekly: "MONDAY", "TUESDAY", etc. - For simple triggers (on_open, on_edit): not needed

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.3/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness5/5

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

Given the presence of an output schema (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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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 ContactA
Read-onlyIdempotent

Get detailed information about a specific contact.

ParametersJSON Schema
NameRequiredDescriptionDefault
user_google_emailYesThe user's Google email address. Required.
contact_idYesThe contact ID (e.g., "c1234567890" or full resource name "people/c1234567890").

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.5/5.0
Behavior3/5

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

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.

Conciseness4/5

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.

Completeness4/5

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

Given the presence of an output schema 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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines2/5

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

The description provides no guidance on when to use this tool versus alternatives such as 'list_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 GroupA
Read-onlyIdempotent

Get details of a specific contact group including its members.

ParametersJSON Schema
NameRequiredDescriptionDefault
user_google_emailYesThe user's Google email address. Required.
group_idYesThe contact group ID.
max_membersNoMaximum number of members to return (default: 100, max: 1000).

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.7/5.0
Behavior3/5

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

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines2/5

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

The description provides no guidance on when to use this tool versus alternatives. 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 MarkdownA
Read-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.

ParametersJSON Schema
NameRequiredDescriptionDefault
user_google_emailYesUser's Google email address
document_idYesID of the Google Doc (or full URL)
include_commentsNoWhether to include comments (default: True)
comment_modeNoHow to display comments: - "inline": Footnote-style references placed at the anchor text location (default) - "appendix": All comments grouped at the bottom with blockquoted anchor text - "none": No comments includedinline
include_resolvedNoWhether to include resolved comments (default: False)
suggestions_view_modeNoHow to render suggestions in the returned content: - "DEFAULT_FOR_CURRENT_ACCESS": Default based on user's access level - "SUGGESTIONS_INLINE": Suggested changes appear inline in the document - "PREVIEW_SUGGESTIONS_ACCEPTED": Preview as if all suggestions were accepted - "PREVIEW_WITHOUT_SUGGESTIONS": Preview as if all suggestions were rejectedDEFAULT_FOR_CURRENT_ACCESS

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.7/5.0
Behavior5/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters4/5

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

Schema coverage is 100%, baseline 3. Description adds 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.

Purpose5/5

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.

Usage Guidelines4/5

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 ContentA
Read-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.

ParametersJSON Schema
NameRequiredDescriptionDefault
user_google_emailYesUser's Google email address
document_idYesID of the Google Doc (or full URL)
suggestions_view_modeNoHow to render suggestions in the returned content: - "DEFAULT_FOR_CURRENT_ACCESS": Default based on user's access level - "SUGGESTIONS_INLINE": Suggested changes appear inline in the document - "PREVIEW_SUGGESTIONS_ACCEPTED": Preview as if all suggestions were accepted - "PREVIEW_WITHOUT_SUGGESTIONS": Preview as if all suggestions were rejectedDEFAULT_FOR_CURRENT_ACCESS

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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

Schema coverage is 100%, so the baseline is 3. The description 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.

Purpose5/5

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.

Usage Guidelines3/5

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 ContentA
Read-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.

ParametersJSON Schema
NameRequiredDescriptionDefault
user_google_emailYesThe user’s Google email address.
file_idYesDrive file ID.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.3/5.0
Behavior5/5

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

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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 URLA
Read-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.

ParametersJSON Schema
NameRequiredDescriptionDefault
user_google_emailYesThe user's Google email address. Required.
file_idYesThe Google Drive file ID to download.
export_formatNoOptional 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

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.7/5.0
Behavior5/5

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

Discloses 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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters4/5

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

Schema coverage is 100%, so baseline is 3. Description adds 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.

Purpose5/5

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.

Usage Guidelines4/5

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 PermissionsA
Read-onlyIdempotent

Gets detailed metadata about a Google Drive file including sharing permissions, parent folder IDs, ownership, and lifecycle timestamps.

ParametersJSON Schema
NameRequiredDescriptionDefault
user_google_emailYesThe user's Google email address. Required.
file_idYesThe ID of the file to check permissions for.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.1/5.0
Behavior5/5

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.

Conciseness5/5

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.

Completeness5/5

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

Given the presence of an output schema, the description 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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines2/5

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

The description provides no guidance on when to use this tool versus alternatives. 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 EventsA
Read-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.

ParametersJSON Schema
NameRequiredDescriptionDefault
user_google_emailYesThe user's Google email address. Required.
calendar_idNoThe 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_idNoThe ID of a specific event to retrieve. If provided, retrieves only this event and ignores time filtering parameters.
time_minNoThe 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_maxNoThe 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_resultsNoThe maximum number of events to return. Defaults to 25. Ignored if event_id is provided.
queryNoA keyword to search for within event fields (summary, description, location). Ignored if event_id is provided.
detailedNoWhether to return detailed event information including description, location, attendees, and attendee details (response status, organizer, optional flags). Defaults to False.
include_attachmentsNoWhether 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

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.2/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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 FormC
Read-onlyIdempotent

Get a form.

ParametersJSON Schema
NameRequiredDescriptionDefault
user_google_emailYesThe user's Google email address. Required.
form_idYesThe ID of the form to retrieve.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

C2.4/5.0
Behavior2/5

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.

Conciseness2/5

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.

Completeness2/5

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.

Parameters3/5

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.

Purpose3/5

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.

Usage Guidelines2/5

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

No guidance is provided on when to use this tool versus alternatives, 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 ResponseB
Read-onlyIdempotent

Get one response from the form.

ParametersJSON Schema
NameRequiredDescriptionDefault
user_google_emailYesThe user's Google email address. Required.
form_idYesThe ID of the form.
response_idYesThe ID of the response to retrieve.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.4/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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

The description provides no guidance on when to use this tool versus 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.

ParametersJSON Schema
NameRequiredDescriptionDefault
message_idYesThe ID of the Gmail message containing the attachment.
attachment_idYesThe ID of the attachment to download.
user_google_emailYesThe user's Google email address. Required.
return_base64NoWhen 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

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.4/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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

Output schema exists, so return values are covered. Description 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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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

The description explains when to use 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 ContentA
Read-onlyIdempotent

Retrieves the full content (subject, sender, recipients, body) of a specific Gmail message.

ParametersJSON Schema
NameRequiredDescriptionDefault
message_idYesThe unique ID of the Gmail message to retrieve.
user_google_emailYesThe user's Google email address. Required.
body_formatNoBody output format. 'text' (default) returns plaintext (HTML converted to text as fallback). 'html' returns the raw HTML body as-is without conversion. 'raw' fetches the full raw MIME message and returns the base64url-decoded content.text

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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 BatchA
Read-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.

ParametersJSON Schema
NameRequiredDescriptionDefault
message_idsYesList of Gmail message IDs to retrieve (max 25 per batch).
user_google_emailYesThe user's Google email address. Required.
formatNoMessage format. "full" includes body, "metadata" only headers.full
body_formatNoBody output format (only applies when format='full'). 'text' (default) returns plaintext (HTML converted to text as fallback). 'html' returns the raw HTML body as-is without conversion. 'raw' fetches the full raw MIME message and returns the base64url-decoded content.text

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.3/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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 ContentA
Read-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.

ParametersJSON Schema
NameRequiredDescriptionDefault
thread_idYesThe unique ID of the Gmail thread to retrieve.
user_google_emailYesThe user's Google email address. Required.
body_formatNoBody output format. 'text' (default) returns plaintext (HTML converted to text as fallback). 'html' returns the raw HTML body as-is without conversion. 'raw' fetches each message's full raw MIME content and returns the base64url-decoded body.text
include_analysisNoWhen 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

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.5/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters3/5

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

Schema coverage is 100% with clear descriptions for 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.

Purpose4/5

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.

Usage Guidelines2/5

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

The description provides no guidance on when to use this tool versus alternatives (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 BatchA
Read-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.

ParametersJSON Schema
NameRequiredDescriptionDefault
thread_idsYesA list of Gmail thread IDs to retrieve. The function will automatically batch requests in chunks of 25.
user_google_emailYesThe user's Google email address. Required.
body_formatNoBody output format. 'text' (default) returns plaintext (HTML converted to text as fallback). 'html' returns the raw HTML body as-is without conversion. 'raw' fetches each message's full raw MIME content and returns the base64url-decoded body.text

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.2/5.0
Behavior4/5

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

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.

Conciseness5/5

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.

Completeness4/5

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

Given the tool's complexity (batch 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.

Parameters3/5

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

Schema coverage is 100%, so parameters are fully 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.

Purpose5/5

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

The description clearly states the tool retrieves 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.

Usage Guidelines4/5

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 MessagesB
Read-onlyIdempotent

Retrieves messages from a Google Chat space.

ParametersJSON Schema
NameRequiredDescriptionDefault
user_google_emailYes
space_idYes
page_sizeNo
order_byNocreateTime desc
message_filterNoOptional 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

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.1/5.0
Behavior4/5

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.

Conciseness3/5

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.

Completeness2/5

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.

Parameters1/5

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.

Purpose5/5

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.

Usage Guidelines2/5

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

The description provides no guidance on when to use this tool versus alternatives. 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 PageB
Read-onlyIdempotent

Get details about a specific page (slide) in a presentation.

ParametersJSON Schema
NameRequiredDescriptionDefault
user_google_emailYesThe user's Google email address. Required.
presentation_idYesThe ID of the presentation.
page_object_idYesThe object ID of the page/slide to retrieve.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.2/5.0
Behavior2/5

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

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.

Conciseness4/5

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.

Completeness3/5

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

Given the presence of an output schema, the description 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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines2/5

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

The description provides no guidance on when to use this tool versus alternatives, such as 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 ThumbnailB
Read-onlyIdempotent

Generate a thumbnail URL for a specific page (slide) in a presentation.

ParametersJSON Schema
NameRequiredDescriptionDefault
user_google_emailYesThe user's Google email address. Required.
presentation_idYesThe ID of the presentation.
page_object_idYesThe object ID of the page/slide.
thumbnail_sizeNoSize of thumbnail ("LARGE", "MEDIUM", "SMALL"). Defaults to "MEDIUM".MEDIUM

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.4/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines2/5

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

No guidance on when to use this tool 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 PresentationB
Read-onlyIdempotent

Get details about a Google Slides presentation.

ParametersJSON Schema
NameRequiredDescriptionDefault
user_google_emailYesThe user's Google email address. Required.
presentation_idYesThe ID of the presentation to retrieve.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.3/5.0
Behavior2/5

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

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.

Conciseness4/5

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.

Completeness4/5

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

Given the tool's simplicity, 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.

Parameters3/5

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.

Purpose5/5

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

The description clearly states the tool's 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.

Usage Guidelines2/5

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

The description provides no guidance on when to use this tool versus alternatives (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 ContentB
Read-onlyIdempotent

Retrieves content of a specific file within a project.

ParametersJSON Schema
NameRequiredDescriptionDefault
user_google_emailYesUser's email address
script_idYesThe script project ID
file_nameYesName of the file to retrieve

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.4/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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

The description provides no guidance on when to use this tool versus alternatives, 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 MetricsA
Read-onlyIdempotent

Gets execution metrics for a script project.

Returns analytics data including active users, total executions, and failed executions over time.

ParametersJSON Schema
NameRequiredDescriptionDefault
user_google_emailYesUser's email address
script_idYesThe script project ID
metrics_granularityNoGranularity of metrics - "DAILY" or "WEEKLY"DAILY

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.6/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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

Given the presence of an output schema 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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines2/5

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

The description provides no guidance on when to use this tool 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 ProjectA
Read-onlyIdempotent

Retrieves complete project details including all source files.

ParametersJSON Schema
NameRequiredDescriptionDefault
user_google_emailYesUser's email address
script_idYesThe script project ID

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.8/5.0
Behavior3/5

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

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.

Conciseness5/5

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.

Completeness4/5

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

Given the tool's simplicity, 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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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 InfoA
Read-onlyIdempotent

Retrieves metadata about a Programmable Search Engine.

ParametersJSON Schema
NameRequiredDescriptionDefault
user_google_emailYesThe user's Google email address. Required.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.6/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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

Given the tool's simplicity (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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines2/5

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

The description provides no guidance on when to use this tool versus alternatives, 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 InfoA
Read-onlyIdempotent

Gets information about a specific spreadsheet including its sheets.

ParametersJSON Schema
NameRequiredDescriptionDefault
user_google_emailYesThe user's Google email address. Required.
spreadsheet_idYesThe ID of the spreadsheet to get info for. Required.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.8/5.0
Behavior3/5

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

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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

Schema coverage is 100%, and the description does not add 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.

Purpose5/5

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

The description clearly states the tool retrieves 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.

Usage Guidelines3/5

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 TaskA
Read-onlyIdempotent

Get details of a specific task.

ParametersJSON Schema
NameRequiredDescriptionDefault
user_google_emailYesThe user's Google email address. Required.
task_list_idYesThe ID of the task list containing the task.
task_idYesThe ID of the task to retrieve.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.6/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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

The input schema has 100% description coverage for all 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.

Purpose5/5

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.

Usage Guidelines2/5

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

The description provides no guidance on when to use this tool versus alternatives such as list_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 ListA
Read-onlyIdempotent

Get details of a specific task list.

ParametersJSON Schema
NameRequiredDescriptionDefault
user_google_emailYesThe user's Google email address. Required.
task_list_idYesThe ID of the task list to retrieve.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.6/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines2/5

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

No guidance on when to use this tool 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 VersionA
Read-onlyIdempotent

Gets details of a specific version.

ParametersJSON Schema
NameRequiredDescriptionDefault
user_google_emailYesUser's email address
script_idYesThe script project ID
version_numberYesThe version number to retrieve (1, 2, 3, etc.)

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.6/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines2/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
user_google_emailYesThe user's Google email address. Required.
file_nameYesThe name for the new Google Doc (extension will be ignored).
contentNoText content for text-based formats. Use only for short snippets or content already in memory.
file_pathNoLocal 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_urlNoRemote URL to fetch the file from (http/https).
source_formatNoSource format hint ('md', 'markdown', 'docx', 'txt', 'html', 'rtf', 'odt'). Auto-detected from file_name extension if not provided.
folder_idNoThe ID of the parent folder. Defaults to 'root'.root

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.6/5.0
Behavior5/5

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

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
user_google_emailYesThe user's Google email address. Required.
file_nameYesThe name for the new Google Sheets spreadsheet (extension will be ignored).
contentNoText content for text-based formats (CSV, TSV). Use only for short snippets or content already in memory.
file_pathNoLocal 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_urlNoRemote URL to fetch the spreadsheet from (http/https).
source_formatNoSource format hint ('xlsx', 'xls', 'ods', 'csv', 'tsv'). Auto-detected from file_name extension if not provided.
folder_idNoThe ID of the parent folder. Defaults to 'root'.root

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.4/5.0
Behavior4/5

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

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.

Conciseness4/5

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.

Completeness5/5

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

Given the presence of an output schema (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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
user_google_emailYesThe user's Google email address. Required.
file_nameYesThe name for the new Google Slides presentation (extension will be ignored).
file_pathNoLocal 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_urlNoRemote URL to fetch the presentation from (http/https).
source_formatNoSource format hint ('pptx', 'ppt', 'odp'). Auto-detected from file_name extension if not provided.
folder_idNoThe ID of the parent folder. Defaults to 'root'.root

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.2/5.0
Behavior4/5

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

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
user_google_emailYesUser's Google email address
document_idYesID of the document to update
element_typeYesType of element to insert ("table", "list", "page_break")
indexYesPosition to insert element (0-based)
rowsNoNumber of rows for table (required for table)
columnsNoNumber of columns for table (required for table)
list_typeNoType of list ("UNORDERED", "ORDERED") (required for list)
textNoInitial text content for list items

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.3/5.0
Behavior2/5

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

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters3/5

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

Schema description coverage is 100%, so the description 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.

Purpose5/5

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.

Usage Guidelines2/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
user_google_emailYesUser's Google email address
document_idYesID of the document to update
image_sourceYesDrive file ID or public image URL
indexYesPosition to insert image (0-based)
widthNoImage width in points (optional)
heightNoImage height in points (optional)

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.4/5.0
Behavior2/5

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.

Conciseness4/5

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.

Completeness3/5

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

Given the presence of an output schema and 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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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

The description does not provide any guidance on when to use this tool versus alternatives, 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 StructureA
Read-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.

ParametersJSON Schema
NameRequiredDescriptionDefault
user_google_emailYesUser's Google email address
document_idYesID of the document to inspect
detailedNoWhether to return detailed structure information
tab_idNoOptional ID of the tab to inspect. If not provided, inspects main document.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.4/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness5/5

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

Given the tool's complexity (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.

Parameters4/5

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

Schema coverage is 100%, baseline 3. Description adds value by explaining 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.

Purpose5/5

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.

Usage Guidelines4/5

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 CalendarsA
Read-onlyIdempotent

Retrieves a list of calendars accessible to the authenticated user.

ParametersJSON Schema
NameRequiredDescriptionDefault
user_google_emailYesThe user's Google email address. Required.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.5/5.0
Behavior2/5

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

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.

Conciseness4/5

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.

Completeness4/5

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

Given the presence of an output schema, 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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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 GroupsA
Read-onlyIdempotent

List contact groups (labels) for the user.

ParametersJSON Schema
NameRequiredDescriptionDefault
user_google_emailYesThe user's Google email address. Required.
page_sizeNoMaximum number of groups to return (default: 100, max: 1000).
page_tokenNoToken for pagination.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.7/5.0
Behavior3/5

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

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.

Conciseness4/5

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.

Completeness4/5

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

Given the tool's simplicity, 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.

Parameters3/5

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.

Purpose5/5

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

The description clearly states the verb 'List' and the resource '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.

Usage Guidelines3/5

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 ContactsA
Read-onlyIdempotent

List contacts for the authenticated user.

ParametersJSON Schema
NameRequiredDescriptionDefault
user_google_emailYesThe user's Google email address. Required.
page_sizeNoMaximum number of contacts to return (default: 100, max: 1000).
page_tokenNoToken for pagination.
sort_orderNoSort order: "LAST_MODIFIED_ASCENDING", "LAST_MODIFIED_DESCENDING", "FIRST_NAME_ASCENDING", or "LAST_NAME_ASCENDING".

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.6/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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

Schema coverage is 100%, so the baseline is 3. The description 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.

Purpose5/5

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

The description clearly states the verb 'List' and the resource '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.

Usage Guidelines2/5

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 DeploymentsA
Read-onlyIdempotent

Lists all deployments for a script project.

ParametersJSON Schema
NameRequiredDescriptionDefault
user_google_emailYesUser's email address
script_idYesThe script project ID

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.9/5.0
Behavior3/5

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

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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 FolderB
Read-onlyIdempotent

Lists Google Docs within a specific Drive folder.

Returns: str: A formatted list of Google Docs in the specified folder.

ParametersJSON Schema
NameRequiredDescriptionDefault
user_google_emailYes
folder_idNoroot
page_sizeNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.3/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness2/5

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.

Parameters2/5

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.

Purpose5/5

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

The description clearly states the tool lists 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.

Usage Guidelines2/5

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

No guidance on when to use this tool 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 CommentsB
Read-onlyIdempotent

List all comments from a Google Document.

ParametersJSON Schema
NameRequiredDescriptionDefault
user_google_emailYes
document_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3/5.0
Behavior3/5

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.

Conciseness4/5

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.

Completeness2/5

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

Despite having an output schema, 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.

Parameters1/5

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.

Purpose5/5

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

The description clearly states the verb 'List' and the resource '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.

Usage Guidelines2/5

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

No guidance on when to use this tool 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 ItemsA
Read-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.

ParametersJSON Schema
NameRequiredDescriptionDefault
user_google_emailYesThe user's Google email address. Required.
folder_idNoThe 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_sizeNoThe maximum number of items to return. Defaults to 100.
page_tokenNoPage token from a previous response's nextPageToken to retrieve the next page of results.
drive_idNoID of the shared drive. If provided, the listing is scoped to this drive.
include_items_from_all_drivesNoWhether items from all accessible shared drives should be included if `drive_id` is not set. Defaults to True.
corporaNoCorpus 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_typeNoRestrict 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).
detailedNoWhether to include size, modified time, and link in results. Defaults to True.
order_byNoSort 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_typeNoWhat to list. Use "items" for folder contents or "shared_drives" for shared drive containers. Defaults to "items".items
queryNoShared drive query used only when resource_type="shared_drives", e.g. "name contains 'Engineering'".
include_organizersNoWhen 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

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.1/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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 ResponsesB
Read-onlyIdempotent

List a form's responses.

ParametersJSON Schema
NameRequiredDescriptionDefault
user_google_emailYesThe user's Google email address. Required.
form_idYesThe ID of the form.
page_sizeNoMaximum number of responses to return. Defaults to 10.
page_tokenNoToken for retrieving next page of results.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.1/5.0
Behavior3/5

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.

Conciseness4/5

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.

Completeness2/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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

No guidance is provided on when to use this tool versus alternatives 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 FiltersA
Read-onlyIdempotent

Lists all Gmail filters configured in the user's mailbox.

ParametersJSON Schema
NameRequiredDescriptionDefault
user_google_emailYesThe user's Google email address. Required.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.9/5.0
Behavior3/5

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

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.

Conciseness5/5

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.

Completeness5/5

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

For a simple list tool with one parameter, 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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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 LabelsB
Read-onlyIdempotent

Lists all labels in the user's Gmail account.

ParametersJSON Schema
NameRequiredDescriptionDefault
user_google_emailYesThe user's Google email address. Required.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.4/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines2/5

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

No guidance is provided on when to use this tool versus alternatives, 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 CommentsB
Read-onlyIdempotent

List all comments from a Google Presentation.

ParametersJSON Schema
NameRequiredDescriptionDefault
user_google_emailYes
presentation_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.4/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters2/5

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.

Purpose5/5

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

The description clearly states the verb 'List', 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.

Usage Guidelines2/5

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 ProcessesA
Read-onlyIdempotent

Lists recent execution processes for user's scripts.

ParametersJSON Schema
NameRequiredDescriptionDefault
user_google_emailYesUser's email address
page_sizeNoNumber of results (default: 50)
script_idNoOptional filter by script ID

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.5/5.0
Behavior3/5

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

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters3/5

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

The input schema has 100% description coverage for all 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.

Purpose5/5

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.

Usage Guidelines2/5

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

The description provides no guidance on when to use this tool versus alternatives, 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 ProjectsA
Read-onlyIdempotent

Lists Google Apps Script projects accessible to the user.

Uses Drive API to find Apps Script files.

ParametersJSON Schema
NameRequiredDescriptionDefault
user_google_emailYesUser's email address
page_sizeNoNumber of results per page (default: 50)
page_tokenNoToken for pagination (optional)

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.8/5.0
Behavior3/5

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

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.

Conciseness5/5

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.

Completeness4/5

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

Given the presence of an output schema 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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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 TablesA
Read-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.

ParametersJSON Schema
NameRequiredDescriptionDefault
user_google_emailYesThe user's Google email address. Required.
spreadsheet_idYesThe ID of the spreadsheet. Required.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.5/5.0
Behavior4/5

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

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.

Conciseness5/5

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

The description is two sentences, front-loaded with the primary action, and 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.

Completeness5/5

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

Given the tool's simplicity (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.

Parameters3/5

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.

Purpose5/5

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

The description clearly states the tool lists 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.

Usage Guidelines5/5

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 SpacesC
Read-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.

ParametersJSON Schema
NameRequiredDescriptionDefault
user_google_emailYes
page_sizeNo
space_typeNoall

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

C2.9/5.0
Behavior3/5

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.

Conciseness3/5

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.

Completeness2/5

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.

Parameters1/5

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.

Purpose5/5

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.

Usage Guidelines2/5

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

The description provides no guidance on when to use this tool versus alternatives, 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 CommentsB
Read-onlyIdempotent

List all comments from a Google Spreadsheet.

ParametersJSON Schema
NameRequiredDescriptionDefault
user_google_emailYes
spreadsheet_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.4/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters2/5

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.

Purpose5/5

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

The description clearly states the action ('List'), 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.

Usage Guidelines2/5

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 SpreadsheetsB
Read-onlyIdempotent

Lists spreadsheets from Google Drive that the user has access to.

ParametersJSON Schema
NameRequiredDescriptionDefault
user_google_emailYesThe user's Google email address. Required.
max_resultsNoMaximum number of spreadsheets to return. Defaults to 25.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.4/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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 ListsB
Read-onlyIdempotent

List all task lists for the user.

ParametersJSON Schema
NameRequiredDescriptionDefault
user_google_emailYesThe user's Google email address. Required.
max_resultsNoMaximum number of task lists to return (default: 1000, max: 1000).
page_tokenNoToken for pagination.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.2/5.0
Behavior2/5

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

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.

Conciseness4/5

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.

Completeness3/5

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.

Parameters3/5

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

Schema description coverage is 100%, so the description does not need to 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.

Purpose5/5

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.

Usage Guidelines2/5

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

No guidance is provided on when to use this tool versus alternatives. 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 TasksA
Read-onlyIdempotent

List all tasks in a specific task list.

ParametersJSON Schema
NameRequiredDescriptionDefault
user_google_emailYesThe user's Google email address. Required.
task_list_idYesThe ID of the task list to retrieve tasks from.
max_resultsNoMaximum number of tasks to return. (default: 20, max: 10000).
page_tokenNoToken for pagination.
show_completedNoWhether 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_deletedNoWhether to include deleted tasks (default: False).
show_hiddenNoWhether to include hidden tasks (default: False).
show_assignedNoWhether to include assigned tasks (default: False).
completed_maxNoUpper bound for completion date (RFC 3339 timestamp).
completed_minNoLower bound for completion date (RFC 3339 timestamp).
due_maxNoUpper bound for due date (RFC 3339 timestamp).
due_minNoLower bound for due date (RFC 3339 timestamp).
updated_minNoLower bound for last modification time (RFC 3339 timestamp).

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.7/5.0
Behavior3/5

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

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose5/5

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

The description clearly states the action ('List') and 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.

Usage Guidelines3/5

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 VersionsA
Read-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.

ParametersJSON Schema
NameRequiredDescriptionDefault
user_google_emailYesUser's email address
script_idYesThe script project ID

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.5/5.0
Behavior3/5

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

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.

Conciseness5/5

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.

Completeness5/5

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

Given the simplicity of the tool (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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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

No guidance on when to use this tool 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 FormattingB
Destructive

Manages conditional formatting rules on a Google Sheet. Supports adding, updating, and deleting conditional formatting rules via a single tool.

ParametersJSON Schema
NameRequiredDescriptionDefault
user_google_emailYesThe user's Google email address. Required.
spreadsheet_idYesThe ID of the spreadsheet. Required.
actionYesThe operation to perform. Must be one of "add", "update", or "delete".
range_nameNoA1-style range (optionally with sheet name). Required for "add". Optional for "update" (preserves existing ranges if omitted). Not used for "delete".
condition_typeNoSheets condition type (e.g., NUMBER_GREATER, TEXT_CONTAINS, DATE_BEFORE, CUSTOM_FORMULA). Required for "add". Optional for "update" (preserves existing type if omitted).
condition_valuesNoValues for the condition; accepts a list or a JSON string representing a list. Depends on condition_type. Used by "add" and "update".
background_colorNoHex background color to apply when condition matches. Used by "add" and "update".
text_colorNoHex text color to apply when condition matches. Used by "add" and "update".
rule_indexNo0-based index of the rule. For "add", optionally specifies insertion position. Required for "update" and "delete".
gradient_pointsNoList (or JSON list) of gradient points for a color scale. If provided, a gradient rule is created and boolean parameters are ignored. Used by "add" and "update".
sheet_nameNoSheet name to locate the rule when range_name is omitted. Defaults to the first sheet. Used by "update" and "delete".

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.3/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness3/5

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

Given the tool's complexity (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.

Parameters3/5

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

Schema description coverage is 100%, so the baseline is 3. The description does not add 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.

Purpose4/5

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

The description clearly states the tool manages 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.

Usage Guidelines2/5

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 ContactA
Destructive

Create, update, or delete a contact. Consolidated tool replacing create_contact, update_contact, and delete_contact.

ParametersJSON Schema
NameRequiredDescriptionDefault
user_google_emailYesThe user's Google email address. Required.
actionYesThe action to perform: "create", "update", or "delete".
contact_idNoThe contact ID. Required for "update" and "delete" actions.
given_nameNoFirst name (for create/update).
family_nameNoLast name (for create/update).
phonesNoList of phone dicts {number, type?}. Supported types: mobile, work, home, main, workMobile, internal, other, etc. Use type="internal" for internal PBX/ATS short numbers (e.g. 250, 301) — stored as a standalone number without + prefix, displayed as "Internal: 250".
emailsNoList of email dicts {address, type?}.
organizationsNoList of org dicts {name?, title?, department?, jobDescription?, type?}.
nicknamesNoList 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.
urlsNoList of URL dicts {value, type?}. Supported types: homepage, blog, profile, work, ftp, reservations, other, etc.
user_definedNoList of custom field dicts {key, value}. Useful for structured data like account numbers, IDs, or custom dates.
relationsNoList of relation dicts {person, type?}. Supported types: spouse, child, parent, friend, manager, assistant, etc.
notesNoAdditional notes (for create/update).
addressNoStreet address (for create/update).
birthdayNoBirthday as 'YYYY-MM-DD', 'MM-DD' (no year), or 'clear'/'' to remove.
phones_modeNoHow to update phones on "update": "merge" (default), "replace", or "remove". merge = read-modify-write with dedup by canonicalForm/normalized value. replace = overwrite all phones with provided list. remove = delete phones matching provided numbers.merge
emails_modeNoHow to update emails on "update": "merge" (default), "replace", or "remove".merge
organizations_modeNoHow to update orgs on "update": "merge" (default), "replace", or "remove".merge
nicknames_modeNoHow to update nicknames on "update": "merge" (default), "replace", or "remove".merge
urls_modeNoHow to update urls on "update": "merge" (default), "replace", or "remove". merge dedups by normalized URL (lowercased, trailing slash stripped).merge
user_defined_modeNoHow to update custom fields on "update": "merge" (default), "replace", or "remove". merge overrides value on matching key; new keys appended.merge
relations_modeNoHow to update relations on "update": "merge" (default), "replace", or "remove".merge
phoneNo[DEPRECATED] Single phone number. Use phones=[{"number":..., "type":"mobile"}].
emailNo[DEPRECATED] Email address. Use emails=[{"address":..., "type":"other"}].
organizationNo[DEPRECATED] Company name. Use organizations=[{"name":...}].
job_titleNo[DEPRECATED] Job title. Use organizations=[{"title":...}].

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.8/5.0
Behavior3/5

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.

Conciseness5/5

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

The description is two sentences, front-loaded with the core purpose and 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.

Completeness2/5

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.

Parameters3/5

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.

Purpose5/5

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

The description clearly states the tool creates, updates, or deletes a 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.

Usage Guidelines4/5

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 GroupA
Destructive

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
user_google_emailYesThe user's Google email address. Required.
actionYesThe action to perform: "create", "update", "delete", or "modify_members".
group_idNoThe contact group ID. Required for "update", "delete", and "modify_members" actions.
nameNoThe group name. Required for "create" and "update" actions.
delete_contactsNoIf True and action is "delete", also delete contacts in the group (default: False).
add_contact_idsNoContact IDs to add (for "modify_members").
remove_contact_idsNoContact IDs to remove (for "modify_members").

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.1/5.0
Behavior3/5

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

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.

Conciseness5/5

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.

Completeness5/5

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

Given output schema exists and 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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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 BatchA
Destructive

Batch create, update, or delete contacts. Consolidated tool replacing batch_create_contacts, batch_update_contacts, and batch_delete_contacts.

ParametersJSON Schema
NameRequiredDescriptionDefault
user_google_emailYesThe user's Google email address. Required.
actionYesThe action to perform: "create", "update", or "delete".
contactsNoList of contact dicts for "create" action. Each dict may contain: given_name, family_name, phones, emails, organizations, notes, address. Deprecated: phone, email, organization, job_title.
updatesNoList of update dicts for "update" action. Each dict must contain contact_id and may contain the same fields as contacts.
contact_idsNoList of contact IDs for "delete" action.
fieldNoFor "update" action — the single People API field to update across all contacts in this batch. Required. Must be one of: names, phoneNumbers, emailAddresses, organizations, 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

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.9/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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 DeploymentC
Destructive

Manages Apps Script deployments. Supports creating, updating, and deleting deployments.

ParametersJSON Schema
NameRequiredDescriptionDefault
user_google_emailYesUser's email address
actionYesAction to perform - "create", "update", or "delete"
script_idYesThe script project ID
deployment_idNoThe deployment ID (required for update and delete)
descriptionNoDeployment description (required for create and update)
version_descriptionNoOptional version description (for create only)

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

C2.9/5.0
Behavior2/5

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

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.

Conciseness5/5

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.

Completeness2/5

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.

Parameters3/5

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

Schema coverage is 100% with parameter descriptions. The 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.

Purpose4/5

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

The description clearly states the tool manages 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.

Usage Guidelines2/5

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

No guidance on when to use this tool 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 TabB
Destructive

Manage document tabs: create, rename, delete, or populate from Markdown.

ParametersJSON Schema
NameRequiredDescriptionDefault
user_google_emailYesUser's Google email address
document_idYesID of the document
actionYesAction to perform - "create", "rename", "delete", or "populate_from_markdown"
tab_idNoTab ID (required for rename, delete, populate_from_markdown; use inspect_doc_structure to find IDs)
titleNoTab title (required for create; used by rename)
indexNoPosition index for new tab, 0-based among siblings (required for create)
parent_tab_idNoOptional parent tab ID to nest under (create only)
markdown_textNoMarkdown source to render (populate_from_markdown only)
replace_existingNoClear tab body before inserting markdown (default True)

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.2/5.0
Behavior2/5

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

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.

Conciseness5/5

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.

Completeness2/5

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.

Parameters3/5

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

Schema description coverage is 100%, so the schema already documents all parameters. The description adds no additional 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.

Purpose5/5

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.

Usage Guidelines2/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
user_google_emailYes
document_idYes
actionYes
comment_contentNo
comment_idNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.8/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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

Given the tool's moderate complexity (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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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 AccessA
Destructive

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
user_google_emailYesThe user's Google email address. Required.
file_idYesThe ID of the file or folder. Required.
actionYesThe 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_withNoEmail address (user/group), domain name (domain), or omit for 'anyone'. Used by "grant".
roleNoPermission role -- 'reader', 'commenter', or 'writer'. Used by "grant" (defaults to 'reader') and "update".
share_typeNoType of sharing -- 'user', 'group', 'domain', or 'anyone'. Used by "grant". Defaults to 'user'.user
permission_idNoThe permission ID to modify or remove. Required for "update" and "revoke" actions.
recipientsNoList 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_notificationNoWhether to send notification emails. Defaults to True. Used by "grant" and "grant_batch".
email_messageNoCustom notification email message. Used by "grant" and "grant_batch".
expiration_timeNoExpiration in RFC 3339 format (e.g., "2025-01-15T00:00:00Z"). Used by "grant" and "update".
allow_file_discoveryNoFor 'domain'/'anyone' shares, whether the file appears in search. Used by "grant".
new_owner_emailNoEmail of the new owner. Required for "transfer_owner".
move_to_new_owners_rootNoMove file to the new owner's My Drive root. Defaults to False. Used by "transfer_owner".

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4/5.0
Behavior3/5

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

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.

Conciseness5/5

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.

Completeness4/5

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

Given the tool's complexity (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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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 EventB
Destructive

Manages calendar events. Supports creating, updating, deleting, and RSVP.

ParametersJSON Schema
NameRequiredDescriptionDefault
user_google_emailYesThe user's Google email address. Required.
actionYesAction to perform - "create", "update", "delete", or "rsvp".
summaryNoEvent title (required for create).
start_timeNoStart time in RFC3339 format (required for create).
end_timeNoEnd time in RFC3339 format (required for create).
event_idNoEvent ID (required for update and delete).
calendar_idNoCalendar ID (default: 'primary').primary
descriptionNoEvent description.
locationNoEvent location.
attendeesNoAttendee email addresses or objects.
timezoneNoTimezone (e.g., "America/New_York").
attachmentsNoList of Google Drive file URLs or IDs to attach.
add_google_meetNoWhether to add/remove Google Meet.
remindersNoCustom reminder objects.
use_default_remindersNoWhether to use default reminders.
transparencyNo"opaque" (busy) or "transparent" (free).
visibilityNo"default", "public", "private", or "confidential".
color_idNoEvent color ID (1-11, update only).
recurrenceNoRFC5545 recurrence rules for a recurring event, e.g. ["RRULE:FREQ=WEEKLY;COUNT=10"].
guests_can_modifyNoWhether attendees can modify.
guests_can_invite_othersNoWhether attendees can invite others.
guests_can_see_other_guestsNoWhether attendees can see other guests.
responseNoRSVP response — "accepted", "declined", "tentative", or "needsAction" (rsvp action only).
rsvp_commentNoOptional message to include with the RSVP response (rsvp action only).
send_updatesNoNotification behavior for create, update, delete, and rsvp — "all" (default), "externalOnly", or "none".

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.1/5.0
Behavior3/5

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.

Conciseness4/5

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.

Completeness2/5

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.

Parameters3/5

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

Schema coverage is 100%, so each parameter is 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.

Purpose4/5

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.

Usage Guidelines2/5

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

The description provides no guidance on when to use this tool versus alternatives. 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 TimeA
Destructive

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
user_google_emailYesThe user's Google email address. Required.
actionYesAction to perform - "create", "list", "update", or "delete".
start_timeNoStart 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_timeNoEnd 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.
summaryNoDisplay text on the calendar. Defaults to "Focus Time".
descriptionNoEvent description. Useful for adding context about what the focus time is for.
auto_decline_modeNoHow to handle conflicting invitations. One of: "declineAllConflictingInvitations" (default), "declineOnlyNewConflictingInvitations", "declineNone".
decline_messageNoMessage included when auto-declining invitations.
chat_statusNoGoogle Chat status during the focus time. Supports "doNotDisturb" (default) and "available".
recurrenceNoRFC5545 recurrence rules for a recurring Focus Time series, e.g. ["RRULE:FREQ=WEEKLY;COUNT=10"].
timezoneNoTimezone 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_minNoFor "list" action: start of time range. Defaults to current time. Recurring series are expanded into individual instances in the requested range.
time_maxNoFor "list" action: end of time range.
max_resultsNoFor "list" action: maximum events to return. Defaults to 10.
event_idNoEvent ID. Required for "update" and "delete" actions.
calendar_idNoCalendar 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

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.6/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines2/5

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 FilterA
Destructive

Manages Gmail filters. Supports creating and deleting filters.

ParametersJSON Schema
NameRequiredDescriptionDefault
user_google_emailYesThe user's Google email address. Required.
actionYesAction to perform - "create" or "delete".
criteriaNoFilter criteria object (required for create).
filter_actionNoFilter action object (required for create). Named 'filter_action' to avoid shadowing the 'action' parameter.
filter_idNoID of the filter to delete (required for delete).

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.6/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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

Given the presence of an output schema 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.

Parameters3/5

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

Schema coverage is 100% and each parameter has a 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.

Purpose4/5

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.

Usage Guidelines3/5

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 LabelA
Destructive

Manages Gmail labels: create, update, or delete labels.

ParametersJSON Schema
NameRequiredDescriptionDefault
user_google_emailYesThe user's Google email address. Required.
actionYesAction to perform on the label.
nameNoLabel name. Required for create, optional for update.
label_idNoLabel ID. Required for update and delete operations.
label_list_visibilityNoWhether the label is shown in the label list.labelShow
message_list_visibilityNoWhether the label is shown in the message list.show

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.6/5.0
Behavior3/5

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.

Conciseness4/5

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.

Completeness3/5

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

Given the tool's complexity (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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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

The description implies when to use the tool (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 OfficeA
Destructive

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
user_google_emailYesThe user's Google email address. Required.
actionYesAction to perform - "create", "list", "update", or "delete".
start_timeNoStart 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_timeNoEnd 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.
summaryNoDisplay text on the calendar. Defaults to "Out of Office".
auto_decline_modeNoHow to handle conflicting invitations. One of: "declineAllConflictingInvitations" (default), "declineOnlyNewConflictingInvitations", "declineNone".
decline_messageNoMessage included when auto-declining invitations.
recurrenceNoRFC5545 recurrence rules for a recurring Out of Office series, e.g. ["RRULE:FREQ=WEEKLY;COUNT=10"].
timezoneNoTimezone 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_minNoFor "list" action: start of time range. Defaults to current time. Recurring series are expanded into individual instances in the requested range.
time_maxNoFor "list" action: end of time range.
max_resultsNoFor "list" action: maximum events to return. Defaults to 10.
event_idNoEvent ID. Required for "update" and "delete" actions.
calendar_idNoCalendar 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

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
user_google_emailYes
presentation_idYes
actionYes
comment_contentNo
comment_idNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.9/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness3/5

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

Given the tool's complexity (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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
user_google_emailYes
spreadsheet_idYes
actionYes
comment_contentNo
comment_idNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.1/5.0
Behavior3/5

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.

Conciseness4/5

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.

Completeness2/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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 TaskC
Destructive

Manage tasks: create, update, delete, or move tasks within task lists.

ParametersJSON Schema
NameRequiredDescriptionDefault
user_google_emailYesThe user's Google email address. Required.
actionYesThe action to perform. Must be one of: "create", "update", "delete", "move".
task_list_idYesThe ID of the task list. Required for all actions.
task_idNoThe ID of the task. Required for "update", "delete", and "move" actions.
titleNoThe title of the task. Required for "create", optional for "update".
notesNoNotes/description for the task. Used by "create" and "update" actions.
statusNoTask status ("needsAction" or "completed"). Used by "update" action.
dueNoDue date in RFC 3339 format (e.g., "2024-12-31T23:59:59Z"). Used by "create" and "update" actions.
parentNoParent task ID (for subtasks). Used by "create" and "move" actions.
previousNoPrevious sibling task ID (for positioning). Used by "create" and "move" actions.
destination_task_listNoDestination task list ID (for moving between lists). Used by "move" action.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

C2.9/5.0
Behavior2/5

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

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.

Conciseness4/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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 ListA
Destructive

Manage task lists: create, update, delete, or clear completed tasks.

ParametersJSON Schema
NameRequiredDescriptionDefault
user_google_emailYesThe user's Google email address. Required.
actionYesThe action to perform. Must be one of: "create", "update", "delete", "clear_completed".
task_list_idNoThe ID of the task list. Required for "update", "delete", and "clear_completed" actions.
titleNoThe title for the task list. Required for "create" and "update" actions.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.6/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness2/5

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

Given the tool's complexity (4 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.

Parameters3/5

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.

Purpose5/5

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

The description clearly states the tool's 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.

Usage Guidelines3/5

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 TextA
Destructive

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".

ParametersJSON Schema
NameRequiredDescriptionDefault
user_google_emailYesUser's Google email address
document_idYesID of the document to update
start_indexYesStart position for operation using Docs API indices from inspect_doc_structure. For the main body, 0 is also accepted as an alias for the first writable position.
end_indexNoEnd position for text replacement/formatting (if not provided with text, text is inserted)
textNoNew text to insert or replace with (optional - can format existing text without changing it)
tab_idNoOptional document tab ID to target
segment_idNoOptional header/footer/footnote segment ID to target
end_of_segmentNoInsert text at the end of the targeted segment instead of start_index
boldNoWhether to make text bold (True/False/None to leave unchanged)
italicNoWhether to make text italic (True/False/None to leave unchanged)
underlineNoWhether to underline text (True/False/None to leave unchanged)
strikethroughNoWhether to strike through text (True/False/None to leave unchanged)
font_sizeNoFont size in points
font_familyNoFont family name (e.g., "Arial", "Times New Roman")
font_weightNoFont weight (100-900 in steps of 100; requires font_family)
text_colorNoForeground text color (#RRGGBB)
background_colorNoBackground/highlight color (#RRGGBB)
link_urlNoHyperlink URL (http/https)
clear_linkNoRemove hyperlink from the target range
baseline_offsetNoOne of NONE, SUPERSCRIPT, SUBSCRIPT
small_capsNoWhether to apply small caps

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.6/5.0
Behavior4/5

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

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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 LabelsA
Destructive

Adds or removes labels from a Gmail message. To archive an email, remove the INBOX label. To delete an email, add the TRASH label.

ParametersJSON Schema
NameRequiredDescriptionDefault
user_google_emailYesThe user's Google email address. Required.
message_idYesThe ID of the message to modify.
add_label_idsNoList of label IDs to add to the message.
remove_label_idsNoList of label IDs to remove from the message.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.2/5.0
Behavior4/5

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

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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 ValuesA
Destructive

Modifies values in a specific range of a Google Sheet - can write, update, or clear values.

ParametersJSON Schema
NameRequiredDescriptionDefault
user_google_emailYesThe user's Google email address. Required.
spreadsheet_idYesThe ID of the spreadsheet. Required.
range_nameYesThe range to modify (e.g., "Sheet1!A1:D10", "A1:D10"). Required.
valuesNo2D array of values to write/update. Can be a JSON string or Python list. Required unless clear_values=True.
value_input_optionNoHow to interpret input values ("RAW" or "USER_ENTERED"). Defaults to "USER_ENTERED".USER_ENTERED
clear_valuesNoIf True, clears the range instead of writing values. Defaults to False.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.5/5.0
Behavior3/5

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

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters3/5

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

Schema description coverage is 100%, so baseline is 3. The description 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.

Purpose5/5

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

The description clearly states the tool modifies 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.

Usage Guidelines2/5

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 RowsA
Destructive

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).

ParametersJSON Schema
NameRequiredDescriptionDefault
user_google_emailYesThe user's Google email address. Required.
spreadsheet_idYesThe ID of the spreadsheet. Required.
source_sheetYesName of the sheet to move rows from. Required.
start_rowYesFirst row to move (1-based, inclusive). Required.
end_rowYesLast row to move (1-based, inclusive). Required.
destination_sheetYesName of the sheet to move rows to. Required.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.7/5.0
Behavior5/5

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

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.

Conciseness5/5

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.

Completeness5/5

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

Given the tool's complexity (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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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 FreebusyA
Read-onlyIdempotent

Returns free/busy information for a set of calendars.

ParametersJSON Schema
NameRequiredDescriptionDefault
user_google_emailYesThe user's Google email address. Required.
time_minYesThe start of the interval for the query in RFC3339 format (e.g., '2024-05-12T10:00:00Z' or '2024-05-12').
time_maxYesThe end of the interval for the query in RFC3339 format (e.g., '2024-05-12T18:00:00Z' or '2024-05-12').
calendar_idsNoList 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_maxNoMaximum 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_maxNoMaximum number of calendars for which FreeBusy information is to be provided. Optional. Maximum value is 50.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.6/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines2/5

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 ValuesA
Read-onlyIdempotent

Reads values from a specific range in a Google Sheet.

ParametersJSON Schema
NameRequiredDescriptionDefault
user_google_emailYesThe user's Google email address. Required.
spreadsheet_idYesThe ID of the spreadsheet. Required.
range_nameNoThe range to read (e.g., "Sheet1!A1:D10", "A1:D10"). Defaults to "A1:Z1000".A1:Z1000
include_hyperlinksNoIf True, also fetch hyperlink metadata for the range. Defaults to False to avoid expensive includeGridData requests.
include_notesNoIf True, also fetch cell notes for the range. Defaults to False to avoid expensive includeGridData requests.
include_formulasNoIf 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

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.6/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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

Given the tool's simplicity (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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines2/5

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

No guidance on when to use this tool 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 DimensionsB
Destructive

Manages sheet-level dimension properties: resize columns/rows, auto-resize to fit content, freeze rows/columns, hide/unhide rows/columns, and insert/delete rows/columns.

ParametersJSON Schema
NameRequiredDescriptionDefault
user_google_emailYesThe user's Google email address. Required.
spreadsheet_idYesThe ID of the spreadsheet. Required.
sheet_nameNoSheet name to target. Defaults to the first sheet if not provided.
column_sizesNoDict mapping column letters to pixel widths. Example: {"A": 200, "C": 300}. Can be a JSON string or Python dict.
row_sizesNoDict mapping 1-based row numbers to pixel heights. Example: {"1": 40, "3": 60}. Can be a JSON string or Python dict.
auto_resize_columnsNoList of column letters to auto-resize to fit content. Example: ["A", "B"].
auto_resize_rowsNoList of 1-based row numbers to auto-resize to fit content. Example: [1, 2].
frozen_row_countNoNumber of rows to freeze from the top. Use 0 to unfreeze all rows.
frozen_column_countNoNumber of columns to freeze from the left. Use 0 to unfreeze all columns.
hide_columnsNoList of column letters to hide. Example: ["C", "D"].
unhide_columnsNoList of column letters to unhide. Example: ["C", "D"].
hide_rowsNoList of 1-based row numbers to hide. Example: [3, 4].
unhide_rowsNoList of 1-based row numbers to unhide. Example: [3, 4].
insert_rowsNoNumber of rows to insert.
insert_rows_atNo1-based row number to insert before. Appends to the end of the sheet if omitted.
insert_columnsNoNumber of columns to insert.
insert_columns_atNoColumn letter to insert before (e.g. "C"). Appends to the end if omitted.
delete_rowsNoList of 1-based row numbers to delete. Example: [5, 6]. Best for non-contiguous rows.
delete_row_rangeNoContiguous 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_columnsNoList of column letters to delete. Example: ["E", "F"].

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.2/5.0
Behavior3/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters3/5

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

Schema coverage is 100%, so parameters are well-documented in 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.

Purpose4/5

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.

Usage Guidelines2/5

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 FunctionB
Destructive

Executes a function in a deployed script.

ParametersJSON Schema
NameRequiredDescriptionDefault
user_google_emailYesUser's email address
script_idYesThe script project ID
function_nameYesName of function to execute
parametersNoOptional list of parameters to pass
dev_modeNoWhether to run latest code vs deployed version

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.1/5.0
Behavior2/5

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

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.

Conciseness4/5

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.

Completeness2/5

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.

Parameters3/5

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

Input schema has 100% coverage with descriptions for all 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.

Purpose5/5

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.

Usage Guidelines2/5

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

No guidance on when to use this tool vs alternatives. 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 ContactsB
Read-onlyIdempotent

Search contacts by name, email, phone number, or other fields.

ParametersJSON Schema
NameRequiredDescriptionDefault
user_google_emailYesThe user's Google email address. Required.
queryYesSearch query string (searches names, emails, phone numbers).
page_sizeNoMaximum number of results to return (default: 30, max: 30).

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.3/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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 CustomB
Read-onlyIdempotent

Performs a search using Google Custom Search JSON API.

ParametersJSON Schema
NameRequiredDescriptionDefault
user_google_emailYesThe user's Google email address. Required.
qYesThe search query. Required.
numNoNumber of results to return (1-10). Defaults to 10.
startNoThe index of the first result to return (1-based). Defaults to 1.
safeNoSafe search level. Defaults to "off".off
search_typeNoSearch for images if set to "image".
site_searchNoRestrict search to a specific site/domain.
site_search_filterNoExclude ("e") or include ("i") site_search results.
date_restrictNoRestrict results by date (e.g., "d5" for past 5 days, "m3" for past 3 months).
file_typeNoFilter by file type (e.g., "pdf", "doc").
languageNoLanguage code for results (e.g., "lang_en").
countryNoCountry code for results (e.g., "countryUS").
sitesNoList of sites/domains to restrict search to (e.g., ["example.com", "docs.example.com"]). When provided, results are limited to these sites.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.1/5.0
Behavior3/5

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.

Conciseness4/5

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.

Completeness2/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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

No guidance is provided on when to use this tool versus alternatives. 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 DocsA
Read-onlyIdempotent

Searches for Google Docs by name using Drive API (mimeType filter).

Returns: str: A formatted list of Google Docs matching the search query.

ParametersJSON Schema
NameRequiredDescriptionDefault
user_google_emailYes
queryYes
page_sizeNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.9/5.0
Behavior3/5

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

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters2/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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 FilesA
Read-onlyIdempotent

Searches for files and folders within a user's Google Drive, including shared drives.

ParametersJSON Schema
NameRequiredDescriptionDefault
user_google_emailYesThe user's Google email address. Required.
queryYesThe 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_sizeNoThe maximum number of files to return. Defaults to 10.
page_tokenNoPage token from a previous response's nextPageToken to retrieve the next page of results.
drive_idNoID of the shared drive to search. If None, behavior depends on `corpora` and `include_items_from_all_drives`.
include_items_from_all_drivesNoWhether shared drive items should be included in results. Defaults to True. This is effective when not specifying a `drive_id`.
corporaNoBodies 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_typeNoRestrict 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).
detailedNoWhether to include size, modified time, and link in results. Defaults to True.
order_byNoSort 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

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.7/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness3/5

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

Given the tool's complexity (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.

Parameters3/5

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

Schema description coverage is 100%, so the baseline is 3. The description adds no 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.

Purpose5/5

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.

Usage Guidelines3/5

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 MessagesA
Read-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.

ParametersJSON Schema
NameRequiredDescriptionDefault
queryYesThe search query. Supports standard Gmail search operators.
user_google_emailYesThe user's Google email address. Required.
page_sizeNoThe maximum number of messages to return. Defaults to 10.
page_tokenNoToken for retrieving the next page of results. Use the next_page_token from a previous response.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.8/5.0
Behavior3/5

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

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.

Conciseness5/5

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.

Completeness4/5

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

Given the presence of an output schema 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.

Parameters3/5

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.

Purpose5/5

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

The description clearly states the tool searches 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.

Usage Guidelines3/5

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 MessagesA
Read-onlyIdempotent

Searches for messages in Google Chat spaces by text content and/or time range.

ParametersJSON Schema
NameRequiredDescriptionDefault
user_google_emailYes
queryNoOptional text to search for. If omitted, only time_filter is applied.
space_idNoOptional space to restrict the search to.
page_sizeNoMaximum number of messages to return per space.
time_filterNoOptional 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_spacesNoMaximum number of spaces to search when space_id is not provided (default 10).

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.7/5.0
Behavior3/5

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

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.

Conciseness5/5

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.

Completeness3/5

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

Given the presence of an output schema and 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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
user_google_emailYesThe user's Google email address. Required for authentication.
toYesRecipient email address.
subjectYesEmail subject.
bodyYesEmail body content (plain text or HTML).
body_formatNoEmail body format. Use 'plain' for plaintext or 'html' for HTML content.plain
ccNoOptional CC email address.
bccNoOptional BCC email address.
from_nameNoOptional sender display name (e.g., 'Peter Hartree'). If provided, the From header will be formatted as 'Name <email>'.
from_emailNoOptional 'Send As' alias email address. Must be configured in Gmail settings (Settings > Accounts > Send mail as). If not provided, uses the authenticated user's email.
thread_idNoOptional Gmail thread ID to reply within.
in_reply_toNoOptional RFC Message-ID of the message being replied to (e.g., '<message123@gmail.com>').
referencesNoOptional chain of Message-IDs for proper threading.
attachmentsNoOptional list of attachments. Each can have: "url" (fetch from URL — works with MCP attachment URLs from get_drive_file_download_url / get_gmail_attachment_content), OR "path" (file path, auto-encodes), OR "content" (standard base64, not urlsafe) + "filename". Optional "mime_type". 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_signatureNoWhether to append the Gmail signature from Settings > Signature when available. Defaults to true.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.8/5.0
Behavior3/5

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

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.

Conciseness5/5

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.

Completeness4/5

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

Given the tool's complexity (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.

Parameters3/5

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.

Purpose5/5

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

The description clearly states the verb ('sends'), the resource (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.

Usage Guidelines3/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
user_google_emailYes
space_idYes
message_textYes
thread_keyNoReply in a thread by app-defined key (creates thread if not found).
thread_nameNoReply in an existing thread by its resource name (e.g. spaces/X/threads/Y).

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

C2.6/5.0
Behavior2/5

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

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.

Conciseness3/5

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.

Completeness2/5

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

Despite having an output schema, 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.

Parameters2/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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

No guidance on when to use this tool 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 PermissionsA
Destructive

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
user_google_emailYesThe user's Google email address. Required.
file_idYesThe ID of the file or folder. Required.
link_sharingNoControl "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_shareNoWhether editors can change permissions and share. If False, only the owner can share. Defaults to None (no change).
copy_requires_writer_permissionNoWhether viewers and commenters are prevented from copying, printing, or downloading. Defaults to None (no change).

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.4/5.0
Behavior4/5

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

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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

Schema description coverage is 100%, so baseline is 3. The description adds 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.

Purpose5/5

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.

Usage Guidelines5/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
user_google_emailYesThe user's Google email address. Required.
form_idYesThe ID of the form to update publish settings for.
publish_as_templateNoWhether to publish as a template. Defaults to False.
require_authenticationNoWhether to require authentication to view/submit. Defaults to False.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.1/5.0
Behavior3/5

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.

Conciseness4/5

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.

Completeness2/5

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

Given the presence of an output schema and 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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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

No guidance is provided on when to use this tool versus alternatives like 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:

  1. You need to re-authenticate with different credentials

  2. You want to proactively authenticate before using other tools

  3. The automatic authentication flow failed and you need to retry

In most cases, simply try calling the Google Workspace tool you need - it will automatically handle authentication if required.

ParametersJSON Schema
NameRequiredDescriptionDefault
service_nameYes
user_google_emailNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.9/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness2/5

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

Despite having an output schema, 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.

Parameters1/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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_doc_headers_footersUpdate Doc Headers FootersA
Destructive

Safely creates or updates header/footer text in a Google Doc.

This is the default tool for header/footer content. Do NOT use batch_update_doc with create_header_footer just to set header/footer text; that low-level operation is only for advanced section-break workflows and can fail when the default header/footer already exists.

This tool handles both creation and update in one call:

  • If the header/footer does not exist, it is automatically created first.

  • If the header/footer already exists, its content is replaced.

You do NOT need to create a header/footer separately before calling this tool. Simply call it with the desired content and it will work whether the header/footer exists or not.

ParametersJSON Schema
NameRequiredDescriptionDefault
user_google_emailYesUser's Google email address
document_idYesID of the document to update
section_typeYesType of section to create or update ("header" or "footer")
contentYesText content for the header/footer
header_footer_typeNoType of header/footer ("DEFAULT", "FIRST_PAGE_ONLY", "EVEN_PAGE")DEFAULT

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.5/5.0
Behavior4/5

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

The description adds significant behavioral context beyond annotations: it auto-creates if missing, replaces if exists, no separate creation needed. This complements the destructiveHint and idempotentHint annotations. Could mention potential errors or limitations for a perfect score.

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

Conciseness5/5

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

The description is well-structured with a clear opening, bullet points, and imperative guidance. Every sentence adds value, and the length is appropriate for the complexity. Front-loads purpose and key usage rules.

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

Completeness5/5

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

Given the annotations, full schema coverage (100%), and existence of output schema, the description is complete. It covers purpose, usage guidelines, behavioral details, and preconditions. No gaps identified.

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

Parameters3/5

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

Schema coverage is 100%, with all 5 parameters described in the schema. The description does not add new semantic information about parameters; it only references 'desired content' generically. Baseline score of 3 is appropriate as schema does the heavy lifting.

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

Purpose5/5

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

The description clearly states the tool 'creates or updates header/footer text in a Google Doc', specifying the exact resource and action. It distinguishes itself from the sibling batch_update_doc by noting it is the default tool and that the other tool is for advanced workflows.

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

Usage Guidelines5/5

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

The description explicitly advises against using batch_update_doc for simple header/footer text updates, explaining why (advanced, can fail). It also states when to use this tool ('default') and that it handles both creation and update in one call.

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 FileA
Destructive

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
user_google_emailYesThe user's Google email address. Required.
file_idYesThe ID of the file to update. Required.
nameNoNew name for the file.
descriptionNoNew description for the file.
mime_typeNoNew MIME type (note: changing type may require content upload).
add_parentsNoComma-separated folder IDs to add as parents.
remove_parentsNoComma-separated folder IDs to remove from parents.
starredNoWhether to star/unstar the file.
trashedNoWhether to move file to/from trash.
writers_can_shareNoWhether editors can share the file.
copy_requires_writer_permissionNoWhether copying requires writer permission.
propertiesNoCustom key-value properties for the file.
contentNoNew text content for text-based formats (markdown, TXT, HTML).
file_pathNoLocal file path for binary formats (DOCX, ODT). Supports file:// URLs.
file_urlNoRemote http(s) URL to fetch new content from.
source_formatNoSource 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

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.6/5.0
Behavior5/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
user_google_emailYesUser's Google email address
document_idYesDocument ID to modify
start_indexYesStart position using Docs API indices from inspect_doc_structure. For the main body, 0 is also accepted as an alias for the first writable position.
end_indexYesEnd position (exclusive) - should cover the entire paragraph
heading_levelNoHeading level 0-6 (0 = NORMAL_TEXT, 1 = H1, 2 = H2, etc.) Use for semantic document structure
alignmentNoText alignment - 'START' (left), 'CENTER', 'END' (right), or 'JUSTIFIED'
line_spacingNoLine spacing multiplier (1.0 = single, 1.5 = 1.5x, 2.0 = double)
indent_first_lineNoFirst line indent in points (e.g., 36 for 0.5 inch)
indent_startNoLeft/start indent in points
indent_endNoRight/end indent in points
space_aboveNoSpace above paragraph in points (e.g., 12 for one line)
space_belowNoSpace below paragraph in points
named_style_typeNoDirect named style type - 'NORMAL_TEXT', 'TITLE', 'SUBTITLE', 'HEADING_1' through 'HEADING_6'. Mutually exclusive with heading_level.
tab_idNoOptional document tab ID to target
segment_idNoOptional header/footer/footnote segment ID to target
directionNoParagraph direction - 'LEFT_TO_RIGHT' or 'RIGHT_TO_LEFT'
keep_lines_togetherNoKeep all lines of the paragraph together
keep_with_nextNoKeep the paragraph with the next paragraph
avoid_widow_and_orphanNoAvoid widows/orphans for the paragraph
page_break_beforeNoStart the paragraph on a new page
spacing_modeNo'NEVER_COLLAPSE' or 'COLLAPSE_LISTS'
shading_colorNoParagraph shading/background color (#RRGGBB)
list_typeNoCreate a list from existing paragraphs ('UNORDERED' for bullets, 'ORDERED' for numbers, 'CHECKBOX' for checklists)
list_nesting_levelNoNesting level for lists (0-8, where 0 is top level, default is 0) Use higher levels for nested/indented list items
bullet_presetNoOptional explicit Google Docs bullet preset

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.4/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose4/5

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

The description clearly states the verb 'apply' and the resource '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.

Usage Guidelines2/5

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

The description provides no guidance on when to use this tool versus alternatives. 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 ContentA
Destructive

Updates or creates files in a script project.

ParametersJSON Schema
NameRequiredDescriptionDefault
user_google_emailYesUser's email address
script_idYesThe script project ID
filesYesList of file objects with name, type, and source

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.6/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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

With output schema present and 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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines2/5

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

No guidance on when to use this tool vs alternatives. 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.

  1. 122 tool updatesv1.21.3
    • First observedappend_table_rows
    • First observedbatch_modify_gmail_message_labels
    • First observedbatch_update_doc
    • First observedbatch_update_form
    • First observedbatch_update_presentation
    • First observedcheck_drive_file_public_access
    • First observedcopy_drive_file
    • First observedcreate_calendar
    • First observedcreate_doc
    • First observedcreate_drive_file
    • First observedcreate_drive_folder
    • First observedcreate_form
    • First observedcreate_presentation
    • First observedcreate_reaction
    • First observedcreate_script_project
    • First observedcreate_sheet
    • First observedcreate_spreadsheet
    • First observedcreate_table_with_data
    • First observedcreate_version
    • First observeddebug_docs_runtime_info
    • First observeddebug_table_structure
    • First observeddelete_script_project
    • First observeddownload_chat_attachment
    • First observeddraft_gmail_message
    • First observedexport_doc_to_pdf
    • First observedfind_and_replace_doc
    • First observedformat_sheet_range
    • First observedgenerate_trigger_code
    • First observedget_contact
    • First observedget_contact_group
    • First observedget_doc_as_markdown
    • First observedget_doc_content
    • First observedget_drive_file_content
    • First observedget_drive_file_download_url
    • First observedget_drive_file_permissions
    • First observedget_drive_shareable_link
    • First observedget_events
    • First observedget_form
    • First observedget_form_response
    • First observedget_gmail_attachment_content
    • First observedget_gmail_message_content
    • First observedget_gmail_messages_content_batch
    • First observedget_gmail_thread_content
    • First observedget_gmail_threads_content_batch
    • First observedget_messages
    • First observedget_page
    • First observedget_page_thumbnail
    • First observedget_presentation
    • First observedget_script_content
    • First observedget_script_metrics
    • First observedget_script_project
    • First observedget_search_engine_info
    • First observedget_spreadsheet_info
    • First observedget_task
    • First observedget_task_list
    • First observedget_version
    • First observedimport_to_google_doc
    • First observedimport_to_google_sheets
    • First observedimport_to_google_slides
    • First observedinsert_doc_elements
    • First observedinsert_doc_image
    • First observedinspect_doc_structure
    • First observedlist_calendars
    • First observedlist_contact_groups
    • First observedlist_contacts
    • First observedlist_deployments
    • First observedlist_docs_in_folder
    • First observedlist_document_comments
    • First observedlist_drive_items
    • First observedlist_form_responses
    • First observedlist_gmail_filters
    • First observedlist_gmail_labels
    • First observedlist_presentation_comments
    • First observedlist_script_processes
    • First observedlist_script_projects
    • First observedlist_sheet_tables
    • First observedlist_spaces
    • First observedlist_spreadsheet_comments
    • First observedlist_spreadsheets
    • First observedlist_task_lists
    • First observedlist_tasks
    • First observedlist_versions
    • First observedmanage_conditional_formatting
    • First observedmanage_contact
    • First observedmanage_contact_group
    • First observedmanage_contacts_batch
    • First observedmanage_deployment
    • First observedmanage_doc_tab
    • First observedmanage_document_comment
    • First observedmanage_drive_access
    • First observedmanage_event
    • First observedmanage_focus_time
    • First observedmanage_gmail_filter
    • First observedmanage_gmail_label
    • First observedmanage_out_of_office
    • First observedmanage_presentation_comment
    • First observedmanage_spreadsheet_comment
    • First observedmanage_task
    • First observedmanage_task_list
    • First observedmodify_doc_text
    • First observedmodify_gmail_message_labels
    • First observedmodify_sheet_values
    • First observedmove_sheet_rows
    • First observedquery_freebusy
    • First observedread_sheet_values
    • First observedresize_sheet_dimensions
    • First observedrun_script_function
    • First observedsearch_contacts
    • First observedsearch_custom
    • First observedsearch_docs
    • First observedsearch_drive_files
    • First observedsearch_gmail_messages
    • First observedsearch_messages
    • First observedsend_gmail_message
    • First observedsend_message
    • First observedset_drive_file_permissions
    • First observedset_publish_settings
    • First observedstart_google_auth
    • First observedupdate_doc_headers_footers
    • First observedupdate_drive_file
    • First observedupdate_paragraph_style
    • First observedupdate_script_content

TDQS

B3.4/5.0
Disambiguation4/5

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.

Naming Consistency4/5

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.

Tool Count2/5

122 tools is excessive for a single server. While covering multiple services, this number overwhelms agents and increases selection difficulty.

Completeness5/5

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

ActivityActive
ResponsivenessSyncing

Related MCP Connectors

Related MCP Servers

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/theolefort-cyber/mcpworkspace'

If you have feedback or need assistance with the MCP directory API, please join our Discord server