Skip to main content
Glama
adampaulwalker

Google Drive CRUD MCP Server

Google Drive CRUD MCP Server

Give Claude full read-write access to your Google Drive, Docs, Sheets, and Slides, running on a server you own with Google credentials you control.

Deploy on Railway

CRUD stands for create, read, update, delete - the four things this server lets Claude do to your files, as opposed to read-only access.

Start here if you are not a developer

The Railway button above deploys the server, but it still needs a Google Cloud project and an OAuth client before it will connect to Claude. The guided setup walks through every step, including a copy-paste prompt that has Claude do the Google Cloud and Railway configuration with you:

atlanticlabs.ai/mcp-google-drive

That is the recommended path. The manual instructions further down are for people who would rather run the commands themselves.

Once it is deployed, the connector URL to paste into claude.ai is:

https://<your-railway-domain>/mcp

The /mcp path matters. A request to the bare domain returns an error.

Related MCP server: google-mcp

What it does

The server exposes Google Drive, Docs, Sheets, and Slides to Claude as MCP tools. MCP is the Model Context Protocol, the open standard Claude uses to talk to outside systems.

Drive files

Tool

What it does

search_files

Query-based search across every drive the account can reach

list_recent_files

Most recently modified files, excluding trashed ones

get_file_metadata

Metadata for a single file by ID

read_file_content

Extract text from Docs, Sheets, PDF, and Office files

download_file_content

Raw bytes, returned inline as base64, capped at 25 MB by default

create_file

Create a file or folder, converting to a native Google type unless told not to

create_resumable_upload_session

Return an upload URL so large files go straight to Google instead of through Claude

import_to_google_doc

Import Markdown, DOCX, TXT, HTML, RTF, or ODT and convert to a native Doc

list_drive_items

List the children of a folder

create_drive_folder

Create a folder

copy_drive_file

Copy a file

update_drive_file

Rename, move, or trash a file (metadata only, not content)

get_drive_shareable_link

Get a shareable link

get_drive_file_permissions, check_drive_file_public_access

Inspect who has access

manage_drive_access, set_drive_file_permissions

Grant or revoke access

Google Docs

Tool

What it does

docs_get

Read a document's content and structure, including the character indexes needed to edit it

docs_batch_update

Apply a batch of structural edits: insert text, style, tables, images, and so on

docs_replace_all_text

Replace every occurrence of a string, which is how template filling works

Google Sheets

Tool

What it does

spreadsheets_get

Read a spreadsheet's structure and values

spreadsheets_batch_update

Apply batch changes, including native charts, formatting, and sheet operations

Google Slides

Tool

What it does

presentations_get

Read a presentation's slides and elements

presentations_batch_update

Apply batch changes: create slides, insert text and shapes, place native charts

The Docs, Sheets, and Slides tools expose the underlying batch update APIs rather than a simplified wrapper, so Claude can build a formatted document, a real spreadsheet chart, or a slide layout rather than only writing plain text into a file.

How it works

The server runs on your own hosting account and authenticates with your own Google OAuth client. Nothing routes through infrastructure belonging to me or to anyone else.

  • Your Google Cloud project. You create the OAuth client, so the consent screen names your project and the access tokens are issued to it.

  • Your server. Railway is the one-click option, but the server is a normal Python application with a Dockerfile and runs anywhere that can run a container.

  • OAuth 2.1, multi-user. Each person who connects authorizes with their own Google account and sees only their own files. The server validates bearer tokens against Google on every call.

  • No stored copies of your files. Downloads and inline uploads are held in memory only. When create_file is given a URL to fetch from, the bytes are buffered while they transfer: in stateless mode that buffer stays in memory up to 5 MB and spills to a temporary file beyond it, and otherwise it is a temporary file regardless of size. Either way the buffer is deleted when the call ends.

  • Scopes. Drive read and write, Sheets read and write, Slides read and write, plus basic profile and email for identifying the signed-in user. Read-only mode is available and drops the write scopes entirely.

Manual self-host

Prerequisites

  • Python 3.10 or newer (.python-version pins the exact version)

  • The uv package manager: curl -LsSf https://astral.sh/uv/install.sh | sh

  • A Google account and a Google Cloud project (the free tier is enough)

1. Configure Google Cloud

In console.cloud.google.com, select or create a project.

Enable the APIs. Under APIs and Services, then Library, enable each of: Google Drive API, Google Docs API, Google Sheets API, Google Slides API.

Configure the OAuth consent screen. Under APIs and Services, then OAuth consent screen:

  • User type: External, or Internal if you have a Google Workspace organization.

  • Add yourself under Test users so you can authorize while the consent screen is still in testing mode.

  • Add these scopes:

    • openid

    • https://www.googleapis.com/auth/userinfo.email

    • https://www.googleapis.com/auth/userinfo.profile

    • https://www.googleapis.com/auth/drive

    • https://www.googleapis.com/auth/drive.readonly

    • https://www.googleapis.com/auth/drive.file

    • https://www.googleapis.com/auth/spreadsheets

    • https://www.googleapis.com/auth/spreadsheets.readonly

    • https://www.googleapis.com/auth/presentations

    • https://www.googleapis.com/auth/presentations.readonly

Create an OAuth 2.0 client ID. Under APIs and Services, then Credentials, choose Create credentials, then OAuth client ID.

  • Application type: Web application, not Desktop app.

  • Authorized redirect URI: http://localhost:8000/oauth2callback for local work, or https://<your-domain>/oauth2callback for a deployed server.

  • Save the client ID and client secret.

2. Configure the environment

cp env.example .env

Fill in the client ID and secret. The recommended local configuration matches production:

GOOGLE_OAUTH_CLIENT_ID=your-client-id.apps.googleusercontent.com
GOOGLE_OAUTH_CLIENT_SECRET=your-client-secret
GOOGLE_OAUTH_REDIRECT_URI=http://localhost:8000/oauth2callback

WORKSPACE_MCP_TRANSPORT=streamable-http
WORKSPACE_MCP_PORT=8000
WORKSPACE_MCP_HOST=0.0.0.0
WORKSPACE_EXTERNAL_URL=http://localhost:8000

MCP_ENABLE_OAUTH21=true
WORKSPACE_MCP_STATELESS_MODE=true

Always set WORKSPACE_EXTERNAL_URL explicitly on a deployed server. It is the base URL the OAuth endpoints are built from. If it is unset, that base falls back to WORKSPACE_MCP_BASE_URI and the port, which defaults to http://localhost:8000 - correct locally, wrong anywhere else, and the usual cause of a redirect_uri_mismatch error. Setting GOOGLE_OAUTH_REDIRECT_URI explicitly, as above, pins the callback itself.

3. Install and run

uv sync
uv run main.py --transport streamable-http

The server listens on http://localhost:8000/mcp. To check it before wiring up a client:

npx @modelcontextprotocol/inspector
# Transport: streamable-http
# URL: http://localhost:8000/mcp
# Connect, complete the OAuth handshake, then list tools

Docker works too and reads the same .env:

docker compose up --build

4. Deploy

The Dockerfile is ready for Railway as it stands:

railway up --service gdrive-mcp

Set GOOGLE_OAUTH_CLIENT_ID, GOOGLE_OAUTH_CLIENT_SECRET, WORKSPACE_EXTERNAL_URL=https://<your-domain>, MCP_ENABLE_OAUTH21=true, WORKSPACE_MCP_STATELESS_MODE=true, and WORKSPACE_MCP_TRANSPORT=streamable-http in the Railway service variables, then add https://<your-domain>/oauth2callback to the authorized redirect URIs on the Google OAuth client.

5. Connect claude.ai

claude.ai fetches the server from Anthropic's servers, not from your browser, so it needs a public HTTPS URL. A deployed Railway service gives you one. For local testing, a tunnel works: run ngrok http 8000, then set WORKSPACE_EXTERNAL_URL and GOOGLE_OAUTH_REDIRECT_URI to the tunnel URL and add that callback to the Google OAuth client. Free ngrok URLs change on every restart, which means editing both places again each time.

In claude.ai, go to Settings, then Connectors, then Add custom connector, and enter https://<your-domain>/mcp. Authorize with a Google account that is listed under Test users on the consent screen.

One extra step if you want Claude to upload files it generates in code: in claude.ai, under Settings, then Capabilities, enable network egress and add *.googleapis.com and googleapis.com to the allowed domains. Without that, the connector itself still works, but a code execution step that pushes bytes out to Google is blocked by the sandbox firewall.

Claude egress allowlist with googleapis.com added

Local use with Claude Desktop

Claude Desktop speaks stdio rather than HTTP. Comment out WORKSPACE_MCP_TRANSPORT, MCP_ENABLE_OAUTH21, and WORKSPACE_MCP_STATELESS_MODE, then set:

USER_GOOGLE_EMAIL=you@example.com
MCP_SINGLE_USER_MODE=1
WORKSPACE_MCP_CREDENTIALS_DIR=./store_creds

In this mode the server also exposes a start_google_auth tool for kicking off the browser authorization flow. It is hidden when OAuth 2.1 is enabled, because the client handles authorization there instead.

Run uv run main.py --single-user, and add this to ~/Library/Application Support/Claude/claude_desktop_config.json:

{
  "mcpServers": {
    "gdrive": {
      "command": "uv",
      "args": ["run", "/absolute/path/to/this/repo/main.py", "--single-user"]
    }
  }
}

Environment variables

These are the variables a normal deployment needs. The code reads a number of others for reverse proxy, service account, and alternate credential store setups, which env.example and the source cover.

Variable

Required

Default

What it does

GOOGLE_OAUTH_CLIENT_ID

Yes

none

OAuth client ID from Google Cloud

GOOGLE_OAUTH_CLIENT_SECRET

Yes

none

OAuth client secret from Google Cloud

GOOGLE_OAUTH_REDIRECT_URI

No

<base URL>/oauth2callback

Callback URI, and it must match one registered on the OAuth client

WORKSPACE_EXTERNAL_URL

Yes when deployed

none

Public URL the server is reachable at, used as the base for the OAuth endpoints

WORKSPACE_MCP_BASE_URI

No

http://localhost

Base used with the port when WORKSPACE_EXTERNAL_URL is unset

WORKSPACE_MCP_TRANSPORT

No

stdio

stdio or streamable-http. Deployed servers need streamable-http

WORKSPACE_MCP_PORT

No

8000

Port to bind. Railway sets PORT, which takes precedence

WORKSPACE_MCP_HOST

No

0.0.0.0

Bind address

MCP_ENABLE_OAUTH21

No

false

Multi-user mode where each caller sends their own bearer token

WORKSPACE_MCP_STATELESS_MODE

No

off

Keep no per-session state on disk, needed behind a stateless proxy

WORKSPACE_MCP_CREDENTIALS_DIR

No

~/.google_workspace_mcp/credentials

Where credentials persist when not stateless, for local use

WORKSPACE_MCP_READ_ONLY

No

off

Drop the write scopes and disable every mutating tool

USER_GOOGLE_EMAIL

No

none

Pin the server to one Google account in single-user mode

MCP_SINGLE_USER_MODE

No

off

Single-user mode, an alternative to OAuth 2.1

DOWNLOAD_FILE_CONTENT_MAX_MB

No

25

Largest file download_file_content will return inline

Troubleshooting

Symptom

Cause and fix

redirect_uri_mismatch

The redirect URI does not exactly match the one registered in Google Cloud. Check protocol, port, and path.

Access blocked: This app's request is invalid

The consent screen is unpublished and your account is not in the test-users list.

Drive API has not been used in project ... before or it is disabled

An API was not enabled. The error message includes a direct link to enable it.

A deployed server sends users to a localhost URL during authorization

WORKSPACE_EXTERNAL_URL is not set, so the OAuth base fell back to http://localhost:8000. Point it at the public URL.

A POST to the server returns 405

The connector URL is missing the /mcp path.

--single-user is incompatible with OAuth 2.1 mode

Both MCP_ENABLE_OAUTH21=true and --single-user are set. Pick one.

Claude can call tools but uploading a generated file fails

Claude's sandbox is blocking outbound traffic to Google. Add *.googleapis.com to the egress allowlist in claude.ai settings.

Attribution

This is a fork of the google_workspace_mcp project, taken at commit 5495c83cd3ac503d00cd8015de944c9949cd6443. The OAuth machinery, server scaffold, tool registry, and Drive helpers are that project's work, and this fork would not exist without it.

What changed here: the Google services this fork does not need were removed (Gmail, Calendar, Forms, Chat, Tasks, Contacts, Search, and Apps Script), which keeps the consent screen and the authorization blast radius down to Drive, Docs, Sheets, and Slides; the overlapping Drive tools were renamed and reshaped to match the tool surface of Claude's built-in Drive connector, so skills written against the built-in tools work unchanged; binary uploads were fixed, since upstream encoded content as UTF-8 regardless of the file type and turned an uploaded xlsx or pptx into a file containing the literal base64 text; and the Docs, Sheets, and Slides batch update tools were added for native-chart and template-filling workflows.

License

MIT, inherited from upstream. See LICENSE.

Maintained by Adam Walker at Atlantic Labs AI. Questions: adam@atlanticlabs.ai

Available Tools

25 tools
check_drive_file_public_accessCheck Drive File Public AccessA
Read-onlyIdempotent

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

ParametersJSON Schema
NameRequiredDescriptionDefault
drive_idNoID of the shared drive to scope the search to. When set, the underlying files.list call uses corpora='drive' and the given driveId, which is required to reliably find files that live only in that shared drive. When None, behaviour is unchanged (default API corpora applies).
file_nameYesThe name of the file to check.
user_google_emailYesThe user's Google email address. Required.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.8/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, covering the safety profile. The description adds that the search is performed by file name rather than ID, but it does not disclose additional behavioral nuance such as what counts as 'public link sharing', how the user email is used, or whether only the first match is evaluated. No contradiction with annotations exists.

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

Conciseness5/5

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

The description is a single, front-loaded sentence with no filler. It communicates the essential action and outcome immediately, and every word contributes to the tool's 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 strong annotations, 100% schema coverage, and the presence of an output schema, the description covers the core intent well. The only notable gap is the potential ambiguity around what exactly qualifies as 'public link sharing' and whether the tool returns a simple boolean or detailed sharing information, but the output schema likely addresses the return format.

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

Parameters3/5

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

Schema description coverage is 100%, including a notably detailed explanation of the drive_id parameter and its effect on the underlying files.list call. The description itself adds no new parameter-level meaning beyond restating that the tool searches by file name and inspects public link sharing, so the schema carries the load.

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

Purpose5/5

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

The description states a specific verb and resource: 'Searches for a file by name and checks if it has public link sharing enabled.' This clearly distinguishes it from siblings like get_drive_file_permissions or get_drive_shareable_link, since the focus is specifically on detecting public link sharing rather than listing permissions or retrieving links.

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 usage context: use this tool when you need to verify whether a file is publicly shareable via link. However, it does not explicitly state when not to use it or name alternatives such as get_drive_file_permissions or get_drive_shareable_link, leaving the routing decision to the agent's inference.

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

copy_drive_fileCopy Drive FileB

Creates a copy of an existing Google Drive file.

This tool copies the template document to a new location with an optional new name. The copy maintains all formatting and content from the original file.

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

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.2/5.0
Behavior3/5

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

Annotations already cover the safety profile (non-read-only, non-idempotent, non-destructive), so the bar is lower. The description adds useful context — the copy 'maintains all formatting and content from the original' and can be placed in a new location — but omits copy-specific behavioral caveats such as whether sharing settings or permissions are inherited by the copy, which agents often need for Drive operations. No contradiction with annotations.

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

Conciseness4/5

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

Three compact sentences with the core purpose front-loaded in the first. The third sentence earns its place by adding the fidelity guarantee (formatting and content preserved), while the second is largely redundant with the first plus the schema — a minor flaw, not a structural problem.

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 output schema and 100% parameter coverage give the agent a complete input contract, and annotations cover mutability and safety, so return values need no explanation. What is missing are copy-specific caveats that matter for correct invocation: whether permissions are inherited by the copy, whether a copied native Google file stays in its original format, and the access required on the source file.

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

Parameters3/5

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

Schema description coverage is 100%, so the baseline is 3: the schema already documents file_id, new_name including the 'Copy of [original name]' default, parent_folder_id defaulting to root, and user_google_email. The description restates 'new location' and 'optional new name' at a high level but adds no meaning beyond what the schema's parameter descriptions already provide.

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 first sentence names a specific verb+resource: 'Creates a copy of an existing Google Drive file,' which clearly separates it from creation tools like create_drive_file. However, it never explicitly names a sibling it is NOT, and the second sentence's reference to 'the template document' slightly muddies whether this operates on one specific template or on any arbitrary Drive file.

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

Usage Guidelines2/5

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

No sentence tells an agent when to choose this tool versus alternatives such as create_drive_file (blank new file), import_to_google_doc (converting imports), update_drive_file (editing an existing file), or get_drive_file_content (reading). Among roughly 100 sibling tools, the only routing signal is the word 'copy' itself, which is definitional rather than actual usage guidance.

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

create_drive_folderCreate Drive FolderA

Creates a new folder in Google Drive, supporting creation within shared drives.

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

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4/5.0
Behavior3/5

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

Annotations already convey the key behavioral traits: non-read-only, non-idempotent, non-destructive, open-world. The description confirms the mutating creation behavior and adds shared-drive support as extra context. It does not detail auth requirements or side effects, but the annotation coverage lowers the burden.

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

Conciseness5/5

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

The description is a single, front-loaded sentence that states the core action first and adds the shared-drive qualifier without redundancy. It contains no filler and does not repeat schema or annotation information.

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

Completeness4/5

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

For a straightforward create operation, the description, schema, and annotations together give an agent enough to invoke the tool correctly: required parameters are documented, safety traits are annotated, and an output schema exists. Minor details like permission prerequisites are unstated but are not essential for basic selection and invocation.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already documents all parameters. The description's shared-drive mention aligns with and echoes the existing parent_folder_id schema note rather than adding materially new parameter meaning.

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

Purpose5/5

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

The description states a specific verb and resource: 'Creates a new folder in Google Drive.' It clearly distinguishes from siblings like create_drive_file by limiting the action to folders, and it adds the meaningful shared-drive capability without ambiguity.

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

Usage Guidelines4/5

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

The description gives clear context for when to use the tool: creating folders in Google Drive, including within shared drives. It does not explicitly name alternatives or exclusions, but the resource type is unambiguous enough that an agent can route to this tool for folder creation versus file creation.

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

create_fileCreate FileA

Creates a new file in Google Drive, supporting creation within shared drives. Accepts either direct content or a fileUrl to fetch the content from.

ParametersJSON Schema
NameRequiredDescriptionDefault
titleYesThe name for the new file.
contentNoIf provided, the content to write to the file. Encoding is chosen by mimeType: text/* and application/{json,xml,javascript,yaml,x-yaml} are UTF-8 encoded; everything else is treated as base64 and decoded to raw bytes (use this for xlsx, pptx, pdf, images, and any other binary payload).
fileUrlNoIf provided, fetches the file content from this URL. Supports file://, http://, and https:// protocols.
mimeTypeNoThe MIME type of the source content. Defaults to 'text/plain'.text/plain
parentIdNoThe ID of the parent folder. Defaults to 'root'.root
user_google_emailYes
disableConversionToGoogleTypeNoWhen False (default), source MIME types with a Google-native equivalent are auto-converted (e.g. text/csv → Sheet, text/plain → Doc, docx → Doc). Set to True to store the file as-is.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already indicate a write operation (readOnlyHint: false) and non-destructive behavior (destructiveHint: false). The description adds valuable behavioral context: it supports creation within shared drives and accepts either direct content or a fileUrl for fetching content. This goes beyond the structured annotations and helps the agent understand key execution modes, though it could disclose more about side effects (e.g., auto-conversion 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 two sentences long, front-loaded with the primary action, and includes only essential details. There is no redundancy or filler, making it easy to parse and act upon.

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

Completeness4/5

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

Given that an output schema exists (so return values are defined) and annotations cover key safety hints, the description covers the main context: what the tool creates, where it can create, and how content is supplied. It does not address edge cases like precedence when both content and fileUrl are provided, but for a creation tool this is minor and leaves the overall description reasonably complete.

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

Parameters4/5

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

Schema description coverage is 86%, which is high, so the baseline is 3. The description adds relational meaning that the schema does not explicitly state: 'content' and 'fileUrl' are mutually exclusive alternatives for supplying file content. This clarifies the intended usage of the parameters and earns a point above baseline.

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

Purpose5/5

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

The description clearly states the action ('Creates a new file in Google Drive') and adds a distinguishing scope ('supporting creation within shared drives'). This differentiates it from siblings like create_drive_folder or copy_drive_file, which create or copy different entity types.

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: if you need to create a file in Drive, this is the tool. It mentions support for shared drives and content sources, but does not explicitly contrast with alternatives (e.g., when to use import_to_google_doc or create_resumable_upload_session). While the context is clear, exclusions or explicit alternative references are absent.

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

create_resumable_upload_sessionCreate Resumable Upload SessionA

Creates a Google Drive resumable upload session and returns the upload URL.

The caller (e.g. a skill running in claude.ai's sandbox) uses the returned upload_url to PUT raw file bytes directly to Google — bypassing MCP transport limits on large content arguments. Only the short URL travels through MCP; the bytes go straight from the sandbox to Google.

ParametersJSON Schema
NameRequiredDescriptionDefault
titleYesThe name for the new file.
mimeTypeYesThe source MIME type of the content (e.g. "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet" for xlsx, "text/plain" for markdown). This is what the bytes on the wire actually are.
parentIdNoThe ID of the parent folder. Defaults to 'root'.root
user_google_emailYes
disableConversionToGoogleTypeNoWhen False (default), source MIME types with a Google-native equivalent are auto-converted (e.g. text/csv → Sheet, xlsx → Sheet). Set to True to store the file as-is — REQUIRED for binary uploads that must not be converted (xlsx, pptx, pdf, images) and for keeping markdown as .md rather than Google Doc.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already indicate non-read-only, non-idempotent, non-destructive behavior. The description adds valuable behavioral context: the returned upload_url is used to PUT raw bytes directly to Google, only the short URL travels through MCP, and the bytes bypass MCP transport limits. No contradiction with annotations.

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

Conciseness5/5

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

Three sentences, front-loaded with the primary purpose, followed by concise operational detail. Every sentence earns its place; no filler or redundancy.

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

Completeness5/5

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

Given the tool's moderate complexity, the presence of an output schema, and annotations, the description is complete: it explains the two-phase upload flow, the reason for the resumable session, and how the returned URL is used. No significant gaps remain for an agent to select and invoke the tool correctly.

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

Parameters3/5

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

Schema description coverage is 80%, so the schema already documents most parameters well. The description does not add parameter-level meaning beyond the schema, but it does explain the overall flow with upload_url. This meets the baseline for high schema coverage without compensating for the undocumented user_google_email.

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 opens with a specific verb+resource statement: 'Creates a Google Drive resumable upload session and returns the upload URL.' This clearly distinguishes it from sibling tools like create_file or import_to_google_doc by focusing on the resumable session and the returned upload_url.

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

Usage Guidelines4/5

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

The description explicitly states the intended caller (a skill in claude.ai's sandbox) and explains that this tool should be used to bypass MCP transport limits for large content. It gives clear context on when to invoke it, though it does not explicitly name alternative tools or provide when-not-to-use exclusions.

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 DocA

Apply a batch of edit requests to a Google Doc (documents.batchUpdate).

Accepts any Docs API request type (insertText, deleteContentRange, updateTextStyle, insertTable, insertInlineImage, ...). Indexes shift as earlier requests in the batch insert or delete content, so order edits from the END of the document toward the start, or send one request per call. Get current indexes from docs_get first. Pass writeControl with the revision id from docs_get to fail fast if the document changed since — otherwise stale indexes edit the wrong ranges silently.

ParametersJSON Schema
NameRequiredDescriptionDefault
requestsYesThe batchUpdate `requests` array (list of request dicts).
documentIdYesTarget document id.
writeControlNoOptional {"requiredRevisionId": "..."}.
user_google_emailYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.7/5.0
Behavior5/5

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

It discloses the critical, non-obvious behavior that 'Indexes shift... so order edits from the END' and warns that 'stale indexes edit the wrong ranges silently.' This goes well beyond the sparse annotations (readOnlyHint false, etc.) by explaining the failure mode and how to prevent it through writeControl.

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 four sentences, each adding substantive value: purpose, accepted types, ordering strategy, and concurrency control. It is front-loaded and contains no filler or 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?

For a tool of this complexity, the description covers all essential operational aspects: supported request types, index-shift ordering, the need to fetch current indexes, and optional writeControl for conflict detection. The output schema exists, so it need not describe return values. This is complete and actionable.

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 schema covers 75% of parameters, but the description adds meaningful semantic detail. It explains that the requests array can contain any Docs API request type, that indexes shift, and that writeControl should carry the revision id from docs_get. The only undocumented param, user_google_email, is self-explanatory by name.

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 opens with 'Apply a batch of edit requests to a Google Doc (documents.batchUpdate)', using a specific verb and resource. It also lists the accepted request types (insertText, deleteContentRange, etc.), which distinguishes it from sibling tools like docs_get or docs_replace_all_text.

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

Usage Guidelines4/5

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

The description gives clear usage context: 'Get current indexes from docs_get first' and 'order edits from the END of the document toward the start, or send one request per call.' It also explains when to use writeControl. However, it does not explicitly name alternatives or state when not to use this tool, so it falls short of a full 5.

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

docs_getGet Google DocA
Read-onlyIdempotent

Read a Google Doc's content and structure (documents.get).

The returned resource's body.content elements carry startIndex/endIndex for every paragraph and text run — use them to compute the index arguments that docs_batch_update requests need, and to verify an edit landed.

ParametersJSON Schema
NameRequiredDescriptionDefault
fieldsNoOptional partial-response field mask (e.g. `title,body(content(startIndex,endIndex,paragraph))`) to keep large documents readable.
documentIdYesTarget document id.
user_google_emailYes
includeTabsContentNoSet True for documents with multiple tabs — the default response only carries the first tab's content in `body`, while `tabs[]` holds the rest. Note docs_replace_all_text applies across ALL tabs regardless.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, openWorldHint, idempotentHint, and destructiveHint=false, so the safety profile is covered. The description adds behavioral context beyond that: it details what the returned body.content contains (index ranges for every paragraph/text run) and how to leverage that data. This is useful, non-redundant information that helps the agent use the tool correctly.

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

Conciseness5/5

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

The description is two sentences long, front-loads the core action, and each sentence earns its place. The first sentence states the purpose, and the second explains a practical use of the output. There is no filler, redundancy, or unnecessary detail.

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

Completeness4/5

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

Given the output schema exists, the description doesn't need to enumerate return values. It adds contextual value by connecting this tool's output to docs_batch_update and docs_replace_all_text, which are sibling tools, and hints at the multi-tab caveat indirectly via includeTabsContent. It lacks explicit info about auth requirements, but openWorldHint suggests external auth is handled elsewhere. Overall, it is complete enough for an agent to invoke it correctly.

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

Parameters3/5

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

The input schema already provides descriptions for fields, documentId, and includeTabsContent, covering 75% of parameters. The description mentions the body.content structure but does not add new parameter-level semantics. It doesn't explain user_google_email, but the schema omits a description there too. Since the schema does most of the work, this falls at the baseline of 3.

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

Purpose5/5

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

The description states a specific verb ('Read'), a clear resource ('Google Doc's content and structure'), and identifies the underlying API ('documents.get'). This sets it apart from sibling tools like docs_batch_update or get_file_metadata, making the purpose unambiguous.

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

Usage Guidelines4/5

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

The description explains why this tool is valuable—to obtain startIndex/endIndex pairs needed for docs_batch_update requests and to verify edits. While it doesn't explicitly say 'use this instead of X', it clearly conveys the primary use case and the context in which this tool is necessary, which is more than minimal guidance.

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

docs_replace_all_textReplace All Text in Google DocA

Find-and-replace text across a Google Doc (documents.batchUpdate with one replaceAllText request per item). Preserves surrounding formatting, so it is the safest way to fill placeholders in a template document.

ParametersJSON Schema
NameRequiredDescriptionDefault
matchCaseNoDefault case-sensitivity for items that don't set their own. Defaults to True.
documentIdYesTarget document id.
replacementsYesList of {"find": str, "replace": str} dicts. Each may override the default case behavior with its own "matchCase".
user_google_emailYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.2/5.0
Behavior4/5

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

Beyond annotations indicating mutation, the description explains that it uses documents.batchUpdate with one replaceAllText request per item and preserves formatting, adding behavioral context not in annotations. This helps the agent understand side effects.

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

Conciseness5/5

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

Two sentences, front-loaded with the core function and followed by a key benefit. Every word earns its place.

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

Completeness4/5

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

The description covers the primary use case, behavior, and safety for templates. Given the output schema covers return values and annotations cover mutation flags, no major gaps exist.

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

Parameters3/5

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

Schema covers 75% of parameters with descriptions; the description doesn't add parameter-specific details but ties the replacements to replaceAllText semantics. The user_google_email parameter remains undocumented, but the overall schema coverage makes up for it.

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

Purpose5/5

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

The description clearly states the tool performs find-and-replace across a Google Doc, with a specific verb ('Replace') and resource. It also distinguishes it from broader tools like docs_batch_update by emphasizing placeholder-friendly behavior.

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

Usage Guidelines4/5

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

The description notes it preserves surrounding formatting and is the 'safest way to fill placeholders in a template document,' which gives a clear when-to-use context. It doesn't explicitly mention alternatives, but the context implies this over generic batch update.

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

download_file_contentDownload File ContentA
Read-onlyIdempotent

Downloads a Google Drive file and returns its raw bytes as a base64-encoded blob.

For Google native files (Docs, Sheets, Slides), exports to a useful format:

  • Google Docs -> PDF (default) or DOCX if export_format='docx'

  • Google Sheets -> XLSX (default), PDF if export_format='pdf', or CSV if export_format='csv'

  • Google Slides -> PDF (default) or PPTX if export_format='pptx'

For other files, downloads the original file format.

Size limit: DOWNLOAD_FILE_CONTENT_MAX_MB env var (default 25 MB). Files larger than the limit return an error pointing to read_file_content for text extraction, or a Drive shareable link as a fallback.

ParametersJSON Schema
NameRequiredDescriptionDefault
fileIdYesThe Google Drive file ID to download.
export_formatNoOptional export format for Google native files. Options: 'pdf', 'docx', 'xlsx', 'csv', 'pptx'.
user_google_emailYes

TDQS

A4.8/5.0
Behavior5/5

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

While annotations already indicate readOnlyHint=true and destructiveHint=false, the description adds valuable behavioral context beyond these flags. It discloses the size limit (DOWNLOAD_FILE_CONTENT_MAX_MB, default 25 MB), the error behavior for oversized files, and the default export formats for Docs/Sheets/Slides. This transparency helps the agent anticipate outcomes and plan fallbacks, going well beyond the structured 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, front-loading the core purpose in the first sentence, then using a bullet list for export formats, and a short paragraph for size limits. Every sentence adds value, but it is slightly longer than strictly necessary. The structure aids readability, but a more concise version could achieve the same clarity with fewer words. Overall, it is appropriately sized for the complexity of the tool.

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

Completeness5/5

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

Given the tool has 3 parameters, no output schema, and several sibling tools, the description is remarkably complete. It explains the return format (base64 bytes), export format behavior for native files, the original format for other files, the size limit with its error handling, and the fallback to read_file_content or shareable links. No major gaps remain: the agent knows what to expect and how to handle edge cases, making the description sufficient even without 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 description coverage is 67%, with fileId and export_format having schema descriptions but user_google_email having none. The description enriches export_format semantics by specifying default export formats (e.g., Docs -> PDF/DOCX, Sheets -> XLSX/PDF/CSV, Slides -> PDF/PPTX), which the schema's simple options list does not provide. However, it does not add any information about user_google_email, leaving that parameter under-described. This is a good but not perfect compensation for the coverage gap.

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

Purpose5/5

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

The description clearly states the tool's purpose: 'Downloads a Google Drive file and returns its raw bytes as a base64-encoded blob.' It uses a specific verb ('downloads') and resource ('Google Drive file'), and further distinguishes itself by describing export behavior for native Google files and the fallback to read_file_content for large files. This makes it distinct from siblings like read_file_content which handles text extraction.

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

Usage Guidelines5/5

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

The description provides explicit guidance on when to use this tool versus alternatives. For large files, it states that an error 'pointing to read_file_content for text extraction, or a Drive shareable link as a fallback' is returned, directly indicating the alternative. It also explains the export format options for different Google native file types, helping users decide when to specify export_format.

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

get_drive_file_permissionsGet Drive File PermissionsB
Read-onlyIdempotent

Gets detailed metadata about a Google Drive file including sharing permissions.

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

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.4/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false, establishing the safety profile. The description adds the specific scope of 'including sharing permissions,' which clarifies the returned metadata. However, it does not add further behavioral context such as whether the operation requires prior authentication (though openWorldHint is true) or how permissions are represented, so it provides only marginal value beyond the annotations.

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

Conciseness5/5

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

The description is a single, focused sentence that is front-loaded with the action and resource. It contains no redundant information 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.

Completeness4/5

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

Given the tool has only two parameters, a thorough output schema, and strong annotations (readOnly, idempotent, non-destructive), the description is largely complete for a straightforward read operation. The only gap is the lack of usage guidance, but that is captured under a separate dimension. The description sufficiently conveys what the tool does without needing to describe return values thanks to the output schema.

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

Parameters3/5

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

The schema descriptions fully cover both parameters (file_id and user_google_email), so the description does not need to add much. It does not explain any additional meaning beyond the schema, such as how the parameters interact or any format expectations. With 100% schema coverage, the baseline of 3 is appropriate.

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

Purpose4/5

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

The description uses a specific verb ('Gets') and identifies the resource ('detailed metadata about a Google Drive file including sharing permissions'). It clearly states the tool's function, though it does not explicitly distinguish it from sibling tools like get_file_metadata or check_drive_file_public_access, so it misses the top score for sibling differentiation.

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

Usage Guidelines2/5

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

The description provides no guidance on when to use this tool versus alternatives. It does not mention any prerequisites, exclusions, or comparisons with sibling tools such as get_file_metadata or check_drive_file_public_access, leaving the agent without usage context.

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

get_file_metadataGet File MetadataA
Read-onlyIdempotent

Returns metadata for a single Google Drive file by ID.

ParametersJSON Schema
NameRequiredDescriptionDefault
fileIdYesThe Drive file ID.
user_google_emailYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.7/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, covering the safety profile. The description adds the 'single file by ID' scoping, which is useful, but does not describe authentication requirements, return format, or potential errors. Since annotations carry most of the burden, a 3 is appropriate.

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

Conciseness5/5

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

The description is a single sentence with no filler. It directly states the action, target, and identifier, earning its place without waste.

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 metadata lookup with rich annotations and an output schema, the description is largely sufficient. However, the missing guidance on user_google_email and no explicit tie to sibling tools prevent a perfect score. Overall, it provides enough context for basic correct usage.

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

Parameters2/5

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

Schema description coverage is only 50% (fileId is described, user_google_email is not). The description mentions file ID but adds no further meaning for user_google_email. It does not compensate for the missing schema description, leaving parameter semantics incomplete.

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

Purpose5/5

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

The description clearly states a specific action ('Returns metadata') on a specific resource ('a single Google Drive file'), identified by ID. This distinguishes it from sibling tools like 'read_file_content' or 'download_file_content', which deal with file content rather than metadata.

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 fetching metadata when you have a file ID, but it does not explicitly state when to prefer this over alternatives or mention any exclusions. Given the simple scope, context is reasonably clear, but there is no direct guidance on alternate tools.

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

import_to_google_docImport to Google DocA

Imports a file (Markdown, DOCX, TXT, HTML, RTF, ODT) into Google Docs format with automatic conversion.

Google Drive automatically converts the source file to native Google Docs format, preserving formatting like headings, lists, bold, italic, etc. For batch operations, prefer file_path for files on disk so callers do not need to load full file contents into their context.

ParametersJSON Schema
NameRequiredDescriptionDefault
contentNoText content for text-based formats. Use only for short snippets or content already in memory.
file_urlNoRemote URL to fetch the file from (http/https).
file_nameYesThe name for the new Google Doc (extension will be ignored).
file_pathNoLocal file path or file:// URL for any supported format (MD, TXT, HTML, DOCX, ODT, RTF). Appropriate for larger files than content, but file_path may still load the file into memory or perform non-streaming reads. Avoid very large files that could exceed memory or time limits; use streaming/chunked uploads or an alternative API for huge files.
folder_idNoThe ID of the parent folder. Defaults to 'root'.root
source_formatNoSource format hint ('md', 'markdown', 'docx', 'txt', 'html', 'rtf', 'odt'). Auto-detected from file_name extension if not provided.
user_google_emailYesThe user's Google email address. Required.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.2/5.0
Behavior4/5

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

The description discloses behavioral details such as automatic conversion and preservation of formatting, which are not in the annotations. It also warns about file_path memory limitations and recommends avoiding very large files. However, it does not explicitly state that a new file is created (vs. updating an existing one), though that is implied. Overall, it adds meaningful context beyond the annotations.

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

Conciseness5/5

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

The description is concise, consisting of three short sentences. It conveys all essential information without redundancy or unnecessary detail. The structure is efficient, with the main action stated first and operational hints provided afterward.

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 of the tool (7 parameters) and the presence of an output schema, the description is quite complete. It covers the core function, supported formats, and important caveats about file handling. It does not mention the return value, but that is presumably documented in the output schema. The description sufficiently contextualizes the tool for an agent to use it effectively.

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 schema already provides detailed descriptions for each parameter, including specific guidance for file_path and source_format. The tool description adds an extra hint about preferring file_path for batch operations, which is not in the schema. This supplementary guidance improves parameter understanding beyond the baseline, though the schema is already quite thorough.

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

Purpose5/5

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

The description clearly states the action ('imports a file') with specific formats (Markdown, DOCX, TXT, HTML, RTF, ODT) and the result (into Google Docs format with automatic conversion). It distinguishes the tool by its conversion capability, which is directly relevant to the tool's function.

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 some guidance on parameter choice ('For batch operations, prefer file_path') but does not explicitly compare this tool to alternatives like create_drive_file or import_to_google_slides. It lacks clear when-to-use vs when-not-to-use guidance beyond a single hint, so it is not fully explicit.

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

list_drive_itemsList Drive ItemsA
Read-onlyIdempotent

Lists files/folders or shared drive containers, supporting shared drives. If drive_id is specified, lists items within that shared drive. folder_id is then relative to that drive (or use drive_id as folder_id for root). If drive_id is not specified, lists items from user's "My Drive" and accessible shared drives (if include_items_from_all_drives is True). Set resource_type to "shared_drives" to list shared drive containers instead of folder contents.

ParametersJSON Schema
NameRequiredDescriptionDefault
queryNoShared drive query used only when resource_type="shared_drives", e.g. "name contains 'Engineering'".
corporaNoCorpus to query ('user', 'drive', 'allDrives'). If `drive_id` is set and `corpora` is None, 'drive' is used. If None and no `drive_id`, API defaults apply.
detailedNoWhether to include size, modified time, and link in results. Defaults to True.
drive_idNoID of the shared drive. If provided, the listing is scoped to this drive.
order_byNoSort order. Comma-separated list of sort keys with optional 'desc' modifier. Valid keys: 'createdTime', 'folder', 'modifiedByMeTime', 'modifiedTime', 'name', 'name_natural', 'quotaBytesUsed', 'recency', 'sharedWithMeTime', 'starred', 'viewedByMeTime'. Example: 'modifiedTime desc' or 'folder,modifiedTime desc,name'. Defaults to None (Drive API default ordering).
file_typeNoRestrict results to a specific file type. Accepts a friendly name ('folder', 'document'/'doc', 'spreadsheet'/'sheet', 'presentation'/'slides', 'form', 'drawing', 'pdf', 'shortcut', 'script', 'site', 'jam'/'jamboard') or any raw MIME type string (e.g. 'application/pdf'). Defaults to None (all types).
folder_idNoThe ID of the Google Drive folder. Defaults to 'root'. For a shared drive, this can be the shared drive's ID to list its root, or a folder ID within that shared drive.root
page_sizeNoThe maximum number of items to return. Defaults to 100.
page_tokenNoPage token from a previous response's nextPageToken to retrieve the next page of results.
resource_typeNoWhat to list. Use "items" for folder contents or "shared_drives" for shared drive containers. Defaults to "items".items
user_google_emailYesThe user's Google email address. Required.
include_organizersNoWhen resource_type="shared_drives", include principals with the organizer role. This costs one extra permissions.list API call per shared drive returned. Defaults to False.
include_items_from_all_drivesNoWhether items from all accessible shared drives should be included if `drive_id` is not set. Defaults to True.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.4/5.0
Behavior4/5

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

Annotations cover the read-only, idempotent, non-destructive profile. The description adds meaningful behavioral context about drive_id scoping, folder_id relativity, include_items_from_all_drives behavior, and the shared drive container mode. It does not contradict annotations; minor omission is listing depth (immediate vs recursive).

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

Conciseness5/5

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

Four dense sentences with no filler. The main action is front-loaded, and the conditional branches are expressed compactly. Every sentence earns its place.

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

Completeness4/5

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

Given the high parameter count and two distinct modes, the description covers the primary scenarios and parameter relationships. Minor gaps like pagination behavior and non-recursive listing are largely handled by the schema and output schema, making it fairly complete.

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 covers all 13 parameters with 100% description coverage, so baseline is 3. The description adds cross-parameter semantics: it explains how drive_id, folder_id, resource_type, and include_items_from_all_drives interact based on whether drive_id is set, which is more than the sum of individual 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?

Description states a clear verb ('Lists') and distinguishes two modes: files/folders vs shared drive containers. It also explains drive scoping behavior, which differentiates it from siblings like search_drive_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?

Provides conditional guidance: if drive_id is specified, list within that drive; if not, list My Drive and accessible shared drives; set resource_type to 'shared_drives' for containers. However, it does not explicitly contrast with search_drive_files or state when not to use this tool.

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

list_recent_filesList Recent FilesA
Read-onlyIdempotent

Lists the user's most recently modified files in Google Drive (across all drives the user has access to). Excludes trashed items.

ParametersJSON Schema
NameRequiredDescriptionDefault
page_sizeNoMaximum number of files to return. Defaults to 10.
page_tokenNoPage token from a prior nextPageToken.
user_google_emailYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

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 safety profile is known. The description adds context about spanning all drives and excluding trashed items, which is useful. It does not mention pagination behavior or result size limits, but that's minor given annotations.

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

Conciseness5/5

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

Single, information-dense sentence. Front-loaded with the verb 'Lists' and clearly structured with scope and exclusion details.

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

Completeness4/5

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

Given the output schema and annotations, the description covers the essential scope and exclusions. Minor omissions like ordering details and pagination are not critical since schema provides page_token semantics.

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

Parameters3/5

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

Schema covers page_size and page_token with descriptions (67% coverage), but user_google_email lacks a description. The description's phrase 'the user' hints at the email parameter but does not fully compensate for the missing schema description. Moderate coverage, so description adds minimal semantic 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?

Description clearly states the tool lists recently modified files, specifies scope ('across all drives') and exclusions ('Excludes trashed items'). This distinguishes it from siblings like search_files and list_drive_items.

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

Usage Guidelines3/5

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

Provides clear context that this is for recently modified files, but does not explicitly mention when to use it vs alternatives like search_files or list_drive_items. No exclusions or alternative guidance provided.

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

manage_drive_accessManage Drive AccessA
Destructive

Consolidated tool for managing Google Drive file and folder access permissions.

Supports granting, batch-granting, updating, revoking permissions, and transferring file ownership -- all through a single entry point.

ParametersJSON Schema
NameRequiredDescriptionDefault
roleNoPermission role -- 'reader', 'commenter', or 'writer'. Used by "grant" (defaults to 'reader') and "update".
actionYesThe access management action to perform. Required. One of: - "grant": Share with a single user, group, domain, or anyone. - "grant_batch": Share with multiple recipients in one call. - "update": Modify an existing permission (role or expiration). - "revoke": Remove an existing permission. - "transfer_owner": Transfer file ownership to another user.
file_idYesThe ID of the file or folder. Required.
recipientsNoList of recipient objects for "grant_batch". Each should have: email (str), role (str, optional), share_type (str, optional), expiration_time (str, optional). For domain shares use 'domain' field instead of 'email'.
share_typeNoType of sharing -- 'user', 'group', 'domain', or 'anyone'. Used by "grant". Defaults to 'user'.user
share_withNoEmail address (user/group), domain name (domain), or omit for 'anyone'. Used by "grant".
email_messageNoCustom notification email message. Used by "grant" and "grant_batch".
permission_idNoThe permission ID to modify or remove. Required for "update" and "revoke" actions.
expiration_timeNoExpiration in RFC 3339 format (e.g., "2025-01-15T00:00:00Z"). Used by "grant" and "update".
new_owner_emailNoEmail of the new owner. Required for "transfer_owner".
send_notificationNoWhether to send notification emails. Defaults to True. Used by "grant" and "grant_batch".
user_google_emailYesThe user's Google email address. Required.
allow_file_discoveryNoFor 'domain'/'anyone' shares, whether the file appears in search. Used by "grant".
move_to_new_owners_rootNoMove file to the new owner's My Drive root. Defaults to False. Used by "transfer_owner".

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.7/5.0
Behavior3/5

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

Annotations already convey that this is a mutating, destructive operation. The description adds specificity by naming revoke and transfer_owner, which are the destructive actions, but it does not disclose side effects, reversibility, or notification behavior beyond what the schema already documents.

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

Conciseness5/5

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

The description is two sentences, front-loads the tool's purpose, and contains no filler. Every sentence contributes to understanding what the tool does.

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

Completeness3/5

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

For a 14-parameter tool with five action branches, the description is somewhat lean, but the input schema richly documents each parameter and the output schema handles return values. The main gap is unresolved overlap with the sibling set_drive_file_permissions tool, which prevents a higher completeness score.

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

Parameters3/5

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

Schema description coverage is 100%, with each parameter individually documented in the input schema. The description adds no parameter-level detail beyond the schema, so the baseline score of 3 is appropriate.

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

Purpose4/5

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

The description clearly identifies the resource (Google Drive file and folder access permissions) and enumerates the supported operations: granting, batch-granting, updating, revoking permissions, and transferring ownership. It is specific about scope, though it does not explicitly differentiate from the sibling set_drive_file_permissions tool.

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 phrasing 'Consolidated tool' and 'all through a single entry point' gives clear context that this is the intended hub for permission management. However, it does not name alternatives or state when to use get_drive_file_permissions or set_drive_file_permissions instead, so exclusion guidance is missing.

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

presentations_batch_updatePresentations Batch UpdateA

Apply a batch of update requests to a Google Slides presentation (presentations.batchUpdate).

Used by the QBR skill to delete chart placeholders and embed LINKED Sheets charts (createSheetsChart, linkingMode=LINKED). Build requests with scripts/google_native/slides_links.build_link_requests(). Pass writeControl {"requiredRevisionId": ...} (from presentations_get) to guard against clobbering concurrent human edits.

Retries transient Drive eventual-consistency failures (a just-converted Sheet not yet visible to Slides) with exponential backoff up to ~30s.

ParametersJSON Schema
NameRequiredDescriptionDefault
requestsYesbatchUpdate `requests` array.
writeControlNoOptional {"requiredRevisionId": "..."}.
presentationIdYesTarget presentation id.
user_google_emailYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.5/5.0
Behavior4/5

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

Beyond the annotations, the description discloses important behavioral details: it retries transient Drive eventual-consistency failures with exponential backoff up to ~30s, and it recommends writeControl to guard against clobbering concurrent human edits. These add meaningful context beyond the readOnlyHint/destructiveHint 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 structured into three short paragraphs—purpose, usage instructions, and retry behavior—all of which directly support tool selection and invocation. Every sentence earns its place, with no filler or redundant repetition of schema details.

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 batch update tool with a rich schema and output schema, the description covers purpose, invocation pattern, request construction, concurrency safety, and retry behavior. The reference to the helper function and the writeControl source provides the necessary context for an agent to invoke the tool correctly.

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

Parameters4/5

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

The schema already covers requests, writeControl, and presentationId at 75% coverage; the description adds practical meaning by specifying that requests should be built with build_link_requests() and that writeControl should contain a requiredRevisionId from presentations_get. The user_google_email parameter remains undescribed, but overall the description enhances parameter understanding.

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

Purpose5/5

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

The description opens with 'Apply a batch of update requests to a Google Slides presentation (presentations.batchUpdate)', which is a specific verb+resource that immediately identifies the tool's function. It explicitly names Google Slides and the exact API method, distinguishing it from sibling tools like spreadsheets_batch_update and docs_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 Guidelines4/5

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

The description provides concrete usage context: 'Used by the QBR skill to delete chart placeholders and embed LINKED Sheets charts' and explains how to build requests and pass writeControl. It does not explicitly state when not to use the tool or mention alternatives, but the context is clear enough for correct selection.

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

presentations_getPresentations GetA
Read-onlyIdempotent

Read a Google Slides presentation (presentations.get). Use a fields mask:

  • slot resolution: slides(objectId,pageElements(objectId,description,title,size,transform,shape/text,elementGroup))

  • embed verification: slides(pageElements(objectId,sheetsChart))

  • revision guard: revisionId

ParametersJSON Schema
NameRequiredDescriptionDefault
fieldsNoPartial-response field mask. Strongly recommended.
presentationIdYesTarget presentation id.
user_google_emailYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, openWorldHint, idempotentHint, and destructiveHint, covering the safety profile. The description goes beyond that by explaining how to use the fields parameter for partial responses and the revision guard, adding valuable behavioral nuance.

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

Conciseness5/5

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

The description is concise and well-structured: a single sentence stating the core purpose, followed by a tight bullet list of field mask use cases. Every line earns its place without unnecessary 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?

Given the moderate complexity and the presence of an output schema, the description covers the essential usage. It explains the fields parameter in detail and the revision guard, but does not explicitly state behavior when fields is omitted (e.g., returns full presentation). This is a minor gap but not critical.

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 schema provides basic descriptions for fields and presentationId, but the description enhances understanding significantly by explaining the structure and purpose of the fields mask (e.g., slides(objectId,pageElements(...))). This compensates for the 67% schema coverage and adds practical 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 explicitly states 'Read a Google Slides presentation (presentations.get)', which is a specific verb (read) and resource (presentation). It clearly distinguishes from sibling tools like presentations_batch_update, which handles modifications.

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

Usage Guidelines4/5

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

Clear context for when to use the tool (reading a presentation) is provided, but it does not explicitly mention when not to use it or name alternatives like presentations_batch_update. The field mask use cases (slot resolution, embed verification, revision guard) add practical guidance.

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

read_file_contentRead File ContentA
Read-onlyIdempotent

Retrieves the content of a specific Google Drive file by ID, supporting files in shared drives.

• Native Google Docs, Sheets, Slides → exported as text / CSV. • Office files (.docx, .xlsx, .pptx) → unzipped & parsed with std-lib to extract readable text. • PDFs → text extracted with pypdf when possible; scanned/image-only PDFs fall back to a download hint. • Images → returned as base64 with MIME metadata for multimodal clients. • Any other file → downloaded; tries UTF-8 decode, else notes binary.

ParametersJSON Schema
NameRequiredDescriptionDefault
fileIdYesDrive file ID.
user_google_emailYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.4/5.0
Behavior5/5

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

The description discloses detailed behavioral traits beyond annotations: how each file type is processed (e.g., PDFs via pypdf, images as base64), including fallback to a download hint for scanned PDFs and binary note for unreadable files. This adds substantial context beyond the readOnlyHint/idempotentHint 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 a clear lead sentence followed by bullet points separated by file type. Every bullet adds specific behavioral detail, and there is no filler or redundancy. The format makes it easy to scan.

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 an output schema present, return values are already defined. The description covers all major file categories, fallback behaviors, and special cases (images, binary), making it complete enough for an agent to anticipate behavior. It does not need to detail error cases.

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

Parameters2/5

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

The input schema covers only 50% of parameters (fileId only, and minimally). The description fails to compensate: it does not explain user_google_email, which has no schema description, nor does it add meaning about parameter usage beyond implying fileId is needed. This leaves a critical parameter opaque.

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

Purpose5/5

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

The description states a specific action ('Retrieves the content of a specific Google Drive file by ID') and distinguishes itself from the sibling tool download_file_content by emphasizing content extraction with format-specific conversion. It also mentions support for shared drives, clarifying scope.

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

Usage Guidelines4/5

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

The description gives clear context by enumerating supported file types and fallback behaviors, which implies when to use this tool. However, it does not explicitly contrast with alternatives like download_file_content or docs_get, so it lacks explicit exclusions or named alternatives.

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

search_filesSearch FilesB
Read-onlyIdempotent

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

ParametersJSON Schema
NameRequiredDescriptionDefault
queryYesThe search query string. Supports Google Drive search operators. NOTE: Owner-based queries ('user@example.com' in owners) DO NOT WORK in Shared Drives because files are owned by the shared drive itself, not individual users. For recent files by a specific user in Shared Drives, search by modifiedTime and use order_by='modifiedTime desc' instead.
corporaNoBodies of items to query (e.g., 'user', 'domain', 'drive', 'allDrives'). If 'drive_id' is specified and 'corpora' is None, it defaults to 'drive'. Otherwise, Drive API default behavior applies. Prefer 'user' or 'drive' over 'allDrives' for efficiency.
detailedNoWhether to include size, modified time, and link in results. Defaults to True.
drive_idNoID of the shared drive to search. If None, behavior depends on `corpora` and `include_items_from_all_drives`.
order_byNoSort order. Comma-separated list of sort keys with optional 'desc' modifier. Valid keys: 'createdTime', 'folder', 'modifiedByMeTime', 'modifiedTime', 'name', 'name_natural', 'quotaBytesUsed', 'recency', 'sharedWithMeTime', 'starred', 'viewedByMeTime'. Example: 'modifiedTime desc' or 'folder,modifiedTime desc,name'. Defaults to None (Drive API default ordering).
file_typeNoRestrict results to a specific file type. Accepts a friendly name ('folder', 'document'/'doc', 'spreadsheet'/'sheet', 'presentation'/'slides', 'form', 'drawing', 'pdf', 'shortcut', 'script', 'site', 'jam'/'jamboard') or any raw MIME type string (e.g. 'application/pdf'). Defaults to None (all types).
page_sizeNoThe maximum number of files to return. Defaults to 10.
page_tokenNoPage token from a previous response's nextPageToken to retrieve the next page of results.
user_google_emailYesThe user's Google email address. Required.
include_items_from_all_drivesNoWhether shared drive items should be included in results. Defaults to True. This is effective when not specifying a `drive_id`.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.3/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, openWorldHint=true, idempotentHint=true, destructiveHint=false. Description adds shared-drive scope but no behavioral details like pagination or search operator caveats. The schema covers those constraints, so the description is not contradictory but offers minimal added context.

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

Conciseness5/5

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

Single sentence, front-loaded with the key action and scope, zero filler. It is as concise as possible while conveying the core purpose.

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

Completeness3/5

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

The tool has 10 parameters and a rich schema with output schema, but the description lacks usage guidance and differentiation from siblings like list_drive_items. It is complete enough to identify the tool but leaves invocation semantics and comparative use entirely to schema and context.

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

Parameters3/5

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

Schema covers 100% of parameters with detailed descriptions, including caveats about shared drive owner queries. The description itself adds no parameter semantics, but the schema carries the full burden adequately.

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

Purpose4/5

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

The description states 'Searches for files and folders within a user's Google Drive, including shared drives' – a clear verb+resource+scope. It distinguishes from list_recent_files by emphasizing query-based search, though it doesn't explicitly name alternatives.

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

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 search_files vs list_drive_items or list_recent_files. The description lacks any 'when to use' or 'use instead' language, leaving the agent to infer from the name and sibling context.

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

set_drive_file_permissionsSet Drive File PermissionsA
Destructive

Sets file-level sharing settings and controls link sharing for a Google Drive file or folder.

This is a high-level tool for the most common permission changes. Use this to toggle "anyone with the link" access or configure file-level sharing behavior. For managing individual user/group permissions, use share_drive_file or update_drive_permission instead.

ParametersJSON Schema
NameRequiredDescriptionDefault
file_idYesThe ID of the file or folder. Required.
link_sharingNoControl "anyone with the link" access for the file. - "off": Disable "anyone with the link" access for this file. - "reader": Anyone with the link can view. - "commenter": Anyone with the link can comment. - "writer": Anyone with the link can edit.
user_google_emailYesThe user's Google email address. Required.
writers_can_shareNoWhether editors can change permissions and share. If False, only the owner can share. Defaults to None (no change).
copy_requires_writer_permissionNoWhether viewers and commenters are prevented from copying, printing, or downloading. Defaults to None (no change).

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.9/5.0
Behavior3/5

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

Annotations already declare destructiveHint=true, idempotentHint=false, and readOnlyHint=false, so the risk profile is covered without description support. The description adds that the tool mutates link-sharing and file-level settings, but it does not disclose consequences such as revoking anonymous access when link sharing is turned off or changes taking effect immediately. This is adequate but not rich behavioral context.

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

Conciseness5/5

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

Four short, front-loaded sentences, each earning its place: primary purpose, high-level positioning, when-to-use, and when-not-to with routing. There is no repetition or filler, and the structure naturally separates what the tool does from how to choose it.

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?

An output schema exists and the annotations are rich, so the description need not explain return values or safety profiles. The main gap is the unresolved user_google_email requirement, which directly threatens correct invocation given the tool's stated link-sharing purpose; the routing to sibling tools absent from the list is a secondary but real gap. Overall adequate for a well-schema'd tool, but not fully complete.

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

Parameters3/5

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

Schema description coverage is 100% and each parameter (link_sharing, writers_can_share, copy_requires_writer_permission) has a detailed description, so the schema carries the heavy lifting. The description adds high-level framing that most parameters are optional toggles, but it leaves the required user_google_email unexplained — its role conflicts with the link-sharing positioning, and neither the description nor the schema reconciles this.

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?

"Sets file-level sharing settings and controls link sharing for a Google Drive file or folder" provides a specific verb, resource, and scope, making the tool's function immediately clear. The second paragraph reinforces purpose by positioning it as a high-level tool for common permission changes and explicitly excluding granular user/group permission management, distinguishing it from read-oriented siblings like get_drive_file_permissions.

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

Usage Guidelines4/5

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

The description gives explicit when-to-use guidance ("toggle 'anyone with the link' access or configure file-level sharing behavior") and an explicit exclusion ("For managing individual user/group permissions, use share_drive_file or update_drive_permission instead"). However, those named alternatives are absent from the sibling-tools list (which instead contains manage_drive_access), and the required user_google_email parameter blurs the stated boundary between this tool and individual-user permission tools.

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

spreadsheets_batch_updateSpreadsheets Batch UpdateA

Apply a batch of update requests to a Google Sheet (spreadsheets.batchUpdate).

Used by the QBR skill to create native charts (addChart) and set cell number formats (repeatCell). Build the requests array with scripts/google_native/sheets_charts.build_batch_requests().

ParametersJSON Schema
NameRequiredDescriptionDefault
requestsYesThe batchUpdate `requests` array (list of request dicts).
spreadsheetIdYesTarget spreadsheet id.
user_google_emailYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.2/5.0
Behavior3/5

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

Annotations already declare this is a write operation (readOnlyHint=false). The description adds that it performs a batch of requests and gives examples of non-destructive operations, but does not discuss partial failure behavior, permissions, or reversibility. It adds modest 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?

Two sentences, front-loaded with the core action and method, followed by a focused use-case and helper-function pointer. No redundant words.

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

Completeness4/5

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

The tool is complex, but the description covers the main use cases and provides a helper for building requests. It omits discussion of other request types and the purpose of user_google_email, but overall it is adequate given the presence of an output schema and annotations.

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 schema covers requests and spreadsheetId, but leaves user_google_email undefined. The description compensates for the complex requests parameter by referencing a builder function (build_batch_requests()) and giving examples. It does not clarify user_google_email, but the other two parameters are well-covered.

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 applies a batch of update requests to a Google Sheet, with explicit mention of the underlying API method (spreadsheets.batchUpdate). It distinguishes itself from siblings like docs_batch_update and presentations_batch_update by specifying Google Sheet, and provides concrete example operations (addChart, repeatCell).

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 indicates this is used by the QBR skill for adding charts and setting number formats, giving clear usage context. It does not explicitly name alternatives or exclusions, but the resource type (Google Sheet) clearly separates it from docs/presentations batch update tools.

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

spreadsheets_getSpreadsheets GetA
Read-onlyIdempotent

Read a Google Sheet's metadata (spreadsheets.get). Use a fields mask to resolve sheet ids (sheets(properties(sheetId,title))) or verify charts (sheets(charts(chartId,spec/title))).

ParametersJSON Schema
NameRequiredDescriptionDefault
fieldsNoPartial-response field mask. Strongly recommended.
spreadsheetIdYesTarget spreadsheet id.
user_google_emailYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already declare readOnly, idempotent, and non-destructive behavior. The description adds useful context about the API call type and specific use cases for the fields mask, such as retrieving sheet IDs and chart specs, 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 a compact two sentences. The first sentence states the primary purpose, and the second provides actionable advice on the fields mask. No filler or redundancy.

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

Completeness4/5

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

Given the output schema, annotations, and simple parameter set, the description provides enough context for correct invocation. It could mention alternatives (e.g., for cell data use read_file_content) but is sufficiently complete for a metadata read 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?

The schema already describes fields and spreadsheetId, covering 67% of parameters. The description adds concrete examples of how to use the fields mask with specific field paths, exceeding the schema's generic 'field mask' note, which helps the agent construct correct requests.

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 reads Google Sheet metadata via the specific API method spreadsheets.get, distinguishing it from sibling tools that read file content or update spreadsheets. It also specifies concrete sub-uses: resolving sheet IDs and verifying charts.

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 (reading metadata, resolving sheet IDs, verifying charts) but does not explicitly name alternatives or state when not to use it. It offers practical parameter guidance, which supports usage decisions.

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

start_google_authStart Google AuthA

Manually initiate Google OAuth authentication flow.

NOTE: This is a legacy OAuth 2.0 tool and is disabled when OAuth 2.1 is enabled. The authentication system automatically handles credential checks and prompts for authentication when needed. Only use this tool if:

  1. You need to re-authenticate with different credentials

  2. You want to proactively authenticate before using other tools

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

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

ParametersJSON Schema
NameRequiredDescriptionDefault
service_nameYes
user_google_emailNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.4/5.0
Behavior5/5

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

Beyond the minimal annotations, the description discloses that this is a legacy OAuth 2.0 tool, disabled when OAuth 2.1 is enabled, and that authentication is normally handled automatically by the system. It also explains the manual tool's role in re-authentication, proactive auth, and retry scenarios, which is rich behavioral context.

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

Conciseness5/5

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

The description is well-structured: a clear opening statement, a critical legacy note, a numbered list of use cases, and a closing recommendation. Every sentence carries distinct information without redundancy or filler.

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

Completeness4/5

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

The description thoroughly covers purpose, usage conditions, alternatives, and legacy/automatic behavior, and the output schema can handle return-value documentation. However, it is not fully self-contained because it leaves parameter semantics unexplained, which is a meaningful gap for an agent deciding what to pass as service_name.

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

Parameters2/5

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

The input schema has 0% parameter description coverage, and the description does not compensate by explaining either parameter. It never names service_name or user_google_email, nor does it clarify expected formats, allowed values, or how to choose the service. The phrase 'different credentials' only weakly hints at user_google_email, leaving the agent to guess at parameter meaning.

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

Purpose5/5

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

The description clearly states the tool's purpose: 'Manually initiate Google OAuth authentication flow.' It identifies the specific action and resource, and distinguishes itself from the long sibling list by being the explicit authentication entry point for Google Workspace tools.

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

Usage Guidelines5/5

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

The description explicitly lists when to use the tool with three concrete conditions and directly advises that in most cases the agent should simply call the needed Google Workspace tool instead. It also covers the failure/retry scenario, making the when-to-use and when-not-to-use guidance unambiguous.

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

update_drive_fileUpdate Drive FileC
Destructive

Updates metadata and properties of a Google Drive file.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNoNew name for the file.
file_idYesThe ID of the file to update. Required.
starredNoWhether to star/unstar the file.
trashedNoWhether to move file to/from trash.
mime_typeNoNew MIME type (note: changing type may require content upload).
propertiesNoCustom key-value properties for the file.
add_parentsNoComma-separated folder IDs to add as parents.
descriptionNoNew description for the file.
remove_parentsNoComma-separated folder IDs to remove from parents.
user_google_emailYesThe user's Google email address. Required.
writers_can_shareNoWhether editors can share the file.
copy_requires_writer_permissionNoWhether copying requires writer permission.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

C2.9/5.0
Behavior2/5

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

Annotations already declare destructiveHint=true and readOnlyHint=false. The description adds no behavioral context, such as potential data loss from trashing or parent changes. It merely restates the tool's purpose without disclosing consequences beyond what the annotations already convey.

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

Conciseness4/5

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

The description is a single short sentence with no redundant words, and it is front-loaded with the verb 'Updates'. It is appropriately concise, though it could arguably include a bit more detail without becoming verbose.

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

Completeness2/5

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

Despite having 12 parameters and an output schema, the description is very vague about the scope of updates (e.g., rename, trash, permissions, parent changes) and lacks any context for when to use this tool. The schema compensates with parameter descriptions, but the overall tool guidance is incomplete 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?

The input schema covers all 12 parameters with descriptions (100% coverage). The description adds no additional parameter semantics; the schema already provides details like 'Whether to move file to/from trash' for the trashed parameter.

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

Purpose4/5

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

The description states a specific verb ('Updates') and resource ('Google Drive file'), clearly indicating it modifies file metadata and properties. However, it does not distinguish from sibling tools like 'set_drive_file_permissions' which also updates file properties, so it lacks explicit differentiation.

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

Usage Guidelines2/5

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

No guidance is provided on when to use this tool versus alternatives such as 'create_file', 'copy_drive_file', or 'manage_drive_access'. The description gives no context, prerequisites, or exclusions, leaving the agent to infer the appropriate usage scenario.

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

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 25 tool updatesv0.1.0
    • First observedcheck_drive_file_public_access
    • First observedcopy_drive_file
    • First observedcreate_drive_folder
    • First observedcreate_file
    • First observedcreate_resumable_upload_session
    • First observeddocs_batch_update
    • First observeddocs_get
    • First observeddocs_replace_all_text
    • First observeddownload_file_content
    • First observedget_drive_file_permissions
    • First observedget_drive_shareable_link
    • First observedget_file_metadata
    • First observedimport_to_google_doc
    • First observedlist_drive_items
    • First observedlist_recent_files
    • First observedmanage_drive_access
    • First observedpresentations_batch_update
    • First observedpresentations_get
    • First observedread_file_content
    • First observedsearch_files
    • First observedset_drive_file_permissions
    • First observedspreadsheets_batch_update
    • First observedspreadsheets_get
    • First observedstart_google_auth
    • First observedupdate_drive_file

TDQS

B3.4/5.0

Scored across 25 tools

Disambiguation3/5

Multiple tools overlap in purpose, especially around permissions: manage_drive_access, set_drive_file_permissions, get_drive_file_permissions, and check_drive_file_public_access have unclear boundaries. Listing tools (search_files, list_recent_files, list_drive_items) are distinguishable but could be confused.

Naming Consistency3/5

Naming mixes verb_noun patterns (get_file_metadata, create_drive_folder) with reverse noun_verb patterns (spreadsheets_get, docs_batch_update). Inconsistent use of 'file' vs 'drive_file' and similar operations named differently (read_file_content vs download_file_content).

Tool Count4/5

25 tools is on the high end but reasonable for a server covering Google Drive plus Docs, Sheets, and Slides. Some redundancy (permission tools) makes it feel slightly heavy, but most tools serve distinct purposes.

Completeness2/5

The tool set includes create, read, and update operations but completely lacks delete or trash functionality, a fundamental gap for a 'CRUD' server. Also missing native creation for Sheets and Slides, relying on import/update only.

Maintenance

ActivitySlowing
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers