Google Workspace MCP Server - Control Gmail, Calendar, Docs, Sheets, Slides, Chat, Forms & Drive
The Google Workspace MCP Server enables seamless integration with Google Workspace services, providing:
Authentication: Secure OAuth 2.0 flow for Google Workspace access
Gmail: Search, read, send, and manage emails, drafts, threads, and labels
Google Drive: Search, access, and manage files/folders including shared drives and Office formats
Google Calendar: Create, modify, delete, and retrieve events and calendars
Google Docs: Search, read, create, and manage documents
Google Sheets: Create, read, modify spreadsheets and cell values
Google Forms: Create forms, manage publish settings, and retrieve responses
Google Chat: Manage chat spaces, send messages, and search chat history
The server supports multiple transport methods (HTTP, SSE) and integrates with AI assistants like Claude Desktop and Open WebUI.
Enables complete email management including searching messages, retrieving content, sending emails, and creating drafts with full support for Gmail query syntax.
Provides full calendar management capabilities including listing calendars, fetching events, creating/modifying/deleting events with support for all-day and timed events.
Allows searching for documents, reading document content, listing documents in folders, and creating new documents directly from chat.
Enables searching files, listing folder contents, reading file content, and creating new files with support for extraction and retrieval of Microsoft Office formats.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Google Workspace MCP Server - Control Gmail, Calendar, Docs, Sheets, Slides, Chat, Forms & Drivecheck my calendar for meetings tomorrow and send me a summary"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Google Workspace MCP Server
Full natural language control over Google Calendar, Drive, Gmail, Docs, Sheets, Slides, Forms, Tasks, Contacts, and Chat through all MCP clients, AI assistants and developer tools. Includes a full featured CLI & Code Mode for use with tools like Claude Code and Codex!
The most feature-complete Google Workspace MCP server is in a class of it's own: it can do things that Google's own tooling and the built in integrations with Claude and ChatGPT can't come close to with multi-user support, rich fine-grained editing tools and the most extensive coverage of any Workspace AI integration in existence.
By leveraging native OAuth 2.1, stateless deployment capability and external auth server & gateway passthrough auth support, it's also the only Workspace MCP you can host for your whole organization centrally & securely!
Supports all free Google accounts & Google Workspace plans with expanded app options like Chat & Spaces. Interested in a managed cloud instance? That can be arranged (starting at $5/mo).
See it in action:
What It Does
Workspace MCP connects AI assistants to all twelve major Google Workspace services - 120+ tools behind a single MCP server, with OAuth 2.1 multi-user auth, three progressive tool tiers, read-only mode, a full CLI, and stateless container deployment. It runs locally over stdio for legacy clients and remotely over streamable HTTP with full implementation of the latest MCP spec.
The README covers just enough to get you running, with extensive documentation on the website:
Where to go | What you'll find |
Google Cloud setup, credentials, and client connection with screenshots | |
Every tool, parameter, and auth mode | |
Reverse proxy & nginx config, origin validation, credential store backends (GCS/CMEK), trusted-gateway identity, and the complete environment variable reference | |
Claude Desktop/web Connectors, ChatGPT Developer Mode, and more | |
Enabling Google APIs, OAuth errors, redirect URIs, Google Chat setup, client quirks |
Related MCP server: google-workspace-mcp-advanced
Security & Compliance
For Security Teams
By default, 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 usage reporting, analytics, license server, or SaaS dependency outside optional OTel support for your own usage.
Fully open source — every line is auditable in this repo
Your OAuth client, your GCP project — credentials never leave your environment & you control scopes
You control the network — deploy behind your reverse proxy, in your VPC, on your own terms
Stateless mode — zero disk writes for locked-down container environments
Sensitive path blocking — local file reads default to the managed attachment directory, and
validate_file_path()still blocks.env*files plus common home-directory credential stores such as~/.ssh/and~/.aws/even ifALLOWED_FILE_DIRSis broadened
Full dependency tree in pyproject.toml, pinned in uv.lock.
For Legal & Procurement
This project is MIT licensed — not "open core," not "source available," not "free with a CLA." There is no dual licensing, no commercial tier gating features, and no contributor license agreement.
Use commercially without restriction — build products, sell services, deploy internally
Fork, embed, redistribute — MIT requires only attribution
No CLA — contributions remain under MIT
No built-in telemetry to disclose — optional tracing is off unless you configure it
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
Services
Each page lists every tool with its tier, parameters, required scopes, and example prompts. The complete reference covers all twelve in one place.
💬 Google Chat needs a one-time Chat app configuration and a Workspace account - see the Chat setup FAQ.
Quick Start
Set credentials → pick a launch command → connect your client. Full walkthrough with screenshots: workspacemcp.com/quick-start
You'll need an OAuth client from Google Cloud Console in a project with the Google APIs enabled for the services you plan to use. The docs have one-click enable links for every API plus a single gcloud services enable command that covers them all, and the quick start guide walks through the whole setup in about five minutes.
Confidential Client
# 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
uvx workspace-mcp --tools gmail drive calendarOAuth 2.1 (PKCE)
# 1. Credentials - MCP clients connect with PKCE and no
# secret, but Google still requires one server-side
export MCP_ENABLE_OAUTH21=true
export GOOGLE_OAUTH_CLIENT_ID="..."
export GOOGLE_OAUTH_CLIENT_SECRET="..."
# Alternatively, point GOOGLE_CLIENT_SECRET_PATH at a client_secret.json
# that contains the client id and secret (env vars take precedence).
export WORKSPACE_MCP_PORT=8000
export GOOGLE_OAUTH_REDIRECT_URI="http://localhost:${WORKSPACE_MCP_PORT}/oauth2callback"
export OAUTHLIB_INSECURE_TRANSPORT=1
# 2. Launch - OAuth 2.1 requires HTTP transport
uvx workspace-mcp --transport streamable-http --tool-tier coreTool tiers keep context windows lean: core is the essential set, extended adds management operations, complete loads everything. Combine with --tools <service> ..., --read-only, or per-service --permissions, and subtract individual tools with --disabled-tools <name> ... - details in the server modes docs.
Connect Your Client
Claude Desktop, web & mobile - run the server in HTTP mode and add it as a Connector (Settings → Connectors → Add custom connector). This is the recommended path; the Connector guide has step-by-step screenshots. Legacy stdio configuration remains available for clients without Connector support - see the FAQ.
Claude Code
# Start the server in HTTP mode, then:
claude mcp add --transport http workspace-mcp http://localhost:8000/mcp
# Optional: install the bundled skill for better Workspace tool routing
ln -s "$(pwd)/skills/managing-google-workspace" ~/.claude/skills/managing-google-workspaceChatGPT - connect via Developer Mode with the ChatGPT guide.
VS Code, LM Studio, Open WebUI, and everything else - any MCP client works over streamable HTTP (recommended) or stdio. Client-specific walkthroughs live in the guides and FAQ.
CLI
workspace-cli lists and calls tools against a running server with encrypted, disk-backed OAuth token caching - authenticate once, script forever:
uv run workspace-cli list
uv run workspace-cli call search_gmail_messages query="is:unread" max_results=5Install globally with uv tool install . from this repo. ⚠️ Don't use uvx workspace-cli - an abandoned PyPI package squats that name.
Deployment & Advanced Configuration
Everything you need to run this in production lives in two places. The documentation covers auth modes and server configuration:
OAuth 2.1 multi-user auth - bearer tokens, required for remote or shared HTTP endpoints
Stateless container mode - zero disk writes for locked-down deployments
OAuth proxy storage backends - memory, disk, or Valkey/Redis for distributed setups
External OAuth provider mode - bring your own auth server, validate bearer tokens only
Service accounts with domain-wide delegation - per-request user impersonation with an optional domain allowlist
Trusted-gateway identity - proxy-verified per-user isolation with Pomerium, Cloudflare Access, oauth2-proxy, or any JWKS-verifiable gateway
OpenTelemetry tracing - optional, off unless you configure an OTLP endpoint
Docker -
docker build -t workspace-mcp . && docker run -p 8000:8000 workspace-mcp
The Advanced Deployment guide covers self-hosting specifics: reverse proxy setup with WORKSPACE_EXTERNAL_URL (including the nginx Origin: null consent workaround, the WORKSPACE_MCP_ALLOW_NULL_ORIGIN_CONSENT escape hatch, and the Referrer-Policy pitfall), origin validation and VS Code webview allowlisting, credential store backends (local directory or GCS with CMEK enforcement), and the complete environment variable reference.
Optional per-download payload ceiling for container deployments: set WORKSPACE_MCP_MAX_FILE_BYTES to a positive byte count (e.g. 5242880 for 5 MiB) to reject Drive / Gmail / Chat / Google Docs downloads that would otherwise be fully buffered in-process. Unset or 0 leaves the total size uncapped; uncapped Drive transfers still use 256 KiB transport chunks instead of the Google client's 100 MiB default. This is a file-size limit, not a process-RSS limit: leave headroom for parsing, base64/JSON representation, and concurrent tool calls. Invalid or negative values fail server startup instead of silently disabling the limit. Downloads streamed directly to disk are not subject to this in-memory payload ceiling.
Hosted deployments where the server cannot see the caller's disk can set WORKSPACE_MCP_DISABLE_LOCAL_FILES=true. Tools then stop advertising server-side file_path parameters and refuse local paths with guidance to pass a URL or inline content instead. Stateless mode implies this setting. It is off by default, including for streamable HTTP, because a server on localhost shares the client's filesystem.
On such a server uploads can bypass it entirely: create_drive_file, update_drive_file and the import_to_google_* tools accept return_upload_url=true, which opens a Google Drive resumable upload session and returns its pre-authorized URL. The client then PUTs the bytes straight to Google (no Authorization header), so large or binary files never pass through the MCP server or the model context. The two settings are two sides of one switch: return_upload_url is advertised only when WORKSPACE_MCP_DISABLE_LOCAL_FILES is set (or in stateless mode), and a server with local file access refuses it, since file_path is the route there.
Office files (.docx, .xlsx, .pptx) are ZIP archives, so the ceiling above bounds only their compressed size. Text extraction separately applies WORKSPACE_MCP_MAX_OFFICE_XML_BYTES (default 26214400, 25 MiB) as independent limits on expanded XML and extracted UTF-8 text. A file beyond either limit is reported as too large to extract. These limits bound input and output size, not process memory: the parsed XML tree measured roughly 14 to 30 times the XML size, so lower the value on small containers. 0 removes both limits; invalid or negative values fail server startup.
Advanced OAuth 2.1 deployments affected by concurrent client token refreshes can tune FastMCP's early-refresh threshold and client-facing access-token lifetime, and deployments that want to bound how long per-login records stay in the OAuth proxy storage backend can shorten the client-facing refresh-token lifetime. See .env.oauth21 for the bounded settings, recommended values, and security tradeoffs. The first two settings reduce how often the race occurs; they do not add a grace period to FastMCP's one-time-use refresh-token rotation.
Security Best Practices
By default this server sends no data anywhere except Google's APIs, using your own OAuth client credentials - no usage reporting, analytics, license server, or SaaS dependency. MIT licensed with no CLA, no dual licensing, and no copyleft in the dependency chain. The full security posture - scope minimization, sensitive-path blocking, stateless mode - is documented at workspacemcp.com.
A few things worth internalizing before you connect an LLM to your email:
Prompt injection is real. Emails, docs, and events can contain hidden instructions. Only connect trusted data to an LLM, and be deliberate about which write tools you enable.
Never commit
.env,client_secret.json, or.credentials/to source control.Local file reads are sandboxed to the managed attachment directory. Broaden with
ALLOWED_FILE_DIRSonly if you trust the client and its data sources;.env*,~/.ssh/,~/.aws/, and similar paths are always blocked.Production deployments should use HTTPS and OAuth 2.1.
Development
uv sync --group dev # install deps
uv run ruff check . # lint
uv run pytest # testSingle-file service modules live in g<service>/, tools are registered with @server.tool decorators, and tiers are defined in core/tool_tiers.yaml. PRs welcome.
License
MIT - see LICENSE. The license is 21 lines and says what it means.
Validations:
Available Tools
121 toolsappend_table_rowsAppend Table RowsA
Appends rows to a structured table in a Google Sheet. The rows are added to the end of the table body, automatically extending the table range.
Use list_sheet_tables first to find the table ID.
| Name | Required | Description | Default |
|---|---|---|---|
| values | Yes | 2D array of values to append. Each inner list is one row. Can be a JSON string or Python list. Required. | |
| table_id | Yes | The ID of the table to append to (get from list_sheet_tables). Required. | |
| spreadsheet_id | Yes | The ID of the spreadsheet. Required. | |
| user_google_email | Yes | The user's Google email address. Required. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate a non-read-only, non-idempotent, non-destructive operation. The description adds useful behavioral context by specifying that rows are appended to the end of the table body and that the table range automatically extends. This clarifies the exact side effect without contradicting the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is short, front-loaded with the core action, and every sentence contributes: one defines the operation and behavior, the other provides the essential prerequisite. There is no redundant or filler content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple append operation, the description is complete: it covers what the tool does, the side effect on the table range, and the required discovery step for table_id. The output schema handles return-value expectations, and annotations handle the safety profile, so no critical guidance is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema fully documents all four parameters. The description only reinforces that table_id comes from list_sheet_tables, which is already stated in the schema's table_id description, so it adds no significant new meaning.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: 'Appends rows to a structured table in a Google Sheet.' It also explains the distinctive behavior—rows are added to the end of the table body and the range is automatically extended—which clearly separates it from plain spreadsheet writers like modify_sheet_values or table creation tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives a concrete prerequisite: 'Use list_sheet_tables first to find the table ID,' which tells the agent the required preceding step. It does not explicitly discuss when not to use this tool or name alternatives, so it stops short of full when/when-not guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
batch_modify_gmail_message_labelsBatch Modify Gmail Message LabelsADestructive
Adds or removes labels from multiple Gmail messages in a single batch request.
Takes MESSAGE ids, not thread ids. Gmail's batch endpoint returns no per-message result and silently ignores ids it does not recognise, so by default this reads the messages back afterwards and reports which ids actually changed.
| Name | Required | Description | Default |
|---|---|---|---|
| verify | No | Read the messages back and report per-id outcomes. Costs one extra (batched) read per id. Set False for very large sweeps where that cost matters and an unverified result is acceptable. | |
| message_ids | Yes | A list of message IDs to modify. | |
| add_label_ids | No | List of label IDs to add to the messages. | |
| remove_label_ids | No | List of label IDs to remove from the messages. | |
| user_google_email | Yes | The user's Google email address. Required. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses behavior not visible in annotations: the batch endpoint silently ignores unrecognized ids, returns no per-message result, and defaults to reading messages back to verify which ids changed. This significantly strengthens the agent's understanding of the mutation's real-world behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded with the main action, then delivers the critical caveats in clear, economical sentences. Every sentence contributes actionable information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers the most important operational quirks and the verify behavior, and an output schema exists so return values need not be spelled out. Minor gaps remain, such as not explicitly requiring at least one of add_label_ids or remove_label_ids and not naming the singular alternative for redirection.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description adds meaningful value by clarifying that message_ids must be MESSAGE ids rather than thread ids, and by explaining the verify parameter's purpose in relation to the endpoint's silent-id behavior.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the specific action ('adds or removes labels'), the resource ('multiple Gmail messages'), and the batching scope ('single batch request'). This distinguishes it from sibling message-label tools like modify_gmail_message_labels.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies use for batch label modifications and warns that it takes MESSAGE ids, not thread ids, which is useful guidance. However, it never explicitly names the singular sibling tool or states when to prefer this batch version over alternatives, leaving some selection inference to the agent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
batch_update_docBatch Update DocADestructive
Executes multiple low-level document operations in a single atomic batch update.
For normal header/footer text, prefer update_doc_headers_footers. Only use create_header_footer here for advanced section-break layouts.
RECOMMENDED WORKFLOW FOR BUILDING DOCUMENTS:
To avoid index calculation errors, build documents in phases:
PHASE 1 - INSERT ALL CONTENT (use end_of_segment=true, no index math): Append text, section breaks, and page breaks sequentially. Each operation appends to the end of the body. No index needed. Example batch: [ {"type": "insert_text", "end_of_segment": true, "text": "Report Title\n"}, {"type": "insert_text", "end_of_segment": true, "text": "\nExecutive Summary\n"}, {"type": "insert_text", "end_of_segment": true, "text": "Revenue grew 15%.\n"}, {"type": "insert_section_break", "end_of_segment": true, "section_type": "NEXT_PAGE"}, {"type": "insert_text", "end_of_segment": true, "text": "Detailed Analysis\n"} ]
PHASE 2 - CREATE HEADERS/FOOTERS (if needed): For normal header/footer text, use update_doc_headers_footers (it auto-creates if missing and writes the content for you). Only include create_header_footer operations in a batch when you are intentionally managing advanced section-break-specific layouts.
| Name | Required | Description | Default |
|---|---|---|---|
| operations | Yes | List of operation dicts. Each operation MUST have a 'type' field. All operations accept an optional 'tab_id' to target a specific tab. | |
| document_id | Yes | ID of the document to update | |
| user_google_email | Yes | User's Google email address |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds valuable context beyond annotations: 'atomic batch update' implies all-or-nothing execution, and the workflow warns about index calculation errors, which helps the agent reason about failure modes. However, it does not describe authentication needs or the exact side effects of destructive operations beyond what destructiveHint already signals.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with clear phases, a code example, and purposeful recommendations. Every sentence earns its place: it routes to alternatives, explains a best practice, and illustrates a full batch. The example is compact yet informative, and the front-loaded purpose statement makes the tool's role immediately clear.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's high complexity (many operation types), the description provides a sufficient conceptual framework: atomic batch, phases, end_of_segment usage, and a concrete example. The output schema and input schema cover the remaining details, so the agent has what it needs to call the tool correctly for common document-building workflows.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is high (>80%), so baseline is 3. The description enhances semantics by showing a concrete operations array with end_of_segment=true and omitted index, demonstrating how to use parameters correctly. It also explains why phases matter, adding meaning to the operations parameter beyond the schema's field descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states a specific verb ('Executes'), resource ('multiple low-level document operations'), and qualifier ('single atomic batch update'). It explicitly distinguishes itself from sibling tools by naming update_doc_headers_footers for normal header/footer text and reserving create_header_footer for advanced section-break layouts, making selection unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides concrete when-to-use guidance: prefer update_doc_headers_footers for normal headers/footers, and only use create_header_footer here for advanced section-break layouts. The phased workflow explicitly recommends end_of_segment=true to avoid index calculation errors and gives a complete example, so the agent knows exactly when and how to invoke this tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
batch_update_formBatch Update FormADestructive
Apply batch updates to a Google Form.
Supports adding, updating, and deleting form items, as well as updating form metadata and settings. This is the primary method for modifying form content after creation.
| Name | Required | Description | Default |
|---|---|---|---|
| form_id | Yes | The ID of the form to update. | |
| requests | Yes | List of update requests to apply. Supported request types: - createItem: Add a new question or content item - updateItem: Modify an existing item - deleteItem: Remove an item - moveItem: Reorder an item - updateFormInfo: Update form title/description - updateSettings: Modify form settings (e.g., quiz mode) | |
| user_google_email | Yes | The user's Google email address. Required. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark this tool as destructive and non-read-only; the description adds useful context by specifying that deleting form items, updating metadata, and changing settings are all possible. It does not contradict the annotations and gives the agent a clearer picture of side effects.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, front-loaded with the core purpose, and every sentence adds value. The supported-operation summary is compact and avoids redundant detail already present in the schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutation tool with destructive annotations and a 100%-covered schema, the description is largely complete. It could mention execution semantics such as request ordering, atomicity, or auth prerequisites, but the existing annotations and schema cover the main safety and parameter needs.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the input schema already documents form_id, user_google_email, and the supported request types inside the requests parameter. The description summarizes the same operations but does not add meaning beyond what the schema already provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: 'Apply batch updates to a Google Form.' It enumerates the supported operations and adds 'primary method for modifying form content after creation,' which clearly separates it from create_form, get_form, and set_publish_settings among the siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context: use this tool after form creation to modify content, metadata, or settings. It does not explicitly name alternatives or state when not to use it, but the 'primary method' phrasing and scope are enough to orient an 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 PresentationCDestructive
Apply batch updates to a Google Slides presentation.
| Name | Required | Description | Default |
|---|---|---|---|
| requests | Yes | List of update requests to apply. | |
| presentation_id | Yes | The ID of the presentation to update. | |
| user_google_email | Yes | The user's Google email address. Required. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare destructiveHint=true and readOnlyHint=false, so the mutation risk is known. However, the description adds no behavioral detail beyond that: it does not mention atomicity, partial failure, irreversible changes, or what kinds of modifications can be applied.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single front-loaded sentence with no filler. It is efficient and clear, though slightly under-specified for the complexity of the operation.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
This is a destructive, open-ended batch operation with an unstructured requests array, but the description is only one generic sentence. It leaves out valid request categories, failure semantics, and usage context. The presence of an output schema covers return values, not operational guidance.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already provides 100% parameter coverage, so the bar for the description is lower. The description adds no parameter-level context beyond the schema, and the open-ended 'requests' array in particular would benefit from an example or explanation of the expected shape.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('apply batch updates') and the resource ('Google Slides presentation'), which is enough to differentiate it from read/create tools like get_presentation and create_presentation, and from the Docs/Forms batch update siblings by resource. It does not enumerate update types or scope, so it falls just short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is given about when to use this tool versus alternatives such as create_presentation, get_presentation, or batch_update_doc. An agent must infer from the name and sibling list that this is the choice for batch-mutating an existing Slides presentation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
check_drive_file_public_accessCheck Drive File Public AccessARead-onlyIdempotent
Searches for a file by name and checks if it has public link sharing enabled.
| Name | Required | Description | Default |
|---|---|---|---|
| drive_id | No | ID of the shared drive to scope the search to. When set, the underlying files.list call uses corpora='drive' and the given driveId, which is required to reliably find files that live only in that shared drive. When None, behaviour is unchanged (default API corpora applies). | |
| file_name | Yes | The name of the file to check. | |
| user_google_email | Yes | The user's Google email address. Required. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds that it searches by name and checks public sharing, but does not disclose edge cases like behavior when the file is not found, whether it returns a boolean, or how it handles files in shared drives without drive_id (the schema partially addresses this). This is adequate but not rich.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single, tightly written sentence that states the action and the check. No wasted words, and the purpose is front-loaded. This is exemplary conciseness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is simple, has a clear description, full schema documentation, and an output schema (not shown but indicated). The description covers the essential purpose, and the schema fills in parameter details. Given the sibling ambiguity, a note about when to choose this over get_drive_file_permissions would improve completeness, but as is it is sufficient for a straightforward check tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already fully documents all three parameters, including the drive_id scoping behavior. The description adds no extra parameter meaning, so the baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb+resource: it searches for a file by name and checks if public link sharing is enabled. This clearly distinguishes it from sibling tools like search_drive_files (which just searches) or get_drive_file_permissions (which fetches all permissions). It is unambiguous about the tool's core function.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives such as get_drive_file_permissions or get_drive_shareable_link. It does not mention any conditions or prerequisites, leaving the agent to infer that this is the right tool for a simple public-access check. Given the large sibling list with overlapping permission-related tools, explicit differentiation would help.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
copy_drive_fileCopy Drive FileA
Creates a copy of an existing Google Drive file.
This tool copies the template document to a new location with an optional new name. The copy maintains all formatting and content from the original file.
| Name | Required | Description | Default |
|---|---|---|---|
| file_id | Yes | The ID of the file to copy. Required. | |
| new_name | No | New name for the copied file. If not provided, uses "Copy of [original name]". | |
| parent_folder_id | No | The ID of the folder where the copy should be created. Defaults to 'root' (My Drive). | root |
| user_google_email | Yes | The user's Google email address. Required. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already carry the read-only, destructive, and idempotence signals, so the description only needs to add behavioral context. It adds useful specifics: the file is copied to a new location, may be renamed, and retains all formatting and content. It does not contradict the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded: the core action is stated in the first sentence, followed by two short sentences that expand on destination, name, and outcome. Every sentence earns its place with no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Combined with the fully documented schema, the description gives enough information for a correct call: what is copied, where it goes, whether a new name can be set, and that content is preserved. It stops short of a 5 because it does not address what happens to permissions or sharing on the copied file, a common ambiguity when duplicating Drive files.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description's references to a 'new location' and 'optional new name' loosely map to parent_folder_id and new_name, but it adds little beyond what the schema already states with defaults and descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with 'Creates a copy of an existing Google Drive file,' which names a specific action and resource. It clarifies the operation by adding that the copy goes to a new location and preserves formatting/content, making it easy to distinguish from sibling tools like create_drive_file or update_drive_file.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description clearly implies this tool is for duplicating existing files, but it never explicitly states when to prefer it over alternatives such as create_drive_file or import_to_google_doc. There are no exclusions or prerequisite conditions, so usage guidance remains implicit rather than explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_calendarCreate CalendarA
Creates a new secondary Google Calendar.
| Name | Required | Description | Default |
|---|---|---|---|
| summary | Yes | The title/name of the new calendar. | |
| timezone | No | IANA timezone for the calendar (e.g. 'America/New_York'). | |
| description | No | An optional description for the calendar. | |
| user_google_email | Yes | The user's Google email address. Required. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false and destructiveHint=false, so the mutation nature is known. The description adds the 'secondary' scoping constraint, which is useful behavioral context, but it does not disclose side effects, permission requirements, or output characteristics beyond what annotations and the output schema provide.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single six-word sentence that is front-loaded and contains zero filler. Every word adds meaning, making it an ideal example of conciseness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is simple (4 params, 2 required), the schema fully documents parameters, and an output schema exists, so the return value is covered. The description plus structured data is sufficient for correct invocation. A slight gap is the lack of guidance on when the 'secondary' distinction matters, but this is not critical for a straightforward create operation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Input schema coverage is 100%, so all four parameters are already fully described. The description itself adds no parameter-specific meaning, so the baseline score of 3 is appropriate—it neither helps nor hurts beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Creates') and the resource ('a new secondary Google Calendar'). The term 'secondary' differentiates it from tools that manage the primary calendar or list calendars, so an agent can distinguish it from siblings without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance about when to use this tool versus alternatives like list_calendars or manage_event. No prerequisites, exclusions, or sibling comparisons are provided, leaving the agent to infer usage solely from the tool name and description.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_docCreate DocA
Creates a new Google Doc and optionally inserts initial content.
After creation, the document body starts at index 1. A new empty doc has total length 2 (one section break at index 0, one newline at index 1).
To build a rich document after creation, use batch_update_doc with insert_text operations using end_of_segment=true to append content sequentially without calculating indices. Then call inspect_doc_structure to get exact positions before applying formatting in a separate batch call.
| Name | Required | Description | Default |
|---|---|---|---|
| title | Yes | Title of the new document | |
| content | No | Optional initial plain text content to insert | |
| folder_id | No | The ID of the parent folder. Defaults to 'root'. For shared drives, this must be a folder ID within the shared drive. | root |
| user_google_email | Yes | User's Google email address |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only indicate readOnlyHint=false, openWorldHint=true, etc., offering little safety context. The description adds valuable behavioral details—document body starts at index 1, empty doc length is 2, and the recommended workflow for building content—which goes beyond annotations and enriches the agent's understanding of the tool's effects without contradicting the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is organized into three clear paragraphs: purpose, structural details, and workflow. It is front-loaded with the core purpose and each sentence serves a function. While not extremely concise, the structure is logical and free of fluff, earning a 4.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the output schema exists and the description covers creation behavior and explicitly links to sibling tools for subsequent steps, it is fairly complete. It doesn't mention error handling or permissions, but those are not necessarily required for a creation tool when output schema is present. The guidance on using batch_update_doc and inspect_doc_structure fills practical gaps, making it adequate.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all parameters (title, content, folder_id, user_google_email) are already documented. The description does add that content is 'optional initial plain text' and that folder_id defaults to 'root', but these are also present in the schema. It adds no new meaning beyond the schema, so baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Creates'), a resource ('a new Google Doc'), and an optional capability ('inserts initial content'). It clearly distinguishes from siblings by explicitly directing to use batch_update_doc for rich content and inspect_doc_structure for positions, making the tool's role unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly provides when-to-use guidance: 'To build a rich document after creation, use batch_update_doc...' and 'Then call inspect_doc_structure...'. This tells the agent exactly when to use this tool versus alternatives and what steps follow, eliminating inference.
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 direct text content, inline base64 bytes, or a fileUrl to fetch content from. This stores the supplied bytes without converting them to Google Docs, Sheets, or Slides. Use the matching import_to_google_* tool for Google-native conversion.
| Name | Required | Description | Default |
|---|---|---|---|
| content | No | If provided, the content to write to the file. | |
| fileUrl | No | If provided, fetches the file content from this URL. Supports file://, http://, and https:// protocols. | |
| file_name | Yes | The name for the new file. | |
| folder_id | No | The ID of the parent folder. Defaults to 'root'. For shared drives, this must be a folder ID within the shared drive. | root |
| mime_type | No | The MIME type of the file. Defaults to 'text/plain'; required with return_upload_url. | |
| base64_sha256 | No | Expected SHA-256 of decoded base64_content. Recommended for binary payload integrity checks. | |
| base64_content | No | Standard base64-encoded file bytes. | |
| content_mime_type | No | MIME type for base64_content uploads. | |
| user_google_email | Yes | The user's Google email address. Required. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish readOnlyHint=false and destructiveHint=false Fibonacci, so the write-but-not-destructive safety profile is covered. The description adds meaningful behavioral context: it stores bytes without converting to Google native formats, and it supports shared drives. It does not dive into auth or side effects, but given annotation coverage, this is sufficient.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences with no fluff: purpose first, then input modes, then the conversion caveat and alternative. Every sentence carries distinct information and the structure front-loads the core definition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with 9 parameters and an output schema, the description covers the main use cases, the shared-drive capability, and the critical non-conversion behavior. It does not mention potential error conditions or parameter interactions, but the 100% schema coverage and output schema reduce the need. It is complete enough for an agent to invoke correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description's mention of 'direct text content, inline base64 bytes, or a fileUrl' maps to existing schema parameters (content, base64_content, fileUrl) without adding new semantics like mutual exclusivity or precedence. It adds marginal grouping value but does not compensate beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Creates') and resource ('a new file in Google Drive'), and explicitly scopes to shared drives. It distinguishes itself from the import_to_google_* siblings by clarifying it stores bytes without converting, making the tool's role unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly tells the agent when not to use this tool: 'Use the matching import_to_google_* tool for Google-native conversion.' It also lists the three supported content input modes (text, base64, fileUrl), giving clear contextual guidance for 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.
create_drive_folderCreate Drive FolderA
Creates a new folder in Google Drive, supporting creation within shared drives.
| Name | Required | Description | Default |
|---|---|---|---|
| folder_name | Yes | The name for the new folder. | |
| parent_folder_id | No | The ID of the parent folder. Defaults to 'root'. For shared drives, use a folder ID within that shared drive. | root |
| user_google_email | Yes | The user's Google email address. Required. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already convey the key behavioral traits: non-read-only, non-idempotent, non-destructive, open-world. The description confirms the mutating creation behavior and adds shared-drive support as extra context. It does not detail auth requirements or side effects, but the annotation coverage lowers the burden.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence that states the core action first and adds the shared-drive qualifier without redundancy. It contains no filler and does not repeat schema or annotation information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a straightforward create operation, the description, schema, and annotations together give an agent enough to invoke the tool correctly: required parameters are documented, safety traits are annotated, and an output schema exists. Minor details like permission prerequisites are unstated but are not essential for basic selection and invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all parameters. The description's shared-drive mention aligns with and echoes the existing parent_folder_id schema note rather than adding materially new parameter meaning.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: 'Creates a new folder in Google Drive.' It clearly distinguishes from siblings like create_drive_file by limiting the action to folders, and it adds the meaningful shared-drive capability without ambiguity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear context for when to use the tool: creating folders in Google Drive, including within shared drives. It does not explicitly name alternatives or exclusions, but the resource type is unambiguous enough that an agent can route to this tool for folder creation versus file creation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_formCreate FormB
Create a new form using the title given in the provided form message in the request.
| Name | Required | Description | Default |
|---|---|---|---|
| title | Yes | The title of the form. | |
| description | No | The description of the form. | |
| document_title | No | The document title (shown in browser tab). | |
| user_google_email | Yes | The user's Google email address. Required. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate this is a non-read-only, non-idempotent operation, and the description reinforces that by saying it creates a new form. That adds a small amount of context beyond the annotations, but the description does not disclose side effects, authorization requirements, or response behavior. There is no contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single concise sentence with no filler. It is slightly awkward due to the 'provided form message in the request' phrasing, but it remains short and front-loads the primary action.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has an output schemaahan, full schema coverage, and annotations, so the description does not need to document return values or safety. However, the vague reference to 'form message' and the lack of usage guidance leave some ambiguity about how the request supplies the title and when this tool is appropriate.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the parameters are already fully documented in the schema. The description mentions the title but adds no meaning beyond the schema descriptions. It does not clarify how 'description' or 'document_title' are used or how user_google_email affects execution.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a clear verb and resource: 'Create a new form'. It is semantically distinct from sibling tools like get_form, batch_update_form, and set_publish_settings. However, the phrase 'using the title given in the provided form message in the request' is somewhat vague and could be interpreted ambiguously.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit guidance is given about when to use this tool versus alternatives, nor any conditions or exclusions. The only hint is the verb 'Create', which implies it is for creating a new form rather than retrieving or updating one, but this is left entirely to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_presentationCreate PresentationB
Create a new Google Slides presentation.
| Name | Required | Description | Default |
|---|---|---|---|
| title | No | The title for the new presentation. Defaults to "Untitled Presentation". | Untitled Presentation |
| user_google_email | Yes | The user's Google email address. Required. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, destructiveHint=false, and idempotentHint=false, so the description does not need to cover those basics. It adds only 'new' to indicate a fresh resource is created, but provides no details on return values, side effects, or relationship to Google Drive. However, since an output schema exists and there is no contradiction with annotations, a mid-range score is appropriate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence that conveys the essential action without filler. Every word earns its place, and the key verb and resource are front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple two-parameter create tool with full schema coverage, an output schema, and meaningful annotations, the one-sentence description is largely sufficient. It lacks only occasional context such as that the resulting presentation will be stored in Google Drive, but this is not critical given the schema and annotations.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%: both user_google_email and title have adequate schema descriptions. The tool description adds no additional parameter meaning beyond what the schema already provides, so the baseline of 3 is correct.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Create') and resource ('a new Google Slides presentation'), making the core purpose clear. It does not explicitly differentiate from the sibling import_to_google_slides, which also results in a Slides presentation, so it falls short of full sibling distinction.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives no guidance on when to use this tool versus alternatives such as import_to_google_slides or create_drive_file. There is no mention of prerequisites, when a new blank presentation is appropriate, or when another sibling would be a better choice.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_reactionCreate ReactionA
Adds an emoji reaction to a Google Chat message.
| Name | Required | Description | Default |
|---|---|---|---|
| message_id | Yes | The message resource name (e.g. spaces/X/messages/Y). | |
| emoji_unicode | Yes | The emoji character to react with (e.g. 👍). | |
| user_google_email | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate this is a non-read-only, non-idempotent, non-destructive operation, and the description aligns with that. However, the description adds no extra behavioral context beyond the core action, such as the reaction being publicly visible to space members, duplicate-reaction behavior, or any authorization requirements. It is adequate but not informative beyond the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence that immediately states the action and target. Every word contributes value and there is no filler or repetition of the title.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is simple and an output schema exists, so the description does not need to cover return values. However, the required user_google_email parameter is left ambiguous in both the schema and the description, and no usage context (e.g., acting as a specific user or needing space membership) is provided. The description is minimally viable but has clear gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema describes message_id and emoji_unicode, but user_google_email has no schema description. The tool description does not explain any parameters or compensate for the undocumented required field. Since schema coverage is only 67% and the description adds no param-level meaning, the agent is left to guess the role of user_google_email.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Adds') with a specific resource ('emoji reaction') and target ('Google Chat message'). It is immediately clear what the tool does and it distinguishes itself from all sibling tools, none of which mention reactions.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context: the tool is for adding an emoji reaction to a Chat message. No sibling tool performs this action, so no exclusions or alternatives need to be named. It falls short of a 5 only because it does not explicitly state when not to use it or mention related Chat tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_sheetCreate SheetC
Creates a new sheet or duplicates an existing sheet (user_google_email: str, spreadsheet_id: str, sheet_name: Optional[str] = None, source_sheet_name: Optional[str] = None, insert_sheet_index: Optional[int] = None).
| Name | Required | Description | Default |
|---|---|---|---|
| sheet_name | No | ||
| spreadsheet_id | Yes | ||
| source_sheet_name | No | ||
| user_google_email | Yes | ||
| insert_sheet_index | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already signal that this is a mutating, non-destructive, non-idempotent operation. The description adds the dual create-vs-duplicate behavior, but it does not disclose what happens on duplicate, name conflicts, copying scope, or required authorization context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The opening clause is short and front-loaded, but the inline signature is redundant with the input schema and adds clutter. The description is not overly long, yet not every part earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With five parameters and zero parameter descriptions in the schema, a single functional line is insufficient. The mode-selection logic between sheet_name and source_sheet_name is absent, so an agent could invoke the tool with conflicting or misunderstood options.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description needed to explain the parameters. It only restates the Python-style signature, which largely duplicates the input schema's types and defaults, and gives no actual meaning for fields like source_sheet_name or insert_sheet_index.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the action ('Creates a new sheet or duplicates an existing sheet') and the resource, so an agent can tell what the tool does. However, it does not differentiate from close siblings such as manage_sheet_tab or create_spreadsheet, so it stops short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description offers no guidance about when to use this tool versus related tools like manage_sheet_tab, create_spreadsheet, or copy_drive_file. It states what the tool does but not the conditions that should lead an agent to select it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_spreadsheetCreate SpreadsheetC
Creates a new Google Spreadsheet.
| Name | Required | Description | Default |
|---|---|---|---|
| title | Yes | The title of the new spreadsheet. Required. | |
| folder_id | No | The ID of the parent folder. Defaults to 'root'. For shared drives, this must be a folder ID within the shared drive. | root |
| sheet_names | No | List of sheet names to create. If not provided, creates one sheet with default name. | |
| user_google_email | Yes | The user's Google email address. Required. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description only restates the creation action and adds no behavioral context beyond the annotations. It does not disclose where the spreadsheet is created by default, authentication or permission requirements, or resulting runtime behavior. This is not a contradiction, but it adds no value beyond the structured signals.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, short sentence with no redundancy. However, it is under-specified: it essentially repeats the tool name and does not structure any key decision-relevant facts such as defaults or related tool choices.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given four parameters, two required fields, an output schema, and a large sibling tool set, a one-sentence description is insufficient. It lacks usage boundaries against create_sheet/import_to_google_sheets and does not explain behavior beyond 'create', leaving the agent under-informed for correct selection and invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already provides 100% parameter coverage with descriptions, including required user_google_email and title, the default for folder_id, and the behavior of sheet_names. The description itself adds no parameter information, but the high schema coverage justifies a baseline score of 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action and resource: 'Creates a new Google Spreadsheet.' This is not a tautology and conveys the core operation accurately. However, it does not explicitly differentiate from sibling tools like create_sheet or import_to_google_sheets, so it lacks sibling distinction.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives such as create_sheet, import_to_google_sheets, or create_drive_file. An agent must infer the right choice from the tool name rather than from explicit usage guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_table_with_dataCreate Table with DataA
Creates a table and populates it with data in one reliable operation.
CRITICAL: YOU MUST CALL inspect_doc_structure FIRST TO GET THE INDEX!
MANDATORY WORKFLOW - DO THESE STEPS IN ORDER:
Step 1: ALWAYS call inspect_doc_structure first Step 2: Use the 'total_length' value from inspect_doc_structure as your index Step 3: Format data as 2D list: [["col1", "col2"], ["row1col1", "row1col2"]] Step 4: Call this function with the correct index and data
EXAMPLE DATA FORMAT: table_data = [ ["Header1", "Header2", "Header3"], # Row 0 - headers ["Data1", "Data2", "Data3"], # Row 1 - first data row ["Data4", "Data5", "Data6"] # Row 2 - second data row ]
CRITICAL INDEX REQUIREMENTS:
NEVER use index values like 1, 2, 10 without calling inspect_doc_structure first
ALWAYS get index from inspect_doc_structure 'total_length' field
Index must be a valid insertion point in the document
DATA FORMAT REQUIREMENTS:
Must be 2D list of strings only
Each inner list = one table row
All rows MUST have same number of columns
Use empty strings "" for empty cells, never None
Use debug_table_structure after creation to verify results
| Name | Required | Description | Default |
|---|---|---|---|
| index | Yes | Document position (MANDATORY: get from inspect_doc_structure 'total_length') | |
| tab_id | No | Optional tab ID to create the table in a specific tab | |
| table_data | Yes | 2D list of strings - EXACT format: [["col1", "col2"], ["row1col1", "row1col2"]] | |
| document_id | Yes | ID of the document to update | |
| header_rows | No | Number of leading rows to mark as a repeating header that reappears after each page break. Must be between 0 and the number of table rows (default: 0 = none) | |
| bold_headers | No | Whether to make first row bold (default: true) | |
| user_google_email | Yes | User's Google email address |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish read-only false and non-destructive, so the description need not restate that. It adds real behavioral constraints: the index must come from inspect_doc_structure, rows must be uniform, and debug_table_structure should be used after creation to verify. It does not explain failure modes, but the bar is lower because annotations cover the safety profile.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded and uses numbered sections, but it is repetitive: the CRITICAL index requirement is stated three times, and the workflow repeats the data-format details already in the schema. It earns its place mostly, but could be trimmed.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description is very complete for an agent: it supplies the mandatory upstream call, the index source, data format rules, and post-creation verification via debug_table_structure. It stops short of discussing output/return shape or failure handling, but the presence of an output schema reduces that burden.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description adds meaning beyond the schema by explaining the exact 2D array shape, the no-None rule, uniform column counts, and the mandatory relationship between index and inspect_doc_structure.total_length.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The opening sentence names the exact operation ('Creates a table and populates it with data') and highlights the one-call atomicity. This distinguishes it from append_table_rows and insert_doc_elements in the sibling list.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives a mandatory step-by-step workflow: call inspect_doc_structure first, derive the index from total_length, then call this function. It lacks explicit when-not-to-use or alternative tool routing, but the precondition and order are unambiguous.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
debug_docs_runtime_infoDebug Docs Runtime InfoARead-onlyIdempotent
Return runtime/source information for diagnosing stale MCP server instances.
This is a temporary diagnostic tool intended to verify which code checkout the running MCP server has loaded.
| Name | Required | Description | Default |
|---|---|---|---|
| user_google_email | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish read-only, idempotent, non-destructive behavior, so the description does not need to repeat that. It adds useful context beyond annotations by marking the tool as temporary and diagnostic, clarifying that it inspects runtime/source state rather than user data.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tightly written sentences with no filler. The main action and diagnostic purpose are front-loaded, and the temporary nature is stated concisely in the second sentence.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple one-parameter tool with a rich output schema and strong annotations, the description covers what the tool does and when to use it. The only notable gap is the unexplained parameter semantics, which is partially mitigated by the clear parameter name.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description needed to explain the required `user_google_email` parameter but does not. The parameter name is somewhat self-explanatory, but the description does not clarify whose email is expected or how it is used for diagnosis.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: 'Return runtime/source information' and 'verify which code checkout the running MCP server has loaded.' It clearly distinguishes itself as a temporary diagnostic tool among the many operational Google Workspace sibling tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly identifies the use case: 'diagnosing stale MCP server instances' and verifies which code checkout is loaded. It gives clear context for when to use the tool, though it does not name alternatives or exclusions, which are largely unnecessary given its unique diagnostic role.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
debug_table_structureDebug Table StructureARead-onlyIdempotent
ESSENTIAL DEBUGGING TOOL - Use this whenever tables don't work as expected.
USE THIS IMMEDIATELY WHEN:
Table population put data in wrong cells
You get "table not found" errors
Data appears concatenated in first cell
Need to understand existing table structure
Planning to use populate_existing_table
WHAT THIS SHOWS YOU:
Exact table dimensions (rows × columns)
Each cell's position coordinates (row,col)
Current content in each cell
Insertion indices for each cell
Table boundaries and ranges
HOW TO READ THE OUTPUT:
"dimensions": "2x3" = 2 rows, 3 columns
"position": "(0,0)" = first row, first column
"current_content": What's actually in each cell right now
"insertion_index": Where new text would be inserted in that cell
WORKFLOW INTEGRATION:
After creating table → Use this to verify structure
Before populating → Use this to plan your data format
After population fails → Use this to see what went wrong
When debugging → Compare your data array to actual table structure
| Name | Required | Description | Default |
|---|---|---|---|
| document_id | Yes | ID of the document to inspect | |
| table_index | No | Which table to debug (0 = first table, 1 = second table, etc.) | |
| user_google_email | Yes | User's Google email address |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark the tool as read-only, idempotent, and non-destructive; the description adds valuable behavioral detail by specifying exactly what the output contains and how to interpret fields like dimensions, position, current_content, and insertion_index. It also makes clear the tool inspects rather than mutates, with no contradiction to annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is long but well-structured with bolded trigger conditions, output explanations, and workflow steps that are easy to scan. Each section conveys actionable guidance, though some repetition of the tool's core purpose could be trimmed.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers when to use the tool, how to read its output, and how it fits into a workflow, while the output schema handles the return structure. One minor gap: it references 'populate_existing_table' as a scenario, but that tool does not appear in the sibling tool list, creating slight routing ambiguity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already documents all three parameters with helpful descriptions and a default for table_index. The description does not add parameter-specific guidance beyond what the schema provides, so the baseline score of 3 is appropriate given 100% schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool debugs table structure and enumerates what it reveals: dimensions, cell positions, current content, insertion indices, and boundaries. It is unambiguous about the resource and purpose, though it does not explicitly contrast with sibling inspection tools like inspect_doc_structure or create_table_with_data.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides an explicit 'USE THIS IMMEDIATELY WHEN' list and a workflow integration section covering after creation, before population, and after failures. It lacks an explicit when-not-to-use section or named alternative tools, so it stops short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
download_chat_attachmentDownload Chat AttachmentA
Downloads an attachment from a Google Chat message and saves it to local disk.
In stdio mode, returns the local file path for direct access. In HTTP mode, returns a temporary download URL (valid for 1 hour).
| Name | Required | Description | Default |
|---|---|---|---|
| message_id | Yes | The message resource name (e.g. spaces/X/messages/Y). | |
| attachment_index | No | Zero-based index of the attachment to download (default 0). | |
| user_google_email | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations (readOnlyHint=false, openWorldHint=true, destructiveHint=false) are consistent with the description, so no contradiction. The description adds genuine value beyond annotations: it discloses the side effect of writing to local disk and the mode-dependent return semantics (local path in stdio vs temporary URL with a 1-hour expiry in HTTP), which the annotations do not convey.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two compact sentences carry all essential information with no filler. The core function is front-loaded in the first sentence, and the mode-specific details occupy the second. Every clause earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The output schema exists to cover return values, and annotations cover the safety profile, lowering the burden on the description. The mode-specific behavior disclosure is a meaningful addition. Remaining gaps are the undocumented required user_google_email parameter and lack of error-behavior guidance (e.g., out-of-range attachment_index or messages with no attachments), but these are minor given the structured coverage.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 67%, and the two documented parameters (message_id with a concrete example, attachment_index with default semantics) are well described. However, the required parameter user_google_email has zero documentation in both the schema and the description, and the description does nothing to compensate for this gap. With one required param unexplained, the agent cannot confidently construct valid calls.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The first sentence states a specific verb ('Downloads'), resource ('attachment from a Google Chat message'), and outcome ('saves it to local disk'). It clearly distinguishes this from sibling tools like get_gmail_attachment_content (Gmail domain) and get_drive_file_download_url (URL only, not a download) by explicitly scoping to Google Chat.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides operational context by explaining stdio vs HTTP mode return behavior, which helps the agent know what to do with the result. However, it never explicitly states when to use this tool versus similar alternatives such as get_gmail_attachment_content or get_drive_file_download_url; the routing is left to inference from the Chat domain in the name and description.
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.
SCHEDULED SEND IS NOT AVAILABLE. Gmail's REST API exposes no send-time parameter; the Schedule send feature is web-UI only, and a message cannot be placed in the Scheduled folder through the API. Do not claim a message was scheduled. To deliver at a chosen time, create a draft with draft_gmail_message. An external scheduler must retain the message data to create and send a new message via send_gmail_message then, or call users.drafts.send with the draft ID returned by draft_gmail_message. Alternatively, let the user schedule the draft in the Gmail UI.
| Name | Required | Description | Default |
|---|---|---|---|
| cc | No | Optional CC email address. | |
| to | No | Optional recipient email address. | |
| bcc | No | Optional BCC email address. | |
| body | Yes | Email body (plain text). | |
| subject | Yes | Email subject. | |
| from_name | No | Optional sender display name (e.g., 'Peter Hartree'). If provided, the From header will be formatted as 'Name <email>'. | |
| thread_id | No | Optional Gmail thread ID to reply within. When in_reply_to is omitted, replies to the latest non-draft, non-trash message with an RFC Message-ID. | |
| from_email | No | Optional 'Send As' alias email address. Must be configured in Gmail settings (Settings > Accounts > Send mail as). If not provided, uses the account's default Send As address, falling back to the authenticated user's email when Gmail returns no usable Send-As entry or settings access is not authorized. | |
| references | No | Optional Message-ID ancestry chain. Normally omit when thread_id is provided; the server derives the chain through the selected reply target. | |
| attachments | No | Optional list of attachments. Each can have: 'url' (fetch from URL — works with MCP attachment URLs from get_drive_file_download_url / get_gmail_attachment_content), OR 'path' (file path, auto-encodes), OR 'content' (standard base64, not urlsafe) + 'filename'. Optional 'mime_type'. Optional 'content_id' (string) makes the attachment inline-rendered: it lands in a multipart/related part with `Content-ID: <content_id>` and `Content-Disposition: inline`, and the HTML body can reference it via `<img src="cid:<content_id>">` (RFC 2392). Without `content_id` the attachment is a regular multipart/mixed attachment. | |
| body_format | No | Email body format. Use 'plain' for plaintext or 'html' for HTML content. | plain |
| in_reply_to | No | Optional RFC Message-ID to explicitly reply to a specific message (e.g., '<message123@gmail.com>'). Omit to reply to the latest eligible message in thread_id. | |
| quote_original | No | Whether to include the original message as a quoted reply. Only has an effect when thread_id is provided. Defaults to false. | |
| include_signature | No | Whether to append the Gmail signature from Settings > Signature when available. Defaults to true. | |
| user_google_email | Yes | The user's Google email address. Required for authentication. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations, the description discloses critical runtime behavior: scheduling is impossible through the REST API, the Scheduled folder cannot be populated, and future delivery requires retaining the data and later calling send_gmail_message or users.drafts.send. It also references the draft ID returned by the tool, which is valuable for follow-up calls.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The purpose is front-loaded and the scheduling caveat is clearly separated, making the long block scannable. The scheduled-send paragraph is slightly repetitive and could be tightened, but every sentence contributes safety-relevant guidance.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with 15 parameters, an output schema, and annotations, the description is complete: it covers behavior, the API scheduling limitation, Send As support, and the follow-up path for deferred delivery. Detailed parameter semantics and return expectations are already in the schema and output schema, so the description does not need to repeat them.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
All 15 parameters already have descriptions in the schema (100% coverage), so the baseline applies. The description's 'Send As' mention largely restates the from_email schema text rather than adding per-parameter detail. There is no extra semantic meaning beyond what the schema provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb+resource ('Creates a draft email in the user's Gmail account') and immediately narrows scope to new drafts, reply drafts, attachments, and Send As aliases. The 'draft' wording clearly separates it from send_gmail_message before the scheduling note names that sibling.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It names the relevant sending sibling (send_gmail_message) as part of the scheduling workaround and explicitly states that Gmail's API cannot place a message in the Scheduled folder. However, it lacks a direct 'use this for drafts, use send_gmail_message for immediate sends' boundary, leaving that distinction mostly implied by the word 'draft'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
export_doc_to_pdfExport Doc to PDFA
Exports a Google Doc to PDF format and saves it to Google Drive.
| Name | Required | Description | Default |
|---|---|---|---|
| folder_id | No | Drive folder ID to save PDF in (optional - if not provided, saves in root) | |
| document_id | Yes | ID of the Google Doc to export | |
| pdf_filename | No | Name for the PDF file (optional - if not provided, uses original name + "_PDF") | |
| user_google_email | Yes | User's Google email address |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already signal a non-read-only, non-idempotent, non-destructive operation. The description adds that the result is saved to Google Drive, which clarifies the output location, but it does not disclose prerequisites, permission requirements, or duplicate/overwrite behavior. This is acceptable but not rich.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence with no filler. Every word contributes: the action, the source format, the target format, and the destination are all included efficiently.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a relatively simple conversion tool, the description, full parameter schema, annotations, and existing output schema provide enough information for an agent to call it correctly. It is slightly incomplete only in not addressing edge cases like file naming defaults or authorization context, but those are covered elsewhere or are non-essential.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already describes all four parameters with 100% coverage. The description does not add parameter-level meaning beyond aligning document_id with the source doc and folder_id with the Drive destination, so the baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Exports') and resource ('Google Doc to PDF format'), and also notes the output destination ('saves it to Google Drive'). This is distinguishable from siblings such as get_doc_as_markdown or copy_drive_file, none of which perform PDF conversion.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied: use this when you need a PDF version of a Google Doc saved to Drive. However, the description provides no explicit when-to-use guidance, no exclusions, and does not name alternatives such as get_doc_as_markdown or get_drive_file_download_url.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
find_and_replace_docFind and Replace DocADestructive
Finds and replaces text throughout a Google Doc. No index calculation required.
This is the safest way to update specific text in a document because it does not require knowing any indices. Use this tool when you need to:
Replace placeholder text (e.g., {{TITLE}}) with real content
Update specific words or phrases throughout the document
Make targeted text changes without risk of index errors
For building documents from scratch, consider inserting text with unique placeholders via batch_update_doc, then using this tool to replace them.
| Name | Required | Description | Default |
|---|---|---|---|
| tab_id | No | Optional ID of the tab to target | |
| find_text | Yes | Text to search for | |
| match_case | No | Whether to match case exactly | |
| document_id | Yes | ID of the document to update | |
| replace_text | Yes | Text to replace with | |
| user_google_email | Yes | User's Google email address |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already signal mutation/destructiveness; the description adds behavioral context by explaining this is a no-index, targeted-replacement operation and frames it as the 'safest' update path because it avoids index errors. It could have explicitly said the edit is applied directly/irreversibly, but the destructiveHint is already present.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The main point is front-loaded in the first sentence and the usage scenarios are scannable bullets. It is still slightly redundant, repeating the no-indexes idea three times ('No index calculation required', 'does not require knowing any indices', 'without risk of index errors').
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutation tool with an output schema, the description covers what it does, when to use it, and which sibling to reach for when building documents from scratch. It does not elaborate on tab_id/match_case semantics, but the schema already describes those and the use cases suffice.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the parameters are already fully documented and the description carries no per-parameter burden. The 'No index calculation required' note is a useful high-level hint, but it does not add meaning to any specific parameter beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Opens with a specific verb+resource ('Finds and replaces text throughout a Google Doc') and immediately adds a distinguishing constraint ('No index calculation required'). The listed use cases make the tool's scope concrete and separate it from sibling tools like modify_doc_text or batch_update_doc.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly enumerates three when-to-use scenarios and provides an alternative path for document construction ('consider inserting text with unique placeholders via batch_update_doc'). This gives an agent both inclusion and exclusion guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
format_sheet_rangeFormat Sheet RangeA
Applies formatting to a range: colors, number formats, text wrapping, alignment, and text styling.
Colors accept hex strings (#RRGGBB). Number formats follow Sheets types (e.g., NUMBER, CURRENCY, DATE, PERCENT). If no sheet name is provided, the first sheet is used.
| Name | Required | Description | Default |
|---|---|---|---|
| bold | No | Whether to apply bold formatting. | |
| italic | No | Whether to apply italic formatting. | |
| font_size | No | Font size in points. | |
| range_name | Yes | A1-style range (optionally with sheet name). Required. | |
| text_color | No | Hex text color (e.g., "#000000"). | |
| wrap_strategy | No | Text wrap strategy - WRAP (wrap text within cell), CLIP (clip text at cell boundary), or OVERFLOW_CELL (allow text to overflow into adjacent empty cells). | |
| spreadsheet_id | Yes | The ID of the spreadsheet. Required. | |
| background_color | No | Hex background color (e.g., "#FFEECC"). | |
| user_google_email | Yes | The user's Google email address. Required. | |
| number_format_type | No | Sheets number format type (e.g., "DATE"). | |
| vertical_alignment | No | Vertical text alignment - TOP, MIDDLE, or BOTTOM. | |
| horizontal_alignment | No | Horizontal text alignment - LEFT, CENTER, or RIGHT. | |
| number_format_pattern | No | Custom pattern for the number format. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already convey that this is a non-read-only, non-destructive, non-idempotent operation. The description adds useful behavioral context beyond annotations: colors must be hex strings, number formats follow Sheets types, and the first sheet is used when no sheet name is given. However, it does not disclose whether unspecified formatting properties are preserved, cleared, or merged with existing formatting.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three sentences with no filler. The core purpose is front-loaded, and the constraint notes about colors, number formats, and default sheet are each meaningful and separated cleanly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 13-parameter tool, the fully described schema plus the added constraints on color, number-format values, and default sheet cover most invocation needs, and an output schema exists so return values need no explanation. The main missing piece is a statement about how formatting interacts with existing cell styles.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description adds value by constraining color values to hex strings, listing Sheets number-format types such as NUMBER and CURRENCY, and clarifying the sheet-selection default. This goes beyond the schema's individual parameter descriptions without duplicating them.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific operation—'Applies formatting to a range'—and enumerates the style categories involved: colors, number formats, text wrapping, alignment, and text styling. It is clear and resource-specific, though it does not explicitly call out spreadsheet siblings such as manage_conditional_formatting or modify_sheet_values to reinforce the distinction.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance about when to choose this tool instead of related siblings like modify_sheet_values or manage_conditional_formatting. The only operational note is the first-sheet default, which clarifies behavior but does not help with tool selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
generate_trigger_codeGenerate Trigger CodeARead-onlyIdempotent
Generates Apps Script code for creating triggers.
The Apps Script API cannot create triggers directly - they must be created
from within Apps Script itself. This tool generates the code you need.
To list or remove existing triggers without opening the editor, use
manage_script_trigger (action="list" / action="delete") instead.
| Name | Required | Description | Default |
|---|---|---|---|
| schedule | No | Schedule details (depends on trigger_type): - For time_minutes: "1", "5", "10", "15", or "30" - For time_hours: "1", "2", "4", "6", "8", or "12" - For time_daily: hour as "0"-"23" (e.g., "9" for 9am) - For time_weekly: "MONDAY", "TUESDAY", etc. - For simple triggers (on_open, on_edit): not needed | |
| trigger_type | Yes | Type of trigger. One of: - "time_minutes" (run every N minutes: 1, 5, 10, 15, 30) - "time_hours" (run every N hours: 1, 2, 4, 6, 8, 12) - "time_daily" (run daily at a specific hour: 0-23) - "time_weekly" (run weekly on a specific day) - "on_open" (simple trigger - runs when document opens) - "on_edit" (simple trigger - runs when user edits) - "on_form_submit" (runs when form is submitted) - "on_change" (runs when content changes) | |
| function_name | Yes | The function to run when trigger fires (e.g., "sendDailyReport") |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnly and idempotent behavior. The description adds crucial context beyond those hints: this tool does not create triggers directly, it only generates the code the user must run inside Apps Script. This effectively communicates that calling the tool has no trigger-creation side effect.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded with the core purpose. The API limitation and sibling routing each earn their place without redundancy or filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers the tool's purpose, its API constraint, the generation behavior, and the appropriate sibling for list/delete operations. With detailed schema coverage and a present output schema, nothing essential is missing for an agent to invoke it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 100% parameter description coverage, including allowed values for trigger_type and schedule semantics. The description itself does not add parameter-level meaning beyond what the schema already provides, so the baseline score applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: 'Generates Apps Script code for creating triggers.' This clearly distinguishes the tool from direct trigger management and from manage_script_trigger, which is called out by name.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly explains the constraint that triggers cannot be created via the Apps Script API and must be created from within Apps Script itself. It then names the sibling alternative for listing/removing triggers, giving clear when-to-use versus when-not-to-use guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_contactGet ContactARead-onlyIdempotent
Get detailed information about a specific contact.
| Name | Required | Description | Default |
|---|---|---|---|
| contact_id | Yes | The contact ID (e.g., "c1234567890" or full resource name "people/c1234567890"). | |
| user_google_email | Yes | The user's Google email address. Required. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is clear. The description adds no extra behavioral context, such as authentication needs or error behavior, but it also does not contradict the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single concise sentence that immediately states the action and resource. Every word earns its place, and there is no redundant or filler content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read tool, the combination of a complete input schema, a true output schema, and safety annotations covers most of what an agent needs. The description is minimal but sufficient, though it does not mention how to obtain the contact_id (e.g., via list_contacts).
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so both parameters are already well-documented in the input schema. The description does not add additional semantic meaning beyond the implicit 'specific contact' reference, which aligns with contact_id.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description 'Get detailed information about a specific contact' clearly identifies a read operation for a single contact, using a specific verb and resource. It is distinct from sibling tools like list_contacts or search_contacts because it targets a specific contact, though it does not explicitly name any sibling.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'a specific contact' implies this tool should be used when a contact_id is already known, providing minimal usage context. However, it does not mention alternatives or conditions for choosing between get_contact, search_contacts, or list_contacts, so the guidance is only implied rather than explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_contact_groupGet Contact GroupARead-onlyIdempotent
Get details of a specific contact group including its members.
| Name | Required | Description | Default |
|---|---|---|---|
| group_id | Yes | The contact group ID. | |
| max_members | No | Maximum number of members to return (default: 100, max: 1000). | |
| user_google_email | Yes | The user's Google email address. Required. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already disclose read-only, idempotent, and non-destructive behavior, so the description does not need to repeat safety traits. It adds the useful detail that members are returned, but it does not describe pagination limits or other behavioral nuances beyond what the schema already conveys.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single concise sentence that delivers the core purpose without filler. It is appropriately sized for a simple read operation and front-loads the key idea.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is simple, has full schema coverage, a rich set of annotations, and an output schema, so the description is largely sufficient. The only minor gap is the absence of explicit guidance about how this differs from list_group_members.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the description needs to add little about parameters. The description does not elaborate on group_id, max_members, or user_google_email, but the schema already documents these fully.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Get details') and the resource ('a specific contact group'), and it explicitly calls out that members are included. This distinguishes it from list_contact_groups and list_group_members in the sibling set, making the tool's purpose unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies that this tool is for retrieving a single group by ID, especially with required 'group_id', but it does not explicitly say when to choose this over list_contact_groups or list_group_members. No exclusions or alternatives are mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_doc_as_markdownGet Doc as MarkdownARead-onlyIdempotent
Reads a Google Doc and returns it as clean Markdown with optional comment context.
Unlike get_doc_content which returns plain text, this tool preserves document formatting as Markdown: headings, bold/italic/strikethrough, links, code spans, ordered/unordered lists with nesting, and tables.
When comments are included (the default), each comment's anchor text — the specific text the comment was attached to — is preserved, giving full context for the discussion.
| Name | Required | Description | Default |
|---|---|---|---|
| tab_id | No | Optional ID of a single tab to read (from inspect_doc_structure). When given, only that tab's content is rendered, without its child tabs and without a tab heading. When omitted, every tab is rendered. | |
| document_id | Yes | ID of the Google Doc (or full URL) | |
| comment_mode | No | How to display comments: - "inline": Footnote-style references placed at the anchor text location (default) - "appendix": All comments grouped at the bottom with blockquoted anchor text - "none": No comments included | inline |
| include_comments | No | Whether to include comments (default: True) | |
| include_resolved | No | Whether to include resolved comments (default: False) | |
| user_google_email | Yes | User's Google email address | |
| suggestions_view_mode | No | How to render suggestions in the returned content: - "DEFAULT_FOR_CURRENT_ACCESS": Default based on user's access level - "SUGGESTIONS_INLINE": Suggested changes appear inline in the document - "PREVIEW_SUGGESTIONS_ACCEPTED": Preview as if all suggestions were accepted - "PREVIEW_WITHOUT_SUGGESTIONS": Preview as if all suggestions were rejected | DEFAULT_FOR_CURRENT_ACCESS |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare this tool read-only, non-destructive, and idempotent. The description adds context beyond the annotations by specifying the output is clean Markdown, that comments are included by default, and that comment anchor text is preserved for context. This is sufficient given the annotation coverage.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three focused paragraphs with no wasted words. It front-loads the core purpose, immediately distinguishes the tool from its sibling, and then explains the comment behavior. Every sentence contributes useful information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description is complete for a read-only retrieval tool: it names the key sibling alternative, clarifies output format, explains comment behavior, and the output schema handles return value details. An agent has enough information to select and invoke this tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema provides complete descriptions for all 7 parameters, including enums-like options for comment_mode and suggestions_view_mode, so the schema carries the parameter documentation burden. The description adds some useful semantic context about comment anchoring and default behavior, but does not need to compensate for any schema gaps.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: it reads a Google Doc and returns it as Markdown. It also explicitly differentiates itself from get_doc_content, which returns plain text, making the tool's purpose unmistakable.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description clearly names get_doc_content as the alternative and explains the distinguishing factor: this tool preserves formatting as Markdown while get_doc_content returns plain text. It implies when to choose this tool, though it does not explicitly state 'use get_doc_content when plain text is sufficient'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_doc_contentGet Doc ContentARead-onlyIdempotent
Retrieves content of a Google Doc or a Drive file (like .docx) identified by document_id.
Native Google Docs: Fetches content via Docs API.
Office files (.docx, etc.) stored in Drive: Downloads via Drive API and extracts text.
By default, native Google Docs text is index-aligned with the document: empty paragraphs are preserved and every non-text element that occupies an index (inline object, page break, footnote reference, ...) is rendered as one U+FFFC placeholder per index. The document body starts at index 1, so an offset n into the text that follows "--- CONTENT ---" is document index n + 1, and that index can be passed straight to format_text or delete_text. Tables and multi-tab documents interleave separators, so alignment holds up to the first table or tab header.
Set preserve_context=True for readable link destinations, internal targets, smart-chip values, table boundaries, headers, footers, footnotes, and object context exposed by the Docs API. This output is plain text, not Markdown, and its offsets must not be used as document editing indices. Comments, revision history, exact visual layout, and chip details hidden by the API are not included. Use get_doc_as_markdown for formatting or comments.
| Name | Required | Description | Default |
|---|---|---|---|
| tab_id | No | Optional ID of a single tab to read (from inspect_doc_structure). When given, only that tab's content is returned with no tab separator, so the default output stays index-aligned with that tab. When omitted, every tab is returned with "--- TAB: ... ---" markers. | |
| document_id | Yes | ID of the Google Doc (or full URL) | |
| preserve_context | No | Include readable semantic annotations for native Docs. Defaults to False to retain index alignment. Office extraction is unaffected. With tab_id, only the selected tab is rendered. | |
| user_google_email | Yes | User's Google email address | |
| suggestions_view_mode | No | How to render suggestions in the returned content: - "DEFAULT_FOR_CURRENT_ACCESS": Default based on user's access level - "SUGGESTIONS_INLINE": Suggested changes appear inline in the document - "PREVIEW_SUGGESTIONS_ACCEPTED": Preview as if all suggestions were accepted - "PREVIEW_WITHOUT_SUGGESTIONS": Preview as if all suggestions were rejected | DEFAULT_FOR_CURRENT_ACCESS |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds substantial behavioral context beyond annotations: index alignment with U+FFFC placeholders, body starts at index 1, offset mapping (n+1), table/tab separator interleaving, preserve_context behavior, and exclusions (comments, revision history, exact visual layout, chip details hidden by API). This is rich, non-obvious behavior that an agent needs to know before calling.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with clear sections and front-loaded purpose. It is longer than average, but every sentence earns its place by explaining non-obvious behavior (index alignment, preserve_context semantics, exclusions). The only minor deduction is that the index-alignment explanation is dense and could be slightly tightened, but it is not redundant.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (5 params, output schema present, multiple file types, index-alignment behavior), the description is complete. It covers what is returned, how alignment works, when to use preserve_context, what is excluded, and how to route to get_doc_as_markdown. The output schema exists, so return values need not be described in prose. Nothing an agent needs to call this correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all 5 parameters. The description adds meaning beyond the schema by explaining the behavioral implications of preserve_context (readable semantic annotations, plain text not Markdown, offsets not usable as editing indices) and tab_id (index-aligned with that tab, no tab separator). It also clarifies document_id accepts full URL. This goes beyond the baseline 3 for full coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool retrieves content of a Google Doc or Drive file (like .docx) identified by document_id, and distinguishes between native Docs (via Docs API) and Office files (via Drive API). It also differentiates from sibling get_doc_as_markdown by noting that tool is for formatting/comments. The verb 'retrieves' plus resource and scope is specific and unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly explains when to use this tool vs alternatives: 'Use get_doc_as_markdown for formatting or comments.' It also provides detailed guidance on when to set preserve_context=True and warns that offsets in that mode must not be used as editing indices. It explains the default index-aligned behavior and how to use tab_id for single-tab reads, giving clear context for 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.
get_drive_file_contentGet Drive File ContentARead-onlyIdempotent
Retrieves the content of a specific Google Drive file by ID, supporting files in shared drives.
• Native Google Docs, Sheets, Slides → exported as text / CSV. • Office files (.docx, .xlsx, .pptx) → unzipped & parsed with std-lib to extract readable text. • PDFs → text extracted with pypdf when possible; scanned/image-only PDFs fall back to a download hint. • Images → returned as base64 with MIME metadata for multimodal clients. • Any other file → downloaded; tries UTF-8 decode, else notes binary.
| Name | Required | Description | Default |
|---|---|---|---|
| file_id | Yes | Drive file ID. | |
| user_google_email | Yes | The user’s Google email address. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide readOnlyHint, idempotentHint, and destructiveHint, but the description adds substantial behavioral detail beyond them: per-format export/parsing strategies, PDF fallback behavior, base64/MIME for images, and a binary-note fallback for unknown file types. This is rich disclosure of how the tool behaves in various scenarios.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and well-structured: a single lead sentence followed by a scannable bullet list where each item covers a distinct file category. No sentence is wasted, and the most important usage information (retrieves content by ID, supports shared drives) is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has an output schema, so return-value details are already structured. The description covers all likely input file types, fallback behaviors, and edge cases such as binary files, making it sufficient for an agent to understand what will happen for any file. Combined with the annotations and schema, the description is contextually complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Input schema coverage is 100% and both parameters already have reasonable descriptions. The tool description adds little beyond the schema: it mentions 'by ID' and the fact that shared drives are supported, but it does not deepen the meaning of user_google_email or provide guidance on acquiring a file_id. This matches the baseline of 3 for high schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a precise verb+resource statement: 'Retrieves the content of a specific Google Drive file by ID,' which clearly defines what the tool does. The bulletized format-specific breakdown further distinguishes it from related siblings like get_drive_file_download_url or get_doc_content by showing it returns extracted text/content rather than a URL or a Docs-specific artifact.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description clearly implies when to use the tool: whenever you need the content of a Google Drive file, including shared drives. However, it never explicitly names alternatives such as get_drive_file_download_url or get_doc_content, nor does it state when to prefer one over the other; the guidance is inferred from the format-handling bullets rather than stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_drive_file_download_urlGet Drive File Download URLARead-onlyIdempotent
Downloads a Google Drive file and saves it to local disk.
In stdio mode, returns the local file path for direct access. In HTTP mode, returns a temporary download URL (valid for 1 hour).
For Google native files (Docs, Sheets, Slides), exports to a useful format:
Google Docs -> PDF (default) or DOCX if export_format='docx'
Google Sheets -> XLSX (default), PDF if export_format='pdf', or CSV if export_format='csv'
Google Slides -> PDF (default) or PPTX if export_format='pptx'
For other files, downloads the original file format.
| Name | Required | Description | Default |
|---|---|---|---|
| file_id | Yes | The Google Drive file ID to download. | |
| export_format | No | Optional export format for Google native files. Options: 'pdf', 'docx', 'xlsx', 'csv', 'pptx'. If not specified, uses sensible defaults (PDF for Docs/Slides, XLSX for Sheets). For Sheets: supports 'csv', 'pdf', or 'xlsx' (default). | |
| user_google_email | Yes | The user's Google email address. Required. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false, and idempotentHint=true, so the safety profile is covered. The description adds valuable behavioral context: it saves to local disk (a side effect not implied by read-only), returns a temporary URL in HTTP mode with a 1-hour validity, and explains export conversions for native files. This goes beyond what annotations provide and helps the agent understand the tool's actual behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is moderately long but well-structured: it opens with the core purpose, then explains mode differences, then uses a bullet list for export formats. It avoids redundancy and every section adds value. It could be slightly more concise by trimming the repeated 'default' mentions, but it remains efficient and front-loaded with the main action.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has an output schema (not shown but indicated), the description doesn't need to detail return values. It covers the essential behavioral aspects: local saving, mode differences, and export formats. Potential gaps like file size limits or error handling are not mentioned, but for a download tool with a clear output schema, the description is sufficiently complete for an agent to invoke it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema fully documents all three parameters. The description adds extra meaning to export_format by detailing the exact mapping for each native file type (e.g., Sheets supports CSV, PDF, XLSX) and the default behavior when not specified. This is beyond what the schema states and helps the agent choose the right format. The other parameters are already well-described in the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Downloads a Google Drive file and saves it to local disk.' It then explains the different output modes (stdio vs HTTP) and export behavior for native files, which distinguishes it from siblings like get_drive_file_content (which likely returns content without saving) and export_doc_to_pdf (which specifically exports Docs to PDF). The purpose is specific and unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context on when to use the tool: for downloading a Drive file to local disk. It also explains the difference between stdio and HTTP modes, and how export_format affects native files. However, it does not explicitly name alternative tools or state conditions for not using this tool, such as 'use get_drive_file_content when you need the content in memory.' Still, the usage context is clear enough for an agent to decide.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_drive_file_permissionsGet Drive File PermissionsARead-onlyIdempotent
Gets detailed metadata about a Google Drive file including sharing permissions, parent folder IDs, ownership, and lifecycle timestamps.
| Name | Required | Description | Default |
|---|---|---|---|
| file_id | Yes | The ID of the file to check permissions for. | |
| user_google_email | Yes | The user's Google email address. Required. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds useful context about what metadata categories are returned, but it does not disclose any additional behavioral traits such as auth requirements or rate limits. No contradiction exists.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, focused sentence that front-loads the action and resource, then lists relevant metadata categories. There is no filler or redundant phrasing.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
This is a low-complexity, read-only tool with only two documented parameters, rich annotations, and an output schema. The description sufficiently covers what the agent needs to know to select and invoke it correctly. Additional sibling differentiation would improve it, but that gap is already captured in the usage dimension.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and both parameters (file_id, user_google_email) are already documented clearly in the schema. The description adds no additional parameter-level meaning, so the baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Gets') with a clear resource ('detailed metadata about a Google Drive file') and enumerates concrete content categories: sharing permissions, parent folder IDs, ownership, and lifecycle timestamps. This distinguishes it from siblings like set_drive_file_permissions, which perform writes, and check_drive_file_public_access, which is narrowly scoped.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit guidance is given about when to use this tool versus related siblings such as check_drive_file_public_access, get_drive_shareable_link, or manage_drive_access. The usage context is only implied by the description, with no exclusions or alternative routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_eventsGet EventsARead-onlyIdempotent
Retrieves events from a specified Google Calendar. Can retrieve a single event by ID or multiple events within a time range. You can also search for events by keyword by supplying the optional "query" param.
| Name | Required | Description | Default |
|---|---|---|---|
| query | No | A keyword to search for within event fields (summary, description, location). Ignored if event_id is provided. | |
| detailed | No | Whether to return detailed event information including description, location, colour (colorId), attendees, and attendee details (response status, organizer, optional flags). Recurring instances also report the parent series ID needed to edit the whole series; recurring masters report their raw RFC5545 recurrence rules; and events that are not ordinary confirmed meetings report their event type (outOfOffice, workingLocation, focusTime) and status. Defaults to False. | |
| event_id | No | The ID of a specific event to retrieve. If provided, retrieves only this event and ignores time filtering parameters. | |
| time_max | No | The end of the time range (exclusive) in RFC3339 format. If omitted, events starting from `time_min` onwards are considered (up to `max_results`). Ignored if event_id is provided. | |
| time_min | No | The start of the time range (inclusive) in RFC3339 format (e.g., '2024-05-12T10:00:00Z' or '2024-05-12'). If omitted, defaults to the current time when single_events=True. It is omitted from unexpanded queries so recurring masters that began in the past but still have future occurrences remain discoverable. Ignored if event_id is provided. | |
| page_token | No | Token for the next page, taken from a previous response. When single_events=True, also pass the response's Pagination time_min as time_min, even if omitted on the first call. Keep all other query parameters unchanged. Ignored if event_id is provided. | |
| calendar_id | No | The ID of the calendar to query. Use 'primary' for the user's primary calendar. Defaults to 'primary'. Calendar IDs can be obtained using `list_calendars`. | primary |
| max_results | No | The maximum number of events to return in one page. Defaults to 25. Ignored if event_id is provided. | |
| single_events | No | Whether to expand recurring series into individual instances. Defaults to True for backwards compatibility. Set to False with detailed=True to retrieve recurring master events and their exact RFC5545 recurrence rules instead of inferring cadence from expanded instances. | |
| user_google_email | Yes | The user's Google email address. Required. | |
| include_attachments | No | Whether to include attachment information in detailed event output. When True, shows attachment details (fileId, fileUrl, mimeType, title) for events that have attachments. Only applies when detailed=True. Set this to True when you need to view or access files that have been attached to calendar events, such as meeting documents, presentations, or other shared files. Defaults to False. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is well covered. The description adds scoping behavior (single vs. range vs. keyword), but does not disclose pagination behavior, recurring-event expansion nuances, or behavior when no events match. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences with the primary action front-loaded, followed by the key retrieval variants. There is no filler, no restating of the tool name, and every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the rich 100%-covered schema, strong annotations, and the presence of an output schema, the high-level description is sufficient for an agent to recognize and begin invoking the tool. It could additionally orient agents toward pagination or recurring-series behavior, but those details are already documented in the schema, so the gap is minor.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and the schema already provides detailed semantics for parameters like query, time_min, single_events, page_token, and detailed. The description only restates that query enables keyword search, adding no meaningful semantic information beyond the schema, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource ('Retrieves events from a specified Google Calendar') and then enumerates the retrieval modes: single event by ID, multiple events in a time range, and keyword search. This makes the tool's purpose immediately clear and distinguishes it from calendar metadata tools like list_calendars and mutation tools like manage_event.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use the tool (whenever calendar events need to be read), but it does not explicitly contrast it with sibling tools such as query_freebusy, list_calendars, or manage_event. There is no when-not-to-use guidance or explicit alternative routing, so usage context is only implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_formGet FormCRead-onlyIdempotent
Get a form.
| Name | Required | Description | Default |
|---|---|---|---|
| form_id | Yes | The ID of the form to retrieve. | |
| user_google_email | Yes | The user's Google email address. Required. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already disclose readOnlyHint, idempotentHint, and destructiveHint, so the description does not need to restate safety. However, it also adds no behavioral context such as authentication requirements, scope of the returned form, or relationship to Google user email.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely short, but this reads as under-specification rather than effective conciseness. It contains only a restatement of the tool name and provides no useful elaboration.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The schema covers parameters completely, annotations cover safety semantics, and an output schema exists, so the tool is minimally callable. Still, the description omits any context about the form object versus form responses, which limits completeness for an agent navigating many form-related siblings.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema fully documents both required parameters (user_google_email and form_id) with clear descriptions, so the description does not need to compensate. It also adds no extra meaning beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb and resource: retrieve a form. It is clear about the core operation, but it does not differentiate from sibling tools like get_form_response or list_form_responses, which also involve forms.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives. There is no mention of prerequisites, when to prefer get_form_response, or what distinguishes retrieving a form definition from retrieving responses.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_form_responseGet Form ResponseBRead-onlyIdempotent
Get one response from the form.
| Name | Required | Description | Default |
|---|---|---|---|
| form_id | Yes | The ID of the form. | |
| response_id | Yes | The ID of the response to retrieve. | |
| user_google_email | Yes | The user's Google email address. Required. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the description's minimal 'Get one response' is consistent. However, it adds no behavioral context beyond the annotations—such as account-scoping requirements or the need for prior listing—but there is also no contradiction.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single compact sentence with no redundant words. It front-loads the essential action and object, making it easy to process quickly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the simple tool with a fully described schema, clear annotations, and an output schema, the description is mostly adequate. However, it misses the practical context of how response_id is obtained and how this tool relates to list_form_responses, leaving a minor but notable gap for an agent deciding how to retrieve a response.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with all three parameters (form_id, response_id, user_google_email) individually described. The tool description adds no extra meaning to the parameters, so a baseline score of 3 is appropriate given the schema already documents them fully.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a clear verb ('Get'), a specific resource ('one response'), and scope ('from the form'). It distinguishes itself from the sibling list_form_responses through the word 'one', but does not explicitly name the alternative or clarify that a specific response ID is required.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus list_form_responses, nor does it mention that response_id must be obtained beforehand (e.g., via listing responses). An agent is left to infer usage entirely from the parameter schema.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_gmail_attachment_contentGet Gmail Attachment ContentA
Downloads an email attachment and saves it to local disk.
In stdio mode, returns the local file path for direct access. In HTTP mode, returns a temporary download URL (valid for 1 hour). May re-fetch message metadata to resolve filename and MIME type.
| Name | Required | Description | Default |
|---|---|---|---|
| message_id | Yes | The ID of the Gmail message containing the attachment. | |
| attachment_id | Yes | The ID of the attachment to download. | |
| return_base64 | No | When True, includes the full attachment as a standard base64 string in the response (in addition to any file path or download URL). Useful for sandboxed clients that cannot reach localhost download URLs or the MCP server's local file paths (e.g. containerized agents with network allowlists). The returned base64 uses the standard alphabet, so it can be passed directly to tools like ``draft_gmail_message`` that expect standard (not URL-safe) base64. Default False preserves the existing behavior and response size. | |
| attachment_index | No | Zero-based attachment position from the message-content response. When the cap is enabled, this lets the server safely resolve Gmail's refreshed attachment IDs against current metadata before downloading. | |
| user_google_email | Yes | The user's Google email address. Required. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations provide little behavioral detail, so the description adds valuable context: the tool writes to local disk, returns a temporary URL in HTTP mode, and may re-fetch message metadata. These are meaningful side-effect and timing details beyond what the annotations convey.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the core action and then provides mode-specific return behavior in three concise sentences. Every sentence adds useful information, and there is no redundant or filler content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers the side effect, both output modes, the temporary URL lifetime, and a potential metadata re-fetch. Combined with a 100%-covered input schema and an output schema, the agent has enough context to select and invoke the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the parameters are already well documented, including detailed descriptions for return_base64 and attachment_index. The tool description itself adds no additional parameter semantics beyond what the schema already provides, so it appropriately stays at the baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific action ('Downloads an email attachment'), a clear resource, and the resulting artifact ('saves it to local disk'). It distinguishes itself from siblings like get_gmail_message_content and download_chat_attachment by explicitly targeting Gmail email attachments.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The intended use is implied by the name and first sentence, and the stdio/HTTP return-mode distinction provides useful context. However, the description never explicitly says when to choose this tool over alternatives like get_gmail_message_content or download_chat_attachment, nor does it mention any exclusions or prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_gmail_message_contentGet Gmail Message ContentARead-onlyIdempotent
Retrieves the full content (subject, sender, recipients, body) of a specific Gmail message.
Bodies are returned inline and truncated at 20,000 characters. Set full=True to get the complete, untruncated message instead: it is exported to disk and the response carries a short-lived download URL (HTTP transport) or file path (stdio transport) rather than the body, so large messages never stream through the model context. Stateless deployments have no file storage, so there full=True returns the untruncated body inline.
| Name | Required | Description | Default |
|---|---|---|---|
| full | No | When True, return the COMPLETE untruncated message: saved to local storage and referenced by download URL/file path instead of the body text, or inlined in the response when the server has no file storage (stateless mode). Use for messages large enough to hit the truncation limit, or when byte-exact fidelity is needed (pair with body_format='raw' for a .eml export). | |
| format | No | Message format. "full" (default) includes the body and attachments, "metadata" only headers. | full |
| message_id | Yes | The unique ID of the Gmail message to retrieve. | |
| body_format | No | Body output format (only applies when format='full'). 'text' (default) returns plaintext (HTML converted to text as fallback). 'html' returns the raw HTML body as-is without conversion. 'raw' fetches the full raw MIME message and returns the base64url-decoded content. | text |
| user_google_email | Yes | The user's Google email address. Required. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false. The description adds substantial behavioral detail beyond these: it discloses the 20,000-character inline truncation, the export-to-disk behavior for full=True, the transport-specific response (download URL for HTTP, file path for stdio), and the stateless fallback that inlines the untruncated body. This goes well beyond the annotations and paints a complete picture of side effects and response characteristics.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences and a short paragraph, with no filler. It front-loads the core purpose, then explains the truncation and full=True behavior in a structured, efficient way. Every sentence contributes critical information about when and how to use the tool, and the structure guides the reader from basic behavior to edge cases.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only, idempotent tool with a full output schema, the description covers the essential behavioral nuances: truncation, full=True transport, and stateless handling. It does not detail error conditions or how to obtain message_id, but these are typically handled elsewhere. Given the output schema and annotations, the description is sufficient for an agent to call the tool correctly and interpret the response, with only minor omissions around edge-case error handling.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so a baseline of 3 applies. The description adds value by explaining the implications of the full parameter: it clarifies the transport-specific behavior and stateless mode, which are not in the schema. It also ties full=True to body_format='raw' for .eml export. This adds meaningful context beyond the schema's own parameter descriptions, justifying a 4.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a precise statement of the operation: 'Retrieves the full content (subject, sender, recipients, body) of a specific Gmail message.' This clearly identifies the resource (a specific Gmail message) and the verb (retrieves). It distinguishes the tool from batch and thread siblings by the singular scope, and from attachment tools by listing body content explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description does not explicitly state when to prefer this tool over its siblings (e.g., get_gmail_messages_content_batch for multiple messages, get_gmail_thread_content for threads). However, it provides guidance on the full=True parameter, explaining when it should be used (large messages, byte-exact fidelity). The absence of alternative routing means an agent must infer single-message usage from the tool name and schema, making the guidance implied rather than explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_gmail_messages_content_batchGet Gmail Messages Content BatchARead-onlyIdempotent
Retrieves the content of multiple Gmail messages in a single batch request. Supports up to 25 messages per batch to prevent SSL connection exhaustion.
| Name | Required | Description | Default |
|---|---|---|---|
| format | No | Message format. "full" includes body, "metadata" only headers. | full |
| body_format | No | Body output format (only applies when format='full'). 'text' (default) returns plaintext (HTML converted to text as fallback). 'html' returns the raw HTML body as-is without conversion. 'raw' fetches the full raw MIME message and returns the base64url-decoded content. | text |
| message_ids | Yes | List of Gmail message IDs to retrieve (max 25 per batch). | |
| user_google_email | Yes | The user's Google email address. Required. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds useful behavioral detail beyond annotations: the batch limit and the reason for it, which helps the agent understand the tool's operational constraints.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with no filler. The first sentence states the action and resource immediately; the second provides the key constraint and rationale. Every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The output schema supplies return-shape details and the annotations cover safety, so the description only needs to convey scope and constraints, which it does. It could have explicitly pointed to get_gmail_message_content for single-message needs, but the clear naming and sibling list make that omission minor.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%: all four parameters have meaningful descriptions and enums. The tool description only reinforces the 25-message limit already present in message_ids, adding no significant new parameter-level meaning, so the baseline score of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Retrieves'), names the resource ('content of multiple Gmail messages'), and clearly marks the batch scope, distinguishing it from the singular get_gmail_message_content sibling. 'Single batch request' reinforces the unique purpose.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description states the appropriate context: fetching multiple messages in one batch, with a 25-message cap and the rationale (preventing SSL connection exhaustion). It does not explicitly name alternatives like the singular get_gmail_message_content, but the context is clear enough for an agent to decide.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_gmail_thread_contentGet Gmail Thread ContentARead-onlyIdempotent
Retrieves the complete content of a Gmail conversation thread, including all messages.
Optionally also returns structured ownership analysis so a caller can determine who sent the last message and who owes whom a response without re-parsing the formatted string or making a second tool call.
| Name | Required | Description | Default |
|---|---|---|---|
| thread_id | Yes | The unique ID of the Gmail thread to retrieve. | |
| body_format | No | Body output format. 'text' (default) returns plaintext (HTML converted to text as fallback). 'html' returns the raw HTML body as-is without conversion. 'raw' fetches each message's full raw MIME content and returns the base64url-decoded body. | text |
| include_analysis | No | When True, the return value is a dict with both the formatted thread content AND structured ownership analysis (last sender, ball-in-court verdict, per-sender message counts, participants). Defaults to False, in which case the existing string return shape is preserved. | |
| user_google_email | Yes | The user's Google email address. Required. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish the safety profile (readOnlyHint, idempotentHint, non-destructive, openWorld), so the bar for the description is lower. The description adds meaningful behavioral context beyond annotations: the tool returns ALL messages in the thread, and the include_analysis flag flips the return shape from a formatted string to a structured dict containing last sender, ball-in-court verdict, per-sender counts, and participants. This explains behavior the annotations cannot convey and does not contradict them.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with zero waste: the first states the core function, the second explains the optional value-add and its benefit. The efficiency framing ('without re-parsing the formatted string or making a second tool call') earns its place by clarifying why the optional feature exists. Front-loaded, appropriately sized, no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, return-value documentation is handled elsewhere; annotations cover the read-only/idempotent profile; and the schema covers all parameters at 100%. The description is complete for the core task. The only meaningful gap is explicit routing to sibling alternatives (batch vs. single vs. message-level), which would round out the contextual picture but is not critical given the clear thread-scoped purpose.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all four parameters thoroughly, including defaults and enum semantics for body_format and include_analysis. Per the baseline rule, the description needn't repeat this. It adds marginal value by explaining the intent behind include_analysis ('who owes whom a response') but provides no additional meaning for thread_id, body_format, or user_google_email beyond what the schema already states.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb+resource: 'Retrieves the complete content of a Gmail conversation thread, including all messages.' This clearly distinguishes it from siblings like get_gmail_message_content (single message) and search_gmail_messages (search), and the second sentence's ownership-analysis feature further differentiates it from get_gmail_threads_content_batch.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies a use case — 'so a caller can determine who sent the last message and who owes whom a response... without making a second tool call' — which tells the agent when the optional analysis is valuable. However, it never explicitly addresses when NOT to use this tool or names alternatives (e.g., use get_gmail_threads_content_batch for multiple threads, get_gmail_message_content for one message). The guidance is implied, not stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_gmail_threads_content_batchGet Gmail Threads Content BatchARead-onlyIdempotent
Retrieves the content of multiple Gmail threads in a single batch request. Supports up to 25 threads per batch to prevent SSL connection exhaustion.
| Name | Required | Description | Default |
|---|---|---|---|
| thread_ids | Yes | A list of Gmail thread IDs to retrieve. The function will automatically batch requests in chunks of 25. | |
| body_format | No | Body output format. 'text' (default) returns plaintext (HTML converted to text as fallback). 'html' returns the raw HTML body as-is without conversion. 'raw' fetches each message's full raw MIME content and returns the base64url-decoded body. | text |
| user_google_email | Yes | The user's Google email address. Required. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, openWorld, idempotent, and non-destructive behavior. The description adds meaningful context about the 25-thread batch limit and the underlying reason (preventing SSL connection exhaustion), which is not present in annotations and helps the agent respect rate/connection constraints.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences: the first states the core purpose, the second states the key limit and rationale. Every word earns its place, with no redundancy or filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With a full input schema, an output schema present, and annotations covering side-effect safety, the call context is largely complete. The only notable gap is explicit guidance on when to use this tool versus related single/batch thread or message tools.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Input schema coverage is 100%, including descriptions of thread_ids, body_format, and user_google_email. The description adds no parameter-level semantics beyond what the schema already provides, so it stays at the baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Retrieves'), a specific resource ('multiple Gmail threads'), and the batching scope ('in a single batch request'). This clearly differentiates it from single-thread retrieval and message-batch retrieval by resource type and batch behavior.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives a constraint (up to 25 threads per batch) but no explicit guidance on when to choose this tool over get_gmail_thread_content or get_gmail_messages_content_batch. It leaves usage selection to inference from the tool name rather than stating conditions or alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_messagesGet MessagesCRead-onlyIdempotent
Retrieves messages from a Google Chat space.
| Name | Required | Description | Default |
|---|---|---|---|
| order_by | No | createTime desc | |
| space_id | Yes | ||
| page_size | No | ||
| message_filter | No | Optional filter string using the Chat API filter syntax. Supports createTime and thread.name. Examples: 'createTime > "2026-03-18T00:00:00-03:00"' 'createTime > "2026-03-18T00:00:00-03:00" AND createTime < "2026-03-19T00:00:00-03:00"' 'thread.name = spaces/X/threads/Y' | |
| user_google_email | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, openWorldHint, and destructiveHint=false, so the safety profile is covered. The description adds only the space-scope context and does not disclose pagination, filtering, ordering, or the role of user_google_email, but it does not contradict the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is one direct sentence with no filler, and the main action is front-loaded. It is under-specified for the tool's complexity, but its structure is concise.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 5-parameter tool with a required user_google_email and a sibling search_messages tool, this description is too thin. It lacks parameter semantics and usage guidance, though the output schema and annotations cover return values and safety.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With schema description coverage at only 20%, the description needed to compensate for the undocumented parameters such as user_google_email, space_id, order_by, and page_size. It does not mention any of them and adds no meaning beyond the schema property names.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states the operation (Retrieves messages) and the resource scope (from a Google Chat space), which separates it from the Gmail message tools. It does not explicitly distinguish it from the sibling search_messages tool, so it falls just short of a top score.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use get_messages versus search_messages, nor any context about when this tool is the right choice. No preconditions, exclusions, or alternatives are mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_pageGet PageARead-onlyIdempotent
Get details about a specific page (slide) in a presentation.
| Name | Required | Description | Default |
|---|---|---|---|
| page_object_id | Yes | The object ID of the page/slide to retrieve. | |
| presentation_id | Yes | The ID of the presentation. | |
| include_geometry | No | Also report each element's placement - its transform (translate, and scale/shear when not identity) and intrinsic size, in raw EMU. Set this when adding elements to an existing deck: it is the only way to discover the deck's margins, gutters and content width, which Slides exposes nowhere else, and it reports the same terms batch_update_presentation writes. Defaults to False to keep the default output's token cost unchanged. | |
| user_google_email | Yes | The user's Google email address. Required. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, so the safety profile is established. The description adds useful behavioral context via include_geometry: it explains that geometry output is in EMU, that it is needed for discovering deck margins/gutters, and that defaulting to false keeps token cost unchanged—information not present in the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The entire description is one focused sentence that states the action and object with no filler. It is front-loaded and easy to parse.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only tool, the definition is largely complete: annotations cover safety, the schema covers all parameters, and an output schema exists. The only gap is the lack of explicit guidance on when to choose get_page over get_presentation, though the description's 'specific page' phrasing implies it.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The tool description itself says nothing about parameters; all meaningful semantics live in the input schema, particularly the rich include_geometry explanation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states a read operation on a specific page/slide within a presentation, with a direct object and scope. It differentiates from sibling get_presentation (whole deck) and get_page_thumbnail (thumbnail) by specifying details rather than thumbnail or full presentation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description does not name alternative tools or give exclusion conditions for when not to use it. The include_geometry parameter does offer conditional advice about when to enable geometry, but tool-selection guidance remains implied rather than explicit.
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 ThumbnailARead-onlyIdempotent
Generate a thumbnail URL for a specific page (slide) in a presentation.
| Name | Required | Description | Default |
|---|---|---|---|
| page_object_id | Yes | The object ID of the page/slide. | |
| thumbnail_size | No | Size of thumbnail ("LARGE", "MEDIUM", "SMALL"). Defaults to "MEDIUM". | MEDIUM |
| presentation_id | Yes | The ID of the presentation. | |
| user_google_email | Yes | The user's Google email address. Required. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already supply the safety profile (readOnlyHint, idempotentHint, non-destructive). The description adds that the result is a URL and that it targets a single slide, but it does not disclose authentication prerequisites, URL lifetime, or other behavioral details. Adequate but not rich.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single sentence with no filler. The action and target are front-loaded, and every word contributes meaning.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only, idempotent thumbnail-URL tool with full parameter documentation, strong annotations, and an output schema, the description is sufficient. Nothing critical for invoking the tool correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so each parameter is already documented with a useful description. The tool description only reinforces that page_object_id refers to a slide and does not add meaningful parameter-level semantics beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Generate') and a precise resource ('thumbnail URL for a specific page (slide) in a presentation'). It clearly distinguishes this tool from siblings like get_page, which would return slide content rather than a thumbnail URL.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The intended purpose is clear from the description, but it does not explicitly state when to use this tool over alternatives such as get_page, nor does it mention prerequisites or exclusions. Usage context is implied by the resource targeted, not explicitly spelled out.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_presentationGet PresentationARead-onlyIdempotent
Get details about a Google Slides presentation.
| Name | Required | Description | Default |
|---|---|---|---|
| presentation_id | Yes | The ID of the presentation to retrieve. | |
| include_geometry | No | Also list each slide's elements with their placement - transform (translate, and scale/shear when not identity) and intrinsic size, in raw EMU. Set this when adding slides to an existing deck so new elements can match its established margins and content width. Defaults to False. | |
| user_google_email | Yes | The user's Google email address. Required. | |
| include_speaker_notes | No | Also report each slide's speaker (presenter) notes and the object ID of the shape holding them. Pass True when you need to read or edit notes: that shape ID is the only valid target for insertText/deleteText on notes, and batch_update_presentation writes notes by deleting the shape's existing text and inserting new text. Defaults to False. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare readOnlyHint, idempotentHint, and destructiveHint false, so the safety and side-effect profile is well covered. The description itself adds no further behavioral context, such as what the response contains, how optional include_* flags alter behavior, or auth requirements.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, direct sentence with no filler or redundant restatement of the title. It is appropriately sized for a simple retrieval tool, leaving detailed behavior to the schema and annotations.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the rich annotations, complete schema descriptions, and the presence of an output schema, nothing essential is missing for an agent to call this tool correctly. The optional parameter behaviors are thoroughly explained in the schema, so the tool definition as a whole is complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3 and the one-sentence tool description does not need to compensate for missing parameter documentation. The description itself adds no parameter-level meaning beyond what the input schema already provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a concrete operation—get details about a Google Slides presentation—with a specific verb and resource type. It does not explicitly call out sibling tools, but the read-oriented verb and required presentation_id make its role clear versus creation/update tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance about when to use this tool instead of create_presentation, batch_update_presentation, or other slides-related tools, and no exclusionary conditions are stated. The only usage signal is the verb 'get', which is implied rather than explicitly explained.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_script_activityGet Script ActivityARead-onlyIdempotent
Read execution activity for scripts: recent processes or aggregate metrics.
| Name | Required | Description | Default |
|---|---|---|---|
| action | Yes | One of "processes", "metrics". | |
| page_size | No | Number of results for processes (default: 50). | |
| script_id | No | The script project ID (required for metrics; optional for processes). | |
| user_google_email | Yes | User's email address | |
| metrics_granularity | No | Granularity for metrics - "DAILY" or "WEEKLY". | DAILY |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, covering the safety profile. The description adds the dual-mode behavior (processes vs. metrics) which is useful, but it does not disclose details like pagination behavior or authentication requirements. The description is consistent with annotations and adds some value beyond them.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence that immediately conveys the tool's purpose and the two key modes. There is no unnecessary verbosity, and the most important information is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the high schema coverage, presence of an output schema, and annotations that establish safety, the description is nearly complete. It lacks only minor context such as explicit clarification that script_id is required for metrics (though the schema covers this). The tool is a read-only operation with clear modes, so nothing critical is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 100% description coverage, so all five parameters are documented in the schema itself. The description does not add any additional semantic detail beyond what the schema provides. Baseline 3 is appropriate when the schema carries the explanatory burden.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Read' and the resource 'execution activity for scripts', and further specifies two modes: 'recent processes' and 'aggregate metrics'. This distinguishes it from sibling tools like get_script_project or run_script_function, which serve different purposes. The purpose is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for reading execution activity but does not explicitly state when to use this tool versus alternatives or provide any exclusion criteria. The context is clear enough for an agent to infer, but there is no explicit guidance on selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_script_projectGet Script ProjectARead-onlyIdempotent
Read Apps Script projects and their source files.
| Name | Required | Description | Default |
|---|---|---|---|
| action | Yes | One of "list", "get". | |
| file_name | No | Optional source file name for get. | |
| page_size | No | Number of results per page for list (default: 50). | |
| script_id | No | The script project ID (required for get). | |
| page_token | No | Pagination token for list (optional). | |
| user_google_email | Yes | User's email address |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover safety: readOnlyHint=true, idempotentHint=true, destructiveHint=false. The description simply restates the read nature and adds the 'source files' scope, but it does not add contextual behavior such as mode differences (list vs get) or pagination; this is acceptable because annotations carry the safety burden.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single front-loaded sentence that states the core operation without filler. Every word contributes to selection.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the 100% schema coverage, robust annotations, and presence of an output schema, the description is largely sufficient. It is brief but would benefit from explicitly noting the list-versus-get action modes or pointing to manage_script_content for edits; still, it provides enough context to select correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so every parameter including action, script_id, file_name, page_size, and page_token is already documented. The description adds no parameter-level meaning beyond the schema, which meets the high-coverage baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses the specific verb 'Read' with a clear resource scope, 'Apps Script projects and their source files.' This directly differentiates it from sibling tools like manage_script_project, get_script_version, and get_script_activity, which concern different resources or operations.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The read-oriented wording implies it should be used when an agent needs to inspect Apps Script projects or files, but the description offers no explicit when-to-use/when-not-to-use guidance or named alternatives such as manage_script_content or get_script_activity.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_script_versionGet Script VersionARead-onlyIdempotent
List or retrieve immutable version snapshots of a script project.
Actions: - "list": List every version of the project. - "get": Retrieve one version. Requires version_number.
| Name | Required | Description | Default |
|---|---|---|---|
| action | Yes | ||
| script_id | Yes | ||
| version_number | No | ||
| user_google_email | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds 'immutable version snapshots' and notes that 'get' requires version_number, which are useful behavioral details. Annotations already declare readOnlyHint=true and destructiveHint=false, covering the read-only safety profile. However, it does not explain operational behaviors like authentication context or error responses, though these are partially mitigated by the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and well-structured: a single opening sentence stating purpose followed by a bulleted list of the two actions. Every sentence contributes value and there is no redundant wording.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has an output schema and simple semantics, so return values are covered elsewhere. Yet with 0% schema coverage, the description should explain all parameters. It adequately covers action and version_number but leaves user_google_email and script_id under-specified, creating some ambiguity for an unfamiliar agent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It clarifies the two modes of the action parameter and the necessity of version_number for 'get'. It does not explain the role of user_google_email or script_id beyond the phrase 'script project', leaving two of four parameters with vague semantics.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('List or retrieve') and resource ('immutable version snapshots of a script project'), clearly distinguishing it from sibling tools like manage_script_version and list_script_deployments. The action parameter variants make the purpose concrete and unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It provides internal usage guidance for the two action modes ('list' and 'get', the latter requiring version_number), but it does not explicitly state when to prefer this tool over alternatives such as manage_script_version. The differentiation from siblings is implied by the noun 'version' rather than explicitly spelled out.
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 InfoBRead-onlyIdempotent
Retrieves metadata about a Programmable Search Engine.
| Name | Required | Description | Default |
|---|---|---|---|
| user_google_email | Yes | The user's Google email address. Required. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, so the safety profile is covered. The description adds that the tool returns metadata rather than content, which is mildly informative, but it does not discuss auth needs, rate limits, or which specific search engine is being referenced.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single concise sentence with no redundant wording, filler, or repeated annotation content. It is front-loaded with the action verb and direct object.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
This is a simple one-parameter read-only tool with an output schema and strong annotations, so the description only needs to be minimally complete. However, it leaves ambiguity about how the email parameter identifies the search engine and does not mention auth context, which slightly weakens completeness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema fully describes user_google_email as the user's Google email address and marks it required, so schema coverage is 100%. The description adds no additional meaning about how this email maps to a specific Programmable Search Engine, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a clear action ('Retrieves metadata') on a specific resource ('a Programmable Search Engine'), making the tool's basic function obvious. It is not a tautology and does not appear to overlap with content-returning siblings, but it does not explicitly differentiate itself from related tools like search_custom.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives no guidance on when to use this tool versus alternatives, and it does not mention prerequisites such as completing Google authentication or whether this should be called before search_custom. Usage context is left entirely to the agent's inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_spreadsheet_infoGet Spreadsheet InfoARead-onlyIdempotent
Gets information about a specific spreadsheet including its sheets.
| Name | Required | Description | Default |
|---|---|---|---|
| spreadsheet_id | Yes | The ID of the spreadsheet to get info for. Required. | |
| user_google_email | Yes | The user's Google email address. Required. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, covering the operation's safety profile. The description adds minimal contextual value beyond 'including its sheets'; it does not disclose auth requirements, error conditions, or other behavioral traits, though none are strongly needed given the simple read-only nature.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single direct sentence contains all essential information with no filler. The key scoping detail ('specific spreadsheet') is front-loaded, and the additional 'including its sheets' detail is valuable without adding clutter.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only metadata lookup, the description combined with complete parameter schemas, strong annotations, and an output schema provides enough context for an agent to select and invoke the tool correctly. No critical missing information is apparent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so both parameters are already self-documented. The description provides no additional semantic detail about parameters, which is acceptable because the schema fully carries the load.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states a specific verb ('Gets information') and a specific resource ('a specific spreadsheet'), and notes the included 'sheets' detail. This distinguishes it from sibling tools like list_spreadsheets, which would return a collection rather than a single spreadsheet's metadata.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use the tool: when you need information about one identified spreadsheet. However, it does not explicitly state when not to use it or mention alternatives such as list_spreadsheets or read_sheet_values, so the usage guidance is only implicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_taskGet TaskBRead-onlyIdempotent
Get details of a specific task.
| Name | Required | Description | Default |
|---|---|---|---|
| task_id | Yes | The ID of the task to retrieve. | |
| task_list_id | Yes | The ID of the task list containing the task. | |
| user_google_email | Yes | The user's Google email address. Required. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide readOnlyHint, openWorldHint, idempotentHint, and destructiveHint=false. The description is consistent with these and adds no additional behavioral context beyond what annotations convey.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence with no filler or redundancy. It is appropriately sized for a simple read-by-ID tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is a simple single-resource read operation, and the output schema plus annotations cover most operational concerns. However, it does not mention how task_id is obtained or note any auth dependency, so completeness is strong but not maximal.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all three parameters are already documented in the schema. The description adds no parameter-level meaning or context.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a clear verb and resource: 'Get details of a specific task.' The word 'specific' implies retrieval of a single task, distinguishing it from list_tasks, though it does not explicitly name sibling alternatives.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is given about when to use this tool versus list_tasks, manage_task, or get_task_list. There are no prerequisites, exclusions, or explicit routing to alternatives.
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 ListBRead-onlyIdempotent
Get details of a specific task list.
| Name | Required | Description | Default |
|---|---|---|---|
| task_list_id | Yes | The ID of the task list to retrieve. | |
| user_google_email | Yes | The user's Google email address. Required. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare this as read-only, idempotent, non-destructive, and open-world, so the safety profile is covered. However, the description itself adds no behavioral context beyond 'get details,' such as scope limitations, authentication requirements, or response characteristics. It neither contradicts the annotations nor contributes meaningful behavioral disclosure beyond them.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence that immediately states the action and object. There is no filler, repetition, or unnecessary elaboration.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read operation with two fully documented required parameters, an output schema, and strong annotations, the description is largely complete. It lacks a brief pointer to list_task_lists for ID discovery, but the core invocation needs are satisfied by the schema and annotations.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with both parameters clearly documented in the input schema. The description does not add further semantic detail about the parameters, but the schema already carries the burden, so the baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb and resource: 'Get details of a specific task list.' It clearly identifies the operation as retrieving one list by ID, and the required task_list_id parameter reinforces this. It does not explicitly contrast with sibling tools like list_task_lists or get_task, but the resource and scope are unambiguous enough.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No when-to-use guidance is provided. The description does not mention that list_task_lists should be used first to discover task_list_id, nor does it explain when get_task_list is preferred over list_task_lists or how it differs from get_task. The agent must infer usage from the name and parameters.
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. Binary sources may be passed directly as base64_content. On a local server a file on disk can also be passed by path (preferred for batch operations, so callers do not need to load full file contents into their context).
| Name | Required | Description | Default |
|---|---|---|---|
| content | No | Text content for text-based formats. Use only for short snippets or content already in memory. | |
| file_url | No | Remote URL to fetch the file from (http/https). | |
| file_name | Yes | The name for the new Google Doc (extension will be ignored). | |
| file_path | No | Local file path or file:// URL for any supported format (MD, TXT, HTML, DOCX, ODT, RTF). Appropriate for larger files than content, but file_path may still load the file into memory or perform non-streaming reads. Avoid very large files that could exceed memory or time limits; use streaming/chunked uploads or an alternative API for huge files. | |
| folder_id | No | The ID of the parent folder. Defaults to 'root'. | root |
| base64_sha256 | No | Expected SHA-256 of decoded base64_content. Recommended for binary payload integrity checks. | |
| source_format | No | Source format hint ('md', 'markdown', 'docx', 'txt', 'html', 'rtf', 'odt'). Auto-detected from file_name extension if not provided. | |
| base64_content | No | Standard base64-encoded bytes for a binary source such as DOCX or ODT. | |
| user_google_email | Yes | The user's Google email address. Required. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With minimal annotation coverage (readOnlyHint false, destructiveHint false, idempotentHint false), the description carries the burden of explaining behavior. It discloses that Google Drive automatically converts the source to native Docs format and preserves formatting, and it clarifies how binary sources can be passed. No contradiction exists with annotations; it adds useful behavioral detail beyond them.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured: the core purpose is front-loaded in the first sentence, followed by concise details about conversion behavior and input-method trade-offs. No filler or redundant phrasing, though the second paragraph could be slightly tighter.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the output schema exists, return values do not need to be described. The tool has nine parameters and multiple input modes; the description covers the key decision points (format conversion, base64 vs path, batch preference) sufficiently. It does not mention potential side effects like Drive folder placement, but the schema already provides folder_id and file_name details.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all nine parameters in detail. The description adds a little context about base64_content for binary sources and file_path being preferred for batch operations, but it does not significantly compensate beyond what the schema already states. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific action ('Imports a file') with an explicit target ('into Google Docs format'), lists the supported source formats, and clearly distinguishes it from sibling import tools like import_to_google_slides and import_to_google_sheets. The purpose is immediately comprehensible and differentiated.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description offers meaningful usage context for input methods, such as preferring file_path for batch operations and using base64_content for binary sources. However, it does not explicitly state when to choose this tool over alternatives like create_doc or create_drive_file, nor does it provide exclusion criteria. Usage guidance is implied rather than explicit.
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. Binary sources may be passed directly as base64_content. On a local server a file on disk can also be passed by path (preferred for batch operations, so callers do not need to load full file contents into their context).
| Name | Required | Description | Default |
|---|---|---|---|
| content | No | Text content for text-based formats (CSV, TSV). Use only for short snippets or content already in memory. | |
| file_url | No | Remote URL to fetch the spreadsheet from (http/https). | |
| file_name | Yes | The name for the new Google Sheets spreadsheet (extension will be ignored). | |
| file_path | No | Local file path or file:// URL for any supported format (XLSX, XLS, ODS, CSV, TSV). Appropriate for larger files than content, but file_path may still load the file into memory or perform non-streaming reads. Avoid very large files that could exceed memory or time limits; use streaming/chunked uploads or an alternative API for huge files. | |
| folder_id | No | The ID of the parent folder. Defaults to 'root'. | root |
| base64_sha256 | No | Expected SHA-256 of decoded base64_content. Recommended for binary payload integrity checks. | |
| source_format | No | Source format hint ('xlsx', 'xls', 'ods', 'csv', 'tsv'). Auto-detected from file_name extension if not provided. | |
| base64_content | No | Standard base64-encoded bytes for an XLSX, XLS, or ODS source. | |
| user_google_email | Yes | The user's Google email address. Required. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses meaningful behavioral detail beyond annotations: Google Drive automatically converts the source, preserving rows, columns, sheets, and values. Annotations already signal that this is a non-read-only, non-idempotent operation, and the description adds context about the conversion behavior without contradicting them.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded: the first sentence states the core purpose, and the second paragraph adds only behavioral and usage context that the schema does not fully carry. Every sentence earns its place with no redundant filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's 9 parameters and multiple input pathways, the description covers the essential behavior, source-format options, and batch-operation guidance. It could more explicitly state that exactly one input source (content, file_url, file_path, or base64_content) should be provided, but the schema already documents each option and the output schema covers return expectations.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description adds extra selection guidance beyond the schema by explaining that binary sources may be passed directly as base64_content and that file_path is preferred for batch operations to save caller context. This helps the agent choose between the multiple mutually-exclusive input methods.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Imports') and resource ('a spreadsheet... into Google Sheets format'), and enumerates the supported source formats (XLSX, XLS, ODS, CSV, TSV). This clearly distinguishes it from sibling import tools like import_to_google_doc and import_to_google_slides by naming the target format.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives actionable guidance on how to supply content: base64_content for binary sources, file path preferred for batch operations to avoid loading full file contents. It does not explicitly say when to choose this tool over sibling import tools, but the target format is self-evident and the tool name makes the use case clear.
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. Binary sources may be passed directly as base64_content. On a local server a file on disk can also be passed by path (preferred for batch operations, so callers do not need to load full file contents into their context).
| Name | Required | Description | Default |
|---|---|---|---|
| file_url | No | Remote URL to fetch the presentation from (http/https). | |
| file_name | Yes | The name for the new Google Slides presentation (extension will be ignored). | |
| file_path | No | Local file path or file:// URL for any supported format (PPTX, PPT, ODP). Appropriate for larger files than content, but file_path may still load the file into memory or perform non-streaming reads. Avoid very large files that could exceed memory or time limits; use streaming/chunked uploads or an alternative API for huge files. | |
| folder_id | No | The ID of the parent folder. Defaults to 'root'. | root |
| base64_sha256 | No | Expected SHA-256 of decoded base64_content. Recommended for binary payload integrity checks. | |
| source_format | No | Source format hint ('pptx', 'ppt', 'odp'). Auto-detected from file_name extension if not provided. | |
| base64_content | No | Standard base64-encoded bytes for a PPTX or ODP source. | |
| user_google_email | Yes | The user's Google email address. Required. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses that Google Drive automatically converts and preserves slides, layouts, text, and images, adding behavioral context beyond the annotations. The practical note about batch operations and avoiding full-content loads also helps set expectations. No contradiction with the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded with the core purpose, followed by one practical paragraph on input modes. Every sentence earns its place, and the length is appropriate for a tool with 8 parameters.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the output schema and full schema coverage, the description appropriately focuses on conversion behavior and input routing. It does not explain every parameter, but it contextualizes the most ambiguous optional inputs and leaves routine details to the schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description adds value beyond the schema by explaining the tradeoff between base64_content and file_path and why file_path is preferred for batch operations, which helps select among the optional input parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The opening sentence names the concrete action (imports), the resource type (presentation), the supported source formats (PPTX, PPT, ODP), and the destination format (Google Slides). This clearly distinguishes it from sibling import tools like import_to_google_doc and import_to_google_sheets.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives concrete input-mode guidance by recommending file_path for batch operations and contrasting it with base64_content, so callers can choose the right parameter. It does not explicitly name sibling tools or exclusions, but the target format makes the use case clear.
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 ElementsC
Inserts structural elements like tables, lists, or page breaks into a Google Doc.
| Name | Required | Description | Default |
|---|---|---|---|
| rows | No | Number of rows for table (required for table) | |
| text | No | Initial text content for list items | |
| index | Yes | Position to insert element (0-based) | |
| columns | No | Number of columns for table (required for table) | |
| list_type | No | Type of list ("UNORDERED", "ORDERED") (required for list) | |
| document_id | Yes | ID of the document to update | |
| element_type | Yes | Type of element to insert ("table", "list", "page_break") | |
| user_google_email | Yes | User's Google email address |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, destructiveHint=false, idempotentHint=false, and openWorldHint=true, so the description's 'inserts' adds little beyond confirming a write operation. It does not disclose behaviors like index validity constraints, whether insertion shifts existing content, or side effects of repeated calls at the same index — meaningful gaps for a mutation tool flagged openWorldHint=true.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One front-loaded sentence with no filler; every word earns its place. It is slightly under-structured in that a brief clause pointing to an alternative sibling would have made it near-optimal, but as written it is efficient and scannable.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The schema (100% coverage) and output schema carry parameter and return semantics, and annotations carry the safety profile, so the description is not obliged to repeat those. However, for an 8-parameter mutation tool with openWorldHint=true, the missing usage differentiation and insertion-behavior context leave noticeable gaps in what an agent needs to invoke it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so every parameter (element_type, index, rows, columns, list_type, text, etc.) is already documented in the schema. The description's mention of tables/lists/page breaks mirrors the element_type enum values and adds no new semantic meaning, warranting the baseline 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Inserts') and names the resource (Google Doc) plus concrete element types (tables, lists, page breaks), which distinguishes it from obvious text/image siblings like modify_doc_text and insert_doc_image. It does not, however, differentiate from overlapping doc siblings such as create_table_with_data and batch_update_doc, so it stops short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit when-to-use/when-not-to-use guidance or alternatives are given. Given the dense sibling list with overlapping capabilities (create_table_with_data for tables, batch_update_doc for arbitrary doc updates), an agent gets no criteria for choosing this tool over those. Usage is only weakly implied by the description's purpose statement.
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 ImageA
Inserts an image into a Google Doc from Drive or a URL.
| Name | Required | Description | Default |
|---|---|---|---|
| index | Yes | Position to insert image (0-based) | |
| width | No | Image width in points (optional) | |
| height | No | Image height in points (optional) | |
| document_id | Yes | ID of the document to update | |
| image_source | Yes | Drive file ID or public image URL | |
| user_google_email | Yes | User's Google email address |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already signal a mutating operation (readOnlyHint=false), and the description clarifies insertion of an image from Drive/URL without contradicting the annotations. It does not add deeper behavioral context such as content shifting at the insertion index or authentication dependences on user_google_email.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single front-loaded sentence with no filler, and it conveys the essential purpose and accepted source types efficiently.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple insertion tool this is close to adequate: schema covers parameters and an output schema is present. However, it omits guidance on choosing this over insert_doc_elements and any preconditions around Drive/URL access, so an agent relying solely on the description could still choose or invoke it incorrectly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already explains all six parameters. The description adds no parameter-level meaning beyond restating the image source types already covered by image_source.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description names a specific action, object, destination, and source: 'Inserts an image into a Google Doc from Drive or a URL.' This clearly distinguishes it from text-modification tools like modify_doc_text and broader element tools like insert_doc_elements.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The use case is implied by the verb ('inserts an image') and the schema's document/image parameters, but the description gives no explicit when-to-use or when-not-to-use guidance. It does not compare against insert_doc_elements or state prerequisites like Drive sharing permissions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
insert_smart_chipsInsert Smart ChipsBDestructiveIdempotent
Inserts Google Workspace Smart Chips (Drive files/folders or People) into a Google Sheet cell or range.
| Name | Required | Description | Default |
|---|---|---|---|
| chips | Yes | Smart chip(s) to insert: - A single URL or email string for a single cell (e.g., "https://drive.google.com/drive/folders/123", "user@example.com"). - A list of URLs or emails for a single cell (multiple chips) or across cells (e.g., ["https://...", "https://..."]). - A 2D list of URLs/emails matching a grid range. For a single-row or single-column range, each inner list is instead the chips for one cell (e.g., [["a@x.com", "b@x.com"]] puts both chips in the first cell of "A1:C1"). - A dict or list of dicts with explicit properties (e.g., {"type": "drive", "uri": "..."}, {"type": "person", "email": "..."}). - A JSON-encoded string representing any of the above formats. | |
| chip_type | No | Explicit chip type if passing raw strings: "drive" (default for URLs/IDs) or "person" (default for emails). | |
| range_name | Yes | Target cell or range (e.g., "Sheet1!F3", "Sheet1!F3:F23", "F3"). Required. | |
| spreadsheet_id | Yes | The ID of the spreadsheet. Required. | |
| user_google_email | Yes | The user's Google email address. Required. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and readOnlyHint=false, so the agent knows this is a mutating operation. However, the description adds no context about side effects (e.g., whether inserting chips overwrites existing cell content, or whether it appends to the existing value). With a destructive mutation, the description should at least hint at overwrite behavior; it does not.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence with no filler. It states the action, the resource, and the target in a compact way that an agent can parse quickly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the rich input schema (100% coverage) and the presence of an output schema, the description is sufficient for an agent to understand the tool's core purpose. It lacks usage guidance and behavioral nuance, but those are captured in other dimensions; overall, it is complete enough for a tool of this complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema covers all 5 parameters with detailed descriptions, including the flexible 'chips' format and the 'chip_type' default. The tool description itself adds no extra meaning beyond the schema. Since schema coverage is 100%, a baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Inserts'), a distinct resource ('Google Workspace Smart Chips (Drive files/folders or People)'), and the target ('Google Sheet cell or range'). This clearly distinguishes it from sibling tools like modify_sheet_values or format_sheet_range, which operate on plain values or formatting.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives (e.g., modify_sheet_values for plain values, or read_sheet_values for reading). The description does not mention any exclusions, prerequisites, or conditions that would steer an agent toward or away from this tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
inspect_doc_structureInspect Doc StructureARead-onlyIdempotent
Essential tool for finding safe insertion points and understanding document structure.
USE THIS FOR:
Finding the correct index for table insertion
Understanding document layout before making changes
Locating existing tables and their positions
Getting document statistics and complexity info
Inspecting structure of specific tabs
CRITICAL FOR TABLE OPERATIONS: ALWAYS call this BEFORE creating tables to get a safe insertion index.
WHAT THE OUTPUT SHOWS:
total_elements: Number of document elements
total_length: Maximum safe index for insertion
tables: Number of existing tables
table_details: Position and dimensions of each table
headers / footers: Real segment IDs and previews for header/footer editing
tabs: List of available tabs in the document (if no tab_id specified)
empty_paragraphs: newline-only count, excluding existing/suggested object anchors
empty_paragraph_ranges: start/end extents, capped at 100
empty_paragraph_ranges_truncated: whether ranges were omitted
last_paragraph: is_list_item and is_empty, or null if no body paragraphs
Paragraph statistics cover top-level body paragraphs and appear at the top level in basic mode or under "statistics" in detailed mode. Ranges can include required empty paragraphs. Before cleanup, use detailed=true to check adjacent elements, formatting, and object anchors. Preserve the final newline and newlines before tables, tables of contents, or section breaks. The final range has end == total_length and may be omitted by truncation.
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.
SUB-PARAGRAPH FORMATTING: text_preview is truncated to 100 characters by default. To compute the index of a token inside a longer paragraph, pass preview_chars=0 or None for untruncated text, then add the token's UTF-16 offset within that text to the paragraph's start_index (non-BMP characters such as emoji occupy two UTF-16 units).
| Name | Required | Description | Default |
|---|---|---|---|
| tab_id | No | Optional ID of the tab to inspect. If not provided, inspects main document. | |
| detailed | No | Whether to return detailed structure information | |
| document_id | Yes | ID of the document to inspect | |
| preview_chars | No | Maximum characters of paragraph, header and footer text preview. Pass 0 or None for the full text, needed to locate a token inside a paragraph longer than the default 100 characters. | |
| user_google_email | Yes | User's Google email address |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, so safety is covered. The description goes much further, disclosing output truncation behavior (empty_paragraph_ranges capped at 100, preview_chars truncation to 100), detailed vs basic mode differences, the meaning of total_length as the maximum safe index, and even UTF-16 offset handling for non-BMP characters. This is rich behavioral context that cannot be inferred from schema or annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is long but tightly organized with labeled sections and bold headers. It is front-loaded with the core purpose and 'USE THIS FOR' list, then provides step-by-step workflows for table insertion, formatting, and header/footer editing. Each paragraph earns its place by addressing a distinct operational scenario, and the structure allows an agent to quickly locate relevant guidance.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with 5 parameters, an output schema, and multiple integration workflows (table insertion, batch formatting, header/footer editing), the description is exceptionally complete. It explains not just what the tool returns but how to use those returns in subsequent operations (using indices in format_text, using real segment_ids, preserving newlines). The output schema covers return structure, so the description's additional workflow context makes this fully self-sufficient.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so each parameter already has a baseline definition. The description adds meaningful depth beyond this: it explains that preview_chars=0 or None returns untruncated text needed for token offset calculations, that detailed=true changes where statistics appear (top level vs under 'statistics'), and that tab_id omission inspects the main document. These operational details help agents set parameters correctly.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific purpose: 'finding safe insertion points and understanding document structure.' It names the resource (document structure) and the main verbs (inspect, find, understand), and clearly differentiates itself from content-reading siblings like get_doc_content or get_doc_as_markdown by focusing on structural elements such as tables, headers, tabs, and empty paragraphs.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit 'USE THIS FOR' bullets and workflow sections. It states 'ALWAYS call this BEFORE creating tables to get a safe insertion index,' directly guiding use before create_table_with_data. It also gives clear exclusion guidance: 'For ordinary header/footer text, use update_doc_headers_footers. If you need low-level segment editing, call this tool first.' This leaves no ambiguity about 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.
list_calendarsList CalendarsARead-onlyIdempotent
Retrieves a list of calendars accessible to the authenticated user.
| Name | Required | Description | Default |
|---|---|---|---|
| page_token | No | Token for the next page, taken from a previous response. | |
| max_results | No | Maximum calendars to return in one page. Omit to use the API default. | |
| user_google_email | Yes | The user's Google email address. Required. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare read-only, idempotent, and non-destructive behavior, and the description confirms this with 'Retrieves'. It adds the useful scoping detail that results are limited to calendars accessible to the authenticated user, but it does not provide richer behavioral context such as pagination behavior or response limitations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence that front-loads the verb and object with no filler or redundant restatement of the title. Every word carries meaningful information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only list tool with full schema coverage, strong annotations, and an output schema, the description covers everything needed for correct invocation. It does not need to explain return values or parameter details because those are supplied by structured context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and the schema adequately documents user_google_email, page_token, and max_results. The description adds no additional parameter-level meaning, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a concrete verb-resource pair, 'Retrieves a list of calendars', and scopes the result to the authenticated user, which makes it distinct from calendar mutation tools like create_calendar. It does not explicitly name or differentiate a sibling, so it falls slightly short of the top rating.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The intended use is implied: call this when a list of calendars a user can access is needed, rather than when creating or managing calendar data. There is no explicit statement about when to prefer it over siblings such as get_events or create_calendar, so the agent must infer the selection context.
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 GroupsBRead-onlyIdempotent
List contact groups (labels) for the user.
| Name | Required | Description | Default |
|---|---|---|---|
| page_size | No | Maximum number of groups to return (default: 100, max: 1000). | |
| page_token | No | Token for pagination. | |
| user_google_email | Yes | The user's Google email address. Required. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations (readOnlyHint=true, idempotentHint=true, openWorldHint=true, destructiveHint=false) fully carry the safety and behavioral profile, and the description does not contradict them. The description adds no behavioral context of its own — no pagination consequences, rate limits, or auth requirements — but for a simple read-only list operation, the annotations lower the bar and adequately cover what matters.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One sentence, seven words, with zero filler. The useful '(labels)' clarification is included without bloat. The description is appropriately minimal for a simple list operation and every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple, read-only, idempotent list tool with a comprehensive output schema, 100% parameter coverage, and full safety annotations, the minimal description is largely sufficient for an agent to invoke it correctly. The only notable gap is the absence of sibling differentiation, which an agent must infer from the tool name.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all three parameters (page_size, page_token, user_google_email) already have descriptions, including default and max values for page_size. The description adds only 'for the user,' which loosely maps to user_google_email but provides no new meaning. Baseline 3 applies given high schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('List') and resource ('contact groups'), with the parenthetical '(labels)' clarifying Google Contacts terminology — a genuinely useful disambiguation. It is clearly distinct from siblings like list_contacts by resource type, but it does not explicitly name or differentiate any sibling, so it falls just short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives. With closely related siblings such as list_contacts, get_contact_group, and search_contacts, an agent gets no basis for choosing among them. Usage is only implied by the tool's name and the minimal 'for the user' scope.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_contactsList ContactsBRead-onlyIdempotent
List contacts for the authenticated user.
| Name | Required | Description | Default |
|---|---|---|---|
| page_size | No | Maximum number of contacts to return (default: 100, max: 1000). | |
| page_token | No | Token for pagination. | |
| sort_order | No | Sort order: "LAST_MODIFIED_ASCENDING", "LAST_MODIFIED_DESCENDING", "FIRST_NAME_ASCENDING", or "LAST_NAME_ASCENDING". | |
| user_google_email | Yes | The user's Google email address. Required. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, covering the safety profile. The description adds the scoping detail 'for the authenticated user,' which is useful context about who the contacts belong to. However, it does not disclose pagination behavior or what happens when no contacts exist, relying on the schema for parameter details.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single six-word sentence that is front-loaded and contains no filler. Every word contributes meaning, and it avoids unnecessary detail.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple list tool with full schema coverage and an output schema, the description is sufficient to convey the core operation. The only minor gap is that 'authenticated user' is not explicitly linked to the required user_google_email parameter, but this is clarified by the schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with each parameter (page_size, page_token, sort_order, user_google_email) having its own schema description. The tool description adds no additional parameter semantics, so it earns the baseline 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('List'), resource ('contacts'), and scope ('for the authenticated user'). It distinguishes from obvious siblings like get_contact (single contact) or manage_contact (mutating), though it does not explicitly name alternatives.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is given about when to use this tool instead of related siblings such as search_contacts, get_contact, or list_contact_groups. The description implies a listing use case but offers no exclusions or conditions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_docs_in_folderList Docs in FolderBRead-onlyIdempotent
Lists Google Docs within a specific Drive folder.
Returns: str: A formatted list of Google Docs in the specified folder.
| Name | Required | Description | Default |
|---|---|---|---|
| folder_id | No | root | |
| page_size | No | ||
| user_google_email | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already cover the safety profile (readOnlyHint, idempotentHint, non-destructive). The description adds minimal behavioral context by stating it returns a formatted list, but it does not disclose recursion behavior, auth requirements, or pagination effects.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is brief and front-loaded with the core purpose. The Returns line is a slight redundancy given an output schema exists, but overall the description is appropriately sized and easy to scan.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
This is a low-complexity read-only tool with rich annotations and an output schema, so the missing return details are not critical. However, the complete absence of parameter explanation and any usage routing leaves the definition only minimally viable.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate for parameter meaning. It does not explain user_google_email, folder_id, or page_size. Even the folder concept is only implied by the tool name and one phrase, not by any parameter-level documentation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb and resource: 'Lists Google Docs within a specific Drive folder.' This clearly distinguishes it from sibling tools like list_drive_items (all items) and search_drive_files (search across Drive).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this tool versus alternatives such as list_drive_items or search_docs. The description states what it does but offers no context, prerequisites, or exclusions.
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 CommentsARead-onlyIdempotent
List all comments from a Google Document (optional max_comments to limit results).
| Name | Required | Description | Default |
|---|---|---|---|
| document_id | Yes | ||
| max_comments | No | ||
| user_google_email | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnly, idempotent, non-destructive), lowering the burden on the description. The description adds useful behavioral context that comments are listed in full by default and can be limited with max_comments, but it does not disclose ordering, pagination, or authorization requirements.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence with a useful parenthetical. There is no filler, repetition of schema fields, or unnecessary detail.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple listing tool with rich annotations and an output schema, the description is mostly adequate. However, with zero schema descriptions and a required user_google_email that is not mentioned at all, the description is not fully self-contained and relies on an inferred convention.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate for the schema's silence. It clarifies max_comments ('to limit results') and implicitly ties document_id to the Google Document, but it completely leaves the required user_google_email parameter unexplained. This is a significant gap for a required parameter.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a clear verb ('List') and resource ('all comments from a Google Document'), making the tool's purpose immediately obvious. It also distinguishes itself from the sibling 'manage_document_comment' and from comment-listing tools for other products.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description clearly conveys this is the tool for retrieving comments rather than creating or modifying them. It does not explicitly name alternatives or when-not-to-use scenarios, but the context is clear enough for an agent to select it for a read-only listing task.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_drive_itemsList Drive ItemsARead-onlyIdempotent
Lists files/folders or shared drive containers, supporting shared drives.
If drive_id is specified, lists items within that shared drive. folder_id is then relative to that drive (or use drive_id as folder_id for root).
If drive_id is not specified, lists items from user's "My Drive" and accessible shared drives (if include_items_from_all_drives is True).
Set resource_type to "shared_drives" to list shared drive containers instead of folder contents.
| Name | Required | Description | Default |
|---|---|---|---|
| query | No | Shared drive query used only when resource_type="shared_drives", e.g. "name contains 'Engineering'". | |
| corpora | No | Corpus to query ('user', 'drive', 'allDrives'). If `drive_id` is set and `corpora` is None, 'drive' is used. If None and no `drive_id`, API defaults apply. | |
| detailed | No | Whether to include size, modified time, and link in results. Defaults to True. | |
| drive_id | No | ID of the shared drive. If provided, the listing is scoped to this drive. | |
| order_by | No | Sort order. Comma-separated list of sort keys with optional 'desc' modifier. Valid keys: 'createdTime', 'folder', 'modifiedByMeTime', 'modifiedTime', 'name', 'name_natural', 'quotaBytesUsed', 'recency', 'sharedWithMeTime', 'starred', 'viewedByMeTime'. Example: 'modifiedTime desc' or 'folder,modifiedTime desc,name'. Defaults to None (Drive API default ordering). | |
| file_type | No | Restrict results to a specific file type. Accepts a friendly name ('folder', 'document'/'doc', 'spreadsheet'/'sheet', 'presentation'/'slides', 'form', 'drawing', 'pdf', 'shortcut', 'script', 'site', 'jam'/'jamboard') or any raw MIME type string (e.g. 'application/pdf'). Defaults to None (all types). | |
| folder_id | No | The ID of the Google Drive folder. Defaults to 'root'. For a shared drive, this can be the shared drive's ID to list its root, or a folder ID within that shared drive. | root |
| page_size | No | The maximum number of items to return. Defaults to 100. | |
| page_token | No | Page token from a previous response's nextPageToken to retrieve the next page of results. | |
| resource_type | No | What to list. Use "items" for folder contents or "shared_drives" for shared drive containers. Defaults to "items". | items |
| user_google_email | Yes | The user's Google email address. Required. | |
| include_organizers | No | When resource_type="shared_drives", include principals with the organizer role. This costs one extra permissions.list API call per shared drive returned. Defaults to False. | |
| include_items_from_all_drives | No | Whether items from all accessible shared drives should be included if `drive_id` is not set. Defaults to True. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, non-destructive. The description adds behavior like folder_id being relative to drive, and the effect of include_items_from_all_drives. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Multi-sentence but each sentence earns its place, explaining key behaviors and conditions. The main purpose is front-loaded, and the content is structured logically.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Has an output schema, so return format is covered. The description covers all major scenarios: with/without drive_id, resource_type modes, and the role of each parameter. Nothing an agent needs to call it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema covers 100% of parameters with descriptions, but the tool description clarifies relationships (e.g., folder_id relative to drive_id) and the dual purpose of resource_type, adding value beyond individual parameter docs.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool lists files/folders or shared drive containers, with explicit conditions for shared drives. It distinguishes itself from search_drive_files and other drive tools by focusing on listing vs. searching or retrieving content.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explains when to use drive_id vs not, and when to set resource_type to 'shared_drives'. While it doesn't name specific alternative tools, the conditions for usage are explicit and unambiguous.
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 ResponsesARead-onlyIdempotent
List a form's responses.
| Name | Required | Description | Default |
|---|---|---|---|
| form_id | Yes | The ID of the form. | |
| page_size | No | Maximum number of responses to return. Defaults to 10. | |
| page_token | No | Token for retrieving next page of results. | |
| user_google_email | Yes | The user's Google email address. Required. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds no behavioral context beyond what the annotations provide, such as pagination behavior or output characteristics, but it does not contradict the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, short sentence that is easy to parse and front-loads the core purpose. It is appropriately concise, though it largely restates the title and could have used the spare space to add usage or behavioral guidance.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The input schema documents all required and optional parameters clearly, the output schema exists, and annotations cover the read-only, idempotent, non-destructive nature of the tool. The description is minimal but sufficient for an agent to select and invoke this tool correctly, though slightly more context about pagination or response shape would improve it.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and each parameter has a meaningful description. The tool description itself adds no extra parameter semantics, but with full schema coverage the baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a clear verb and resource: "List a form's responses." It is unambiguous about what operation is performed, though it does not explicitly differentiate itself from the sibling get_form_response beyond the plural 'responses'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage: call this when you want the responses submitted to a Google Form. It provides no explicit when-not-to-use guidance or alternatives, such as pointing to get_form_response for a single response, so the guidance is functional but minimal.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_gmail_filtersList Gmail FiltersARead-onlyIdempotent
Lists all Gmail filters configured in the user's mailbox.
| Name | Required | Description | Default |
|---|---|---|---|
| user_google_email | Yes | The user's Google email address. Required. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint, so the safety profile is covered. The description adds the scope 'all filters in the user's mailbox' but does not provide extra behavioral context such as pagination, ordering, or auth prerequisites.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, focused sentence with no filler. It is front-loaded with the verb and resource and does not waste tokens.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the simple one-parameter schema, the presence of an output schema, and rich annotations, the description is largely complete for correct invocation. It could be more complete by noting any required auth prerequisite, but this is a minor gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so user_google_email is already well documented in the schema. The tool description adds no additional parameter meaning, which is acceptable per baseline but not enhancing.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Lists') and a clear resource ('all Gmail filters configured in the user's mailbox'). It cleanly distinguishes this from sibling tools like list_gmail_labels and manage_gmail_filter.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The intended use is implied: call this tool when you need to see the Gmail filters for a user. However, it does not explicitly state when to avoid it or mention any alternative, such as using manage_gmail_filter to create/update filters.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_gmail_labelsList Gmail LabelsBRead-onlyIdempotent
Lists labels in the user's Gmail account.
| Name | Required | Description | Default |
|---|---|---|---|
| prefix | No | Return only labels whose name starts with this exact (case-sensitive) string. users.labels.list accepts no filter, so the full list is fetched and narrowed here: this shrinks what the caller receives, not the API call. | |
| compact | No | Return minimal JSON {"count", "labels": [{"id", "name"}]} sorted by name, instead of the formatted text list. For callers that parse the result, e.g. a label cache refresh. | |
| include_system | No | Include Gmail system labels (INBOX, SENT, ...). Set False to return user labels only. | |
| user_google_email | Yes | The user's Google email address. Required. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds no behavioral traits beyond what annotations already provide. It does not mention auth requirements, rate limits, or that the operation is non-destructive (though annotations already cover safety). The description is effectively a tautology of the tool name, adding no new behavioral insight.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single short sentence with no wasted words. It is appropriately sized for the simple read-only operation, and the essential information is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simple read-only nature, the rich parameter descriptions, the existing output schema, and the safety annotations, the description is adequate for an agent to invoke it correctly. An output schema exists, so the description does not need to explain return values. It lacks nothing critical for a basic list operation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The tool description itself contains no parameter information, but the schema provides thorough explanations for all four parameters, including the 'prefix' behavior of narrowing client-side rather than server-side. The description adds no extra parameter meaning.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states a specific verb ('Lists') and resource ('labels in the user's Gmail account'). It clearly distinguishes from siblings such as manage_gmail_label (create/update/delete) and list_gmail_filters (filters, not labels). An agent can immediately understand what the tool does and which sibling it is not.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives no guidance on when to use this tool versus alternatives. It does not mention that manage_gmail_label should be used for label creation/modification, nor does it note any preconditions or exclusions. There is no explicit or implicit usage context beyond the bare action.
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 CommentsARead-onlyIdempotent
List all comments from a Google Presentation (optional max_comments to limit results).
| Name | Required | Description | Default |
|---|---|---|---|
| max_comments | No | ||
| presentation_id | Yes | ||
| user_google_email | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and non-destructive behavior, so the description does not need to restate safety. It adds the useful fact that all comments are returned unless max_comments is provided, but it does not disclose ordering, pagination, or any other behavioral nuance.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence with no filler. Every phrase adds information: the action, resource, scope, and optional limiting parameter.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only list operation, the description plus rich annotations and an output schema cover most invocation needs. Still, the complete absence of parameter documentation in a 0%-coverage schema leaves an important gap for an agent trying to construct a valid call.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate by documenting parameters. It only explains max_comments; user_google_email and presentation_id are left entirely to inference, with no guidance on expected format (e.g., full URL vs. file ID).
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('List') and resource ('all comments from a Google Presentation'), making the operation unmistakable. It also distinguishes itself from sibling tools like list_document_comments and list_spreadsheet_comments by naming the Google Presentation resource explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The intended use is clearly implied: retrieve comments for a presentation, with an optional limit. However, there is no explicit guidance on when not to use this tool or when to prefer related tools such as manage_presentation_comment for mutation workflows.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_script_deploymentsList Script DeploymentsCRead-onlyIdempotent
List deployments for an Apps Script project.
| Name | Required | Description | Default |
|---|---|---|---|
| script_id | Yes | ||
| user_google_email | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, idempotentHint, and destructiveHint=false, so the safety profile is covered. The description adds no additional behavioral context such as whether archived deployments are included, authentication requirements, or pagination.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single clear sentence with no filler and the action is front-loaded. It is concise, though slightly under-specified for a tool whose schema lacks parameter descriptions.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-parameter tool with 0% schema description coverage, the one-line description leaves too much unstated. The agent must infer what user_google_email means and when this tool is preferable to sibling deployment/script management tools, despite the rich annotations and output schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% and the description does not explain script_id or user_google_email. 'Apps Script project' weakly implies script_id's role, but the description does not compensate for the undocumented parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('List') and resource ('deployments for an Apps Script project'), making the operation clear. It doesn't explicitly distinguish itself from sibling 'manage_deployment', but the read/list framing is enough to separate them.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is given on when to use this tool versus alternatives such as manage_deployment, get_script_project, or get_script_version. The description only restates the action without providing context, prerequisites, or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_sheet_tablesList Sheet TablesARead-onlyIdempotent
Lists all structured tables in a spreadsheet with their IDs, names, ranges, and column details. Use this to find table IDs for append_table_rows.
| Name | Required | Description | Default |
|---|---|---|---|
| spreadsheet_id | Yes | The ID of the spreadsheet. Required. | |
| user_google_email | Yes | The user's Google email address. Required. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds useful scope information ('all structured tables') and return contents, but does not disclose potential pagination, rate limits, or authorization nuances. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences with zero waste. The primary behavior and return contents are front-loaded, followed immediately by the practical purpose. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the low complexity, two required parameters, full schema coverage, rich annotations, and an output schema, this description is complete. An agent can correctly invoke it and understand why the result matters for append_table_rows.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and both parameters are described clearly ('The ID of the spreadsheet', 'The user's Google email address'). The description adds no additional parameter-level meaning, which is acceptable since the schema already carries the full burden.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: 'Lists all structured tables in a spreadsheet' with the exact outputs (IDs, names, ranges, column details). This clearly distinguishes it from siblings like list_spreadsheets, read_sheet_values, and get_spreadsheet_info.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit context: 'Use this to find table IDs for append_table_rows.' This tells the agent when to call it. It does not explicitly mention when not to use it or name alternative tools for reading sheet values, so it stops short of full exclusionary guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_spacesList SpacesBRead-onlyIdempotent
Lists Google Chat spaces (rooms and direct messages) accessible to the user.
Returns: str: A formatted list of Google Chat spaces accessible to the user.
| Name | Required | Description | Default |
|---|---|---|---|
| page_size | No | ||
| space_type | No | all | |
| user_google_email | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and idempotentHint=true, so the safety profile is covered. The description adds that the result is a formatted string of spaces accessible to the user, but does not disclose pagination, ordering, or space-type filtering behavior beyond the schema's default. There is no contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is short and front-loaded with the action in the first sentence. The second 'Returns' line is somewhat redundant but concisely specifies the return format. No rambling or unnecessary detail.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple list tool with strong annotations, the description is still incomplete because it omits any explanation of required parameter semantics and does not offer usage context such as discovering spaces before sending messages. With 0% schema coverage and no output schema details visible beyond 'str', the agent lacks enough guidance to filter spaces or understand the required email. The annotations cover safety, but not invocation semantics.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description provides no information about the three parameters. With schema description coverage at 0%, it does not compensate by explaining why 'user_google_email' is required or what 'space_type' and 'page_size' mean. The agent must rely solely on parameter names, which is insufficient for correctly invoking the tool.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific action ('Lists Google Chat spaces') and clarifies scope ('rooms and direct messages') and access ('accessible to the user'). It is clearly distinct from sibling tools like get_messages or search_messages, which handle message content rather than spaces.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies use when needing to enumerate the user's spaces but gives no explicit when-to-use or alternative guidance. It does not mention that list_spaces is a prerequisite for messaging tools or contrast it with search_messages. Sibling differentiation is left mostly to the tool name.
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 CommentsARead-onlyIdempotent
List all comments from a Google Spreadsheet (optional max_comments to limit results).
| Name | Required | Description | Default |
|---|---|---|---|
| max_comments | No | ||
| spreadsheet_id | Yes | ||
| user_google_email | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and non-destructive behavior, so the safety profile is covered. The description adds the optional max_comments limit, but does not disclose ordering, pagination, or default behavior when the parameter is omitted.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single sentence that is front-loaded with the core action and then states the optional parameter. No wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema and strong annotations, the description covers the essential listing behavior, but it is incomplete for confident invocation because required parameter semantics are not explained and no usage guidance or edge-case behavior is provided.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, and the description only clarifies max_comments. It does not explain the meaning or format of user_google_email or spreadsheet_id, leaving two required parameters to be inferred from their names.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific action ('List all comments') and resource ('from a Google Spreadsheet'), plus an optional limiting parameter. This clearly differentiates it from siblings like list_document_comments and manage_spreadsheet_comment.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The resource mention implies this tool is for spreadsheet comments, but the description does not explicitly state when to choose it over alternatives such as list_document_comments or manage_spreadsheet_comment. Usage is inferred from the resource type rather than stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_spreadsheetsList SpreadsheetsBRead-onlyIdempotent
Lists spreadsheets from Google Drive that the user has access to.
| Name | Required | Description | Default |
|---|---|---|---|
| max_results | No | Maximum number of spreadsheets to return. Defaults to 25. | |
| user_google_email | Yes | The user's Google email address. Required. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, openWorldHint=true, and destructiveHint=false, so the safety profile is covered. The description adds the access-based scoping (spreadsheets the user can access, not merely owns), which is useful beyond the annotations. It does not mention pagination or ordering, but with annotation coverage the bar is met at a basic level.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single 12-word sentence that front-loads the verb and resource with zero filler. Every word earns its place and the core scope ('spreadsheets from Google Drive that the user has access to') is stated immediately.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need no description; annotations cover the safety profile; and both parameters are fully documented. The real gap is tool-selection context: nothing distinguishes this from search_drive_files or list_drive_items, which matters in a sibling set this large. For a simple list operation, the definition is otherwise adequately complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%: both user_google_email and max_results are already fully described in the input schema, including the default of 25. The description adds no parameter-specific meaning, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Lists') and a specific resource ('spreadsheets from Google Drive that the user has access to'), so an agent can tell this enumerates accessible spreadsheets. It implicitly distinguishes from siblings like list_drive_items (all files) and get_spreadsheet_info (single spreadsheet metadata), but it does not name any alternative sibling, so the differentiation is implicit rather than explicit.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use guidance, no exclusions, and no alternatives named. With roughly 90 siblings including search_drive_files, list_drive_items, and get_spreadsheet_info, the description gives the agent no textual basis for selecting this tool over those that could also surface spreadsheet data. The phrase 'that the user has access to' supplies minor scope context but no routing guidance.
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 ListsARead-onlyIdempotent
List all task lists for the user.
| Name | Required | Description | Default |
|---|---|---|---|
| page_token | No | Token for pagination. | |
| max_results | No | Maximum number of task lists to return (default: 1000, max: 1000). | |
| user_google_email | Yes | The user's Google email address. Required. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish that this is read-only, idempotent, and non-destructive. The description adds minor scope context ('all task lists for the user') but does not disclose pagination behavior, authentication requirements, or any other operational traits beyond the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence with no filler or redundant wording. It communicates the action and object efficiently while leaving operational details to the schema and annotations.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only list operation, the description is sufficient when combined with full schema parameter docs and supporting annotations. The output schema exists, so return values are not the description's responsibility, and no critical operational context is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with each parameter already documented inline. The description adds no additional meaning about page_token, max_results, or user_google_email, so a baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('List'), resource ('task lists'), and scope ('all' and 'for the user'). This clearly distinguishes it from siblings like list_tasks (which lists tasks inside lists) and get_task_list (which retrieves a single list), even without naming them.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this tool versus alternatives such as get_task_list, list_tasks, or manage_task_list. The agent must rely entirely on sibling names and context to decide, since no exclusions or conditions are provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_tasksList TasksARead-onlyIdempotent
List all tasks in a specific task list.
| Name | Required | Description | Default |
|---|---|---|---|
| due_max | No | Upper bound for due date (RFC 3339 timestamp). | |
| due_min | No | Lower bound for due date (RFC 3339 timestamp). | |
| page_token | No | Token for pagination. | |
| max_results | No | Maximum number of tasks to return. (default: 20, max: 10000). | |
| show_hidden | No | Whether to include hidden tasks (default: False). | |
| updated_min | No | Lower bound for last modification time (RFC 3339 timestamp). | |
| show_deleted | No | Whether to include deleted tasks (default: False). | |
| task_list_id | Yes | The ID of the task list to retrieve tasks from. | |
| completed_max | No | Upper bound for completion date (RFC 3339 timestamp). | |
| completed_min | No | Lower bound for completion date (RFC 3339 timestamp). | |
| show_assigned | No | Whether to include assigned tasks (default: False). | |
| show_completed | No | Whether to include completed tasks (default: True). Note that show_hidden must also be true to show tasks completed in first party clients, such as the web UI and Google's mobile apps. | |
| user_google_email | Yes | The user's Google email address. Required. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, openWorldHint=true, and destructiveHint=false, so the safety profile is well covered. The description adds only the scoping constraint of a specific task list and does not disclose additional behavioral details beyond what annotations provide.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single efficient sentence with no wasted words. It front-loads the core operation and resource, and all parameter-level detail is appropriately delegated to the schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The input schema is fully self-documenting across 13 parameters, an output schema exists, and annotations cover safety and side effects. The description is sufficiently complete for correct invocation; the only missing piece is routing guidance, which is already penalized under usage_guidelines.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with every parameter (due_min, due_max, page_token, show_hidden, etc.) already documented in the input schema. The tool description adds no parameter-specific semantics, so the baseline score of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a clear verb ('List') and resource ('tasks'), and scopes the action to 'a specific task list', which differentiates it from related tools like list_task_lists and get_task. It is clear and accurate, though it does not explicitly name any sibling alternatives.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided about when to use this tool versus alternatives such as get_task, list_task_lists, or manage_task. The one-line description implies a read/list use case, but it offers no explicit context, exclusions, or decision criteria.
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 FormattingADestructive
Manages conditional formatting rules on a Google Sheet. Supports adding, updating, and deleting conditional formatting rules via a single tool.
| Name | Required | Description | Default |
|---|---|---|---|
| action | Yes | The operation to perform. Must be one of "add", "update", or "delete". | |
| range_name | No | A1-style range (optionally with sheet name). Required for "add". Optional for "update" (preserves existing ranges if omitted). Not used for "delete". | |
| rule_index | No | 0-based index of the rule. For "add", optionally specifies insertion position. Required for "update" and "delete". | |
| sheet_name | No | Sheet name to locate the rule when range_name is omitted. Defaults to the first sheet. Used by "update" and "delete". | |
| text_color | No | Hex text color to apply when condition matches. Used by "add" and "update". | |
| condition_type | No | Sheets condition type (e.g., NUMBER_GREATER, TEXT_CONTAINS, DATE_BEFORE, CUSTOM_FORMULA). Required for "add". Optional for "update" (preserves existing type if omitted). | |
| spreadsheet_id | Yes | The ID of the spreadsheet. Required. | |
| gradient_points | No | List (or JSON list) of gradient points for a color scale. If provided, a gradient rule is created and boolean parameters are ignored. Used by "add" and "update". | |
| background_color | No | Hex background color to apply when condition matches. Used by "add" and "update". | |
| condition_values | No | Values for the condition; accepts a list or a JSON string representing a list. Depends on condition_type. Used by "add" and "update". | |
| user_google_email | Yes | The user's Google email address. Required. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and readOnlyHint=false, so the mutation risk is known. The description adds value by clarifying that a single tool handles add/update/delete, and the schema notes that 'update' preserves existing ranges/types if omitted. However, it does not disclose side effects like whether deleting a rule is irreversible or whether adding a rule can affect existing rules.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence that front-loads the tool's purpose and lists the supported operations. It is appropriately sized for a tool with a rich schema, though it could add a brief usage hint without becoming verbose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (11 params, 3 actions, gradient vs boolean rules), the description plus the fully documented schema covers the essential information. The output schema exists, so return values need not be described. A small gap is the lack of guidance on choosing between gradient and boolean rule parameters, but the schema's note that gradient ignores boolean parameters partially covers this.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all 11 parameters in detail. The description itself adds no parameter-level meaning beyond what the schema provides, which meets the baseline for high coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Manages') and resource ('conditional formatting rules on a Google Sheet') and explicitly lists the three supported operations (adding, updating, deleting). This clearly distinguishes it from sibling tools like format_sheet_range or modify_sheet_values, which handle other aspects of sheet formatting.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage context by naming the three operations, and the schema provides per-action parameter requirements (e.g., range_name required for 'add', rule_index required for 'update'/'delete'). However, it does not explicitly state when to prefer this tool over alternatives like format_sheet_range, nor does it mention exclusions or prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
manage_contactManage ContactADestructive
Create, update, or delete a contact. Consolidated tool replacing create_contact, update_contact, and delete_contact.
| Name | Required | Description | Default |
|---|---|---|---|
| urls | No | List of URL dicts {value, type?}. Supported types: homepage, blog, profile, work, ftp, reservations, other, etc. | |
| No | [DEPRECATED] Email address. Use emails=[{"address":..., "type":"other"}]. | ||
| notes | No | Additional notes (for create/update). | |
| phone | No | [DEPRECATED] Single phone number. Use phones=[{"number":..., "type":"mobile"}]. | |
| action | Yes | The action to perform: "create", "update", or "delete". | |
| emails | No | List of email dicts {address, type?}. | |
| phones | No | List of phone dicts {number, type?}. Supported types: mobile, work, home, main, workMobile, internal, other, etc. Use type="internal" for internal PBX/ATS short numbers (e.g. 250, 301) — stored as a standalone number without + prefix, displayed as "Internal: 250". | |
| address | No | Street address (for create/update). | |
| birthday | No | Birthday as 'YYYY-MM-DD', 'MM-DD' (no year), or 'clear'/'' to remove. | |
| job_title | No | [DEPRECATED] Job title. Use organizations=[{"title":...}]. | |
| nicknames | No | List of nickname dicts {value, type?}. Useful for bilingual contacts (e.g. Hebrew/English alternative forms). Android dialer and WhatsApp search both index nicknames, enabling cross-script lookup. Supported types: default, alternate_name, maiden_name, initials, other, etc. | |
| relations | No | List of relation dicts {person, type?}. Supported types: spouse, child, parent, friend, manager, assistant, etc. | |
| urls_mode | No | How to update urls on "update": "merge" (default), "replace", or "remove". merge dedups by normalized URL (lowercased, trailing slash stripped). | merge |
| contact_id | No | The contact ID. Required for "update" and "delete" actions. | |
| given_name | No | First name (for create/update). | |
| emails_mode | No | How to update emails on "update": "merge" (default), "replace", or "remove". | merge |
| family_name | No | Last name (for create/update). | |
| phones_mode | No | How to update phones on "update": "merge" (default), "replace", or "remove". merge = read-modify-write with dedup by canonicalForm/normalized value. replace = overwrite all phones with provided list. remove = delete phones matching provided numbers. | merge |
| organization | No | [DEPRECATED] Company name. Use organizations=[{"name":...}]. | |
| user_defined | No | List of custom field dicts {key, value}. Useful for structured data like account numbers, IDs, or custom dates. | |
| organizations | No | List of org dicts {name?, title?, department?, jobDescription?, type?}. | |
| nicknames_mode | No | How to update nicknames on "update": "merge" (default), "replace", or "remove". | merge |
| relations_mode | No | How to update relations on "update": "merge" (default), "replace", or "remove". | merge |
| user_defined_mode | No | How to update custom fields on "update": "merge" (default), "replace", or "remove". merge overrides value on matching key; new keys appended. | merge |
| user_google_email | Yes | The user's Google email address. Required. | |
| organizations_mode | No | How to update orgs on "update": "merge" (default), "replace", or "remove". | merge |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already communicate destructiveHint=true, idempotentHint=false, and readOnlyHint=false, and the description does not contradict them. It adds action-level semantics (create/update/delete) but does not describe side effects, required permissions, or irreversibility beyond what the annotations already signal.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two short sentences, front-loaded with the core action and followed by useful consolidation context. There is no filler, repetition, or unnecessary detail.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 26-parameter CRUD tool, the description is appropriately high-level, while the 100% schema coverage, rich per-field descriptions, annotations, and output schema cover the invocation details. It does not explicitly highlight that update/delete require contact_id, but the schema states that clearly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and every parameter has a schema-level description, so the description adds no parameter-level meaning. The baseline of 3 applies because the schema carries the full explanatory burden.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names three specific actions (create, update, delete) and a clear resource (contact), and explicitly frames the tool as the consolidated replacement for create_contact, update_contact, and delete_contact. This makes its role unambiguous and distinguishes it from read-only contact tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It clearly states that this tool consolidates the three action-specific tools, so an agent knows to route contact CRUD requests here. It does not explicitly discuss alternatives like list_contacts, get_contact, search_contacts, or manage_contacts_batch, but those are not alternatives for the same mutation purpose.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
manage_contact_groupManage Contact GroupADestructive
Create, update, delete a contact group, or modify its members. Consolidated tool replacing create_contact_group, update_contact_group, delete_contact_group, and modify_contact_group_members.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | The group name. Required for "create" and "update" actions. | |
| action | Yes | The action to perform: "create", "update", "delete", or "modify_members". | |
| group_id | No | The contact group ID. Required for "update", "delete", and "modify_members" actions. | |
| add_contact_ids | No | Contact IDs to add (for "modify_members"). | |
| delete_contacts | No | If True and action is "delete", also delete contacts in the group (default: False). | |
| user_google_email | Yes | The user's Google email address. Required. | |
| remove_contact_ids | No | Contact IDs to remove (for "modify_members"). |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and readOnlyHint=false, so the agent knows this is a mutating tool. The description adds value by enumerating the four distinct operations (create, update, delete, modify_members) and noting the delete_contacts parameter behavior. It doesn't contradict annotations and provides useful context about the consolidated nature of the tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with zero waste. The first sentence states the full scope of operations, and the second sentence names the legacy tools it replaces. Every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description is complete for a consolidated CRUD tool: it lists all operations, names the replaced tools, and the schema covers all parameters with 100% coverage. The output schema exists, so return values are documented elsewhere. Minor gap: it doesn't mention prerequisites like needing an existing group for update/delete, but the schema's required fields partially cover this.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all 7 parameters thoroughly. The description adds a high-level summary of what the tool does but doesn't add parameter-level detail beyond the schema. Baseline 3 is appropriate since the schema carries the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: 'Create, update, delete a contact group, or modify its members.' It also explicitly names the four legacy tools it replaces, which distinguishes it from siblings like manage_contact and list_contact_groups. This is a clear, consolidated tool definition.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains that this is a consolidated tool replacing four specific tools, which tells the agent when to use it instead of those alternatives. However, it doesn't explicitly state when not to use it or mention alternatives like manage_contact for individual contact operations. The context is clear but exclusions are not exhaustive.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
manage_contacts_batchManage Contacts BatchADestructive
Batch create, update, or delete contacts. Consolidated tool replacing batch_create_contacts, batch_update_contacts, and batch_delete_contacts.
| Name | Required | Description | Default |
|---|---|---|---|
| field | No | For "update" action — the single People API field to update across all contacts in this batch. Required. Must be one of: names, phoneNumbers, emailAddresses, organizations, nicknames, urls, userDefined, relations, biographies, addresses, birthdays. Using a single field per batch call prevents unintentional data loss from a union updateMask overwriting unrelated fields. | |
| action | Yes | The action to perform: "create", "update", or "delete". | |
| updates | No | List of update dicts for "update" action. Each dict must contain contact_id and may contain the same fields as contacts. | |
| contacts | No | List of contact dicts for "create" action. Each dict may contain: given_name, family_name, phones, emails, organizations, notes, address. Deprecated: phone, email, organization, job_title. | |
| contact_ids | No | List of contact IDs for "delete" action. | |
| user_google_email | Yes | The user's Google email address. Required. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false and destructiveHint=true, and the description adds no further behavioral detail—no mention of permanent deletion, side effects, or the single-field update guard against data loss. The only extra statement is about consolidation, which is informative but not behaviorally transparent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences, front-loaded with the action and resource, followed by a useful note on consolidation. No filler, no repetition, every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite rich schema and annotations, the description gives no overview of the action-dependent parameter pattern (contacts for create, updates for update with field, contact_ids for delete). This is documented in schema descriptions, so an agent can recover it, but a complex 6-parameter tool with three mutually exclusive payloads would benefit from a one-line usage map in the description. The presence of an output schema partially compensates.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline applies. The tool description itself adds no parameter-level meaning; all guidance lives in the schema, which is thorough (action-dependent roles of contacts/updates/contact_ids, field enums, typed entries). The description adds no extra semantic value.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb + resource + scope: 'Batch create, update, or delete contacts.' It also positions itself as the consolidated replacement for batch_create_contacts, batch_update_contacts, and batch_delete_contacts, which makes its intended role unmistakable even next to the singular manage_contact sibling.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description clearly signals this is the batch mutation tool and tells agents it supersedes three older batch-specific tools. However, it does not explicitly mention when to use the singular manage_contact tool or state that single-contact operations should go there.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
manage_deploymentManage DeploymentBDestructive
Create, update, or delete Apps Script deployments.
| Name | Required | Description | Default |
|---|---|---|---|
| action | Yes | Action to perform - "create", "update", or "delete" | |
| script_id | Yes | The script project ID | |
| description | No | Deployment description (required for create; optional for update when version_number is supplied) | |
| deployment_id | No | The deployment ID (required for update and delete) | |
| version_number | No | Version number to point the deployment at (for update only). Required to roll a deployment forward to a newly created script version. | |
| user_google_email | Yes | User's email address | |
| version_description | No | Optional version description (for create only) |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, readOnlyHint=false, and idempotentHint=false, so the safety profile is covered. The description adds no behavioral traits beyond what's in the schema: 'create, update, delete' simply mirrors the action parameter values. It fails to mention irreversibility of deletes, permission requirements, or dependency on existing deployments/versions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence with zero filler. It efficiently communicates the core purpose without unnecessary details, making it easy for an agent to quickly grasp the tool's function.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with 7 parameters, 3 required, and a destructive operation, the description is too sparse. It omits the deployment lifecycle context (e.g., creating a deployment typically requires a version, updating requires an existing deployment_id) and provides no guidance on how the parameters interact. The output schema covers return values, but the operational context is largely missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and the parameter descriptions are detailed (e.g., deployment_id required for update/delete, description required for create). The tool description adds no additional parameter semantics, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's actions (create, update, delete) on a specific resource (Apps Script deployments). It distinguishes itself from siblings like list_script_deployments (read-only) and manage_script_version (version management) by directly naming the deployment resource and mutation verbs.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives. It does not mention list_script_deployments for viewing deployments or manage_script_version for handling versions, leaving the agent to infer usage from the sibling names alone. There is no explicit when-to-use or when-not-to-use context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
manage_doc_tabManage Doc TabBDestructive
Manage document tabs: create, rename, delete, or populate from Markdown.
| Name | Required | Description | Default |
|---|---|---|---|
| index | No | Position index for new tab, 0-based among siblings (required for create) | |
| title | No | Tab title (required for create; used by rename) | |
| action | Yes | Action to perform - "create", "rename", "delete", or "populate_from_markdown" | |
| tab_id | No | Tab ID (required for rename, delete, populate_from_markdown; use inspect_doc_structure to find IDs) | |
| document_id | Yes | ID of the document | |
| markdown_text | No | Markdown source to render (populate_from_markdown only) | |
| parent_tab_id | No | Optional parent tab ID to nest under (create only) | |
| replace_existing | No | Clear tab body before inserting markdown (default True) | |
| user_google_email | Yes | User's Google email address |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and readOnlyHint=false. The description lists destructive actions (delete) and creation, consistent with annotations, but adds no further behavioral context such as consequences of populate_from_markdown on existing content or auth requirements.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single sentence with no fluff, listing actions in a readable list. It is concise but borders on being a mere restatement of the title and action enum.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with 9 parameters and 4 distinct actions, the description is too sparse. It does not explain when each action applies, how actions relate to required parameters, or how to obtain tab_id (though the schema hints at inspect_doc_structure). It relies entirely on the schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description does not add parameter-level information beyond what the schema already provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific resource (document tabs) and enumerates four operations (create, rename, delete, populate from Markdown). It does not explicitly name a sibling tool, but the word 'document' makes it distinguishable from manage_sheet_tab.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives like manage_sheet_tab or inspect_doc_structure. It does not mention prerequisites, exclusions, or scenarios 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_document_commentManage Document CommentA
Manage comments on a Google Document.
Actions:
create: Create a new document-level comment. Requires comment_content. Note: The Drive API cannot anchor comments to specific text; only the Google Docs UI can do that.
reply: Reply to a comment. Requires comment_id and comment_content.
resolve: Resolve a comment. Requires comment_id.
| Name | Required | Description | Default |
|---|---|---|---|
| action | Yes | ||
| comment_id | No | ||
| document_id | Yes | ||
| comment_content | No | ||
| user_google_email | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations convey that this is mutating and non-idempotent, but the description adds a key behavioral constraint: the Drive API cannot anchor comments to text, only the Docs UI can. This prevents the agent from assuming text anchoring support. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three compact bullets plus one necessary note about anchoring. Every sentence earns its place, and the format makes the action-parameter mapping immediately scannable.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
All three operations are described with prerequisites, and the open-world caveat is addressed. An output schema exists, so omitting return values is fine. The only gap is not mentioning that document_id and user_google_email apply to every action, but that is inferable from the schema and required fields.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must explain parameter roles. It does nicely map action-specific parameters (comment_content, comment_id), but gives no guidance on user_google_email or document_id, which are also required. Names make them self-explanatory, but the description doesn't compensate fully for the zero schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: 'Manage comments on a Google Document,' then enumerates three concrete actions (create, reply, resolve), distinguishing it from sibling tools like list_document_comments. Each action is named with its specific purpose.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear context for when to use this tool and what each action requiresaislado. It doesn't explicitly contrast with list_document_comments or spreadsheet/presentation comment tools, but the 'Google Document' scope and action list make the intended use case unambiguous.
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 AccessBDestructive
Consolidated tool for managing Google Drive file and folder access permissions.
Supports granting, batch-granting, updating, revoking permissions, and transferring file ownership -- all through a single entry point.
| Name | Required | Description | Default |
|---|---|---|---|
| role | No | Permission role -- 'reader', 'commenter', or 'writer'. Used by "grant" (defaults to 'reader') and "update". | |
| action | Yes | The access management action to perform. Required. One of: - "grant": Share with a single user, group, domain, or anyone. - "grant_batch": Share with multiple recipients in one call. - "update": Modify an existing permission (role or expiration). - "revoke": Remove an existing permission. - "transfer_owner": Transfer file ownership to another user. | |
| file_id | Yes | The ID of the file or folder. Required. | |
| recipients | No | List of recipient objects for "grant_batch". Each should have: email (str), role (str, optional), share_type (str, optional), expiration_time (str, optional). For domain shares use 'domain' field instead of 'email'. | |
| share_type | No | Type of sharing -- 'user', 'group', 'domain', or 'anyone'. Used by "grant". Defaults to 'user'. | user |
| share_with | No | Email address (user/group), domain name (domain), or omit for 'anyone'. Used by "grant". | |
| email_message | No | Custom notification email message. Used by "grant" and "grant_batch". | |
| permission_id | No | The permission ID to modify or remove. Required for "update" and "revoke" actions. | |
| expiration_time | No | Expiration in RFC 3339 format (e.g., "2025-01-15T00:00:00Z"). Used by "grant" and "update". | |
| new_owner_email | No | Email of the new owner. Required for "transfer_owner". | |
| send_notification | No | Whether to send notification emails. Defaults to True. Used by "grant" and "grant_batch". | |
| user_google_email | Yes | The user's Google email address. Required. | |
| allow_file_discovery | No | For 'domain'/'anyone' shares, whether the file appears in search. Used by "grant". | |
| move_to_new_owners_root | No | Move file to the new owner's My Drive root. Defaults to False. Used by "transfer_owner". |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already carry destructiveHint=true and readOnlyHint=false, and the description adds the concrete destructive operations (revoke, transfer ownership). It does not disclose additional behavioral context such as notification emails being sent by default or ownership transfer side effects.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with the main purpose front-loaded. 'Consolidated' and 'single entry point' are somewhat redundant, but the description remains economical and scannable.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The schema and output schema are rich, so the description does not need to repeat machinery. However, for a 14-parameter tool with five distinct actions, the description could better orient the agent on action-specific required fields and potential side effects.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description adds no parameter-level meaning beyond the schema, such as action-to-parameter dependencies or defaults.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies a resource (Google Drive file and folder access permissions) and specific actions (grant, batch-grant, update, revoke, transfer ownership). It is more than a tautology, though it does not explicitly distinguish itself from the similarly-scoped sibling set_drive_file_permissions.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'Consolidated tool' and 'all through a single entry point' implies this is the go-to for Drive permission operations. However, it gives no explicit when-to-use or when-not-to-use guidance, and it names no alternatives despite the existence of overlapping sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
manage_eventManage EventBDestructive
Manages calendar events. Supports creating, updating, deleting, and RSVP.
| Name | Required | Description | Default |
|---|---|---|---|
| action | Yes | Action to perform - "create", "update", "delete", or "rsvp". | |
| summary | No | Event title (required for create). | |
| color_id | No | Event color ID (1-11, update only). | |
| end_time | No | End time (required for create). An RFC3339 UTC offset identifies the exact instant and is preserved. Without an offset, supply end_timezone or timezone. All-day end dates are exclusive. | |
| event_id | No | Event ID (required for update and delete). | |
| location | No | Event location. | |
| response | No | RSVP response — "accepted", "declined", "tentative", or "needsAction" (rsvp action only). | |
| timezone | No | IANA timezone applied to both boundaries (e.g., "America/New_York"). Converts offset-bearing timestamps without changing their instant; interprets offset-free timestamps as local times in this zone. Overridden per boundary by start_timezone/end_timezone. | |
| attendees | No | Attendee email addresses, attendee objects (e.g. {"email": ..., "responseStatus": "accepted"}), or a mix of both. | |
| reminders | No | Custom reminder objects. | |
| recurrence | No | RFC5545 recurrence rules for a recurring event, e.g. ["RRULE:FREQ=WEEKLY;COUNT=10"]. | |
| start_time | No | Start time (required for create). An RFC3339 UTC offset identifies the exact instant and is preserved. Without an offset, supply start_timezone or timezone. For a local wall-clock time, omit the offset and pass the zone so Google resolves daylight saving; a wrong offset moves the event. Date-only values create all-day events. | |
| visibility | No | "default", "public", "private", or "confidential". | |
| attachments | No | List of Google Drive file URLs or IDs to attach. On action="update" this replaces the event's existing attachments rather than appending to them, matching the Calendar API's patch semantics. | |
| calendar_id | No | Calendar ID (default: 'primary'). | primary |
| description | No | Event description. | |
| end_timezone | No | IANA timezone for the end boundary only, overriding timezone. See start_timezone. | |
| rsvp_comment | No | Optional message to include with the RSVP response (rsvp action only). | |
| send_updates | No | Notification behavior for create, update, delete, and rsvp — "all" (default), "externalOnly", or "none". | |
| transparency | No | "opaque" (busy) or "transparent" (free). | |
| conference_id | No | Optional provider-side conference/meeting ID. | |
| conference_uri | No | Join URL for the third-party conference (e.g. "https://zoom.us/j/123456789"). Required when conference_provider is set. | |
| start_timezone | No | IANA timezone for the start boundary only, overriding timezone. Use for events whose two ends sit in different zones - a flight departing 13:45 "Asia/Jerusalem" and landing 17:50 "Europe/Amsterdam" is one event authored in two zones. Explicit timestamp offsets always preserve the instant, even when the zone differs. | |
| add_google_meet | No | Whether to add/remove native Google Meet. | |
| conference_data | No | Raw Google Calendar `conferenceData` payload to attach a third-party conference (Zoom/Webex/Teams add-on). Use this for full control; mutually exclusive with the conference_provider helper params and with add_google_meet. (create/update only) | |
| guests_can_modify | No | Whether attendees can modify. | |
| user_google_email | Yes | The user's Google email address. Required. | |
| conference_passcode | No | Optional passcode for the third-party conference. | |
| conference_provider | No | Higher-level helper: third-party provider name (e.g. "zoom", "webex", "teams"). Requires conference_uri. The MCP builds the addOn `conferenceData` block internally. (create/update only) | |
| use_default_reminders | No | Whether to use default reminders. | |
| guests_can_invite_others | No | Whether attendees can invite others. | |
| guests_can_see_other_guests | No | Whether attendees can see other guests. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and readOnlyHint=false, so the description adds no new behavioral trait—it merely restates the supported operations. It does not disclose consequences such as permanent deletion, notification behavior via send_updates, or that attachments are replaced on update (though the latter is hidden in a parameter description).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two terse sentences with no filler: 'Manages calendar events. Supports creating, updating, deleting, and RSVP.' Every word earns its place, and the core actions are front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (32 parameters, nested objects), the description is minimal but workable because the schema and output schema carry the detailed burden. It omits an explicit mention of the required 'action' parameter or that the tool is action-driven, but an agent consulting the schema will find that.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the schema fully documents all 32 parameters. The description adds no parameter-level meaning beyond what the schema provides, hitting the baseline of 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses the verb 'Manages' with resource 'calendar events' and enumerates specific operations: creating, updating, deleting, and RSVP. This clearly distinguishes the tool from read-only siblings like get_events or manage_out_of_office, though it does not explicitly name alternatives.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description clearly implies the tool is for event mutations and RSVP, which tells an agent when to use it. However, it provides no explicit exclusion or guidance about when to prefer a sibling tool like get_events for reading or create_calendar for calendar management.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
manage_focus_timeManage Focus TimeADestructive
Manages Focus Time events on Google Calendar. These special events auto-decline meeting invitations and, by default, set the user's chat status to Do Not Disturb, helping protect blocks of uninterrupted work time.
| Name | Required | Description | Default |
|---|---|---|---|
| action | Yes | Action to perform - "create", "list", "update", or "delete". | |
| summary | No | Display text on the calendar. Defaults to "Focus Time". | |
| end_time | No | End date/time (exclusive). Same format as start_time. For a single full day on April 5, use start_time='2026-04-05' and end_time='2026-04-06'. Required for create. | |
| event_id | No | Event ID. Required for "update" and "delete" actions. | |
| time_max | No | For "list" action: end of time range. | |
| time_min | No | For "list" action: start of time range. Defaults to current time. Recurring series are expanded into individual instances in the requested range. | |
| timezone | No | Timezone for the event (e.g., "America/New_York", "Europe/London"). Required when using date-only values or dateTime values without an explicit UTC offset. | |
| recurrence | No | RFC5545 recurrence rules for a recurring Focus Time series, e.g. ["RRULE:FREQ=WEEKLY;COUNT=10"]. | |
| start_time | No | Start date/time. Use 'YYYY-MM-DD' for full-day or RFC3339 for partial-day (e.g., '2024-04-05T09:00:00Z'). Date-only values are auto-converted to dateTime (midnight-to-midnight). Required for create. | |
| calendar_id | No | Calendar ID. Defaults to 'primary'. Focus Time status events live on primary calendars, so use 'primary' or a user's primary calendar ID/email rather than a secondary calendar ID. | primary |
| chat_status | No | Google Chat status during the focus time. Supports "doNotDisturb" (default) and "available". | |
| description | No | Event description. Useful for adding context about what the focus time is for. | |
| max_results | No | For "list" action: maximum events to return. Defaults to 10. | |
| decline_message | No | Message included when auto-declining invitations. | |
| auto_decline_mode | No | How to handle conflicting invitations. One of: "declineAllConflictingInvitations" (default), "declineOnlyNewConflictingInvitations", "declineNone". | |
| user_google_email | Yes | The user's Google email address. Required. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate destructiveHint=true and idempotentHint=false, which the description supports by mentioning update/delete actions. It adds context about auto-declining invitations and Do Not Disturb status, which is valuable. However, it doesn't disclose details like whether updates are irreversible or what happens to existing settings when updated, but the annotations cover the safety profile adequately.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence that is informative but concise. It front-loads the purpose and key behaviors. No fluff, and each clause adds value—purpose, auto-decline feature, and chat status default. Could argue it's slightly dense, but efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (16 params, multiple actions), the description is complete enough for agents to understand the tool's core purpose and behavior. The output schema likely covers return values. However, it could benefit from explicit notes on action-specific usage, but the schema covers that. No critical gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, with every parameter well-documented (e.g., timezone requirements, date formats, action-specific fields). The description adds no extra parameter semantics beyond what the schema provides. Since the schema fully covers parameter meaning, baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool manages Focus Time events on Google Calendar, and explains their special behavior (auto-declining meetings, Do Not Disturb status). It distinguishes itself from sibling calendar tools like get_events and manage_event by focusing on this specific event type. The purpose is unambiguous and specific.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
While the description explains what Focus Time events are, it doesn't explicitly guide when to use this tool versus alternatives like manage_event or manage_out_of_office. There's no clear 'when to use' vs 'when not to use' guidance. The description implies usage for creating focus time blocks, but does not name alternatives or edge cases.
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 FilterBDestructive
Manages Gmail filters. Supports creating and deleting filters.
| Name | Required | Description | Default |
|---|---|---|---|
| action | Yes | Action to perform - "create" or "delete". | |
| criteria | No | Filter criteria object (required for create). | |
| filter_id | No | ID of the filter to delete (required for delete). | |
| filter_action | No | Filter action object (required for create). Named 'filter_action' to avoid shadowing the 'action' parameter. | |
| user_google_email | Yes | The user's Google email address. Required. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and readOnlyHint=false, so the agent knows this is a mutating operation. The description adds that it supports creating and deleting, which aligns with the destructive hint. It does not add context about side effects (e.g., filters apply to future messages, deletion is irreversible, or permission requirements). With annotations covering the safety profile, a 3 is appropriate – the description adds some value but not rich behavioral context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two short sentences with no filler. It front-loads the resource and then lists the supported operations. It could be slightly more informative (e.g., mentioning that criteria/filter_action are required for create), but it is appropriately concise and structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has an output schema, nested objects, and 100% schema coverage, the description is mostly complete for basic invocation. However, it lacks guidance on the relationship between action and required parameters (though the schema covers this), and it doesn't mention any prerequisites like authentication or the effect of creating/deleting filters. For a destructive tool with nested objects, a bit more context would help, but the schema and annotations fill many gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all five parameters. The description adds no parameter-level meaning beyond what the schema provides. The schema itself explains the action values, required-for-create/delete relationships, and the naming rationale for 'filter_action'. Baseline 3 is correct when the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Manages') and resource ('Gmail filters') and explicitly lists the two supported operations ('creating and deleting filters'). It is clear about what the tool does, though it doesn't explicitly distinguish it from the sibling 'list_gmail_filters' or 'manage_gmail_label' beyond the resource name. The verb 'Manages' is slightly generic, but the operations clarify scope.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for creating and deleting filters, and the schema clarifies that 'create' requires criteria/filter_action and 'delete' requires filter_id. However, it does not explicitly state when to use this tool versus alternatives like 'list_gmail_filters' (for listing) or 'manage_gmail_label' (for labels). No exclusions or alternative routing are provided, so the guidance is adequate but not explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
manage_gmail_labelManage Gmail LabelADestructive
Manages Gmail labels: create, update, or delete labels.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | Label name. Required for create, optional for update. | |
| action | Yes | Action to perform on the label. | |
| label_id | No | Label ID. Required for update and delete operations. | |
| text_color | No | Label text color as a hex string, e.g. "#ffffff". Set together with background_color. Same palette. On update, omitting both keeps the label's current color. | |
| clear_color | No | On update, remove the label's current color. Cannot be combined with background_color or text_color. | |
| background_color | No | Label background color as a hex string, e.g. "#fb4c2f". Set together with text_color; Gmail requires both. Gmail accepts only its own palette, and an unsupported value is rejected before the request. Colors apply to user labels, not system labels. | |
| user_google_email | Yes | The user's Google email address. Required. | |
| label_list_visibility | No | Whether the label is shown in the label list. Defaults to "labelShow" on create. On update, omitting it keeps the label's current setting. | |
| message_list_visibility | No | Whether the label's messages are shown in the message list. Defaults to "show" on create. On update, omitting it keeps the label's current setting. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and idempotentHint=false, so the description adds little behavioral context. It repeats the operation types already present in the action enum but does not disclose side effects (e.g., deleting a label removes it from messages) or constraints (e.g., color pairing requirements) that are not already in the schema. With annotations covering the safety profile, the description's added value is minimal.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, well-structured sentence that front-loads the resource and operations. It contains no filler and every word contributes to understanding the tool's purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description is minimal, but the schema and annotations collectively cover the details: all parameters are described, destructive behavior is annotated, and an output schema exists. The description lacks explicit guidance on when not to use it, but given the richness of structured data, it is adequate though not exemplary.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the parameter descriptions are exceptionally detailed (e.g., background_color explains the Gmail palette restriction and pairing requirement). The tool description adds no parameter information beyond what the schema provides. According to the rubric, a baseline of 3 is appropriate when the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('manages') and resource ('Gmail labels'), and explicitly enumerates the three operations (create, update, delete). This clearly distinguishes it from siblings like list_gmail_labels (which lists) and manage_gmail_filter (which manages filters). It is not a tautology and conveys the tool's core function unambiguously.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage – an agent can infer it is for creating/updating/deleting labels, not for listing them. However, it does not explicitly mention when not to use this tool or point to alternatives (e.g., 'to list labels, use list_gmail_labels'). The guidance is implied rather than explicit, so it falls short of a 4.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
manage_named_rangeManage Named RangeADestructive
Manages the lifecycle of named ranges in a Google Sheet: list, create, update, or delete.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | Name for the named range (required for "create"; optional identifier for "update"/"delete"). | |
| action | Yes | The operation to perform: "list", "create", "update", or "delete". Required. | |
| new_name | No | New name for the named range (used with action="update"). | |
| new_range | No | New A1-style range for the named range (used with action="update"). | |
| range_name | No | Target cell or range in A1 notation (e.g., "Sheet1!A1:D10", "A1:B5") (required for "create"). | |
| named_range_id | No | The ID of the named range (optional identifier for "update"/"delete"). | |
| spreadsheet_id | Yes | The ID of the spreadsheet. Required. | |
| user_google_email | Yes | The user's Google email address. Required. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare the tool as mutating and destructive (readOnlyHint=false, destructiveHint=true), and the description's mention of delete is consistent. However, the description adds no further behavioral context such as irreversibility, permission requirements, or potential side effects on formulas or references.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single compact sentence that front-loads the resource and verb, then efficiently enumerates the supported operations. There is no filler or redundant restatement of the tool name.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For an eight-parameter, four-action tool, the description leaves action-specific parameter orchestration entirely to the schema. While the schema and output schema cover much of the needed detail, the description does not clarify identifier selection for update/delete or call out any action-specific constraints, making it incomplete for a tool of this complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so each parameter already has a meaningful explanation tying it to specific actions. The description itself adds no parameter-level detail, and a remaining ambiguity is that both name and named_range_id are described as optional identifiers for update/delete without clarifying precedence.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb and resource, 'manages the lifecycle of named ranges in a Google Sheet,' and explicitly lists the four operations: list, create, update, or delete. This clearly distinguishes it from sibling sheet tools like read_sheet_values or manage_sheet_tab.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use the tool by naming named ranges as the resource, but it provides no explicit when-to-use guidance, prerequisites, or alternatives. An agent can infer the context, but there are no exclusions or comparisons to related sheet management tools.
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 OfficeBDestructive
Manages Out of Office events on Google Calendar. These special events auto-decline meeting invitations and set the user's status to "Out of office" across Google Workspace.
| Name | Required | Description | Default |
|---|---|---|---|
| action | Yes | Action to perform - "create", "list", "update", or "delete". | |
| summary | No | Display text on the calendar. Defaults to "Out of Office". | |
| end_time | No | End date/time (exclusive). Same format as start_time. For a single full day on April 5, use start_time='2026-04-05' and end_time='2026-04-06'. Required for create. | |
| event_id | No | Event ID. Required for "update" and "delete" actions. | |
| time_max | No | For "list" action: end of time range. | |
| time_min | No | For "list" action: start of time range. Defaults to current time. Recurring series are expanded into individual instances in the requested range. | |
| timezone | No | Timezone for the event (e.g., "America/New_York", "Europe/London"). Required when using date-only values or dateTime values without an explicit UTC offset. | |
| recurrence | No | RFC5545 recurrence rules for a recurring Out of Office series, e.g. ["RRULE:FREQ=WEEKLY;COUNT=10"]. | |
| start_time | No | Start date/time. Use 'YYYY-MM-DD' for full-day or RFC3339 for partial-day (e.g., '2024-04-05T09:00:00Z'). Date-only values are auto-converted to dateTime (midnight-to-midnight). Required for create. | |
| calendar_id | No | Calendar ID. Defaults to 'primary'. Out of Office status events live on primary calendars, so use 'primary' or a user's primary calendar ID/email rather than a secondary calendar ID. | primary |
| max_results | No | For "list" action: maximum events to return. Defaults to 10. | |
| decline_message | No | Message included when auto-declining invitations. | |
| auto_decline_mode | No | How to handle conflicting invitations. One of: "declineAllConflictingInvitations" (default), "declineOnlyNewConflictingInvitations", "declineNone". | |
| user_google_email | Yes | The user's Google email address. Required. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds a concrete behavioral detail (auto-declining invitations and setting status) beyond what annotations state. Annotations already flag destructive and non-read-only, but the description gives a specific side effect. It does not cover all behaviors (e.g., effects of deletion) but adds meaningful context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, both informative. The first states the action and resource, the second explains the unique purpose. No filler or redundancy. It is concise and front-loaded, though it could arguably include a brief mention of supported actions.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is complex with 14 parameters and multiple actions, but the schema documents every parameter and its role. The description provides a high-level overview but does not mention the action variants (create, list, update, delete) or required fields; however, the schema covers these. It is adequate but could be more complete with a sentence about supported operations.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has 100% description coverage for all 14 parameters, so the description is not required to explain parameters. The description does not add any parameter-specific information, which is acceptable given the schema's completeness. Baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb (manages) and resource (Out of Office events on Google Calendar), and explains the special behavior (auto-decline, status change). It clearly identifies what the tool does but does not explicitly differentiate from sibling tools like manage_event or manage_focus_time, so it falls short of a perfect 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is given on when to use this tool versus alternatives. It does not mention that it is specific to Out of Office events or that regular events should use manage_event, nor does it provide any exclusions or conditions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
manage_presentation_commentManage Presentation CommentA
Manage comments on a Google Presentation.
Actions:
create: Create a new comment. Requires comment_content. Note: The Drive API cannot anchor comments to arbitrary text; Slides comments are element-scoped via the API.
reply: Reply to a comment. Requires comment_id and comment_content.
resolve: Resolve a comment. Requires comment_id.
| Name | Required | Description | Default |
|---|---|---|---|
| action | Yes | ||
| comment_id | No | ||
| comment_content | No | ||
| presentation_id | Yes | ||
| user_google_email | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate a mutating, non-read-only operation, so the bar is lower. The description adds a meaningful constraint: the Drive API cannot anchor comments to arbitrary text and Slides comments are element-scoped. It does not disclose other behavioral aspects like what the API returns or whether operations are reversible, but no contradiction exists.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and well-organized with a bulleted action list. Every sentence adds useful information, and the API anchoring caveat is placed where it is relevant without bloating the text.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 5-parameter tool with conditional requirements, the description covers the main invocation scenarios and the key API limitation. An output schema exists, so explaining return values is less necessary. Minor gaps remain around how comment_id is obtained and what user_google_email represents, but overall the agent has enough to act.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It explains which parameters each action requires and effectively documents the valid values for the action parameter (create, reply, resolve). It leaves user_google_email and presentation_id to be inferred from context, which is acceptable given their self-explanatory names.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool manages comments on a Google Presentation and enumerates the exact supported actions: create, reply, and resolve. This goes beyond the generic title and separates it from read-only comment tools like list_presentation_comments.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear per-action parameter requirements, which implies when to use each mode. However, it never explicitly contrasts this tool with alternatives such as list_presentation_comments or manage_document_comment; usage guidance relies on inference rather than direct routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
manage_script_contentManage Script ContentADestructive
Update the source files of an Apps Script project.
| Name | Required | Description | Default |
|---|---|---|---|
| files | No | File objects with name, type, and source to create or update (required for update). | |
| merge | No | When True (default), overlay `files` onto the current project. When False, replace the full project file set (update only). | |
| action | Yes | "update". | |
| script_id | Yes | The script project ID. | |
| user_google_email | Yes | User's email address |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already communicate that this is mutating and destructive (readOnlyHint=false, destructiveHint=true), so the description is consistent with them. It adds no extra behavioral context such as overwriting/deleting files when merge=false, though the schema's merge parameter documents that behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single direct sentence that opens with the action verb and has no filler or repetition. Given that parameter details are carried by the schema, this brevity is appropriate.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With full schema coverage, a rich merge parameter description, output schema, and annotations covering destructiveness, the short description is mostly sufficient for correct selection and invocation. It could be even stronger by explicitly contrasting with related script-management tools, but that is a minor gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already explains all parameters, including the merge overwrite semantics. The description's generic 'source files' wording adds little beyond what the file-object description already provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific action ('Update') and a concrete resource ('source files of an Apps Script project'), so an agent can tell this is for modifying script content rather than metadata. The resource wording also distinguishes it from script-management siblings such as manage_script_project and get_script_project.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It clearly states the context for use: call this when source files of an Apps Script project need to be updated. It does not name alternatives or state when not to use it, so it stops just short of explicit routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
manage_script_projectManage Script ProjectADestructive
Create or delete an Apps Script project.
Actions: - "create": Create a project. Requires title; parent_id is optional. - "delete": Permanently delete a project. Requires script_id.
| Name | Required | Description | Default |
|---|---|---|---|
| title | No | ||
| action | Yes | ||
| parent_id | No | ||
| script_id | No | ||
| user_google_email | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate destructiveHint=true and idempotentHint=false, and the description reinforces this by saying "Permanently delete a project." This adds useful behavioral context beyond the annotations, though it could further disclose collateral effects such as associated deployments or versions. No contradiction exists.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded, with a clear title sentence followed by a scannable bullet list. Every sentence adds necessary operational detail and there is no filler or repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description is largely complete for a two-action management tool: it covers both operations, their required parameters, and the permanence of deletion. The output schema handles return values, so that omission is acceptable. The only notable gap is the undocumented user_google_email parameter.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage, the description carries the full burden of parameter meaning. It provides semantics for action ("create"/"delete"), title (required for create), parent_id (optional), and script_id (required for delete). However, it does not explain user_google_email, which is a required parameter, so the coverage is not complete.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a clear verb-plus-resource statement: "Create or delete an Apps Script project." It explicitly enumerates the two supported actions, making it immediately distinguishable from sibling tools like manage_script_content or manage_deployment. There is no ambiguity about what this tool does.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The action list gives clear usage context: choose "create" with a title, or "delete" with a script_id. It does not explicitly name sibling alternatives or state when not to use this tool, but the create/delete decision is well specified and leaves little room for misuse.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
manage_script_triggerManage Script TriggerADestructive
List or delete the current user's installable triggers on a script project.
The Apps Script REST API has no triggers resource, so in dev_mode both actions
provision (or refresh) a small helper file and run it via the Execution
API - the only way to inspect or change trigger state without opening the
editor. Neither action is read-only: the helper file may be written into the
project on first use. To create a trigger, use generate_trigger_code to
produce the setup code, add it with manage_script_content, then run it with
run_script_function.
| Name | Required | Description | Default |
|---|---|---|---|
| action | Yes | One of "list", "delete". | |
| dev_mode | No | Run against the latest saved code (default; project owner only) vs. the deployed version. False requires the helper to already exist in the deployed version. | |
| script_id | Yes | The script project ID. | |
| trigger_id | No | Unique ID of a specific trigger to delete (delete only). | |
| deployment_id | No | Optional API Executable deployment ID. When omitted, the highest versioned API Executable deployment is used. | |
| handler_function | No | Delete all triggers calling this function name (delete only). | |
| user_google_email | Yes | User's email address |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses that both actions are not read-only and may write a helper file into the project, which goes beyond the annotations (destructiveHint=true) by specifying the exact side effect. It also explains the mechanism (helper file via Execution API), giving agents critical awareness of state changes even for a 'list' action.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the core purpose and then provides necessary context about the mechanism and creation alternative. Each sentence serves a purpose, though the middle paragraph could be tightened slightly; still, it's well-structured and not redundant.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (7 parameters, output schema, annotations), the description covers the key behavioral quirks (helper file, non-read-only nature) and routes creation appropriately. It doesn't explicitly detail return values, but an output schema exists, and the schema covers parameter requirements. Slightly more could be said about error cases or deployment specifics, but overall it's complete for an agent to call correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and each parameter already has a clear description (e.g., action, dev_mode, trigger_id). The description adds general context about dev_mode behavior but doesn't add per-parameter meaning beyond what the schema provides. Baseline 3 is appropriate for high schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a clear verb+resource: 'List or delete the current user's installable triggers on a script project.' It distinguishes from siblings by explicitly naming the creation path via generate_trigger_code, manage_script_content, and run_script_function, so an agent can tell this tool handles list/delete only.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly directs when not to use this tool: 'To create a trigger, use generate_trigger_code ... then run it with run_script_function.' This provides clear alternative routing and explains the dev_mode provisioning mechanism, leaving no ambiguity about when to invoke this tool versus its siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
manage_script_versionManage Script VersionA
Create immutable version snapshots of a script project.
Versions capture a snapshot of the current script code; once created they cannot be modified.
| Name | Required | Description | Default |
|---|---|---|---|
| action | Yes | "create". | |
| script_id | Yes | The script project ID. | |
| description | No | Optional description for the new version (create only). | |
| user_google_email | Yes | User's email address |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate this is a non-read, non-idempotent, non-destructive operation. The description adds useful behavioral context by stating versions are immutable and cannot be modified after creation. However, it does not disclose output behavior, error conditions, or any side effects beyond version creation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two concise sentences with no filler. The primary action is front-loaded, and the immutability caveat is placed in a separate clarifying sentence. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the schema coverage, output schema presence, and annotations, the description is largely sufficient for a simple create-version tool. It clearly states what is captured and the immutability constraint. Minor missing context includes when to prefer this over related version/script management tools, but this is more of a usage guideline gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema fully documents all four parameters. The description adds no additional parameter-level meaning beyond confirming that the action is 'create,' which matches the schema's action description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states a specific verb and resource: 'Create immutable version snapshots of a script project.' It also clarifies the core behavior—capturing a snapshot of current script code—and distinguishes itself from read-oriented siblings like get_script_version.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit guidance is given about when to use this tool versus alternatives such as get_script_version, manage_script_content, or manage_script_project. The description implies a create operation but does not state exclusions or conditions that would route an agent to the correct sibling.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
manage_sheet_tabManage Sheet TabADestructive
Manages the lifecycle of an existing sheet tab: rename, delete, hide, unhide or reorder.
Use create_sheet to add a tab, and resize_sheet_dimensions for row and column level changes. This tool operates on the tab itself.
| Name | Required | Description | Default |
|---|---|---|---|
| action | Yes | One of "rename", "delete", "hide", "unhide", "reorder" | |
| new_name | No | New title, required for action="rename" | |
| new_index | No | New zero-based position, required for action="reorder" | |
| sheet_name | Yes | Title of the existing tab to act on | |
| spreadsheet_id | Yes | ID of the spreadsheet | |
| user_google_email | Yes | User's Google email address |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, readOnlyHint=false, and idempotentHint=false, covering the safety profile. The description adds the 'operates on the tab itself' scoping and lists the operations, but it does not go further to explain consequences such as whether deleting is permanent or whether renaming affects references. It is adequate but not rich beyond the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded: it states the purpose and operations in the first sentence, then routes to sibling tools in the second. There is no wasted text or repetition of schema details.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With a 100%-covered schema, annotations, and an output schema available, the description is sufficient for correct invocation. It clearly identifies the operation set and sibling boundaries; nothing needed for selecting or calling the tool is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already explains every parameter including action-specific requirements like new_name for 'rename' and new_index for 'reorder'. The description adds no additional parameter meaning, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb ('manage') and resource ('existing sheet tab'), and enumerates the exact operations: rename, delete, hide, unhide, reorder. It also distinguishes itself from sibling tools by explicitly stating it operates on the tab itself rather than creating tabs or resizing rows/columns.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit routing guidance: use create_sheet for adding a tab, use resize_sheet_dimensions for row/column changes, and use this tool for tab-level lifecycle operations. It clearly sets boundaries between this tool and the most closely related alternatives.
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 CommentA
Manage comments on a Google Spreadsheet.
Actions:
create: Create a new comment. Requires comment_content. Note: The Drive API cannot anchor comments to arbitrary text; Sheets comments are cell-scoped via the API.
reply: Reply to a comment. Requires comment_id and comment_content.
resolve: Resolve a comment. Requires comment_id.
| Name | Required | Description | Default |
|---|---|---|---|
| action | Yes | ||
| comment_id | No | ||
| spreadsheet_id | Yes | ||
| comment_content | No | ||
| user_google_email | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds a meaningful behavioral note: the Drive API cannot anchor comments to arbitrary text and Sheets comments are cell-scoped. Annotations already signal mutation (readOnlyHint false), but the description does not cover permissions, reversibility of resolve, or other side effects, so transparency is adequate but not rich.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact, scannable, and front-loaded with purpose, followed by a clear action list and a relevant API limitation. Each sentence adds value without unnecessary repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers all three actions with their required parameters and includes a useful API constraint, while the output schema handles return-value expectations. It does not explicitly address auth/permissions or parameter formats, but the tool is reasonably complete for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage, the description is the main source of parameter meaning and does explain action-specific dependencies (comment_content for create/reply, comment_id for reply/resolve). It leaves user_google_email and spreadsheet_id implicit, so it only partially compensates for the schema gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the resource (comments on a Google Spreadsheet) and lists specific actions (create, reply, resolve), making the tool's purpose concrete. This also distinguishes it from sibling comment tools for documents and presentations.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives action-specific requirements, such as needing comment_content for create and comment_id for reply/resolve, and adds an API limitation note. However, it does not explicitly say when to prefer this tool over siblings like list_spreadsheet_comments or manage_document_comment, so usage guidance is mostly implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
manage_taskManage TaskADestructive
Manage tasks: create, update, delete, or move tasks within task lists.
| Name | Required | Description | Default |
|---|---|---|---|
| due | No | Due date in RFC 3339 format (e.g., "2024-12-31T23:59:59Z"). Used by "create" and "update" actions. | |
| notes | No | Notes/description for the task. Used by "create" and "update" actions. | |
| title | No | The title of the task. Required for "create", optional for "update". | |
| action | Yes | The action to perform. Must be one of: "create", "update", "delete", "move". | |
| parent | No | Parent task ID (for subtasks). Used by "create" and "move" actions. | |
| status | No | Task status ("needsAction" or "completed"). Used by "update" action. | |
| task_id | No | The ID of the task. Required for "update", "delete", and "move" actions. | |
| previous | No | Previous sibling task ID (for positioning). Used by "create" and "move" actions. | |
| task_list_id | Yes | The ID of the task list. Required for all actions. | |
| user_google_email | Yes | The user's Google email address. Required. | |
| destination_task_list | No | Destination task list ID (for moving between lists). Used by "move" action. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and readOnlyHint=false, so the bar for extra disclosure is lower. The description adds the operation set, but most of that detail is also in the schema's action parameter. It does not disclose additional consequences (e.g., whether delete is permanent, how move affects position), though annotations mitigate the safety gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is one efficient sentence, front-loading the resource and all key operations. It wastes no words and is easy to scan, making it highly usable for an agent quickly assessing the tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is complex (11 parameters, 4 action modes), but the schema is exhaustive and an output schema exists. The description provides the high-level operation overview while the schema and annotations supply detailed constraints, so nothing critical is missing for invoking the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description does not add meaning beyond the schema; each parameter is already thoroughly documented with per-action usage notes (e.g., 'Used by "create" and "update"'). No additional semantic value is contributed by the description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states the resource ('tasks') and enumerates four concrete actions ('create, update, delete, or move tasks within task lists'), which clearly distinguishes it from siblings like 'list_tasks' or 'get_task'. It goes beyond a generic verb by naming the specific operations, making the tool's scope immediately obvious.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description clearly conveys the tool is for mutating tasks (create/update/delete/move), implying it should be used over read-only alternatives such as 'list_tasks' and 'get_task'. It does not explicitly name those alternatives or say when not to use this tool, so it falls short of a 5, but the action list provides clear usage context.
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 ListBDestructive
Manage task lists: create, update, delete, or clear completed tasks.
| Name | Required | Description | Default |
|---|---|---|---|
| title | No | The title for the task list. Required for "create" and "update" actions. | |
| action | Yes | The action to perform. Must be one of: "create", "update", "delete", "clear_completed". | |
| task_list_id | No | The ID of the task list. Required for "update", "delete", and "clear_completed" actions. | |
| user_google_email | Yes | The user's Google email address. Required. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, destructiveHint=true, idempotentHint=false, and openWorldHint=true, so the agent knows this is a mutating, potentially destructive operation. The description adds the specific actions, including 'clear completed tasks,' which implies destructive behavior. However, it doesn't disclose details like whether delete is permanent, whether clear_completed is irreversible, or any side effects. With annotations covering the safety profile, a 3 is appropriate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence that front-loads the verb and resource, then lists the four actions compactly. It earns its place with no filler. It could be slightly more structured (e.g., separating the action list), but it's efficient and readable.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has an output schema, so return values are covered elsewhere. The description plus schema covers the four actions and their required parameters. However, it lacks guidance on edge cases like what happens when title is provided for delete/clear_completed, or whether update requires both title and task_list_id. Given the tool's moderate complexity and the presence of annotations and output schema, the description is adequate but not complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all four parameters, including which are required for which actions. The description adds no additional parameter-level meaning beyond the action list, which is already in the schema's enum-like description. Baseline 3 is correct when the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a clear verb ('Manage') and resource ('task lists') and enumerates the four actions: create, update, delete, or clear completed tasks. It distinguishes itself from sibling tools like list_task_lists, list_tasks, and manage_task by focusing on the task list level rather than individual tasks. However, it doesn't explicitly name a sibling or contrast itself, so it's clear but not fully differentiated.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage by listing the actions, and the schema's required parameters and per-action requirements provide some guidance. However, there is no explicit statement about when to use this tool versus alternatives like manage_task or list_task_lists, and no mention of prerequisites (e.g., needing an existing task list ID for update/delete/clear_completed). The context is adequate but not explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
modify_doc_textModify Doc TextADestructive
Modifies text in a Google Doc - can insert/replace text and/or apply formatting in a single operation.
TIP: To append text to the end of the document without calculating indices, set end_of_segment=true. This avoids index calculation errors.
For ordinary header/footer text, prefer update_doc_headers_footers. Only pass segment_id when you already have a real header/footer/footnote segment ID from inspect_doc_structure output. Do not guess IDs such as "kix.header" or "kix.footer".
| Name | Required | Description | Default |
|---|---|---|---|
| bold | No | Whether to make text bold (True/False/None to leave unchanged) | |
| text | No | New text to insert or replace with (optional - can format existing text without changing it) | |
| italic | No | Whether to make text italic (True/False/None to leave unchanged) | |
| tab_id | No | Optional document tab ID to target | |
| link_url | No | Hyperlink URL (http/https) | |
| end_index | No | End position for text replacement/formatting (if not provided with text, text is inserted) | |
| font_size | No | Font size in points | |
| underline | No | Whether to underline text (True/False/None to leave unchanged) | |
| clear_link | No | Remove hyperlink from the target range | |
| segment_id | No | Optional header/footer/footnote segment ID to target | |
| small_caps | No | Whether to apply small caps | |
| text_color | No | Foreground text color (#RRGGBB) | |
| document_id | Yes | ID of the document to update | |
| font_family | No | Font family name (e.g., "Arial", "Times New Roman") | |
| font_weight | No | Font weight (100-900 in steps of 100; requires font_family) | |
| start_index | Yes | Start position for operation using Docs API indices from inspect_doc_structure. For the main body, 0 is also accepted as an alias for the first writable position. | |
| strikethrough | No | Whether to strike through text (True/False/None to leave unchanged) | |
| end_of_segment | No | Insert text at the end of the targeted segment instead of start_index | |
| baseline_offset | No | One of NONE, SUPERSCRIPT, SUBSCRIPT | |
| background_color | No | Background/highlight color (#RRGGBB) | |
| user_google_email | Yes | User's Google email address |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already signal mutation and destructiveness, and the description adds useful context: a single operation can combine text insertion/replacement with formatting, and end_of_segment avoids index calculation errors. The segment_id warning adds a safeguard about where IDs must come from. The description doesn't enumerate every destructive consequence, but 'replace' plus destructiveHint covers the core risk.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is four sentences with no filler. The main capability is front-loaded, followed by a practical tip and two targeted warnings. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 21-parameter mutating tool, the description covers the main operations, a common failure mode, and the sensitive segment_id case, while the output schema handles return details. It does not explicitly explain deletion via empty-text replacement or all parameter combinations, but the schema covers those mechanics. Overall this is solid but not exhaustive.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
All 21 parameters have schema descriptions, so the baseline is 3. The description adds genuinely non-obvious guidance: end_of_segment=true avoids index calculation errors, and segment_id should only come from inspect_doc_structure output, not guessed values. This goes beyond what the schema property descriptions provide.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: 'Modifies text in a Google Doc.' It clearly distinguishes the tool's capabilities by naming insert, replace, and formatting in a single operation, and the header/footer note helps separate it from update_doc_headers_footers.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly routes ordinary header/footer text to update_doc_headers_footers and warns against passing guessed segment IDs. It also gives concrete when-to-use advice for end_of_segment=true, making the selection and invocation guidance direct.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
modify_gmail_message_labelsModify Gmail Message LabelsADestructive
Adds or removes labels from a Gmail message. To archive an email, remove the INBOX label. To delete an email, add the TRASH label.
| Name | Required | Description | Default |
|---|---|---|---|
| message_id | Yes | The ID of the message to modify. | |
| add_label_ids | No | List of label IDs to add to the message. | |
| remove_label_ids | No | List of label IDs to remove from the message. | |
| user_google_email | Yes | The user's Google email address. Required. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and readOnlyHint=false, so the description is not contradicting them. The description adds value by explaining the side effects of specific label choices (removing INBOX archives, adding TRASH deletes), which is meaningful behavioral context beyond the raw annotation. However, it does not mention that changes are immediate, whether label removal can permanently delete messages, or any permissions/user-consent implications. With annotations present, the description's additional behavioral detail earns a 3 rather than lower.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and front-loaded with the core action. The two example sentences are useful and non-redundant. It could be slightly improved by adding a sentence on label ID format, but the current length is appropriate and every sentence serves a purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-message label modification tool, the description is fairly complete: it states the action, gives the two most important use cases, and annotations cover the destructive nature. The output schema exists (though not shown) which may cover return values. It could have mentioned the relationship to batch_modify_gmail_message_labels and that custom label IDs are allowed, but the essentials are present.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema covers 100% of parameters with descriptions, so the baseline is 3. The description's examples imply the meaning of add_label_ids and remove_label_ids but do not add technical details like label ID format (e.g., 'INBOX', 'TRASH', custom ID). Since the schema already documents all parameters, the description does not need to compensate for gaps; it just doesn't add much beyond the examples.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific action ('Adds or removes labels from a Gmail message') and immediately provides two concrete operational examples (archiving via removing INBOX, deleting via adding TRASH). This clearly distinguishes the tool from siblings like manage_gmail_label (which manages label definitions) and batch_modify_gmail_message_labels (which operates on multiple messages).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives explicit usage context for common operations (archive and delete), which helps the agent understand when to use this tool. However, it does not explicitly mention when to prefer batch_modify_gmail_message_labels over this single-message tool, nor does it state any exclusions for when not to use it. The practical examples imply usage well but leave the single-vs-batch distinction implicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
modify_sheet_valuesModify Sheet ValuesADestructive
Modifies values in a specific range of a Google Sheet - can write, update, or clear values.
| Name | Required | Description | Default |
|---|---|---|---|
| values | No | 2D array of values to write/update. Can be a JSON string or Python list. Required unless clear_values=True. | |
| range_name | Yes | The range to modify (e.g., "Sheet1!A1:D10", "A1:D10"). Required. | |
| clear_values | No | If True, clears the range instead of writing values. Defaults to False. | |
| spreadsheet_id | Yes | The ID of the spreadsheet. Required. | |
| user_google_email | Yes | The user's Google email address. Required. | |
| value_input_option | No | How to interpret input values ("RAW" or "USER_ENTERED"). Defaults to "USER_ENTERED". | USER_ENTERED |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false and destructiveHint=true, so the safety profile is covered. The description adds the specific 'clear values' behavior, which gives concrete meaning to the destructive hint. It doesn't warn that writing overwrites existing cell content in the range, but since the annotations carry the mutation/destruction burden, the description does not seriously underdeliver here.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single 17-word sentence that front-loads the main action ('Modifies values in a specific range of a Google Sheet') and completes with an efficient enumeration of modes. Zero filler; every part of the sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given an existing output schema, full parameter coverage in the schema, and annotations that disclose the destructive write profile, the description is nearly complete for an agent to call the tool correctly. The only gap is an explicit statement that writing overwrites existing values in the target range, though 'write/update' strongly implies this. This is a minor omission, not a blocking one.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% — all 6 parameters (values, range_name, clear_values, spreadsheet_id, user_google_email, value_input_option) have their own descriptions. The tool description adds no parameter-level detail, but none is needed because the schema already carries the semantic burden, which matches the baseline-3 rule.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Modifies') and a specific resource ('values in a specific range of a Google Sheet'), then enumerates the modes 'write, update, or clear values.' This distinguishes it from the read-only sibling read_sheet_values by its action semantics. However, no sibling is explicitly named or contrasted, so it stops short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The three modes (write, update, clear) imply when the tool should be used, and an agent can infer it is the write counterpart to read_sheet_values. But there is no explicit when-to-use guidance, no exclusion like 'for reading use read_sheet_values instead,' and no mention of prerequisites such as the target sheet/tab needing to exist.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
move_sheet_rowsMove Sheet RowsADestructive
Moves rows from one sheet to another within the same spreadsheet. The move is performed in a single batchUpdate (copyPaste followed by deleteDimension). Note: batchUpdate executes requests sequentially but does not roll back on partial failure — if the copy succeeds but the delete fails, rows may be duplicated. Formulas, data types, and formatting are preserved (unlike a values.get/append round-trip). Row numbers are 1-based (matching the spreadsheet UI).
| Name | Required | Description | Default |
|---|---|---|---|
| end_row | Yes | Last row to move (1-based, inclusive). Required. | |
| start_row | Yes | First row to move (1-based, inclusive). Required. | |
| source_sheet | Yes | Name of the sheet to move rows from. Required. | |
| spreadsheet_id | Yes | The ID of the spreadsheet. Required. | |
| destination_sheet | Yes | Name of the sheet to move rows to. Required. | |
| user_google_email | Yes | The user's Google email address. Required. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description goes well beyond the annotations by revealing the batchUpdate sequence (copyPaste then deleteDimension), the lack of rollback on partial failure, and the risk of duplication if only the delete fails. It also discloses that formulas, data types, and formatting are preserved, and clarifies 1-based row indexing. This is rich, non-obvious behavioral detail that materially affects invocation and outcome expectations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and front-loaded with the primary action, followed by implementation detail, a critical failure caveat, and a preservation note. Every sentence conveys essential operational or behavioral information without fluff. The structure allows an agent to quickly grasp what the tool does and what risks to anticipate.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutation tool with destructive annotations and an output schema, the description covers the critical behavioral aspects: execution mechanism, failure semantics, preservation guarantees, and row indexing. It does not explicitly mention prerequisites such as the destination sheet needing to exist or constraints like source and destination differing, but these are less critical given the schema and output schema already provide structure. Overall, enough context is present for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all six parameters including the 1-based and inclusive nature of start_row and end_row. The description adds minimal parameter-level value beyond reaffirming 1-based row numbers and noting rows are moved within the same spreadsheet. This matches the baseline of 3 for full schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action: 'Moves rows from one sheet to another within the same spreadsheet.' This is a specific verb and resource, distinct from typical read/write tools. However, it does not explicitly name a sibling tool for differentiation, instead relying on the phrase 'unlike a values.get/append round-trip' to contrast with an approach rather than a specific named alternative.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage context is implied rather than explicit. The description explains that formatting and formulas are preserved 'unlike a values.get/append round-trip,' which hints at when this tool is preferable, but it does not state clear when-to-use vs. when-not-to-use conditions or name alternatives. An agent must infer that this tool is for full-fidelity moves within the same spreadsheet.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
query_freebusyQuery FreebusyBRead-onlyIdempotent
Returns free/busy information for a set of calendars.
| Name | Required | Description | Default |
|---|---|---|---|
| time_max | Yes | The end of the interval for the query in RFC3339 format (e.g., '2024-05-12T18:00:00Z' or '2024-05-12'). | |
| time_min | Yes | The start of the interval for the query in RFC3339 format (e.g., '2024-05-12T10:00:00Z' or '2024-05-12'). | |
| calendar_ids | No | List of calendar identifiers to query. If not provided, queries the primary calendar. Use 'primary' for the user's primary calendar or specific calendar IDs obtained from `list_calendars`. | |
| user_google_email | Yes | The user's Google email address. Required. | |
| group_expansion_max | No | Maximum number of calendar identifiers to be provided for a single group. Optional. An error is returned for a group with more members than this value. Maximum value is 100. | |
| calendar_expansion_max | No | Maximum number of calendars for which FreeBusy information is to be provided. Optional. Maximum value is 50. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already fully cover the behavioral profile (readOnlyHint=true, openWorldHint=true, idempotentHint=true, destructiveHint=false), so the description has a low bar to clear. It adds no behavioral context beyond the annotations, such as group expansion error behavior or primary-calendar fallback, but it does not contradict them either.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single declarative sentence with the verb front-loaded and zero filler. Every word earns its place, and the description is appropriately minimal given that the schema and annotations carry the operational detail.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The output schema explains return values, the schema documents all parameters with high coverage, and annotations cover the safety profile. The main gap is the absence of usage-selection guidance distinguishing this from get_events and list_calendars, which matters for a calendar tool with 6 parameters.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%: every one of the 6 parameters has a substantive description, including RFC3339 format examples (time_min/time_max), defaults (calendar_ids), and max bounds (group_expansion_max=100, calendar_expansion_max=50). Per the baseline rule, a 3 is appropriate; the tool description itself adds no parameter detail.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Returns') and resource ('free/busy information for a set of calendars'), which is unambiguous about what the tool does. The concept of free/busy is distinct from sibling calendar tools like get_events or list_calendars, so an agent can differentiate it, though no sibling is named explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to choose query_freebusy over alternatives like get_events or list_calendars, and no exclusions or prerequisites are stated. An agent must infer the selection criteria purely from the resource name.
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 ValuesBRead-onlyIdempotent
Reads values from a specific range in a Google Sheet.
| Name | Required | Description | Default |
|---|---|---|---|
| range_name | No | The range to read (e.g., "Sheet1!A1:D10", "A1:D10"). Defaults to "A1:Z1000". Open-ended or oversized ranges are clamped to at most 1000 rows before the Sheets API request to bound memory use. | A1:Z1000 |
| include_notes | No | If True, also fetch cell notes for the range. Defaults to False to avoid expensive includeGridData requests. | |
| spreadsheet_id | Yes | The ID of the spreadsheet. Required. | |
| include_formulas | No | If True, also fetch raw formula strings for cells that contain formulas. Useful for identifying cross-sheet references before writing back to a range. Defaults to False to avoid an extra API request. | |
| user_google_email | Yes | The user's Google email address. Required. | |
| include_hyperlinks | No | If True, also fetch hyperlink metadata for the range. Defaults to False to avoid expensive includeGridData requests. | |
| include_smart_chips | No | If True, also fetch smart chips metadata (Drive files/folders and People chips) for the range. Defaults to False to avoid expensive includeGridData requests. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, idempotentHint, and destructiveHint false, so the safety profile is covered. However, the description itself adds no behavioral detail beyond the read-only intent; it does not mention range clamping to 1000 rows or the cost implications of include_* flags at the tool level. It is consistent with the annotations, so there is no contradiction.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single clear sentence with no filler and the purpose is front-loaded. However, it is so minimal that it contributes little beyond the title and does not use available space to provide selection context.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the rich schema, output schema, and annotations, the description is sufficient for invocation once the tool is selected. But with many sibling tools, the description alone does not fully support correct tool selection; it lacks guidance on when to read values versus inspecting spreadsheet metadata or modifying values.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema description coverage is 100%, with detailed documentation for all seven parameters, including defaults, required fields, clamping behavior, and cost warnings. The tool description adds no new semantic information about parameters beyond the vague notion of a "specific range," so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies a read operation (verb "reads") targeting cell values in a specific range of a Google Sheet. This differentiates it from sibling write tools like modify_sheet_values and metadata tools like get_spreadsheet_info. It is specific enough to be actionable and not a mere tautology.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no explicit when-to-use, when-not, or alternative-tool guidance. The description only states what the tool does, leaving an agent to infer when to choose it over related tools such as get_spreadsheet_info or modify_sheet_values.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
resize_sheet_dimensionsResize Sheet DimensionsBDestructive
Manages sheet-level dimension properties: resize columns/rows, auto-resize to fit content, freeze rows/columns, hide/unhide rows/columns, and insert/delete rows/columns.
| Name | Required | Description | Default |
|---|---|---|---|
| hide_rows | No | List of 1-based row numbers to hide. Example: [3, 4]. | |
| row_sizes | No | Dict mapping 1-based row numbers to pixel heights. Example: {"1": 40, "3": 60}. Can be a JSON string or Python dict. | |
| sheet_name | No | Sheet name to target. Defaults to the first sheet if not provided. | |
| delete_rows | No | List of 1-based row numbers to delete. Example: [5, 6]. Best for non-contiguous rows. | |
| insert_rows | No | Number of rows to insert. | |
| unhide_rows | No | List of 1-based row numbers to unhide. Example: [3, 4]. | |
| column_sizes | No | Dict mapping column letters to pixel widths. Example: {"A": 200, "C": 300}. Can be a JSON string or Python dict. | |
| hide_columns | No | List of column letters to hide. Example: ["C", "D"]. | |
| delete_columns | No | List of column letters to delete. Example: ["E", "F"]. | |
| insert_columns | No | Number of columns to insert. | |
| insert_rows_at | No | 1-based row number to insert before. Appends to the end of the sheet if omitted. | |
| spreadsheet_id | Yes | The ID of the spreadsheet. Required. | |
| unhide_columns | No | List of column letters to unhide. Example: ["C", "D"]. | |
| auto_resize_rows | No | List of 1-based row numbers to auto-resize to fit content. Example: [1, 2]. | |
| delete_row_range | No | Contiguous range of rows to delete, as "start:end" (1-based, inclusive). Example: "5:10" deletes rows 5 through 10. More efficient than delete_rows for large contiguous ranges. | |
| frozen_row_count | No | Number of rows to freeze from the top. Use 0 to unfreeze all rows. | |
| insert_columns_at | No | Column letter to insert before (e.g. "C"). Appends to the end if omitted. | |
| user_google_email | Yes | The user's Google email address. Required. | |
| auto_resize_columns | No | List of column letters to auto-resize to fit content. Example: ["A", "B"]. | |
| frozen_column_count | No | Number of columns to freeze from the left. Use 0 to unfreeze all columns. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, readOnlyHint=false, and idempotentHint=false Mkdocs. The description adds a list of operations but does not disclose important behavioral consequences such as irreversible deletion, reference shifts after row/column deletion, or whether combinations of operations are applied atomically. With destructiveHint already present, the description earns little additional transparency credit.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One clean, front-loaded sentence that summarizes the tool's scope with a colon-delimited list of operation families. There is no fluff, repetition, or irrelevant detail. It efficiently tells an agent what the tool can do in a single glance.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has 20 parameters, multiple independent operation families (resize, freeze, hide, insert, delete), and an output schema, the description is adequate for initial selection but not for safe invocation. It does not explain parameter grouping, mutual exclusivity, or edge cases like delete_rows vs. delete_row_range, despite those details living partly in schema descriptions. The overall context is present but not complete enough for a complex tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the input schema already documents all 20 parameters in detail. The description adds only a high-level category list and no parameter-specific meaning. Baseline 3 applies because the schema carries the full burden of parameter documentation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific resource ('sheet-level dimension properties') and enumerates the concrete operations it supports ('resize columns/rows, auto-resize..., freeze..., hide/unhide..., insert/delete...'). This is clearer than a vague 'manages sheets' but the verb 'manages' is broad, and it does not explicitly distinguish itself from sibling tools like format_sheet_range or manage_sheet_tab.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description strongly implies when to use the tool: whenever an agent needs to alter row/column dimensions, freezing, hiding, or insertion/deletion. However, it gives no explicit exclusions or comparisons to alternatives such as format_sheet_range or modify_sheet_values, so an agent must infer the boundary between this tool and similar spreadsheet tools.
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 FunctionCDestructive
Executes a function in a deployed script.
| Name | Required | Description | Default |
|---|---|---|---|
| dev_mode | No | Whether to run latest code vs deployed version | |
| script_id | Yes | The script project ID | |
| parameters | No | Optional list of parameters to pass | |
| deployment_id | No | Optional API Executable deployment ID. When supplied, skips the automatic deployment lookup. When omitted, the versioned API Executable deployment with the highest version number is used. | |
| function_name | Yes | Name of function to execute | |
| user_google_email | Yes | User's email address |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and readOnlyHint=false. The description adds only 'deployed script,' which hints at deployment but does not explain potential side effects, that it runs with the user's credentials, or that it may modify external state. It provides minimal value beyond the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence, which is efficient and front-loaded. It is appropriately concise for stating the core action, though it omits valuable context. The brevity does not hinder readability.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool that executes arbitrary code with 6 parameters, the description is severely under-specified. It does not explain how to obtain script_id, the meaning of parameters, error handling, or safety warnings. While an output schema exists, the description fails to provide the operational context needed for safe and correct usage.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 100% coverage with descriptive parameter definitions. The description adds no additional meaning to any parameters, so it relies entirely on the schema. The baseline of 3 is appropriate since the schema carries the semantic burden.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action: 'Executes a function in a deployed script.' It identifies a specific verb and resource, making the core purpose unambiguous. However, it does not explicitly distinguish itself from sibling tools like manage_script_content or generate_trigger_code, though the action is inherently distinct.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives. It does not mention prerequisites such as having a deployment ID, authentication requirements, or when to set dev_mode. The agent must infer usage context from the schema alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_contactsSearch ContactsBRead-onlyIdempotent
Search contacts by name, email, phone number, or other fields.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | Search query string (searches names, emails, phone numbers). | |
| page_size | No | Maximum number of results to return (default: 30, max: 30). | |
| user_google_email | Yes | The user's Google email address. Required. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already disclose read-only, idempotent, open-world, and non-destructive behavior, so the bar is lower. The description adds scope context (searches personal contacts by name/email/phone) but leaves matching semantics and the ambiguous 'other fields' undefined. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single 10-word sentence with the verb front-loaded and zero wasted words. The description is appropriately sized for the tool's simplicity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The schema and annotations fully cover parameters and safety, and an output schema exists, so return values need no explanation. However, the description misses its key disambiguation role: given the large sibling set with several contact-related tools, an agent gets no help deciding between this and list_contacts or search_directory_people.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all three parameters are already fully documented in the schema. The tool description mostly echoes the query parameter description and adds only the vague 'other fields' extension.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb (Search) and resource (contacts) with explicit searchable fields (name, email, phone number). It is clear and distinguishes itself from list_contacts and get_contact, though it doesn't explicitly differentiate from search_directory_people.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is given on when to use this tool versus alternatives. With close siblings like list_contacts, get_contact, and search_directory_people, an agent receives no help selecting the appropriate tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_customSearch CustomARead-onlyIdempotent
Performs a search using Google Custom Search JSON API.
| Name | Required | Description | Default |
|---|---|---|---|
| q | Yes | The search query. Required. | |
| num | No | Number of results to return (1-10). Defaults to 10. | |
| safe | No | Safe search level. Defaults to "off". | off |
| sites | No | List of sites/domains to restrict search to (e.g., ["example.com", "docs.example.com"]). When provided, results are limited to these sites. | |
| start | No | The index of the first result to return (1-based). Defaults to 1. | |
| country | No | Country code for results (e.g., "countryUS"). | |
| language | No | Language code for results (e.g., "lang_en"). | |
| file_type | No | Filter by file type (e.g., "pdf", "doc"). | |
| search_type | No | Search for images if set to "image". | |
| site_search | No | Restrict search to a specific site/domain. | |
| date_restrict | No | Restrict results by date (e.g., "d5" for past 5 days, "m3" for past 3 months). | |
| user_google_email | Yes | The user's Google email address. Required. | |
| site_search_filter | No | Exclude ("e") or include ("i") site_search results. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, openWorldHint=true, idempotentHint=true, and destructiveHint=false, covering the main safety profile. The description adds no behavioral detail beyond what annotations provide, but it also does not contradict them.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence with no wasted words. It is front-loaded with the core purpose and does not repeat information already present in the schema or annotations.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with 13 parameters, the one-sentence description provides minimal orientation and omits practical context such as quota/auth requirements or the need for a configured Custom Search Engine. The rich schema and output schema compensate partially, but the description could be more helpful.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and the schema documents all 13 parameters with descriptions and defaults. The description itself adds no parameter-level meaning, so the baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb ('Performs a search') and a specific resource ('Google Custom Search JSON API'), which clearly identifies this as a web/custom search tool. It is distinct from sibling search tools like search_gmail_messages, search_drive_files, and search_docs.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives. With many sibling search tools available, an agent receives no explicit or implicit cue about when to choose Google Custom Search over Gmail, Drive, or Docs searches.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_docsSearch DocsBRead-onlyIdempotent
Searches for Google Docs by name using Drive API (mimeType filter).
Returns: str: A formatted list of Google Docs matching the search query.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | ||
| page_size | No | ||
| user_google_email | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, openWorldHint=true, idempotentHint=true, and destructiveHint=false. The description adds useful context about the mimeType filter and return format, but does not disclose pagination, query syntax, or any limitations. With annotations covering the safety profile, a 3 is appropriate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences with no filler. The core action and return type are front-loaded, and every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Even with output schema and annotations available, the description omits essential context such as how the query string should be formatted, the meaning of user_google_email, and the behavior of page_size. For a 3-parameter tool with zero schema descriptions, the definition is incomplete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It only clarifies that 'query' searches by name; it does not explain 'user_google_email' or 'page_size'. The description leaves most parameter semantics to inference.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('searches'), a specific resource ('Google Docs'), and explains the mechanism ('Drive API (mimeType filter)'). This clearly differentiates it from generic Drive file search, although it does not explicitly name a sibling tool.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided about when to use this tool versus alternatives like search_drive_files or list_docs_in_folder. The description only states what the tool does, not when it should be preferred.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_drive_filesSearch Drive FilesARead-onlyIdempotent
Searches for files and folders within a user's Google Drive, including shared drives.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | The search query string. Supports Google Drive search operators. NOTE: Owner-based queries ('user@example.com' in owners) DO NOT WORK in Shared Drives because files are owned by the shared drive itself, not individual users. For recent files by a specific user in Shared Drives, search by modifiedTime and use order_by='modifiedTime desc' instead. | |
| corpora | No | Bodies of items to query (e.g., 'user', 'domain', 'drive', 'allDrives'). If 'drive_id' is specified and 'corpora' is None, it defaults to 'drive'. Otherwise, Drive API default behavior applies. Prefer 'user' or 'drive' over 'allDrives' for efficiency. | |
| detailed | No | Whether to include size, modified time, and link in results. Defaults to True. | |
| drive_id | No | ID of the shared drive to search. If None, behavior depends on `corpora` and `include_items_from_all_drives`. | |
| order_by | No | Sort order. Comma-separated list of sort keys with optional 'desc' modifier. Valid keys: 'createdTime', 'folder', 'modifiedByMeTime', 'modifiedTime', 'name', 'name_natural', 'quotaBytesUsed', 'recency', 'sharedWithMeTime', 'starred', 'viewedByMeTime'. Example: 'modifiedTime desc' or 'folder,modifiedTime desc,name'. Defaults to None (Drive API default ordering). | |
| file_type | No | Restrict results to a specific file type. Accepts a friendly name ('folder', 'document'/'doc', 'spreadsheet'/'sheet', 'presentation'/'slides', 'form', 'drawing', 'pdf', 'shortcut', 'script', 'site', 'jam'/'jamboard') or any raw MIME type string (e.g. 'application/pdf'). Defaults to None (all types). | |
| page_size | No | The maximum number of files to return. Defaults to 10. | |
| page_token | No | Page token from a previous response's nextPageToken to retrieve the next page of results. | |
| include_trashed | No | Whether to include files in the trash. Defaults to False, matching the Drive web UI and `list_drive_items`. Ignored when `query` already contains its own `trashed` clause (`=` or `!=`), which always wins. | |
| user_google_email | Yes | The user's Google email address. Required. | |
| include_items_from_all_drives | No | Whether shared drive items should be included in results. Defaults to True. This is effective when not specifying a `drive_id`. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, covering the safety profile. The description adds the behaviorally relevant scope fact that shared drives are included, which is a meaningful trait beyond the annotations. It does not mention pagination or result truncation, but the schema covers those details, so the bar is lower.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence, front-loaded with the verb and resource, and contains no filler. It earns its place by conveying purpose and shared-drive scope concisely. This is an appropriate size given the rich schema and annotations.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complex 11-parameter schema (100% coverage), the presence of an output schema, and comprehensive annotations, the description does not need to explain return values or parameter details. It provides the essential purpose and the shared-drive nuance. A minor gap is the lack of guidance for choosing search over list operations, but the schema compensates for most missing context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description text adds no parameter-level semantics; all parameter meaning lives in the schema, which is thorough (query operators, order_by keys, file_type aliases, include_trashed precedence). No additional value is needed, but none is provided either.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('searches') and resource ('files and folders'), and qualifies scope with 'including shared drives.' It does not explicitly contrast with list_drive_items or search_docs, but the tool name and query parameter make the search intent clear. It is sufficiently distinct from siblings despite no explicit differentiation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description offers no guidance on when to use search_drive_files versus list_drive_items, list_docs_in_folder, or search_docs, and no exclusions or prerequisites. An agent must infer usage from the tool name and schema, which is insufficient for choosing between similar drive-list tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_gmail_messagesSearch Gmail MessagesARead-onlyIdempotent
Searches messages in a user's Gmail account based on a query. Returns both Message IDs and Thread IDs for each found message, along with Gmail web interface links for manual verification. Supports pagination via page_token parameter.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | The search query. Supports standard Gmail search operators. | |
| page_size | No | The maximum number of messages to return. Defaults to 10. | |
| page_token | No | Token for retrieving the next page of results. Use the next_page_token from a previous response. | |
| include_headers | No | If True, also fetch each message's metadata and include Subject, From, and Date per result. Costs one metadata get per result, grouped into HTTP batches of up to 10, plus retries for transient failures. Defaults to False (output unchanged from prior versions). | |
| user_google_email | Yes | The user's Google email address. Required. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, so the safety profile is covered. The description adds useful behavioral context by stating that results include both Message IDs and Thread IDs plus web interface links, and that pagination is supported via page_token. There is no contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short, front-loaded sentences cover the action, the returned identifiers/links, and pagination. There is no filler, and every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema, strong annotations, and 100% schema parameter coverage, most invocation details are present. However, the description omits any differentiation from related search/retrieval siblings and does not signal that fetching full message content is a separate tool's job, leaving a moderate selection gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and the schema already documents query, page_size, page_token, include_headers, and user_google_email in detail. The description only restates pagination at a high level and adds no semantic detail beyond what the schema already provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Searches') and identifies the resource ('messages in a user's Gmail account'). It also clarifies the high-level output (Message IDs, Thread IDs, web links), but it does not explicitly distinguish this tool from similarly named siblings like search_messages or get_messages.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No when-to-use guidance is provided; the description names no alternatives and gives no conditions for choosing this tool over sibling search or retrieval tools. The closest it comes is mentioning pagination and web links, which are features, not usage criteria.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_messagesSearch MessagesARead-onlyIdempotent
Searches for messages in Google Chat spaces by text content and/or time range.
| Name | Required | Description | Default |
|---|---|---|---|
| query | No | Optional text to search for. If omitted, only time_filter is applied. | |
| space_id | No | Optional space to restrict the search to. | |
| page_size | No | Maximum number of messages to return per space. | |
| max_spaces | No | Maximum number of spaces to search when space_id is not provided (default 10). | |
| time_filter | No | Optional filter using Chat API createTime syntax. Examples: 'createTime > "2026-03-18T00:00:00-03:00"' 'createTime > "2026-03-18T00:00:00-03:00" AND createTime < "2026-03-19T00:00:00-03:00"' | |
| user_google_email | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds the search-scope context (by content and/or time range) but does not disclose multi-space search behavior, pagination limits, or the role of the required user_google_email. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single, front-loaded sentence that names the action, resource, and key filtering dimensions with no filler. Every part contributes to understanding what the tool does.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description plus annotations and schema are mostly sufficient for a read-only search tool, and an output schema exists so return values need no explanation. However, the required user_google_email parameter is undocumented in both the schema and the description, and the multi-space search semantics are not mentioned. A slightly richer description would improve agent confidence.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 83%, so the schema carries most parameter documentation. The description adds a high-level mapping to query and time_filter but doesn't add meaning to user_google_email, space_id, page_size, or max_spaces. Baseline of 3 is appropriate given high schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb ('Searches'), the resource ('messages in Google Chat spaces'), and the filtering dimensions ('text content and/or time range'). It does not explicitly distinguish itself from sibling tools like get_messages, so it stops short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies this tool is for searching rather than listing or sending Chat messages, but it provides no explicit when-to-use guidance, no exclusions, and no reference to alternative sibling tools such as get_messages. Usage context is present only by implication.
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 new emails, replies, and forwards, with optional attachments. Supports Gmail's "Send As" feature to send from configured alias addresses.
To forward an existing message, pass forward_message_id. The original subject, body (quoted with a "Forwarded message" header), and attachments are carried over. In forward mode, body (if any) is prepended as a note and subject is optional. Threading, reply, and signature options do not apply when forwarding.
THIS TOOL SENDS IMMEDIATELY AND CANNOT SCHEDULE. Gmail's REST API exposes no send-time parameter; Schedule send is a web-UI feature with no API equivalent, so no argument to this tool can defer delivery. Never tell a user a message was scheduled. For "prepare now, deliver later", create a draft with draft_gmail_message. An external scheduler must retain the message data to create and send a new message via send_gmail_message at the chosen time, or call users.drafts.send with the draft ID returned by draft_gmail_message. Alternatively, let the user schedule that draft in the Gmail UI.
| Name | Required | Description | Default |
|---|---|---|---|
| cc | No | Optional CC email address. | |
| to | No | Recipient email address. Optional when replying with reply_all=True, which derives it from the thread. | |
| bcc | No | Optional BCC email address. | |
| body | No | Email body content (plain text or HTML). Required when sending. When forwarding, this is an optional note prepended above the quoted original. | |
| subject | No | Email subject. Required when sending; optional when forwarding (defaults to 'Fwd: <original subject>'). | |
| from_name | No | Optional sender display name (e.g., 'Peter Hartree'). If provided, the From header will be formatted as 'Name <email>'. | |
| reply_all | No | Whether to derive reply-all recipients from the thread: To = the sender being replied to, Cc = the other participants, excluding the authenticated account and from_email. Requires thread_id. Explicit to/cc win; when cc is omitted the sender being replied to is added to the derived Cc if they are not already in To. Defaults to false. | |
| thread_id | No | Optional Gmail thread ID to reply within. When in_reply_to is omitted, replies to the latest non-draft, non-trash message with an RFC Message-ID. | |
| from_email | No | Optional 'Send As' alias email address. Must be configured in Gmail settings (Settings > Accounts > Send mail as). If not provided, uses the authenticated user's email. | |
| references | No | Optional Message-ID ancestry chain. Normally omit when thread_id is provided; the server derives the chain through the selected reply target. | |
| attachments | No | Optional list of attachments. Each can have: "url" (fetch from URL — works with MCP attachment URLs from get_drive_file_download_url / get_gmail_attachment_content), OR "path" (file path, auto-encodes), OR "content" (standard base64, not urlsafe) + "filename". Optional "mime_type". Optional "content_id" (string) makes the attachment inline-rendered: it lands in a multipart/related part with `Content-ID: <content_id>` and `Content-Disposition: inline`, and the HTML body can reference it via `<img src="cid:<content_id>">` (RFC 2392). Without `content_id` the attachment is a regular multipart/mixed attachment. Example: [{"url": "https://host/attachments/abc-123", "filename": "report.pdf"}] | |
| body_format | No | Format of the body content (and of the prepended note when forwarding). Use 'plain' for plaintext or 'html' for HTML content. | plain |
| in_reply_to | No | Optional RFC Message-ID to explicitly reply to a specific message (e.g., '<message123@gmail.com>'). Omit to reply to the latest eligible message in thread_id. | |
| quote_original | No | Whether to include the message being replied to as a quoted original. Only has an effect when thread_id is provided. Defaults to false. | |
| include_signature | No | Whether to append the Gmail signature from Settings > Signature when available. Defaults to true. | |
| user_google_email | Yes | The user's Google email address. Required for authentication. | |
| forward_message_id | No | Set to a Gmail message ID to forward that message instead of composing a new one. The original subject, body, and (optionally) attachments are carried over; 'body' becomes an optional note prepended to the forward. | |
| include_forwarded_attachments | No | When forwarding, whether to include the original message's attachments. Ignored unless forward_message_id is set. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Despite annotations indicating readOnlyHint=false and idempotentHint=false, the description goes far beyond them by disclosing the immediate-send behavior, the absence of any API scheduling parameter, and the exact consequences for external schedulers. It also explains forward-mode behavior (subject/body/attachments carried over) and which options do not apply when forwarding. This is rich behavioral context that annotations alone cannot convey.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is long (about 13 sentences), but nearly every sentence earns its place, especially the emphatic scheduling warning and the forward-mode semantics. It is front-loaded with the core purpose and the most critical operational constraint. The length is justified by the tool's complexity (18 parameters, three modes), though a slightly tighter wording could earn a 5.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For an 18-parameter send tool with new/reply/forward modes and a major scheduling caveat, the description covers the key decision points: what the tool does, when to use draft_gmail_message instead, and how forwarding alters parameter semantics. The output schema exists, so the absence of return-value details is acceptable. Only minor omissions (e.g., permission requirements, rate limits) prevent a perfect score.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description adds cross-parameter meaning: in forward mode, body becomes a prepended note and subject becomes optional; threading/reply/signature options are inert when forwarding. This goes beyond the individual parameter descriptions in the schema. It stops short of methodically walking through every parameter interaction, but it adds substantial value for the most complex mode (forward).
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a precise verb and resource: 'Sends an email using the user's Gmail account.' It then lists supported modes (new, reply, forward, attachments, Send As), which clearly distinguishes it from the sibling draft_gmail_message and other Gmail read/label tools. The scope is immediately recognizable and unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly tells agents when NOT to use this tool: scheduling is impossible, and for 'prepare now, deliver later' it names the alternative draft_gmail_message. It also states a hard rule, 'Never tell a user a message was scheduled', preventing a common hallucination. This is exactly the kind of when-to-use / when-not-to-use guidance that is usually missing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
send_messageSend MessageADestructive
Sends a message to a Google Chat space, or edits a message already sent there.
| Name | Required | Description | Default |
|---|---|---|---|
| space_id | Yes | ||
| thread_key | No | Reply in a thread by app-defined key (creates thread if not found). | |
| thread_name | No | Reply in an existing thread by its resource name (e.g. spaces/X/threads/Y). | |
| message_name | No | Edit this message in place instead of sending a new one (e.g. spaces/X/messages/Y, as returned by send_message or get_messages). Must be a message of space_id. Only the text is replaced, and only the author can edit their own message. | |
| message_text | Yes | ||
| user_google_email | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and readOnlyHint=false, so the mutation behavior is known. The description adds the dual send/edit behavior but does not disclose auth needs, rate limits, or consequences beyond the edit operation. It does not contradict the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single 15-word sentence with the action verb front-loaded. It covers both send and edit modes with no filler or redundant detail.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a six-parameter mutation tool with only 50% schema coverage, the description leaves important semantics to inference—especially user_google_email and how the edit mode is triggered via message_name. The output schema and annotations help, but the description alone is not fully self-sufficient.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 50%, with required parameters space_id, message_text, and user_google_email left undocumented. The description only loosely implies space_id and message_text via 'Sends a message to a Google Chat space' and says nothing about user_google_email or message_name, failing to compensate for the schema gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: 'Sends a message to a Google Chat space, or edits a message already sent there.' It clearly separates this tool from sibling readers like get_messages/search_messages and from Gmail's send_gmail_message, since it explicitly scopes to Google Chat.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when the tool should be used (sending or editing Chat messages) but does not explicitly name alternatives or state when not to use it. An agent must infer the contrast with sibling read/search tools from the wording rather than receiving direct guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_drive_file_permissionsSet Drive File PermissionsADestructive
Sets file-level sharing settings and controls link sharing for a Google Drive file or folder.
This is a high-level tool for the most common permission changes. Use this to toggle "anyone with the link" access or configure file-level sharing behavior. For managing individual user/group permissions, use share_drive_file or update_drive_permission instead.
| Name | Required | Description | Default |
|---|---|---|---|
| file_id | Yes | The ID of the file or folder. Required. | |
| link_sharing | No | Control "anyone with the link" access for the file. - "off": Disable "anyone with the link" access for this file. - "reader": Anyone with the link can view. - "commenter": Anyone with the link can comment. - "writer": Anyone with the link can edit. | |
| user_google_email | Yes | The user's Google email address. Required. | |
| writers_can_share | No | Whether editors can change permissions and share. If False, only the owner can share. Defaults to None (no change). | |
| copy_requires_writer_permission | No | Whether viewers and commenters are prevented from copying, printing, or downloading. Defaults to None (no change). |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and readOnlyHint=false, so the description does not need to restate that this mutates state. It adds useful scope (file/folder link sharing, not individual grants), but it does not disclose consequences such as making a file public or private, what happens to existing permissions, or whether owner-level privileges are required.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, with the core action front-loaded and every sentence contributing either purpose or usage routing. There is no fluff, repetition of the schema, or unnecessary qualification.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the rich schema, output schema, and annotations, the description covers purpose, scope, and routing well. The main remaining gaps are that the required user_google_email is not framed in context and there is no prerequisite note about ownership for destructive sharing changes; overall this is above minimum but not exhaustive.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline of 3 applies. The description reinforces the 'link sharing' and 'file-level' context but does not add per-parameter meaning beyond the schema; notably, the role of the required user_google_email is not clarified as acting user versus permission target.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The lead sentence names a specific action ('Sets...'), a specific resource ('file-level sharing settings and ... link sharing'), and the target ('Google Drive file or folder'). It also explicitly separates this from individual user/group permission management, so an agent can tell it apart from nearby permission tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly says to use this tool for toggling link sharing and file-level settings, and directs user/group permission changes to share_drive_file or update_drive_permission instead. However, those named alternatives do not appear in the provided sibling-tool list, while the similar-sounding manage_drive_access does, so the routing is somewhat less actionable than it could be.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_publish_settingsSet Publish SettingsB
Updates the publish settings of a form.
| Name | Required | Description | Default |
|---|---|---|---|
| form_id | Yes | The ID of the form to update publish settings for. | |
| is_published | No | Whether the form is published and visible to responders. Defaults to True. | |
| user_google_email | Yes | The user's Google email address. Required. | |
| is_accepting_responses | No | Whether the form accepts responses. Only takes effect when the form is published. Defaults to True. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already signal a mutating operation (readOnlyHint=false) and non-destructive behavior (destructiveHint=false), so the description does not need to restate that. However, it adds no behavioral context beyond the single word 'Updates'—it does not explain immediate side effects, whether unpublishing affects existing responders, or what the output represents.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is one short, front-loaded sentence with no filler or redundant content. It is concise without sacrificing clarity at the surface level.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a straightforward mutation tool with complete parameter schema coverage, annotations, and an output schema, the description is nearly sufficient. It lacks usage guidance and behavioral specifics, but those are partially offset by the rich structured metadata surrounding the tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and each parameter already has a clear description and defaults. The tool description adds no additional parameter semantics, so the baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Updates') and resource ('publish settings of a form'), making the tool's core purpose immediately understandable. It is not a tautology, though it could more strongly differentiate itself from siblings like batch_update_form or create_form by naming the specific publish-related fields.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided about when to use this tool versus alternatives such as batch_update_form or create_form. There are no prerequisites, exclusions, or conditions for choosing this tool over its siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
start_google_authStart Google AuthA
Manually initiate Google OAuth authentication flow.
NOTE: This is a legacy OAuth 2.0 tool and is disabled when OAuth 2.1 is enabled. The authentication system automatically handles credential checks and prompts for authentication when needed. Only use this tool if:
You need to re-authenticate with different credentials
You want to proactively authenticate before using other tools
The automatic authentication flow failed and you need to retry
In most cases, simply try calling the Google Workspace tool you need - it will automatically handle authentication if required.
| Name | Required | Description | Default |
|---|---|---|---|
| service_name | Yes | ||
| user_google_email | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the minimal annotations, the description discloses that this is a legacy OAuth 2.0 tool, disabled when OAuth 2.1 is enabled, and that authentication is normally handled automatically by the system. It also explains the manual tool's role in re-authentication, proactive auth, and retry scenarios, which is rich behavioral context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured: a clear opening statement, a critical legacy note, a numbered list of use cases, and a closing recommendation. Every sentence carries distinct information without redundancy or filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description thoroughly covers purpose, usage conditions, alternatives, and legacy/automatic behavior, and the output schema can handle return-value documentation. However, it is not fully self-contained because it leaves parameter semantics unexplained, which is a meaningful gap for an agent deciding what to pass as service_name.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 0% parameter description coverage, and the description does not compensate by explaining either parameter. It never names service_name or user_google_email, nor does it clarify expected formats, allowed values, or how to choose the service. The phrase 'different credentials' only weakly hints at user_google_email, leaving the agent to guess at parameter meaning.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Manually initiate Google OAuth authentication flow.' It identifies the specific action and resource, and distinguishes itself from the long sibling list by being the explicit authentication entry point for Google Workspace tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly lists when to use the tool with three concrete conditions and directly advises that in most cases the agent should simply call the needed Google Workspace tool instead. It also covers the failure/retry scenario, making the when-to-use and when-not-to-use guidance unambiguous.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_drive_fileUpdate Drive FileADestructive
Updates metadata, properties, and/or content of a Google Drive file.
Providing new content (inline as content, fetched from file_url, or on a
local server read from a file path) replaces the file's content in place,
preserving the existing file ID, sharing, comments, and links.
For native Google Docs/Sheets/Slides 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.). For any other file (.md, .txt, .pdf, ...)
there is nothing to convert, so the bytes are written back as-is under the file's
own MIME type. Metadata and content can be updated in a single call.
mode='append'/'prepend' splice content onto the file's existing text
server-side, so only the new text has to be supplied — no need to send the whole
file back to rewrite it.
Drive shortcuts are handled according to the kind of update: supported resource-local metadata changes (rename, move, trash, star, description, and custom properties) apply to the supplied shortcut, while content replacement follows the shortcut and updates its target. To avoid applying metadata to the wrong resource, a shortcut call cannot combine content with resource-local metadata. Update the shortcut metadata and target content in separate calls.
| Name | Required | Description | Default |
|---|---|---|---|
| mode | No | How to apply the new content — 'replace' (default), 'append', or 'prepend'. Append/prepend require 'content' and a UTF-8 text file such as .md or .txt; a newline is inserted at the seam if neither side has one. For native Google Docs use insert_doc_elements, modify_doc_text, or find_and_replace_doc, which edit in place instead of rewriting the file. | replace |
| name | No | New name for the file. | |
| content | No | New text content for text-based formats (markdown, TXT, HTML). | |
| file_id | Yes | The ID of the file to update. Required. | |
| starred | No | Whether to star/unstar the file. | |
| trashed | No | Whether to move file to/from trash. | |
| file_url | No | Remote http(s) URL to fetch new content from. | |
| file_path | No | Local file path for binary formats (DOCX, ODT). Supports file:// URLs. | |
| mime_type | No | New MIME type (note: changing type may require content upload). For a shortcut ID, this must accompany content and applies to the resolved target. | |
| properties | No | Custom key-value properties for the file. | |
| add_parents | No | Comma-separated folder IDs to add as parents. | |
| description | No | New description for the file. | |
| source_format | No | Source format hint for conversion (md, markdown, docx, txt, html, rtf, odt). Auto-detected when omitted, and ignored for non-Google files, which are uploaded without conversion. Provide at most one content source. | |
| remove_parents | No | Comma-separated folder IDs to remove from parents. | |
| user_google_email | Yes | The user's Google email address. Required. | |
| writers_can_share | No | Whether editors can share the file. Pass the target ID directly; this cannot be changed on a shortcut resource. | |
| copy_requires_writer_permission | No | Whether copying requires writer permission. Pass the target ID directly; this cannot be changed on a shortcut resource. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Even with annotations already signaling destructive=true, the description adds substantial behavior beyond those flags: content replacement preserves file ID, sharing, comments, and links; native Google files are converted via the same mechanism as import_to_google_doc; append/prepend operate server-side; and shortcut semantics are explained in detail, including the prohibition on mixing content replacement with resource-local metadata.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is long but earns its length: it front-loads the core purpose and then addresses complex behaviors (conversion, append/prepend, shortcuts) in focused paragraphs. It is dense rather than padded, though slightly more structure or explicit headings could help scannability for a 17-parameter tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a high-complexity tool with 17 parameters, the description covers all major behavioral dimensions an agent needs: content replacement semantics, MIME conversion behavior, append/prepend mechanics, shortcut handling, and the one-call metadata-plus-content capability. The output schema and detailed input schema already cover return values and individual parameters, so nothing critical is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description adds cross-parameter meaning that the schema alone does not: it groups content sources (content, file_url, file_path) into one coherent behavior, explains what append/prepend do to the file, and clarifies which parameters apply to shortcut targets versus the shortcut resource itself. This goes beyond individual property descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a precise verb+resource statement: 'Updates metadata, properties, and/or content of a Google Drive file.' It then distinguishes several distinct behaviors (in-place replacement preserving ID, native-format conversion, append/prepend, shortcut handling), so an agent can clearly separate this from siblings like create_drive_file, copy_drive_file, and import_to_google_doc.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear context for when this tool is appropriate, such as replacing content in place while preserving IDs, and when to use one-call metadata-plus-content updates. It also routes native Google Docs edits to sibling tools like insert_doc_elements, modify_doc_text, and find_and_replace_doc via the mode parameter, though that routing lives in the schema rather than the main description.
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 StyleC
Apply paragraph-level formatting, heading styles, and/or list formatting to a range in a Google Doc.
This tool can apply named heading styles (H1-H6) for semantic document structure, create bulleted or numbered lists with nested indentation, and customize paragraph properties like alignment, spacing, and indentation. All operations can be applied in a single call.
| Name | Required | Description | Default |
|---|---|---|---|
| tab_id | No | Optional document tab ID to target | |
| alignment | No | Text alignment - 'START' (left), 'CENTER', 'END' (right), or 'JUSTIFIED' | |
| direction | No | Paragraph direction - 'LEFT_TO_RIGHT' or 'RIGHT_TO_LEFT' | |
| end_index | Yes | End position (exclusive) - should cover the entire paragraph | |
| list_type | No | Create a list from existing paragraphs ('UNORDERED' for bullets, 'ORDERED' for numbers, 'CHECKBOX' for checklists), or 'NONE' to remove existing list formatting from the range. Use 'NONE' when text inserted after a list has inherited its bullets: setting named_style_type or heading_level does not clear list membership, only 'NONE' does. | |
| indent_end | No | Right/end indent in points | |
| segment_id | No | Optional header/footer/footnote segment ID to target | |
| border_dash | No | Border dash style ('SOLID', 'DOT', or 'DASH'; defaults to 'SOLID') | |
| document_id | Yes | Document ID to modify | |
| space_above | No | Space above paragraph in points (e.g., 12 for one line) | |
| space_below | No | Space below paragraph in points | |
| start_index | Yes | Start position using Docs API indices from inspect_doc_structure. For the main body, 0 is also accepted as an alias for the first writable position. | |
| border_color | No | Border color (#RRGGBB; defaults to black) | |
| border_edges | No | Paragraph border edges to update ('top', 'bottom', 'left', 'right', or 'between'); omit to update all four outer edges | |
| border_width | No | Border width in points (defaults to 1) | |
| indent_start | No | Left/start indent in points | |
| line_spacing | No | Line spacing multiplier (1.0 = single, 1.5 = 1.5x, 2.0 = double) | |
| spacing_mode | No | 'NEVER_COLLAPSE' or 'COLLAPSE_LISTS' | |
| bullet_preset | No | Optional explicit Google Docs bullet preset | |
| heading_level | No | Heading level 0-6 (0 = NORMAL_TEXT, 1 = H1, 2 = H2, etc.) Use for semantic document structure | |
| shading_color | No | Paragraph shading/background color (#RRGGBB) | |
| border_padding | No | Border padding in points (defaults to 4) | |
| keep_with_next | No | Keep the paragraph with the next paragraph | |
| named_style_type | No | Direct named style type - 'NORMAL_TEXT', 'TITLE', 'SUBTITLE', 'HEADING_1' through 'HEADING_6'. Mutually exclusive with heading_level. | |
| indent_first_line | No | First line indent in points (e.g., 36 for 0.5 inch) | |
| page_break_before | No | Start the paragraph on a new page | |
| user_google_email | Yes | User's Google email address | |
| list_nesting_level | No | Nesting level for lists (0-8, where 0 is top level, default is 0) Use higher levels for nested/indented list items | |
| keep_lines_together | No | Keep all lines of the paragraph together | |
| avoid_widow_and_orphan | No | Avoid widows/orphans for the paragraph |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate this is a mutation (readOnlyHint false) and not idempotent. The description adds no behavioral detail beyond that—it does not mention whether existing formatting is overwritten or merged, or any side effects. It simply states 'apply', which is consistent with annotations but adds no extra transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise, with the main purpose stated first and a brief list of capabilities. It is efficient and front-loaded, though it could be slightly more structured by separating the capabilities from the general action.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (30 parameters, mutation, output schema exists), the description is adequate but sparse. It doesn't mention prerequisites like needing indices from inspect_doc_structure, nor does it differentiate between heading_level and named_style_type. The parameter schemas cover details, but the overall usage context is thin.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so each parameter already has a detailed description. The tool description does not add any parameter-specific meaning beyond what the schema provides, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb (apply) and resource (paragraph-level formatting to a range in Google Doc), and enumerates specific capabilities (heading styles, lists, alignment, spacing, indentation). It is specific enough to distinguish from text modification tools like modify_doc_text, though it does not explicitly name an alternative.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives such as batch_update_doc or insert_doc_elements. It only mentions that all operations can be applied in a single call, which is a minor efficiency note but not usage direction.
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.
87 tool updates
v1.28.0- Changed
batch_update_doc1 field changed- changed
Input schema / properties / operations / items / oneOfPrevious value: -[ - { - "additionalProperties": false, - "properties": { - "after_heading": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "Insert immediately after the heading paragraph with this exact text, resolved to an index at execution time. Errors when it matches zero or more than one heading." - }, - "anchor_position": { - "default": "after", - "description": "Which side of anchor_text to insert on. Defaults to 'after'.", - "enum": [ - "before", - "after" - ], - "type": "string" - }, - "anchor_text": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "Insert relative to this literal text, which must occur exactly once within a single paragraph. Use anchor_position to pick which side." - }, - "before_heading": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "Insert immediately before the heading paragraph with this exact text. Errors when it matches zero or more than one heading." - }, - "end_of_segment": { - "default": false, - "description": "Append to the end of the targeted body/segment instead of using index.", - "type": "boolean" - }, - "index": { - "anyOf": [ - { - "type": "integer" - }, - { - "type": "null" - } - ], - "default": null, - "description": "Insertion index. Omit when end_of_segment=true." - }, - "segment_id": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "Optional header/footer/footnote segment ID. Use a real ID returned by inspect_doc_structure; do not guess values like 'kix.header'." - }, - "tab_id": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "Optional document tab ID to target." - }, - "text": { - "description": "Text to insert.", - "type": "string" - }, - "type": { - "const": "insert_text", - "type": "string" - } - }, - "required": [ - "type", - "text" - ], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "end_index": { - "type": "integer" - }, - "segment_id": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "Optional header/footer/footnote segment ID. Use a real ID returned by inspect_doc_structure; do not guess values like 'kix.header'." - }, - "start_index": { - "type": "integer" - }, - "tab_id": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "Optional document tab ID to target." - }, - "type": { - "const": "delete_text", - "type": "string" - } - }, - "required": [ - "type", - "start_index", - "end_index" - ], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "end_index": { - "type": "integer" - }, - "segment_id": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "Optional header/footer/footnote segment ID. Use a real ID returned by inspect_doc_structure; do not guess values like 'kix.header'." - }, - "start_index": { - "type": "integer" - }, - "tab_id": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "Optional document tab ID to target." - }, - "text": { - "description": "Replacement text.", - "type": "string" - }, - "type": { - "const": "replace_text", - "type": "string" - } - }, - "required": [ - "type", - "start_index", - "end_index", - "text" - ], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "background_color": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - }, - "baseline_offset": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - }, - "bold": { - "anyOf": [ - { - "type": "boolean" - }, - { - "type": "null" - } - ], - "default": null - }, - "clear_link": { - "anyOf": [ - { - "type": "boolean" - }, - { - "type": "null" - } - ], - "default": null - }, - "end_index": { - "type": "integer" - }, - "font_family": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - }, - "font_size": { - "anyOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ], - "default": null - }, - "font_weight": { - "anyOf": [ - { - "type": "integer" - }, - { - "type": "null" - } - ], - "default": null - }, - "italic": { - "anyOf": [ - { - "type": "boolean" - }, - { - "type": "null" - } - ], - "default": null - }, - "link_url": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - }, - "segment_id": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "Optional header/footer/footnote segment ID. Use a real ID returned by inspect_doc_structure; do not guess values like 'kix.header'." - }, - "small_caps": { - "anyOf": [ - { - "type": "boolean" - }, - { - "type": "null" - } - ], - "default": null - }, - "start_index": { - "type": "integer" - }, - "strikethrough": { - "anyOf": [ - { - "type": "boolean" - }, - { - "type": "null" - } - ], - "default": null - }, - "tab_id": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "Optional document tab ID to target." - }, - "text_color": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - }, - "type": { - "const": "format_text", - "type": "string" - }, - "underline": { - "anyOf": [ - { - "type": "boolean" - }, - { - "type": "null" - } - ], - "default": null - } - }, - "required": [ - "type", - "start_index", - "end_index" - ], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "alignment": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - }, - "avoid_widow_and_orphan": { - "anyOf": [ - { - "type": "boolean" - }, - { - "type": "null" - } - ], - "default": null - }, - "border_color": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - }, - "border_dash": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - }, - "border_edges": { - "anyOf": [ - { - "items": { - "enum": [ - "top", - "bottom", - "left", - "right", - "between" - ], - "type": "string" - }, - "minItems": 1, - "type": "array" - }, - { - "type": "null" - } - ], - "default": null, - "description": "Paragraph border edges to update; omit to update top, bottom, left, and right." - }, - "border_padding": { - "anyOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ], - "default": null - }, - "border_width": { - "anyOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ], - "default": null - }, - "direction": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - }, - "end_index": { - "type": "integer" - }, - "heading_level": { - "anyOf": [ - { - "type": "integer" - }, - { - "type": "null" - } - ], - "default": null - }, - "indent_end": { - "anyOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ], - "default": null - }, - "indent_first_line": { - "anyOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ], - "default": null - }, - "indent_start": { - "anyOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ], - "default": null - }, - "keep_lines_together": { - "anyOf": [ - { - "type": "boolean" - }, - { - "type": "null" - } - ], - "default": null - }, - "keep_with_next": { - "anyOf": [ - { - "type": "boolean" - }, - { - "type": "null" - } - ], - "default": null - }, - "line_spacing": { - "anyOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ], - "default": null - }, - "named_style_type": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - }, - "page_break_before": { - "anyOf": [ - { - "type": "boolean" - }, - { - "type": "null" - } - ], - "default": null - }, - "segment_id": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "Optional header/footer/footnote segment ID. Use a real ID returned by inspect_doc_structure; do not guess values like 'kix.header'." - }, - "shading_color": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - }, - "space_above": { - "anyOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ], - "default": null - }, - "space_below": { - "anyOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ], - "default": null - }, - "spacing_mode": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - }, - "start_index": { - "type": "integer" - }, - "tab_id": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "Optional document tab ID to target." - }, - "type": { - "const": "update_paragraph_style", - "type": "string" - } - }, - "required": [ - "type", - "start_index", - "end_index" - ], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "background_color": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - }, - "border_color": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - }, - "border_edges": { - "anyOf": [ - { - "items": { - "enum": [ - "top", - "bottom", - "left", - "right" - ], - "type": "string" - }, - "minItems": 1, - "type": "array" - }, - { - "type": "null" - } - ], - "default": null, - "description": "Table-cell border edges to update; omit to update all four edges." - }, - "border_width": { - "anyOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ], - "default": null - }, - "column_index": { - "anyOf": [ - { - "type": "integer" - }, - { - "type": "null" - } - ], - "default": null - }, - "column_span": { - "anyOf": [ - { - "type": "integer" - }, - { - "type": "null" - } - ], - "default": null - }, - "content_alignment": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - }, - "padding_bottom": { - "anyOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ], - "default": null - }, - "padding_left": { - "anyOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ], - "default": null - }, - "padding_right": { - "anyOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ], - "default": null - }, - "padding_top": { - "anyOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ], - "default": null - }, - "row_index": { - "anyOf": [ - { - "type": "integer" - }, - { - "type": "null" - } - ], - "default": null - }, - "row_span": { - "anyOf": [ - { - "type": "integer" - }, - { - "type": "null" - } - ], - "default": null - }, - "tab_id": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "Optional document tab ID to target." - }, - "table_start_index": { - "type": "integer" - }, - "type": { - "const": "update_table_cell_style", - "type": "string" - } - }, - "required": [ - "type", - "table_start_index" - ], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "after_heading": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "Insert immediately after the heading paragraph with this exact text, resolved to an index at execution time. Errors when it matches zero or more than one heading." - }, - "anchor_position": { - "default": "after", - "description": "Which side of anchor_text to insert on. Defaults to 'after'.", - "enum": [ - "before", - "after" - ], - "type": "string" - }, - "anchor_text": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "Insert relative to this literal text, which must occur exactly once within a single paragraph. Use anchor_position to pick which side." - }, - "before_heading": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "Insert immediately before the heading paragraph with this exact text. Errors when it matches zero or more than one heading." - }, - "columns": { - "type": "integer" - }, - "end_of_segment": { - "default": false, - "description": "Append to the end of the targeted body/segment instead of using index.", - "type": "boolean" - }, - "index": { - "anyOf": [ - { - "type": "integer" - }, - { - "type": "null" - } - ], - "default": null, - "description": "Insertion index. Omit when end_of_segment=true." - }, - "rows": { - "type": "integer" - }, - "segment_id": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "Optional header/footer/footnote segment ID. Use a real ID returned by inspect_doc_structure; do not guess values like 'kix.header'." - }, - "tab_id": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "Optional document tab ID to target." - }, - "type": { - "const": "insert_table", - "type": "string" - } - }, - "required": [ - "type", - "rows", - "columns" - ], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "insert_below": { - "default": true, - "type": "boolean" - }, - "row_index": { - "type": "integer" - }, - "tab_id": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "Optional document tab ID to target." - }, - "table_start_index": { - "type": "integer" - }, - "type": { - "const": "insert_table_row", - "type": "string" - } - }, - "required": [ - "type", - "table_start_index", - "row_index" - ], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "row_index": { - "type": "integer" - }, - "tab_id": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "Optional document tab ID to target." - }, - "table_start_index": { - "type": "integer" - }, - "type": { - "const": "delete_table_row", - "type": "string" - } - }, - "required": [ - "type", - "table_start_index", - "row_index" - ], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "column_index": { - "type": "integer" - }, - "insert_right": { - "default": true, - "type": "boolean" - }, - "tab_id": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "Optional document tab ID to target." - }, - "table_start_index": { - "type": "integer" - }, - "type": { - "const": "insert_table_column", - "type": "string" - } - }, - "required": [ - "type", - "table_start_index", - "column_index" - ], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "column_index": { - "type": "integer" - }, - "tab_id": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "Optional document tab ID to target." - }, - "table_start_index": { - "type": "integer" - }, - "type": { - "const": "delete_table_column", - "type": "string" - } - }, - "required": [ - "type", - "table_start_index", - "column_index" - ], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "column_index": { - "type": "integer" - }, - "column_span": { - "type": "integer" - }, - "row_index": { - "type": "integer" - }, - "row_span": { - "type": "integer" - }, - "tab_id": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "Optional document tab ID to target." - }, - "table_start_index": { - "type": "integer" - }, - "type": { - "const": "merge_table_cells", - "type": "string" - } - }, - "required": [ - "type", - "table_start_index", - "row_index", - "column_index", - "row_span", - "column_span" - ], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "column_index": { - "type": "integer" - }, - "column_span": { - "type": "integer" - }, - "row_index": { - "type": "integer" - }, - "row_span": { - "type": "integer" - }, - "tab_id": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "Optional document tab ID to target." - }, - "table_start_index": { - "type": "integer" - }, - "type": { - "const": "unmerge_table_cells", - "type": "string" - } - }, - "required": [ - "type", - "table_start_index", - "row_index", - "column_index", - "row_span", - "column_span" - ], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "column_indices": { - "items": { - "type": "integer" - }, - "type": "array" - }, - "tab_id": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "Optional document tab ID to target." - }, - "table_start_index": { - "type": "integer" - }, - "type": { - "const": "update_table_column_properties", - "type": "string" - }, - "width": { - "anyOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ], - "default": null - }, - "width_type": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - } - }, - "required": [ - "type", - "table_start_index", - "column_indices" - ], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "min_row_height": { - "anyOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ], - "default": null, - "description": "Minimum row height in points." - }, - "row_indices": { - "description": "Zero-based row indices to style, e.g. [0] for the header row.", - "items": { - "type": "integer" - }, - "type": "array" - }, - "tab_id": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "Optional document tab ID to target." - }, - "table_start_index": { - "type": "integer" - }, - "type": { - "const": "update_table_row_style", - "type": "string" - } - }, - "required": [ - "type", - "table_start_index", - "row_indices" - ], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "pinned_header_rows_count": { - "description": "Number of leading rows to pin as a repeating header on each page. 0 unpins all rows. Use this dedicated request because the 'tableHeader' value reported in TableRowStyle cannot be set through UpdateTableRowStyleRequest.", - "minimum": 0, - "type": "integer" - }, - "tab_id": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "Optional document tab ID to target." - }, - "table_start_index": { - "type": "integer" - }, - "type": { - "const": "pin_table_header_rows", - "type": "string" - } - }, - "required": [ - "type", - "table_start_index", - "pinned_header_rows_count" - ], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "after_heading": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "Insert immediately after the heading paragraph with this exact text, resolved to an index at execution time. Errors when it matches zero or more than one heading." - }, - "anchor_position": { - "default": "after", - "description": "Which side of anchor_text to insert on. Defaults to 'after'.", - "enum": [ - "before", - "after" - ], - "type": "string" - }, - "anchor_text": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "Insert relative to this literal text, which must occur exactly once within a single paragraph. Use anchor_position to pick which side." - }, - "before_heading": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "Insert immediately before the heading paragraph with this exact text. Errors when it matches zero or more than one heading." - }, - "end_of_segment": { - "default": false, - "description": "Append to the end of the targeted body/segment instead of using index.", - "type": "boolean" - }, - "index": { - "anyOf": [ - { - "type": "integer" - }, - { - "type": "null" - } - ], - "default": null, - "description": "Insertion index. Omit when end_of_segment=true." - }, - "tab_id": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "Optional document tab ID to target." - }, - "type": { - "const": "insert_page_break", - "type": "string" - } - }, - "required": [ - "type" - ], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "after_heading": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "Insert immediately after the heading paragraph with this exact text, resolved to an index at execution time. Errors when it matches zero or more than one heading." - }, - "anchor_position": { - "default": "after", - "description": "Which side of anchor_text to insert on. Defaults to 'after'.", - "enum": [ - "before", - "after" - ], - "type": "string" - }, - "anchor_text": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "Insert relative to this literal text, which must occur exactly once within a single paragraph. Use anchor_position to pick which side." - }, - "before_heading": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "Insert immediately before the heading paragraph with this exact text. Errors when it matches zero or more than one heading." - }, - "end_of_segment": { - "default": false, - "description": "Append to the end of the targeted body/segment instead of using index.", - "type": "boolean" - }, - "index": { - "anyOf": [ - { - "type": "integer" - }, - { - "type": "null" - } - ], - "default": null, - "description": "Insertion index. Omit when end_of_segment=true." - }, - "section_type": { - "default": "NEXT_PAGE", - "enum": [ - "CONTINUOUS", - "NEXT_PAGE" - ], - "type": "string" - }, - "tab_id": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "Optional document tab ID to target." - }, - "type": { - "const": "insert_section_break", - "type": "string" - } - }, - "required": [ - "type" - ], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "find_text": { - "type": "string" - }, - "match_case": { - "default": false, - "type": "boolean" - }, - "replace_text": { - "type": "string" - }, - "tab_id": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "Optional document tab ID to target." - }, - "type": { - "const": "find_replace", - "type": "string" - } - }, - "required": [ - "type", - "find_text", - "replace_text" - ], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "bullet_preset": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - }, - "end_index": { - "type": "integer" - }, - "list_type": { - "default": "UNORDERED", - "enum": [ - "UNORDERED", - "ORDERED", - "CHECKBOX", - "NONE" - ], - "type": "string" - }, - "nesting_level": { - "anyOf": [ - { - "type": "integer" - }, - { - "type": "null" - } - ], - "default": null - }, - "paragraph_start_indices": { - "anyOf": [ - { - "items": { - "type": "integer" - }, - "type": "array" - }, - { - "type": "null" - } - ], - "default": null - }, - "segment_id": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "Optional header/footer/footnote segment ID. Use a real ID returned by inspect_doc_structure; do not guess values like 'kix.header'." - }, - "start_index": { - "type": "integer" - }, - "tab_id": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "Optional document tab ID to target." - }, - "type": { - "const": "create_bullet_list", - "type": "string" - } - }, - "required": [ - "type", - "start_index", - "end_index" - ], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "end_index": { - "type": "integer" - }, - "name": { - "type": "string" - }, - "segment_id": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "Optional header/footer/footnote segment ID. Use a real ID returned by inspect_doc_structure; do not guess values like 'kix.header'." - }, - "start_index": { - "type": "integer" - }, - "tab_id": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "Optional document tab ID to target." - }, - "type": { - "const": "create_named_range", - "type": "string" - } - }, - "required": [ - "type", - "name", - "start_index", - "end_index" - ], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "named_range_id": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - }, - "named_range_name": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - }, - "tab_id": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "Optional document tab ID to target." - }, - "text": { - "type": "string" - }, - "type": { - "const": "replace_named_range_content", - "type": "string" - } - }, - "required": [ - "type", - "text" - ], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "named_range_id": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - }, - "named_range_name": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - }, - "tab_id": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "Optional document tab ID to target." - }, - "type": { - "const": "delete_named_range", - "type": "string" - } - }, - "required": [ - "type" - ], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "background_color": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - }, - "document_mode": { - "anyOf": [ - { - "enum": [ - "PAGES", - "PAGELESS" - ], - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - }, - "flip_page_orientation": { - "anyOf": [ - { - "type": "boolean" - }, - { - "type": "null" - } - ], - "default": null - }, - "margin_bottom": { - "anyOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ], - "default": null - }, - "margin_footer": { - "anyOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ], - "default": null - }, - "margin_header": { - "anyOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ], - "default": null - }, - "margin_left": { - "anyOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ], - "default": null - }, - "margin_right": { - "anyOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ], - "default": null - }, - "margin_top": { - "anyOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ], - "default": null - }, - "page_height": { - "anyOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ], - "default": null - }, - "page_number_start": { - "anyOf": [ - { - "type": "integer" - }, - { - "type": "null" - } - ], - "default": null - }, - "page_width": { - "anyOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ], - "default": null - }, - "tab_id": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "Optional document tab ID to target." - }, - "type": { - "const": "update_document_style", - "type": "string" - }, - "use_even_page_header_footer": { - "anyOf": [ - { - "type": "boolean" - }, - { - "type": "null" - } - ], - "default": null - }, - "use_first_page_header_footer": { - "anyOf": [ - { - "type": "boolean" - }, - { - "type": "null" - } - ], - "default": null - } - }, - "required": [ - "type" - ], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "column_count": { - "anyOf": [ - { - "type": "integer" - }, - { - "type": "null" - } - ], - "default": null - }, - "column_separator_style": { - "anyOf": [ - { - "enum": [ - "NONE", - "BETWEEN_EACH_COLUMN" - ], - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - }, - "column_spacing": { - "anyOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ], - "default": null - }, - "content_direction": { - "anyOf": [ - { - "enum": [ - "LEFT_TO_RIGHT", - "RIGHT_TO_LEFT" - ], - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - }, - "end_index": { - "type": "integer" - }, - "flip_page_orientation": { - "anyOf": [ - { - "type": "boolean" - }, - { - "type": "null" - } - ], - "default": null - }, - "margin_bottom": { - "anyOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ], - "default": null - }, - "margin_footer": { - "anyOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ], - "default": null - }, - "margin_header": { - "anyOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ], - "default": null - }, - "margin_left": { - "anyOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ], - "default": null - }, - "margin_right": { - "anyOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ], - "default": null - }, - "margin_top": { - "anyOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ], - "default": null - }, - "page_number_start": { - "anyOf": [ - { - "type": "integer" - }, - { - "type": "null" - } - ], - "default": null - }, - "start_index": { - "type": "integer" - }, - "tab_id": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "Optional document tab ID to target." - }, - "type": { - "const": "update_section_style", - "type": "string" - }, - "use_first_page_header_footer": { - "anyOf": [ - { - "type": "boolean" - }, - { - "type": "null" - } - ], - "default": null - } - }, - "required": [ - "type", - "start_index", - "end_index" - ], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "header_footer_type": { - "default": "DEFAULT", - "description": "Header/footer type to create.", - "enum": [ - "DEFAULT", - "FIRST_PAGE_ONLY", - "EVEN_PAGE" - ], - "type": "string" - }, - "section_break_index": { - "anyOf": [ - { - "type": "integer" - }, - { - "type": "null" - } - ], - "default": null, - "description": "Optional section break index for section-scoped layouts." - }, - "section_type": { - "description": "Which section to create.", - "enum": [ - "header", - "footer" - ], - "type": "string" - }, - "tab_id": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "Optional document tab ID to target." - }, - "type": { - "const": "create_header_footer", - "type": "string" - } - }, - "required": [ - "type", - "section_type" - ], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "after_heading": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "Insert immediately after the heading paragraph with this exact text, resolved to an index at execution time. Errors when it matches zero or more than one heading." - }, - "anchor_position": { - "default": "after", - "description": "Which side of anchor_text to insert on. Defaults to 'after'.", - "enum": [ - "before", - "after" - ], - "type": "string" - }, - "anchor_text": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "Insert relative to this literal text, which must occur exactly once within a single paragraph. Use anchor_position to pick which side." - }, - "before_heading": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "Insert immediately before the heading paragraph with this exact text. Errors when it matches zero or more than one heading." - }, - "end_of_segment": { - "default": false, - "description": "Append to the end of the targeted body/segment instead of using index.", - "type": "boolean" - }, - "height": { - "anyOf": [ - { - "type": "integer" - }, - { - "type": "null" - } - ], - "default": null - }, - "image_uri": { - "description": "Image URL or resolvable image URI.", - "type": "string" - }, - "index": { - "anyOf": [ - { - "type": "integer" - }, - { - "type": "null" - } - ], - "default": null, - "description": "Insertion index. Omit when end_of_segment=true." - }, - "segment_id": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "Optional header/footer/footnote segment ID. Use a real ID returned by inspect_doc_structure; do not guess values like 'kix.header'." - }, - "tab_id": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "Optional document tab ID to target." - }, - "type": { - "const": "insert_image", - "type": "string" - }, - "width": { - "anyOf": [ - { - "type": "integer" - }, - { - "type": "null" - } - ], - "default": null - } - }, - "required": [ - "type", - "image_uri" - ], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "index": { - "type": "integer" - }, - "parent_tab_id": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - }, - "title": { - "type": "string" - }, - "type": { - "const": "insert_doc_tab", - "type": "string" - } - }, - "required": [ - "type", - "title", - "index" - ], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "tab_id": { - "type": "string" - }, - "type": { - "const": "delete_doc_tab", - "type": "string" - } - }, - "required": [ - "type", - "tab_id" - ], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "tab_id": { - "type": "string" - }, - "title": { - "type": "string" - }, - "type": { - "const": "update_doc_tab", - "type": "string" - } - }, - "required": [ - "type", - "tab_id", - "title" - ], - "type": "object" - } -]New value: +[ + { + "additionalProperties": false, + "properties": { + "after_heading": { + "default": null, + "description": "Insert immediately after the heading paragraph with this exact text, resolved to an index at execution time. Errors when it matches zero or more than one heading.", + "type": "string" + }, + "anchor_position": { + "default": "after", + "description": "Which side of anchor_text to insert on. Defaults to 'after'.", + "enum": [ + "before", + "after" + ], + "type": "string" + }, + "anchor_text": { + "default": null, + "description": "Insert relative to this literal text, which must occur exactly once within a single paragraph. Use anchor_position to pick which side.", + "type": "string" + }, + "before_heading": { + "default": null, + "description": "Insert immediately before the heading paragraph with this exact text. Errors when it matches zero or more than one heading.", + "type": "string" + }, + "end_of_segment": { + "default": false, + "description": "Append to the end of the targeted body/segment instead of using index.", + "type": "boolean" + }, + "index": { + "default": null, + "description": "Insertion index. Omit when end_of_segment=true.", + "type": "integer" + }, + "segment_id": { + "default": null, + "description": "Optional header/footer/footnote segment ID. Use a real ID returned by inspect_doc_structure; do not guess values like 'kix.header'.", + "type": "string" + }, + "tab_id": { + "default": null, + "description": "Optional document tab ID to target.", + "type": "string" + }, + "text": { + "description": "Text to insert.", + "type": "string" + }, + "type": { + "enum": [ + "insert_text" + ], + "type": "string" + } + }, + "required": [ + "type", + "text" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "end_index": { + "type": "integer" + }, + "segment_id": { + "default": null, + "description": "Optional header/footer/footnote segment ID. Use a real ID returned by inspect_doc_structure; do not guess values like 'kix.header'.", + "type": "string" + }, + "start_index": { + "type": "integer" + }, + "tab_id": { + "default": null, + "description": "Optional document tab ID to target.", + "type": "string" + }, + "type": { + "enum": [ + "delete_text" + ], + "type": "string" + } + }, + "required": [ + "type", + "start_index", + "end_index" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "end_index": { + "type": "integer" + }, + "segment_id": { + "default": null, + "description": "Optional header/footer/footnote segment ID. Use a real ID returned by inspect_doc_structure; do not guess values like 'kix.header'.", + "type": "string" + }, + "start_index": { + "type": "integer" + }, + "tab_id": { + "default": null, + "description": "Optional document tab ID to target.", + "type": "string" + }, + "text": { + "description": "Replacement text.", + "type": "string" + }, + "type": { + "enum": [ + "replace_text" + ], + "type": "string" + } + }, + "required": [ + "type", + "start_index", + "end_index", + "text" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "background_color": { + "default": null, + "type": "string" + }, + "baseline_offset": { + "default": null, + "type": "string" + }, + "bold": { + "default": null, + "type": "boolean" + }, + "clear_link": { + "default": null, + "type": "boolean" + }, + "end_index": { + "type": "integer" + }, + "font_family": { + "default": null, + "type": "string" + }, + "font_size": { + "default": null, + "type": "number" + }, + "font_weight": { + "default": null, + "type": "integer" + }, + "italic": { + "default": null, + "type": "boolean" + }, + "link_url": { + "default": null, + "type": "string" + }, + "segment_id": { + "default": null, + "description": "Optional header/footer/footnote segment ID. Use a real ID returned by inspect_doc_structure; do not guess values like 'kix.header'.", + "type": "string" + }, + "small_caps": { + "default": null, + "type": "boolean" + }, + "start_index": { + "type": "integer" + }, + "strikethrough": { + "default": null, + "type": "boolean" + }, + "tab_id": { + "default": null, + "description": "Optional document tab ID to target.", + "type": "string" + }, + "text_color": { + "default": null, + "type": "string" + }, + "type": { + "enum": [ + "format_text" + ], + "type": "string" + }, + "underline": { + "default": null, + "type": "boolean" + } + }, + "required": [ + "type", + "start_index", + "end_index" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "alignment": { + "default": null, + "type": "string" + }, + "avoid_widow_and_orphan": { + "default": null, + "type": "boolean" + }, + "border_color": { + "default": null, + "type": "string" + }, + "border_dash": { + "default": null, + "type": "string" + }, + "border_edges": { + "default": null, + "description": "Paragraph border edges to update; omit to update top, bottom, left, and right.", + "items": { + "enum": [ + "top", + "bottom", + "left", + "right", + "between" + ], + "type": "string" + }, + "minItems": 1, + "type": "array" + }, + "border_padding": { + "default": null, + "type": "number" + }, + "border_width": { + "default": null, + "type": "number" + }, + "direction": { + "default": null, + "type": "string" + }, + "end_index": { + "type": "integer" + }, + "heading_level": { + "default": null, + "type": "integer" + }, + "indent_end": { + "default": null, + "type": "number" + }, + "indent_first_line": { + "default": null, + "type": "number" + }, + "indent_start": { + "default": null, + "type": "number" + }, + "keep_lines_together": { + "default": null, + "type": "boolean" + }, + "keep_with_next": { + "default": null, + "type": "boolean" + }, + "line_spacing": { + "default": null, + "type": "number" + }, + "named_style_type": { + "default": null, + "type": "string" + }, + "page_break_before": { + "default": null, + "type": "boolean" + }, + "segment_id": { + "default": null, + "description": "Optional header/footer/footnote segment ID. Use a real ID returned by inspect_doc_structure; do not guess values like 'kix.header'.", + "type": "string" + }, + "shading_color": { + "default": null, + "type": "string" + }, + "space_above": { + "default": null, + "type": "number" + }, + "space_below": { + "default": null, + "type": "number" + }, + "spacing_mode": { + "default": null, + "type": "string" + }, + "start_index": { + "type": "integer" + }, + "tab_id": { + "default": null, + "description": "Optional document tab ID to target.", + "type": "string" + }, + "type": { + "enum": [ + "update_paragraph_style" + ], + "type": "string" + } + }, + "required": [ + "type", + "start_index", + "end_index" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "background_color": { + "default": null, + "type": "string" + }, + "border_color": { + "default": null, + "type": "string" + }, + "border_edges": { + "default": null, + "description": "Table-cell border edges to update; omit to update all four edges.", + "items": { + "enum": [ + "top", + "bottom", + "left", + "right" + ], + "type": "string" + }, + "minItems": 1, + "type": "array" + }, + "border_width": { + "default": null, + "type": "number" + }, + "column_index": { + "default": null, + "type": "integer" + }, + "column_span": { + "default": null, + "type": "integer" + }, + "content_alignment": { + "default": null, + "type": "string" + }, + "padding_bottom": { + "default": null, + "type": "number" + }, + "padding_left": { + "default": null, + "type": "number" + }, + "padding_right": { + "default": null, + "type": "number" + }, + "padding_top": { + "default": null, + "type": "number" + }, + "row_index": { + "default": null, + "type": "integer" + }, + "row_span": { + "default": null, + "type": "integer" + }, + "tab_id": { + "default": null, + "description": "Optional document tab ID to target.", + "type": "string" + }, + "table_start_index": { + "type": "integer" + }, + "type": { + "enum": [ + "update_table_cell_style" + ], + "type": "string" + } + }, + "required": [ + "type", + "table_start_index" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "after_heading": { + "default": null, + "description": "Insert immediately after the heading paragraph with this exact text, resolved to an index at execution time. Errors when it matches zero or more than one heading.", + "type": "string" + }, + "anchor_position": { + "default": "after", + "description": "Which side of anchor_text to insert on. Defaults to 'after'.", + "enum": [ + "before", + "after" + ], + "type": "string" + }, + "anchor_text": { + "default": null, + "description": "Insert relative to this literal text, which must occur exactly once within a single paragraph. Use anchor_position to pick which side.", + "type": "string" + }, + "before_heading": { + "default": null, + "description": "Insert immediately before the heading paragraph with this exact text. Errors when it matches zero or more than one heading.", + "type": "string" + }, + "columns": { + "type": "integer" + }, + "end_of_segment": { + "default": false, + "description": "Append to the end of the targeted body/segment instead of using index.", + "type": "boolean" + }, + "index": { + "default": null, + "description": "Insertion index. Omit when end_of_segment=true.", + "type": "integer" + }, + "rows": { + "type": "integer" + }, + "segment_id": { + "default": null, + "description": "Optional header/footer/footnote segment ID. Use a real ID returned by inspect_doc_structure; do not guess values like 'kix.header'.", + "type": "string" + }, + "tab_id": { + "default": null, + "description": "Optional document tab ID to target.", + "type": "string" + }, + "type": { + "enum": [ + "insert_table" + ], + "type": "string" + } + }, + "required": [ + "type", + "rows", + "columns" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "insert_below": { + "default": true, + "type": "boolean" + }, + "row_index": { + "type": "integer" + }, + "tab_id": { + "default": null, + "description": "Optional document tab ID to target.", + "type": "string" + }, + "table_start_index": { + "type": "integer" + }, + "type": { + "enum": [ + "insert_table_row" + ], + "type": "string" + } + }, + "required": [ + "type", + "table_start_index", + "row_index" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "row_index": { + "type": "integer" + }, + "tab_id": { + "default": null, + "description": "Optional document tab ID to target.", + "type": "string" + }, + "table_start_index": { + "type": "integer" + }, + "type": { + "enum": [ + "delete_table_row" + ], + "type": "string" + } + }, + "required": [ + "type", + "table_start_index", + "row_index" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "column_index": { + "type": "integer" + }, + "insert_right": { + "default": true, + "type": "boolean" + }, + "tab_id": { + "default": null, + "description": "Optional document tab ID to target.", + "type": "string" + }, + "table_start_index": { + "type": "integer" + }, + "type": { + "enum": [ + "insert_table_column" + ], + "type": "string" + } + }, + "required": [ + "type", + "table_start_index", + "column_index" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "column_index": { + "type": "integer" + }, + "tab_id": { + "default": null, + "description": "Optional document tab ID to target.", + "type": "string" + }, + "table_start_index": { + "type": "integer" + }, + "type": { + "enum": [ + "delete_table_column" + ], + "type": "string" + } + }, + "required": [ + "type", + "table_start_index", + "column_index" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "column_index": { + "type": "integer" + }, + "column_span": { + "type": "integer" + }, + "row_index": { + "type": "integer" + }, + "row_span": { + "type": "integer" + }, + "tab_id": { + "default": null, + "description": "Optional document tab ID to target.", + "type": "string" + }, + "table_start_index": { + "type": "integer" + }, + "type": { + "enum": [ + "merge_table_cells" + ], + "type": "string" + } + }, + "required": [ + "type", + "table_start_index", + "row_index", + "column_index", + "row_span", + "column_span" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "column_index": { + "type": "integer" + }, + "column_span": { + "type": "integer" + }, + "row_index": { + "type": "integer" + }, + "row_span": { + "type": "integer" + }, + "tab_id": { + "default": null, + "description": "Optional document tab ID to target.", + "type": "string" + }, + "table_start_index": { + "type": "integer" + }, + "type": { + "enum": [ + "unmerge_table_cells" + ], + "type": "string" + } + }, + "required": [ + "type", + "table_start_index", + "row_index", + "column_index", + "row_span", + "column_span" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "column_indices": { + "items": { + "type": "integer" + }, + "type": "array" + }, + "tab_id": { + "default": null, + "description": "Optional document tab ID to target.", + "type": "string" + }, + "table_start_index": { + "type": "integer" + }, + "type": { + "enum": [ + "update_table_column_properties" + ], + "type": "string" + }, + "width": { + "default": null, + "type": "number" + }, + "width_type": { + "default": null, + "type": "string" + } + }, + "required": [ + "type", + "table_start_index", + "column_indices" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "min_row_height": { + "default": null, + "description": "Minimum row height in points.", + "type": "number" + }, + "row_indices": { + "description": "Zero-based row indices to style, e.g. [0] for the header row.", + "items": { + "type": "integer" + }, + "type": "array" + }, + "tab_id": { + "default": null, + "description": "Optional document tab ID to target.", + "type": "string" + }, + "table_start_index": { + "type": "integer" + }, + "type": { + "enum": [ + "update_table_row_style" + ], + "type": "string" + } + }, + "required": [ + "type", + "table_start_index", + "row_indices" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "pinned_header_rows_count": { + "description": "Number of leading rows to pin as a repeating header on each page. 0 unpins all rows. Use this dedicated request because the 'tableHeader' value reported in TableRowStyle cannot be set through UpdateTableRowStyleRequest.", + "minimum": 0, + "type": "integer" + }, + "tab_id": { + "default": null, + "description": "Optional document tab ID to target.", + "type": "string" + }, + "table_start_index": { + "type": "integer" + }, + "type": { + "enum": [ + "pin_table_header_rows" + ], + "type": "string" + } + }, + "required": [ + "type", + "table_start_index", + "pinned_header_rows_count" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "after_heading": { + "default": null, + "description": "Insert immediately after the heading paragraph with this exact text, resolved to an index at execution time. Errors when it matches zero or more than one heading.", + "type": "string" + }, + "anchor_position": { + "default": "after", + "description": "Which side of anchor_text to insert on. Defaults to 'after'.", + "enum": [ + "before", + "after" + ], + "type": "string" + }, + "anchor_text": { + "default": null, + "description": "Insert relative to this literal text, which must occur exactly once within a single paragraph. Use anchor_position to pick which side.", + "type": "string" + }, + "before_heading": { + "default": null, + "description": "Insert immediately before the heading paragraph with this exact text. Errors when it matches zero or more than one heading.", + "type": "string" + }, + "end_of_segment": { + "default": false, + "description": "Append to the end of the targeted body/segment instead of using index.", + "type": "boolean" + }, + "index": { + "default": null, + "description": "Insertion index. Omit when end_of_segment=true.", + "type": "integer" + }, + "tab_id": { + "default": null, + "description": "Optional document tab ID to target.", + "type": "string" + }, + "type": { + "enum": [ + "insert_page_break" + ], + "type": "string" + } + }, + "required": [ + "type" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "after_heading": { + "default": null, + "description": "Insert immediately after the heading paragraph with this exact text, resolved to an index at execution time. Errors when it matches zero or more than one heading.", + "type": "string" + }, + "anchor_position": { + "default": "after", + "description": "Which side of anchor_text to insert on. Defaults to 'after'.", + "enum": [ + "before", + "after" + ], + "type": "string" + }, + "anchor_text": { + "default": null, + "description": "Insert relative to this literal text, which must occur exactly once within a single paragraph. Use anchor_position to pick which side.", + "type": "string" + }, + "before_heading": { + "default": null, + "description": "Insert immediately before the heading paragraph with this exact text. Errors when it matches zero or more than one heading.", + "type": "string" + }, + "end_of_segment": { + "default": false, + "description": "Append to the end of the targeted body/segment instead of using index.", + "type": "boolean" + }, + "index": { + "default": null, + "description": "Insertion index. Omit when end_of_segment=true.", + "type": "integer" + }, + "section_type": { + "default": "NEXT_PAGE", + "enum": [ + "CONTINUOUS", + "NEXT_PAGE" + ], + "type": "string" + }, + "tab_id": { + "default": null, + "description": "Optional document tab ID to target.", + "type": "string" + }, + "type": { + "enum": [ + "insert_section_break" + ], + "type": "string" + } + }, + "required": [ + "type" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "find_text": { + "type": "string" + }, + "match_case": { + "default": false, + "type": "boolean" + }, + "replace_text": { + "type": "string" + }, + "tab_id": { + "default": null, + "description": "Optional document tab ID to target.", + "type": "string" + }, + "type": { + "enum": [ + "find_replace" + ], + "type": "string" + } + }, + "required": [ + "type", + "find_text", + "replace_text" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "bullet_preset": { + "default": null, + "type": "string" + }, + "end_index": { + "type": "integer" + }, + "list_type": { + "default": "UNORDERED", + "enum": [ + "UNORDERED", + "ORDERED", + "CHECKBOX", + "NONE" + ], + "type": "string" + }, + "nesting_level": { + "default": null, + "type": "integer" + }, + "paragraph_start_indices": { + "default": null, + "items": { + "type": "integer" + }, + "type": "array" + }, + "segment_id": { + "default": null, + "description": "Optional header/footer/footnote segment ID. Use a real ID returned by inspect_doc_structure; do not guess values like 'kix.header'.", + "type": "string" + }, + "start_index": { + "type": "integer" + }, + "tab_id": { + "default": null, + "description": "Optional document tab ID to target.", + "type": "string" + }, + "type": { + "enum": [ + "create_bullet_list" + ], + "type": "string" + } + }, + "required": [ + "type", + "start_index", + "end_index" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "end_index": { + "type": "integer" + }, + "name": { + "type": "string" + }, + "segment_id": { + "default": null, + "description": "Optional header/footer/footnote segment ID. Use a real ID returned by inspect_doc_structure; do not guess values like 'kix.header'.", + "type": "string" + }, + "start_index": { + "type": "integer" + }, + "tab_id": { + "default": null, + "description": "Optional document tab ID to target.", + "type": "string" + }, + "type": { + "enum": [ + "create_named_range" + ], + "type": "string" + } + }, + "required": [ + "type", + "name", + "start_index", + "end_index" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "named_range_id": { + "default": null, + "type": "string" + }, + "named_range_name": { + "default": null, + "type": "string" + }, + "tab_id": { + "default": null, + "description": "Optional document tab ID to target.", + "type": "string" + }, + "text": { + "type": "string" + }, + "type": { + "enum": [ + "replace_named_range_content" + ], + "type": "string" + } + }, + "required": [ + "type", + "text" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "named_range_id": { + "default": null, + "type": "string" + }, + "named_range_name": { + "default": null, + "type": "string" + }, + "tab_id": { + "default": null, + "description": "Optional document tab ID to target.", + "type": "string" + }, + "type": { + "enum": [ + "delete_named_range" + ], + "type": "string" + } + }, + "required": [ + "type" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "background_color": { + "default": null, + "type": "string" + }, + "document_mode": { + "default": null, + "enum": [ + "PAGES", + "PAGELESS" + ], + "type": "string" + }, + "flip_page_orientation": { + "default": null, + "type": "boolean" + }, + "margin_bottom": { + "default": null, + "type": "number" + }, + "margin_footer": { + "default": null, + "type": "number" + }, + "margin_header": { + "default": null, + "type": "number" + }, + "margin_left": { + "default": null, + "type": "number" + }, + "margin_right": { + "default": null, + "type": "number" + }, + "margin_top": { + "default": null, + "type": "number" + }, + "page_height": { + "default": null, + "type": "number" + }, + "page_number_start": { + "default": null, + "type": "integer" + }, + "page_width": { + "default": null, + "type": "number" + }, + "tab_id": { + "default": null, + "description": "Optional document tab ID to target.", + "type": "string" + }, + "type": { + "enum": [ + "update_document_style" + ], + "type": "string" + }, + "use_even_page_header_footer": { + "default": null, + "type": "boolean" + }, + "use_first_page_header_footer": { + "default": null, + "type": "boolean" + } + }, + "required": [ + "type" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "column_count": { + "default": null, + "type": "integer" + }, + "column_separator_style": { + "default": null, + "enum": [ + "NONE", + "BETWEEN_EACH_COLUMN" + ], + "type": "string" + }, + "column_spacing": { + "default": null, + "type": "number" + }, + "content_direction": { + "default": null, + "enum": [ + "LEFT_TO_RIGHT", + "RIGHT_TO_LEFT" + ], + "type": "string" + }, + "end_index": { + "type": "integer" + }, + "flip_page_orientation": { + "default": null, + "type": "boolean" + }, + "margin_bottom": { + "default": null, + "type": "number" + }, + "margin_footer": { + "default": null, + "type": "number" + }, + "margin_header": { + "default": null, + "type": "number" + }, + "margin_left": { + "default": null, + "type": "number" + }, + "margin_right": { + "default": null, + "type": "number" + }, + "margin_top": { + "default": null, + "type": "number" + }, + "page_number_start": { + "default": null, + "type": "integer" + }, + "start_index": { + "type": "integer" + }, + "tab_id": { + "default": null, + "description": "Optional document tab ID to target.", + "type": "string" + }, + "type": { + "enum": [ + "update_section_style" + ], + "type": "string" + }, + "use_first_page_header_footer": { + "default": null, + "type": "boolean" + } + }, + "required": [ + "type", + "start_index", + "end_index" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "header_footer_type": { + "default": "DEFAULT", + "description": "Header/footer type to create.", + "enum": [ + "DEFAULT", + "FIRST_PAGE_ONLY", + "EVEN_PAGE" + ], + "type": "string" + }, + "section_break_index": { + "default": null, + "description": "Optional section break index for section-scoped layouts.", + "type": "integer" + }, + "section_type": { + "description": "Which section to create.", + "enum": [ + "header", + "footer" + ], + "type": "string" + }, + "tab_id": { + "default": null, + "description": "Optional document tab ID to target.", + "type": "string" + }, + "type": { + "enum": [ + "create_header_footer" + ], + "type": "string" + } + }, + "required": [ + "type", + "section_type" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "after_heading": { + "default": null, + "description": "Insert immediately after the heading paragraph with this exact text, resolved to an index at execution time. Errors when it matches zero or more than one heading.", + "type": "string" + }, + "anchor_position": { + "default": "after", + "description": "Which side of anchor_text to insert on. Defaults to 'after'.", + "enum": [ + "before", + "after" + ], + "type": "string" + }, + "anchor_text": { + "default": null, + "description": "Insert relative to this literal text, which must occur exactly once within a single paragraph. Use anchor_position to pick which side.", + "type": "string" + }, + "before_heading": { + "default": null, + "description": "Insert immediately before the heading paragraph with this exact text. Errors when it matches zero or more than one heading.", + "type": "string" + }, + "end_of_segment": { + "default": false, + "description": "Append to the end of the targeted body/segment instead of using index.", + "type": "boolean" + }, + "height": { + "default": null, + "type": "integer" + }, + "image_uri": { + "description": "Image URL or resolvable image URI.", + "type": "string" + }, + "index": { + "default": null, + "description": "Insertion index. Omit when end_of_segment=true.", + "type": "integer" + }, + "segment_id": { + "default": null, + "description": "Optional header/footer/footnote segment ID. Use a real ID returned by inspect_doc_structure; do not guess values like 'kix.header'.", + "type": "string" + }, + "tab_id": { + "default": null, + "description": "Optional document tab ID to target.", + "type": "string" + }, + "type": { + "enum": [ + "insert_image" + ], + "type": "string" + }, + "width": { + "default": null, + "type": "integer" + } + }, + "required": [ + "type", + "image_uri" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "index": { + "type": "integer" + }, + "parent_tab_id": { + "default": null, + "type": "string" + }, + "title": { + "type": "string" + }, + "type": { + "enum": [ + "insert_doc_tab" + ], + "type": "string" + } + }, + "required": [ + "type", + "title", + "index" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "tab_id": { + "type": "string" + }, + "type": { + "enum": [ + "delete_doc_tab" + ], + "type": "string" + } + }, + "required": [ + "type", + "tab_id" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "tab_id": { + "type": "string" + }, + "title": { + "type": "string" + }, + "type": { + "enum": [ + "update_doc_tab" + ], + "type": "string" + } + }, + "required": [ + "type", + "tab_id", + "title" + ], + "type": "object" + } +]
- Changed
check_drive_file_public_access2 fields changed- removed
Input schema / properties / drive_id / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / drive_id / typeAdded value: +"string"
- Changed
copy_drive_file2 fields changed- removed
Input schema / properties / new_name / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / new_name / typeAdded value: +"string"
- Changed
create_calendar4 fields changed- removed
Input schema / properties / description / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / description / typeAdded value: +"string" - removed
Input schema / properties / timezone / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / timezone / typeAdded value: +"string"
- Changed
create_doc1 field changed- added
Input schema / properties / folder_idAdded value: +{ + "default": "root", + "description": "The ID of the parent folder. Defaults to 'root'. For shared\ndrives, this must be a folder ID within the shared drive.", + "type": "string" +}
- Changed
create_drive_file12 fields changed- removed
Input schema / properties / base64_content / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / base64_content / typeAdded value: +"string" - removed
Input schema / properties / base64_sha256 / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / base64_sha256 / typeAdded value: +"string" - removed
Input schema / properties / content / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / content / typeAdded value: +"string" - removed
Input schema / properties / content_mime_type / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / content_mime_type / typeAdded value: +"string" - removed
Input schema / properties / fileUrl / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / fileUrl / typeAdded value: +"string" - changed
Input schema / properties / mime_type / defaultPrevious value: -"text/plain"New value: +null - changed
Input schema / properties / mime_type / descriptionPrevious value: -"The MIME type of the file. Defaults to 'text/plain'."New value: +"The MIME type of the file. Defaults to 'text/plain'; required with return_upload_url."
- Changed
create_form4 fields changed- removed
Input schema / properties / description / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / description / typeAdded value: +"string" - removed
Input schema / properties / document_title / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / document_title / typeAdded value: +"string"
- Removed
create_script_project - Changed
create_sheet6 fields changed- removed
Input schema / properties / insert_sheet_index / anyOfRemoved value: -[ - { - "type": "integer" - }, - { - "type": "null" - } -] - added
Input schema / properties / insert_sheet_index / typeAdded value: +"integer" - removed
Input schema / properties / sheet_name / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / sheet_name / typeAdded value: +"string" - removed
Input schema / properties / source_sheet_name / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / source_sheet_name / typeAdded value: +"string"
- Changed
create_spreadsheet4 fields changed- added
Input schema / properties / folder_idAdded value: +{ + "default": "root", + "description": "The ID of the parent folder. Defaults to 'root'. For shared\ndrives, this must be a folder ID within the shared drive.", + "type": "string" +} - removed
Input schema / properties / sheet_names / anyOfRemoved value: -[ - { - "items": { - "type": "string" - }, - "type": "array" - }, - { - "type": "null" - } -] - added
Input schema / properties / sheet_names / itemsAdded value: +{ + "type": "string" +} - added
Input schema / properties / sheet_names / typeAdded value: +"array"
- Changed
create_table_with_data2 fields changed- removed
Input schema / properties / tab_id / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / tab_id / typeAdded value: +"string"
- Removed
create_version - Removed
delete_script_project - Changed
draft_gmail_message19 fields changed- removed
Input schema / properties / attachments / anyOfRemoved value: -[ - { - "items": { - "additionalProperties": true, - "type": "object" - }, - "type": "array" - }, - { - "type": "null" - } -] - added
Input schema / properties / attachments / itemsAdded value: +{ + "additionalProperties": true, + "type": "object" +} - added
Input schema / properties / attachments / typeAdded value: +"array" - removed
Input schema / properties / bcc / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / bcc / typeAdded value: +"string" - removed
Input schema / properties / cc / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / cc / typeAdded value: +"string" - removed
Input schema / properties / from_email / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / from_email / typeAdded value: +"string" - removed
Input schema / properties / from_name / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / from_name / typeAdded value: +"string" - removed
Input schema / properties / in_reply_to / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / in_reply_to / typeAdded value: +"string" - removed
Input schema / properties / references / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / references / typeAdded value: +"string" - removed
Input schema / properties / thread_id / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / thread_id / typeAdded value: +"string" - removed
Input schema / properties / to / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / to / typeAdded value: +"string"
- Changed
find_and_replace_doc2 fields changed- removed
Input schema / properties / tab_id / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / tab_id / typeAdded value: +"string"
- Changed
format_sheet_range20 fields changed- removed
Input schema / properties / background_color / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / background_color / typeAdded value: +"string" - removed
Input schema / properties / bold / anyOfRemoved value: -[ - { - "type": "boolean" - }, - { - "type": "null" - } -] - added
Input schema / properties / bold / typeAdded value: +"boolean" - removed
Input schema / properties / font_size / anyOfRemoved value: -[ - { - "type": "integer" - }, - { - "type": "null" - } -] - added
Input schema / properties / font_size / typeAdded value: +"integer" - removed
Input schema / properties / horizontal_alignment / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / horizontal_alignment / typeAdded value: +"string" - removed
Input schema / properties / italic / anyOfRemoved value: -[ - { - "type": "boolean" - }, - { - "type": "null" - } -] - added
Input schema / properties / italic / typeAdded value: +"boolean" - removed
Input schema / properties / number_format_pattern / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / number_format_pattern / typeAdded value: +"string" - removed
Input schema / properties / number_format_type / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / number_format_type / typeAdded value: +"string" - removed
Input schema / properties / text_color / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / text_color / typeAdded value: +"string" - removed
Input schema / properties / vertical_alignment / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / vertical_alignment / typeAdded value: +"string" - removed
Input schema / properties / wrap_strategy / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / wrap_strategy / typeAdded value: +"string"
- Changed
get_doc_as_markdown2 fields changed- removed
Input schema / properties / tab_id / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / tab_id / typeAdded value: +"string"
- Changed
get_doc_content2 fields changed- removed
Input schema / properties / tab_id / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / tab_id / typeAdded value: +"string"
- Changed
get_drive_file_download_url2 fields changed- removed
Input schema / properties / export_format / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / export_format / typeAdded value: +"string"
- Changed
get_events10 fields changed- removed
Input schema / properties / event_id / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / event_id / typeAdded value: +"string" - removed
Input schema / properties / page_token / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / page_token / typeAdded value: +"string" - removed
Input schema / properties / query / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / query / typeAdded value: +"string" - removed
Input schema / properties / time_max / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / time_max / typeAdded value: +"string" - removed
Input schema / properties / time_min / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / time_min / typeAdded value: +"string"
- Changed
get_gmail_attachment_content2 fields changed- removed
Input schema / properties / attachment_index / anyOfRemoved value: -[ - { - "type": "integer" - }, - { - "type": "null" - } -] - added
Input schema / properties / attachment_index / typeAdded value: +"integer"
- Changed
get_gmail_message_content2 fields changed- changed
Input schema / properties / body_format / descriptionPrevious value: -"Body output format. 'text' (default) returns plaintext (HTML converted to text as fallback). 'html' returns the raw HTML body as-is without conversion. 'raw' fetches the full raw MIME message and returns the base64url-decoded content."New value: +"Body output format (only applies when format='full'). 'text' (default) returns plaintext (HTML converted to text as fallback). 'html' returns the raw HTML body as-is without conversion. 'raw' fetches the full raw MIME message and returns the base64url-decoded content." - added
Input schema / properties / formatAdded value: +{ + "default": "full", + "description": "Message format. \"full\" (default) includes\nthe body and attachments, \"metadata\" only headers.", + "enum": [ + "full", + "metadata" + ], + "type": "string" +}
- Changed
get_messages2 fields changed- removed
Input schema / properties / message_filter / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / message_filter / typeAdded value: +"string"
- Added
get_script_activity - Removed
get_script_content - Removed
get_script_metrics - Changed
get_script_project7 fields changed- added
Input schema / properties / actionAdded value: +{ + "description": "One of \"list\", \"get\".", + "type": "string" +} - added
Input schema / properties / file_nameAdded value: +{ + "default": null, + "description": "Optional source file name for get.", + "type": "string" +} - added
Input schema / properties / page_sizeAdded value: +{ + "default": 50, + "description": "Number of results per page for list (default: 50).", + "type": "integer" +} - added
Input schema / properties / page_tokenAdded value: +{ + "default": null, + "description": "Pagination token for list (optional).", + "type": "string" +} - added
Input schema / properties / script_id / defaultAdded value: +null - changed
Input schema / properties / script_id / descriptionPrevious value: -"The script project ID"New value: +"The script project ID (required for get)." - changed
Input schema / requiredPrevious value: -[ - "user_google_email", - "script_id" -]New value: +[ + "user_google_email", + "action" +]
- Added
get_script_version - Removed
get_version - Changed
import_to_google_doc12 fields changed- removed
Input schema / properties / base64_content / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / base64_content / typeAdded value: +"string" - removed
Input schema / properties / base64_sha256 / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / base64_sha256 / typeAdded value: +"string" - removed
Input schema / properties / content / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / content / typeAdded value: +"string" - removed
Input schema / properties / file_path / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / file_path / typeAdded value: +"string" - removed
Input schema / properties / file_url / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / file_url / typeAdded value: +"string" - removed
Input schema / properties / source_format / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / source_format / typeAdded value: +"string"
- Changed
import_to_google_sheets12 fields changed- removed
Input schema / properties / base64_content / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / base64_content / typeAdded value: +"string" - removed
Input schema / properties / base64_sha256 / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / base64_sha256 / typeAdded value: +"string" - removed
Input schema / properties / content / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / content / typeAdded value: +"string" - removed
Input schema / properties / file_path / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / file_path / typeAdded value: +"string" - removed
Input schema / properties / file_url / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / file_url / typeAdded value: +"string" - removed
Input schema / properties / source_format / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / source_format / typeAdded value: +"string"
- Changed
import_to_google_slides10 fields changed- removed
Input schema / properties / base64_content / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / base64_content / typeAdded value: +"string" - removed
Input schema / properties / base64_sha256 / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / base64_sha256 / typeAdded value: +"string" - removed
Input schema / properties / file_path / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / file_path / typeAdded value: +"string" - removed
Input schema / properties / file_url / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / file_url / typeAdded value: +"string" - removed
Input schema / properties / source_format / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / source_format / typeAdded value: +"string"
- Added
insert_smart_chips - Changed
inspect_doc_structure2 fields changed- removed
Input schema / properties / preview_chars / anyOfRemoved value: -[ - { - "type": "integer" - }, - { - "type": "null" - } -] - added
Input schema / properties / preview_chars / typeAdded value: +"integer"
- Changed
list_calendars4 fields changed- removed
Input schema / properties / max_results / anyOfRemoved value: -[ - { - "type": "integer" - }, - { - "type": "null" - } -] - added
Input schema / properties / max_results / typeAdded value: +"integer" - removed
Input schema / properties / page_token / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / page_token / typeAdded value: +"string"
- Changed
list_contact_groups2 fields changed- removed
Input schema / properties / page_token / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / page_token / typeAdded value: +"string"
- Changed
list_contacts4 fields changed- removed
Input schema / properties / page_token / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / page_token / typeAdded value: +"string" - removed
Input schema / properties / sort_order / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / sort_order / typeAdded value: +"string"
- Removed
list_deployments - Changed
list_document_comments2 fields changed- removed
Input schema / properties / max_comments / anyOfRemoved value: -[ - { - "type": "integer" - }, - { - "type": "null" - } -] - added
Input schema / properties / max_comments / typeAdded value: +"integer"
- Changed
list_drive_items12 fields changed- removed
Input schema / properties / corpora / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / corpora / typeAdded value: +"string" - removed
Input schema / properties / drive_id / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / drive_id / typeAdded value: +"string" - removed
Input schema / properties / file_type / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / file_type / typeAdded value: +"string" - removed
Input schema / properties / order_by / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / order_by / typeAdded value: +"string" - removed
Input schema / properties / page_token / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / page_token / typeAdded value: +"string" - removed
Input schema / properties / query / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / query / typeAdded value: +"string"
- Changed
list_form_responses2 fields changed- removed
Input schema / properties / page_token / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / page_token / typeAdded value: +"string"
- Changed
list_gmail_labels2 fields changed- removed
Input schema / properties / prefix / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / prefix / typeAdded value: +"string"
- Changed
list_presentation_comments2 fields changed- removed
Input schema / properties / max_comments / anyOfRemoved value: -[ - { - "type": "integer" - }, - { - "type": "null" - } -] - added
Input schema / properties / max_comments / typeAdded value: +"integer"
- Added
list_script_deployments - Removed
list_script_processes - Removed
list_script_projects - Changed
list_spreadsheet_comments2 fields changed- removed
Input schema / properties / max_comments / anyOfRemoved value: -[ - { - "type": "integer" - }, - { - "type": "null" - } -] - added
Input schema / properties / max_comments / typeAdded value: +"integer"
- Changed
list_task_lists2 fields changed- removed
Input schema / properties / page_token / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / page_token / typeAdded value: +"string"
- Changed
list_tasks12 fields changed- removed
Input schema / properties / completed_max / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / completed_max / typeAdded value: +"string" - removed
Input schema / properties / completed_min / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / completed_min / typeAdded value: +"string" - removed
Input schema / properties / due_max / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / due_max / typeAdded value: +"string" - removed
Input schema / properties / due_min / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / due_min / typeAdded value: +"string" - removed
Input schema / properties / page_token / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / page_token / typeAdded value: +"string" - removed
Input schema / properties / updated_min / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / updated_min / typeAdded value: +"string"
- Removed
list_versions - Changed
manage_conditional_formatting14 fields changed- removed
Input schema / properties / background_color / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / background_color / typeAdded value: +"string" - removed
Input schema / properties / condition_type / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / condition_type / typeAdded value: +"string" - changed
Input schema / properties / condition_values / anyOfPrevious value: -[ - { - "type": "string" - }, - { - "items": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "integer" - }, - { - "type": "number" - } - ] - }, - "type": "array" - }, - { - "type": "null" - } -]New value: +[ + { + "type": "string" + }, + { + "items": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "integer" + }, + { + "type": "number" + } + ] + }, + "type": "array" + } +] - changed
Input schema / properties / gradient_points / anyOfPrevious value: -[ - { - "type": "string" - }, - { - "items": { - "additionalProperties": true, - "type": "object" - }, - "type": "array" - }, - { - "type": "null" - } -]New value: +[ + { + "type": "string" + }, + { + "items": { + "additionalProperties": true, + "type": "object" + }, + "type": "array" + } +] - removed
Input schema / properties / range_name / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / range_name / typeAdded value: +"string" - removed
Input schema / properties / rule_index / anyOfRemoved value: -[ - { - "type": "integer" - }, - { - "type": "null" - } -] - added
Input schema / properties / rule_index / typeAdded value: +"integer" - removed
Input schema / properties / sheet_name / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / sheet_name / typeAdded value: +"string" - removed
Input schema / properties / text_color / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / text_color / typeAdded value: +"string"
- Changed
manage_contact41 fields changed- removed
Input schema / properties / address / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / address / typeAdded value: +"string" - removed
Input schema / properties / birthday / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / birthday / typeAdded value: +"string" - removed
Input schema / properties / contact_id / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / contact_id / typeAdded value: +"string" - removed
Input schema / properties / email / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / email / typeAdded value: +"string" - removed
Input schema / properties / emails / anyOfRemoved value: -[ - { - "items": { - "additionalProperties": false, - "description": "Typed input for an email entry.", - "properties": { - "address": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "Email address value." - }, - "type": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "Email type such as work, home, or other." - }, - "value": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "Backward-compatible alias for the email address value." - } - }, - "type": "object" - }, - "type": "array" - }, - { - "type": "null" - } -] - added
Input schema / properties / emails / itemsAdded value: +{ + "additionalProperties": false, + "description": "Typed input for an email entry.", + "properties": { + "address": { + "default": null, + "description": "Email address value.", + "type": "string" + }, + "type": { + "default": null, + "description": "Email type such as work, home, or other.", + "type": "string" + }, + "value": { + "default": null, + "description": "Backward-compatible alias for the email address value.", + "type": "string" + } + }, + "type": "object" +} - added
Input schema / properties / emails / typeAdded value: +"array" - removed
Input schema / properties / family_name / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / family_name / typeAdded value: +"string" - removed
Input schema / properties / given_name / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / given_name / typeAdded value: +"string" - removed
Input schema / properties / job_title / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / job_title / typeAdded value: +"string" - removed
Input schema / properties / nicknames / anyOfRemoved value: -[ - { - "items": { - "additionalProperties": false, - "description": "Typed input for a nickname entry.", - "properties": { - "type": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "Nickname type such as default, alternate_name, maiden_name, initials, or other." - }, - "value": { - "description": "Nickname value. Used for bilingual contacts (e.g. Hebrew alternative form).", - "type": "string" - } - }, - "required": [ - "value" - ], - "type": "object" - }, - "type": "array" - }, - { - "type": "null" - } -] - added
Input schema / properties / nicknames / itemsAdded value: +{ + "additionalProperties": false, + "description": "Typed input for a nickname entry.", + "properties": { + "type": { + "default": null, + "description": "Nickname type such as default, alternate_name, maiden_name, initials, or other.", + "type": "string" + }, + "value": { + "description": "Nickname value. Used for bilingual contacts (e.g. Hebrew alternative form).", + "type": "string" + } + }, + "required": [ + "value" + ], + "type": "object" +} - added
Input schema / properties / nicknames / typeAdded value: +"array" - removed
Input schema / properties / notes / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / notes / typeAdded value: +"string" - removed
Input schema / properties / organization / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / organization / typeAdded value: +"string" - removed
Input schema / properties / organizations / anyOfRemoved value: -[ - { - "items": { - "additionalProperties": false, - "description": "Typed input for an organization entry.", - "properties": { - "department": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "Department name." - }, - "jobDescription": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "Optional organization job description." - }, - "name": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "Organization name." - }, - "title": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "Job title." - }, - "type": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "Organization type such as work or school." - } - }, - "type": "object" - }, - "type": "array" - }, - { - "type": "null" - } -] - added
Input schema / properties / organizations / itemsAdded value: +{ + "additionalProperties": false, + "description": "Typed input for an organization entry.", + "properties": { + "department": { + "default": null, + "description": "Department name.", + "type": "string" + }, + "jobDescription": { + "default": null, + "description": "Optional organization job description.", + "type": "string" + }, + "name": { + "default": null, + "description": "Organization name.", + "type": "string" + }, + "title": { + "default": null, + "description": "Job title.", + "type": "string" + }, + "type": { + "default": null, + "description": "Organization type such as work or school.", + "type": "string" + } + }, + "type": "object" +} - added
Input schema / properties / organizations / typeAdded value: +"array" - removed
Input schema / properties / phone / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / phone / typeAdded value: +"string" - removed
Input schema / properties / phones / anyOfRemoved value: -[ - { - "items": { - "additionalProperties": false, - "description": "Typed input for a phone entry.", - "properties": { - "number": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "Phone number value." - }, - "type": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "Phone type such as mobile, work, home, or internal." - }, - "value": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "Backward-compatible alias for the phone number value." - } - }, - "type": "object" - }, - "type": "array" - }, - { - "type": "null" - } -] - added
Input schema / properties / phones / itemsAdded value: +{ + "additionalProperties": false, + "description": "Typed input for a phone entry.", + "properties": { + "number": { + "default": null, + "description": "Phone number value.", + "type": "string" + }, + "type": { + "default": null, + "description": "Phone type such as mobile, work, home, or internal.", + "type": "string" + }, + "value": { + "default": null, + "description": "Backward-compatible alias for the phone number value.", + "type": "string" + } + }, + "type": "object" +} - added
Input schema / properties / phones / typeAdded value: +"array" - removed
Input schema / properties / relations / anyOfRemoved value: -[ - { - "items": { - "additionalProperties": false, - "description": "Typed input for a relation entry (spouse, parent, child, etc.).", - "properties": { - "person": { - "description": "The related person's name (matched against contact names by Google Assistant).", - "type": "string" - }, - "type": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "Relation type: spouse, child, parent, father, mother, sister, brother, friend, manager, assistant, partner, sibling, domesticPartner, or custom." - } - }, - "required": [ - "person" - ], - "type": "object" - }, - "type": "array" - }, - { - "type": "null" - } -] - added
Input schema / properties / relations / itemsAdded value: +{ + "additionalProperties": false, + "description": "Typed input for a relation entry (spouse, parent, child, etc.).", + "properties": { + "person": { + "description": "The related person's name (matched against contact names by Google Assistant).", + "type": "string" + }, + "type": { + "default": null, + "description": "Relation type: spouse, child, parent, father, mother, sister, brother, friend, manager, assistant, partner, sibling, domesticPartner, or custom.", + "type": "string" + } + }, + "required": [ + "person" + ], + "type": "object" +} - added
Input schema / properties / relations / typeAdded value: +"array" - removed
Input schema / properties / urls / anyOfRemoved value: -[ - { - "items": { - "additionalProperties": false, - "description": "Typed input for a URL entry.", - "properties": { - "type": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "URL type such as homepage, blog, profile, work, ftp, reservations, or other. Custom values allowed." - }, - "value": { - "description": "The URL value (e.g. https://example.com).", - "type": "string" - } - }, - "required": [ - "value" - ], - "type": "object" - }, - "type": "array" - }, - { - "type": "null" - } -] - added
Input schema / properties / urls / itemsAdded value: +{ + "additionalProperties": false, + "description": "Typed input for a URL entry.", + "properties": { + "type": { + "default": null, + "description": "URL type such as homepage, blog, profile, work, ftp, reservations, or other. Custom values allowed.", + "type": "string" + }, + "value": { + "description": "The URL value (e.g. https://example.com).", + "type": "string" + } + }, + "required": [ + "value" + ], + "type": "object" +} - added
Input schema / properties / urls / typeAdded value: +"array" - removed
Input schema / properties / user_defined / anyOfRemoved value: -[ - { - "items": { - "additionalProperties": false, - "description": "Typed input for a userDefined custom field entry.", - "properties": { - "key": { - "description": "Custom field key (e.g. 'ID', 'Hebrew Birthday', 'Account Number').", - "type": "string" - }, - "value": { - "default": "", - "description": "Custom field value. May be omitted when using remove mode (only the key is needed).", - "type": "string" - } - }, - "required": [ - "key" - ], - "type": "object" - }, - "type": "array" - }, - { - "type": "null" - } -] - added
Input schema / properties / user_defined / itemsAdded value: +{ + "additionalProperties": false, + "description": "Typed input for a userDefined custom field entry.", + "properties": { + "key": { + "description": "Custom field key (e.g. 'ID', 'Hebrew Birthday', 'Account Number').", + "type": "string" + }, + "value": { + "default": "", + "description": "Custom field value. May be omitted when using remove mode (only the key is needed).", + "type": "string" + } + }, + "required": [ + "key" + ], + "type": "object" +} - added
Input schema / properties / user_defined / typeAdded value: +"array"
- Changed
manage_contact_group10 fields changed- removed
Input schema / properties / add_contact_ids / anyOfRemoved value: -[ - { - "items": { - "type": "string" - }, - "type": "array" - }, - { - "type": "null" - } -] - added
Input schema / properties / add_contact_ids / itemsAdded value: +{ + "type": "string" +} - added
Input schema / properties / add_contact_ids / typeAdded value: +"array" - removed
Input schema / properties / group_id / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / group_id / typeAdded value: +"string" - removed
Input schema / properties / name / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / name / typeAdded value: +"string" - removed
Input schema / properties / remove_contact_ids / anyOfRemoved value: -[ - { - "items": { - "type": "string" - }, - "type": "array" - }, - { - "type": "null" - } -] - added
Input schema / properties / remove_contact_ids / itemsAdded value: +{ + "type": "string" +} - added
Input schema / properties / remove_contact_ids / typeAdded value: +"array"
- Changed
manage_contacts_batch12 fields changed- removed
Input schema / properties / contact_ids / anyOfRemoved value: -[ - { - "items": { - "type": "string" - }, - "type": "array" - }, - { - "type": "null" - } -] - added
Input schema / properties / contact_ids / itemsAdded value: +{ + "type": "string" +} - added
Input schema / properties / contact_ids / typeAdded value: +"array" - removed
Input schema / properties / contacts / anyOfRemoved value: -[ - { - "items": { - "additionalProperties": false, - "description": "Typed batch-create input for a contact.", - "properties": { - "address": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - }, - "birthday": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "Birthday as 'YYYY-MM-DD', 'MM-DD' (no year), or 'clear'/'' to remove." - }, - "email": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - }, - "emails": { - "anyOf": [ - { - "items": { - "additionalProperties": false, - "description": "Typed input for an email entry.", - "properties": { - "address": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "Email address value." - }, - "type": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "Email type such as work, home, or other." - }, - "value": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "Backward-compatible alias for the email address value." - } - }, - "type": "object" - }, - "type": "array" - }, - { - "type": "null" - } - ], - "default": null - }, - "family_name": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - }, - "given_name": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - }, - "job_title": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - }, - "nicknames": { - "anyOf": [ - { - "items": { - "additionalProperties": false, - "description": "Typed input for a nickname entry.", - "properties": { - "type": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "Nickname type such as default, alternate_name, maiden_name, initials, or other." - }, - "value": { - "description": "Nickname value. Used for bilingual contacts (e.g. Hebrew alternative form).", - "type": "string" - } - }, - "required": [ - "value" - ], - "type": "object" - }, - "type": "array" - }, - { - "type": "null" - } - ], - "default": null - }, - "notes": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - }, - "organization": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - }, - "organizations": { - "anyOf": [ - { - "items": { - "additionalProperties": false, - "description": "Typed input for an organization entry.", - "properties": { - "department": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "Department name." - }, - "jobDescription": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "Optional organization job description." - }, - "name": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "Organization name." - }, - "title": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "Job title." - }, - "type": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "Organization type such as work or school." - } - }, - "type": "object" - }, - "type": "array" - }, - { - "type": "null" - } - ], - "default": null - }, - "phone": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - }, - "phones": { - "anyOf": [ - { - "items": { - "additionalProperties": false, - "description": "Typed input for a phone entry.", - "properties": { - "number": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "Phone number value." - }, - "type": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "Phone type such as mobile, work, home, or internal." - }, - "value": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "Backward-compatible alias for the phone number value." - } - }, - "type": "object" - }, - "type": "array" - }, - { - "type": "null" - } - ], - "default": null - }, - "relations": { - "anyOf": [ - { - "items": { - "additionalProperties": false, - "description": "Typed input for a relation entry (spouse, parent, child, etc.).", - "properties": { - "person": { - "description": "The related person's name (matched against contact names by Google Assistant).", - "type": "string" - }, - "type": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "Relation type: spouse, child, parent, father, mother, sister, brother, friend, manager, assistant, partner, sibling, domesticPartner, or custom." - } - }, - "required": [ - "person" - ], - "type": "object" - }, - "type": "array" - }, - { - "type": "null" - } - ], - "default": null - }, - "urls": { - "anyOf": [ - { - "items": { - "additionalProperties": false, - "description": "Typed input for a URL entry.", - "properties": { - "type": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "URL type such as homepage, blog, profile, work, ftp, reservations, or other. Custom values allowed." - }, - "value": { - "description": "The URL value (e.g. https://example.com).", - "type": "string" - } - }, - "required": [ - "value" - ], - "type": "object" - }, - "type": "array" - }, - { - "type": "null" - } - ], - "default": null - }, - "user_defined": { - "anyOf": [ - { - "items": { - "additionalProperties": false, - "description": "Typed input for a userDefined custom field entry.", - "properties": { - "key": { - "description": "Custom field key (e.g. 'ID', 'Hebrew Birthday', 'Account Number').", - "type": "string" - }, - "value": { - "default": "", - "description": "Custom field value. May be omitted when using remove mode (only the key is needed).", - "type": "string" - } - }, - "required": [ - "key" - ], - "type": "object" - }, - "type": "array" - }, - { - "type": "null" - } - ], - "default": null - } - }, - "type": "object" - }, - "type": "array" - }, - { - "type": "null" - } -] - added
Input schema / properties / contacts / itemsAdded value: +{ + "additionalProperties": false, + "description": "Typed batch-create input for a contact.", + "properties": { + "address": { + "default": null, + "type": "string" + }, + "birthday": { + "default": null, + "description": "Birthday as 'YYYY-MM-DD', 'MM-DD' (no year), or 'clear'/'' to remove.", + "type": "string" + }, + "email": { + "default": null, + "type": "string" + }, + "emails": { + "default": null, + "items": { + "additionalProperties": false, + "description": "Typed input for an email entry.", + "properties": { + "address": { + "default": null, + "description": "Email address value.", + "type": "string" + }, + "type": { + "default": null, + "description": "Email type such as work, home, or other.", + "type": "string" + }, + "value": { + "default": null, + "description": "Backward-compatible alias for the email address value.", + "type": "string" + } + }, + "type": "object" + }, + "type": "array" + }, + "family_name": { + "default": null, + "type": "string" + }, + "given_name": { + "default": null, + "type": "string" + }, + "job_title": { + "default": null, + "type": "string" + }, + "nicknames": { + "default": null, + "items": { + "additionalProperties": false, + "description": "Typed input for a nickname entry.", + "properties": { + "type": { + "default": null, + "description": "Nickname type such as default, alternate_name, maiden_name, initials, or other.", + "type": "string" + }, + "value": { + "description": "Nickname value. Used for bilingual contacts (e.g. Hebrew alternative form).", + "type": "string" + } + }, + "required": [ + "value" + ], + "type": "object" + }, + "type": "array" + }, + "notes": { + "default": null, + "type": "string" + }, + "organization": { + "default": null, + "type": "string" + }, + "organizations": { + "default": null, + "items": { + "additionalProperties": false, + "description": "Typed input for an organization entry.", + "properties": { + "department": { + "default": null, + "description": "Department name.", + "type": "string" + }, + "jobDescription": { + "default": null, + "description": "Optional organization job description.", + "type": "string" + }, + "name": { + "default": null, + "description": "Organization name.", + "type": "string" + }, + "title": { + "default": null, + "description": "Job title.", + "type": "string" + }, + "type": { + "default": null, + "description": "Organization type such as work or school.", + "type": "string" + } + }, + "type": "object" + }, + "type": "array" + }, + "phone": { + "default": null, + "type": "string" + }, + "phones": { + "default": null, + "items": { + "additionalProperties": false, + "description": "Typed input for a phone entry.", + "properties": { + "number": { + "default": null, + "description": "Phone number value.", + "type": "string" + }, + "type": { + "default": null, + "description": "Phone type such as mobile, work, home, or internal.", + "type": "string" + }, + "value": { + "default": null, + "description": "Backward-compatible alias for the phone number value.", + "type": "string" + } + }, + "type": "object" + }, + "type": "array" + }, + "relations": { + "default": null, + "items": { + "additionalProperties": false, + "description": "Typed input for a relation entry (spouse, parent, child, etc.).", + "properties": { + "person": { + "description": "The related person's name (matched against contact names by Google Assistant).", + "type": "string" + }, + "type": { + "default": null, + "description": "Relation type: spouse, child, parent, father, mother, sister, brother, friend, manager, assistant, partner, sibling, domesticPartner, or custom.", + "type": "string" + } + }, + "required": [ + "person" + ], + "type": "object" + }, + "type": "array" + }, + "urls": { + "default": null, + "items": { + "additionalProperties": false, + "description": "Typed input for a URL entry.", + "properties": { + "type": { + "default": null, + "description": "URL type such as homepage, blog, profile, work, ftp, reservations, or other. Custom values allowed.", + "type": "string" + }, + "value": { + "description": "The URL value (e.g. https://example.com).", + "type": "string" + } + }, + "required": [ + "value" + ], + "type": "object" + }, + "type": "array" + }, + "user_defined": { + "default": null, + "items": { + "additionalProperties": false, + "description": "Typed input for a userDefined custom field entry.", + "properties": { + "key": { + "description": "Custom field key (e.g. 'ID', 'Hebrew Birthday', 'Account Number').", + "type": "string" + }, + "value": { + "default": "", + "description": "Custom field value. May be omitted when using remove mode (only the key is needed).", + "type": "string" + } + }, + "required": [ + "key" + ], + "type": "object" + }, + "type": "array" + } + }, + "type": "object" +} - added
Input schema / properties / contacts / typeAdded value: +"array" - removed
Input schema / properties / field / anyOfRemoved value: -[ - { - "enum": [ - "names", - "phoneNumbers", - "emailAddresses", - "organizations", - "nicknames", - "urls", - "userDefined", - "relations", - "biographies", - "addresses", - "birthdays" - ], - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / field / enumAdded value: +[ + "names", + "phoneNumbers", + "emailAddresses", + "organizations", + "nicknames", + "urls", + "userDefined", + "relations", + "biographies", + "addresses", + "birthdays" +] - added
Input schema / properties / field / typeAdded value: +"string" - removed
Input schema / properties / updates / anyOfRemoved value: -[ - { - "items": { - "additionalProperties": false, - "description": "Typed batch-update input for a contact.", - "properties": { - "address": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - }, - "birthday": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "Birthday as 'YYYY-MM-DD', 'MM-DD' (no year), or 'clear'/'' to remove." - }, - "contact_id": { - "description": "Contact ID like \"c123\" or full resource name like \"people/c123\".", - "type": "string" - }, - "email": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - }, - "emails": { - "anyOf": [ - { - "items": { - "additionalProperties": false, - "description": "Typed input for an email entry.", - "properties": { - "address": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "Email address value." - }, - "type": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "Email type such as work, home, or other." - }, - "value": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "Backward-compatible alias for the email address value." - } - }, - "type": "object" - }, - "type": "array" - }, - { - "type": "null" - } - ], - "default": null - }, - "family_name": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - }, - "given_name": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - }, - "job_title": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - }, - "nicknames": { - "anyOf": [ - { - "items": { - "additionalProperties": false, - "description": "Typed input for a nickname entry.", - "properties": { - "type": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "Nickname type such as default, alternate_name, maiden_name, initials, or other." - }, - "value": { - "description": "Nickname value. Used for bilingual contacts (e.g. Hebrew alternative form).", - "type": "string" - } - }, - "required": [ - "value" - ], - "type": "object" - }, - "type": "array" - }, - { - "type": "null" - } - ], - "default": null - }, - "notes": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - }, - "organization": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - }, - "organizations": { - "anyOf": [ - { - "items": { - "additionalProperties": false, - "description": "Typed input for an organization entry.", - "properties": { - "department": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "Department name." - }, - "jobDescription": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "Optional organization job description." - }, - "name": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "Organization name." - }, - "title": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "Job title." - }, - "type": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "Organization type such as work or school." - } - }, - "type": "object" - }, - "type": "array" - }, - { - "type": "null" - } - ], - "default": null - }, - "phone": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - }, - "phones": { - "anyOf": [ - { - "items": { - "additionalProperties": false, - "description": "Typed input for a phone entry.", - "properties": { - "number": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "Phone number value." - }, - "type": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "Phone type such as mobile, work, home, or internal." - }, - "value": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "Backward-compatible alias for the phone number value." - } - }, - "type": "object" - }, - "type": "array" - }, - { - "type": "null" - } - ], - "default": null - }, - "relations": { - "anyOf": [ - { - "items": { - "additionalProperties": false, - "description": "Typed input for a relation entry (spouse, parent, child, etc.).", - "properties": { - "person": { - "description": "The related person's name (matched against contact names by Google Assistant).", - "type": "string" - }, - "type": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "Relation type: spouse, child, parent, father, mother, sister, brother, friend, manager, assistant, partner, sibling, domesticPartner, or custom." - } - }, - "required": [ - "person" - ], - "type": "object" - }, - "type": "array" - }, - { - "type": "null" - } - ], - "default": null - }, - "urls": { - "anyOf": [ - { - "items": { - "additionalProperties": false, - "description": "Typed input for a URL entry.", - "properties": { - "type": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "URL type such as homepage, blog, profile, work, ftp, reservations, or other. Custom values allowed." - }, - "value": { - "description": "The URL value (e.g. https://example.com).", - "type": "string" - } - }, - "required": [ - "value" - ], - "type": "object" - }, - "type": "array" - }, - { - "type": "null" - } - ], - "default": null - }, - "user_defined": { - "anyOf": [ - { - "items": { - "additionalProperties": false, - "description": "Typed input for a userDefined custom field entry.", - "properties": { - "key": { - "description": "Custom field key (e.g. 'ID', 'Hebrew Birthday', 'Account Number').", - "type": "string" - }, - "value": { - "default": "", - "description": "Custom field value. May be omitted when using remove mode (only the key is needed).", - "type": "string" - } - }, - "required": [ - "key" - ], - "type": "object" - }, - "type": "array" - }, - { - "type": "null" - } - ], - "default": null - } - }, - "required": [ - "contact_id" - ], - "type": "object" - }, - "type": "array" - }, - { - "type": "null" - } -] - added
Input schema / properties / updates / itemsAdded value: +{ + "additionalProperties": false, + "description": "Typed batch-update input for a contact.", + "properties": { + "address": { + "default": null, + "type": "string" + }, + "birthday": { + "default": null, + "description": "Birthday as 'YYYY-MM-DD', 'MM-DD' (no year), or 'clear'/'' to remove.", + "type": "string" + }, + "contact_id": { + "description": "Contact ID like \"c123\" or full resource name like \"people/c123\".", + "type": "string" + }, + "email": { + "default": null, + "type": "string" + }, + "emails": { + "default": null, + "items": { + "additionalProperties": false, + "description": "Typed input for an email entry.", + "properties": { + "address": { + "default": null, + "description": "Email address value.", + "type": "string" + }, + "type": { + "default": null, + "description": "Email type such as work, home, or other.", + "type": "string" + }, + "value": { + "default": null, + "description": "Backward-compatible alias for the email address value.", + "type": "string" + } + }, + "type": "object" + }, + "type": "array" + }, + "family_name": { + "default": null, + "type": "string" + }, + "given_name": { + "default": null, + "type": "string" + }, + "job_title": { + "default": null, + "type": "string" + }, + "nicknames": { + "default": null, + "items": { + "additionalProperties": false, + "description": "Typed input for a nickname entry.", + "properties": { + "type": { + "default": null, + "description": "Nickname type such as default, alternate_name, maiden_name, initials, or other.", + "type": "string" + }, + "value": { + "description": "Nickname value. Used for bilingual contacts (e.g. Hebrew alternative form).", + "type": "string" + } + }, + "required": [ + "value" + ], + "type": "object" + }, + "type": "array" + }, + "notes": { + "default": null, + "type": "string" + }, + "organization": { + "default": null, + "type": "string" + }, + "organizations": { + "default": null, + "items": { + "additionalProperties": false, + "description": "Typed input for an organization entry.", + "properties": { + "department": { + "default": null, + "description": "Department name.", + "type": "string" + }, + "jobDescription": { + "default": null, + "description": "Optional organization job description.", + "type": "string" + }, + "name": { + "default": null, + "description": "Organization name.", + "type": "string" + }, + "title": { + "default": null, + "description": "Job title.", + "type": "string" + }, + "type": { + "default": null, + "description": "Organization type such as work or school.", + "type": "string" + } + }, + "type": "object" + }, + "type": "array" + }, + "phone": { + "default": null, + "type": "string" + }, + "phones": { + "default": null, + "items": { + "additionalProperties": false, + "description": "Typed input for a phone entry.", + "properties": { + "number": { + "default": null, + "description": "Phone number value.", + "type": "string" + }, + "type": { + "default": null, + "description": "Phone type such as mobile, work, home, or internal.", + "type": "string" + }, + "value": { + "default": null, + "description": "Backward-compatible alias for the phone number value.", + "type": "string" + } + }, + "type": "object" + }, + "type": "array" + }, + "relations": { + "default": null, + "items": { + "additionalProperties": false, + "description": "Typed input for a relation entry (spouse, parent, child, etc.).", + "properties": { + "person": { + "description": "The related person's name (matched against contact names by Google Assistant).", + "type": "string" + }, + "type": { + "default": null, + "description": "Relation type: spouse, child, parent, father, mother, sister, brother, friend, manager, assistant, partner, sibling, domesticPartner, or custom.", + "type": "string" + } + }, + "required": [ + "person" + ], + "type": "object" + }, + "type": "array" + }, + "urls": { + "default": null, + "items": { + "additionalProperties": false, + "description": "Typed input for a URL entry.", + "properties": { + "type": { + "default": null, + "description": "URL type such as homepage, blog, profile, work, ftp, reservations, or other. Custom values allowed.", + "type": "string" + }, + "value": { + "description": "The URL value (e.g. https://example.com).", + "type": "string" + } + }, + "required": [ + "value" + ], + "type": "object" + }, + "type": "array" + }, + "user_defined": { + "default": null, + "items": { + "additionalProperties": false, + "description": "Typed input for a userDefined custom field entry.", + "properties": { + "key": { + "description": "Custom field key (e.g. 'ID', 'Hebrew Birthday', 'Account Number').", + "type": "string" + }, + "value": { + "default": "", + "description": "Custom field value. May be omitted when using remove mode (only the key is needed).", + "type": "string" + } + }, + "required": [ + "key" + ], + "type": "object" + }, + "type": "array" + } + }, + "required": [ + "contact_id" + ], + "type": "object" +} - added
Input schema / properties / updates / typeAdded value: +"array"
- Changed
manage_deployment8 fields changed- removed
Input schema / properties / deployment_id / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / deployment_id / typeAdded value: +"string" - removed
Input schema / properties / description / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / description / typeAdded value: +"string" - removed
Input schema / properties / version_description / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / version_description / typeAdded value: +"string" - removed
Input schema / properties / version_number / anyOfRemoved value: -[ - { - "type": "integer" - }, - { - "type": "null" - } -] - added
Input schema / properties / version_number / typeAdded value: +"integer"
- Changed
manage_doc_tab10 fields changed- removed
Input schema / properties / index / anyOfRemoved value: -[ - { - "type": "integer" - }, - { - "type": "null" - } -] - added
Input schema / properties / index / typeAdded value: +"integer" - removed
Input schema / properties / markdown_text / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / markdown_text / typeAdded value: +"string" - removed
Input schema / properties / parent_tab_id / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / parent_tab_id / typeAdded value: +"string" - removed
Input schema / properties / tab_id / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / tab_id / typeAdded value: +"string" - removed
Input schema / properties / title / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / title / typeAdded value: +"string"
- Changed
manage_document_comment4 fields changed- removed
Input schema / properties / comment_content / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / comment_content / typeAdded value: +"string" - removed
Input schema / properties / comment_id / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / comment_id / typeAdded value: +"string"
- Changed
manage_drive_access17 fields changed- removed
Input schema / properties / allow_file_discovery / anyOfRemoved value: -[ - { - "type": "boolean" - }, - { - "type": "null" - } -] - added
Input schema / properties / allow_file_discovery / typeAdded value: +"boolean" - removed
Input schema / properties / email_message / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / email_message / typeAdded value: +"string" - removed
Input schema / properties / expiration_time / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / expiration_time / typeAdded value: +"string" - removed
Input schema / properties / new_owner_email / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / new_owner_email / typeAdded value: +"string" - removed
Input schema / properties / permission_id / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / permission_id / typeAdded value: +"string" - removed
Input schema / properties / recipients / anyOfRemoved value: -[ - { - "items": { - "additionalProperties": true, - "type": "object" - }, - "type": "array" - }, - { - "type": "null" - } -] - added
Input schema / properties / recipients / itemsAdded value: +{ + "additionalProperties": true, + "type": "object" +} - added
Input schema / properties / recipients / typeAdded value: +"array" - removed
Input schema / properties / role / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / role / typeAdded value: +"string" - removed
Input schema / properties / share_with / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / share_with / typeAdded value: +"string"
- Changed
manage_event62 fields changed- removed
Input schema / properties / add_google_meet / anyOfRemoved value: -[ - { - "type": "boolean" - }, - { - "type": "null" - } -] - added
Input schema / properties / add_google_meet / typeAdded value: +"boolean" - removed
Input schema / properties / attachments / anyOfRemoved value: -[ - { - "items": { - "type": "string" - }, - "type": "array" - }, - { - "type": "null" - } -] - added
Input schema / properties / attachments / itemsAdded value: +{ + "type": "string" +} - added
Input schema / properties / attachments / typeAdded value: +"array" - removed
Input schema / properties / attendees / anyOfRemoved value: -[ - { - "items": { - "type": "string" - }, - "type": "array" - }, - { - "items": { - "additionalProperties": true, - "type": "object" - }, - "type": "array" - }, - { - "type": "null" - } -] - changed
Input schema / properties / attendees / descriptionPrevious value: -"Attendee email addresses or objects."New value: +"Attendee email addresses, attendee objects (e.g. {\"email\": ..., \"responseStatus\": \"accepted\"}), or a mix of both." - added
Input schema / properties / attendees / itemsAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "additionalProperties": true, + "type": "object" + } + ] +} - added
Input schema / properties / attendees / typeAdded value: +"array" - removed
Input schema / properties / color_id / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / color_id / typeAdded value: +"string" - added
Input schema / properties / conference_data / additionalPropertiesAdded value: +true - removed
Input schema / properties / conference_data / anyOfRemoved value: -[ - { - "additionalProperties": true, - "type": "object" - }, - { - "type": "null" - } -] - added
Input schema / properties / conference_data / typeAdded value: +"object" - removed
Input schema / properties / conference_id / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / conference_id / typeAdded value: +"string" - removed
Input schema / properties / conference_passcode / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / conference_passcode / typeAdded value: +"string" - removed
Input schema / properties / conference_provider / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / conference_provider / typeAdded value: +"string" - removed
Input schema / properties / conference_uri / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / conference_uri / typeAdded value: +"string" - removed
Input schema / properties / description / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / description / typeAdded value: +"string" - removed
Input schema / properties / end_time / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / end_time / typeAdded value: +"string" - removed
Input schema / properties / end_timezone / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / end_timezone / typeAdded value: +"string" - removed
Input schema / properties / event_id / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / event_id / typeAdded value: +"string" - removed
Input schema / properties / guests_can_invite_others / anyOfRemoved value: -[ - { - "type": "boolean" - }, - { - "type": "null" - } -] - added
Input schema / properties / guests_can_invite_others / typeAdded value: +"boolean" - removed
Input schema / properties / guests_can_modify / anyOfRemoved value: -[ - { - "type": "boolean" - }, - { - "type": "null" - } -] - added
Input schema / properties / guests_can_modify / typeAdded value: +"boolean" - removed
Input schema / properties / guests_can_see_other_guests / anyOfRemoved value: -[ - { - "type": "boolean" - }, - { - "type": "null" - } -] - added
Input schema / properties / guests_can_see_other_guests / typeAdded value: +"boolean" - removed
Input schema / properties / location / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / location / typeAdded value: +"string" - removed
Input schema / properties / recurrence / anyOfRemoved value: -[ - { - "items": { - "type": "string" - }, - "type": "array" - }, - { - "type": "null" - } -] - added
Input schema / properties / recurrence / itemsAdded value: +{ + "type": "string" +} - added
Input schema / properties / recurrence / typeAdded value: +"array" - changed
Input schema / properties / reminders / anyOfPrevious value: -[ - { - "type": "string" - }, - { - "items": { - "additionalProperties": true, - "type": "object" - }, - "type": "array" - }, - { - "type": "null" - } -]New value: +[ + { + "type": "string" + }, + { + "items": { + "additionalProperties": true, + "type": "object" + }, + "type": "array" + } +] - removed
Input schema / properties / response / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / response / typeAdded value: +"string" - removed
Input schema / properties / rsvp_comment / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / rsvp_comment / typeAdded value: +"string" - removed
Input schema / properties / send_updates / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / send_updates / typeAdded value: +"string" - removed
Input schema / properties / start_time / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / start_time / typeAdded value: +"string" - removed
Input schema / properties / start_timezone / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / start_timezone / typeAdded value: +"string" - removed
Input schema / properties / summary / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / summary / typeAdded value: +"string" - removed
Input schema / properties / timezone / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / timezone / typeAdded value: +"string" - removed
Input schema / properties / transparency / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / transparency / typeAdded value: +"string" - removed
Input schema / properties / use_default_reminders / anyOfRemoved value: -[ - { - "type": "boolean" - }, - { - "type": "null" - } -] - added
Input schema / properties / use_default_reminders / typeAdded value: +"boolean" - removed
Input schema / properties / visibility / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / visibility / typeAdded value: +"string"
- Changed
manage_focus_time25 fields changed- removed
Input schema / properties / auto_decline_mode / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / auto_decline_mode / typeAdded value: +"string" - removed
Input schema / properties / chat_status / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / chat_status / typeAdded value: +"string" - removed
Input schema / properties / decline_message / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / decline_message / typeAdded value: +"string" - removed
Input schema / properties / description / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / description / typeAdded value: +"string" - removed
Input schema / properties / end_time / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / end_time / typeAdded value: +"string" - removed
Input schema / properties / event_id / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / event_id / typeAdded value: +"string" - removed
Input schema / properties / recurrence / anyOfRemoved value: -[ - { - "items": { - "type": "string" - }, - "type": "array" - }, - { - "type": "null" - } -] - added
Input schema / properties / recurrence / itemsAdded value: +{ + "type": "string" +} - added
Input schema / properties / recurrence / typeAdded value: +"array" - removed
Input schema / properties / start_time / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / start_time / typeAdded value: +"string" - removed
Input schema / properties / summary / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / summary / typeAdded value: +"string" - removed
Input schema / properties / time_max / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / time_max / typeAdded value: +"string" - removed
Input schema / properties / time_min / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / time_min / typeAdded value: +"string" - removed
Input schema / properties / timezone / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / timezone / typeAdded value: +"string"
- Changed
manage_gmail_filter8 fields changed- added
Input schema / properties / criteria / additionalPropertiesAdded value: +true - removed
Input schema / properties / criteria / anyOfRemoved value: -[ - { - "additionalProperties": true, - "type": "object" - }, - { - "type": "null" - } -] - added
Input schema / properties / criteria / typeAdded value: +"object" - added
Input schema / properties / filter_action / additionalPropertiesAdded value: +true - removed
Input schema / properties / filter_action / anyOfRemoved value: -[ - { - "additionalProperties": true, - "type": "object" - }, - { - "type": "null" - } -] - added
Input schema / properties / filter_action / typeAdded value: +"object" - removed
Input schema / properties / filter_id / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / filter_id / typeAdded value: +"string"
- Changed
manage_gmail_label13 fields changed- removed
Input schema / properties / background_color / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / background_color / typeAdded value: +"string" - removed
Input schema / properties / label_id / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / label_id / typeAdded value: +"string" - changed
Input schema / properties / label_list_visibility / defaultPrevious value: -"labelShow"New value: +null - changed
Input schema / properties / label_list_visibility / descriptionPrevious value: -"Whether the label is shown in the label list."New value: +"Whether the label is shown in the label list. Defaults to \"labelShow\" on create. On update, omitting it keeps the label's current setting." - changed
Input schema / properties / label_list_visibility / enumPrevious value: -[ - "labelShow", - "labelHide" -]New value: +[ + "labelShow", + "labelShowIfUnread", + "labelHide" +] - changed
Input schema / properties / message_list_visibility / defaultPrevious value: -"show"New value: +null - changed
Input schema / properties / message_list_visibility / descriptionPrevious value: -"Whether the label is shown in the message list."New value: +"Whether the label's messages are shown in the message list. Defaults to \"show\" on create. On update, omitting it keeps the label's current setting." - removed
Input schema / properties / name / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / name / typeAdded value: +"string" - removed
Input schema / properties / text_color / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / text_color / typeAdded value: +"string"
- Added
manage_named_range - Changed
manage_out_of_office21 fields changed- removed
Input schema / properties / auto_decline_mode / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / auto_decline_mode / typeAdded value: +"string" - removed
Input schema / properties / decline_message / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / decline_message / typeAdded value: +"string" - removed
Input schema / properties / end_time / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / end_time / typeAdded value: +"string" - removed
Input schema / properties / event_id / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / event_id / typeAdded value: +"string" - removed
Input schema / properties / recurrence / anyOfRemoved value: -[ - { - "items": { - "type": "string" - }, - "type": "array" - }, - { - "type": "null" - } -] - added
Input schema / properties / recurrence / itemsAdded value: +{ + "type": "string" +} - added
Input schema / properties / recurrence / typeAdded value: +"array" - removed
Input schema / properties / start_time / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / start_time / typeAdded value: +"string" - removed
Input schema / properties / summary / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / summary / typeAdded value: +"string" - removed
Input schema / properties / time_max / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / time_max / typeAdded value: +"string" - removed
Input schema / properties / time_min / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / time_min / typeAdded value: +"string" - removed
Input schema / properties / timezone / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / timezone / typeAdded value: +"string"
- Changed
manage_presentation_comment4 fields changed- removed
Input schema / properties / comment_content / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / comment_content / typeAdded value: +"string" - removed
Input schema / properties / comment_id / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / comment_id / typeAdded value: +"string"
- Added
manage_script_content - Added
manage_script_project - Added
manage_script_trigger - Added
manage_script_version - Changed
manage_sheet_tab4 fields changed- removed
Input schema / properties / new_index / anyOfRemoved value: -[ - { - "type": "integer" - }, - { - "type": "null" - } -] - added
Input schema / properties / new_index / typeAdded value: +"integer" - removed
Input schema / properties / new_name / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / new_name / typeAdded value: +"string"
- Changed
manage_spreadsheet_comment4 fields changed- removed
Input schema / properties / comment_content / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / comment_content / typeAdded value: +"string" - removed
Input schema / properties / comment_id / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / comment_id / typeAdded value: +"string"
- Changed
manage_task16 fields changed- removed
Input schema / properties / destination_task_list / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / destination_task_list / typeAdded value: +"string" - removed
Input schema / properties / due / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / due / typeAdded value: +"string" - removed
Input schema / properties / notes / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / notes / typeAdded value: +"string" - removed
Input schema / properties / parent / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / parent / typeAdded value: +"string" - removed
Input schema / properties / previous / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / previous / typeAdded value: +"string" - removed
Input schema / properties / status / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / status / typeAdded value: +"string" - removed
Input schema / properties / task_id / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / task_id / typeAdded value: +"string" - removed
Input schema / properties / title / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / title / typeAdded value: +"string"
- Changed
manage_task_list4 fields changed- removed
Input schema / properties / task_list_id / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / task_list_id / typeAdded value: +"string" - removed
Input schema / properties / title / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / title / typeAdded value: +"string"
- Changed
modify_sheet_values1 field changed- changed
Input schema / properties / values / anyOfPrevious value: -[ - { - "type": "string" - }, - { - "items": { - "items": { - "type": "string" - }, - "type": "array" - }, - "type": "array" - }, - { - "type": "null" - } -]New value: +[ + { + "type": "string" + }, + { + "items": { + "items": { + "type": "string" + }, + "type": "array" + }, + "type": "array" + } +]
- Changed
query_freebusy7 fields changed- removed
Input schema / properties / calendar_expansion_max / anyOfRemoved value: -[ - { - "type": "integer" - }, - { - "type": "null" - } -] - added
Input schema / properties / calendar_expansion_max / typeAdded value: +"integer" - removed
Input schema / properties / calendar_ids / anyOfRemoved value: -[ - { - "items": { - "type": "string" - }, - "type": "array" - }, - { - "type": "null" - } -] - added
Input schema / properties / calendar_ids / itemsAdded value: +{ + "type": "string" +} - added
Input schema / properties / calendar_ids / typeAdded value: +"array" - removed
Input schema / properties / group_expansion_max / anyOfRemoved value: -[ - { - "type": "integer" - }, - { - "type": "null" - } -] - added
Input schema / properties / group_expansion_max / typeAdded value: +"integer"
- Changed
read_sheet_values1 field changed- added
Input schema / properties / include_smart_chipsAdded value: +{ + "default": false, + "description": "If True, also fetch smart chips metadata (Drive files/folders\nand People chips) for the range. Defaults to False to avoid expensive includeGridData requests.", + "type": "boolean" +}
- Changed
resize_sheet_dimensions26 fields changed- changed
Input schema / properties / auto_resize_columns / anyOfPrevious value: -[ - { - "type": "string" - }, - { - "items": { - "type": "string" - }, - "type": "array" - }, - { - "type": "null" - } -]New value: +[ + { + "type": "string" + }, + { + "items": { + "type": "string" + }, + "type": "array" + } +] - changed
Input schema / properties / auto_resize_rows / anyOfPrevious value: -[ - { - "type": "string" - }, - { - "items": { - "type": "integer" - }, - "type": "array" - }, - { - "type": "null" - } -]New value: +[ + { + "type": "string" + }, + { + "items": { + "type": "integer" + }, + "type": "array" + } +] - changed
Input schema / properties / column_sizes / anyOfPrevious value: -[ - { - "type": "string" - }, - { - "additionalProperties": true, - "type": "object" - }, - { - "type": "null" - } -]New value: +[ + { + "type": "string" + }, + { + "additionalProperties": true, + "type": "object" + } +] - changed
Input schema / properties / delete_columns / anyOfPrevious value: -[ - { - "type": "string" - }, - { - "items": { - "type": "string" - }, - "type": "array" - }, - { - "type": "null" - } -]New value: +[ + { + "type": "string" + }, + { + "items": { + "type": "string" + }, + "type": "array" + } +] - removed
Input schema / properties / delete_row_range / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / delete_row_range / typeAdded value: +"string" - changed
Input schema / properties / delete_rows / anyOfPrevious value: -[ - { - "type": "string" - }, - { - "items": { - "type": "integer" - }, - "type": "array" - }, - { - "type": "null" - } -]New value: +[ + { + "type": "string" + }, + { + "items": { + "type": "integer" + }, + "type": "array" + } +] - removed
Input schema / properties / frozen_column_count / anyOfRemoved value: -[ - { - "type": "integer" - }, - { - "type": "null" - } -] - added
Input schema / properties / frozen_column_count / typeAdded value: +"integer" - removed
Input schema / properties / frozen_row_count / anyOfRemoved value: -[ - { - "type": "integer" - }, - { - "type": "null" - } -] - added
Input schema / properties / frozen_row_count / typeAdded value: +"integer" - changed
Input schema / properties / hide_columns / anyOfPrevious value: -[ - { - "type": "string" - }, - { - "items": { - "type": "string" - }, - "type": "array" - }, - { - "type": "null" - } -]New value: +[ + { + "type": "string" + }, + { + "items": { + "type": "string" + }, + "type": "array" + } +] - changed
Input schema / properties / hide_rows / anyOfPrevious value: -[ - { - "type": "string" - }, - { - "items": { - "type": "integer" - }, - "type": "array" - }, - { - "type": "null" - } -]New value: +[ + { + "type": "string" + }, + { + "items": { + "type": "integer" + }, + "type": "array" + } +] - removed
Input schema / properties / insert_columns / anyOfRemoved value: -[ - { - "type": "integer" - }, - { - "type": "null" - } -] - added
Input schema / properties / insert_columns / typeAdded value: +"integer" - removed
Input schema / properties / insert_columns_at / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / insert_columns_at / typeAdded value: +"string" - removed
Input schema / properties / insert_rows / anyOfRemoved value: -[ - { - "type": "integer" - }, - { - "type": "null" - } -] - added
Input schema / properties / insert_rows / typeAdded value: +"integer" - removed
Input schema / properties / insert_rows_at / anyOfRemoved value: -[ - { - "type": "integer" - }, - { - "type": "null" - } -] - added
Input schema / properties / insert_rows_at / typeAdded value: +"integer" - changed
Input schema / properties / row_sizes / anyOfPrevious value: -[ - { - "type": "string" - }, - { - "additionalProperties": true, - "type": "object" - }, - { - "type": "null" - } -]New value: +[ + { + "type": "string" + }, + { + "additionalProperties": true, + "type": "object" + } +] - removed
Input schema / properties / sheet_name / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / sheet_name / typeAdded value: +"string" - changed
Input schema / properties / unhide_columns / anyOfPrevious value: -[ - { - "type": "string" - }, - { - "items": { - "type": "string" - }, - "type": "array" - }, - { - "type": "null" - } -]New value: +[ + { + "type": "string" + }, + { + "items": { + "type": "string" + }, + "type": "array" + } +] - changed
Input schema / properties / unhide_rows / anyOfPrevious value: -[ - { - "type": "string" - }, - { - "items": { - "type": "integer" - }, - "type": "array" - }, - { - "type": "null" - } -]New value: +[ + { + "type": "string" + }, + { + "items": { + "type": "integer" + }, + "type": "array" + } +]
- Changed
run_script_function5 fields changed- removed
Input schema / properties / deployment_id / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / deployment_id / typeAdded value: +"string" - removed
Input schema / properties / parameters / anyOfRemoved value: -[ - { - "items": {}, - "type": "array" - }, - { - "type": "null" - } -] - added
Input schema / properties / parameters / itemsAdded value: +{} - added
Input schema / properties / parameters / typeAdded value: +"array"
- Changed
search_custom19 fields changed- removed
Input schema / properties / country / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / country / typeAdded value: +"string" - removed
Input schema / properties / date_restrict / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / date_restrict / typeAdded value: +"string" - removed
Input schema / properties / file_type / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / file_type / typeAdded value: +"string" - removed
Input schema / properties / language / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / language / typeAdded value: +"string" - removed
Input schema / properties / search_type / anyOfRemoved value: -[ - { - "const": "image", - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / search_type / enumAdded value: +[ + "image" +] - added
Input schema / properties / search_type / typeAdded value: +"string" - removed
Input schema / properties / site_search / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / site_search / typeAdded value: +"string" - removed
Input schema / properties / site_search_filter / anyOfRemoved value: -[ - { - "enum": [ - "e", - "i" - ], - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / site_search_filter / enumAdded value: +[ + "e", + "i" +] - added
Input schema / properties / site_search_filter / typeAdded value: +"string" - removed
Input schema / properties / sites / anyOfRemoved value: -[ - { - "items": { - "type": "string" - }, - "type": "array" - }, - { - "type": "null" - } -] - added
Input schema / properties / sites / itemsAdded value: +{ + "type": "string" +} - added
Input schema / properties / sites / typeAdded value: +"array"
- Changed
search_drive_files10 fields changed- removed
Input schema / properties / corpora / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / corpora / typeAdded value: +"string" - removed
Input schema / properties / drive_id / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / drive_id / typeAdded value: +"string" - removed
Input schema / properties / file_type / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / file_type / typeAdded value: +"string" - removed
Input schema / properties / order_by / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / order_by / typeAdded value: +"string" - removed
Input schema / properties / page_token / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / page_token / typeAdded value: +"string"
- Changed
search_gmail_messages2 fields changed- removed
Input schema / properties / page_token / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / page_token / typeAdded value: +"string"
- Changed
search_messages6 fields changed- removed
Input schema / properties / query / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / query / typeAdded value: +"string" - removed
Input schema / properties / space_id / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / space_id / typeAdded value: +"string" - removed
Input schema / properties / time_filter / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / time_filter / typeAdded value: +"string"
- Changed
send_gmail_message25 fields changed- removed
Input schema / properties / attachments / anyOfRemoved value: -[ - { - "items": { - "additionalProperties": true, - "type": "object" - }, - "type": "array" - }, - { - "type": "null" - } -] - added
Input schema / properties / attachments / itemsAdded value: +{ + "additionalProperties": true, + "type": "object" +} - added
Input schema / properties / attachments / typeAdded value: +"array" - removed
Input schema / properties / bcc / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / bcc / typeAdded value: +"string" - removed
Input schema / properties / body / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / body / typeAdded value: +"string" - removed
Input schema / properties / cc / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / cc / typeAdded value: +"string" - removed
Input schema / properties / forward_message_id / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / forward_message_id / typeAdded value: +"string" - removed
Input schema / properties / from_email / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / from_email / typeAdded value: +"string" - removed
Input schema / properties / from_name / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / from_name / typeAdded value: +"string" - removed
Input schema / properties / in_reply_to / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / in_reply_to / typeAdded value: +"string" - removed
Input schema / properties / references / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / references / typeAdded value: +"string" - removed
Input schema / properties / subject / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / subject / typeAdded value: +"string" - removed
Input schema / properties / thread_id / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / thread_id / typeAdded value: +"string" - removed
Input schema / properties / to / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / to / typeAdded value: +"string"
- Changed
send_message6 fields changed- removed
Input schema / properties / message_name / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / message_name / typeAdded value: +"string" - removed
Input schema / properties / thread_key / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / thread_key / typeAdded value: +"string" - removed
Input schema / properties / thread_name / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / thread_name / typeAdded value: +"string"
- Changed
set_drive_file_permissions6 fields changed- removed
Input schema / properties / copy_requires_writer_permission / anyOfRemoved value: -[ - { - "type": "boolean" - }, - { - "type": "null" - } -] - added
Input schema / properties / copy_requires_writer_permission / typeAdded value: +"boolean" - removed
Input schema / properties / link_sharing / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / link_sharing / typeAdded value: +"string" - removed
Input schema / properties / writers_can_share / anyOfRemoved value: -[ - { - "type": "boolean" - }, - { - "type": "null" - } -] - added
Input schema / properties / writers_can_share / typeAdded value: +"boolean"
- Changed
update_drive_file30 fields changed- removed
Input schema / properties / add_parents / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / add_parents / typeAdded value: +"string" - removed
Input schema / properties / content / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / content / typeAdded value: +"string" - removed
Input schema / properties / copy_requires_writer_permission / anyOfRemoved value: -[ - { - "type": "boolean" - }, - { - "type": "null" - } -] - added
Input schema / properties / copy_requires_writer_permission / typeAdded value: +"boolean" - removed
Input schema / properties / description / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / description / typeAdded value: +"string" - removed
Input schema / properties / file_path / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / file_path / typeAdded value: +"string" - removed
Input schema / properties / file_url / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / file_url / typeAdded value: +"string" - removed
Input schema / properties / mime_type / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / mime_type / typeAdded value: +"string" - removed
Input schema / properties / name / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / name / typeAdded value: +"string" - added
Input schema / properties / properties / additionalPropertiesAdded value: +true - removed
Input schema / properties / properties / anyOfRemoved value: -[ - { - "additionalProperties": true, - "type": "object" - }, - { - "type": "null" - } -] - added
Input schema / properties / properties / typeAdded value: +"object" - removed
Input schema / properties / remove_parents / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / remove_parents / typeAdded value: +"string" - removed
Input schema / properties / source_format / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - changed
Input schema / properties / source_format / descriptionPrevious value: -"Source format hint for conversion\n(md, markdown, docx, txt, html, rtf, odt). Auto-detected when omitted, and\nignored for non-Google files, which are uploaded without conversion.\nProvide at most one of content/file_path/file_url."New value: +"Source format hint for conversion\n(md, markdown, docx, txt, html, rtf, odt). Auto-detected when omitted, and\nignored for non-Google files, which are uploaded without conversion.\nProvide at most one content source." - added
Input schema / properties / source_format / typeAdded value: +"string" - removed
Input schema / properties / starred / anyOfRemoved value: -[ - { - "type": "boolean" - }, - { - "type": "null" - } -] - added
Input schema / properties / starred / typeAdded value: +"boolean" - removed
Input schema / properties / trashed / anyOfRemoved value: -[ - { - "type": "boolean" - }, - { - "type": "null" - } -] - added
Input schema / properties / trashed / typeAdded value: +"boolean" - removed
Input schema / properties / writers_can_share / anyOfRemoved value: -[ - { - "type": "boolean" - }, - { - "type": "null" - } -] - added
Input schema / properties / writers_can_share / typeAdded value: +"boolean"
- Removed
update_script_content
1 tool update
v1.27.0- Changed
get_doc_content2 fields changed- added
Input schema / properties / preserve_contextAdded value: +{ + "default": false, + "description": "Include readable semantic annotations for native Docs.\nDefaults to False to retain index alignment. Office extraction is\nunaffected. With tab_id, only the selected tab is rendered.", + "type": "boolean" +} - changed
Input schema / properties / tab_id / descriptionPrevious value: -"Optional ID of a single tab to read (from inspect_doc_structure).\nWhen given, only that tab's content is returned with no tab separator,\nso the content stays index-aligned with that tab. When omitted, every\ntab is returned separated by \"--- TAB: ... ---\" markers."New value: +"Optional ID of a single tab to read (from inspect_doc_structure).\nWhen given, only that tab's content is returned with no tab separator,\nso the default output stays index-aligned with that tab. When\nomitted, every tab is returned with \"--- TAB: ... ---\" markers."
2 tool updates
v1.26.2- Changed
list_script_processes1 field changed- changed
Input schema / properties / script_id / descriptionPrevious value: -"Optional filter by script ID"New value: +"Optional script ID. When set, lists all processes for that\nscript visible to the user, including runs by other users."
- Changed
manage_event4 fields changed- changed
Input schema / properties / end_time / descriptionPrevious value: -"End time in RFC3339 format (required for create)."New value: +"End time (required for create). An RFC3339 UTC offset identifies the exact instant and is preserved. Without an offset, supply end_timezone or timezone. All-day end dates are exclusive." - changed
Input schema / properties / start_time / descriptionPrevious value: -"Start time in RFC3339 format (required for create)."New value: +"Start time (required for create). An RFC3339 UTC offset identifies the exact instant and is preserved. Without an offset, supply start_timezone or timezone. For a local wall-clock time, omit the offset and pass the zone so Google resolves daylight saving; a wrong offset moves the event. Date-only values create all-day events." - changed
Input schema / properties / start_timezone / descriptionPrevious value: -"IANA timezone for the start boundary only,\noverriding timezone. Use for events whose two ends sit in different zones -\na flight departing 13:45 \"Asia/Jerusalem\" and landing 17:50\n\"Europe/Amsterdam\" is one event authored in two zones. Passing a single\ntimezone for such an event silently rewrites one end's wall-clock."New value: +"IANA timezone for the start boundary only,\noverriding timezone. Use for events whose two ends sit in different zones -\na flight departing 13:45 \"Asia/Jerusalem\" and landing 17:50\n\"Europe/Amsterdam\" is one event authored in two zones. Explicit timestamp\noffsets always preserve the instant, even when the zone differs." - changed
Input schema / properties / timezone / descriptionPrevious value: -"IANA timezone applied to both boundaries (e.g.,\n\"America/New_York\"). Overridden per boundary by start_timezone/end_timezone."New value: +"IANA timezone applied to both boundaries (e.g.,\n\"America/New_York\"). Converts offset-bearing timestamps without changing their\ninstant; interprets offset-free timestamps as local times in this zone.\nOverridden per boundary by start_timezone/end_timezone."
1 tool update
v1.26.1- Changed
run_script_function1 field changed- added
Input schema / properties / deployment_idAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Optional API Executable deployment ID. When supplied,\nskips the automatic deployment lookup. When omitted, the versioned\nAPI Executable deployment with the highest version number is used." +}
14 tool updates
v1.26.0- Changed
batch_update_doc1 field changed- changed
Input schema / properties / operations / items / oneOfPrevious value: -[ - { - "additionalProperties": false, - "properties": { - "end_of_segment": { - "default": false, - "description": "Append to the end of the targeted body/segment instead of using index.", - "type": "boolean" - }, - "index": { - "anyOf": [ - { - "type": "integer" - }, - { - "type": "null" - } - ], - "default": null, - "description": "Insertion index. Omit when end_of_segment=true." - }, - "segment_id": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "Optional header/footer/footnote segment ID. Use a real ID returned by inspect_doc_structure; do not guess values like 'kix.header'." - }, - "tab_id": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "Optional document tab ID to target." - }, - "text": { - "description": "Text to insert.", - "type": "string" - }, - "type": { - "const": "insert_text", - "type": "string" - } - }, - "required": [ - "type", - "text" - ], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "end_index": { - "type": "integer" - }, - "segment_id": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "Optional header/footer/footnote segment ID. Use a real ID returned by inspect_doc_structure; do not guess values like 'kix.header'." - }, - "start_index": { - "type": "integer" - }, - "tab_id": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "Optional document tab ID to target." - }, - "type": { - "const": "delete_text", - "type": "string" - } - }, - "required": [ - "type", - "start_index", - "end_index" - ], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "end_index": { - "type": "integer" - }, - "segment_id": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "Optional header/footer/footnote segment ID. Use a real ID returned by inspect_doc_structure; do not guess values like 'kix.header'." - }, - "start_index": { - "type": "integer" - }, - "tab_id": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "Optional document tab ID to target." - }, - "text": { - "description": "Replacement text.", - "type": "string" - }, - "type": { - "const": "replace_text", - "type": "string" - } - }, - "required": [ - "type", - "start_index", - "end_index", - "text" - ], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "background_color": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - }, - "baseline_offset": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - }, - "bold": { - "anyOf": [ - { - "type": "boolean" - }, - { - "type": "null" - } - ], - "default": null - }, - "clear_link": { - "anyOf": [ - { - "type": "boolean" - }, - { - "type": "null" - } - ], - "default": null - }, - "end_index": { - "type": "integer" - }, - "font_family": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - }, - "font_size": { - "anyOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ], - "default": null - }, - "font_weight": { - "anyOf": [ - { - "type": "integer" - }, - { - "type": "null" - } - ], - "default": null - }, - "italic": { - "anyOf": [ - { - "type": "boolean" - }, - { - "type": "null" - } - ], - "default": null - }, - "link_url": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - }, - "segment_id": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "Optional header/footer/footnote segment ID. Use a real ID returned by inspect_doc_structure; do not guess values like 'kix.header'." - }, - "small_caps": { - "anyOf": [ - { - "type": "boolean" - }, - { - "type": "null" - } - ], - "default": null - }, - "start_index": { - "type": "integer" - }, - "strikethrough": { - "anyOf": [ - { - "type": "boolean" - }, - { - "type": "null" - } - ], - "default": null - }, - "tab_id": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "Optional document tab ID to target." - }, - "text_color": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - }, - "type": { - "const": "format_text", - "type": "string" - }, - "underline": { - "anyOf": [ - { - "type": "boolean" - }, - { - "type": "null" - } - ], - "default": null - } - }, - "required": [ - "type", - "start_index", - "end_index" - ], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "alignment": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - }, - "avoid_widow_and_orphan": { - "anyOf": [ - { - "type": "boolean" - }, - { - "type": "null" - } - ], - "default": null - }, - "border_color": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - }, - "border_dash": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - }, - "border_edges": { - "anyOf": [ - { - "items": { - "enum": [ - "top", - "bottom", - "left", - "right", - "between" - ], - "type": "string" - }, - "minItems": 1, - "type": "array" - }, - { - "type": "null" - } - ], - "default": null, - "description": "Paragraph border edges to update; omit to update top, bottom, left, and right." - }, - "border_padding": { - "anyOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ], - "default": null - }, - "border_width": { - "anyOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ], - "default": null - }, - "direction": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - }, - "end_index": { - "type": "integer" - }, - "heading_level": { - "anyOf": [ - { - "type": "integer" - }, - { - "type": "null" - } - ], - "default": null - }, - "indent_end": { - "anyOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ], - "default": null - }, - "indent_first_line": { - "anyOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ], - "default": null - }, - "indent_start": { - "anyOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ], - "default": null - }, - "keep_lines_together": { - "anyOf": [ - { - "type": "boolean" - }, - { - "type": "null" - } - ], - "default": null - }, - "keep_with_next": { - "anyOf": [ - { - "type": "boolean" - }, - { - "type": "null" - } - ], - "default": null - }, - "line_spacing": { - "anyOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ], - "default": null - }, - "named_style_type": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - }, - "page_break_before": { - "anyOf": [ - { - "type": "boolean" - }, - { - "type": "null" - } - ], - "default": null - }, - "segment_id": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "Optional header/footer/footnote segment ID. Use a real ID returned by inspect_doc_structure; do not guess values like 'kix.header'." - }, - "shading_color": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - }, - "space_above": { - "anyOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ], - "default": null - }, - "space_below": { - "anyOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ], - "default": null - }, - "spacing_mode": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - }, - "start_index": { - "type": "integer" - }, - "tab_id": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "Optional document tab ID to target." - }, - "type": { - "const": "update_paragraph_style", - "type": "string" - } - }, - "required": [ - "type", - "start_index", - "end_index" - ], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "background_color": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - }, - "border_color": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - }, - "border_edges": { - "anyOf": [ - { - "items": { - "enum": [ - "top", - "bottom", - "left", - "right" - ], - "type": "string" - }, - "minItems": 1, - "type": "array" - }, - { - "type": "null" - } - ], - "default": null, - "description": "Table-cell border edges to update; omit to update all four edges." - }, - "border_width": { - "anyOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ], - "default": null - }, - "column_index": { - "anyOf": [ - { - "type": "integer" - }, - { - "type": "null" - } - ], - "default": null - }, - "column_span": { - "anyOf": [ - { - "type": "integer" - }, - { - "type": "null" - } - ], - "default": null - }, - "content_alignment": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - }, - "padding_bottom": { - "anyOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ], - "default": null - }, - "padding_left": { - "anyOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ], - "default": null - }, - "padding_right": { - "anyOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ], - "default": null - }, - "padding_top": { - "anyOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ], - "default": null - }, - "row_index": { - "anyOf": [ - { - "type": "integer" - }, - { - "type": "null" - } - ], - "default": null - }, - "row_span": { - "anyOf": [ - { - "type": "integer" - }, - { - "type": "null" - } - ], - "default": null - }, - "tab_id": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "Optional document tab ID to target." - }, - "table_start_index": { - "type": "integer" - }, - "type": { - "const": "update_table_cell_style", - "type": "string" - } - }, - "required": [ - "type", - "table_start_index" - ], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "columns": { - "type": "integer" - }, - "end_of_segment": { - "default": false, - "description": "Append to the end of the targeted body/segment instead of using index.", - "type": "boolean" - }, - "index": { - "anyOf": [ - { - "type": "integer" - }, - { - "type": "null" - } - ], - "default": null, - "description": "Insertion index. Omit when end_of_segment=true." - }, - "rows": { - "type": "integer" - }, - "segment_id": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "Optional header/footer/footnote segment ID. Use a real ID returned by inspect_doc_structure; do not guess values like 'kix.header'." - }, - "tab_id": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "Optional document tab ID to target." - }, - "type": { - "const": "insert_table", - "type": "string" - } - }, - "required": [ - "type", - "rows", - "columns" - ], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "insert_below": { - "default": true, - "type": "boolean" - }, - "row_index": { - "type": "integer" - }, - "tab_id": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "Optional document tab ID to target." - }, - "table_start_index": { - "type": "integer" - }, - "type": { - "const": "insert_table_row", - "type": "string" - } - }, - "required": [ - "type", - "table_start_index", - "row_index" - ], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "row_index": { - "type": "integer" - }, - "tab_id": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "Optional document tab ID to target." - }, - "table_start_index": { - "type": "integer" - }, - "type": { - "const": "delete_table_row", - "type": "string" - } - }, - "required": [ - "type", - "table_start_index", - "row_index" - ], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "column_index": { - "type": "integer" - }, - "insert_right": { - "default": true, - "type": "boolean" - }, - "tab_id": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "Optional document tab ID to target." - }, - "table_start_index": { - "type": "integer" - }, - "type": { - "const": "insert_table_column", - "type": "string" - } - }, - "required": [ - "type", - "table_start_index", - "column_index" - ], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "column_index": { - "type": "integer" - }, - "tab_id": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "Optional document tab ID to target." - }, - "table_start_index": { - "type": "integer" - }, - "type": { - "const": "delete_table_column", - "type": "string" - } - }, - "required": [ - "type", - "table_start_index", - "column_index" - ], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "column_index": { - "type": "integer" - }, - "column_span": { - "type": "integer" - }, - "row_index": { - "type": "integer" - }, - "row_span": { - "type": "integer" - }, - "tab_id": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "Optional document tab ID to target." - }, - "table_start_index": { - "type": "integer" - }, - "type": { - "const": "merge_table_cells", - "type": "string" - } - }, - "required": [ - "type", - "table_start_index", - "row_index", - "column_index", - "row_span", - "column_span" - ], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "column_index": { - "type": "integer" - }, - "column_span": { - "type": "integer" - }, - "row_index": { - "type": "integer" - }, - "row_span": { - "type": "integer" - }, - "tab_id": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "Optional document tab ID to target." - }, - "table_start_index": { - "type": "integer" - }, - "type": { - "const": "unmerge_table_cells", - "type": "string" - } - }, - "required": [ - "type", - "table_start_index", - "row_index", - "column_index", - "row_span", - "column_span" - ], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "column_indices": { - "items": { - "type": "integer" - }, - "type": "array" - }, - "tab_id": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "Optional document tab ID to target." - }, - "table_start_index": { - "type": "integer" - }, - "type": { - "const": "update_table_column_properties", - "type": "string" - }, - "width": { - "anyOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ], - "default": null - }, - "width_type": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - } - }, - "required": [ - "type", - "table_start_index", - "column_indices" - ], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "min_row_height": { - "anyOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ], - "default": null, - "description": "Minimum row height in points." - }, - "row_indices": { - "description": "Zero-based row indices to style, e.g. [0] for the header row.", - "items": { - "type": "integer" - }, - "type": "array" - }, - "tab_id": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "Optional document tab ID to target." - }, - "table_start_index": { - "type": "integer" - }, - "type": { - "const": "update_table_row_style", - "type": "string" - } - }, - "required": [ - "type", - "table_start_index", - "row_indices" - ], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "pinned_header_rows_count": { - "description": "Number of leading rows to pin as a repeating header on each page. 0 unpins all rows. Use this dedicated request because the 'tableHeader' value reported in TableRowStyle cannot be set through UpdateTableRowStyleRequest.", - "minimum": 0, - "type": "integer" - }, - "tab_id": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "Optional document tab ID to target." - }, - "table_start_index": { - "type": "integer" - }, - "type": { - "const": "pin_table_header_rows", - "type": "string" - } - }, - "required": [ - "type", - "table_start_index", - "pinned_header_rows_count" - ], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "end_of_segment": { - "default": false, - "description": "Append to the end of the body instead of using index.", - "type": "boolean" - }, - "index": { - "anyOf": [ - { - "type": "integer" - }, - { - "type": "null" - } - ], - "default": null, - "description": "Insertion index. Omit when end_of_segment=true." - }, - "tab_id": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "Optional document tab ID to target." - }, - "type": { - "const": "insert_page_break", - "type": "string" - } - }, - "required": [ - "type" - ], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "end_of_segment": { - "default": false, - "description": "Append to the end of the body instead of using index.", - "type": "boolean" - }, - "index": { - "anyOf": [ - { - "type": "integer" - }, - { - "type": "null" - } - ], - "default": null, - "description": "Insertion index. Omit when end_of_segment=true." - }, - "section_type": { - "default": "NEXT_PAGE", - "enum": [ - "CONTINUOUS", - "NEXT_PAGE" - ], - "type": "string" - }, - "tab_id": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "Optional document tab ID to target." - }, - "type": { - "const": "insert_section_break", - "type": "string" - } - }, - "required": [ - "type" - ], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "find_text": { - "type": "string" - }, - "match_case": { - "default": false, - "type": "boolean" - }, - "replace_text": { - "type": "string" - }, - "tab_id": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "Optional document tab ID to target." - }, - "type": { - "const": "find_replace", - "type": "string" - } - }, - "required": [ - "type", - "find_text", - "replace_text" - ], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "bullet_preset": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - }, - "end_index": { - "type": "integer" - }, - "list_type": { - "default": "UNORDERED", - "enum": [ - "UNORDERED", - "ORDERED", - "CHECKBOX", - "NONE" - ], - "type": "string" - }, - "nesting_level": { - "anyOf": [ - { - "type": "integer" - }, - { - "type": "null" - } - ], - "default": null - }, - "paragraph_start_indices": { - "anyOf": [ - { - "items": { - "type": "integer" - }, - "type": "array" - }, - { - "type": "null" - } - ], - "default": null - }, - "segment_id": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "Optional header/footer/footnote segment ID. Use a real ID returned by inspect_doc_structure; do not guess values like 'kix.header'." - }, - "start_index": { - "type": "integer" - }, - "tab_id": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "Optional document tab ID to target." - }, - "type": { - "const": "create_bullet_list", - "type": "string" - } - }, - "required": [ - "type", - "start_index", - "end_index" - ], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "end_index": { - "type": "integer" - }, - "name": { - "type": "string" - }, - "segment_id": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "Optional header/footer/footnote segment ID. Use a real ID returned by inspect_doc_structure; do not guess values like 'kix.header'." - }, - "start_index": { - "type": "integer" - }, - "tab_id": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "Optional document tab ID to target." - }, - "type": { - "const": "create_named_range", - "type": "string" - } - }, - "required": [ - "type", - "name", - "start_index", - "end_index" - ], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "named_range_id": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - }, - "named_range_name": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - }, - "tab_id": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "Optional document tab ID to target." - }, - "text": { - "type": "string" - }, - "type": { - "const": "replace_named_range_content", - "type": "string" - } - }, - "required": [ - "type", - "text" - ], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "named_range_id": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - }, - "named_range_name": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - }, - "tab_id": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "Optional document tab ID to target." - }, - "type": { - "const": "delete_named_range", - "type": "string" - } - }, - "required": [ - "type" - ], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "background_color": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - }, - "document_mode": { - "anyOf": [ - { - "enum": [ - "PAGES", - "PAGELESS" - ], - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - }, - "flip_page_orientation": { - "anyOf": [ - { - "type": "boolean" - }, - { - "type": "null" - } - ], - "default": null - }, - "margin_bottom": { - "anyOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ], - "default": null - }, - "margin_footer": { - "anyOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ], - "default": null - }, - "margin_header": { - "anyOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ], - "default": null - }, - "margin_left": { - "anyOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ], - "default": null - }, - "margin_right": { - "anyOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ], - "default": null - }, - "margin_top": { - "anyOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ], - "default": null - }, - "page_height": { - "anyOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ], - "default": null - }, - "page_number_start": { - "anyOf": [ - { - "type": "integer" - }, - { - "type": "null" - } - ], - "default": null - }, - "page_width": { - "anyOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ], - "default": null - }, - "tab_id": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "Optional document tab ID to target." - }, - "type": { - "const": "update_document_style", - "type": "string" - }, - "use_even_page_header_footer": { - "anyOf": [ - { - "type": "boolean" - }, - { - "type": "null" - } - ], - "default": null - }, - "use_first_page_header_footer": { - "anyOf": [ - { - "type": "boolean" - }, - { - "type": "null" - } - ], - "default": null - } - }, - "required": [ - "type" - ], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "column_count": { - "anyOf": [ - { - "type": "integer" - }, - { - "type": "null" - } - ], - "default": null - }, - "column_separator_style": { - "anyOf": [ - { - "enum": [ - "NONE", - "BETWEEN_EACH_COLUMN" - ], - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - }, - "column_spacing": { - "anyOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ], - "default": null - }, - "content_direction": { - "anyOf": [ - { - "enum": [ - "LEFT_TO_RIGHT", - "RIGHT_TO_LEFT" - ], - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - }, - "end_index": { - "type": "integer" - }, - "flip_page_orientation": { - "anyOf": [ - { - "type": "boolean" - }, - { - "type": "null" - } - ], - "default": null - }, - "margin_bottom": { - "anyOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ], - "default": null - }, - "margin_footer": { - "anyOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ], - "default": null - }, - "margin_header": { - "anyOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ], - "default": null - }, - "margin_left": { - "anyOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ], - "default": null - }, - "margin_right": { - "anyOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ], - "default": null - }, - "margin_top": { - "anyOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ], - "default": null - }, - "page_number_start": { - "anyOf": [ - { - "type": "integer" - }, - { - "type": "null" - } - ], - "default": null - }, - "start_index": { - "type": "integer" - }, - "tab_id": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "Optional document tab ID to target." - }, - "type": { - "const": "update_section_style", - "type": "string" - }, - "use_first_page_header_footer": { - "anyOf": [ - { - "type": "boolean" - }, - { - "type": "null" - } - ], - "default": null - } - }, - "required": [ - "type", - "start_index", - "end_index" - ], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "header_footer_type": { - "default": "DEFAULT", - "description": "Header/footer type to create.", - "enum": [ - "DEFAULT", - "FIRST_PAGE_ONLY", - "EVEN_PAGE" - ], - "type": "string" - }, - "section_break_index": { - "anyOf": [ - { - "type": "integer" - }, - { - "type": "null" - } - ], - "default": null, - "description": "Optional section break index for section-scoped layouts." - }, - "section_type": { - "description": "Which section to create.", - "enum": [ - "header", - "footer" - ], - "type": "string" - }, - "tab_id": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "Optional document tab ID to target." - }, - "type": { - "const": "create_header_footer", - "type": "string" - } - }, - "required": [ - "type", - "section_type" - ], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "end_of_segment": { - "default": false, - "description": "Append to the end of the targeted body/segment instead of using index.", - "type": "boolean" - }, - "height": { - "anyOf": [ - { - "type": "integer" - }, - { - "type": "null" - } - ], - "default": null - }, - "image_uri": { - "description": "Image URL or resolvable image URI.", - "type": "string" - }, - "index": { - "anyOf": [ - { - "type": "integer" - }, - { - "type": "null" - } - ], - "default": null, - "description": "Insertion index. Omit when end_of_segment=true." - }, - "segment_id": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "Optional header/footer/footnote segment ID. Use a real ID returned by inspect_doc_structure; do not guess values like 'kix.header'." - }, - "tab_id": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "Optional document tab ID to target." - }, - "type": { - "const": "insert_image", - "type": "string" - }, - "width": { - "anyOf": [ - { - "type": "integer" - }, - { - "type": "null" - } - ], - "default": null - } - }, - "required": [ - "type", - "image_uri" - ], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "index": { - "type": "integer" - }, - "parent_tab_id": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - }, - "title": { - "type": "string" - }, - "type": { - "const": "insert_doc_tab", - "type": "string" - } - }, - "required": [ - "type", - "title", - "index" - ], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "tab_id": { - "type": "string" - }, - "type": { - "const": "delete_doc_tab", - "type": "string" - } - }, - "required": [ - "type", - "tab_id" - ], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "tab_id": { - "type": "string" - }, - "title": { - "type": "string" - }, - "type": { - "const": "update_doc_tab", - "type": "string" - } - }, - "required": [ - "type", - "tab_id", - "title" - ], - "type": "object" - } -]New value: +[ + { + "additionalProperties": false, + "properties": { + "after_heading": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Insert immediately after the heading paragraph with this exact text, resolved to an index at execution time. Errors when it matches zero or more than one heading." + }, + "anchor_position": { + "default": "after", + "description": "Which side of anchor_text to insert on. Defaults to 'after'.", + "enum": [ + "before", + "after" + ], + "type": "string" + }, + "anchor_text": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Insert relative to this literal text, which must occur exactly once within a single paragraph. Use anchor_position to pick which side." + }, + "before_heading": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Insert immediately before the heading paragraph with this exact text. Errors when it matches zero or more than one heading." + }, + "end_of_segment": { + "default": false, + "description": "Append to the end of the targeted body/segment instead of using index.", + "type": "boolean" + }, + "index": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Insertion index. Omit when end_of_segment=true." + }, + "segment_id": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Optional header/footer/footnote segment ID. Use a real ID returned by inspect_doc_structure; do not guess values like 'kix.header'." + }, + "tab_id": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Optional document tab ID to target." + }, + "text": { + "description": "Text to insert.", + "type": "string" + }, + "type": { + "const": "insert_text", + "type": "string" + } + }, + "required": [ + "type", + "text" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "end_index": { + "type": "integer" + }, + "segment_id": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Optional header/footer/footnote segment ID. Use a real ID returned by inspect_doc_structure; do not guess values like 'kix.header'." + }, + "start_index": { + "type": "integer" + }, + "tab_id": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Optional document tab ID to target." + }, + "type": { + "const": "delete_text", + "type": "string" + } + }, + "required": [ + "type", + "start_index", + "end_index" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "end_index": { + "type": "integer" + }, + "segment_id": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Optional header/footer/footnote segment ID. Use a real ID returned by inspect_doc_structure; do not guess values like 'kix.header'." + }, + "start_index": { + "type": "integer" + }, + "tab_id": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Optional document tab ID to target." + }, + "text": { + "description": "Replacement text.", + "type": "string" + }, + "type": { + "const": "replace_text", + "type": "string" + } + }, + "required": [ + "type", + "start_index", + "end_index", + "text" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "background_color": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "baseline_offset": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "bold": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": null + }, + "clear_link": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": null + }, + "end_index": { + "type": "integer" + }, + "font_family": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "font_size": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "default": null + }, + "font_weight": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null + }, + "italic": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": null + }, + "link_url": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "segment_id": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Optional header/footer/footnote segment ID. Use a real ID returned by inspect_doc_structure; do not guess values like 'kix.header'." + }, + "small_caps": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": null + }, + "start_index": { + "type": "integer" + }, + "strikethrough": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": null + }, + "tab_id": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Optional document tab ID to target." + }, + "text_color": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "type": { + "const": "format_text", + "type": "string" + }, + "underline": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": null + } + }, + "required": [ + "type", + "start_index", + "end_index" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "alignment": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "avoid_widow_and_orphan": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": null + }, + "border_color": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "border_dash": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "border_edges": { + "anyOf": [ + { + "items": { + "enum": [ + "top", + "bottom", + "left", + "right", + "between" + ], + "type": "string" + }, + "minItems": 1, + "type": "array" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Paragraph border edges to update; omit to update top, bottom, left, and right." + }, + "border_padding": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "default": null + }, + "border_width": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "default": null + }, + "direction": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "end_index": { + "type": "integer" + }, + "heading_level": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null + }, + "indent_end": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "default": null + }, + "indent_first_line": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "default": null + }, + "indent_start": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "default": null + }, + "keep_lines_together": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": null + }, + "keep_with_next": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": null + }, + "line_spacing": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "default": null + }, + "named_style_type": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "page_break_before": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": null + }, + "segment_id": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Optional header/footer/footnote segment ID. Use a real ID returned by inspect_doc_structure; do not guess values like 'kix.header'." + }, + "shading_color": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "space_above": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "default": null + }, + "space_below": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "default": null + }, + "spacing_mode": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "start_index": { + "type": "integer" + }, + "tab_id": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Optional document tab ID to target." + }, + "type": { + "const": "update_paragraph_style", + "type": "string" + } + }, + "required": [ + "type", + "start_index", + "end_index" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "background_color": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "border_color": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "border_edges": { + "anyOf": [ + { + "items": { + "enum": [ + "top", + "bottom", + "left", + "right" + ], + "type": "string" + }, + "minItems": 1, + "type": "array" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Table-cell border edges to update; omit to update all four edges." + }, + "border_width": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "default": null + }, + "column_index": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null + }, + "column_span": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null + }, + "content_alignment": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "padding_bottom": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "default": null + }, + "padding_left": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "default": null + }, + "padding_right": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "default": null + }, + "padding_top": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "default": null + }, + "row_index": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null + }, + "row_span": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null + }, + "tab_id": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Optional document tab ID to target." + }, + "table_start_index": { + "type": "integer" + }, + "type": { + "const": "update_table_cell_style", + "type": "string" + } + }, + "required": [ + "type", + "table_start_index" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "after_heading": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Insert immediately after the heading paragraph with this exact text, resolved to an index at execution time. Errors when it matches zero or more than one heading." + }, + "anchor_position": { + "default": "after", + "description": "Which side of anchor_text to insert on. Defaults to 'after'.", + "enum": [ + "before", + "after" + ], + "type": "string" + }, + "anchor_text": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Insert relative to this literal text, which must occur exactly once within a single paragraph. Use anchor_position to pick which side." + }, + "before_heading": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Insert immediately before the heading paragraph with this exact text. Errors when it matches zero or more than one heading." + }, + "columns": { + "type": "integer" + }, + "end_of_segment": { + "default": false, + "description": "Append to the end of the targeted body/segment instead of using index.", + "type": "boolean" + }, + "index": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Insertion index. Omit when end_of_segment=true." + }, + "rows": { + "type": "integer" + }, + "segment_id": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Optional header/footer/footnote segment ID. Use a real ID returned by inspect_doc_structure; do not guess values like 'kix.header'." + }, + "tab_id": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Optional document tab ID to target." + }, + "type": { + "const": "insert_table", + "type": "string" + } + }, + "required": [ + "type", + "rows", + "columns" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "insert_below": { + "default": true, + "type": "boolean" + }, + "row_index": { + "type": "integer" + }, + "tab_id": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Optional document tab ID to target." + }, + "table_start_index": { + "type": "integer" + }, + "type": { + "const": "insert_table_row", + "type": "string" + } + }, + "required": [ + "type", + "table_start_index", + "row_index" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "row_index": { + "type": "integer" + }, + "tab_id": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Optional document tab ID to target." + }, + "table_start_index": { + "type": "integer" + }, + "type": { + "const": "delete_table_row", + "type": "string" + } + }, + "required": [ + "type", + "table_start_index", + "row_index" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "column_index": { + "type": "integer" + }, + "insert_right": { + "default": true, + "type": "boolean" + }, + "tab_id": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Optional document tab ID to target." + }, + "table_start_index": { + "type": "integer" + }, + "type": { + "const": "insert_table_column", + "type": "string" + } + }, + "required": [ + "type", + "table_start_index", + "column_index" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "column_index": { + "type": "integer" + }, + "tab_id": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Optional document tab ID to target." + }, + "table_start_index": { + "type": "integer" + }, + "type": { + "const": "delete_table_column", + "type": "string" + } + }, + "required": [ + "type", + "table_start_index", + "column_index" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "column_index": { + "type": "integer" + }, + "column_span": { + "type": "integer" + }, + "row_index": { + "type": "integer" + }, + "row_span": { + "type": "integer" + }, + "tab_id": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Optional document tab ID to target." + }, + "table_start_index": { + "type": "integer" + }, + "type": { + "const": "merge_table_cells", + "type": "string" + } + }, + "required": [ + "type", + "table_start_index", + "row_index", + "column_index", + "row_span", + "column_span" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "column_index": { + "type": "integer" + }, + "column_span": { + "type": "integer" + }, + "row_index": { + "type": "integer" + }, + "row_span": { + "type": "integer" + }, + "tab_id": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Optional document tab ID to target." + }, + "table_start_index": { + "type": "integer" + }, + "type": { + "const": "unmerge_table_cells", + "type": "string" + } + }, + "required": [ + "type", + "table_start_index", + "row_index", + "column_index", + "row_span", + "column_span" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "column_indices": { + "items": { + "type": "integer" + }, + "type": "array" + }, + "tab_id": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Optional document tab ID to target." + }, + "table_start_index": { + "type": "integer" + }, + "type": { + "const": "update_table_column_properties", + "type": "string" + }, + "width": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "default": null + }, + "width_type": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + } + }, + "required": [ + "type", + "table_start_index", + "column_indices" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "min_row_height": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Minimum row height in points." + }, + "row_indices": { + "description": "Zero-based row indices to style, e.g. [0] for the header row.", + "items": { + "type": "integer" + }, + "type": "array" + }, + "tab_id": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Optional document tab ID to target." + }, + "table_start_index": { + "type": "integer" + }, + "type": { + "const": "update_table_row_style", + "type": "string" + } + }, + "required": [ + "type", + "table_start_index", + "row_indices" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "pinned_header_rows_count": { + "description": "Number of leading rows to pin as a repeating header on each page. 0 unpins all rows. Use this dedicated request because the 'tableHeader' value reported in TableRowStyle cannot be set through UpdateTableRowStyleRequest.", + "minimum": 0, + "type": "integer" + }, + "tab_id": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Optional document tab ID to target." + }, + "table_start_index": { + "type": "integer" + }, + "type": { + "const": "pin_table_header_rows", + "type": "string" + } + }, + "required": [ + "type", + "table_start_index", + "pinned_header_rows_count" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "after_heading": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Insert immediately after the heading paragraph with this exact text, resolved to an index at execution time. Errors when it matches zero or more than one heading." + }, + "anchor_position": { + "default": "after", + "description": "Which side of anchor_text to insert on. Defaults to 'after'.", + "enum": [ + "before", + "after" + ], + "type": "string" + }, + "anchor_text": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Insert relative to this literal text, which must occur exactly once within a single paragraph. Use anchor_position to pick which side." + }, + "before_heading": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Insert immediately before the heading paragraph with this exact text. Errors when it matches zero or more than one heading." + }, + "end_of_segment": { + "default": false, + "description": "Append to the end of the targeted body/segment instead of using index.", + "type": "boolean" + }, + "index": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Insertion index. Omit when end_of_segment=true." + }, + "tab_id": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Optional document tab ID to target." + }, + "type": { + "const": "insert_page_break", + "type": "string" + } + }, + "required": [ + "type" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "after_heading": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Insert immediately after the heading paragraph with this exact text, resolved to an index at execution time. Errors when it matches zero or more than one heading." + }, + "anchor_position": { + "default": "after", + "description": "Which side of anchor_text to insert on. Defaults to 'after'.", + "enum": [ + "before", + "after" + ], + "type": "string" + }, + "anchor_text": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Insert relative to this literal text, which must occur exactly once within a single paragraph. Use anchor_position to pick which side." + }, + "before_heading": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Insert immediately before the heading paragraph with this exact text. Errors when it matches zero or more than one heading." + }, + "end_of_segment": { + "default": false, + "description": "Append to the end of the targeted body/segment instead of using index.", + "type": "boolean" + }, + "index": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Insertion index. Omit when end_of_segment=true." + }, + "section_type": { + "default": "NEXT_PAGE", + "enum": [ + "CONTINUOUS", + "NEXT_PAGE" + ], + "type": "string" + }, + "tab_id": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Optional document tab ID to target." + }, + "type": { + "const": "insert_section_break", + "type": "string" + } + }, + "required": [ + "type" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "find_text": { + "type": "string" + }, + "match_case": { + "default": false, + "type": "boolean" + }, + "replace_text": { + "type": "string" + }, + "tab_id": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Optional document tab ID to target." + }, + "type": { + "const": "find_replace", + "type": "string" + } + }, + "required": [ + "type", + "find_text", + "replace_text" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "bullet_preset": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "end_index": { + "type": "integer" + }, + "list_type": { + "default": "UNORDERED", + "enum": [ + "UNORDERED", + "ORDERED", + "CHECKBOX", + "NONE" + ], + "type": "string" + }, + "nesting_level": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null + }, + "paragraph_start_indices": { + "anyOf": [ + { + "items": { + "type": "integer" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "default": null + }, + "segment_id": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Optional header/footer/footnote segment ID. Use a real ID returned by inspect_doc_structure; do not guess values like 'kix.header'." + }, + "start_index": { + "type": "integer" + }, + "tab_id": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Optional document tab ID to target." + }, + "type": { + "const": "create_bullet_list", + "type": "string" + } + }, + "required": [ + "type", + "start_index", + "end_index" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "end_index": { + "type": "integer" + }, + "name": { + "type": "string" + }, + "segment_id": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Optional header/footer/footnote segment ID. Use a real ID returned by inspect_doc_structure; do not guess values like 'kix.header'." + }, + "start_index": { + "type": "integer" + }, + "tab_id": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Optional document tab ID to target." + }, + "type": { + "const": "create_named_range", + "type": "string" + } + }, + "required": [ + "type", + "name", + "start_index", + "end_index" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "named_range_id": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "named_range_name": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "tab_id": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Optional document tab ID to target." + }, + "text": { + "type": "string" + }, + "type": { + "const": "replace_named_range_content", + "type": "string" + } + }, + "required": [ + "type", + "text" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "named_range_id": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "named_range_name": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "tab_id": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Optional document tab ID to target." + }, + "type": { + "const": "delete_named_range", + "type": "string" + } + }, + "required": [ + "type" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "background_color": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "document_mode": { + "anyOf": [ + { + "enum": [ + "PAGES", + "PAGELESS" + ], + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "flip_page_orientation": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": null + }, + "margin_bottom": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "default": null + }, + "margin_footer": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "default": null + }, + "margin_header": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "default": null + }, + "margin_left": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "default": null + }, + "margin_right": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "default": null + }, + "margin_top": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "default": null + }, + "page_height": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "default": null + }, + "page_number_start": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null + }, + "page_width": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "default": null + }, + "tab_id": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Optional document tab ID to target." + }, + "type": { + "const": "update_document_style", + "type": "string" + }, + "use_even_page_header_footer": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": null + }, + "use_first_page_header_footer": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": null + } + }, + "required": [ + "type" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "column_count": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null + }, + "column_separator_style": { + "anyOf": [ + { + "enum": [ + "NONE", + "BETWEEN_EACH_COLUMN" + ], + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "column_spacing": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "default": null + }, + "content_direction": { + "anyOf": [ + { + "enum": [ + "LEFT_TO_RIGHT", + "RIGHT_TO_LEFT" + ], + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "end_index": { + "type": "integer" + }, + "flip_page_orientation": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": null + }, + "margin_bottom": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "default": null + }, + "margin_footer": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "default": null + }, + "margin_header": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "default": null + }, + "margin_left": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "default": null + }, + "margin_right": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "default": null + }, + "margin_top": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "default": null + }, + "page_number_start": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null + }, + "start_index": { + "type": "integer" + }, + "tab_id": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Optional document tab ID to target." + }, + "type": { + "const": "update_section_style", + "type": "string" + }, + "use_first_page_header_footer": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": null + } + }, + "required": [ + "type", + "start_index", + "end_index" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "header_footer_type": { + "default": "DEFAULT", + "description": "Header/footer type to create.", + "enum": [ + "DEFAULT", + "FIRST_PAGE_ONLY", + "EVEN_PAGE" + ], + "type": "string" + }, + "section_break_index": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Optional section break index for section-scoped layouts." + }, + "section_type": { + "description": "Which section to create.", + "enum": [ + "header", + "footer" + ], + "type": "string" + }, + "tab_id": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Optional document tab ID to target." + }, + "type": { + "const": "create_header_footer", + "type": "string" + } + }, + "required": [ + "type", + "section_type" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "after_heading": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Insert immediately after the heading paragraph with this exact text, resolved to an index at execution time. Errors when it matches zero or more than one heading." + }, + "anchor_position": { + "default": "after", + "description": "Which side of anchor_text to insert on. Defaults to 'after'.", + "enum": [ + "before", + "after" + ], + "type": "string" + }, + "anchor_text": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Insert relative to this literal text, which must occur exactly once within a single paragraph. Use anchor_position to pick which side." + }, + "before_heading": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Insert immediately before the heading paragraph with this exact text. Errors when it matches zero or more than one heading." + }, + "end_of_segment": { + "default": false, + "description": "Append to the end of the targeted body/segment instead of using index.", + "type": "boolean" + }, + "height": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null + }, + "image_uri": { + "description": "Image URL or resolvable image URI.", + "type": "string" + }, + "index": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Insertion index. Omit when end_of_segment=true." + }, + "segment_id": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Optional header/footer/footnote segment ID. Use a real ID returned by inspect_doc_structure; do not guess values like 'kix.header'." + }, + "tab_id": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Optional document tab ID to target." + }, + "type": { + "const": "insert_image", + "type": "string" + }, + "width": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null + } + }, + "required": [ + "type", + "image_uri" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "index": { + "type": "integer" + }, + "parent_tab_id": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "title": { + "type": "string" + }, + "type": { + "const": "insert_doc_tab", + "type": "string" + } + }, + "required": [ + "type", + "title", + "index" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "tab_id": { + "type": "string" + }, + "type": { + "const": "delete_doc_tab", + "type": "string" + } + }, + "required": [ + "type", + "tab_id" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "tab_id": { + "type": "string" + }, + "title": { + "type": "string" + }, + "type": { + "const": "update_doc_tab", + "type": "string" + } + }, + "required": [ + "type", + "tab_id", + "title" + ], + "type": "object" + } +]
- Changed
get_doc_as_markdown1 field changed- added
Input schema / properties / tab_idAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Optional ID of a single tab to read (from inspect_doc_structure).\nWhen given, only that tab's content is rendered, without its child tabs\nand without a tab heading. When omitted, every tab is rendered." +}
- Changed
get_doc_content1 field changed- added
Input schema / properties / tab_idAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Optional ID of a single tab to read (from inspect_doc_structure).\nWhen given, only that tab's content is returned with no tab separator,\nso the content stays index-aligned with that tab. When omitted, every\ntab is returned separated by \"--- TAB: ... ---\" markers." +}
- Changed
get_events2 fields changed- changed
Input schema / properties / max_results / descriptionPrevious value: -"The maximum number of events to return. Defaults to 25. Ignored if event_id is provided."New value: +"The maximum number of events to return in one page. Defaults to 25. Ignored if event_id is provided." - added
Input schema / properties / page_tokenAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Token for the next page, taken from a previous response. When single_events=True, also pass the response's Pagination time_min as time_min, even if omitted on the first call. Keep all other query parameters unchanged. Ignored if event_id is provided." +}
- Changed
get_gmail_attachment_content1 field changed- added
Input schema / properties / attachment_indexAdded value: +{ + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Zero-based attachment position from\nthe message-content response. When the cap is enabled, this lets\nthe server safely resolve Gmail's refreshed attachment IDs against\ncurrent metadata before downloading." +}
- Changed
get_page1 field changed- added
Input schema / properties / include_geometryAdded value: +{ + "default": false, + "description": "Also report each element's placement - its\ntransform (translate, and scale/shear when not identity) and intrinsic\nsize, in raw EMU. Set this when adding elements to an existing deck:\nit is the only way to discover the deck's margins, gutters and content\nwidth, which Slides exposes nowhere else, and it reports the same terms\nbatch_update_presentation writes. Defaults to False to keep the\ndefault output's token cost unchanged.", + "type": "boolean" +}
- Changed
get_presentation1 field changed- added
Input schema / properties / include_geometryAdded value: +{ + "default": false, + "description": "Also list each slide's elements with their\nplacement - transform (translate, and scale/shear when not identity)\nand intrinsic size, in raw EMU. Set this when adding slides to an\nexisting deck so new elements can match its established margins and\ncontent width. Defaults to False.", + "type": "boolean" +}
- Changed
inspect_doc_structure1 field changed- added
Input schema / properties / preview_charsAdded value: +{ + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": 100, + "description": "Maximum characters of paragraph, header and footer text\npreview. Pass 0 or None for the full text, needed to locate a token inside a\nparagraph longer than the default 100 characters." +}
- Changed
list_calendars2 fields changed- added
Input schema / properties / max_resultsAdded value: +{ + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Maximum calendars to return in one page. Omit to use the API default." +} - added
Input schema / properties / page_tokenAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Token for the next page, taken from a previous response." +}
- Changed
manage_event1 field changed- changed
Input schema / properties / attachments / descriptionPrevious value: -"List of Google Drive file URLs or IDs to attach."New value: +"List of Google Drive file URLs or IDs to attach.\nOn action=\"update\" this replaces the event's existing attachments rather than\nappending to them, matching the Calendar API's patch semantics."
- Changed
manage_gmail_label3 fields changed- added
Input schema / properties / background_colorAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Label background color as a hex string, e.g. \"#fb4c2f\". Set together with text_color; Gmail requires both. Gmail accepts only its own palette, and an unsupported value is rejected before the request. Colors apply to user labels, not system labels." +} - added
Input schema / properties / clear_colorAdded value: +{ + "default": false, + "description": "On update, remove the label's current color. Cannot be combined with background_color or text_color.", + "type": "boolean" +} - added
Input schema / properties / text_colorAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Label text color as a hex string, e.g. \"#ffffff\". Set together with background_color. Same palette. On update, omitting both keeps the label's current color." +}
- Added
manage_sheet_tab - Changed
send_message1 field changed- added
Input schema / properties / message_nameAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Edit this message in place instead of sending a new one\n(e.g. spaces/X/messages/Y, as returned by send_message or get_messages).\nMust be a message of space_id. Only the text is replaced, and only the\nauthor can edit their own message." +}
- Changed
update_paragraph_style1 field changed- changed
Input schema / properties / list_type / descriptionPrevious value: -"Create a list from existing paragraphs ('UNORDERED' for bullets, 'ORDERED' for numbers, 'CHECKBOX' for checklists)"New value: +"Create a list from existing paragraphs ('UNORDERED' for bullets, 'ORDERED' for numbers, 'CHECKBOX' for checklists), or 'NONE' to remove existing list formatting from the range. Use 'NONE' when text inserted after a list has inherited its bullets: setting named_style_type or heading_level does not clear list membership, only 'NONE' does."
12 tool updates
v1.25.2- Changed
batch_modify_gmail_message_labels3 fields changed- removed
Input schema / properties / add_label_ids / anyOfRemoved value: -[ - { - "items": { - "type": "string" - }, - "type": "array" - }, - { - "type": "null" - } -] - removed
Input schema / properties / remove_label_ids / anyOfRemoved value: -[ - { - "items": { - "type": "string" - }, - "type": "array" - }, - { - "type": "null" - } -] - added
Input schema / properties / verifyAdded value: +{ + "default": true, + "description": "Read the messages back and report per-id outcomes. Costs\none extra (batched) read per id. Set False for very large sweeps\nwhere that cost matters and an unverified result is acceptable.", + "type": "boolean" +}
- Changed
create_drive_file1 field changed- added
Input schema / properties / base64_sha256Added value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Expected SHA-256 of decoded base64_content. Recommended for binary payload integrity checks." +}
- Changed
draft_gmail_message4 fields changed- changed
Input schema / properties / from_email / descriptionPrevious value: -"Optional 'Send As' alias email address. Must be configured in Gmail settings (Settings > Accounts > Send mail as). If not provided, uses the authenticated user's email."New value: +"Optional 'Send As' alias email address. Must be configured in Gmail settings (Settings > Accounts > Send mail as). If not provided, uses the account's default Send As address, falling back to the authenticated user's email when Gmail returns no usable Send-As entry or settings access is not authorized." - changed
Input schema / properties / in_reply_to / descriptionPrevious value: -"Optional RFC Message-ID of the message being replied to (e.g., '<message123@gmail.com>')."New value: +"Optional RFC Message-ID to explicitly reply to a specific message (e.g., '<message123@gmail.com>'). Omit to reply to the latest eligible message in thread_id." - changed
Input schema / properties / references / descriptionPrevious value: -"Optional chain of Message-IDs for proper threading."New value: +"Optional Message-ID ancestry chain. Normally omit when thread_id is provided; the server derives the chain through the selected reply target." - changed
Input schema / properties / thread_id / descriptionPrevious value: -"Optional Gmail thread ID to reply within."New value: +"Optional Gmail thread ID to reply within. When in_reply_to is omitted, replies to the latest non-draft, non-trash message with an RFC Message-ID."
- Changed
get_events3 fields changed- changed
Input schema / properties / detailed / descriptionPrevious value: -"Whether to return detailed event information including description, location, colour (colorId), attendees, and attendee details (response status, organizer, optional flags). Recurring instances also report the parent series ID needed to edit the whole series, and events that are not ordinary confirmed meetings report their event type (outOfOffice, workingLocation, focusTime) and status. Defaults to False."New value: +"Whether to return detailed event information including description, location, colour (colorId), attendees, and attendee details (response status, organizer, optional flags). Recurring instances also report the parent series ID needed to edit the whole series; recurring masters report their raw RFC5545 recurrence rules; and events that are not ordinary confirmed meetings report their event type (outOfOffice, workingLocation, focusTime) and status. Defaults to False." - added
Input schema / properties / single_eventsAdded value: +{ + "default": true, + "description": "Whether to expand recurring series into individual instances. Defaults to True for backwards compatibility. Set to False with detailed=True to retrieve recurring master events and their exact RFC5545 recurrence rules instead of inferring cadence from expanded instances.", + "type": "boolean" +} - changed
Input schema / properties / time_min / descriptionPrevious value: -"The start of the time range (inclusive) in RFC3339 format (e.g., '2024-05-12T10:00:00Z' or '2024-05-12'). If omitted, defaults to the current time. Ignored if event_id is provided."New value: +"The start of the time range (inclusive) in RFC3339 format (e.g., '2024-05-12T10:00:00Z' or '2024-05-12'). If omitted, defaults to the current time when single_events=True. It is omitted from unexpanded queries so recurring masters that began in the past but still have future occurrences remain discoverable. Ignored if event_id is provided."
- Changed
import_to_google_doc2 fields changed- added
Input schema / properties / base64_contentAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Standard base64-encoded bytes for a binary source such as DOCX or ODT." +} - added
Input schema / properties / base64_sha256Added value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Expected SHA-256 of decoded base64_content. Recommended for binary payload integrity checks." +}
- Changed
import_to_google_sheets2 fields changed- added
Input schema / properties / base64_contentAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Standard base64-encoded bytes for an XLSX, XLS, or ODS source." +} - added
Input schema / properties / base64_sha256Added value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Expected SHA-256 of decoded base64_content. Recommended for binary payload integrity checks." +}
- Changed
import_to_google_slides2 fields changed- added
Input schema / properties / base64_contentAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Standard base64-encoded bytes for a PPTX or ODP source." +} - added
Input schema / properties / base64_sha256Added value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Expected SHA-256 of decoded base64_content. Recommended for binary payload integrity checks." +}
- Changed
list_gmail_labels3 fields changed- added
Input schema / properties / compactAdded value: +{ + "default": false, + "description": "Return minimal JSON {\"count\", \"labels\": [{\"id\", \"name\"}]}\nsorted by name, instead of the formatted text list. For callers\nthat parse the result, e.g. a label cache refresh.", + "type": "boolean" +} - added
Input schema / properties / include_systemAdded value: +{ + "default": true, + "description": "Include Gmail system labels (INBOX, SENT, ...).\nSet False to return user labels only.", + "type": "boolean" +} - added
Input schema / properties / prefixAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Return only labels whose name starts with this\nexact (case-sensitive) string. users.labels.list accepts no filter,\nso the full list is fetched and narrowed here: this shrinks what the\ncaller receives, not the API call." +}
- Changed
manage_event3 fields changed- added
Input schema / properties / end_timezoneAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "IANA timezone for the end boundary only,\noverriding timezone. See start_timezone." +} - added
Input schema / properties / start_timezoneAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "IANA timezone for the start boundary only,\noverriding timezone. Use for events whose two ends sit in different zones -\na flight departing 13:45 \"Asia/Jerusalem\" and landing 17:50\n\"Europe/Amsterdam\" is one event authored in two zones. Passing a single\ntimezone for such an event silently rewrites one end's wall-clock." +} - changed
Input schema / properties / timezone / descriptionPrevious value: -"Timezone (e.g., \"America/New_York\")."New value: +"IANA timezone applied to both boundaries (e.g.,\n\"America/New_York\"). Overridden per boundary by start_timezone/end_timezone."
- Changed
modify_gmail_message_labels2 fields changed- removed
Input schema / properties / add_label_ids / anyOfRemoved value: -[ - { - "items": { - "type": "string" - }, - "type": "array" - }, - { - "type": "null" - } -] - removed
Input schema / properties / remove_label_ids / anyOfRemoved value: -[ - { - "items": { - "type": "string" - }, - "type": "array" - }, - { - "type": "null" - } -]
- Changed
send_gmail_message3 fields changed- changed
Input schema / properties / in_reply_to / descriptionPrevious value: -"Optional RFC Message-ID of the message being replied to (e.g., '<message123@gmail.com>')."New value: +"Optional RFC Message-ID to explicitly reply to a specific message (e.g., '<message123@gmail.com>'). Omit to reply to the latest eligible message in thread_id." - changed
Input schema / properties / references / descriptionPrevious value: -"Optional chain of Message-IDs for proper threading."New value: +"Optional Message-ID ancestry chain. Normally omit when thread_id is provided; the server derives the chain through the selected reply target." - changed
Input schema / properties / thread_id / descriptionPrevious value: -"Optional Gmail thread ID to reply within."New value: +"Optional Gmail thread ID to reply within. When in_reply_to is omitted, replies to the latest non-draft, non-trash message with an RFC Message-ID."
- Changed
update_drive_file3 fields changed- changed
Input schema / properties / copy_requires_writer_permission / descriptionPrevious value: -"Whether copying requires writer permission."New value: +"Whether copying requires writer\npermission. Pass the target ID directly; this cannot be changed on a\nshortcut resource." - changed
Input schema / properties / mime_type / descriptionPrevious value: -"New MIME type (note: changing type may require content upload)."New value: +"New MIME type (note: changing type may require\ncontent upload). For a shortcut ID, this must accompany content and applies\nto the resolved target." - changed
Input schema / properties / writers_can_share / descriptionPrevious value: -"Whether editors can share the file."New value: +"Whether editors can share the file. Pass the\ntarget ID directly; this cannot be changed on a shortcut resource."
8 tool updates
v1.24.0- Changed
batch_update_doc1 field changed- changed
Input schema / properties / operations / items / oneOfPrevious value: -[ - { - "additionalProperties": false, - "properties": { - "end_of_segment": { - "default": false, - "description": "Append to the end of the targeted body/segment instead of using index.", - "type": "boolean" - }, - "index": { - "anyOf": [ - { - "type": "integer" - }, - { - "type": "null" - } - ], - "default": null, - "description": "Insertion index. Omit when end_of_segment=true." - }, - "segment_id": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "Optional header/footer/footnote segment ID. Use a real ID returned by inspect_doc_structure; do not guess values like 'kix.header'." - }, - "tab_id": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "Optional document tab ID to target." - }, - "text": { - "description": "Text to insert.", - "type": "string" - }, - "type": { - "const": "insert_text", - "type": "string" - } - }, - "required": [ - "type", - "text" - ], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "end_index": { - "type": "integer" - }, - "segment_id": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "Optional header/footer/footnote segment ID. Use a real ID returned by inspect_doc_structure; do not guess values like 'kix.header'." - }, - "start_index": { - "type": "integer" - }, - "tab_id": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "Optional document tab ID to target." - }, - "type": { - "const": "delete_text", - "type": "string" - } - }, - "required": [ - "type", - "start_index", - "end_index" - ], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "end_index": { - "type": "integer" - }, - "segment_id": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "Optional header/footer/footnote segment ID. Use a real ID returned by inspect_doc_structure; do not guess values like 'kix.header'." - }, - "start_index": { - "type": "integer" - }, - "tab_id": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "Optional document tab ID to target." - }, - "text": { - "description": "Replacement text.", - "type": "string" - }, - "type": { - "const": "replace_text", - "type": "string" - } - }, - "required": [ - "type", - "start_index", - "end_index", - "text" - ], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "background_color": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - }, - "baseline_offset": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - }, - "bold": { - "anyOf": [ - { - "type": "boolean" - }, - { - "type": "null" - } - ], - "default": null - }, - "clear_link": { - "anyOf": [ - { - "type": "boolean" - }, - { - "type": "null" - } - ], - "default": null - }, - "end_index": { - "type": "integer" - }, - "font_family": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - }, - "font_size": { - "anyOf": [ - { - "type": "integer" - }, - { - "type": "null" - } - ], - "default": null - }, - "font_weight": { - "anyOf": [ - { - "type": "integer" - }, - { - "type": "null" - } - ], - "default": null - }, - "italic": { - "anyOf": [ - { - "type": "boolean" - }, - { - "type": "null" - } - ], - "default": null - }, - "link_url": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - }, - "segment_id": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "Optional header/footer/footnote segment ID. Use a real ID returned by inspect_doc_structure; do not guess values like 'kix.header'." - }, - "small_caps": { - "anyOf": [ - { - "type": "boolean" - }, - { - "type": "null" - } - ], - "default": null - }, - "start_index": { - "type": "integer" - }, - "strikethrough": { - "anyOf": [ - { - "type": "boolean" - }, - { - "type": "null" - } - ], - "default": null - }, - "tab_id": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "Optional document tab ID to target." - }, - "text_color": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - }, - "type": { - "const": "format_text", - "type": "string" - }, - "underline": { - "anyOf": [ - { - "type": "boolean" - }, - { - "type": "null" - } - ], - "default": null - } - }, - "required": [ - "type", - "start_index", - "end_index" - ], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "alignment": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - }, - "avoid_widow_and_orphan": { - "anyOf": [ - { - "type": "boolean" - }, - { - "type": "null" - } - ], - "default": null - }, - "direction": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - }, - "end_index": { - "type": "integer" - }, - "heading_level": { - "anyOf": [ - { - "type": "integer" - }, - { - "type": "null" - } - ], - "default": null - }, - "indent_end": { - "anyOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ], - "default": null - }, - "indent_first_line": { - "anyOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ], - "default": null - }, - "indent_start": { - "anyOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ], - "default": null - }, - "keep_lines_together": { - "anyOf": [ - { - "type": "boolean" - }, - { - "type": "null" - } - ], - "default": null - }, - "keep_with_next": { - "anyOf": [ - { - "type": "boolean" - }, - { - "type": "null" - } - ], - "default": null - }, - "line_spacing": { - "anyOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ], - "default": null - }, - "named_style_type": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - }, - "page_break_before": { - "anyOf": [ - { - "type": "boolean" - }, - { - "type": "null" - } - ], - "default": null - }, - "segment_id": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "Optional header/footer/footnote segment ID. Use a real ID returned by inspect_doc_structure; do not guess values like 'kix.header'." - }, - "shading_color": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - }, - "space_above": { - "anyOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ], - "default": null - }, - "space_below": { - "anyOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ], - "default": null - }, - "spacing_mode": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - }, - "start_index": { - "type": "integer" - }, - "tab_id": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "Optional document tab ID to target." - }, - "type": { - "const": "update_paragraph_style", - "type": "string" - } - }, - "required": [ - "type", - "start_index", - "end_index" - ], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "background_color": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - }, - "border_color": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - }, - "border_width": { - "anyOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ], - "default": null - }, - "column_index": { - "anyOf": [ - { - "type": "integer" - }, - { - "type": "null" - } - ], - "default": null - }, - "column_span": { - "anyOf": [ - { - "type": "integer" - }, - { - "type": "null" - } - ], - "default": null - }, - "content_alignment": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - }, - "padding_bottom": { - "anyOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ], - "default": null - }, - "padding_left": { - "anyOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ], - "default": null - }, - "padding_right": { - "anyOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ], - "default": null - }, - "padding_top": { - "anyOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ], - "default": null - }, - "row_index": { - "anyOf": [ - { - "type": "integer" - }, - { - "type": "null" - } - ], - "default": null - }, - "row_span": { - "anyOf": [ - { - "type": "integer" - }, - { - "type": "null" - } - ], - "default": null - }, - "tab_id": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "Optional document tab ID to target." - }, - "table_start_index": { - "type": "integer" - }, - "type": { - "const": "update_table_cell_style", - "type": "string" - } - }, - "required": [ - "type", - "table_start_index" - ], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "columns": { - "type": "integer" - }, - "end_of_segment": { - "default": false, - "description": "Append to the end of the targeted body/segment instead of using index.", - "type": "boolean" - }, - "index": { - "anyOf": [ - { - "type": "integer" - }, - { - "type": "null" - } - ], - "default": null, - "description": "Insertion index. Omit when end_of_segment=true." - }, - "rows": { - "type": "integer" - }, - "segment_id": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "Optional header/footer/footnote segment ID. Use a real ID returned by inspect_doc_structure; do not guess values like 'kix.header'." - }, - "tab_id": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "Optional document tab ID to target." - }, - "type": { - "const": "insert_table", - "type": "string" - } - }, - "required": [ - "type", - "rows", - "columns" - ], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "insert_below": { - "default": true, - "type": "boolean" - }, - "row_index": { - "type": "integer" - }, - "tab_id": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "Optional document tab ID to target." - }, - "table_start_index": { - "type": "integer" - }, - "type": { - "const": "insert_table_row", - "type": "string" - } - }, - "required": [ - "type", - "table_start_index", - "row_index" - ], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "row_index": { - "type": "integer" - }, - "tab_id": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "Optional document tab ID to target." - }, - "table_start_index": { - "type": "integer" - }, - "type": { - "const": "delete_table_row", - "type": "string" - } - }, - "required": [ - "type", - "table_start_index", - "row_index" - ], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "column_index": { - "type": "integer" - }, - "insert_right": { - "default": true, - "type": "boolean" - }, - "tab_id": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "Optional document tab ID to target." - }, - "table_start_index": { - "type": "integer" - }, - "type": { - "const": "insert_table_column", - "type": "string" - } - }, - "required": [ - "type", - "table_start_index", - "column_index" - ], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "column_index": { - "type": "integer" - }, - "tab_id": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "Optional document tab ID to target." - }, - "table_start_index": { - "type": "integer" - }, - "type": { - "const": "delete_table_column", - "type": "string" - } - }, - "required": [ - "type", - "table_start_index", - "column_index" - ], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "column_index": { - "type": "integer" - }, - "column_span": { - "type": "integer" - }, - "row_index": { - "type": "integer" - }, - "row_span": { - "type": "integer" - }, - "tab_id": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "Optional document tab ID to target." - }, - "table_start_index": { - "type": "integer" - }, - "type": { - "const": "merge_table_cells", - "type": "string" - } - }, - "required": [ - "type", - "table_start_index", - "row_index", - "column_index", - "row_span", - "column_span" - ], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "column_index": { - "type": "integer" - }, - "column_span": { - "type": "integer" - }, - "row_index": { - "type": "integer" - }, - "row_span": { - "type": "integer" - }, - "tab_id": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "Optional document tab ID to target." - }, - "table_start_index": { - "type": "integer" - }, - "type": { - "const": "unmerge_table_cells", - "type": "string" - } - }, - "required": [ - "type", - "table_start_index", - "row_index", - "column_index", - "row_span", - "column_span" - ], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "column_indices": { - "items": { - "type": "integer" - }, - "type": "array" - }, - "tab_id": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "Optional document tab ID to target." - }, - "table_start_index": { - "type": "integer" - }, - "type": { - "const": "update_table_column_properties", - "type": "string" - }, - "width": { - "anyOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ], - "default": null - }, - "width_type": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - } - }, - "required": [ - "type", - "table_start_index", - "column_indices" - ], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "min_row_height": { - "anyOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ], - "default": null, - "description": "Minimum row height in points." - }, - "row_indices": { - "description": "Zero-based row indices to style, e.g. [0] for the header row.", - "items": { - "type": "integer" - }, - "type": "array" - }, - "tab_id": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "Optional document tab ID to target." - }, - "table_start_index": { - "type": "integer" - }, - "type": { - "const": "update_table_row_style", - "type": "string" - } - }, - "required": [ - "type", - "table_start_index", - "row_indices" - ], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "pinned_header_rows_count": { - "description": "Number of leading rows to pin as a repeating header on each page. 0 unpins all rows. Use this dedicated request because the 'tableHeader' value reported in TableRowStyle cannot be set through UpdateTableRowStyleRequest.", - "minimum": 0, - "type": "integer" - }, - "tab_id": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "Optional document tab ID to target." - }, - "table_start_index": { - "type": "integer" - }, - "type": { - "const": "pin_table_header_rows", - "type": "string" - } - }, - "required": [ - "type", - "table_start_index", - "pinned_header_rows_count" - ], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "end_of_segment": { - "default": false, - "description": "Append to the end of the body instead of using index.", - "type": "boolean" - }, - "index": { - "anyOf": [ - { - "type": "integer" - }, - { - "type": "null" - } - ], - "default": null, - "description": "Insertion index. Omit when end_of_segment=true." - }, - "tab_id": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "Optional document tab ID to target." - }, - "type": { - "const": "insert_page_break", - "type": "string" - } - }, - "required": [ - "type" - ], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "end_of_segment": { - "default": false, - "description": "Append to the end of the body instead of using index.", - "type": "boolean" - }, - "index": { - "anyOf": [ - { - "type": "integer" - }, - { - "type": "null" - } - ], - "default": null, - "description": "Insertion index. Omit when end_of_segment=true." - }, - "section_type": { - "default": "NEXT_PAGE", - "enum": [ - "CONTINUOUS", - "NEXT_PAGE" - ], - "type": "string" - }, - "tab_id": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "Optional document tab ID to target." - }, - "type": { - "const": "insert_section_break", - "type": "string" - } - }, - "required": [ - "type" - ], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "find_text": { - "type": "string" - }, - "match_case": { - "default": false, - "type": "boolean" - }, - "replace_text": { - "type": "string" - }, - "tab_id": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "Optional document tab ID to target." - }, - "type": { - "const": "find_replace", - "type": "string" - } - }, - "required": [ - "type", - "find_text", - "replace_text" - ], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "bullet_preset": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - }, - "end_index": { - "type": "integer" - }, - "list_type": { - "default": "UNORDERED", - "enum": [ - "UNORDERED", - "ORDERED", - "CHECKBOX", - "NONE" - ], - "type": "string" - }, - "nesting_level": { - "anyOf": [ - { - "type": "integer" - }, - { - "type": "null" - } - ], - "default": null - }, - "paragraph_start_indices": { - "anyOf": [ - { - "items": { - "type": "integer" - }, - "type": "array" - }, - { - "type": "null" - } - ], - "default": null - }, - "segment_id": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "Optional header/footer/footnote segment ID. Use a real ID returned by inspect_doc_structure; do not guess values like 'kix.header'." - }, - "start_index": { - "type": "integer" - }, - "tab_id": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "Optional document tab ID to target." - }, - "type": { - "const": "create_bullet_list", - "type": "string" - } - }, - "required": [ - "type", - "start_index", - "end_index" - ], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "end_index": { - "type": "integer" - }, - "name": { - "type": "string" - }, - "segment_id": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "Optional header/footer/footnote segment ID. Use a real ID returned by inspect_doc_structure; do not guess values like 'kix.header'." - }, - "start_index": { - "type": "integer" - }, - "tab_id": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "Optional document tab ID to target." - }, - "type": { - "const": "create_named_range", - "type": "string" - } - }, - "required": [ - "type", - "name", - "start_index", - "end_index" - ], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "named_range_id": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - }, - "named_range_name": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - }, - "tab_id": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "Optional document tab ID to target." - }, - "text": { - "type": "string" - }, - "type": { - "const": "replace_named_range_content", - "type": "string" - } - }, - "required": [ - "type", - "text" - ], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "named_range_id": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - }, - "named_range_name": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - }, - "tab_id": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "Optional document tab ID to target." - }, - "type": { - "const": "delete_named_range", - "type": "string" - } - }, - "required": [ - "type" - ], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "background_color": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - }, - "document_mode": { - "anyOf": [ - { - "enum": [ - "PAGES", - "PAGELESS" - ], - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - }, - "flip_page_orientation": { - "anyOf": [ - { - "type": "boolean" - }, - { - "type": "null" - } - ], - "default": null - }, - "margin_bottom": { - "anyOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ], - "default": null - }, - "margin_footer": { - "anyOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ], - "default": null - }, - "margin_header": { - "anyOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ], - "default": null - }, - "margin_left": { - "anyOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ], - "default": null - }, - "margin_right": { - "anyOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ], - "default": null - }, - "margin_top": { - "anyOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ], - "default": null - }, - "page_height": { - "anyOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ], - "default": null - }, - "page_number_start": { - "anyOf": [ - { - "type": "integer" - }, - { - "type": "null" - } - ], - "default": null - }, - "page_width": { - "anyOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ], - "default": null - }, - "tab_id": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "Optional document tab ID to target." - }, - "type": { - "const": "update_document_style", - "type": "string" - }, - "use_even_page_header_footer": { - "anyOf": [ - { - "type": "boolean" - }, - { - "type": "null" - } - ], - "default": null - }, - "use_first_page_header_footer": { - "anyOf": [ - { - "type": "boolean" - }, - { - "type": "null" - } - ], - "default": null - } - }, - "required": [ - "type" - ], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "column_count": { - "anyOf": [ - { - "type": "integer" - }, - { - "type": "null" - } - ], - "default": null - }, - "column_separator_style": { - "anyOf": [ - { - "enum": [ - "NONE", - "BETWEEN_EACH_COLUMN" - ], - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - }, - "column_spacing": { - "anyOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ], - "default": null - }, - "content_direction": { - "anyOf": [ - { - "enum": [ - "LEFT_TO_RIGHT", - "RIGHT_TO_LEFT" - ], - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - }, - "end_index": { - "type": "integer" - }, - "flip_page_orientation": { - "anyOf": [ - { - "type": "boolean" - }, - { - "type": "null" - } - ], - "default": null - }, - "margin_bottom": { - "anyOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ], - "default": null - }, - "margin_footer": { - "anyOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ], - "default": null - }, - "margin_header": { - "anyOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ], - "default": null - }, - "margin_left": { - "anyOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ], - "default": null - }, - "margin_right": { - "anyOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ], - "default": null - }, - "margin_top": { - "anyOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ], - "default": null - }, - "page_number_start": { - "anyOf": [ - { - "type": "integer" - }, - { - "type": "null" - } - ], - "default": null - }, - "start_index": { - "type": "integer" - }, - "tab_id": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "Optional document tab ID to target." - }, - "type": { - "const": "update_section_style", - "type": "string" - }, - "use_first_page_header_footer": { - "anyOf": [ - { - "type": "boolean" - }, - { - "type": "null" - } - ], - "default": null - } - }, - "required": [ - "type", - "start_index", - "end_index" - ], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "header_footer_type": { - "default": "DEFAULT", - "description": "Header/footer type to create.", - "enum": [ - "DEFAULT", - "FIRST_PAGE_ONLY", - "EVEN_PAGE" - ], - "type": "string" - }, - "section_break_index": { - "anyOf": [ - { - "type": "integer" - }, - { - "type": "null" - } - ], - "default": null, - "description": "Optional section break index for section-scoped layouts." - }, - "section_type": { - "description": "Which section to create.", - "enum": [ - "header", - "footer" - ], - "type": "string" - }, - "tab_id": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "Optional document tab ID to target." - }, - "type": { - "const": "create_header_footer", - "type": "string" - } - }, - "required": [ - "type", - "section_type" - ], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "end_of_segment": { - "default": false, - "description": "Append to the end of the targeted body/segment instead of using index.", - "type": "boolean" - }, - "height": { - "anyOf": [ - { - "type": "integer" - }, - { - "type": "null" - } - ], - "default": null - }, - "image_uri": { - "description": "Image URL or resolvable image URI.", - "type": "string" - }, - "index": { - "anyOf": [ - { - "type": "integer" - }, - { - "type": "null" - } - ], - "default": null, - "description": "Insertion index. Omit when end_of_segment=true." - }, - "segment_id": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "Optional header/footer/footnote segment ID. Use a real ID returned by inspect_doc_structure; do not guess values like 'kix.header'." - }, - "tab_id": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "Optional document tab ID to target." - }, - "type": { - "const": "insert_image", - "type": "string" - }, - "width": { - "anyOf": [ - { - "type": "integer" - }, - { - "type": "null" - } - ], - "default": null - } - }, - "required": [ - "type", - "image_uri" - ], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "index": { - "type": "integer" - }, - "parent_tab_id": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - }, - "title": { - "type": "string" - }, - "type": { - "const": "insert_doc_tab", - "type": "string" - } - }, - "required": [ - "type", - "title", - "index" - ], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "tab_id": { - "type": "string" - }, - "type": { - "const": "delete_doc_tab", - "type": "string" - } - }, - "required": [ - "type", - "tab_id" - ], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "tab_id": { - "type": "string" - }, - "title": { - "type": "string" - }, - "type": { - "const": "update_doc_tab", - "type": "string" - } - }, - "required": [ - "type", - "tab_id", - "title" - ], - "type": "object" - } -]New value: +[ + { + "additionalProperties": false, + "properties": { + "end_of_segment": { + "default": false, + "description": "Append to the end of the targeted body/segment instead of using index.", + "type": "boolean" + }, + "index": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Insertion index. Omit when end_of_segment=true." + }, + "segment_id": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Optional header/footer/footnote segment ID. Use a real ID returned by inspect_doc_structure; do not guess values like 'kix.header'." + }, + "tab_id": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Optional document tab ID to target." + }, + "text": { + "description": "Text to insert.", + "type": "string" + }, + "type": { + "const": "insert_text", + "type": "string" + } + }, + "required": [ + "type", + "text" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "end_index": { + "type": "integer" + }, + "segment_id": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Optional header/footer/footnote segment ID. Use a real ID returned by inspect_doc_structure; do not guess values like 'kix.header'." + }, + "start_index": { + "type": "integer" + }, + "tab_id": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Optional document tab ID to target." + }, + "type": { + "const": "delete_text", + "type": "string" + } + }, + "required": [ + "type", + "start_index", + "end_index" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "end_index": { + "type": "integer" + }, + "segment_id": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Optional header/footer/footnote segment ID. Use a real ID returned by inspect_doc_structure; do not guess values like 'kix.header'." + }, + "start_index": { + "type": "integer" + }, + "tab_id": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Optional document tab ID to target." + }, + "text": { + "description": "Replacement text.", + "type": "string" + }, + "type": { + "const": "replace_text", + "type": "string" + } + }, + "required": [ + "type", + "start_index", + "end_index", + "text" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "background_color": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "baseline_offset": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "bold": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": null + }, + "clear_link": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": null + }, + "end_index": { + "type": "integer" + }, + "font_family": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "font_size": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "default": null + }, + "font_weight": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null + }, + "italic": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": null + }, + "link_url": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "segment_id": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Optional header/footer/footnote segment ID. Use a real ID returned by inspect_doc_structure; do not guess values like 'kix.header'." + }, + "small_caps": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": null + }, + "start_index": { + "type": "integer" + }, + "strikethrough": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": null + }, + "tab_id": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Optional document tab ID to target." + }, + "text_color": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "type": { + "const": "format_text", + "type": "string" + }, + "underline": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": null + } + }, + "required": [ + "type", + "start_index", + "end_index" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "alignment": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "avoid_widow_and_orphan": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": null + }, + "border_color": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "border_dash": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "border_edges": { + "anyOf": [ + { + "items": { + "enum": [ + "top", + "bottom", + "left", + "right", + "between" + ], + "type": "string" + }, + "minItems": 1, + "type": "array" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Paragraph border edges to update; omit to update top, bottom, left, and right." + }, + "border_padding": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "default": null + }, + "border_width": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "default": null + }, + "direction": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "end_index": { + "type": "integer" + }, + "heading_level": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null + }, + "indent_end": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "default": null + }, + "indent_first_line": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "default": null + }, + "indent_start": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "default": null + }, + "keep_lines_together": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": null + }, + "keep_with_next": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": null + }, + "line_spacing": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "default": null + }, + "named_style_type": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "page_break_before": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": null + }, + "segment_id": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Optional header/footer/footnote segment ID. Use a real ID returned by inspect_doc_structure; do not guess values like 'kix.header'." + }, + "shading_color": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "space_above": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "default": null + }, + "space_below": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "default": null + }, + "spacing_mode": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "start_index": { + "type": "integer" + }, + "tab_id": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Optional document tab ID to target." + }, + "type": { + "const": "update_paragraph_style", + "type": "string" + } + }, + "required": [ + "type", + "start_index", + "end_index" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "background_color": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "border_color": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "border_edges": { + "anyOf": [ + { + "items": { + "enum": [ + "top", + "bottom", + "left", + "right" + ], + "type": "string" + }, + "minItems": 1, + "type": "array" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Table-cell border edges to update; omit to update all four edges." + }, + "border_width": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "default": null + }, + "column_index": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null + }, + "column_span": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null + }, + "content_alignment": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "padding_bottom": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "default": null + }, + "padding_left": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "default": null + }, + "padding_right": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "default": null + }, + "padding_top": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "default": null + }, + "row_index": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null + }, + "row_span": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null + }, + "tab_id": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Optional document tab ID to target." + }, + "table_start_index": { + "type": "integer" + }, + "type": { + "const": "update_table_cell_style", + "type": "string" + } + }, + "required": [ + "type", + "table_start_index" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "columns": { + "type": "integer" + }, + "end_of_segment": { + "default": false, + "description": "Append to the end of the targeted body/segment instead of using index.", + "type": "boolean" + }, + "index": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Insertion index. Omit when end_of_segment=true." + }, + "rows": { + "type": "integer" + }, + "segment_id": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Optional header/footer/footnote segment ID. Use a real ID returned by inspect_doc_structure; do not guess values like 'kix.header'." + }, + "tab_id": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Optional document tab ID to target." + }, + "type": { + "const": "insert_table", + "type": "string" + } + }, + "required": [ + "type", + "rows", + "columns" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "insert_below": { + "default": true, + "type": "boolean" + }, + "row_index": { + "type": "integer" + }, + "tab_id": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Optional document tab ID to target." + }, + "table_start_index": { + "type": "integer" + }, + "type": { + "const": "insert_table_row", + "type": "string" + } + }, + "required": [ + "type", + "table_start_index", + "row_index" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "row_index": { + "type": "integer" + }, + "tab_id": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Optional document tab ID to target." + }, + "table_start_index": { + "type": "integer" + }, + "type": { + "const": "delete_table_row", + "type": "string" + } + }, + "required": [ + "type", + "table_start_index", + "row_index" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "column_index": { + "type": "integer" + }, + "insert_right": { + "default": true, + "type": "boolean" + }, + "tab_id": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Optional document tab ID to target." + }, + "table_start_index": { + "type": "integer" + }, + "type": { + "const": "insert_table_column", + "type": "string" + } + }, + "required": [ + "type", + "table_start_index", + "column_index" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "column_index": { + "type": "integer" + }, + "tab_id": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Optional document tab ID to target." + }, + "table_start_index": { + "type": "integer" + }, + "type": { + "const": "delete_table_column", + "type": "string" + } + }, + "required": [ + "type", + "table_start_index", + "column_index" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "column_index": { + "type": "integer" + }, + "column_span": { + "type": "integer" + }, + "row_index": { + "type": "integer" + }, + "row_span": { + "type": "integer" + }, + "tab_id": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Optional document tab ID to target." + }, + "table_start_index": { + "type": "integer" + }, + "type": { + "const": "merge_table_cells", + "type": "string" + } + }, + "required": [ + "type", + "table_start_index", + "row_index", + "column_index", + "row_span", + "column_span" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "column_index": { + "type": "integer" + }, + "column_span": { + "type": "integer" + }, + "row_index": { + "type": "integer" + }, + "row_span": { + "type": "integer" + }, + "tab_id": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Optional document tab ID to target." + }, + "table_start_index": { + "type": "integer" + }, + "type": { + "const": "unmerge_table_cells", + "type": "string" + } + }, + "required": [ + "type", + "table_start_index", + "row_index", + "column_index", + "row_span", + "column_span" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "column_indices": { + "items": { + "type": "integer" + }, + "type": "array" + }, + "tab_id": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Optional document tab ID to target." + }, + "table_start_index": { + "type": "integer" + }, + "type": { + "const": "update_table_column_properties", + "type": "string" + }, + "width": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "default": null + }, + "width_type": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + } + }, + "required": [ + "type", + "table_start_index", + "column_indices" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "min_row_height": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Minimum row height in points." + }, + "row_indices": { + "description": "Zero-based row indices to style, e.g. [0] for the header row.", + "items": { + "type": "integer" + }, + "type": "array" + }, + "tab_id": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Optional document tab ID to target." + }, + "table_start_index": { + "type": "integer" + }, + "type": { + "const": "update_table_row_style", + "type": "string" + } + }, + "required": [ + "type", + "table_start_index", + "row_indices" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "pinned_header_rows_count": { + "description": "Number of leading rows to pin as a repeating header on each page. 0 unpins all rows. Use this dedicated request because the 'tableHeader' value reported in TableRowStyle cannot be set through UpdateTableRowStyleRequest.", + "minimum": 0, + "type": "integer" + }, + "tab_id": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Optional document tab ID to target." + }, + "table_start_index": { + "type": "integer" + }, + "type": { + "const": "pin_table_header_rows", + "type": "string" + } + }, + "required": [ + "type", + "table_start_index", + "pinned_header_rows_count" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "end_of_segment": { + "default": false, + "description": "Append to the end of the body instead of using index.", + "type": "boolean" + }, + "index": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Insertion index. Omit when end_of_segment=true." + }, + "tab_id": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Optional document tab ID to target." + }, + "type": { + "const": "insert_page_break", + "type": "string" + } + }, + "required": [ + "type" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "end_of_segment": { + "default": false, + "description": "Append to the end of the body instead of using index.", + "type": "boolean" + }, + "index": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Insertion index. Omit when end_of_segment=true." + }, + "section_type": { + "default": "NEXT_PAGE", + "enum": [ + "CONTINUOUS", + "NEXT_PAGE" + ], + "type": "string" + }, + "tab_id": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Optional document tab ID to target." + }, + "type": { + "const": "insert_section_break", + "type": "string" + } + }, + "required": [ + "type" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "find_text": { + "type": "string" + }, + "match_case": { + "default": false, + "type": "boolean" + }, + "replace_text": { + "type": "string" + }, + "tab_id": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Optional document tab ID to target." + }, + "type": { + "const": "find_replace", + "type": "string" + } + }, + "required": [ + "type", + "find_text", + "replace_text" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "bullet_preset": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "end_index": { + "type": "integer" + }, + "list_type": { + "default": "UNORDERED", + "enum": [ + "UNORDERED", + "ORDERED", + "CHECKBOX", + "NONE" + ], + "type": "string" + }, + "nesting_level": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null + }, + "paragraph_start_indices": { + "anyOf": [ + { + "items": { + "type": "integer" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "default": null + }, + "segment_id": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Optional header/footer/footnote segment ID. Use a real ID returned by inspect_doc_structure; do not guess values like 'kix.header'." + }, + "start_index": { + "type": "integer" + }, + "tab_id": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Optional document tab ID to target." + }, + "type": { + "const": "create_bullet_list", + "type": "string" + } + }, + "required": [ + "type", + "start_index", + "end_index" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "end_index": { + "type": "integer" + }, + "name": { + "type": "string" + }, + "segment_id": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Optional header/footer/footnote segment ID. Use a real ID returned by inspect_doc_structure; do not guess values like 'kix.header'." + }, + "start_index": { + "type": "integer" + }, + "tab_id": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Optional document tab ID to target." + }, + "type": { + "const": "create_named_range", + "type": "string" + } + }, + "required": [ + "type", + "name", + "start_index", + "end_index" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "named_range_id": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "named_range_name": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "tab_id": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Optional document tab ID to target." + }, + "text": { + "type": "string" + }, + "type": { + "const": "replace_named_range_content", + "type": "string" + } + }, + "required": [ + "type", + "text" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "named_range_id": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "named_range_name": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "tab_id": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Optional document tab ID to target." + }, + "type": { + "const": "delete_named_range", + "type": "string" + } + }, + "required": [ + "type" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "background_color": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "document_mode": { + "anyOf": [ + { + "enum": [ + "PAGES", + "PAGELESS" + ], + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "flip_page_orientation": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": null + }, + "margin_bottom": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "default": null + }, + "margin_footer": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "default": null + }, + "margin_header": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "default": null + }, + "margin_left": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "default": null + }, + "margin_right": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "default": null + }, + "margin_top": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "default": null + }, + "page_height": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "default": null + }, + "page_number_start": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null + }, + "page_width": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "default": null + }, + "tab_id": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Optional document tab ID to target." + }, + "type": { + "const": "update_document_style", + "type": "string" + }, + "use_even_page_header_footer": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": null + }, + "use_first_page_header_footer": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": null + } + }, + "required": [ + "type" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "column_count": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null + }, + "column_separator_style": { + "anyOf": [ + { + "enum": [ + "NONE", + "BETWEEN_EACH_COLUMN" + ], + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "column_spacing": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "default": null + }, + "content_direction": { + "anyOf": [ + { + "enum": [ + "LEFT_TO_RIGHT", + "RIGHT_TO_LEFT" + ], + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "end_index": { + "type": "integer" + }, + "flip_page_orientation": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": null + }, + "margin_bottom": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "default": null + }, + "margin_footer": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "default": null + }, + "margin_header": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "default": null + }, + "margin_left": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "default": null + }, + "margin_right": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "default": null + }, + "margin_top": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "default": null + }, + "page_number_start": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null + }, + "start_index": { + "type": "integer" + }, + "tab_id": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Optional document tab ID to target." + }, + "type": { + "const": "update_section_style", + "type": "string" + }, + "use_first_page_header_footer": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": null + } + }, + "required": [ + "type", + "start_index", + "end_index" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "header_footer_type": { + "default": "DEFAULT", + "description": "Header/footer type to create.", + "enum": [ + "DEFAULT", + "FIRST_PAGE_ONLY", + "EVEN_PAGE" + ], + "type": "string" + }, + "section_break_index": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Optional section break index for section-scoped layouts." + }, + "section_type": { + "description": "Which section to create.", + "enum": [ + "header", + "footer" + ], + "type": "string" + }, + "tab_id": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Optional document tab ID to target." + }, + "type": { + "const": "create_header_footer", + "type": "string" + } + }, + "required": [ + "type", + "section_type" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "end_of_segment": { + "default": false, + "description": "Append to the end of the targeted body/segment instead of using index.", + "type": "boolean" + }, + "height": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null + }, + "image_uri": { + "description": "Image URL or resolvable image URI.", + "type": "string" + }, + "index": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Insertion index. Omit when end_of_segment=true." + }, + "segment_id": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Optional header/footer/footnote segment ID. Use a real ID returned by inspect_doc_structure; do not guess values like 'kix.header'." + }, + "tab_id": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Optional document tab ID to target." + }, + "type": { + "const": "insert_image", + "type": "string" + }, + "width": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null + } + }, + "required": [ + "type", + "image_uri" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "index": { + "type": "integer" + }, + "parent_tab_id": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "title": { + "type": "string" + }, + "type": { + "const": "insert_doc_tab", + "type": "string" + } + }, + "required": [ + "type", + "title", + "index" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "tab_id": { + "type": "string" + }, + "type": { + "const": "delete_doc_tab", + "type": "string" + } + }, + "required": [ + "type", + "tab_id" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "tab_id": { + "type": "string" + }, + "title": { + "type": "string" + }, + "type": { + "const": "update_doc_tab", + "type": "string" + } + }, + "required": [ + "type", + "tab_id", + "title" + ], + "type": "object" + } +]
- Changed
draft_gmail_message1 field changed- changed
Input schema / properties / quote_original / descriptionPrevious value: -"Whether to include the original message as a quoted reply. Requires thread_id. Defaults to false."New value: +"Whether to include the original message as a quoted reply. Only has an effect when thread_id is provided. Defaults to false."
- Changed
get_presentation1 field changed- added
Input schema / properties / include_speaker_notesAdded value: +{ + "default": false, + "description": "Also report each slide's speaker (presenter)\nnotes and the object ID of the shape holding them. Pass True when you\nneed to read or edit notes: that shape ID is the only valid target for\ninsertText/deleteText on notes, and batch_update_presentation writes\nnotes by deleting the shape's existing text and inserting new text.\nDefaults to False.", + "type": "boolean" +}
- Changed
modify_doc_text1 field changed- changed
Input schema / properties / font_size / typePrevious value: -"integer"New value: +"number"
- Changed
search_gmail_messages1 field changed- added
Input schema / properties / include_headersAdded value: +{ + "default": false, + "description": "If True, also fetch each message's metadata and include\nSubject, From, and Date per result. Costs one metadata get per result,\ngrouped into HTTP batches of up to 10, plus retries for transient failures.\nDefaults to False (output unchanged from prior versions).", + "type": "boolean" +}
- Changed
send_gmail_message7 fields changed- added
Input schema / properties / quote_originalAdded value: +{ + "default": false, + "description": "Whether to include the message being replied to as a quoted original. Only has an effect when thread_id is provided. Defaults to false.", + "type": "boolean" +} - added
Input schema / properties / reply_allAdded value: +{ + "default": false, + "description": "Whether to derive reply-all recipients from the thread: To = the sender being replied to, Cc = the other participants, excluding the authenticated account and from_email. Requires thread_id. Explicit to/cc win; when cc is omitted the sender being replied to is added to the derived Cc if they are not already in To. Defaults to false.", + "type": "boolean" +} - added
Input schema / properties / to / anyOfAdded value: +[ + { + "type": "string" + }, + { + "type": "null" + } +] - added
Input schema / properties / to / defaultAdded value: +null - changed
Input schema / properties / to / descriptionPrevious value: -"Recipient email address."New value: +"Recipient email address. Optional when replying with reply_all=True, which derives it from the thread." - removed
Input schema / properties / to / typeRemoved value: -"string" - changed
Input schema / requiredPrevious value: -[ - "user_google_email", - "to" -]New value: +[ + "user_google_email" +]
- Changed
update_drive_file2 fields changed- added
Input schema / properties / modeAdded value: +{ + "default": "replace", + "description": "How to apply the new content — 'replace' (default), 'append', or\n'prepend'. Append/prepend require 'content' and a UTF-8 text file such as\n.md or .txt; a newline is inserted at the seam if neither side has one.\nFor native Google Docs use insert_doc_elements, modify_doc_text, or\nfind_and_replace_doc, which edit in place instead of rewriting the file.", + "type": "string" +} - changed
Input schema / properties / source_format / descriptionPrevious value: -"Source format hint for conversion\n(md, markdown, docx, txt, html, rtf, odt). Auto-detected when omitted.\nProvide at most one of content/file_path/file_url."New value: +"Source format hint for conversion\n(md, markdown, docx, txt, html, rtf, odt). Auto-detected when omitted, and\nignored for non-Google files, which are uploaded without conversion.\nProvide at most one of content/file_path/file_url."
- Changed
update_paragraph_style5 fields changed- added
Input schema / properties / border_colorAdded value: +{ + "default": null, + "description": "Border color (#RRGGBB; defaults to black)", + "type": "string" +} - added
Input schema / properties / border_dashAdded value: +{ + "default": null, + "description": "Border dash style ('SOLID', 'DOT', or 'DASH'; defaults to 'SOLID')", + "type": "string" +} - added
Input schema / properties / border_edgesAdded value: +{ + "default": null, + "description": "Paragraph border edges to update ('top', 'bottom', 'left',\n 'right', or 'between'); omit to update all four outer edges", + "items": { + "enum": [ + "top", + "bottom", + "left", + "right", + "between" + ], + "type": "string" + }, + "type": "array" +} - added
Input schema / properties / border_paddingAdded value: +{ + "default": null, + "description": "Border padding in points (defaults to 4)", + "type": "number" +} - added
Input schema / properties / border_widthAdded value: +{ + "default": null, + "description": "Border width in points (defaults to 1)", + "type": "number" +}
125 tool updates
v1.0.1- Added
append_table_rows - Added
batch_modify_gmail_message_labels - Added
batch_update_doc - Added
batch_update_form - Added
batch_update_presentation - Added
check_drive_file_public_access - Added
copy_drive_file - Added
create_calendar - Changed
create_doc11 fields changed- added
Input schema / additionalPropertiesAdded value: +false - added
Input schema / properties / content / descriptionAdded value: +"Optional initial plain text content to insert" - removed
Input schema / properties / content / titleRemoved value: -"Content" - removed
Input schema / properties / serviceRemoved value: -{ - "title": "service", - "type": "string" -} - added
Input schema / properties / title / descriptionAdded value: +"Title of the new document" - removed
Input schema / properties / title / titleRemoved value: -"Title" - added
Input schema / properties / user_google_email / descriptionAdded value: +"User's Google email address" - removed
Input schema / properties / user_google_email / titleRemoved value: -"User Google Email" - changed
Input schema / requiredPrevious value: -[ - "service", - "user_google_email", - "title" -]New value: +[ + "user_google_email", + "title" +] - removed
Input schema / titleRemoved value: -"create_docArguments" - changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "result": { + "type": "string" + } + }, + "required": [ + "result" + ], + "type": "object", + "x-fastmcp-wrap-result": true +}
- Added
create_drive_file - Added
create_drive_folder - Removed
create_event - Changed
create_form13 fields changed- added
Input schema / additionalPropertiesAdded value: +false - added
Input schema / properties / description / descriptionAdded value: +"The description of the form." - removed
Input schema / properties / description / titleRemoved value: -"Description" - added
Input schema / properties / document_title / descriptionAdded value: +"The document title (shown in browser tab)." - removed
Input schema / properties / document_title / titleRemoved value: -"Document Title" - removed
Input schema / properties / serviceRemoved value: -{ - "title": "service", - "type": "string" -} - added
Input schema / properties / title / descriptionAdded value: +"The title of the form." - removed
Input schema / properties / title / titleRemoved value: -"Title" - added
Input schema / properties / user_google_email / descriptionAdded value: +"The user's Google email address. Required." - removed
Input schema / properties / user_google_email / titleRemoved value: -"User Google Email" - changed
Input schema / requiredPrevious value: -[ - "service", - "user_google_email", - "title" -]New value: +[ + "user_google_email", + "title" +] - removed
Input schema / titleRemoved value: -"create_formArguments" - changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "result": { + "type": "string" + } + }, + "required": [ + "result" + ], + "type": "object", + "x-fastmcp-wrap-result": true +}
- Added
create_presentation - Added
create_reaction - Added
create_script_project - Changed
create_sheet13 fields changed- added
Input schema / additionalPropertiesAdded value: +false - added
Input schema / properties / insert_sheet_indexAdded value: +{ + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null +} - removed
Input schema / properties / serviceRemoved value: -{ - "title": "service", - "type": "string" -} - added
Input schema / properties / sheet_name / anyOfAdded value: +[ + { + "type": "string" + }, + { + "type": "null" + } +] - added
Input schema / properties / sheet_name / defaultAdded value: +null - removed
Input schema / properties / sheet_name / titleRemoved value: -"Sheet Name" - removed
Input schema / properties / sheet_name / typeRemoved value: -"string" - added
Input schema / properties / source_sheet_nameAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null +} - removed
Input schema / properties / spreadsheet_id / titleRemoved value: -"Spreadsheet Id" - removed
Input schema / properties / user_google_email / titleRemoved value: -"User Google Email" - changed
Input schema / requiredPrevious value: -[ - "service", - "user_google_email", - "spreadsheet_id", - "sheet_name" -]New value: +[ + "user_google_email", + "spreadsheet_id" +] - removed
Input schema / titleRemoved value: -"create_sheetArguments" - changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "result": { + "type": "string" + } + }, + "required": [ + "result" + ], + "type": "object", + "x-fastmcp-wrap-result": true +}
- Changed
create_spreadsheet11 fields changed- added
Input schema / additionalPropertiesAdded value: +false - removed
Input schema / properties / serviceRemoved value: -{ - "title": "service", - "type": "string" -} - added
Input schema / properties / sheet_names / descriptionAdded value: +"List of sheet names to create. If not provided, creates one sheet with default name." - removed
Input schema / properties / sheet_names / titleRemoved value: -"Sheet Names" - added
Input schema / properties / title / descriptionAdded value: +"The title of the new spreadsheet. Required." - removed
Input schema / properties / title / titleRemoved value: -"Title" - added
Input schema / properties / user_google_email / descriptionAdded value: +"The user's Google email address. Required." - removed
Input schema / properties / user_google_email / titleRemoved value: -"User Google Email" - changed
Input schema / requiredPrevious value: -[ - "service", - "user_google_email", - "title" -]New value: +[ + "user_google_email", + "title" +] - removed
Input schema / titleRemoved value: -"create_spreadsheetArguments" - changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "result": { + "type": "string" + } + }, + "required": [ + "result" + ], + "type": "object", + "x-fastmcp-wrap-result": true +}
- Added
create_table_with_data - Added
create_version - Added
debug_docs_runtime_info - Added
debug_table_structure - Removed
delete_event - Added
delete_script_project - Added
download_chat_attachment - Changed
draft_gmail_message21 fields changed- added
Input schema / additionalPropertiesAdded value: +false - added
Input schema / properties / attachmentsAdded value: +{ + "anyOf": [ + { + "items": { + "additionalProperties": true, + "type": "object" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Optional list of attachments. Each can have: 'url' (fetch from URL — works with MCP attachment URLs from get_drive_file_download_url / get_gmail_attachment_content), OR 'path' (file path, auto-encodes), OR 'content' (standard base64, not urlsafe) + 'filename'. Optional 'mime_type'. Optional 'content_id' (string) makes the attachment inline-rendered: it lands in a multipart/related part with `Content-ID: <content_id>` and `Content-Disposition: inline`, and the HTML body can reference it via `<img src=\"cid:<content_id>\">` (RFC 2392). Without `content_id` the attachment is a regular multipart/mixed attachment." +} - added
Input schema / properties / bccAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Optional BCC email address." +} - removed
Input schema / properties / body / titleRemoved value: -"Body" - added
Input schema / properties / body_formatAdded value: +{ + "default": "plain", + "description": "Email body format. Use 'plain' for plaintext or 'html' for HTML content.", + "enum": [ + "plain", + "html" + ], + "type": "string" +} - added
Input schema / properties / ccAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Optional CC email address." +} - added
Input schema / properties / from_emailAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Optional 'Send As' alias email address. Must be configured in Gmail settings (Settings > Accounts > Send mail as). If not provided, uses the authenticated user's email." +} - added
Input schema / properties / from_nameAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Optional sender display name (e.g., 'Peter Hartree'). If provided, the From header will be formatted as 'Name <email>'." +} - added
Input schema / properties / in_reply_toAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Optional RFC Message-ID of the message being replied to (e.g., '<message123@gmail.com>')." +} - added
Input schema / properties / include_signatureAdded value: +{ + "default": true, + "description": "Whether to append the Gmail signature from Settings > Signature when available. Defaults to true.", + "type": "boolean" +} - added
Input schema / properties / quote_originalAdded value: +{ + "default": false, + "description": "Whether to include the original message as a quoted reply. Requires thread_id. Defaults to false.", + "type": "boolean" +} - added
Input schema / properties / referencesAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Optional chain of Message-IDs for proper threading." +} - removed
Input schema / properties / serviceRemoved value: -{ - "title": "service", - "type": "string" -} - removed
Input schema / properties / subject / titleRemoved value: -"Subject" - added
Input schema / properties / thread_idAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Optional Gmail thread ID to reply within." +} - removed
Input schema / properties / to / titleRemoved value: -"To" - added
Input schema / properties / user_google_email / descriptionAdded value: +"The user's Google email address. Required for authentication." - removed
Input schema / properties / user_google_email / titleRemoved value: -"User Google Email" - changed
Input schema / requiredPrevious value: -[ - "service", - "user_google_email", - "subject", - "body" -]New value: +[ + "user_google_email", + "subject", + "body" +] - removed
Input schema / titleRemoved value: -"draft_gmail_messageArguments" - changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "result": { + "type": "string" + } + }, + "required": [ + "result" + ], + "type": "object", + "x-fastmcp-wrap-result": true +}
- Added
export_doc_to_pdf - Added
find_and_replace_doc - Added
format_sheet_range - Added
generate_trigger_code - Added
get_contact - Added
get_contact_group - Added
get_doc_as_markdown - Changed
get_doc_content11 fields changed- added
Input schema / additionalPropertiesAdded value: +false - removed
Input schema / properties / docs_serviceRemoved value: -{ - "title": "docs_service", - "type": "string" -} - added
Input schema / properties / document_id / descriptionAdded value: +"ID of the Google Doc (or full URL)" - removed
Input schema / properties / document_id / titleRemoved value: -"Document Id" - removed
Input schema / properties / drive_serviceRemoved value: -{ - "title": "drive_service", - "type": "string" -} - added
Input schema / properties / suggestions_view_modeAdded value: +{ + "default": "DEFAULT_FOR_CURRENT_ACCESS", + "description": "How to render suggestions in the returned content:\n- \"DEFAULT_FOR_CURRENT_ACCESS\": Default based on user's access level\n- \"SUGGESTIONS_INLINE\": Suggested changes appear inline in the document\n- \"PREVIEW_SUGGESTIONS_ACCEPTED\": Preview as if all suggestions were accepted\n- \"PREVIEW_WITHOUT_SUGGESTIONS\": Preview as if all suggestions were rejected", + "type": "string" +} - added
Input schema / properties / user_google_email / descriptionAdded value: +"User's Google email address" - removed
Input schema / properties / user_google_email / titleRemoved value: -"User Google Email" - changed
Input schema / requiredPrevious value: -[ - "drive_service", - "docs_service", - "user_google_email", - "document_id" -]New value: +[ + "user_google_email", + "document_id" +] - removed
Input schema / titleRemoved value: -"get_doc_contentArguments" - changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "result": { + "type": "string" + } + }, + "required": [ + "result" + ], + "type": "object", + "x-fastmcp-wrap-result": true +}
- Changed
get_drive_file_content9 fields changed- added
Input schema / additionalPropertiesAdded value: +false - added
Input schema / properties / file_id / descriptionAdded value: +"Drive file ID." - removed
Input schema / properties / file_id / titleRemoved value: -"File Id" - removed
Input schema / properties / serviceRemoved value: -{ - "title": "service", - "type": "string" -} - added
Input schema / properties / user_google_email / descriptionAdded value: +"The user’s Google email address." - removed
Input schema / properties / user_google_email / titleRemoved value: -"User Google Email" - changed
Input schema / requiredPrevious value: -[ - "service", - "user_google_email", - "file_id" -]New value: +[ + "user_google_email", + "file_id" +] - removed
Input schema / titleRemoved value: -"get_drive_file_contentArguments" - changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "result": { + "type": "string" + } + }, + "required": [ + "result" + ], + "type": "object", + "x-fastmcp-wrap-result": true +}
- Added
get_drive_file_download_url - Added
get_drive_file_permissions - Added
get_drive_shareable_link - Changed
get_events19 fields changed- added
Input schema / additionalPropertiesAdded value: +false - added
Input schema / properties / calendar_id / descriptionAdded value: +"The ID of the calendar to query. Use 'primary' for the user's primary calendar. Defaults to 'primary'. Calendar IDs can be obtained using `list_calendars`." - removed
Input schema / properties / calendar_id / titleRemoved value: -"Calendar Id" - added
Input schema / properties / detailedAdded value: +{ + "default": false, + "description": "Whether to return detailed event information including description, location, colour (colorId), attendees, and attendee details (response status, organizer, optional flags). Recurring instances also report the parent series ID needed to edit the whole series, and events that are not ordinary confirmed meetings report their event type (outOfOffice, workingLocation, focusTime) and status. Defaults to False.", + "type": "boolean" +} - added
Input schema / properties / event_idAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "The ID of a specific event to retrieve. If provided, retrieves only this event and ignores time filtering parameters." +} - added
Input schema / properties / include_attachmentsAdded value: +{ + "default": false, + "description": "Whether to include attachment information in detailed event output. When True, shows attachment details (fileId, fileUrl, mimeType, title) for events that have attachments. Only applies when detailed=True. Set this to True when you need to view or access files that have been attached to calendar events, such as meeting documents, presentations, or other shared files. Defaults to False.", + "type": "boolean" +} - added
Input schema / properties / max_results / descriptionAdded value: +"The maximum number of events to return. Defaults to 25. Ignored if event_id is provided." - removed
Input schema / properties / max_results / titleRemoved value: -"Max Results" - added
Input schema / properties / queryAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "A keyword to search for within event fields (summary, description, location). Ignored if event_id is provided." +} - removed
Input schema / properties / serviceRemoved value: -{ - "title": "service", - "type": "string" -} - added
Input schema / properties / time_max / descriptionAdded value: +"The end of the time range (exclusive) in RFC3339 format. If omitted, events starting from `time_min` onwards are considered (up to `max_results`). Ignored if event_id is provided." - removed
Input schema / properties / time_max / titleRemoved value: -"Time Max" - added
Input schema / properties / time_min / descriptionAdded value: +"The start of the time range (inclusive) in RFC3339 format (e.g., '2024-05-12T10:00:00Z' or '2024-05-12'). If omitted, defaults to the current time. Ignored if event_id is provided." - removed
Input schema / properties / time_min / titleRemoved value: -"Time Min" - added
Input schema / properties / user_google_email / descriptionAdded value: +"The user's Google email address. Required." - removed
Input schema / properties / user_google_email / titleRemoved value: -"User Google Email" - changed
Input schema / requiredPrevious value: -[ - "service", - "user_google_email" -]New value: +[ + "user_google_email" +] - removed
Input schema / titleRemoved value: -"get_eventsArguments" - changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "result": { + "type": "string" + } + }, + "required": [ + "result" + ], + "type": "object", + "x-fastmcp-wrap-result": true +}
- Changed
get_form9 fields changed- added
Input schema / additionalPropertiesAdded value: +false - added
Input schema / properties / form_id / descriptionAdded value: +"The ID of the form to retrieve." - removed
Input schema / properties / form_id / titleRemoved value: -"Form Id" - removed
Input schema / properties / serviceRemoved value: -{ - "title": "service", - "type": "string" -} - added
Input schema / properties / user_google_email / descriptionAdded value: +"The user's Google email address. Required." - removed
Input schema / properties / user_google_email / titleRemoved value: -"User Google Email" - changed
Input schema / requiredPrevious value: -[ - "service", - "user_google_email", - "form_id" -]New value: +[ + "user_google_email", + "form_id" +] - removed
Input schema / titleRemoved value: -"get_formArguments" - changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "result": { + "type": "string" + } + }, + "required": [ + "result" + ], + "type": "object", + "x-fastmcp-wrap-result": true +}
- Changed
get_form_response11 fields changed- added
Input schema / additionalPropertiesAdded value: +false - added
Input schema / properties / form_id / descriptionAdded value: +"The ID of the form." - removed
Input schema / properties / form_id / titleRemoved value: -"Form Id" - added
Input schema / properties / response_id / descriptionAdded value: +"The ID of the response to retrieve." - removed
Input schema / properties / response_id / titleRemoved value: -"Response Id" - removed
Input schema / properties / serviceRemoved value: -{ - "title": "service", - "type": "string" -} - added
Input schema / properties / user_google_email / descriptionAdded value: +"The user's Google email address. Required." - removed
Input schema / properties / user_google_email / titleRemoved value: -"User Google Email" - changed
Input schema / requiredPrevious value: -[ - "service", - "user_google_email", - "form_id", - "response_id" -]New value: +[ + "user_google_email", + "form_id", + "response_id" +] - removed
Input schema / titleRemoved value: -"get_form_responseArguments" - changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "result": { + "type": "string" + } + }, + "required": [ + "result" + ], + "type": "object", + "x-fastmcp-wrap-result": true +}
- Added
get_gmail_attachment_content - Changed
get_gmail_message_content11 fields changed- added
Input schema / additionalPropertiesAdded value: +false - added
Input schema / properties / body_formatAdded value: +{ + "default": "text", + "description": "Body output format. 'text' (default) returns plaintext (HTML converted to text as fallback). 'html' returns the raw HTML body as-is without conversion. 'raw' fetches the full raw MIME message and returns the base64url-decoded content.", + "enum": [ + "text", + "html", + "raw" + ], + "type": "string" +} - added
Input schema / properties / fullAdded value: +{ + "default": false, + "description": "When True, return the COMPLETE untruncated message: saved to local storage and referenced by download URL/file path instead of the body text, or inlined in the response when the server has no file storage (stateless mode). Use for messages large enough to hit the truncation limit, or when byte-exact fidelity is needed (pair with body_format='raw' for a .eml export).", + "type": "boolean" +} - added
Input schema / properties / message_id / descriptionAdded value: +"The unique ID of the Gmail message to retrieve." - removed
Input schema / properties / message_id / titleRemoved value: -"Message Id" - removed
Input schema / properties / serviceRemoved value: -{ - "title": "service", - "type": "string" -} - added
Input schema / properties / user_google_email / descriptionAdded value: +"The user's Google email address. Required." - removed
Input schema / properties / user_google_email / titleRemoved value: -"User Google Email" - changed
Input schema / requiredPrevious value: -[ - "service", - "message_id", - "user_google_email" -]New value: +[ + "message_id", + "user_google_email" +] - removed
Input schema / titleRemoved value: -"get_gmail_message_contentArguments" - changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "result": { + "type": "string" + } + }, + "required": [ + "result" + ], + "type": "object", + "x-fastmcp-wrap-result": true +}
- Changed
get_gmail_messages_content_batch12 fields changed- added
Input schema / additionalPropertiesAdded value: +false - added
Input schema / properties / body_formatAdded value: +{ + "default": "text", + "description": "Body output format (only applies when format='full'). 'text' (default) returns plaintext (HTML converted to text as fallback). 'html' returns the raw HTML body as-is without conversion. 'raw' fetches the full raw MIME message and returns the base64url-decoded content.", + "enum": [ + "text", + "html", + "raw" + ], + "type": "string" +} - added
Input schema / properties / format / descriptionAdded value: +"Message format. \"full\" includes body, \"metadata\" only headers." - removed
Input schema / properties / format / titleRemoved value: -"Format" - added
Input schema / properties / message_ids / descriptionAdded value: +"List of Gmail message IDs to retrieve (max 25 per batch)." - removed
Input schema / properties / message_ids / titleRemoved value: -"Message Ids" - removed
Input schema / properties / serviceRemoved value: -{ - "title": "service", - "type": "string" -} - added
Input schema / properties / user_google_email / descriptionAdded value: +"The user's Google email address. Required." - removed
Input schema / properties / user_google_email / titleRemoved value: -"User Google Email" - changed
Input schema / requiredPrevious value: -[ - "service", - "message_ids", - "user_google_email" -]New value: +[ + "message_ids", + "user_google_email" +] - removed
Input schema / titleRemoved value: -"get_gmail_messages_content_batchArguments" - changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "result": { + "type": "string" + } + }, + "required": [ + "result" + ], + "type": "object", + "x-fastmcp-wrap-result": true +}
- Changed
get_gmail_thread_content11 fields changed- added
Input schema / additionalPropertiesAdded value: +false - added
Input schema / properties / body_formatAdded value: +{ + "default": "text", + "description": "Body output format. 'text' (default) returns plaintext (HTML converted to text as fallback). 'html' returns the raw HTML body as-is without conversion. 'raw' fetches each message's full raw MIME content and returns the base64url-decoded body.", + "enum": [ + "text", + "html", + "raw" + ], + "type": "string" +} - added
Input schema / properties / include_analysisAdded value: +{ + "default": false, + "description": "When True, the return value is a dict with both the formatted thread content AND structured ownership analysis (last sender, ball-in-court verdict, per-sender message counts, participants). Defaults to False, in which case the existing string return shape is preserved.", + "type": "boolean" +} - removed
Input schema / properties / serviceRemoved value: -{ - "title": "service", - "type": "string" -} - added
Input schema / properties / thread_id / descriptionAdded value: +"The unique ID of the Gmail thread to retrieve." - removed
Input schema / properties / thread_id / titleRemoved value: -"Thread Id" - added
Input schema / properties / user_google_email / descriptionAdded value: +"The user's Google email address. Required." - removed
Input schema / properties / user_google_email / titleRemoved value: -"User Google Email" - changed
Input schema / requiredPrevious value: -[ - "service", - "thread_id", - "user_google_email" -]New value: +[ + "thread_id", + "user_google_email" +] - removed
Input schema / titleRemoved value: -"get_gmail_thread_contentArguments" - changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "result": { + "anyOf": [ + { + "type": "string" + }, + { + "additionalProperties": true, + "type": "object" + } + ] + } + }, + "required": [ + "result" + ], + "type": "object", + "x-fastmcp-wrap-result": true +}
- Added
get_gmail_threads_content_batch - Changed
get_messages10 fields changed- added
Input schema / additionalPropertiesAdded value: +false - added
Input schema / properties / message_filterAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Optional filter string using the Chat API filter syntax.\n Supports createTime and thread.name.\n Examples:\n 'createTime > \"2026-03-18T00:00:00-03:00\"'\n 'createTime > \"2026-03-18T00:00:00-03:00\" AND createTime < \"2026-03-19T00:00:00-03:00\"'\n 'thread.name = spaces/X/threads/Y'" +} - removed
Input schema / properties / order_by / titleRemoved value: -"Order By" - removed
Input schema / properties / page_size / titleRemoved value: -"Page Size" - removed
Input schema / properties / serviceRemoved value: -{ - "title": "service", - "type": "string" -} - removed
Input schema / properties / space_id / titleRemoved value: -"Space Id" - removed
Input schema / properties / user_google_email / titleRemoved value: -"User Google Email" - changed
Input schema / requiredPrevious value: -[ - "service", - "user_google_email", - "space_id" -]New value: +[ + "user_google_email", + "space_id" +] - removed
Input schema / titleRemoved value: -"get_messagesArguments" - changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "result": { + "type": "string" + } + }, + "required": [ + "result" + ], + "type": "object", + "x-fastmcp-wrap-result": true +}
- Added
get_page - Added
get_page_thumbnail - Added
get_presentation - Added
get_script_content - Added
get_script_metrics - Added
get_script_project - Added
get_search_engine_info - Changed
get_spreadsheet_info9 fields changed- added
Input schema / additionalPropertiesAdded value: +false - removed
Input schema / properties / serviceRemoved value: -{ - "title": "service", - "type": "string" -} - added
Input schema / properties / spreadsheet_id / descriptionAdded value: +"The ID of the spreadsheet to get info for. Required." - removed
Input schema / properties / spreadsheet_id / titleRemoved value: -"Spreadsheet Id" - added
Input schema / properties / user_google_email / descriptionAdded value: +"The user's Google email address. Required." - removed
Input schema / properties / user_google_email / titleRemoved value: -"User Google Email" - changed
Input schema / requiredPrevious value: -[ - "service", - "user_google_email", - "spreadsheet_id" -]New value: +[ + "user_google_email", + "spreadsheet_id" +] - removed
Input schema / titleRemoved value: -"get_spreadsheet_infoArguments" - changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "result": { + "type": "string" + } + }, + "required": [ + "result" + ], + "type": "object", + "x-fastmcp-wrap-result": true +}
- Added
get_task - Added
get_task_list - Added
get_version - Added
import_to_google_doc - Added
import_to_google_sheets - Added
import_to_google_slides - Added
insert_doc_elements - Added
insert_doc_image - Added
inspect_doc_structure - Changed
list_calendars7 fields changed- added
Input schema / additionalPropertiesAdded value: +false - removed
Input schema / properties / serviceRemoved value: -{ - "title": "service", - "type": "string" -} - added
Input schema / properties / user_google_email / descriptionAdded value: +"The user's Google email address. Required." - removed
Input schema / properties / user_google_email / titleRemoved value: -"User Google Email" - changed
Input schema / requiredPrevious value: -[ - "service", - "user_google_email" -]New value: +[ + "user_google_email" +] - removed
Input schema / titleRemoved value: -"list_calendarsArguments" - changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "result": { + "type": "string" + } + }, + "required": [ + "result" + ], + "type": "object", + "x-fastmcp-wrap-result": true +}
- Added
list_contact_groups - Added
list_contacts - Added
list_deployments - Changed
list_docs_in_folder8 fields changed- added
Input schema / additionalPropertiesAdded value: +false - removed
Input schema / properties / folder_id / titleRemoved value: -"Folder Id" - removed
Input schema / properties / page_size / titleRemoved value: -"Page Size" - removed
Input schema / properties / serviceRemoved value: -{ - "title": "service", - "type": "string" -} - removed
Input schema / properties / user_google_email / titleRemoved value: -"User Google Email" - changed
Input schema / requiredPrevious value: -[ - "service", - "user_google_email" -]New value: +[ + "user_google_email" +] - removed
Input schema / titleRemoved value: -"list_docs_in_folderArguments" - changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "result": { + "type": "string" + } + }, + "required": [ + "result" + ], + "type": "object", + "x-fastmcp-wrap-result": true +}
- Added
list_document_comments - Added
list_drive_items - Changed
list_form_responses13 fields changed- added
Input schema / additionalPropertiesAdded value: +false - added
Input schema / properties / form_id / descriptionAdded value: +"The ID of the form." - removed
Input schema / properties / form_id / titleRemoved value: -"Form Id" - added
Input schema / properties / page_size / descriptionAdded value: +"Maximum number of responses to return. Defaults to 10." - removed
Input schema / properties / page_size / titleRemoved value: -"Page Size" - added
Input schema / properties / page_token / descriptionAdded value: +"Token for retrieving next page of results." - removed
Input schema / properties / page_token / titleRemoved value: -"Page Token" - removed
Input schema / properties / serviceRemoved value: -{ - "title": "service", - "type": "string" -} - added
Input schema / properties / user_google_email / descriptionAdded value: +"The user's Google email address. Required." - removed
Input schema / properties / user_google_email / titleRemoved value: -"User Google Email" - changed
Input schema / requiredPrevious value: -[ - "service", - "user_google_email", - "form_id" -]New value: +[ + "user_google_email", + "form_id" +] - removed
Input schema / titleRemoved value: -"list_form_responsesArguments" - changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "result": { + "type": "string" + } + }, + "required": [ + "result" + ], + "type": "object", + "x-fastmcp-wrap-result": true +}
- Added
list_gmail_filters - Changed
list_gmail_labels7 fields changed- added
Input schema / additionalPropertiesAdded value: +false - removed
Input schema / properties / serviceRemoved value: -{ - "title": "service", - "type": "string" -} - added
Input schema / properties / user_google_email / descriptionAdded value: +"The user's Google email address. Required." - removed
Input schema / properties / user_google_email / titleRemoved value: -"User Google Email" - changed
Input schema / requiredPrevious value: -[ - "service", - "user_google_email" -]New value: +[ + "user_google_email" +] - removed
Input schema / titleRemoved value: -"list_gmail_labelsArguments" - changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "result": { + "type": "string" + } + }, + "required": [ + "result" + ], + "type": "object", + "x-fastmcp-wrap-result": true +}
- Added
list_presentation_comments - Added
list_script_processes - Added
list_script_projects - Added
list_sheet_tables - Changed
list_spaces8 fields changed- added
Input schema / additionalPropertiesAdded value: +false - removed
Input schema / properties / page_size / titleRemoved value: -"Page Size" - removed
Input schema / properties / serviceRemoved value: -{ - "title": "service", - "type": "string" -} - removed
Input schema / properties / space_type / titleRemoved value: -"Space Type" - removed
Input schema / properties / user_google_email / titleRemoved value: -"User Google Email" - changed
Input schema / requiredPrevious value: -[ - "service", - "user_google_email" -]New value: +[ + "user_google_email" +] - removed
Input schema / titleRemoved value: -"list_spacesArguments" - changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "result": { + "type": "string" + } + }, + "required": [ + "result" + ], + "type": "object", + "x-fastmcp-wrap-result": true +}
- Added
list_spreadsheet_comments - Changed
list_spreadsheets9 fields changed- added
Input schema / additionalPropertiesAdded value: +false - added
Input schema / properties / max_results / descriptionAdded value: +"Maximum number of spreadsheets to return. Defaults to 25." - removed
Input schema / properties / max_results / titleRemoved value: -"Max Results" - removed
Input schema / properties / serviceRemoved value: -{ - "title": "service", - "type": "string" -} - added
Input schema / properties / user_google_email / descriptionAdded value: +"The user's Google email address. Required." - removed
Input schema / properties / user_google_email / titleRemoved value: -"User Google Email" - changed
Input schema / requiredPrevious value: -[ - "service", - "user_google_email" -]New value: +[ + "user_google_email" +] - removed
Input schema / titleRemoved value: -"list_spreadsheetsArguments" - changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "result": { + "type": "string" + } + }, + "required": [ + "result" + ], + "type": "object", + "x-fastmcp-wrap-result": true +}
- Added
list_task_lists - Added
list_tasks - Added
list_versions - Added
manage_conditional_formatting - Added
manage_contact - Added
manage_contact_group - Added
manage_contacts_batch - Added
manage_deployment - Added
manage_doc_tab - Added
manage_document_comment - Added
manage_drive_access - Added
manage_event - Added
manage_focus_time - Added
manage_gmail_filter - Changed
manage_gmail_label17 fields changed- added
Input schema / additionalPropertiesAdded value: +false - added
Input schema / properties / action / descriptionAdded value: +"Action to perform on the label." - removed
Input schema / properties / action / titleRemoved value: -"Action" - added
Input schema / properties / label_id / descriptionAdded value: +"Label ID. Required for update and delete operations." - removed
Input schema / properties / label_id / titleRemoved value: -"Label Id" - added
Input schema / properties / label_list_visibility / descriptionAdded value: +"Whether the label is shown in the label list." - removed
Input schema / properties / label_list_visibility / titleRemoved value: -"Label List Visibility" - added
Input schema / properties / message_list_visibility / descriptionAdded value: +"Whether the label is shown in the message list." - removed
Input schema / properties / message_list_visibility / titleRemoved value: -"Message List Visibility" - added
Input schema / properties / name / descriptionAdded value: +"Label name. Required for create, optional for update." - removed
Input schema / properties / name / titleRemoved value: -"Name" - removed
Input schema / properties / serviceRemoved value: -{ - "title": "service", - "type": "string" -} - added
Input schema / properties / user_google_email / descriptionAdded value: +"The user's Google email address. Required." - removed
Input schema / properties / user_google_email / titleRemoved value: -"User Google Email" - changed
Input schema / requiredPrevious value: -[ - "service", - "user_google_email", - "action" -]New value: +[ + "user_google_email", + "action" +] - removed
Input schema / titleRemoved value: -"manage_gmail_labelArguments" - changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "result": { + "type": "string" + } + }, + "required": [ + "result" + ], + "type": "object", + "x-fastmcp-wrap-result": true +}
- Added
manage_out_of_office - Added
manage_presentation_comment - Added
manage_spreadsheet_comment - Added
manage_task - Added
manage_task_list - Added
modify_doc_text - Removed
modify_event - Changed
modify_gmail_message_labels17 fields changed- added
Input schema / additionalPropertiesAdded value: +false - added
Input schema / properties / add_label_ids / descriptionAdded value: +"List of label IDs to add to the message." - added
Input schema / properties / add_label_ids / itemsAdded value: +{ + "type": "string" +} - removed
Input schema / properties / add_label_ids / titleRemoved value: -"Add Label Ids" - added
Input schema / properties / add_label_ids / typeAdded value: +"array" - added
Input schema / properties / message_id / descriptionAdded value: +"The ID of the message to modify." - removed
Input schema / properties / message_id / titleRemoved value: -"Message Id" - added
Input schema / properties / remove_label_ids / descriptionAdded value: +"List of label IDs to remove from the message." - added
Input schema / properties / remove_label_ids / itemsAdded value: +{ + "type": "string" +} - removed
Input schema / properties / remove_label_ids / titleRemoved value: -"Remove Label Ids" - added
Input schema / properties / remove_label_ids / typeAdded value: +"array" - removed
Input schema / properties / serviceRemoved value: -{ - "title": "service", - "type": "string" -} - added
Input schema / properties / user_google_email / descriptionAdded value: +"The user's Google email address. Required." - removed
Input schema / properties / user_google_email / titleRemoved value: -"User Google Email" - changed
Input schema / requiredPrevious value: -[ - "service", - "user_google_email", - "message_id" -]New value: +[ + "user_google_email", + "message_id" +] - removed
Input schema / titleRemoved value: -"modify_gmail_message_labelsArguments" - changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "result": { + "type": "string" + } + }, + "required": [ + "result" + ], + "type": "object", + "x-fastmcp-wrap-result": true +}
- Changed
modify_sheet_values18 fields changed- added
Input schema / additionalPropertiesAdded value: +false - added
Input schema / properties / clear_values / descriptionAdded value: +"If True, clears the range instead of writing values. Defaults to False." - removed
Input schema / properties / clear_values / titleRemoved value: -"Clear Values" - added
Input schema / properties / range_name / descriptionAdded value: +"The range to modify (e.g., \"Sheet1!A1:D10\", \"A1:D10\"). Required." - removed
Input schema / properties / range_name / titleRemoved value: -"Range Name" - removed
Input schema / properties / serviceRemoved value: -{ - "title": "service", - "type": "string" -} - added
Input schema / properties / spreadsheet_id / descriptionAdded value: +"The ID of the spreadsheet. Required." - removed
Input schema / properties / spreadsheet_id / titleRemoved value: -"Spreadsheet Id" - added
Input schema / properties / user_google_email / descriptionAdded value: +"The user's Google email address. Required." - removed
Input schema / properties / user_google_email / titleRemoved value: -"User Google Email" - added
Input schema / properties / value_input_option / descriptionAdded value: +"How to interpret input values (\"RAW\" or \"USER_ENTERED\"). Defaults to \"USER_ENTERED\"." - removed
Input schema / properties / value_input_option / titleRemoved value: -"Value Input Option" - changed
Input schema / properties / values / anyOfPrevious value: -[ - { - "items": { - "items": { - "type": "string" - }, - "type": "array" - }, - "type": "array" - }, - { - "type": "null" - } -]New value: +[ + { + "type": "string" + }, + { + "items": { + "items": { + "type": "string" + }, + "type": "array" + }, + "type": "array" + }, + { + "type": "null" + } +] - added
Input schema / properties / values / descriptionAdded value: +"2D array of values to write/update. Can be a JSON string or Python list. Required unless clear_values=True." - removed
Input schema / properties / values / titleRemoved value: -"Values" - changed
Input schema / requiredPrevious value: -[ - "service", - "user_google_email", - "spreadsheet_id", - "range_name" -]New value: +[ + "user_google_email", + "spreadsheet_id", + "range_name" +] - removed
Input schema / titleRemoved value: -"modify_sheet_valuesArguments" - changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "result": { + "type": "string" + } + }, + "required": [ + "result" + ], + "type": "object", + "x-fastmcp-wrap-result": true +}
- Added
move_sheet_rows - Added
query_freebusy - Changed
read_sheet_values14 fields changed- added
Input schema / additionalPropertiesAdded value: +false - added
Input schema / properties / include_formulasAdded value: +{ + "default": false, + "description": "If True, also fetch raw formula strings for cells that\ncontain formulas. Useful for identifying cross-sheet references before writing\nback to a range. Defaults to False to avoid an extra API request.", + "type": "boolean" +} - added
Input schema / properties / include_hyperlinksAdded value: +{ + "default": false, + "description": "If True, also fetch hyperlink metadata for the range.\nDefaults to False to avoid expensive includeGridData requests.", + "type": "boolean" +} - added
Input schema / properties / include_notesAdded value: +{ + "default": false, + "description": "If True, also fetch cell notes for the range.\nDefaults to False to avoid expensive includeGridData requests.", + "type": "boolean" +} - added
Input schema / properties / range_name / descriptionAdded value: +"The range to read (e.g., \"Sheet1!A1:D10\", \"A1:D10\").\nDefaults to \"A1:Z1000\". Open-ended or oversized ranges are clamped to\nat most 1000 rows before the Sheets API request to bound memory use." - removed
Input schema / properties / range_name / titleRemoved value: -"Range Name" - removed
Input schema / properties / serviceRemoved value: -{ - "title": "service", - "type": "string" -} - added
Input schema / properties / spreadsheet_id / descriptionAdded value: +"The ID of the spreadsheet. Required." - removed
Input schema / properties / spreadsheet_id / titleRemoved value: -"Spreadsheet Id" - added
Input schema / properties / user_google_email / descriptionAdded value: +"The user's Google email address. Required." - removed
Input schema / properties / user_google_email / titleRemoved value: -"User Google Email" - changed
Input schema / requiredPrevious value: -[ - "service", - "user_google_email", - "spreadsheet_id" -]New value: +[ + "user_google_email", + "spreadsheet_id" +] - removed
Input schema / titleRemoved value: -"read_sheet_valuesArguments" - changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "result": { + "type": "string" + } + }, + "required": [ + "result" + ], + "type": "object", + "x-fastmcp-wrap-result": true +}
- Added
resize_sheet_dimensions - Added
run_script_function - Added
search_contacts - Added
search_custom - Changed
search_docs8 fields changed- added
Input schema / additionalPropertiesAdded value: +false - removed
Input schema / properties / page_size / titleRemoved value: -"Page Size" - removed
Input schema / properties / query / titleRemoved value: -"Query" - removed
Input schema / properties / serviceRemoved value: -{ - "title": "service", - "type": "string" -} - removed
Input schema / properties / user_google_email / titleRemoved value: -"User Google Email" - changed
Input schema / requiredPrevious value: -[ - "service", - "user_google_email", - "query" -]New value: +[ + "user_google_email", + "query" +] - removed
Input schema / titleRemoved value: -"search_docsArguments" - changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "result": { + "type": "string" + } + }, + "required": [ + "result" + ], + "type": "object", + "x-fastmcp-wrap-result": true +}
- Changed
search_drive_files22 fields changed- added
Input schema / additionalPropertiesAdded value: +false - added
Input schema / properties / corpora / descriptionAdded value: +"Bodies of items to query (e.g., 'user', 'domain', 'drive', 'allDrives').\n If 'drive_id' is specified and 'corpora' is None, it defaults to 'drive'.\n Otherwise, Drive API default behavior applies. Prefer 'user' or 'drive' over 'allDrives' for efficiency." - removed
Input schema / properties / corpora / titleRemoved value: -"Corpora" - added
Input schema / properties / detailedAdded value: +{ + "default": true, + "description": "Whether to include size, modified time, and link in results. Defaults to True.", + "type": "boolean" +} - added
Input schema / properties / drive_id / descriptionAdded value: +"ID of the shared drive to search. If None, behavior depends on `corpora` and `include_items_from_all_drives`." - removed
Input schema / properties / drive_id / titleRemoved value: -"Drive Id" - added
Input schema / properties / file_typeAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Restrict results to a specific file type. Accepts a friendly\n name ('folder', 'document'/'doc', 'spreadsheet'/'sheet',\n 'presentation'/'slides', 'form', 'drawing', 'pdf', 'shortcut',\n 'script', 'site', 'jam'/'jamboard') or any raw MIME type\n string (e.g. 'application/pdf'). Defaults to None (all types)." +} - added
Input schema / properties / include_items_from_all_drives / descriptionAdded value: +"Whether shared drive items should be included in results. Defaults to True. This is effective when not specifying a `drive_id`." - removed
Input schema / properties / include_items_from_all_drives / titleRemoved value: -"Include Items From All Drives" - added
Input schema / properties / include_trashedAdded value: +{ + "default": false, + "description": "Whether to include files in the trash. Defaults to False, matching\n the Drive web UI and `list_drive_items`. Ignored when `query` already\n contains its own `trashed` clause (`=` or `!=`), which always wins.", + "type": "boolean" +} - added
Input schema / properties / order_byAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Sort order. Comma-separated list of sort keys with optional 'desc' modifier.\n Valid keys: 'createdTime', 'folder', 'modifiedByMeTime', 'modifiedTime',\n 'name', 'name_natural', 'quotaBytesUsed', 'recency', 'sharedWithMeTime',\n 'starred', 'viewedByMeTime'. Example: 'modifiedTime desc' or 'folder,modifiedTime desc,name'.\n Defaults to None (Drive API default ordering)." +} - added
Input schema / properties / page_size / descriptionAdded value: +"The maximum number of files to return. Defaults to 10." - removed
Input schema / properties / page_size / titleRemoved value: -"Page Size" - added
Input schema / properties / page_tokenAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Page token from a previous response's nextPageToken to retrieve the next page of results." +} - added
Input schema / properties / query / descriptionAdded value: +"The search query string. Supports Google Drive search operators.\n NOTE: Owner-based queries ('user@example.com' in owners) DO NOT WORK in Shared Drives\n because files are owned by the shared drive itself, not individual users.\n For recent files by a specific user in Shared Drives, search by modifiedTime\n and use order_by='modifiedTime desc' instead." - removed
Input schema / properties / query / titleRemoved value: -"Query" - removed
Input schema / properties / serviceRemoved value: -{ - "title": "service", - "type": "string" -} - added
Input schema / properties / user_google_email / descriptionAdded value: +"The user's Google email address. Required." - removed
Input schema / properties / user_google_email / titleRemoved value: -"User Google Email" - changed
Input schema / requiredPrevious value: -[ - "service", - "user_google_email", - "query" -]New value: +[ + "user_google_email", + "query" +] - removed
Input schema / titleRemoved value: -"search_drive_filesArguments" - changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "result": { + "type": "string" + } + }, + "required": [ + "result" + ], + "type": "object", + "x-fastmcp-wrap-result": true +}
- Changed
search_gmail_messages12 fields changed- added
Input schema / additionalPropertiesAdded value: +false - added
Input schema / properties / page_size / descriptionAdded value: +"The maximum number of messages to return. Defaults to 10." - removed
Input schema / properties / page_size / titleRemoved value: -"Page Size" - added
Input schema / properties / page_tokenAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Token for retrieving the next page of results. Use the next_page_token from a previous response." +} - added
Input schema / properties / query / descriptionAdded value: +"The search query. Supports standard Gmail search operators." - removed
Input schema / properties / query / titleRemoved value: -"Query" - removed
Input schema / properties / serviceRemoved value: -{ - "title": "service", - "type": "string" -} - added
Input schema / properties / user_google_email / descriptionAdded value: +"The user's Google email address. Required." - removed
Input schema / properties / user_google_email / titleRemoved value: -"User Google Email" - changed
Input schema / requiredPrevious value: -[ - "service", - "query", - "user_google_email" -]New value: +[ + "query", + "user_google_email" +] - removed
Input schema / titleRemoved value: -"search_gmail_messagesArguments" - changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "result": { + "type": "string" + } + }, + "required": [ + "result" + ], + "type": "object", + "x-fastmcp-wrap-result": true +}
- Changed
search_messages17 fields changed- added
Input schema / additionalPropertiesAdded value: +false - added
Input schema / properties / max_spacesAdded value: +{ + "default": 10, + "description": "Maximum number of spaces to search when space_id is not provided (default 10).", + "type": "integer" +} - added
Input schema / properties / page_size / descriptionAdded value: +"Maximum number of messages to return per space." - removed
Input schema / properties / page_size / titleRemoved value: -"Page Size" - added
Input schema / properties / query / anyOfAdded value: +[ + { + "type": "string" + }, + { + "type": "null" + } +] - added
Input schema / properties / query / defaultAdded value: +null - added
Input schema / properties / query / descriptionAdded value: +"Optional text to search for. If omitted, only time_filter is applied." - removed
Input schema / properties / query / titleRemoved value: -"Query" - removed
Input schema / properties / query / typeRemoved value: -"string" - removed
Input schema / properties / serviceRemoved value: -{ - "title": "service", - "type": "string" -} - added
Input schema / properties / space_id / descriptionAdded value: +"Optional space to restrict the search to." - removed
Input schema / properties / space_id / titleRemoved value: -"Space Id" - added
Input schema / properties / time_filterAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Optional filter using Chat API createTime syntax.\n Examples:\n 'createTime > \"2026-03-18T00:00:00-03:00\"'\n 'createTime > \"2026-03-18T00:00:00-03:00\" AND createTime < \"2026-03-19T00:00:00-03:00\"'" +} - removed
Input schema / properties / user_google_email / titleRemoved value: -"User Google Email" - changed
Input schema / requiredPrevious value: -[ - "service", - "user_google_email", - "query" -]New value: +[ + "user_google_email" +] - removed
Input schema / titleRemoved value: -"search_messagesArguments" - changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "result": { + "type": "string" + } + }, + "required": [ + "result" + ], + "type": "object", + "x-fastmcp-wrap-result": true +}
- Changed
send_gmail_message30 fields changed- added
Input schema / additionalPropertiesAdded value: +false - added
Input schema / properties / attachmentsAdded value: +{ + "anyOf": [ + { + "items": { + "additionalProperties": true, + "type": "object" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Optional list of attachments. Each can have: \"url\" (fetch from URL — works with MCP attachment URLs from get_drive_file_download_url / get_gmail_attachment_content), OR \"path\" (file path, auto-encodes), OR \"content\" (standard base64, not urlsafe) + \"filename\". Optional \"mime_type\". Optional \"content_id\" (string) makes the attachment inline-rendered: it lands in a multipart/related part with `Content-ID: <content_id>` and `Content-Disposition: inline`, and the HTML body can reference it via `<img src=\"cid:<content_id>\">` (RFC 2392). Without `content_id` the attachment is a regular multipart/mixed attachment. Example: [{\"url\": \"https://host/attachments/abc-123\", \"filename\": \"report.pdf\"}]" +} - added
Input schema / properties / bccAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Optional BCC email address." +} - added
Input schema / properties / body / anyOfAdded value: +[ + { + "type": "string" + }, + { + "type": "null" + } +] - added
Input schema / properties / body / defaultAdded value: +null - changed
Input schema / properties / body / descriptionPrevious value: -"Email body (plain text)."New value: +"Email body content (plain text or HTML). Required when sending. When forwarding, this is an optional note prepended above the quoted original." - removed
Input schema / properties / body / titleRemoved value: -"Body" - removed
Input schema / properties / body / typeRemoved value: -"string" - added
Input schema / properties / body_formatAdded value: +{ + "default": "plain", + "description": "Format of the body content (and of the prepended note when forwarding). Use 'plain' for plaintext or 'html' for HTML content.", + "enum": [ + "plain", + "html" + ], + "type": "string" +} - added
Input schema / properties / ccAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Optional CC email address." +} - added
Input schema / properties / forward_message_idAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Set to a Gmail message ID to forward that message instead of composing a new one. The original subject, body, and (optionally) attachments are carried over; 'body' becomes an optional note prepended to the forward." +} - added
Input schema / properties / from_emailAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Optional 'Send As' alias email address. Must be configured in Gmail settings (Settings > Accounts > Send mail as). If not provided, uses the authenticated user's email." +} - added
Input schema / properties / from_nameAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Optional sender display name (e.g., 'Peter Hartree'). If provided, the From header will be formatted as 'Name <email>'." +} - added
Input schema / properties / in_reply_toAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Optional RFC Message-ID of the message being replied to (e.g., '<message123@gmail.com>')." +} - added
Input schema / properties / include_forwarded_attachmentsAdded value: +{ + "default": true, + "description": "When forwarding, whether to include the original message's attachments. Ignored unless forward_message_id is set.", + "type": "boolean" +} - added
Input schema / properties / include_signatureAdded value: +{ + "default": true, + "description": "Whether to append the Gmail signature from Settings > Signature when available. Defaults to true.", + "type": "boolean" +} - added
Input schema / properties / referencesAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Optional chain of Message-IDs for proper threading." +} - removed
Input schema / properties / serviceRemoved value: -{ - "title": "service", - "type": "string" -} - added
Input schema / properties / subject / anyOfAdded value: +[ + { + "type": "string" + }, + { + "type": "null" + } +] - added
Input schema / properties / subject / defaultAdded value: +null - changed
Input schema / properties / subject / descriptionPrevious value: -"Email subject."New value: +"Email subject. Required when sending; optional when forwarding (defaults to 'Fwd: <original subject>')." - removed
Input schema / properties / subject / titleRemoved value: -"Subject" - removed
Input schema / properties / subject / typeRemoved value: -"string" - added
Input schema / properties / thread_idAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Optional Gmail thread ID to reply within." +} - removed
Input schema / properties / to / titleRemoved value: -"To" - added
Input schema / properties / user_google_email / descriptionAdded value: +"The user's Google email address. Required for authentication." - removed
Input schema / properties / user_google_email / titleRemoved value: -"User Google Email" - changed
Input schema / requiredPrevious value: -[ - "service", - "user_google_email", - "to", - "subject", - "body" -]New value: +[ + "user_google_email", + "to" +] - removed
Input schema / titleRemoved value: -"send_gmail_messageArguments" - changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "result": { + "type": "string" + } + }, + "required": [ + "result" + ], + "type": "object", + "x-fastmcp-wrap-result": true +}
- Changed
send_message11 fields changed- added
Input schema / additionalPropertiesAdded value: +false - removed
Input schema / properties / message_text / titleRemoved value: -"Message Text" - removed
Input schema / properties / serviceRemoved value: -{ - "title": "service", - "type": "string" -} - removed
Input schema / properties / space_id / titleRemoved value: -"Space Id" - added
Input schema / properties / thread_key / descriptionAdded value: +"Reply in a thread by app-defined key (creates thread if not found)." - removed
Input schema / properties / thread_key / titleRemoved value: -"Thread Key" - added
Input schema / properties / thread_nameAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Reply in an existing thread by its resource name (e.g. spaces/X/threads/Y)." +} - removed
Input schema / properties / user_google_email / titleRemoved value: -"User Google Email" - changed
Input schema / requiredPrevious value: -[ - "service", - "user_google_email", - "space_id", - "message_text" -]New value: +[ + "user_google_email", + "space_id", + "message_text" +] - removed
Input schema / titleRemoved value: -"send_messageArguments" - changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "result": { + "type": "string" + } + }, + "required": [ + "result" + ], + "type": "object", + "x-fastmcp-wrap-result": true +}
- Added
set_drive_file_permissions - Changed
set_publish_settings13 fields changed- added
Input schema / additionalPropertiesAdded value: +false - added
Input schema / properties / form_id / descriptionAdded value: +"The ID of the form to update publish settings for." - removed
Input schema / properties / form_id / titleRemoved value: -"Form Id" - added
Input schema / properties / is_accepting_responsesAdded value: +{ + "default": true, + "description": "Whether the form accepts responses. Only takes effect when the form is published. Defaults to True.", + "type": "boolean" +} - added
Input schema / properties / is_publishedAdded value: +{ + "default": true, + "description": "Whether the form is published and visible to responders. Defaults to True.", + "type": "boolean" +} - removed
Input schema / properties / publish_as_templateRemoved value: -{ - "default": false, - "title": "Publish As Template", - "type": "boolean" -} - removed
Input schema / properties / require_authenticationRemoved value: -{ - "default": false, - "title": "Require Authentication", - "type": "boolean" -} - removed
Input schema / properties / serviceRemoved value: -{ - "title": "service", - "type": "string" -} - added
Input schema / properties / user_google_email / descriptionAdded value: +"The user's Google email address. Required." - removed
Input schema / properties / user_google_email / titleRemoved value: -"User Google Email" - changed
Input schema / requiredPrevious value: -[ - "service", - "user_google_email", - "form_id" -]New value: +[ + "user_google_email", + "form_id" +] - removed
Input schema / titleRemoved value: -"set_publish_settingsArguments" - changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "result": { + "type": "string" + } + }, + "required": [ + "result" + ], + "type": "object", + "x-fastmcp-wrap-result": true +}
- Changed
start_google_auth8 fields changed- added
Input schema / additionalPropertiesAdded value: +false - removed
Input schema / properties / mcp_session_idRemoved value: -{ - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "title": "Mcp Session Id" -} - removed
Input schema / properties / service_name / titleRemoved value: -"Service Name" - added
Input schema / properties / user_google_email / defaultAdded value: +null - removed
Input schema / properties / user_google_email / titleRemoved value: -"User Google Email" - changed
Input schema / requiredPrevious value: -[ - "user_google_email", - "service_name" -]New value: +[ + "service_name" +] - removed
Input schema / titleRemoved value: -"start_google_authArguments" - changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "result": { + "type": "string" + } + }, + "required": [ + "result" + ], + "type": "object", + "x-fastmcp-wrap-result": true +}
- Added
update_doc_headers_footers - Added
update_drive_file - Added
update_paragraph_style - Added
update_script_content
36 tool updates
v1.0.0- First observed
create_doc - First observed
create_event - First observed
create_form - First observed
create_sheet - First observed
create_spreadsheet - First observed
delete_event - First observed
draft_gmail_message - First observed
get_doc_content - First observed
get_drive_file_content - First observed
get_events - First observed
get_form - First observed
get_form_response - First observed
get_gmail_message_content - First observed
get_gmail_messages_content_batch - First observed
get_gmail_thread_content - First observed
get_messages - First observed
get_spreadsheet_info - First observed
list_calendars - First observed
list_docs_in_folder - First observed
list_form_responses - First observed
list_gmail_labels - First observed
list_spaces - First observed
list_spreadsheets - First observed
manage_gmail_label - First observed
modify_event - First observed
modify_gmail_message_labels - First observed
modify_sheet_values - First observed
read_sheet_values - First observed
search_docs - First observed
search_drive_files - First observed
search_gmail_messages - First observed
search_messages - First observed
send_gmail_message - First observed
send_message - First observed
set_publish_settings - First observed
start_google_auth
TDQS
Scored across 121 tools
Many tools have unclear boundaries due to near-duplicate batch/single variants and overlapping resource accessors (e.g., get_doc_content vs get_doc_as_markdown vs get_drive_file_content; manage_contact vs manage_contacts_batch). Descriptions are detailed, but an agent could easily select the wrong tool for a task.
The naming is mostly snake_case verb_noun, but the verb vocabulary is inconsistent: get/list/search/read, create/insert/add, modify/update/manage/set are used interchangeably. Singular/plural mismatches like manage_event vs manage_contact and get_task vs get_task_list further weaken consistency.
At 121 tools, this is far beyond the 3-15 well-scoped range and clearly in the 50+ extreme category. The set is bloated with batch variants, consolidated/manage tools, debug helpers, and auth utilities, which makes the surface overwhelming for an agent.
The server covers core operations across Gmail, Calendar, Docs, Sheets, Slides, Forms, Chat, Drive, Tasks, Contacts, and Apps Script, with few obvious dead ends. Minor gaps exist, such as no dedicated calendar deletion or form deletion, but these can generally be worked around via Drive metadata or API limitations.
Maintenance
Related MCP Connectors
Hosted MCP server with managed OAuth for 15+ toolkits: Google Workspace, Fitbit, Oura, Kalshi, etc.
Streamable HTTP MCP server for Google Calendar and Sheets with OAuth login.
Hosted Google Calendar MCP server for AI agents. No self-hosting or Google Cloud setup.
MCP server connecting AI agents to 100+ apps (Gmail, Slack, Notion, GitHub) via one-click OAuth.
Related MCP Servers
- AlicenseAqualityDmaintenanceMCP server for Google Workspace APIs - Docs, Sheets, Drive, Gmail, and Calendar. Enables reading, creating, and editing Google Docs and Sheets, managing comments, reading emails, and viewing calendar events.3424 npm17MIT
- AlicenseBqualityDmaintenanceProduction-ready MCP server for Google Workspace providing broad coverage across Gmail, Drive, Calendar, Docs, Sheets, and more, with safe-by-default write operations and markdown-to-Google-Docs support.10024 PyPIMIT
- FlicenseBqualityDmaintenanceMCP server providing full access to Google Workspace services (Gmail, Drive, Calendar, Docs, Sheets, Slides, Forms, Tasks, Contacts) using OAuth authentication.1001-
- AlicenseBqualityCmaintenanceComprehensive Google Workspace MCP server with Gmail, Drive, Calendar, and Contacts integration.266 npmMIT