Skip to main content
Glama
EveryInc

google-workspace-mcp-server

by EveryInc

Google Workspace MCP Server

MCP server for Google Workspace APIs - Docs, Sheets, Drive, Gmail, and Calendar. Use it with Claude Code to read, create, and edit Google Docs and Sheets, manage comments, read emails, and view calendar events.

Quick Start

  1. Get your Google credentials (see Setup below)

  2. Add to your Claude Code config (~/.claude.json):

{
  "mcpServers": {
    "google-workspace": {
      "type": "stdio",
      "command": "npx",
      "args": ["google-workspace-mcp-server"],
      "env": {
        "GOOGLE_CLIENT_ID": "your-client-id",
        "GOOGLE_CLIENT_SECRET": "your-client-secret",
        "GOOGLE_REFRESH_TOKEN": "your-refresh-token"
      }
    }
  }
}
  1. Restart Claude Code

Related MCP server: gworkspace-mcp

Setup

Step 1: Create a Google Cloud Project

  1. Go to Google Cloud Console

  2. Click the project dropdown (top left) → New Project

  3. Name it something like "MCP Server" → Create

  4. Wait for the project to be created, then select it

Step 2: Enable the APIs

  1. Go to APIs & ServicesLibrary (or click here)

  2. Search for and enable each of these APIs:

    • Google Docs API → Click → Enable

    • Google Sheets API → Click → Enable

    • Google Drive API → Click → Enable

    • Gmail API → Click → Enable

    • Google Calendar API → Click → Enable

  1. Go to APIs & ServicesOAuth consent screen

  2. Select user type:

    • Internal (only if you have Google Workspace) - simpler, no test user setup needed

    • External (for personal Gmail accounts) - requires adding yourself as a test user

  3. Click Create

  4. Fill in the required fields:

    • App name: "MCP Server" (or anything)

    • User support email: your email

    • Developer contact email: your email

  5. Click Save and Continue

  6. On Scopes page, click Save and Continue (no changes needed)

  7. On Test users page (External only): click Add Users → add your Google email → Save and Continue

  8. Click Back to Dashboard

Step 4: Create OAuth Credentials

  1. Go to APIs & ServicesCredentials

  2. Click Create CredentialsOAuth client ID

  3. Application type: Web application

  4. Name: "MCP Server" (or anything)

  5. Under Authorized redirect URIs, click Add URI and enter:

    https://developers.google.com/oauthplayground
  6. Click Create

  7. Copy and save your Client ID and Client Secret - you'll need these!

Step 5: Get Your Refresh Token

  1. Go to OAuth 2.0 Playground

  2. Click the gear icon (⚙️) in the top right corner

  3. Check "Use your own OAuth credentials"

  4. Enter your Client ID and Client Secret from Step 4

  5. Close the settings

  6. In the left panel, find and select these scopes:

    • Google Docs API v1https://www.googleapis.com/auth/documents

    • Google Sheets API v4https://www.googleapis.com/auth/spreadsheets

    • Google Drive API v3https://www.googleapis.com/auth/drive

    • Gmail API v1https://www.googleapis.com/auth/gmail.readonly

    • Gmail API v1https://www.googleapis.com/auth/gmail.compose (for creating drafts)

    • Google Calendar API v3https://www.googleapis.com/auth/calendar.readonly

  7. Click Authorize APIs

  8. Sign in with your Google account and grant permissions

    • If you see "Google hasn't verified this app", click AdvancedGo to MCP Server (unsafe)

    • Click Continue to grant permissions

  9. Click Exchange authorization code for tokens

  10. Copy the Refresh Token (not the Access Token!) - this is what you need!

Step 6: Configure Claude Code

Add the MCP server to your Claude Code settings. Edit ~/.claude.json:

{
  "mcpServers": {
    "google-workspace": {
      "type": "stdio",
      "command": "npx",
      "args": ["google-workspace-mcp-server"],
      "env": {
        "GOOGLE_CLIENT_ID": "123456789-abcdefg.apps.googleusercontent.com",
        "GOOGLE_CLIENT_SECRET": "GOCSPX-xxxxxxxxxxxxx",
        "GOOGLE_REFRESH_TOKEN": "1//04xxxxxxxxxxxxx"
      }
    }
  }
}

Replace the values with your actual credentials from Steps 4 and 5.

Step 7: Restart Claude Code

Restart Claude Code to load the new MCP server. You should now be able to use Google Workspace tools!

Tools

Google Docs API

Tool

Description

docs_get_document

Get document content by ID

docs_create_document

Create a new document

docs_batch_update

Insert/update/delete text, formatting, images, tables

Google Sheets API

Tool

Description

sheets_get_spreadsheet

Get spreadsheet metadata

sheets_get_values

Read cell values from a range

sheets_batch_get_values

Read from multiple ranges

sheets_update_values

Write values to a range

sheets_append_values

Append rows to a table

sheets_create_spreadsheet

Create a new spreadsheet

sheets_batch_update

Apply formatting, charts, filters

sheets_clear_values

Clear cell values from a range

sheets_duplicate_sheet

Duplicate a sheet within a spreadsheet

Google Drive API

Tool

Description

drive_get_file

Download file content (PDFs, images, etc.)

drive_list_files

List files in your Drive

drive_search_files

Search for files by name or content

drive_copy_file

Create a copy of a file

drive_list_comments

List comments on a document

drive_create_comment

Add a comment (anchored or unanchored)

drive_reply_to_comment

Reply to an existing comment

drive_resolve_comment

Mark comment as resolved

drive_delete_comment

Delete a comment

Gmail API

Tool

Description

gmail_list_messages

List messages with optional search filters

gmail_get_message

Get full content of a specific message

gmail_list_threads

List conversation threads

gmail_get_thread

Get all messages in a thread

gmail_list_labels

List all Gmail labels (folders)

gmail_create_draft

Create an email draft (not sent automatically)

gmail_list_attachments

List attachments in a message

gmail_get_attachment

Download an attachment

Google Calendar API (Read-Only)

Tool

Description

calendar_list_calendars

List all accessible calendars

calendar_list_events

List events with time range and search filters

calendar_get_event

Get detailed event information

calendar_freebusy_query

Check free/busy availability for calendars

Usage Examples

Once configured, you can ask Claude Code things like:

Troubleshooting

"Access token expired" errors

The MCP server automatically refreshes tokens using your refresh token. If you see this error, your refresh token may have been revoked. Go through Step 5 again to get a new one.

"App not verified" warning

This is normal for personal projects. Click AdvancedGo to [App Name] (unsafe) to proceed.

"Insufficient permissions" errors

Make sure you enabled all five APIs (Docs, Sheets, Drive, Gmail, Calendar) in Step 2, and selected all five scopes in Step 5.

Environment Variables

Variable

Description

GOOGLE_CLIENT_ID

OAuth 2.0 Client ID from Google Cloud Console

GOOGLE_CLIENT_SECRET

OAuth 2.0 Client Secret

GOOGLE_REFRESH_TOKEN

Refresh token from OAuth Playground

Development

# Clone the repo
git clone https://github.com/nityeshaga/google-workspace-mcp-server.git
cd google-workspace-mcp-server

# Install dependencies
npm install

# Build
npm run build

# Run locally
npm start

License

MIT

Available Tools

34 tools
calendar_freebusy_queryCheck Free/Busy StatusA
Read-onlyIdempotent

Check availability (free/busy times) for one or more calendars within a time range.

This is useful for finding available meeting times across multiple people. It only returns busy time blocks (not event details) for privacy.

Args:

  • time_min (string): Start of the time range (ISO 8601 format, e.g., '2024-01-15T00:00:00Z')

  • time_max (string): End of the time range (ISO 8601 format, e.g., '2024-01-22T00:00:00Z')

  • calendar_ids (string[]): Array of calendar IDs or email addresses to check (e.g., ['primary', 'colleague@company.com'])

  • response_format ('markdown' | 'json'): Output format (default: 'markdown')

Returns: For each calendar, a list of busy time blocks within the range.

Requirements for checking other people's calendars:

  • Same Google Workspace organization, OR

  • They have shared their calendar with you, OR

  • Their calendar is public

Examples:

  • Check your availability: calendar_ids=["primary"], time_min="2024-01-15T09:00:00Z", time_max="2024-01-15T18:00:00Z"

  • Check team availability: calendar_ids=["alice@company.com", "bob@company.com"]

ParametersJSON Schema
NameRequiredDescriptionDefault
time_minYesStart of the time range (ISO 8601 format, e.g., '2024-01-15T00:00:00Z')
time_maxYesEnd of the time range (ISO 8601 format, e.g., '2024-01-22T00:00:00Z')
calendar_idsYesArray of calendar IDs or email addresses to check (e.g., ['primary', 'colleague@company.com'])
response_formatNoOutput format: 'markdown' or 'json'markdown

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already indicate read-only, idempotent, non-destructive behavior. Description adds context that only busy blocks are returned (no event details) for privacy, and mentions response format options.

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

Conciseness4/5

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

Well-structured with Args section and examples. Information is front-loaded but could be slightly more concise. Every sentence adds value.

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

Completeness4/5

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

No output schema, but description explains return type (list of busy time blocks). Also covers privacy and access requirements. Adequate for the tool's complexity.

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

Parameters4/5

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

Schema coverage is 100%, so baseline is 3. Description adds examples, ISO 8601 format details, default for response_format, and clarifies calendar_ids accept emails.

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

Purpose5/5

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

The description clearly states the tool checks free/busy availability for calendars within a time range, distinguishing it from sibling tools like calendar_get_event and calendar_list_events which provide event details.

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

Usage Guidelines4/5

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

Provides explicit guidance for when to use (finding meeting times across people) and requirements for checking others' calendars (Workspace org, shared, public). Includes examples but does not explicitly state when not to use vs alternatives.

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

calendar_get_eventGet Calendar EventA
Read-onlyIdempotent

Get detailed information about a specific calendar event.

Args:

  • calendar_id (string): Calendar ID (default: 'primary')

  • event_id (string): The event ID to retrieve

  • response_format ('markdown' | 'json'): Output format (default: 'markdown')

Returns: Full event details including description, attendees, and conference info.

ParametersJSON Schema
NameRequiredDescriptionDefault
calendar_idNoCalendar ID (default: 'primary')primary
event_idYesThe ID of the event to retrieve
response_formatNoOutput format: 'markdown' or 'json'markdown

TDQS

A3.9/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, destructiveHint=false, idempotentHint=true, and openWorldHint=true. The description adds value by specifying that the return includes 'description, attendees, and conference info', and explains the 'response_format' parameter options, providing behavioral context beyond annotations.

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

Conciseness4/5

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

The description is concise with an 'Args' section and a 'Returns' note. It front-loads the main purpose and avoids fluff. Slightly verbose with repeating schema details, but overall efficient.

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

Completeness4/5

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

For a simple read operation with well-annotated safety and full schema coverage, the description is sufficiently complete. It adds return format details. Missing error handling or rate limit info, but not critical for this straightforward tool.

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

Parameters3/5

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

Schema coverage is 100% with all parameters described. The description restates defaults and the 'response_format' enum values, adding marginal clarity. However, it does not provide additional meaning beyond what the schema already offers, so a baseline 3 is appropriate.

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

Purpose5/5

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

The description clearly states 'Get detailed information about a specific calendar event', specifying the verb and resource. The title and name confirm the purpose, and it distinguishes from siblings like 'calendar_list_events' by focusing on a single event retrieval.

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

Usage Guidelines3/5

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

The description does not explicitly state when to use this tool versus alternatives like 'calendar_list_events'. The usage is implied from the name and context, but no explicit guidance on when not to use or what prerequisites exist.

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

calendar_list_calendarsList CalendarsA
Read-onlyIdempotent

List all calendars accessible to the user.

Args:

  • response_format ('markdown' | 'json'): Output format (default: 'markdown')

Returns: List of calendars with their IDs, names, and access roles.

ParametersJSON Schema
NameRequiredDescriptionDefault
response_formatNoOutput format: 'markdown' for human-readable or 'json' for structured datamarkdown

TDQS

A4/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false, so the description's addition of return fields (IDs, names, access roles) adds useful context. It does not discuss potential pagination or rate limits, but given the annotations cover safety, this is sufficient.

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

Conciseness5/5

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

The description is highly concise, using two sentences plus a bullet for args and returns. Every sentence adds value, and the structure is front-loaded with the purpose.

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

Completeness4/5

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

Given the tool has one optional parameter and no output schema, the description adequately covers what the tool returns. Annotations handle safety. Lack of pagination details is minor for a simple list tool.

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

Parameters3/5

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

Schema description coverage is 100% for the single parameter. The description repeats the schema info (response_format with markdown/json) without adding extra meaning beyond what the schema already provides. Thus baseline 3.

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

Purpose5/5

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

The description clearly states it lists all calendars accessible to the user, using a specific verb and resource. It distinguishes from sibling tools like calendar_list_events and calendar_get_event, which operate on events rather than calendars.

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

Usage Guidelines3/5

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

The description implies this tool is used to get a list of calendars before querying events or free/busy info, but it does not explicitly state when to use it versus alternatives or provide any exclusion criteria. No guidance on prerequisites or context is given.

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

calendar_list_eventsList Calendar EventsA
Read-onlyIdempotent

List events from a calendar within an optional time range.

Args:

  • calendar_id (string): Calendar ID (default: 'primary' for main calendar)

  • time_min (string, optional): Start of time range in ISO 8601 format (e.g., '2024-01-01T00:00:00Z')

  • time_max (string, optional): End of time range in ISO 8601 format

  • max_results (number): Maximum events to return, 1-250 (default: 10)

  • query (string, optional): Free text search to filter events

  • single_events (boolean): Expand recurring events into instances (default: true)

  • order_by ('startTime' | 'updated'): Sort order (default: 'startTime')

  • page_token (string, optional): Token for pagination

  • response_format ('markdown' | 'json'): Output format (default: 'markdown')

Returns: List of events with title, time, location, and attendees.

Examples:

  • Today's events: time_min="2024-01-15T00:00:00Z", time_max="2024-01-16T00:00:00Z"

  • Search meetings: query="standup"

  • Next 7 days: time_min=(now), time_max=(now + 7 days)

ParametersJSON Schema
NameRequiredDescriptionDefault
calendar_idNoCalendar ID (default: 'primary' for user's main calendar)primary
time_minNoStart of time range (ISO 8601 format, e.g., '2024-01-01T00:00:00Z')
time_maxNoEnd of time range (ISO 8601 format)
max_resultsNoMaximum events to return (1-250)
queryNoFree text search terms to find events
single_eventsNoWhether to expand recurring events into instances
order_byNoSort order (requires single_events=true for 'startTime')startTime
page_tokenNoToken for pagination
response_formatNoOutput format: 'markdown' or 'json'markdown

TDQS

A4.7/5.0
Behavior5/5

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

Annotations indicate a read-only, idempotent operation. The description adds behavioral context beyond annotations, such as expanding recurring events (single_events), pagination (page_token), and output format options. No contradictions with annotations.

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

Conciseness4/5

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

The description is front-loaded with a one-sentence summary, then parameter list, returns, and examples. It is informative and each section is useful, but the length could be slightly trimmed for conciseness. Still, it's well-structured and efficient for the number of parameters.

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

Completeness5/5

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

With 9 parameters and no output schema, the description covers all important aspects: parameter details with examples, return value specification, pagination, time ranges, and recurrent events. It is thorough for a listing operation.

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

Parameters5/5

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

Schema coverage is 100%, but the description adds significant value by grouping parameters, explaining defaults, providing format details, and including examples (e.g., ISO 8601 time format, sort order options). This goes well beyond the schema's field descriptions.

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

Purpose5/5

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

The description clearly states 'List events from a calendar within an optional time range,' specifying the verb (list), resource (events from a calendar), and scope. It distinguishes from sibling tools like calendar_get_event (single event) and calendar_list_calendars (list calendars).

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

Usage Guidelines4/5

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

The description provides detailed parameter usage and examples (e.g., today's events, search meetings, next 7 days), giving clear context for when to use each parameter. However, it does not explicitly state when not to use this tool or mention alternative tools like calendar_freebusy_query for free/busy data.

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

docs_batch_updateBatch Update Google DocumentA
Destructive

Apply batch updates to a Google Doc (insert/update/delete text, formatting, images, tables).

Args:

  • document_id (string): The ID of the Google Doc to update

  • requests (array): Array of batch update request objects

Common request types:

  • insertText: { insertText: { location: { index: 1 }, text: "Hello" } }

  • deleteContentRange: { deleteContentRange: { range: { startIndex: 1, endIndex: 10 } } }

  • updateTextStyle: { updateTextStyle: { range: {...}, textStyle: {...}, fields: "bold" } }

  • insertInlineImage: { insertInlineImage: { location: {...}, uri: "https://..." } }

  • insertTable: { insertTable: { rows: 3, columns: 3, location: {...} } }

See Google Docs API batchUpdate documentation for full request schema.

Returns: { "documentId": string, "replies": array, "writeControl": object }

ParametersJSON Schema
NameRequiredDescriptionDefault
document_idYesThe ID of the Google Doc to update
requestsYesArray of batch update request objects (see Google Docs API batchUpdate documentation)

TDQS

A4/5.0
Behavior3/5

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

Annotations already declare destructiveHint=true. Description lists common request types but does not add behavioral details beyond annotations (e.g., error handling, rate limits, permanence of changes). No contradiction found.

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

Conciseness4/5

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

Description is moderately concise with clear sections (Args, Common request types, Returns). Examples are helpful but add length; still well-structured.

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

Completeness5/5

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

Despite no output schema, description details the return structure. Covers input parameters with examples and output format, making it self-contained for a batch update tool.

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

Parameters4/5

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

Schema provides 100% coverage with basic descriptions. Description adds significant value by providing concrete examples of common request types (insertText, deleteContentRange, etc.), aiding understanding of the 'requests' parameter beyond the schema.

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

Purpose5/5

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

Title 'Batch Update Google Document' and description 'Apply batch updates to a Google Doc (insert/update/delete text, formatting, images, tables)' provide a specific verb+resource. Distinguishes well from sibling tools like docs_create_document and docs_get_document.

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

Usage Guidelines3/5

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

Description implies use for batch updates but does not explicitly state when to use this tool over alternatives like sheets_batch_update or docs_create_document. No exclusion criteria or context on prerequisites.

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

docs_create_documentCreate Google DocumentA

Create a new Google Doc with an optional initial body.

Args:

  • title (string): The title for the new document

  • body_content (string, optional): Initial text content for the document body

Returns: { "documentId": string, "title": string, "revisionId": string }

Examples:

  • Create empty doc: title="Meeting Notes"

  • Create with content: title="Draft", body_content="Hello World"

ParametersJSON Schema
NameRequiredDescriptionDefault
titleYesThe title for the new document
body_contentNoOptional initial text content for the document body

TDQS

A4/5.0
Behavior4/5

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

Annotations indicate non-readonly, non-destructive. Description adds return format and optional body, consistent with annotations. No contradictions.

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

Conciseness5/5

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

Extremely concise with clear sections: description, args, returns, examples. No redundant information.

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

Completeness4/5

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

Simple tool with two parameters; description covers purpose, params, and return structure. Lacks edge-case details (e.g., what happens if doc with same title exists), but adequate for typical use.

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

Parameters3/5

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

Schema coverage is 100%; parameters are well-defined. Description repeats param info but adds concrete examples, slightly improving understanding beyond schema.

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

Purpose5/5

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

The description explicitly states 'Create a new Google Doc', clearly identifying the action and resource. It is distinct from sibling tools like docs_batch_update or docs_get_document.

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

Usage Guidelines3/5

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

No explicit guidance on when to use this tool vs alternatives, such as sheets_create_spreadsheet or drive_copy_file. Implies usage for new doc creation but lacks 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.

docs_get_documentGet Google DocumentA
Read-onlyIdempotent

Retrieve the content of a Google Doc by its ID.

Args:

  • document_id (string): The ID of the Google Doc (found in the URL after /d/)

  • response_format ('markdown' | 'json'): Output format (default: 'markdown')

Returns: Document title, content, and metadata. For JSON format: { "documentId": string, "title": string, "textContent": string, "revisionId": string }

Examples:

  • Get doc content: document_id="1BxiMVs0XRA5nFMdKvBdBZjgmUUqptlbs74OgvE2upms"

ParametersJSON Schema
NameRequiredDescriptionDefault
document_idYesThe ID of the Google Doc to retrieve (found in the URL)
response_formatNoOutput format: 'markdown' for human-readable or 'json' for structured datamarkdown

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already indicate readOnlyHint, destructiveHint, idempotentHint, openWorldHint. The description adds behavioral details about response format (markdown/json) and return structure, enhancing transparency without contradicting annotations.

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

Conciseness5/5

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

The description is well-structured with Args, Returns, Examples. Every sentence adds value, no redundancy, and 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.

Completeness5/5

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

Given the tool's low complexity, rich annotations, and full schema coverage, the description fully covers input, output, and usage. No output schema needed as description includes return format details.

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

Parameters4/5

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

Schema coverage is 100%, but description adds value by explaining document_id extraction from URL and clarifying response_format enum meanings ('human-readable' vs 'structured data').

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

Purpose5/5

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

The description clearly states the tool retrieves content of a Google Doc by ID, with specific verb and resource. It distinguishes from siblings like docs_batch_update and docs_create_document by focusing on read-only retrieval.

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

Usage Guidelines4/5

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

The description provides a clear example and implies when to use (read-only doc access) but does not explicitly state when not to use or alternatives. Context with siblings helps, but the description itself lacks explicit exclusions.

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

drive_copy_fileCopy Drive FileA

Create a copy of a file in Google Drive.

Args:

  • file_id (string): The ID of the file to copy

  • name (string, optional): New name for the copied file (defaults to 'Copy of [original name]')

  • parent_folder_id (string, optional): ID of the folder to copy the file into (defaults to same location as original)

Returns: { "id": string, "name": string, "mimeType": string, "webViewLink": string }

Examples:

  • Copy file: file_id="1abc123"

  • Copy with new name: file_id="1abc123", name="Budget 2025"

  • Copy to folder: file_id="1abc123", parent_folder_id="0xyz789"

ParametersJSON Schema
NameRequiredDescriptionDefault
file_idYesThe ID of the file to copy
nameNoNew name for the copied file (defaults to 'Copy of [original name]')
parent_folder_idNoID of the folder to copy the file into (defaults to same location as original)

TDQS

A3.9/5.0
Behavior3/5

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

Annotations already indicate a non-read-only, non-destructive operation. The description adds return type structure and examples, but lacks explicit mention of side effects or non-idempotency.

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

Conciseness5/5

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

The description is well-structured with clear sections (Args, Returns, Examples), concise, and front-loaded with the purpose.

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

Completeness5/5

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

Given no output schema, the description provides a complete output structure, covers all parameters with examples, and is sufficient for a straightforward copy operation.

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

Parameters3/5

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

Schema description coverage is 100%, and the description largely repeats the schema's parameter descriptions. It adds some value through examples and default behavior clarification, but not significantly beyond the schema.

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

Purpose5/5

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

The description clearly states 'Create a copy of a file in Google Drive' with a specific verb and resource, distinguishing it from sibling tools like get, list, or search.

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

Usage Guidelines3/5

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

The description provides examples of typical usage but does not explicitly state when to use this tool versus alternatives or when not to use it.

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

drive_create_commentCreate Comment on DocumentA

Add a comment to a Google Doc. Can be anchored to specific text or unanchored.

Args:

  • file_id (string): The ID of the Google Doc

  • content (string): The text content of the comment

  • quoted_text (string, optional): Text to anchor the comment to (for anchored comments)

Returns: { "id": string, "content": string, "author": string, "createdTime": string }

Examples:

  • Unanchored: file_id="...", content="Please review this section"

  • Anchored: file_id="...", content="Typo here", quoted_text="teh"

ParametersJSON Schema
NameRequiredDescriptionDefault
file_idYesThe ID of the Google Doc to add a comment to
contentYesThe text content of the comment
quoted_textNoOptional text to anchor the comment to (for anchored comments)

TDQS

A4/5.0
Behavior3/5

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

Description adds anchoring context but does not disclose permissions, rate limits, or side effects like triggering notifications. Annotations already show it's not read-only, not destructive, not idempotent. No additional behavioral traits beyond what annotations imply.

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

Conciseness5/5

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

Well-structured: one-line summary, Args/Returns sections, and examples. Every sentence is useful 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.

Completeness4/5

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

Provides return structure despite no output schema. Covers two modes clearly. Missing error cases or permission requirements, but sufficient for a simple creation tool.

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

Parameters4/5

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

Schema coverage is 100%, but description adds value by explaining anchoring behavior for quoted_text and providing examples. Meaningful extra context beyond the schema alone.

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

Purpose5/5

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

Description clearly states 'Add a comment to a Google Doc' and distinguishes between anchored and unanchored modes. It is specific and distinct from sibling tools like drive_list_comments or drive_reply_to_comment.

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

Usage Guidelines3/5

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

Examples show when to use anchored vs unanchored via quoted_text, but no explicit when-not-to-use or comparison with siblings like drive_reply_to_comment. Adequate but lacking direct guidance.

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

drive_delete_commentDelete CommentA
DestructiveIdempotent

Delete a comment from a Google Doc.

Args:

  • file_id (string): The ID of the Google Doc

  • comment_id (string): The ID of the comment to delete

Returns: { "deleted": true, "comment_id": string }

Note: This action cannot be undone.

ParametersJSON Schema
NameRequiredDescriptionDefault
file_idYesThe ID of the Google Doc containing the comment
comment_idYesThe ID of the comment to delete

TDQS

A3.9/5.0
Behavior4/5

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

Annotations already indicate destructiveHint=true, but the description adds 'This action cannot be undone,' reinforcing the permanence and providing behavioral context. It also describes the return format, which is not in annotations.

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

Conciseness5/5

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

The description is concise: one sentence for purpose, then structured bullet points for args and returns, plus a note. No unnecessary information, front-loaded effectively.

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

Completeness5/5

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

For a simple comment deletion tool with 2 parameters, the description covers purpose, required inputs, return format, and irreversibility. No output schema but return is described; annotations cover safety. Complete for agent understanding.

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

Parameters3/5

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

Schema coverage is 100% with clear descriptions for both parameters. The description's parameter list mirrors the schema without adding new semantic meaning, so a baseline score of 3 is appropriate.

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

Purpose5/5

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

The description clearly states 'Delete a comment from a Google Doc' with a specific verb (delete) and resource (comment from Google Doc), distinguishing it from siblings like drive_create_comment or drive_reply_to_comment.

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

Usage Guidelines2/5

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

The description does not provide any guidance on when to use this tool vs alternatives (e.g., drive_resolve_comment). It only includes a warning about irreversibility, but no explicit use cases or exclusions.

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

drive_get_fileGet File ContentA
Read-onlyIdempotent

Download and return the content of a file from Google Drive. Supports PDFs, images, and other binary files.

Args:

  • file_id (string): The ID of the file to download (found in the URL after /d/)

Returns: The file content. For PDFs and images, returns the binary content that Claude can read directly.

Examples:

ParametersJSON Schema
NameRequiredDescriptionDefault
file_idYesThe ID of the file to download (found in the URL)

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already provide readOnlyHint, destructiveHint, etc. The description adds value by specifying supported file types (PDFs, images, binary) and that the return is binary content readable by Claude, which is beyond the annotations.

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

Conciseness5/5

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

The description is concise with a clear front-loaded purpose, followed by Args, Returns, and Examples. Each sentence adds value without unnecessary fluff.

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

Completeness5/5

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

For a simple tool with one parameter, good annotations, and no output schema, the description provides sufficient context including return type and example usage, making it complete for effective invocation.

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

Parameters4/5

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

The single parameter file_id has 100% schema coverage. The description adds a practical example of extracting the ID from a URL and clarifies the format, slightly enhancing the schema's description.

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

Purpose5/5

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

The description clearly states the tool downloads and returns file content from Google Drive, using specific verbs ('Download and return the content'). It distinguishes itself from siblings like drive_list_files (metadata) and drive_copy_file (copying) by focusing on content retrieval.

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

Usage Guidelines4/5

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

The description implies when to use this tool (when needing actual file content) but does not explicitly state when not to use it or suggest alternatives. However, the context among sibling tools makes the intended usage clear.

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

drive_list_commentsList Document CommentsA
Read-onlyIdempotent

List comments on a Google Doc.

Args:

  • file_id (string): The ID of the Google Doc

  • include_deleted (boolean): Include deleted comments (default: false)

  • page_size (number): Max comments to return, 1-100 (default: 20)

  • page_token (string, optional): Pagination token for next page

  • response_format ('markdown' | 'json'): Output format (default: 'markdown')

Returns: For JSON format: { "comments": [ { "id": string, "content": string, "author": string, "createdTime": string, "resolved": boolean, "quotedFileContent": string, "replies": [{ "id", "content", "author", "createdTime" }] } ], "next_page_token": string | null }

ParametersJSON Schema
NameRequiredDescriptionDefault
file_idYesThe ID of the Google Doc to list comments from
include_deletedNoWhether to include deleted comments
page_sizeNoMaximum number of comments to return (1-100)
page_tokenNoToken for pagination to retrieve the next page of results
response_formatNoOutput format: 'markdown' for human-readable or 'json' for structured datamarkdown

TDQS

A4/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is clear. The description adds context about pagination and output format but does not discuss rate limits or other behavioral traits.

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

Conciseness4/5

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

The description is well-structured with args and returns sections, front-loading the purpose. It is slightly verbose but remains efficient and clear.

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

Completeness5/5

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

Given the 5 parameters, full schema coverage, and annotations, the description is thorough. It explains the return format and pagination, compensating for the lack of an output schema.

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

Parameters4/5

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

Schema coverage is 100% with descriptions for all parameters. The description adds value by listing default values and providing the return format structure, which is not in the schema.

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

Purpose5/5

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

The description clearly states 'List comments on a Google Doc' with a specific verb and resource. It distinguishes itself from sibling tools like drive_create_comment and drive_delete_comment.

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

Usage Guidelines3/5

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

The description does not provide explicit guidance on when to use this tool versus alternatives. Usage is implied by the tool's name and sibling context, but no exclusions or conditions are stated.

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

drive_list_filesList Drive FilesA
Read-onlyIdempotent

List files in your Google Drive.

Args:

  • page_size (number): Max files to return, 1-100 (default: 20)

  • page_token (string, optional): Pagination token for next page

  • order_by (string): Sort order (default: 'modifiedTime desc')

  • mime_type ('all' | 'documents' | 'spreadsheets' | 'presentations' | 'folders'): Filter by type (default: 'all')

  • response_format ('markdown' | 'json'): Output format (default: 'markdown')

Returns: For JSON format: { "files": [ { "id": string, "name": string, "mimeType": string, "createdTime": string, "modifiedTime": string, "size": string, "webViewLink": string, "owners": string[] } ], "next_page_token": string | null }

ParametersJSON Schema
NameRequiredDescriptionDefault
page_sizeNoMaximum number of files to return (1-100)
page_tokenNoToken for pagination to retrieve the next page of results
order_byNoSort order (e.g., 'modifiedTime desc', 'name', 'createdTime desc')modifiedTime desc
mime_typeNoFilter by file typeall
response_formatNoOutput format: 'markdown' for human-readable or 'json' for structured datamarkdown

TDQS

A3.9/5.0
Behavior4/5

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

Annotations already declare readOnlyHint and idempotentHint; description adds valuable details about pagination (next_page_token) and response structure, which go beyond annotations. No contradictions.

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

Conciseness4/5

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

Well-structured with clear 'Args' and 'Returns' sections, bullet points, and front-loaded purpose. Slightly verbose with repeated default values, but overall efficient and scannable.

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

Completeness5/5

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

Despite lack of output schema, the description explicitly documents the JSON return format, including fields and pagination. Handles all aspects: filtering, ordering, pagination, and output format. No missing context for a filtered-list tool.

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

Parameters4/5

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

All parameters already described in schema (100% coverage). The description adds useful context by showing default values, sort order examples, and the return format structure, which exceeds the schema's minimal descriptions.

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

Purpose4/5

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

Clearly states 'List files in your Google Drive' with specific verb and resource. However, it does not distinguish from sibling 'drive_search_files' which also lists files but likely with more advanced search capabilities.

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

Usage Guidelines3/5

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

No explicit guidance on when to use this tool versus alternatives like 'drive_search_files'. The parameter descriptions imply usage for filtering by type and ordering, but no contextual direction is provided.

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

drive_reply_to_commentReply to CommentA

Reply to an existing comment on a Google Doc.

Args:

  • file_id (string): The ID of the Google Doc

  • comment_id (string): The ID of the comment to reply to

  • content (string): The text content of the reply

Returns: { "id": string, "content": string, "author": string, "createdTime": string }

ParametersJSON Schema
NameRequiredDescriptionDefault
file_idYesThe ID of the Google Doc containing the comment
comment_idYesThe ID of the comment to reply to
contentYesThe text content of the reply

TDQS

A3.5/5.0
Behavior3/5

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

Annotations already indicate readOnlyHint=false (mutation), destructiveHint=false, idempotentHint=false. The description confirms it creates a reply but adds no additional behavioral context like required permissions, rate limits, or side effects beyond the return format. Minimal added value over annotations.

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

Conciseness4/5

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

The description is concise with a one-line purpose followed by a structured Args/Returns section. It is well-organized without unnecessary text, though the Args section could be combined with the one-liner for tighter prose.

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

Completeness4/5

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

The tool is relatively simple, and the description covers purpose, parameters, and return format despite no output schema. However, it lacks context on prerequisites (e.g., file and comment existence) and potential side effects, leaving some gaps for a complete understanding.

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

Parameters3/5

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

Schema coverage is 100%, and the description repeats essentially the same parameter descriptions as the schema (e.g., 'The ID of the Google Doc' vs schema's 'The ID of the Google Doc containing the comment'). No new semantic meaning is added beyond what the schema provides.

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

Purpose5/5

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

The description clearly states 'Reply to an existing comment on a Google Doc' with a specific verb and resource. It distinguishes from sibling tools like drive_create_comment (create top-level) and drive_resolve_comment (resolve), making its purpose unambiguous.

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

Usage Guidelines2/5

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

No explicit guidance on when to use this tool versus alternatives (e.g., drive_create_comment). It does not mention prerequisites like obtaining comment_id from drive_list_comments or when to avoid replying. The context from sibling tools implies usage but is not explicit.

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

drive_resolve_commentResolve CommentB
Idempotent

Mark a comment as resolved on a Google Doc.

Args:

  • file_id (string): The ID of the Google Doc

  • comment_id (string): The ID of the comment to resolve

Returns: { "id": string, "resolved": true }

ParametersJSON Schema
NameRequiredDescriptionDefault
file_idYesThe ID of the Google Doc containing the comment
comment_idYesThe ID of the comment to resolve

TDQS

B3.2/5.0
Behavior3/5

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

Annotations already declare this as non-destructive, idempotent, and non-read-only. The description adds the return structure (id and resolved: true), which is useful. However, it does not disclose edge cases like what happens if the comment is already resolved or the document is inaccessible.

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

Conciseness4/5

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

The description is concise and front-loaded with the purpose. The args/returns structure is clear. It wastes no words, though it could be more structured for readability (e.g., bullet points).

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

Completeness4/5

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

For a simple tool with 2 parameters and no output schema, the description is sufficient. It explains the core function and return format. With openWorldHint true, the AI can assume additional behavior, but the description covers the immediate use case.

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

Parameters3/5

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

The input schema has 100% description coverage, so the schema already explains the parameters. The description's parameter list adds no new meaning beyond the schema, hitting the baseline for a high-coverage tool.

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

Purpose4/5

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

The description clearly states the action ('Mark a comment as resolved') and the resource ('Google Doc'). However, it does not differentiate from sibling tools like 'drive_reply_to_comment' or 'drive_delete_comment', which could cause confusion for the AI.

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

Usage Guidelines2/5

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

The description provides no guidance on when to use this tool versus alternatives, nor does it mention prerequisites (e.g., that the comment must exist and be unresolved). The AI agent is left to infer usage context.

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

drive_search_filesSearch Drive FilesA
Read-onlyIdempotent

Search for files in your Google Drive by name or content.

Args:

  • query (string): Search query - searches file names and content

  • page_size (number): Max files to return, 1-100 (default: 20)

  • page_token (string, optional): Pagination token for next page

  • mime_type ('all' | 'documents' | 'spreadsheets' | 'presentations' | 'folders'): Filter by type (default: 'all')

  • response_format ('markdown' | 'json'): Output format (default: 'markdown')

Returns: For JSON format: { "files": [ { "id": string, "name": string, "mimeType": string, "createdTime": string, "modifiedTime": string, "size": string, "webViewLink": string, "owners": string[] } ], "next_page_token": string | null }

Examples:

  • Search by name: query="budget 2024"

  • Search spreadsheets: query="sales", mime_type="spreadsheets"

ParametersJSON Schema
NameRequiredDescriptionDefault
queryYesSearch query - searches file names and content
page_sizeNoMaximum number of files to return (1-100)
page_tokenNoToken for pagination to retrieve the next page of results
mime_typeNoFilter by file typeall
response_formatNoOutput format: 'markdown' for human-readable or 'json' for structured datamarkdown

TDQS

A4.1/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, destructiveHint=false, idempotentHint=true, and openWorldHint=true, covering the safety profile. The description adds pagination, filtering, and output format details, which are useful but not critical beyond annotations.

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

Conciseness5/5

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

The description is well-structured with clear sections (Args, Returns, Examples). It is concise yet complete, front-loading the purpose and providing necessary details without verbosity.

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

Completeness5/5

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

Given 5 parameters, full schema, rich annotations, and no output schema, the description compensates with return format and examples, making it fully complete for an agent to invoke correctly.

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

Parameters3/5

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

Schema coverage is 100%, so baseline is 3. The description repeats parameter info but adds examples and return format, which clarifies usage but does not significantly extend schema semantics.

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

Purpose5/5

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

The description clearly states it searches files by name or content in Google Drive, differentiating from sibling tools like drive_list_files (list without query) or drive_get_file (get specific file by ID).

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

Usage Guidelines4/5

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

The description implies usage for searching, but does not explicitly state when to use vs. alternatives (e.g., drive_list_files for unfiltered listing). However, the query parameter and examples guide appropriate usage.

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

gmail_create_draftCreate Gmail DraftA

Create a new email draft in Gmail. The draft is saved but NOT sent automatically.

Args:

  • to (string[]): Array of recipient email addresses (required)

  • subject (string): Email subject line

  • body (string): Email body content (plain text or HTML depending on content_type)

  • content_type (string, optional): MIME content type - "text/plain" (default) or "text/html"

  • cc (string[], optional): Array of CC recipient email addresses

  • bcc (string[], optional): Array of BCC recipient email addresses

  • reply_to_message_id (string, optional): Message ID to reply to (for creating reply drafts)

Returns: { "draftId": string, "messageId": string, "threadId": string }

Examples:

  • Simple draft: to=["bob@example.com"], subject="Hello", body="Hi Bob!"

  • Reply draft: to=["bob@example.com"], subject="Re: Meeting", body="Sounds good!", reply_to_message_id="abc123"

ParametersJSON Schema
NameRequiredDescriptionDefault
toYesArray of recipient email addresses
subjectYesEmail subject line
bodyYesEmail body content (plain text or HTML depending on content_type)
content_typeNoMIME content type for the email body (default: text/plain)text/plain
ccNoArray of CC recipient email addresses
bccNoArray of BCC recipient email addresses
reply_to_message_idNoMessage ID to reply to (for creating reply drafts)

TDQS

A4.6/5.0
Behavior5/5

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

Annotations indicate non-readOnly, non-destructive, non-idempotent, and open-world. The description aligns perfectly, adding that the operation creates a draft (write operation) without sending, and details the return schema (draftId, messageId, threadId). This provides complete behavioral transparency beyond annotations.

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

Conciseness4/5

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

The description is well-structured with Args, Returns, and Examples sections, and the key purpose is front-loaded. While comprehensive, it is slightly lengthy but every part contributes to clarity. Could be tightened slightly without losing information, but overall efficient.

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

Completeness5/5

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

Given 7 parameters (3 required), no output schema, and no nested objects, the description covers all necessary information: parameter details, return structure, and usage examples. The agent has everything needed to correctly invoke the tool and interpret results.

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

Parameters4/5

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

Schema coverage is 100%, so baseline is 3. The description adds value by listing all parameters in a clear Args style, specifying defaults (e.g., content_type defaults to text/plain), and providing concrete examples that illustrate usage patterns (simple draft and reply draft). This enhances understanding beyond the schema alone.

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

Purpose5/5

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

The description clearly states 'Create a new email draft in Gmail' and emphasizes that the draft is saved but NOT sent automatically. This specific verb+resource combination distinguishes it from any potential sending tools, though none are listed as siblings. The purpose is unmistakable.

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

Usage Guidelines4/5

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

The description explicitly notes that the draft is not sent, guiding agents to use this tool when they intend to save a draft for later. However, it does not explicitly contrast with alternative tools for sending or editing drafts, nor does it advise when not to use. The guidance is clear in context but could be more explicit about alternatives.

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

gmail_get_attachmentGet Gmail AttachmentA
Read-onlyIdempotent

Download an attachment from a Gmail message.

Args:

  • message_id (string): The ID of the message containing the attachment

  • attachment_id (string): The ID of the attachment to download (from gmail_list_attachments)

  • filename (string, optional): Filename for the attachment (for display purposes)

Returns: The attachment content. For images, returns the image directly. For other files, provides download info.

Examples:

  • Download attachment: message_id="abc123", attachment_id="xyz789"

ParametersJSON Schema
NameRequiredDescriptionDefault
message_idYesThe ID of the message containing the attachment
attachment_idYesThe ID of the attachment to download
filenameNoOptional filename for the attachment (used for saving)

TDQS

A4.3/5.0
Behavior3/5

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

Annotations already declare readOnlyHint, destructiveHint, idempotentHint. The description adds value by specifying the return format (image directly vs. download info), which is helpful beyond annotations.

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

Conciseness5/5

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

The description is concise with a clear one-line summary, structured Args, Returns, and Example sections. Every sentence adds value without redundancy.

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

Completeness5/5

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

Given no output schema, the description adequately explains return types and provides an example. The annotations cover safety and idempotency. No missing information for effective tool use.

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

Parameters4/5

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

With 100% schema description coverage, the baseline is 3. The description adds the origin of attachment_id (from gmail_list_attachments), which provides meaningful workflow context beyond the schema.

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

Purpose5/5

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

The description clearly states 'Download an attachment from a Gmail message' with specific verb and resource. It distinguishes from sibling tools like gmail_list_attachments by referencing the attachment_id source. The return behavior is explained for images vs. other files.

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

Usage Guidelines4/5

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

The description implies correct usage by noting that attachment_id comes from gmail_list_attachments, and provides an example. It could be more explicit about prerequisites and when not to use, but the sibling context clarifies differentiation.

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

gmail_get_messageGet Gmail MessageA
Read-onlyIdempotent

Get the full content of a specific Gmail message.

Args:

  • message_id (string): The message ID to retrieve

  • response_format ('markdown' | 'json'): Output format (default: 'markdown')

Returns: Full message content including headers and body text.

ParametersJSON Schema
NameRequiredDescriptionDefault
message_idYesThe ID of the message to retrieve
response_formatNoOutput format: 'markdown' for human-readable or 'json' for structured datamarkdown

TDQS

A3.7/5.0
Behavior2/5

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

Annotations already declare readOnlyHint=true, destructiveHint=false, idempotentHint=true. The description adds no behavioral context beyond what annotations provide, such as rate limits, authentication needs, or side effects. With annotations covering the safety profile, the description's 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.

Conciseness5/5

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

The description is concise with three clear sentences: purpose, parameters, return value. No unnecessary words, and the main action is front-loaded.

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

Completeness5/5

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

Given the tool's simplicity (2 params, full schema coverage, annotations for behavior), the description adequately covers purpose, parameters, and return format. No output schema exists, but the return explanation ('full content including headers and body text') is sufficient.

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

Parameters3/5

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

Schema coverage is 100%, so parameters are well-documented. The description repeats the parameter names and adds the default for response_format, but this is already in the schema. Baseline 3 is appropriate as the description adds little extra meaning.

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

Purpose5/5

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

The description clearly states 'Get the full content of a specific Gmail message', which is a specific verb-resource pair. It distinguishes from sibling tools like gmail_list_messages (which lists summaries) and gmail_get_attachment (which fetches attachments).

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

Usage Guidelines3/5

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

The description implies the tool is for retrieving full message content, but lacks explicit guidance on when to use it versus alternatives (e.g., gmail_list_messages for summaries). No when-not-to-use or alternative mentions.

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

gmail_get_threadGet Gmail ThreadA
Read-onlyIdempotent

Get all messages in a conversation thread.

Args:

  • thread_id (string): The thread ID to retrieve

  • response_format ('markdown' | 'json'): Output format (default: 'markdown')

Returns: All messages in the thread with full content.

ParametersJSON Schema
NameRequiredDescriptionDefault
thread_idYesThe ID of the thread to retrieve
response_formatNoOutput format: 'markdown' or 'json'markdown

TDQS

A4/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, destructiveHint=false, idempotentHint=true, so the description does not need to repeat that. It adds value by specifying the return value as 'All messages in the thread with full content', which goes beyond the annotations.

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

Conciseness5/5

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

The description is concise with only essential information. It is front-loaded with the main purpose and uses a clear Docstring-style structure. No extraneous sentences.

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

Completeness4/5

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

Given the low complexity (2 parameters, no output schema), the description adequately explains the return value. It covers the main behavior without gaps. Could be slightly more detailed about thread ID format, but sufficient.

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

Parameters3/5

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

Schema description coverage is 100%, and the description's Args section largely mirrors the schema. It adds a default value for response_format already present in the schema, so no significant additional meaning beyond the schema.

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

Purpose5/5

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

The description clearly states the verb 'Get' and resource 'all messages in a conversation thread', distinguishing it from siblings like gmail_get_message (single message) and gmail_list_threads (list threads).

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

Usage Guidelines3/5

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

The description implies usage when needing full thread content but does not explicitly state when to use this tool over alternatives or provide any exclusions. No when-not or alternative guidance is given.

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

gmail_list_attachmentsList Gmail AttachmentsA
Read-onlyIdempotent

List all attachments in a specific Gmail message.

Args:

  • message_id (string): The ID of the message to list attachments from

  • response_format ('markdown' | 'json'): Output format (default: 'markdown')

Returns: { "attachments": [ { "attachmentId": string, "filename": string, "mimeType": string, "size": number } ] }

ParametersJSON Schema
NameRequiredDescriptionDefault
message_idYesThe ID of the message to list attachments from
response_formatNoOutput format: 'markdown' or 'json'markdown

TDQS

A3.5/5.0
Behavior3/5

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

Annotations already provide readOnlyHint=true, destructiveHint=false, idempotentHint=true, so description's burden is lower. Description accurately reflects a read operation but adds no extra behavioral context like data freshness or auth requirements. The return structure is included, but that's output information.

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

Conciseness4/5

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

Description is efficient but includes redundant Args section that repeats the schema. The Returns section adds value since no output schema exists. Overall structure is clear and front-loaded with purpose.

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

Completeness4/5

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

Simple tool with 2 parameters, complete annotations, and no output schema. Description provides purpose and return structure, which is sufficient. However, missing usage guidelines prevents full completeness for an AI agent.

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

Parameters3/5

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

Schema description coverage is 100%, so baseline is 3. The description's Args section duplicates parameter info from the schema without adding new meaning (e.g., 'message_id' and 'response_format'). No clarification of values beyond what enum/default provides.

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

Purpose5/5

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

Description clearly states 'List all attachments in a specific Gmail message', using specific verb 'list' and resource 'attachments in a Gmail message'. This distinguishes it from siblings like gmail_get_attachment (which retrieves a specific attachment) and gmail_list_messages (which lists messages).

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

Usage Guidelines2/5

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

No guidance on when to use this tool versus alternatives. Does not mention prerequisites (e.g., need message_id from gmail_list_messages) or conditions like being read-only. Lacks any directive on appropriate context.

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

gmail_list_labelsList Gmail LabelsA
Read-onlyIdempotent

List all labels (folders) in Gmail.

Args:

  • response_format ('markdown' | 'json'): Output format (default: 'markdown')

Returns: List of all labels with their IDs and types.

ParametersJSON Schema
NameRequiredDescriptionDefault
response_formatNoOutput format: 'markdown' or 'json'markdown

TDQS

A4.1/5.0
Behavior4/5

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

The description discloses that the tool returns a 'List of all labels with their IDs and types,' which adds value beyond the annotations. Annotations already indicate read-only, idempotent, and non-destructive behavior.

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

Conciseness5/5

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

The description is extremely concise, with three short sentences covering purpose, input, and output, making it easy to parse quickly.

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

Completeness5/5

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

For a simple list tool with one optional parameter and clear annotations, the description provides adequate information about input and output, leaving no gaps.

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

Parameters3/5

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

The schema coverage is 100%, and the description restates the parameter details (output format options and default) without adding new semantic meaning.

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

Purpose5/5

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

The description clearly states 'List all labels (folders) in Gmail,' which is a specific verb and resource, and it is distinct from sibling tools that list messages or threads.

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

Usage Guidelines3/5

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

The description provides the purpose but does not explicitly state when to use this tool versus alternatives, nor does it mention use cases or exclusions.

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

gmail_list_messagesList Gmail MessagesA
Read-onlyIdempotent

List messages from Gmail with optional search filters.

Args:

  • query (string, optional): Gmail search query (e.g., 'from:boss@company.com is:unread', 'subject:invoice after:2024/01/01')

  • max_results (number): Maximum messages to return, 1-100 (default: 10)

  • label_ids (string[]): Filter by labels like 'INBOX', 'UNREAD', 'STARRED', 'SENT'

  • page_token (string, optional): Token for pagination

  • response_format ('markdown' | 'json'): Output format (default: 'markdown')

Returns: List of message summaries with ID, subject, from, date, and snippet.

Examples:

  • Unread emails: query="is:unread"

  • From specific sender: query="from:notifications@github.com"

  • Recent with attachment: query="has:attachment newer_than:7d"

ParametersJSON Schema
NameRequiredDescriptionDefault
queryNoGmail search query (e.g., 'from:someone@example.com is:unread', 'subject:invoice')
max_resultsNoMaximum messages to return (1-100)
label_idsNoFilter by label IDs (e.g., ['INBOX', 'UNREAD', 'STARRED'])
page_tokenNoToken for pagination to retrieve the next page of results
response_formatNoOutput format: 'markdown' for human-readable or 'json' for structured datamarkdown

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already indicate a safe, read-only, idempotent operation. The description adds behavioral context by detailing the return format, pagination via page_token, and output format options, going beyond what annotations provide.

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

Conciseness5/5

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

The description is concise and well-structured: a clear introductory sentence, a parameter list, a return description, and relevant examples. Every sentence adds value without redundancy.

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

Completeness5/5

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

Given no output schema, the description adequately covers return fields (subject, from, date, snippet), all parameters with examples, and pagination. It provides sufficient information for an agent to use the tool effectively without missing critical details.

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

Parameters4/5

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

With 100% schema description coverage, the schema already documents parameters. The description adds significant value with practical examples for query usage and clarification of response_format, enhancing understanding beyond the schema.

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

Purpose5/5

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

The description clearly states 'List messages from Gmail with optional search filters,' specifying the verb, resource, and scope. It effectively distinguishes from sibling tools like gmail_get_message and gmail_list_threads by focusing on listing messages with filters.

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

Usage Guidelines4/5

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

The description provides clear context for when to use this tool (listing messages with filters) and includes examples. However, it does not explicitly mention when not to use it or reference alternatives like gmail_get_message for single message retrieval.

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

gmail_list_threadsList Gmail ThreadsA
Read-onlyIdempotent

List conversation threads from Gmail.

Args:

  • query (string, optional): Gmail search query to filter threads

  • max_results (number): Maximum threads to return, 1-100 (default: 10)

  • label_ids (string[]): Filter by labels

  • page_token (string, optional): Token for pagination

  • response_format ('markdown' | 'json'): Output format (default: 'markdown')

Returns: List of threads with message count and snippet.

ParametersJSON Schema
NameRequiredDescriptionDefault
queryNoGmail search query to filter threads
max_resultsNoMaximum threads to return (1-100)
label_idsNoFilter by label IDs
page_tokenNoToken for pagination
response_formatNoOutput format: 'markdown' or 'json'markdown

TDQS

A3.6/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true and idempotentHint=true, and the description adds no further behavioral traits beyond indicating it retrieves data. No contradictions.

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

Conciseness4/5

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

The description is structured with bullet points but is somewhat verbose due to duplicating schema information; however, it is reasonably sized and clear.

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

Completeness3/5

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

The description explains the return value but lacks detail on the exact structure of threads. Pagination and parameter behavior are covered, but completeness is adequate given the absence of an output schema.

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

Parameters3/5

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

Schema description coverage is 100%, and the description essentially repeats the schema parameter descriptions without adding new meaning.

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

Purpose5/5

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

The description clearly states the tool lists conversation threads from Gmail with specific parameters and return value, distinguishing it from siblings like gmail_list_messages which list messages within a thread.

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

Usage Guidelines3/5

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

The description outlines the tool's function but does not explicitly provide when-to-use guidance or compare with alternatives, leaving usage context implied.

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

sheets_append_valuesAppend Spreadsheet ValuesA

Append rows of data to the end of a table in a Google Spreadsheet.

Args:

  • spreadsheet_id (string): The ID of the Google Spreadsheet

  • range (string): The A1 notation range defining the table to append to (e.g., 'Sheet1!A:D')

  • values (array): 2D array of values to append (rows of cells)

  • value_input_option ('RAW' | 'USER_ENTERED'): How to interpret input (default: 'USER_ENTERED')

  • insert_data_option ('OVERWRITE' | 'INSERT_ROWS'): How to insert data (default: 'INSERT_ROWS')

Returns: { "spreadsheetId": string, "tableRange": string, "updates": { "updatedRange": string, "updatedRows": number, "updatedCells": number } }

Examples:

  • Append rows: range="Sheet1!A:D", values=[["Alice", 30, "Engineer", "NYC"]]

ParametersJSON Schema
NameRequiredDescriptionDefault
spreadsheet_idYesThe ID of the Google Spreadsheet
rangeYesThe A1 notation range to append to (e.g., 'Sheet1!A:D')
valuesYes2D array of values to append (rows of cells)
value_input_optionNoHow to interpret input: 'RAW' for literal values, 'USER_ENTERED' to parse formulasUSER_ENTERED
insert_data_optionNoHow to insert: 'INSERT_ROWS' adds new rows, 'OVERWRITE' overwrites existingINSERT_ROWS

TDQS

A3.9/5.0
Behavior4/5

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

Annotations indicate mutation (readOnlyHint false) and non-destructive (destructiveHint false). The description adds that it appends rows, returns update metadata, and provides an example. It does not contradict annotations and adds useful behavioral context.

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

Conciseness4/5

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

The description is well-structured with a clear intro, parameter list, return type, and example. It is moderately sized and front-loads purpose. Could be slightly more concise but is efficient overall.

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

Completeness4/5

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

Despite no output schema, the description provides a detailed return structure. It covers parameters, defaults, and an example. Missing error scenarios or auth details, but sufficient for basic usage given complexity.

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

Parameters3/5

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

Schema coverage is 100%, so the description does not add significant meaning beyond what's already in the schema. It restates parameters and includes an example, but baseline is 3 due to full schema coverage.

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

Purpose5/5

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

The description clearly states 'Append rows of data to the end of a table in a Google Spreadsheet.' It uses a specific verb ('append') and resource, and the title reinforces the action. It distinguishes from siblings like updates and batch operations.

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

Usage Guidelines3/5

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

The description implies usage for adding new rows to the end of a table, but does not explicitly state when to use it over alternatives like sheets_update_values or sheets_batch_update. No when-not or alternative tool guidance is provided.

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

sheets_batch_get_valuesBatch Get Spreadsheet ValuesA
Read-onlyIdempotent

Read cell values from multiple ranges in a Google Spreadsheet in a single request.

Args:

  • spreadsheet_id (string): The ID of the Google Spreadsheet

  • ranges (string[]): Array of A1 notation ranges to read (e.g., ['Sheet1!A1:D10', 'Sheet2!A1:B5'])

  • major_dimension ('ROWS' | 'COLUMNS'): Return data by rows or columns (default: 'ROWS')

  • response_format ('markdown' | 'json'): Output format (default: 'markdown')

Returns: For JSON format: { "spreadsheetId": string, "valueRanges": [{ "range": string, "values": [[...]] }, ...] }

Examples:

  • Read multiple ranges: ranges=["Sheet1!A1:D10", "Sheet2!A:B"]

ParametersJSON Schema
NameRequiredDescriptionDefault
spreadsheet_idYesThe ID of the Google Spreadsheet
rangesYesArray of A1 notation ranges to read (e.g., ['Sheet1!A1:D10', 'Sheet2!A1:B5'])
major_dimensionNoWhether to return data by rows or columnsROWS
response_formatNoOutput format: 'markdown' for human-readable or 'json' for structured datamarkdown

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, destructiveHint=false, idempotentHint=true, openWorldHint=true, so the description is not burdened with safety disclosure. It adds value by specifying the batch nature and output format options, but does not elaborate on rate limits or permissions beyond what annotations imply.

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

Conciseness5/5

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

The description is concise: one sentence for purpose, bulleted args, return description, and example. No wasted words, 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.

Completeness5/5

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

Despite lacking an output schema, the description thoroughly explains the return format for both JSON and markdown. It covers all parameters with examples, making it complete for a read-only tool with well-annotated safety.

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

Parameters3/5

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

Schema coverage is 100%, so the schema already describes all parameters. The description reiterates them but adds an example and clarifies output formats, providing marginal additional value.

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

Purpose5/5

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

The description clearly states the action ('Read'), resource ('cell values from multiple ranges'), and context ('in a Google Spreadsheet in a single request'). It distinguishes from sibling tools like sheets_get_values by emphasizing batch and single-request capability.

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

Usage Guidelines3/5

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

The description implies usage for batch reading but does not explicitly state when to use this tool over siblings (e.g., sheets_get_values). No guidance on when not to use or alternatives is provided.

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

sheets_batch_updateBatch Update SpreadsheetA
Destructive

Apply batch updates to a Google Spreadsheet (formatting, charts, filters, conditional formatting, etc.).

Args:

  • spreadsheet_id (string): The ID of the Google Spreadsheet to update

  • requests (array): Array of batch update request objects

Common request types:

  • updateCells: Update cell data and formatting

  • addSheet: Add a new sheet

  • deleteSheet: Delete a sheet

  • updateSheetProperties: Rename sheet, change grid size

  • mergeCells: Merge cell ranges

  • addConditionalFormatRule: Add conditional formatting

  • addChart: Add a chart

  • setDataValidation: Add data validation rules

  • addFilterView: Add filter views

  • repeatCell: Apply formatting to a range

See Google Sheets API batchUpdate documentation for full request schema.

Returns: { "spreadsheetId": string, "replies": array }

Examples:

  • Add sheet: requests=[{ "addSheet": { "properties": { "title": "NewSheet" } } }]

  • Bold range: requests=[{ "repeatCell": { "range": {...}, "cell": { "userEnteredFormat": { "textFormat": { "bold": true } } }, "fields": "userEnteredFormat.textFormat.bold" } }]

ParametersJSON Schema
NameRequiredDescriptionDefault
spreadsheet_idYesThe ID of the Google Spreadsheet to update
requestsYesArray of batch update request objects (see Google Sheets API batchUpdate documentation)

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already show destructiveHint=true. The description adds context by listing destructive operations (deleteSheet) and provides examples of many request types, enhancing understanding 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.

Conciseness4/5

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

Well-organized with Args, Common request types, Returns, Examples. Each section is useful. Somewhat lengthy but justified given complexity. Front-loaded with main purpose.

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

Completeness4/5

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

Given the complexity and lack of output schema, the description covers common request types, provides examples, and describes return value. Sufficient for an agent to understand capabilities.

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

Parameters5/5

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

Schema coverage is 100%, but the description adds crucial meaning beyond schema by listing common request types, providing examples, and explaining the structure of the requests array. This is essential for correct usage.

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

Purpose5/5

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

Clearly states 'Apply batch updates to a Google Spreadsheet' with specific verb and resource, and lists common request types like addChart, deleteSheet, etc. Distinguishes from sibling tools by being a batch update.

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

Usage Guidelines3/5

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

No explicit when-to-use or when-not-to-use compared to alternatives like sheets_update_values or sheets_append_values. The description implies it for complex updates but lacks direct guidance.

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

sheets_clear_valuesClear Spreadsheet ValuesA
DestructiveIdempotent

Clear cell values from a specific range in a Google Spreadsheet (keeps formatting).

Args:

  • spreadsheet_id (string): The ID of the Google Spreadsheet

  • range (string): The A1 notation range to clear (e.g., 'Sheet1!A1:D10')

Returns: { "spreadsheetId": string, "clearedRange": string }

Examples:

  • Clear range: range="Sheet1!A1:D10"

  • Clear entire sheet: range="Sheet1"

ParametersJSON Schema
NameRequiredDescriptionDefault
spreadsheet_idYesThe ID of the Google Spreadsheet
rangeYesThe A1 notation range to clear (e.g., 'Sheet1!A1:D10')

TDQS

A4.2/5.0
Behavior4/5

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

Annotations indicate destructive and idempotent behavior. The description adds 'keeps formatting', which is a key behavioral nuance not captured by annotations. It also describes the return value.

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

Conciseness5/5

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

The description is concise: one sentence for the purpose, structured Args/Returns/Examples sections. Every part adds value without redundancy.

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

Completeness4/5

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

Given the schema richness and annotations, the description covers what the tool does, its parameters, return value, and examples. It is complete enough for a clear operation, though it could mention error handling or prerequisites.

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

Parameters4/5

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

Schema coverage is 100%, but the description adds value by providing examples of how to use the range parameter (including clearing an entire sheet) and clarifying the purpose of each parameter.

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

Purpose5/5

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

The description clearly states the action ('clear cell values'), the resource ('Google Spreadsheet'), and a key differentiator ('keeps formatting'). This distinguishes it from tools like sheets_update_values or sheets_delete_range.

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

Usage Guidelines3/5

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

The description implies usage for clearing values without affecting formatting, but does not explicitly state when to use this tool versus alternatives or when not to use it.

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

sheets_create_pivot_tableCreate Pivot TableA

Create a pivot table from spreadsheet data with full Google Sheets UI feature support.

Args:

  • spreadsheet_id (string): The ID of the Google Spreadsheet

  • source_range (string): A1 notation range (e.g., 'Sheet1!A1:E100', 'Sales!A:F')

  • destination_sheet_id (number, optional): Sheet ID for pivot (default: creates new sheet)

  • destination_sheet_name (string): Name for new sheet (default: 'Pivot Table')

  • rows/columns (array): Groupings (at least one row OR column required)

    • source_column: Column letter ('A') or index (0)

    • label: Custom display name

    • show_totals: Show subtotals (default: true)

    • sort_order: 'ASCENDING' or 'DESCENDING'

    • sort_by_value: { value_index: 0 } - Sort by aggregated value instead of alphabetically

    • group_rule: Bucketing options (pick one):

      • { date_time: { type: 'MONTH' } } - Group dates (YEAR, QUARTER, MONTH, DAY_OF_WEEK, etc.)

      • { histogram: { interval: 100, start: 0, end: 1000 } } - Numeric buckets

      • { manual: { groups: [{ group_name: 'West', items: ['CA', 'WA', 'OR'] }] } }

    • group_limit: Max groups to display

  • values (array, required): Aggregations

    • source_column: Column to aggregate (or use formula)

    • formula: Custom formula like '=Revenue/Quantity' (use with summarize_function: 'CUSTOM')

    • summarize_function: SUM, COUNT, COUNTA, COUNTUNIQUE, AVERAGE, MAX, MIN, MEDIAN, PRODUCT, STDEV, STDEVP, VAR, VARP, CUSTOM

    • name: Display name

    • calculated_display_type: 'PERCENT_OF_ROW_TOTAL', 'PERCENT_OF_COLUMN_TOTAL', 'PERCENT_OF_GRAND_TOTAL'

  • filters (array, optional): Filter source data

    • source_column: Column to filter

    • visible_values: ['Active', 'Pending'] - Show only these values

    • condition: { type: 'NUMBER_GREATER', values: [100] } - Filter by condition

  • value_layout: 'HORIZONTAL' or 'VERTICAL' (default: 'HORIZONTAL')

Examples:

  • Date grouped: rows=[{source_column: "A", group_rule: {date_time: {type: "MONTH"}}}], values=[{source_column: "E", summarize_function: "SUM"}]

  • Sorted by value: rows=[{source_column: "A", sort_by_value: {value_index: 0}, sort_order: "DESCENDING"}], values=[{source_column: "E", summarize_function: "SUM"}]

  • Filtered: filters=[{source_column: "B", visible_values: ["Active"]}], rows=[{source_column: "A"}], values=[{source_column: "E", summarize_function: "SUM"}]

  • Percentage: values=[{source_column: "E", summarize_function: "SUM", calculated_display_type: "PERCENT_OF_GRAND_TOTAL"}]

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.5/5.0
Behavior4/5

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

Annotations indicate readOnlyHint=false and destructiveHint=false, and the description adds that the tool creates a new pivot table (non-destructive write). It provides detailed behavioral context for parameters and examples, though it doesn't discuss permissions or side effects beyond creation.

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

Conciseness4/5

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

The description is well-structured with sections for args and examples, and is front-loaded with purpose. However, it is lengthy and could be slightly more concise by removing redundant phrasing while retaining completeness.

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

Completeness5/5

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

Given the complexity of pivot tables and the absence of an output schema, the description covers all necessary information: parameters, examples, and behavior. It is complete enough for an AI agent to correctly invoke the tool.

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

Parameters5/5

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

The input schema is empty, so the description bears full responsibility for parameter documentation. It provides detailed explanations for each parameter, including types, defaults, options (e.g., summarize_function enums), and nested object structures, with multiple examples demonstrating usage.

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

Purpose5/5

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

The description explicitly states 'Create a pivot table from spreadsheet data', which is a specific verb+resource. It distinguishes itself from sibling tools like sheets_get_values or sheets_batch_update by focusing on pivot table creation, a unique operation 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.

Usage Guidelines4/5

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

The description clearly indicates when to use this tool (to create a pivot table) and provides extensive parameter details. However, it does not explicitly state when not to use it or mention alternative tools for raw data retrieval, which would enhance guidance.

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

sheets_create_spreadsheetCreate Google SpreadsheetA

Create a new Google Spreadsheet with optional sheet names.

Args:

  • title (string): The title for the new spreadsheet

  • sheet_titles (string[], optional): Array of sheet names to create

Returns: { "spreadsheetId": string, "title": string, "spreadsheetUrl": string, "sheets": [{ "sheetId": number, "title": string }] }

Examples:

  • Create basic: title="My Spreadsheet"

  • With sheets: title="Budget", sheet_titles=["Income", "Expenses", "Summary"]

ParametersJSON Schema
NameRequiredDescriptionDefault
titleYesThe title for the new spreadsheet
sheet_titlesNoOptional array of sheet names to create (default: one sheet named 'Sheet1')

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already indicate non-readonly, non-destructive, non-idempotent, open-world. Description adds return format details and default sheet name behavior, providing useful behavioral context beyond annotations.

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

Conciseness5/5

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

Description is structured with Args, Returns, and Examples in a compact format. Every sentence is informative, no fluff, and the most important info (purpose) is front-loaded.

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

Completeness5/5

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

Given no output schema, description provides complete return type. Two simple parameters are fully described with examples. Context is sufficient for an agent to understand and invoke the tool correctly.

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

Parameters3/5

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

Schema coverage is 100%, so baseline is 3. Description restates schema info for title and sheet_titles but adds examples showing how parameters are used, which adds some meaning but doesn't significantly exceed schema.

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

Purpose5/5

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

Description clearly states 'Create a new Google Spreadsheet with optional sheet names.' Specific verb 'create', resource 'Google Spreadsheet', and optional sheet names differentiate it from sibling tools like sheets_get_spreadsheet or sheets_update_values.

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

Usage Guidelines3/5

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

Examples show common usage patterns (basic and with sheets) but no explicit when-to-use or when-not-to-use compared to alternatives like sheets_batch_update. Usage is implied but not fully guided.

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

sheets_duplicate_sheetDuplicate SheetA

Duplicate a sheet within the same spreadsheet.

Args:

  • spreadsheet_id (string): The ID of the Google Spreadsheet

  • sheet_id (number): The ID of the sheet to duplicate (use sheets_get_spreadsheet to find sheet IDs)

  • new_sheet_name (string, optional): Name for the new sheet (defaults to 'Copy of [original name]')

Returns: { "sheetId": number, "title": string, "index": number }

Examples:

  • Duplicate sheet: spreadsheet_id="...", sheet_id=0

  • Duplicate with new name: spreadsheet_id="...", sheet_id=0, new_sheet_name="January Data"

ParametersJSON Schema
NameRequiredDescriptionDefault
spreadsheet_idYesThe ID of the Google Spreadsheet
sheet_idYesThe ID of the sheet to duplicate (use sheets_get_spreadsheet to find sheet IDs)
new_sheet_nameNoName for the new sheet (defaults to 'Copy of [original name]')

TDQS

A3.8/5.0
Behavior3/5

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

Annotations already indicate readOnlyHint=false and destructiveHint=false. The description adds default name behavior and return format, but does not elaborate on side effects or failure modes.

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

Conciseness5/5

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

Concise with clear sections: purpose, args, returns, examples. Every sentence earns its place; no fluff.

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

Completeness4/5

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

Covers purpose, input, output, and examples. For a simple duplication tool with full schema and annotations, it is complete. Lacks permission requirements but acceptable.

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

Parameters3/5

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

Schema coverage is 100%, and the description provides the same parameter text. It adds minor value with examples, but no new meaning beyond the schema.

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

Purpose5/5

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

Description clearly states 'Duplicate a sheet within the same spreadsheet', using a specific verb and resource. No sibling tool does this, so it is well-distinguished.

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

Usage Guidelines3/5

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

No explicit when-to-use or when-not-to-use guidance. It implies usage through examples but does not compare to alternatives or specify prerequisites.

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

sheets_get_spreadsheetGet Google SpreadsheetA
Read-onlyIdempotent

Retrieve metadata and optionally cell data from a Google Spreadsheet.

Args:

  • spreadsheet_id (string): The ID of the Google Spreadsheet (found in the URL after /d/)

  • include_grid_data (boolean): Whether to include cell data (default: false)

  • response_format ('markdown' | 'json'): Output format (default: 'markdown')

Returns: Spreadsheet title, sheets info, and metadata. For JSON format: { "spreadsheetId": string, "title": string, "locale": string, "sheets": [{ "sheetId": number, "title": string, "rowCount": number, "columnCount": number }], "spreadsheetUrl": string }

Examples:

  • Get spreadsheet info: spreadsheet_id="1BxiMVs0XRA5nFMdKvBdBZjgmUUqptlbs74OgvE2upms"

ParametersJSON Schema
NameRequiredDescriptionDefault
spreadsheet_idYesThe ID of the Google Spreadsheet (found in the URL)
include_grid_dataNoWhether to include cell data (can be large)
response_formatNoOutput format: 'markdown' for human-readable or 'json' for structured datamarkdown

TDQS

A4.7/5.0
Behavior5/5

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

Annotations already declare readOnlyHint and idempotentHint, but the description goes beyond by detailing return formats, the optional include_grid_data flag, and a note about potentially large data. This provides a complete picture of tool behavior without contradictions.

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

Conciseness5/5

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

The description is well-structured with a clear one-liner, separate Args/Returns/Examples sections, and efficient use of bullet points and code blocks. Every sentence adds value without redundancy.

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

Completeness5/5

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

Given the three parameters and no output schema, the description provides a thorough explanation of return data (both markdown and JSON formats) and a concrete example. It fully compensates for the lack of an output schema.

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

Parameters4/5

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

The input schema has 100% coverage, and the description adds value by explaining where to find the spreadsheet_id (URL after /d/) and providing a concrete example. This extra context enhances schema information.

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

Purpose5/5

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

The description clearly states 'Retrieve metadata and optionally cell data from a Google Spreadsheet,' specifying both the verb (retrieve) and resource (metadata and cell data). It distinguishes itself from sibling tools like sheets_get_values by emphasizing the metadata retrieval capability.

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

Usage Guidelines4/5

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

The description implies usage for when metadata or both metadata and cell data are needed, but it does not explicitly contrast with siblings like sheets_get_values or provide when-not-to-use guidance. However, the context is clear enough for an agent to infer appropriate use.

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

sheets_get_valuesGet Spreadsheet ValuesA
Read-onlyIdempotent

Read cell values from a specific range in a Google Spreadsheet.

Args:

  • spreadsheet_id (string): The ID of the Google Spreadsheet

  • range (string): The A1 notation range to read (e.g., 'Sheet1!A1:D10' or 'A1:D10')

  • major_dimension ('ROWS' | 'COLUMNS'): Return data by rows or columns (default: 'ROWS')

  • response_format ('markdown' | 'json'): Output format (default: 'markdown')

Returns: For JSON format: { "range": string, "majorDimension": string, "values": [[cell values...], ...] }

Examples:

  • Read range: spreadsheet_id="...", range="Sheet1!A1:D10"

  • Read specific column: spreadsheet_id="...", range="Sheet1!A:A"

ParametersJSON Schema
NameRequiredDescriptionDefault
spreadsheet_idYesThe ID of the Google Spreadsheet
rangeYesThe A1 notation range to read (e.g., 'Sheet1!A1:D10' or 'A1:D10')
major_dimensionNoWhether to return data by rows or columnsROWS
response_formatNoOutput format: 'markdown' for human-readable or 'json' for structured datamarkdown

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, destructiveHint=false, idempotentHint=true, and openWorldHint=true. The description adds context on response formats (markdown vs JSON) and major_dimension behavior, going beyond annotations without contradiction.

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

Conciseness4/5

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

The description is front-loaded with the main purpose. It includes a parameter list and return format, which is slightly redundant with the schema but adds examples. It is well-structured and mostly concise.

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

Completeness4/5

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

With 4 parameters and no output schema, the description covers usage details, examples, and return format. Annotations provide safety context. It is complete enough for an agent to use correctly, though it could mention batch alternatives.

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

Parameters4/5

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

All parameters have schema descriptions (100% coverage). The description adds value with examples, default values, and explanation of response_format outputs, enhancing the schema's meaning.

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

Purpose5/5

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

The description clearly states 'Read cell values from a specific range in a Google Spreadsheet,' using a specific verb and resource. It distinguishes itself from sibling tools like sheets_append_values and sheets_update_values by focusing on read-only access for a single range.

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

Usage Guidelines3/5

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

The description provides examples but does not explicitly state when to use this tool versus alternatives like sheets_batch_get_values for multiple ranges or sheets_get_spreadsheet for entire sheet metadata. Usage context is implied but not explicit.

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

sheets_update_valuesUpdate Spreadsheet ValuesA
Destructive

Write cell values to a specific range in a Google Spreadsheet.

Args:

  • spreadsheet_id (string): The ID of the Google Spreadsheet

  • range (string): The A1 notation range to update (e.g., 'Sheet1!A1:D10')

  • values (array): 2D array of values to write (rows of cells)

  • value_input_option ('RAW' | 'USER_ENTERED'): How to interpret input (default: 'USER_ENTERED')

    • 'RAW': Values are stored as-is

    • 'USER_ENTERED': Values are parsed as if typed by user (formulas, dates work)

Returns: { "spreadsheetId": string, "updatedRange": string, "updatedRows": number, "updatedColumns": number, "updatedCells": number }

Examples:

  • Write data: range="Sheet1!A1", values=[["Name", "Age"], ["Alice", 30]]

  • Write formula: range="Sheet1!C1", values=[["=SUM(A1:B1)"]]

ParametersJSON Schema
NameRequiredDescriptionDefault
spreadsheet_idYesThe ID of the Google Spreadsheet
rangeYesThe A1 notation range to update (e.g., 'Sheet1!A1:D10')
valuesYes2D array of values to write (rows of cells)
value_input_optionNoHow to interpret input: 'RAW' for literal values, 'USER_ENTERED' to parse formulasUSER_ENTERED

TDQS

A4.3/5.0
Behavior4/5

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

Annotations indicate `destructiveHint: true`, and the description confirms a write operation. It adds value by detailing the return object structure and explaining the `value_input_option` behavior, going beyond the annotations.

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

Conciseness5/5

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

The description is concise, well-organized with clear sections (Args, Returns, Examples), and contains no filler. Every sentence adds value.

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

Completeness5/5

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

Despite no output schema, the description provides complete return structure. It covers all parameters with examples, making it self-contained for an agent to invoke correctly without external context.

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

Parameters4/5

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

Schema coverage is 100%, but the description adds practical examples (e.g., writing formulas) and explains enum options for `value_input_option`. This provides clarity beyond the schema descriptions.

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

Purpose5/5

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

The description clearly states 'Write cell values to a specific range in a Google Spreadsheet' with a specific verb ('Write') and resource ('cell values'). It effectively distinguishes from sibling tools like `sheets_get_values` or `sheets_clear_values`.

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

Usage Guidelines3/5

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

The description provides examples and parameter details but does not explicitly guide when to use this tool versus alternatives (e.g., `sheets_batch_update` or `sheets_append_values`). Usage is implied rather than stated with exclusions.

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

TDQS

A3.9/5.0
Disambiguation5/5

Each tool is clearly scoped to a specific Google Workspace service and action. The service prefixes (calendar_, docs_, drive_, gmail_, sheets_) combined with distinct verbs (e.g., create vs list vs get) ensure no two tools have overlapping purposes. For example, calendar_freebusy_query is distinct from calendar_list_events, and sheets_append_values is distinct from sheets_update_values.

Naming Consistency5/5

All tool names follow a consistent pattern: service_verb_noun in lowercase with underscores. Examples include calendar_list_events, sheets_create_spreadsheet, and gmail_get_message. There are no deviations like camelCase or mixed conventions, making the naming predictable and easy to parse.

Tool Count4/5

With 34 tools across five distinct services, the count is on the higher side but still reasonable for a comprehensive Google Workspace integration. Each service has a manageable number of tools (6-12), covering essential operations without being unnecessarily bloated. However, the total could feel heavy for agents that only need a subset of services.

Completeness3/5

The tool set covers many common operations but has notable gaps. Calendar lacks create/update/delete events, Drive lacks file upload and deletion, and Gmail lacks send and modify operations. These gaps can cause agent failures when such actions are required. The surface is strong for reading and basic manipulation but incomplete for full lifecycle management.

Maintenance

ActivityInactive
ResponsivenessNo issues

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

Latest Blog Posts

MCP directory API

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

curl -X GET 'https://glama.ai/api/mcp/v1/servers/EveryInc/google-workspace-mcp-server'

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