Google Drive CRUD MCP Server
Provides tools for reading and editing Google Docs documents, including retrieving content and structure, applying batch updates for inserts, styling, tables, and images, and replacing text.
Provides tools for managing Google Drive files and folders, including searching, listing, reading, downloading, uploading, creating, copying, updating, and managing permissions and sharing.
Provides tools for reading and editing Google Sheets spreadsheets, including retrieving values and structure and applying batch updates for formatting, charts, and sheet operations.
Provides tools for reading and editing Google Slides presentations, including retrieving slides and elements and applying batch updates to create slides, insert text and shapes, and place native charts.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Google Drive CRUD MCP ServerCreate a new Google Doc titled 'Meeting Notes' and share it with me"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Google 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.
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>/mcpThe /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 |
| Query-based search across every drive the account can reach |
| Most recently modified files, excluding trashed ones |
| Metadata for a single file by ID |
| Extract text from Docs, Sheets, PDF, and Office files |
| Raw bytes, returned inline as base64, capped at 25 MB by default |
| Create a file or folder, converting to a native Google type unless told not to |
| Return an upload URL so large files go straight to Google instead of through Claude |
| Import Markdown, DOCX, TXT, HTML, RTF, or ODT and convert to a native Doc |
| List the children of a folder |
| Create a folder |
| Copy a file |
| Rename, move, or trash a file (metadata only, not content) |
| Get a shareable link |
| Inspect who has access |
| Grant or revoke access |
Google Docs
Tool | What it does |
| Read a document's content and structure, including the character indexes needed to edit it |
| Apply a batch of structural edits: insert text, style, tables, images, and so on |
| Replace every occurrence of a string, which is how template filling works |
Google Sheets
Tool | What it does |
| Read a spreadsheet's structure and values |
| Apply batch changes, including native charts, formatting, and sheet operations |
Google Slides
Tool | What it does |
| Read a presentation's slides and elements |
| 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_fileis 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-versionpins the exact version)The
uvpackage manager:curl -LsSf https://astral.sh/uv/install.sh | shA 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:
openidhttps://www.googleapis.com/auth/userinfo.emailhttps://www.googleapis.com/auth/userinfo.profilehttps://www.googleapis.com/auth/drivehttps://www.googleapis.com/auth/drive.readonlyhttps://www.googleapis.com/auth/drive.filehttps://www.googleapis.com/auth/spreadsheetshttps://www.googleapis.com/auth/spreadsheets.readonlyhttps://www.googleapis.com/auth/presentationshttps://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/oauth2callbackfor local work, orhttps://<your-domain>/oauth2callbackfor a deployed server.Save the client ID and client secret.
2. Configure the environment
cp env.example .envFill 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=trueAlways 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-httpThe 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 toolsDocker works too and reads the same .env:
docker compose up --build4. Deploy
The Dockerfile is ready for Railway as it stands:
railway up --service gdrive-mcpSet 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.

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_credsIn 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 |
| Yes | none | OAuth client ID from Google Cloud |
| Yes | none | OAuth client secret from Google Cloud |
| No |
| Callback URI, and it must match one registered on the OAuth client |
| Yes when deployed | none | Public URL the server is reachable at, used as the base for the OAuth endpoints |
| No |
| Base used with the port when |
| No |
|
|
| No |
| Port to bind. Railway sets |
| No |
| Bind address |
| No |
| Multi-user mode where each caller sends their own bearer token |
| No | off | Keep no per-session state on disk, needed behind a stateless proxy |
| No |
| Where credentials persist when not stateless, for local use |
| No | off | Drop the write scopes and disable every mutating tool |
| No | none | Pin the server to one Google account in single-user mode |
| No | off | Single-user mode, an alternative to OAuth 2.1 |
| No |
| Largest file |
Troubleshooting
Symptom | Cause and fix |
| The redirect URI does not exactly match the one registered in Google Cloud. Check protocol, port, and path. |
| The consent screen is unpublished and your account is not in the test-users list. |
| An API was not enabled. The error message includes a direct link to enable it. |
A deployed server sends users to a |
|
A POST to the server returns 405 | The connector URL is missing the |
| Both |
Claude can call tools but uploading a generated file fails | Claude's sandbox is blocking outbound traffic to Google. Add |
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 toolscheck_drive_file_public_accessCheck Drive File Public AccessARead-onlyIdempotent
Searches for a file by name and checks if it has public link sharing enabled.
| Name | Required | Description | Default |
|---|---|---|---|
| drive_id | No | ID of the shared drive to scope the search to. When set, the underlying files.list call uses corpora='drive' and the given driveId, which is required to reliably find files that live only in that shared drive. When None, behaviour is unchanged (default API corpora applies). | |
| file_name | Yes | The name of the file to check. | |
| user_google_email | Yes | The user's Google email address. Required. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, 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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| file_id | Yes | The ID of the file to copy. Required. | |
| new_name | No | New name for the copied file. If not provided, uses "Copy of [original name]". | |
| parent_folder_id | No | The ID of the folder where the copy should be created. Defaults to 'root' (My Drive). | root |
| user_google_email | Yes | The user's Google email address. Required. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already 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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| folder_name | Yes | The name for the new folder. | |
| parent_folder_id | No | The ID of the parent folder. Defaults to 'root'. For shared drives, use a folder ID within that shared drive. | root |
| user_google_email | Yes | The user's Google email address. Required. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already convey the key behavioral traits: non-read-only, non-idempotent, non-destructive, open-world. The description confirms the mutating creation behavior and adds shared-drive support as extra context. It does not detail auth requirements or side effects, but the annotation coverage lowers the burden.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence that states the core action first and adds the shared-drive qualifier without redundancy. It contains no filler and does not repeat schema or annotation information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a straightforward create operation, the description, schema, and annotations together give an agent enough to invoke the tool correctly: required parameters are documented, safety traits are annotated, and an output schema exists. Minor details like permission prerequisites are unstated but are not essential for basic selection and invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all parameters. The description's shared-drive mention aligns with and echoes the existing parent_folder_id schema note rather than adding materially new parameter meaning.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: 'Creates a new folder in Google Drive.' It clearly distinguishes from siblings like create_drive_file by limiting the action to folders, and it adds the meaningful shared-drive capability without ambiguity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear context for when to use the tool: creating folders in Google Drive, including within shared drives. It does not explicitly name alternatives or exclusions, but the resource type is unambiguous enough that an agent can route to this tool for folder creation versus file creation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_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.
| Name | Required | Description | Default |
|---|---|---|---|
| title | Yes | The name for the new file. | |
| content | No | If 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). | |
| fileUrl | No | If provided, fetches the file content from this URL. Supports file://, http://, and https:// protocols. | |
| mimeType | No | The MIME type of the source content. Defaults to 'text/plain'. | text/plain |
| parentId | No | The ID of the parent folder. Defaults to 'root'. | root |
| user_google_email | Yes | ||
| disableConversionToGoogleType | No | When 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
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| title | Yes | The name for the new file. | |
| mimeType | Yes | The 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. | |
| parentId | No | The ID of the parent folder. Defaults to 'root'. | root |
| user_google_email | Yes | ||
| disableConversionToGoogleType | No | When 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
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| requests | Yes | The batchUpdate `requests` array (list of request dicts). | |
| documentId | Yes | Target document id. | |
| writeControl | No | Optional {"requiredRevisionId": "..."}. | |
| user_google_email | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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 DocARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| fields | No | Optional partial-response field mask (e.g. `title,body(content(startIndex,endIndex,paragraph))`) to keep large documents readable. | |
| documentId | Yes | Target document id. | |
| user_google_email | Yes | ||
| includeTabsContent | No | Set 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
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, idempotentHint, and destructiveHint=false, so the safety profile is covered. The description adds 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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| matchCase | No | Default case-sensitivity for items that don't set their own. Defaults to True. | |
| documentId | Yes | Target document id. | |
| replacements | Yes | List of {"find": str, "replace": str} dicts. Each may override the default case behavior with its own "matchCase". | |
| user_google_email | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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 ContentARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| fileId | Yes | The Google Drive file ID to download. | |
| export_format | No | Optional export format for Google native files. Options: 'pdf', 'docx', 'xlsx', 'csv', 'pptx'. | |
| user_google_email | Yes |
TDQS
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.
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.
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.
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.
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.
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 PermissionsBRead-onlyIdempotent
Gets detailed metadata about a Google Drive file including sharing permissions.
| Name | Required | Description | Default |
|---|---|---|---|
| file_id | Yes | The ID of the file to check permissions for. | |
| user_google_email | Yes | The user's Google email address. Required. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true 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.
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.
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.
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.
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.
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 MetadataARead-onlyIdempotent
Returns metadata for a single Google Drive file by ID.
| Name | Required | Description | Default |
|---|---|---|---|
| fileId | Yes | The Drive file ID. | |
| user_google_email | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, covering the safety profile. The description adds the '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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| content | No | Text content for text-based formats. Use only for short snippets or content already in memory. | |
| file_url | No | Remote URL to fetch the file from (http/https). | |
| file_name | Yes | The name for the new Google Doc (extension will be ignored). | |
| file_path | No | Local file path or file:// URL for any supported format (MD, TXT, HTML, DOCX, ODT, RTF). Appropriate for larger files than content, but file_path may still load the file into memory or perform non-streaming reads. Avoid very large files that could exceed memory or time limits; use streaming/chunked uploads or an alternative API for huge files. | |
| folder_id | No | The ID of the parent folder. Defaults to 'root'. | root |
| source_format | No | Source format hint ('md', 'markdown', 'docx', 'txt', 'html', 'rtf', 'odt'). Auto-detected from file_name extension if not provided. | |
| user_google_email | Yes | The user's Google email address. Required. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses 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.
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.
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.
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.
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.
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 ItemsARead-onlyIdempotent
Lists files/folders or shared drive containers, supporting shared drives.
If drive_id is specified, lists items within that shared drive. folder_id is then relative to that drive (or use drive_id as folder_id for root).
If drive_id is not specified, lists items from user's "My Drive" and accessible shared drives (if include_items_from_all_drives is True).
Set resource_type to "shared_drives" to list shared drive containers instead of folder contents.
| Name | Required | Description | Default |
|---|---|---|---|
| query | No | Shared drive query used only when resource_type="shared_drives", e.g. "name contains 'Engineering'". | |
| corpora | No | Corpus to query ('user', 'drive', 'allDrives'). If `drive_id` is set and `corpora` is None, 'drive' is used. If None and no `drive_id`, API defaults apply. | |
| detailed | No | Whether to include size, modified time, and link in results. Defaults to True. | |
| drive_id | No | ID of the shared drive. If provided, the listing is scoped to this drive. | |
| order_by | No | Sort order. Comma-separated list of sort keys with optional 'desc' modifier. Valid keys: 'createdTime', 'folder', 'modifiedByMeTime', 'modifiedTime', 'name', 'name_natural', 'quotaBytesUsed', 'recency', 'sharedWithMeTime', 'starred', 'viewedByMeTime'. Example: 'modifiedTime desc' or 'folder,modifiedTime desc,name'. Defaults to None (Drive API default ordering). | |
| file_type | No | Restrict results to a specific file type. Accepts a friendly name ('folder', 'document'/'doc', 'spreadsheet'/'sheet', 'presentation'/'slides', 'form', 'drawing', 'pdf', 'shortcut', 'script', 'site', 'jam'/'jamboard') or any raw MIME type string (e.g. 'application/pdf'). Defaults to None (all types). | |
| folder_id | No | The ID of the Google Drive folder. Defaults to 'root'. For a shared drive, this can be the shared drive's ID to list its root, or a folder ID within that shared drive. | root |
| page_size | No | The maximum number of items to return. Defaults to 100. | |
| page_token | No | Page token from a previous response's nextPageToken to retrieve the next page of results. | |
| resource_type | No | What to list. Use "items" for folder contents or "shared_drives" for shared drive containers. Defaults to "items". | items |
| user_google_email | Yes | The user's Google email address. Required. | |
| include_organizers | No | When resource_type="shared_drives", include principals with the organizer role. This costs one extra permissions.list API call per shared drive returned. Defaults to False. | |
| include_items_from_all_drives | No | Whether items from all accessible shared drives should be included if `drive_id` is not set. Defaults to True. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations 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.
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.
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.
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.
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.
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 FilesARead-onlyIdempotent
Lists the user's most recently modified files in Google Drive (across all drives the user has access to). Excludes trashed items.
| Name | Required | Description | Default |
|---|---|---|---|
| page_size | No | Maximum number of files to return. Defaults to 10. | |
| page_token | No | Page token from a prior nextPageToken. | |
| user_google_email | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is 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.
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.
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.
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.
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.
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 AccessADestructive
Consolidated tool for managing Google Drive file and folder access permissions.
Supports granting, batch-granting, updating, revoking permissions, and transferring file ownership -- all through a single entry point.
| Name | Required | Description | Default |
|---|---|---|---|
| role | No | Permission role -- 'reader', 'commenter', or 'writer'. Used by "grant" (defaults to 'reader') and "update". | |
| action | Yes | The access management action to perform. Required. One of: - "grant": Share with a single user, group, domain, or anyone. - "grant_batch": Share with multiple recipients in one call. - "update": Modify an existing permission (role or expiration). - "revoke": Remove an existing permission. - "transfer_owner": Transfer file ownership to another user. | |
| file_id | Yes | The ID of the file or folder. Required. | |
| recipients | No | List of recipient objects for "grant_batch". Each should have: email (str), role (str, optional), share_type (str, optional), expiration_time (str, optional). For domain shares use 'domain' field instead of 'email'. | |
| share_type | No | Type of sharing -- 'user', 'group', 'domain', or 'anyone'. Used by "grant". Defaults to 'user'. | user |
| share_with | No | Email address (user/group), domain name (domain), or omit for 'anyone'. Used by "grant". | |
| email_message | No | Custom notification email message. Used by "grant" and "grant_batch". | |
| permission_id | No | The permission ID to modify or remove. Required for "update" and "revoke" actions. | |
| expiration_time | No | Expiration in RFC 3339 format (e.g., "2025-01-15T00:00:00Z"). Used by "grant" and "update". | |
| new_owner_email | No | Email of the new owner. Required for "transfer_owner". | |
| send_notification | No | Whether to send notification emails. Defaults to True. Used by "grant" and "grant_batch". | |
| user_google_email | Yes | The user's Google email address. Required. | |
| allow_file_discovery | No | For 'domain'/'anyone' shares, whether the file appears in search. Used by "grant". | |
| move_to_new_owners_root | No | Move file to the new owner's My Drive root. Defaults to False. Used by "transfer_owner". |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| requests | Yes | batchUpdate `requests` array. | |
| writeControl | No | Optional {"requiredRevisionId": "..."}. | |
| presentationId | Yes | Target presentation id. | |
| user_google_email | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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 GetARead-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
| Name | Required | Description | Default |
|---|---|---|---|
| fields | No | Partial-response field mask. Strongly recommended. | |
| presentationId | Yes | Target presentation id. | |
| user_google_email | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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 ContentARead-onlyIdempotent
Retrieves the content of a specific Google Drive file by ID, supporting files in shared drives.
• Native Google Docs, Sheets, Slides → exported as text / CSV. • Office files (.docx, .xlsx, .pptx) → unzipped & parsed with std-lib to extract readable text. • PDFs → text extracted with pypdf when possible; scanned/image-only PDFs fall back to a download hint. • Images → returned as base64 with MIME metadata for multimodal clients. • Any other file → downloaded; tries UTF-8 decode, else notes binary.
| Name | Required | Description | Default |
|---|---|---|---|
| fileId | Yes | Drive file ID. | |
| user_google_email | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description 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.
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.
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.
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.
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.
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 FilesBRead-onlyIdempotent
Searches for files and folders within a user's Google Drive, including shared drives.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | The search query string. Supports Google Drive search operators. NOTE: Owner-based queries ('user@example.com' in owners) DO NOT WORK in Shared Drives because files are owned by the shared drive itself, not individual users. For recent files by a specific user in Shared Drives, search by modifiedTime and use order_by='modifiedTime desc' instead. | |
| corpora | No | Bodies of items to query (e.g., 'user', 'domain', 'drive', 'allDrives'). If 'drive_id' is specified and 'corpora' is None, it defaults to 'drive'. Otherwise, Drive API default behavior applies. Prefer 'user' or 'drive' over 'allDrives' for efficiency. | |
| detailed | No | Whether to include size, modified time, and link in results. Defaults to True. | |
| drive_id | No | ID of the shared drive to search. If None, behavior depends on `corpora` and `include_items_from_all_drives`. | |
| order_by | No | Sort order. Comma-separated list of sort keys with optional 'desc' modifier. Valid keys: 'createdTime', 'folder', 'modifiedByMeTime', 'modifiedTime', 'name', 'name_natural', 'quotaBytesUsed', 'recency', 'sharedWithMeTime', 'starred', 'viewedByMeTime'. Example: 'modifiedTime desc' or 'folder,modifiedTime desc,name'. Defaults to None (Drive API default ordering). | |
| file_type | No | Restrict results to a specific file type. Accepts a friendly name ('folder', 'document'/'doc', 'spreadsheet'/'sheet', 'presentation'/'slides', 'form', 'drawing', 'pdf', 'shortcut', 'script', 'site', 'jam'/'jamboard') or any raw MIME type string (e.g. 'application/pdf'). Defaults to None (all types). | |
| page_size | No | The maximum number of files to return. Defaults to 10. | |
| page_token | No | Page token from a previous response's nextPageToken to retrieve the next page of results. | |
| user_google_email | Yes | The user's Google email address. Required. | |
| include_items_from_all_drives | No | Whether shared drive items should be included in results. Defaults to True. This is effective when not specifying a `drive_id`. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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 PermissionsADestructive
Sets file-level sharing settings and controls link sharing for a Google Drive file or folder.
This is a high-level tool for the most common permission changes. Use this to toggle "anyone with the link" access or configure file-level sharing behavior. For managing individual user/group permissions, use share_drive_file or update_drive_permission instead.
| Name | Required | Description | Default |
|---|---|---|---|
| file_id | Yes | The ID of the file or folder. Required. | |
| link_sharing | No | Control "anyone with the link" access for the file. - "off": Disable "anyone with the link" access for this file. - "reader": Anyone with the link can view. - "commenter": Anyone with the link can comment. - "writer": Anyone with the link can edit. | |
| user_google_email | Yes | The user's Google email address. Required. | |
| writers_can_share | No | Whether editors can change permissions and share. If False, only the owner can share. Defaults to None (no change). | |
| copy_requires_writer_permission | No | Whether viewers and commenters are prevented from copying, printing, or downloading. Defaults to None (no change). |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, 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.
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.
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.
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.
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.
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().
| Name | Required | Description | Default |
|---|---|---|---|
| requests | Yes | The batchUpdate `requests` array (list of request dicts). | |
| spreadsheetId | Yes | Target spreadsheet id. | |
| user_google_email | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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 GetARead-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))).
| Name | Required | Description | Default |
|---|---|---|---|
| fields | No | Partial-response field mask. Strongly recommended. | |
| spreadsheetId | Yes | Target spreadsheet id. | |
| user_google_email | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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:
You need to re-authenticate with different credentials
You want to proactively authenticate before using other tools
The automatic authentication flow failed and you need to retry
In most cases, simply try calling the Google Workspace tool you need - it will automatically handle authentication if required.
| Name | Required | Description | Default |
|---|---|---|---|
| service_name | Yes | ||
| user_google_email | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the minimal annotations, the description discloses that this is a legacy OAuth 2.0 tool, disabled when OAuth 2.1 is enabled, and that authentication is normally handled automatically by the system. It also explains the manual tool's role in re-authentication, proactive auth, and retry scenarios, which is rich behavioral context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured: a clear opening statement, a critical legacy note, a numbered list of use cases, and a closing recommendation. Every sentence carries distinct information without redundancy or filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description thoroughly covers purpose, usage conditions, alternatives, and legacy/automatic behavior, and the output schema can handle return-value documentation. However, it is not fully self-contained because it leaves parameter semantics unexplained, which is a meaningful gap for an agent deciding what to pass as service_name.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 0% parameter description coverage, and the description does not compensate by explaining either parameter. It never names service_name or user_google_email, nor does it clarify expected formats, allowed values, or how to choose the service. The phrase 'different credentials' only weakly hints at user_google_email, leaving the agent to guess at parameter meaning.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Manually initiate Google OAuth authentication flow.' It identifies the specific action and resource, and distinguishes itself from the long sibling list by being the explicit authentication entry point for Google Workspace tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly lists when to use the tool with three concrete conditions and directly advises that in most cases the agent should simply call the needed Google Workspace tool instead. It also covers the failure/retry scenario, making the when-to-use and when-not-to-use guidance unambiguous.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_drive_fileUpdate Drive FileCDestructive
Updates metadata and properties of a Google Drive file.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | New name for the file. | |
| file_id | Yes | The ID of the file to update. Required. | |
| starred | No | Whether to star/unstar the file. | |
| trashed | No | Whether to move file to/from trash. | |
| mime_type | No | New MIME type (note: changing type may require content upload). | |
| properties | No | Custom key-value properties for the file. | |
| add_parents | No | Comma-separated folder IDs to add as parents. | |
| description | No | New description for the file. | |
| remove_parents | No | Comma-separated folder IDs to remove from parents. | |
| user_google_email | Yes | The user's Google email address. Required. | |
| writers_can_share | No | Whether editors can share the file. | |
| copy_requires_writer_permission | No | Whether copying requires writer permission. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and readOnlyHint=false. The description adds 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.
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.
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.
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.
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.
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.
25 tool updates
v0.1.0- First observed
check_drive_file_public_access - First observed
copy_drive_file - First observed
create_drive_folder - First observed
create_file - First observed
create_resumable_upload_session - First observed
docs_batch_update - First observed
docs_get - First observed
docs_replace_all_text - First observed
download_file_content - First observed
get_drive_file_permissions - First observed
get_drive_shareable_link - First observed
get_file_metadata - First observed
import_to_google_doc - First observed
list_drive_items - First observed
list_recent_files - First observed
manage_drive_access - First observed
presentations_batch_update - First observed
presentations_get - First observed
read_file_content - First observed
search_files - First observed
set_drive_file_permissions - First observed
spreadsheets_batch_update - First observed
spreadsheets_get - First observed
start_google_auth - First observed
update_drive_file
TDQS
Scored across 25 tools
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 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).
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.
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
Related MCP Connectors
MCP server connecting AI agents to 100+ apps (Gmail, Slack, Notion, GitHub) via one-click OAuth.
Hosted MCP server connecting claude.ai, ChatGPT and other AI apps to your own computer
Hosted MCP server with managed OAuth for 15+ toolkits: Google Workspace, Fitbit, Oura, Kalshi, etc.
Hosted Google Calendar MCP server for AI agents. No self-hosting or Google Cloud setup.
Related MCP Servers
- AlicenseNot gradedqualityFmaintenanceMCP server that enables Claude to interact with Google Workspace services including Drive, Docs, Sheets, Slides, Calendar, Gmail, and Contacts.719 npm38MIT
- AlicenseNot gradedqualityBmaintenanceMCP server for Google Drive, Docs, and Sheets — built for Claude Code. Gives Claude Code direct read/write access to Google Sheets (cell-level edits, formatting, structure), Google Docs (insert, replace, append), and Drive (search).35 npm1MIT
- AlicenseNot gradedqualityDmaintenanceA self-hosted MCP server providing Claude with authenticated access to Google Calendar, Gmail, Drive, Docs, Sheets, and Slides via 43 tools and secure OAuth2.1,091 npmMIT
- AlicenseNot gradedqualityBmaintenanceMCP server connecting Claude to Google Sheets, Docs, and Drive, enabling cell-level editing, formatting, chart creation, and file management through natural language.1,091 npmMIT