Skip to main content
Glama

@dasasian/gdocs-mcp

An MCP server that lets an AI agent (like Claude Code) treat a Google Doc like a local file — read it, edit it by content, review and resolve suggestions, manage comments, and work across tabs and multiple Google accounts.

Status: beta. The tool surface is complete and every change is verified against the live API, not just unit tests. Markdown code blocks are the one construct still to render (see Roadmap).

Why this exists

Most Google Docs MCP servers treat a doc as flat text. This one fills the gap nobody else does:

  • Suggestions as diffs you can act on. list_suggestions shows pending tracked-changes as before → after; apply_suggestions accepts/rejects one or more cleanly. read_doc can render them inline as <ins>/<del>.

  • File-like editing. edit_doc matches a unique snippet of text (like a local Edit) and rewrites it — indices are never exposed.

  • Comments. Read threads (author, quoted text, replies, resolved status), reply, resolve, add.

  • Tabs as sub-files. Full create/rename/delete, and every read/edit tool can target a specific tab.

  • Multiple accounts. Authorize several Google accounts; pick a default per project.

Related MCP server: LLM2Docs (Unofficial)

What you can ask for

You don't call tools. You ask in plain language and the agent drives them.

Fill a template without rebuilding it

"Copy the Proposal Template into /Clients/Acme, name it 'Acme Q3 Proposal', then fill in the client name, the dates, and the pricing table."

The copy keeps the letterhead, the logo at its exact size, the fonts and the page setup — everything a markdown round-trip cannot rebuild. Then only the words that change are edited. The alternative is retyping a document you already have.

A whole review pass in one instruction

"Show me the pending suggestions as a diff, accept the typo fixes, reject anything that changes meaning, then reply to the open comments and resolve the ones that are settled."

Four tools, one sentence, and the judgement in the middle is the part you wanted help with. Most Docs integrations cannot see tracked changes at all, let alone act on them safely.

More: publishing a folder of markdown as a Drive tree, auditing many docs for style drift, pulling a doc back into your repo with its images → docs/recipes.md.

Install

npm install -g @dasasian/gdocs-mcp

Or from source:

git clone https://github.com/dasasian/gdocs-mcp && cd gdocs-mcp
npm install && npm run build
npm link   # makes `gdocs-mcp` available globally, same as the published package

Then follow the setup below exactly as an installed user would. (npm link symlinks the gdocs-mcp binary to your build; see CONTRIBUTING.md for the dev workflow.)

Setup

You need a Google Cloud OAuth client (one-time). Each user creates their own — this keeps your credentials yours and avoids Google app-verification for the restricted Drive scope.

  1. Create a project + enable APIs (or use the setup guide):

    gcloud projects create my-gdocs-mcp
    gcloud config set project my-gdocs-mcp
    gcloud services enable docs.googleapis.com drive.googleapis.com
  2. OAuth consent screen (Cloud Console → APIs & Services → OAuth consent screen): User type External, add yourself as a Test user. For long-lived tokens, set publishing status to In production (avoids the 7-day refresh-token expiry).

  3. OAuth client → Create credentials → OAuth client IDDesktop app. Download the JSON and save it as ~/.config/gdocs-mcp/client_secret.json.

  4. Authorize an account (opens a browser):

    gdocs-mcp add-account

    Repeat for each Google account you want to use.

Configure your MCP client

In a project's .mcp.json (Claude Code) or equivalent:

{
  "mcpServers": {
    "gdocs": {
      "command": "gdocs-mcp",
      "env": { "GDOCS_DEFAULT_ACCOUNT": "you@example.com" }
    }
  }
}

GDOCS_DEFAULT_ACCOUNT sets which authorized account this project uses by default — so a work project and a personal project can point at different accounts without re-authorizing. Any tool call can override it with an account argument.

Prefer it available in every project? Register once at user scope: claude mcp add gdocs -s user -e GDOCS_DEFAULT_ACCOUNT=you@example.com -- gdocs-mcp. Then a project can pin its own defaults with a .gdocs-mcp.json — both the account and a default folder for new docs:

{ "account": "work@company.com", "folder": "https://drive.google.com/drive/folders/…" }

With a folder set, create_doc files new docs there automatically (an explicit folder argument still overrides). See docs/setup.md for the full resolution order.

You don't have to edit that file by hand — just tell the agent "make damithsc@gmail.com my default account for this project" or "make my Manuscripts folder the default here," and it writes the .gdocs-mcp.json for you via set_project_default (searching for the folder by name if needed).

Tools

The table below is the reference. For what to actually ask for, see What you can ask for above, or the full set in docs/recipes.md.

Tool

Description

read_doc

Read as markdown + inline HTML — text color/size/font come back as <span style="…">, so styling is visible and round-trips. Modes: clean · tracked (<ins>/<del>) · accepted · rejected. segment: body (default) / header / footer / all — a body read always reports what the headers/footers hold, so a letterhead never reads as empty

edit_doc

Replace a unique text snippet (string-anchored, markup-tolerant; new text supports inline markdown)

set_style

Style existing text in place — like selecting in Docs and applying formatting: a from/to selection, a single from snippet, or the whole_document. bold/italic/underline/strikethrough, color, font size/family, link, alignment, paragraph spacing (before/after/line)

get_page_setup / set_page_setup

Read / set document-level page setup: margins, page size (preset or explicit), orientation (File > Page setup)

get_style

Read the computed (inherited-resolved) style at a text anchor — paragraph spacing, alignment, fonts, colors that markdown can't show (read counterpart to set_style)

overwrite_doc

Replace a doc/tab body with markdown-rendered content — guarded against orphaning comments/suggestions

insert_content

Insert new markdown content at a position — at: "end" (default) / "top" / a unique anchor. The way to add a paragraph after a table that ends the doc, where edit_doc has nothing to anchor on

export_doc

Export a doc to a local file — pdf (default), docx, odt, rtf, txt, html, epub, md (rendered server-side by Google)

create_doc

Create a doc from markdown, optionally in a folder

list_suggestions

Pending suggestions as before → after diffs — segment to read a header/footer's

apply_suggestions

Accept or reject one or more suggestions atomically — required for overlapping/adjacent "clusters"; segment to resolve a header/footer's

insert_image

Insert an inline image from a URL or a local file — position, size, left/center/right align. segment: "header" (+ createSegment) puts a letterhead logo where it repeats

download_images

Download a doc’s embedded images to a local folder (pairs with read_doc’s image markers — the inverse of publishing)

insert_table

Insert a rows×columns table — data fill (cells accept inline markdown), per-column align, column widths, header shading; segment/createSegment for a letterhead table

edit_table

Table structure ops — insert/delete a row or column (surgical — locate the table by cell text); segment for header/footer tables

set_table_style

Style an existing table (located by cell text): cell padding, background, cell borders (width: 0 = borderless), column widths, pinned header rows — scope table/row/column/cell; segment for header/footer tables

get_table_style

Read a table's style (located by cell text): column widths, pinned header rows, and the matched cell's padding, background and per-side borders — the read counterpart to set_table_style

list_comments / add_comment / resolve_comment

Comment threads (add_comment also replies, via replyTo)

list_tabs / add_tab / rename_tab / delete_tab

Tab structure

drive

Drive as a filesystem: ls find mkdir cp mv. Paths are / or ~ (My Drive), /shared/<drive>, /shared-with-me, /lost+found; anything else is an id. cp preserves what markdown can’t round-trip (headers/footers, image sizing, exact formatting), so prefer it over rebuilding a template. See Drive as a filesystem

list_permissions / share_doc / unshare_doc

Sharing (share_doc handles both people and anyone-with-link). list_permissions names every audience, including domain-wide grants a Workspace adds on creation; unshare_doc revokes those by permissionId, and requires expectRole since a revocation appears in no version history

list_accounts

Authorized Google accounts

set_project_default / get_project_config

Set/show this project’s default account + folder (writes .gdocs-mcp.json)

Every doc tool accepts an optional account (override the default) and, where relevant, a tab (target a tab by id or title).

Drive as a filesystem

Drive navigation is one tool speaking shell, because the model already knows shell. Arguments are positional and differ per command, exactly as they do in a terminal.

{ "cmd": "ls",    "args": ["/Work/2026"] }
{ "cmd": "find",  "args": ["quarterly report", "-type", "d"] }
{ "cmd": "mkdir", "args": ["-p", "/Work/2027/Q1"] }
{ "cmd": "cp",    "args": ["/Work/Template", "/Work/2027/Q1/Report"] }
{ "cmd": "mv",    "args": ["/Work/Roof", "/Archive"], "expectName": "Roof" }

path

is

/… or ~/…

My Drive

/shared/<drive name>/…

a shared drive

/shared-with-me

files others shared with you, which you never filed

/lost+found

files you own that are in no folder — see below

anything else

a Drive id or URL, so ids from any other tool paste straight in

Flags and operands parse in any order (cp -r a b, cp a b -r, cp a -r b), and -- ends the options.

Three places Drive is not a filesystem. The vocabulary is borrowed only where it is honest, and refuses where it is not:

  • Two files may share a name in one folder, and matching folds case. No filesystem the model learned from does either, so it would not think to check. A path matching more than one thing is refused with the candidates listed, never guessed — and cp/mv refuse to create that state too, rather than manufacturing an ambiguity the resolver would then decline to resolve.

  • cp -r does not exist. Drive's files.copy refuses folders (its own web UI cannot copy one either), so cp on a folder explains that rather than half-working.

  • mv into /shared/… gives the file away. Shell mv across filesystems leaves you owning the file; moving into a shared drive transfers ownership to that organization and cannot be undone from your side. It requires acceptOwnershipTransfer: true.

Paths see less than find does. A file with no parent still opens and still turns up in a search, but no path can name it — nothing that browses the tree will ever show it. find is the complete view; /lost+found is where those files surface.

There is no rm. See #47.

Known limitations

These are Google-API constraints, not bugs — the highlights are below; the complete reference (with the API reason and the workaround for each) is in docs/limitations.md.

  • Can't create suggestions. No API writes in suggestion mode — every edit is direct (live text). apply_suggestions only resolves existing ones. Tools that write say so.

  • No suggestion attribution (author/timestamp) — suggestions are listed in document order.

  • Comments created via the API aren't anchored to text, and Drive returns author name only (no email).

  • Images are inline only (no floating/x,y positioning), and Google downscales/re-encodes embedded images, so pulled copies aren't byte-identical.

  • Headers and footers are separate content trees — not part of the body. Every content tool (read_doc, edit_doc, set_style, get_style, insert_content, insert_image, insert_table, edit_table, set_table_style, list_suggestions, apply_suggestions) takes segment: "header" | "footer" to reach them, and page when a doc defines more than one.

  • Markdown can't express computed style (spacing, fonts, colors) or deep table styling — read it with get_style, set it with set_style/set_table_style. Code blocks aren't rendered from markdown yet (roadmap).

See docs/limitations.md for the full table, including how each is mitigated or surfaced.

Roadmap

  • Code blocks in the markdown writer — the remaining Tier-2 block type (tables and images already render; standalone insert_table / insert_image tools exist too).

Suggestion attribution (author/timestamp) is not on the roadmap — it has no API path for typical suggestions (see docs/limitations.md).

The "manuscript sync" use case (chapter files ⇄ tabs, reviewing suggestions, merging) is intentionally not a server feature — an AI agent orchestrates it over these primitives. See DESIGN.md §10b.

Development

npm install
npm run build      # tsc
npm test           # vitest
npm run typecheck

See DESIGN.md for the full architecture and the empirical findings behind it.

Acknowledgements

Architecture and approach informed by prior open-source Google Docs MCP servers — notably @a-bonus/google-docs-mcp and taylorwilsdon/google_workspace_mcp.

License

MIT © Dasasian

Available Tools

32 tools
add_commentAdd a comment or replyA

Add a comment to a Google Doc, or reply to an existing comment thread by passing replyTo (a comment id from list_comments). A new comment (no replyTo) is not anchored to specific text — the Docs/Drive API cannot anchor programmatically-created comments.

ParametersJSON Schema
NameRequiredDescriptionDefault
accountNoGoogle account email to use. Defaults to GDOCS_DEFAULT_ACCOUNT, or the sole account.
contentYes
replyToNoa comment id (from list_comments) to reply to; omit to start a new top-level comment
documentIdYes

TDQS

A4.4/5.0
Behavior4/5

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

With no annotations, the description carries the full burden. It discloses a key behavioral trait: programmatically-created comments are not anchored to specific text. This is valuable context beyond the basic mutation. It doesn't mention permissions or response behavior, but the anchoring limitation is a significant disclosure.

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

Conciseness5/5

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

Two sentences, front-loaded with the primary purpose and immediately followed by the critical replyTo parameter explanation and API limitation. No wasted words, all information is relevant.

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

Completeness4/5

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

The description sufficiently covers the tool's functionality and key limitations. It addresses the main usage scenarios (comment vs reply) and references the source of replyTo IDs. It doesn't detail error handling or return values, but there is no output schema and the tool's behavior is simple enough that this is not a major gap.

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

Parameters4/5

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

Schema coverage is 50% (only account and replyTo have descriptions). The description compensates by explaining replyTo semantics ('a comment id from list_comments') and the behavior when replyTo is omitted. It does not explicitly describe documentId or content, but these are straightforward and self-evident from the parameter names.

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

Purpose5/5

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

The description clearly states the verb and resource: 'Add a comment to a Google Doc, or reply to an existing comment thread'. It distinguishes from siblings like list_comments and resolve_comment by describing both operations (comment and reply) and referencing the companion tool list_comments for obtaining replyTo IDs.

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

Usage Guidelines4/5

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

The description gives clear context on when to use the tool: for adding a comment or replying to an existing thread (by passing replyTo from list_comments). It also explains the limitation of new comments not being anchored. However, it does not explicitly exclude alternatives or state when NOT to use it.

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

add_tabAdd a tabA

Add a new tab to a Google Doc. Returns the new tabId. Optionally set position (index) and parent tab for nesting.

ParametersJSON Schema
NameRequiredDescriptionDefault
indexNoposition among tabs
titleYes
accountNoGoogle account email to use. Defaults to GDOCS_DEFAULT_ACCOUNT, or the sole account.
documentIdYes
parentTabIdNonest under this tab

TDQS

A3.9/5.0
Behavior3/5

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

The description adds behavioral details beyond the schema by noting the return of the new tabId and the optional nesting behavior. However, with no annotations provided, it does not disclose any side effects, permission requirements, or default behavior (e.g., tab placed at end unless index specified), leaving some ambiguity.

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

Conciseness5/5

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

The description is two sentences, front-loads the primary purpose, and uses no redundant wording. Every sentence contributes essential information.

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

Completeness3/5

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

For a tool with 5 parameters and no output schema, the description provides the core action and return value but omits details such as the 'account' parameter, default placement behavior, and any prerequisites/errors. It is adequate for a simple add operation but not fully complete.

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

Parameters3/5

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

The description clarifies the purpose of 'index' and 'parentTabId' by mentioning position and nesting, but these already have descriptions in the schema. It does not add meaning for required parameters 'documentId' and 'title', which lack schema descriptions, leaving a coverage gap.

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

Purpose5/5

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

The description uses a specific verb ('Add') and resource ('new tab to a Google Doc'), clearly distinguishing from sibling tools like rename_tab and delete_tab. It also mentions the return value (tabId), which clarifies the operation's outcome.

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

Usage Guidelines4/5

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

The description states the tool adds a tab and optionally allows setting position and parent tab for nesting, providing context for how to use it. However, it does not explicitly mention alternatives or when not to use the tool, so it falls short of full guidance.

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

apply_suggestionsAccept/reject one or more suggestionsA

Resolve one or more pending suggestions (from list_suggestions) in ONE atomic update: accept keeps the proposed text, reject keeps the original. Pass one resolution to resolve a single suggestion, or several at once — required for suggestions that overlap or adjoin each other (a "cluster"), which cannot be resolved one at a time without corrupting neighbours. You MUST include every suggestion in any cluster you touch; a partially-resolved cluster is refused (status "incomplete"). documentTitle is checked against the live document first (status "wrong_doc" on mismatch, e.g. an id from a different, similarly-titled document). Copy each suggestion's preview from list_suggestions into its expectedChange (verified before applying). If the result includes a conflicts array, two suggestions genuinely conflicted (one inserts text inside another's deletion, both accepted) — it was auto-resolved by keeping the insertion; surface this to the user as NOT a clean merge.

ParametersJSON Schema
NameRequiredDescriptionDefault
tabNoTarget a specific tab by tabId or title (from list_tabs). Defaults to the first tab.
pageNowhich header/footer, when a doc defines more than one (default-page, first-page, even-page). Omit to use whichever exists.
accountNoGoogle account email to use. Defaults to GDOCS_DEFAULT_ACCOUNT, or the sole account.
segmentNowhich content tree to target: body (default), or the page header/footer. Header/footer content is invisible to a body read — a letterhead logo lives there.
documentIdYesGoogle Doc id
resolutionsYesone entry per suggestion to resolve
documentTitleYesThe document's title, from list_suggestions. Shown for confirmation only.

TDQS

A4.7/5.0
Behavior5/5

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

With no annotations, the description fully discloses critical behaviors: atomicity, cluster refusal with status 'incomplete', documentTitle verification with 'wrong_doc', expectedChange validation, and the conflicts array with auto-resolution instructions. This is excellent transparency beyond what any schema could convey.

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

Conciseness5/5

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

Every sentence earns its place, covering the core action, the clustering rule, the document check, expectedChange copying, and conflict behavior. Though longer than a simple tool, the complexity justifies the length, and it is front-loaded with the primary purpose.

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

Completeness5/5

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

For a 7-parameter tool with no output schema, the description is remarkably complete: it explains all failure statuses, the cluster requirement, the conflicts array, and the workflow from list_suggestions. An agent has everything needed to invoke it correctly.

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

Parameters4/5

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

The schema already covers parameter descriptions 100%, but the description adds crucial semantic guidance: how to populate expectedChange from the suggestion's preview and that multiple resolutions are needed for clusters. This goes beyond the schema's basic field descriptions.

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

Purpose5/5

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

The description clearly states the action: 'Resolve one or more pending suggestions' and differentiates it from sibling tools like list_suggestions (which lists them). It specifies accept/reject semantics and the atomic nature of the update, making the tool's purpose unmistakable.

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

Usage Guidelines4/5

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

It explicitly connects to list_suggestions as the source and explains when multiple resolutions are required (overlapping/adjoining suggestions), even noting that a partially resolved cluster is refused. It doesn't explicitly name alternatives or when not to use, but the context is clear enough for an agent to decide.

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

create_docCreate a new Google DocA

Create a new Google Doc with a title and optional initial content (rendered as markdown). Optionally place it in a Drive folder (by folder URL or id); otherwise it goes to My Drive root. For long documents, pass contentFile (a local path) instead of content so the server reads the body directly — retyping a long doc inline can silently drop or fuse text.

ParametersJSON Schema
NameRequiredDescriptionDefault
titleYes
folderNoDrive folder URL or id to create the doc in
accountNoGoogle account email to use. Defaults to GDOCS_DEFAULT_ACCOUNT, or the sole account.
baseDirNoabsolute dir to resolve relative local image paths against (e.g. the markdown file’s folder)
contentNo
contentFileNopath to a local markdown/text file to use as the body, read directly by the server — preferred for long documents so the body is passed through mechanically rather than retyped inline (which can silently drop text). Absolute, or relative to baseDir. Mutually exclusive with content.

TDQS

A4.4/5.0
Behavior4/5

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

No annotations are present, so the description must carry full behavioral weight. It discloses that content is rendered as markdown, default placement is My Drive root, and warns about a real failure mode (silent text loss) with inline content. It doesn't mention return values or auth, but for a create operation it offers solid transparency.

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

Conciseness5/5

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

Three sentences, each earning its place: core creation purpose, folder placement default, and the critical long-document guidance. Information is front-loaded and there is no fluff.

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

Completeness4/5

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

Given 6 parameters, no output schema, and no annotations, the description covers creation semantics, folder placement, a parameter trade-off, and a behavioral warning. It doesn't describe return values, but that's not required without an output schema. It lacks only minor details like error handling or prerequisites, but remains strong overall.

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

Parameters4/5

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

Schema coverage is 67%, leaving title and content without descriptions. The description adds meaning to content ('rendered as markdown') and contentFile (server reads directly, preferred for long docs, mutually exclusive with content). It also clarifies folder (URL or id) and default behavior. This compensates well for the schema gaps.

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

Purpose5/5

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

The description opens with 'Create a new Google Doc' — a specific verb and resource — and clarifies it supports a title, optional markdown content, and optional folder placement. This clearly distinguishes it from siblings like update_doc, overwrite_doc, and read_doc.

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

Usage Guidelines4/5

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

It explicitly recommends contentFile for long documents to avoid silent text dropping, which is an alternative to content. It also implies creation vs. editing by naming the action 'Create' and describing the default My Drive root. It doesn't explicitly contrast with sibling create/update tools, but the usage context is clear.

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

delete_tabDelete a tabA

Delete a tab by tabId (cascades to child tabs). expectTitle (the tab’s title from list_tabs) is REQUIRED — it is shown in the confirmation and verified against the live tab, so an opaque/stale tabId cannot silently delete the wrong tab.

ParametersJSON Schema
NameRequiredDescriptionDefault
tabIdYes
accountNoGoogle account email to use. Defaults to GDOCS_DEFAULT_ACCOUNT, or the sole account.
documentIdYes
expectTitleYesthe tab’s title (from list_tabs); verified before deleting

TDQS

A4.2/5.0
Behavior4/5

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

With no annotations, the description carries the full burden of disclosure. It transparently reveals cascading deletion of child tabs and the safety verification mechanism using expectTitle. It doesn't mention permanence or permission requirements, but covers the most important destructive behaviors.

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

Conciseness5/5

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

Two sentences, front-loaded with the action and key detail (cascade), followed by the essential safety constraint. Every word earns its place without fluff.

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

Completeness4/5

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

For a delete tool with no annotations and no output schema, the description covers the action, the cascade behavior, and a critical prerequisite. It doesn't describe the return value or any cleanup details, but the tool is relatively simple and the provided context is sufficient for correct invocation.

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

Parameters3/5

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

Schema description coverage is only 50%, and the description compensates by explaining the purpose and criticality of expectTitle, and clarifying that tabId is the identifier. However, documentId and account parameters lack meaningful explanation beyond the schema, so the value added is partial.

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

Purpose5/5

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

The description clearly states the action ('Delete a tab') and the specific resource (by tabId), and uniquely distinguishes it from sibling tools like add_tab and rename_tab. It also adds the cascading behavior, which is specific to this delete operation.

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

Usage Guidelines4/5

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

The description implies when to use the tool (when deleting a tab) and provides a crucial usage requirement: expectTitle must come from list_tabs. However, it doesn't explicitly mention alternatives or when not to use it, such as if child tabs should be preserved.

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

download_imagesDownload a doc’s imagesA

Download every embedded image in a Google Doc to a local folder. Returns the objectId→filename mapping, which correlates with read_doc’s <img src="image:<objectId>"> markers so you can rewrite them to local paths (the inverse of publishing).

ParametersJSON Schema
NameRequiredDescriptionDefault
dirYesabsolute local folder to save images into (created if missing)
tabNoTarget a specific tab by tabId or title (from list_tabs). Defaults to the first tab.
accountNoGoogle account email to use. Defaults to GDOCS_DEFAULT_ACCOUNT, or the sole account.
documentIdYes

TDQS

A4.2/5.0
Behavior4/5

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

With no annotations, the description carries full transparency burden. It discloses the side effect (downloading to local folder), the return value (objectId→filename mapping), and a key integration behavior (correlation with read_doc). It doesn't mention permissions, error behavior, or that the doc itself isn't modified, but 'download' implies non-destructive read from the doc. The transparency is solid without being exhaustive.

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

Conciseness5/5

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

The description is two sentences: the first states the core action, the second explains the return mapping and a crucial correlation with read_doc. Every sentence adds value with no filler or redundancy. It is front-loaded and easy to scan.

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

Completeness4/5

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

Given that there is no output schema and no annotations, the description successfully communicates the tool's purpose, output, and usage context. It covers the main use case (downloading all images and rewriting references). It doesn't address edge cases like 'no images' or error handling, but those are minor for a download tool; overall it's complete enough for an agent to select and invoke it correctly.

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

Parameters3/5

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

Schema description coverage is 75% (three of four parameters have descriptions), so the schema does most of the work. The tool description says 'local folder' early on, aligning with the `dir` parameter, but doesn't discuss `documentId`, `tab`, or `account`. It adds no new parameter-level meaning beyond the schema, so a baseline 3 is appropriate.

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

Purpose5/5

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

The description opens with a specific, actionable verb phrase 'Download every embedded image in a Google Doc to a local folder', clearly identifying the resource (images in Google Doc), the action (download to local folder), and the output (objectId-to-filename mapping). It also distinguishes itself from siblings by framing itself as the 'inverse of publishing' and referencing read_doc, setting it apart from mere read or insert operations.

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

Usage Guidelines4/5

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

The description provides clear workflow context: it explains how the return mapping correlates with read_doc's image markers, indicating when you'd use this tool (to replace remote image references with local paths). However, it doesn't explicitly name alternatives or state when not to use it, so it misses the top-tier 'when-not' guidance.

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

driveDrive as a filesystemA

Navigate and reorganise Google Drive with shell commands: ls, find, mkdir, cp, mv. Arguments are positional and follow the usual shell forms. ls [path] — list a folder (default My Drive root). find [-type d|f] — search everything by name, including files no path can reach. mkdir [-p] — create a folder. cp — duplicate a file (preserves headers/footers, image sizing and exact formatting, which a markdown round-trip cannot rebuild). mv — move and/or rename, as on a filesystem: an existing folder as means "into it", anything else means "to that name". Paths start with / or ~ (My Drive); /shared/ is a shared drive, /shared-with-me the files others shared with you, and /lost+found the files you own that are in no folder at all. Anything not starting with / or ~ is read as a Drive id or URL, so ids from any other tool can be pasted straight in. Drive permits two files with the same name in one folder and folds case when matching, unlike any real filesystem — a path that matches more than one thing is refused with the candidates listed, never guessed. Content is edited with edit_doc/overwrite_doc, not here; there is no rm.

ParametersJSON Schema
NameRequiredDescriptionDefault
cmdYes
argsNopositional arguments for cmd, e.g. ["/Work/Roof", "/Archive"] for mv
accountNoGoogle account email to use. Defaults to GDOCS_DEFAULT_ACCOUNT, or the sole account.
expectNameNomv only: the name the source is expected to have; the move is refused if it resolved to something else
acceptOwnershipTransferNomv only: required to move into /shared/… , which hands ownership to that drive's organisation and cannot be undone

TDQS

A5/5.0
Behavior5/5

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

With no annotations, the description carries the full burden. It discloses key behaviors: cp preserves formatting that markdown cannot rebuild, ambiguous paths are refused with candidates listed rather than guessed, duplicate names are allowed, and case folding occurs. These are non-obvious and critical traits beyond what the schema or annotations could convey.

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

Conciseness5/5

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

The description is long but every sentence contributes unique value. It is well-structured: overview, then per-command details, path conventions, edge cases, and exclusions. No filler or redundancy; it front-loads the core purpose and flows logically. The density is appropriate for a tool with multiple subcommands.

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

Completeness5/5

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

For a multi-command filesystem interface with no output schema, the description covers all essential aspects: each command's behavior, path resolution rules, special directories, handling of duplicate names and case folding, disambiguation on ambiguity, and explicit exclusions. It also notes ownership transfer implications indirectly through schema, but the description itself is self-sufficient for a complex tool.

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

Parameters5/5

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

The description adds substantial meaning beyond the schema for the primary cmd parameter, detailing each subcommand's syntax, defaults, and special flags (e.g., '-p' for mkdir, '-type' for find). It also clarifies the 'args' parameter as positional and provides concrete examples. Even though schema coverage is 80%, the description enriches the semantics of the two most complex parameters (cmd and args) significantly.

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

Purpose5/5

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

The description opens with a clear verb+resource: 'Navigate and reorganise Google Drive with shell commands: ls, find, mkdir, cp, mv.' It immediately distinguishes from sibling tools by stating content editing is done elsewhere ('edit_doc/overwrite_doc, not here') and explicitly notes 'there is no rm.' This precisely defines the tool's scope and differentiates it from sibling content manipulation tools.

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

Usage Guidelines5/5

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

The description provides extensive usage context: path syntax ('/shared/<drive name>', '/shared-with-me', '/lost+found'), handling of IDs/URLs ('ids from any other tool can be pasted straight in'), and the nuance of mv with an existing folder. It also explicitly excludes content editing (via edit_doc/overwrite_doc) and warns against expecting rm, making the tool's place among siblings clear.

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

edit_docEdit a Google DocA

Replace an exact unique snippet of text in a Google Doc (like a local file Edit). old_string is matched markup-tolerantly; ambiguous matches return surrounding context to disambiguate. new_string is interpreted as inline markdown and inline HTML (bold, italic, code, text, <u>, <span style="color:…;font-size:…pt">) — the same spelling read_doc emits, so a read can be edited and written back. To restyle text you are NOT otherwise changing, use set_style instead: it needs no copy of the text. NOTE: this is a direct edit — the change is applied as live text, not a tracked suggestion (the Docs API cannot create suggestions). If the doc has pending suggestions from other reviewers, flag to the user that your edit will sit alongside them as an accepted change.

ParametersJSON Schema
NameRequiredDescriptionDefault
tabNoTarget a specific tab by tabId or title (from list_tabs). Defaults to the first tab.
pageNowhich header/footer, when a doc defines more than one (default-page, first-page, even-page). Omit to use whichever exists.
accountNoGoogle account email to use. Defaults to GDOCS_DEFAULT_ACCOUNT, or the sole account.
segmentNowhich content tree to target: body (default), or the page header/footer. Header/footer content is invisible to a body read — a letterhead logo lives there.
documentIdYesGoogle Doc id
new_stringYesreplacement text
old_stringYesexact text to replace (quote a unique slice from read_doc)
replace_allNoreplace every occurrence (default false)

TDQS

A4.9/5.0
Behavior5/5

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

With no annotations, the description carries full burden and excels: it discloses markup-tolerance, ambiguity handling ('ambiguous matches return surrounding context'), that new_string supports inline markdown/HTML, and the critical limitation that edits are live text, not suggestions. It also instructs flagging pending reviewer suggestions, adding behavioral nuance beyond the schema.

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

Conciseness5/5

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

Five dense sentences, each earning its place: core action, matching behavior, formatting semantics, alternative tool, and a direct-edit caveat. No fluff, well-structured, front-loaded with the main purpose.

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

Completeness5/5

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

For an 8-parameter tool with no output schema, the description fully covers the essential behavioral aspects: matching, formatting, alternatives, and the suggestions caveat. Remaining parameters are documented in the schema, and the description handles the nontrivial complexities comprehensively.

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

Parameters4/5

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

Schema coverage is 100%, so baseline is 3. The description adds value by explaining old_string's markup-tolerant matching and ambiguity handling, and clarifying that new_string uses the same formatting syntax as read_doc. This goes beyond the schema's terse 'replacement text' and enriches parameter meaning.

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

Purpose5/5

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

The description uses a specific verb+resource phrase 'Replace an exact unique snippet of text in a Google Doc' and distinguishes from the sibling set_style by explicitly noting when to use that alternative instead. It also clarifies the 'like a local file Edit' analogy, making the tool's purpose unambiguous.

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

Usage Guidelines5/5

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

It provides clear when-to-use context: quoting a unique slice from read_doc, noting markup-tolerant matching, and stating 'To restyle text you are NOT otherwise changing, use set_style instead.' It also warns about the direct-edit nature versus tracked suggestions, giving practical usage guidance.

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

edit_tableInsert or delete a table row/columnA

Structurally edit the table containing the given cell text: insert or delete a row or column. op picks the operation; side picks which side an insert goes on (for rows: after=below (default)/before=above; for columns: after=right (default)/before=left) and is ignored for deletes. Deletes remove the row/column that contains cell.

ParametersJSON Schema
NameRequiredDescriptionDefault
opYesthe structural edit to perform
tabNoTarget a specific tab by tabId or title (from list_tabs). Defaults to the first tab.
cellYestext identifying a cell in the target table
pageNowhich header/footer, when a doc defines more than one (default-page, first-page, even-page). Omit to use whichever exists.
sideNofor inserts: which side of `cell` to add on — rows after=below (default)/before=above; columns after=right (default)/before=left. Ignored for deletes.
accountNoGoogle account email to use. Defaults to GDOCS_DEFAULT_ACCOUNT, or the sole account.
segmentNowhich content tree to target: body (default), or the page header/footer. Header/footer content is invisible to a body read — a letterhead logo lives there.
documentIdYes

TDQS

A4.4/5.0
Behavior4/5

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

With no annotations, the description carries the full transparency burden. It adds meaningful behavioral details: how `op` selects the operation, how `side` controls insert position (with defaults and mapping for rows/columns), and that `side` is ignored for deletes. It also clarifies that deletes remove the row/column containing `cell`. However, it does not discuss side effects like formatting loss or whether insertions copy styles, leaving some gaps.

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

Conciseness5/5

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

The description is concise: three sentences, front-loaded with the main purpose, then parameter logic, then deletion behavior. No redundant or wordy content; every sentence adds necessary context.

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

Completeness4/5

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

The tool has 8 parameters, 4 enums, and no output schema. The description covers the core operational logic (op, side, cell targeting) and leaves other parameters (tab, page, segment, account) to the schema, which adequately documents them. It does not mention what happens to the document after the edit, but the absence of an output schema reduces that burden. Overall, it provides enough context for correct invocation.

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

Parameters4/5

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

The schema already covers 88% of parameters with descriptions. The description adds value by explaining the key role of `cell` as the locator for the target row/column, and clarifies the `side` parameter's mapping and default behavior, which goes beyond the schema's basic description. This is especially useful for selecting the correct table.

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

Purpose5/5

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

The description clearly states the tool's function: "Structurally edit the table containing the given cell text: insert or delete a row or column." This specifies the verb (edit), resource (table), and scope (insert/delete row/column), and distinguishes it from siblings like set_table_style (styling) and insert_table (new table).

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

Usage Guidelines4/5

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

The description implies when to use the tool: when you need to structurally modify an existing table identified by a cell's text. It does not explicitly mention alternatives or exclusions, but the context is clear enough that an agent can infer it is for structural edits rather than content or style changes.

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

export_docExport a doc to a fileA

Export a Google Doc to a real file on disk — pdf (default), docx, odt, rtf, txt, html, epub, or md. Google renders it server-side (File > Download in the UI), so page setup, pagination and layout match the editor. Returns the local path and byte size. Note: Drive refuses to export files larger than 10 MB.

ParametersJSON Schema
NameRequiredDescriptionDefault
dirYesabsolute local folder to save the export into (created if missing)
formatNodefault pdf
accountNoGoogle account email to use. Defaults to GDOCS_DEFAULT_ACCOUNT, or the sole account.
filenameNooverride the filename (default: the doc’s title + extension)
documentIdYes

TDQS

A4/5.0
Behavior4/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It explains that Google renders server-side, lists the return values (local path and byte size), and warns about the 10 MB export restriction. This goes beyond minimal expectations, though it could add details about overwrites or error behavior.

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

Conciseness5/5

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

The description is three sentences, front-loaded with the core purpose, and every sentence adds value: format list, rendering fidelity, return values, and a size restriction. There is no fluff or redundancy.

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

Completeness4/5

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

Given no output schema and five parameters, the description covers the key runtime behaviors: server-side rendering, page layout fidelity, return results, and the 10 MB file-size limit. It does not explain overwrite behavior or error handling, but the schema handles parameter definitions, so the description is reasonably complete for an export tool.

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

Parameters3/5

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

Schema coverage is high (80%), so the baseline is 3. The description adds little beyond the schema for parameters; it repeats format defaults and lists options but does not clarify ambiguous fields like documentId. It provides marginal context about the directory creation, but that is already in the schema.

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

Purpose5/5

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

The description opens with a specific verb ('Export') and resource ('a Google Doc') and clearly states the output ('real file on disk'), enumerating all supported formats. It also distinguishes this from sibling tools like read_doc or download_images by focusing on the export-to-file operation.

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

Usage Guidelines3/5

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

The description implies the use case (converting a Google Doc to a downloadable file) and gives a helpful note about the 10 MB limit, but it does not explicitly state when to use this tool over alternatives or mention any exclusions. The context is clear but not prescriptive.

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

get_page_setupRead document page setupA

Read a doc’s (or tab’s) page setup — margins, page size (in points, plus a preset name if it matches letter/legal/a4/tabloid), and orientation. The read counterpart to set_page_setup; use it to mirror another document’s layout onto a new doc.

ParametersJSON Schema
NameRequiredDescriptionDefault
tabNoTarget a specific tab by tabId or title (from list_tabs). Defaults to the first tab.
accountNoGoogle account email to use. Defaults to GDOCS_DEFAULT_ACCOUNT, or the sole account.
documentIdYesGoogle Doc id

TDQS

A4.2/5.0
Behavior4/5

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

With no annotations, the description carries full burden. It clearly indicates a read (non-mutating) operation, and details return specifics: margins, page size in points, preset names (letter/legal/a4/tabloid), and orientation. It doesn't cover auth or error conditions, but the core behavior is well disclosed.

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

Conciseness5/5

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

Two sentences, front-loaded with the action and resource, followed by a concise use case and sibling relationship. No redundant words, every clause earns its place.

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

Completeness4/5

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

For a read tool with a small parameter set, the description sufficiently covers what it returns (specific formatting details) and how to use it. No output schema exists, but the description compensates by listing return components. Slight gap: no mention of error behavior or authentication, but not expected for this simple tool.

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

Parameters3/5

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

Schema description coverage is 100%, so the baseline is 3. The description adds mild value by framing the tool as applying to a doc or tab, which aligns with the 'tab' parameter, but it doesn't add parameter details beyond the schema.

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

Purpose5/5

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

The description clearly states the verb 'Read' and the resource 'page setup', enumerating specific components (margins, page size, orientation) and noting it works on a doc or tab. It explicitly labels itself as the read counterpart to set_page_setup, distinguishing it from siblings.

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

Usage Guidelines4/5

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

The description identifies a specific use case ('mirror another document's layout onto a new doc') and names the complementary tool (set_page_setup). While it doesn't explicitly list when not to use alternatives, the 'read counterpart' framing provides clear placement among siblings.

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

get_project_configShow this project’s gdocs defaultsA

Show the effective .gdocs-mcp.json defaults (account/folder) for the current working directory, and where the file is.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.4/5.0
Behavior4/5

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

With no annotations, the description carries full burden. It discloses that the tool reads a project configuration file and shows the effective defaults and file location. 'Show' implies no side effects, and the specificity about output (account/folder and file path) is transparent. It doesn't cover edge cases like a missing config, but for a simple getter this is adequate.

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

Conciseness5/5

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

The description is a single sentence that front-loads the action and then specifies the resource and additional output (file location). Every word earns its place; there is no redundancy, and it is appropriately sized for a tool with no parameters.

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

Completeness4/5

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

Given the tool's simplicity (no params, no output schema), the description is complete enough. It explains what the tool does and what it shows (defaults and file location), which serves as a high-level return description. It could mention error behavior or fallback defaults, but this is a minor gap.

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

Parameters4/5

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

The tool has zero parameters, so the baseline is 4. The input schema is empty and fully covers the parameter surface. The description adds no parameter-specific details because none exist, but it clarifies what the tool returns in context of the project configuration.

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

Purpose5/5

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

The description clearly states the action ('Show'), the specific resource ('.gdocs-mcp.json defaults'), and the scope ('current working directory'). It also distinguishes itself from siblings like 'set_project_default' by focusing on the read/display side, and from 'list_accounts' by targeting project-level configuration.

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

Usage Guidelines4/5

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

The description provides clear context for when to use the tool: when you need to see the effective project defaults (account/folder) and the config file location. It doesn't explicitly name alternatives or exclusions, but the read-only nature is distinguishable from write-style siblings like 'set_project_default'.

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

get_styleRead computed style at a text anchorA

Read the effective (inherited-resolved) style at a unique text snippet — read_doc’s markdown can’t express these; the read counterpart to set_style. Returns paragraph style (namedStyleType, alignment, spaceBefore/spaceAfter in pt, lineSpacing %, and whether spacing is inherited) and text style (bold/italic/underline/strikethrough, fontSize pt, fontFamily, color hex, link). Use it to diagnose things markdown hides — e.g. an unexpected gap between paragraphs is spacing (spaceAfter>0), not a blank line, and is fixed with set_style’s spaceAfter, not edit_doc.

ParametersJSON Schema
NameRequiredDescriptionDefault
tabNoTarget a specific tab by tabId or title (from list_tabs). Defaults to the first tab.
pageNowhich header/footer, when a doc defines more than one (default-page, first-page, even-page). Omit to use whichever exists.
accountNoGoogle account email to use. Defaults to GDOCS_DEFAULT_ACCOUNT, or the sole account.
segmentNowhich content tree to target: body (default), or the page header/footer. Header/footer content is invisible to a body read — a letterhead logo lives there.
documentIdYes
target_stringYesexact text to read the style of (quote a unique slice from read_doc)

TDQS

A4.7/5.0
Behavior5/5

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

With no annotations provided, the description carries the full burden and performs well: it explains the return shape (paragraph style with namedStyleType, alignment, spacing in pt, lineSpacing %, inheritance; text style with bold/italic/underline/strikethrough, fontSize pt, fontFamily, color hex, link) and reveals the behavioral nuance of 'effective (inherited-resolved)' style. It also implies read-only by calling it 'read counterpart to set_style', and provides a concrete diagnostic example.

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

Conciseness5/5

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

Three sentences, front-loaded with the core purpose, then return details, then a diagnostic use case. Every sentence is informative with no filler. The length is justified given the return value complexity and the need to distinguish from siblings.

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

Completeness5/5

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

The tool has no output schema, so the description compensates by enumerating return fields. It also provides context on why to use it (read_doc can't express styles), which sibling to compare with (set_style), and an example of unexpected spacing. The description is complete for a read tool with schema-documented parameters.

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

Parameters3/5

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

Schema coverage is high (83%), so baseline is 3. The description adds little beyond schema: it repeats 'unique text snippet' which the schema already says as 'exact text to read the style of (quote a unique slice from read_doc)'. No new meaning is added for tab, page, segment, or account parameters, so the description does not enhance parameter understanding beyond the schema.

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

Purpose5/5

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

The description clearly states the tool reads the effective (inherited-resolved) style at a unique text snippet, differentiating it from read_doc which cannot express such styles, and explicitly identifies it as the read counterpart to set_style. The verb 'Read' and resource 'style at a unique text snippet' are specific, and the mention of sibling tools distinguishes it.

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

Usage Guidelines5/5

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

The description explicitly states when to use this tool: to diagnose things markdown hides, e.g., an unexpected gap between paragraphs is spacing (spaceAfter>0), not a blank line. It also names alternatives and exclusions: it is fixed with set_style's spaceAfter, not edit_doc, and read_doc's markdown can't express these styles. This provides clear when-to-use and when-not-to-use guidance.

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

get_table_styleRead an existing table’s styleA

Read the style of the table containing the given cell text: per-column widths (points), how many header rows are pinned, and the matched cell’s padding, background and per-side borders. The read counterpart to set_table_style — use it to check a change took, to preserve a table’s look while rewriting it, or to copy one table’s layout onto another. Column widths come back in the exact shape set_table_style accepts. Table-wide facts (widths, header rows) are reported for the whole table; padding/background/borders are reported for the MATCHED cell, since cells in one table can differ and a table-wide answer would have to guess. Note Docs gives every cell 5pt padding by default, so padding is reported even on a table nobody has styled.

ParametersJSON Schema
NameRequiredDescriptionDefault
tabNoTarget a specific tab by tabId or title (from list_tabs). Defaults to the first tab.
cellYestext of any cell in the target table (locates the table)
pageNowhich header/footer, when a doc defines more than one (default-page, first-page, even-page). Omit to use whichever exists.
accountNoGoogle account email to use. Defaults to GDOCS_DEFAULT_ACCOUNT, or the sole account.
segmentNowhich content tree to target: body (default), or the page header/footer. Header/footer content is invisible to a body read — a letterhead logo lives there.
documentIdYes

TDQS

A4.6/5.0
Behavior5/5

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

No annotations are provided, so the description carries the full burden. It clearly discloses that table-wide facts apply to the whole table while cell-specific attributes apply to the matched cell, and warns that Docs gives every cell 5pt padding by default. It also promises output shape compatibility with set_table_style, which is a useful behavioral guarantee.

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

Conciseness4/5

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

The description is longer than a minimal one, but every sentence earns its place: the first states the core function, the second gives use cases, the third addresses output shape, the fourth clarifies scope, and the fifth covers a default caveat. It is front-loaded and not repetitive, though slightly verbose.

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

Completeness5/5

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

There is no output schema, so the description must explain return values. It does so by listing the specific style attributes and clarifying which are table-wide vs cell-specific. It also handles an edge case (default padding on unstyled tables). For a read tool with nuanced output, this is complete.

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

Parameters3/5

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

Schema description coverage is high (83%), and the description does not add much parameter-level meaning beyond the schema. The cell parameter's role as a locator is already described in the schema ('text of any cell in the target table (locates the table)'), so the description's added value is mostly about output semantics rather than input parameter clarification.

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

Purpose5/5

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

The description opens with a specific verb+resource: 'Read the style of the table containing the given cell text' and enumerates exactly what is read (widths, header rows, cell padding/background/borders). It explicitly positions itself as the read counterpart to set_table_style, distinguishing it from the sibling get_style which likely targets document/paragraph style.

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

Usage Guidelines5/5

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

The description provides explicit use cases: 'check a change took, preserve a table’s look while rewriting it, or copy one table’s layout onto another.' It also clarifies that it is the read counterpart to set_table_style, implying when to use the write tool instead.

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

insert_contentInsert content at a positionA

Insert NEW markdown-rendered content at a structural position — no anchor text required. at: "end" (default, the end of the doc/tab) · "top" · a unique text snippet to insert immediately after. Use this where edit_doc can’t reach: adding a paragraph after a table that ends the doc (a table’s cells can’t anchor an insert outside the table, and the trailing empty paragraph has no text to match), or appending to an empty doc. Use edit_doc instead when you are replacing or extending existing text. Content is full markdown (headings, lists, tables, images), same renderer as create_doc. A direct edit, not a tracked suggestion.

ParametersJSON Schema
NameRequiredDescriptionDefault
atNo"end" (default) | "top" | a unique text snippet to insert right after
tabNoTarget a specific tab by tabId or title (from list_tabs). Defaults to the first tab.
pageNowhich header/footer, when a doc defines more than one (default-page, first-page, even-page). Omit to use whichever exists.
accountNoGoogle account email to use. Defaults to GDOCS_DEFAULT_ACCOUNT, or the sole account.
baseDirNoabsolute dir to resolve relative local image paths against
contentNomarkdown content to insert (or use contentFile)
segmentNowhich content tree to target: body (default), or the page header/footer. Header/footer content is invisible to a body read — a letterhead logo lives there.
documentIdYes
contentFileNopath to a local markdown/text file to insert, read directly by the server — preferred for long content. Absolute, or relative to baseDir. Mutually exclusive with content.
createSegmentNowhen segment is header/footer and the doc has none, create it first (the letterhead case). Only the default header/footer can be created via the API.

TDQS

A4.7/5.0
Behavior4/5

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

No annotations are provided, so the description carries the full burden. It discloses that this is a direct edit (not a tracked suggestion), that content is full markdown with the same renderer as create_doc, and that no anchor text is required. It could additionally note behavior like failure on unmatched snippet, but the disclosed traits are useful.

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

Conciseness5/5

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

The description is five dense sentences with no wasted words. It front-loads the core purpose and packs usage guidance, edge cases, and rendering details efficiently.

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

Completeness5/5

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

For a 10-parameter tool with no annotations and no output schema, the description covers purpose, when to use/not use, behavioral traits, and key parameter semantics. It is sufficiently complete for an agent to select and invoke it correctly.

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

Parameters4/5

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

Schema description coverage is high (90%), so baseline is 3. The description meaningfully adds to the at parameter by defining 'end', 'top', and 'unique text snippet', and clarifies content supports full markdown. Other parameters rely on schema descriptions, which are adequate.

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

Purpose5/5

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

Clearly states the tool inserts new markdown content at a structural position without requiring anchor text. The description distinguishes it from edit_doc by explicitly naming the alternative and defining the at-parameter options (end, top, snippet).

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

Usage Guidelines5/5

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

Gives explicit when-to-use guidance with edge cases where edit_doc cannot reach (adding after a table at end of doc, appending to empty doc). It also tells when to use edit_doc instead (replacing/extending existing text) and clarifies it is a direct edit, not a suggestion.

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

insert_imageInsert an imageA

Insert an inline image from a public URL or a local file (uploaded to Drive, embedded, then the temp upload removed). Position via at (top/end/or a unique text anchor), size via width/height (points), and align left/center/right. Set segment:"header" for a letterhead logo — that is where a repeating, correctly-sized logo belongs, and it is why a template’s logo is invisible to a body read. A direct edit, not a tracked suggestion. Note: floating/text-wrapped images are not supported by the Docs API.

ParametersJSON Schema
NameRequiredDescriptionDefault
atNo"top", "end", or a unique text snippet to insert after (default top)
tabNoTarget a specific tab by tabId or title (from list_tabs). Defaults to the first tab.
uriYespublic image URL, or a path to a local image file (absolute, or relative to baseDir)
pageNowhich header/footer, when a doc defines more than one (default-page, first-page, even-page). Omit to use whichever exists.
alignNo
widthNopoints
heightNopoints
accountNoGoogle account email to use. Defaults to GDOCS_DEFAULT_ACCOUNT, or the sole account.
baseDirNoabsolute dir to resolve a relative local `uri` against
segmentNowhich content tree to target: body (default), or the page header/footer. Header/footer content is invisible to a body read — a letterhead logo lives there.
documentIdYes
createSegmentNowhen segment is header/footer and the doc has none, create it first (the letterhead case). Only the default header/footer can be created via the API.

TDQS

A4.7/5.0
Behavior5/5

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

Without annotations, the description fully discloses the local file upload workflow (uploaded to Drive, embedded, temp upload removed), states this is a direct edit not a tracked suggestion, and explains the header invisibility behavior — substantial behavioral context.

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

Conciseness5/5

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

Four sentences cover the core behavior, positioning, sizing, alignment, header specifics, edit type, and a limitation — every sentence carries useful information with no redundancy.

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

Completeness5/5

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

Given 12 parameters and no output schema, the description addresses the main use cases (body and header images), the local file lifecycle, and the API restriction on floating images, making it sufficient for an agent to invoke correctly.

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

Parameters4/5

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

Schema coverage is 83%, so the baseline is 3, but the description adds meaningful context to `at` (top/end/unique text anchor) and `segment` (letterhead logo example), going beyond the schema's field descriptions.

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

Purpose5/5

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

The description opens with a specific verb ('Insert') and resource ('inline image'), and clarifies sources (public URL or local file), distinguishing from siblings like insert_table or insert_content. It clearly states the action and scope.

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

Usage Guidelines4/5

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

It provides context for segment header as the place for a letterhead logo and notes that floating/text-wrapped images are not supported, giving implicit guidance on when this tool applies. However, it doesn't explicitly name alternative tools for unsupported cases.

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

insert_tableInsert a tableA

Insert a rows×columns table, optionally populated from a 2D array of cell text — cell text may use inline markdown (bold, italic, code, links). Per-column alignment via align. Position via at (top/end/or a unique text anchor, default end). A direct edit, not a tracked suggestion.

ParametersJSON Schema
NameRequiredDescriptionDefault
atNo"top", "end", or a unique text snippet to insert after (default end)
tabNoTarget a specific tab by tabId or title (from list_tabs). Defaults to the first tab.
dataNorow-major cell text, e.g. [["A","B"],["1","2"]]
pageNowhich header/footer, when a doc defines more than one (default-page, first-page, even-page). Omit to use whichever exists.
rowsYes
alignNoper-column text alignment, e.g. ["left","right"]; null or "left" leaves a column at the default
accountNoGoogle account email to use. Defaults to GDOCS_DEFAULT_ACCOUNT, or the sole account.
columnsYes
segmentNowhich content tree to target: body (default), or the page header/footer. Header/footer content is invisible to a body read — a letterhead logo lives there.
documentIdYes
headerShadeNohex background color for the first row, e.g. #f1f3f4
columnWidthsNofixed width per column, in points
createSegmentNowhen segment is header/footer and the doc has none, create it first. Only the default header/footer can be created via the API.

TDQS

A4.4/5.0
Behavior4/5

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

With no annotations, the description carries the burden. It discloses the key behavior 'A direct edit, not a tracked suggestion' and explains markdown processing. It stops short of detailing error scenarios or permission requirements, but covers the most critical behavioral trait.

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

Conciseness5/5

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

The description is three sentences, front-loaded with the core purpose, followed by essential parameter details and a closing behavioral note. Every sentence earns its place without redundancy or fluff.

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

Completeness4/5

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

For a 13-parameter tool with no output schema, the description covers the fundamental use case and required parameters (rows, columns, documentId implied). It also explains optional data/alignment/position. Advanced options like segment, tab, and account are left to the schema, which is acceptable given the schema's high coverage.

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

Parameters4/5

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

Schema coverage is 77%, so a baseline of 3 applies. The description adds value beyond the schema by clarifying rows/columns as dimensions, noting optional population from a 2D array, and specifying 'at' semantics (top/end/anchor). This complements and enriches the schema definitions.

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

Purpose5/5

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

The description clearly states 'Insert a rows×columns table' with a specific verb and resource. It also distinguishes from siblings by noting 'A direct edit, not a tracked suggestion,' which separates it from suggestion-related tools.

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

Usage Guidelines4/5

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

It provides practical usage context: how to specify position ('via at (top/end/or a unique text anchor, default end)'), data format ('2D array of cell text'), and markdown support. It also gives a when-not via 'not a tracked suggestion,' but does not explicitly name alternative tools.

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

list_accountsList authorized Google accountsA

List the Google accounts that have been authorized for this server.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.9/5.0
Behavior3/5

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

With no annotations, the description carries full responsibility. It clearly indicates a read-only action by using 'List,' and there are no side effects or hidden behaviors to disclose. However, it adds no context beyond the obvious purpose—no mention of what the output looks like, whether accounts are returned as emails, or if authorization status has any caveats. This is a baseline acceptable transparency for a simple read tool.

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

Conciseness5/5

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

The description is a single, concise sentence: 'List the Google accounts that have been authorized for this server.' It is front-loaded with the action verb and resource, contains no filler, and every word earns its place. Properly sized for the tool's trivial parameter surface.

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

Completeness5/5

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

For a zero-parameter tool with no output schema, the description is complete. It tells the AI agent exactly what the tool does, and because there are no parameters to configure or complex return values to explain, no additional information is needed. The context is fully covered by this single sentence.

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

Parameters4/5

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

The tool has zero parameters, so the schema is trivially complete. The description does not need to explain any parameters. Per the rubric, 0 params receives a baseline of 4, and nothing in the description detracts from this. The description correctly focuses on the tool's purpose rather than inventing parameter detail.

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

Purpose5/5

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

The description uses a specific verb 'List' with a clear resource: 'Google accounts that have been authorized for this server.' This distinguishes it from sibling list tools like list_folder, list_tabs, or list_comments, which target different resources. The phrasing is unambiguous and matches the title exactly.

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

Usage Guidelines2/5

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

The description provides no guidance on when to use this tool versus the many sibling tools, nor does it mention any exclusions or alternatives. It simply restates the purpose without context about scenarios where checking authorized accounts would be appropriate. There is no 'when to use' or 'instead' language.

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

list_commentsList comments on a docA

List comments on a Google Doc (author display name, quoted text, body, resolved status, replies). Author email is not available via the Drive API.

ParametersJSON Schema
NameRequiredDescriptionDefault
accountNoGoogle account email to use. Defaults to GDOCS_DEFAULT_ACCOUNT, or the sole account.
documentIdYesGoogle Doc id

TDQS

A4/5.0
Behavior4/5

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

The description discloses useful behavioral details: it lists the included fields and explicitly notes that author email is unavailable via the Drive API. This limitation is helpful context beyond a simple 'list comments' statement, though it does not cover pagination or ordering.

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

Conciseness5/5

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

Two concise sentences, front-loaded with the core function and field list, followed by a relevant limitation. No wasted words.

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

Completeness4/5

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

For a read-only list tool with no output schema, the description covers the return contents and a key constraint. It lacks explicit pagination or resolved-comment filtering details, but these are not essential for the agent's basic invocation.

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

Parameters3/5

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

The schema already fully documents both parameters (account with default behavior, documentId). The description adds no further parameter semantics, so it meets the baseline for schema-covered parameters.

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

Purpose5/5

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

The description clearly states a specific action ('List comments') and resource ('a Google Doc'), enumerating the returned fields. It distinguishes itself from sibling comment-related tools like add_comment and resolve_comment by focusing on listing.

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

Usage Guidelines3/5

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

The description implies usage for retrieving comments but provides no explicit guidance on when to choose this over siblings like list_suggestions or read_doc. There are no exclusions or alternative recommendations, so it relies on the agent's interpretation.

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

list_permissionsList who a doc is shared withA

List the permissions on a Google Doc (people, groups, domain, anyone-with-link) with their roles. Each entry carries a subject naming who it covers — an email, " (domain)", or "anyone with the link" — since a domain or link grant has no email. For those, allowFileDiscovery: true means the file also surfaces in that audience's search, not merely that it opens with the link. Note a doc created under a Workspace domain may already carry a domain grant before you share it.

ParametersJSON Schema
NameRequiredDescriptionDefault
accountNoGoogle account email to use. Defaults to GDOCS_DEFAULT_ACCOUNT, or the sole account.
documentIdYes

TDQS

A4.4/5.0
Behavior5/5

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

With no annotations, the description carries the full burden and does an excellent job. It reveals the structure of each entry (subject), explains the meaning of allowFileDiscovery for non-email subjects, and discloses that a doc may already have a domain grant by default. This is rich behavioral context beyond the basic 'list' operation.

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

Conciseness5/5

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

The description is four sentences long but each sentence adds value: the first states the core purpose, the second explains the subject field format, the third clarifies allowFileDiscovery, and the fourth covers an edge case. It is front-loaded and free of filler.

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

Completeness5/5

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

Given there is no output schema, the description must explain the return format. It does so thoroughly by describing entry fields, special subject values, the allowFileDiscovery behavior, and the default domain grant caveat. This is a complete picture for a listing tool with no additional schema support.

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

Parameters2/5

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

Schema description coverage is only 50% (account is described, documentId is not). The description adds no parameter-specific guidance, leaving documentId's meaning to be inferred from the tool name. For a required parameter, this is a meaningful gap that the description does not fill.

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

Purpose5/5

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

The description clearly states the verb 'List' and the resource 'permissions on a Google Doc', specifying the scope (people, groups, domain, anyone-with-link) and that roles are included. It distinguishes itself from sibling sharing tools like share_doc and unshare_doc by focusing on reading the current state.

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

Usage Guidelines4/5

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

The description frames the tool as a read-only inspection tool but does not explicitly name alternatives or state when-not-to-use. It provides useful context, such as the note about Workspace domain grants, which helps the user anticipate unexpected results and clarifies the tool's purpose in an audit workflow.

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

list_suggestionsList suggestions in a docA

List pending suggestions (tracked changes) in a Google Doc as before→after diffs, in document order. Returns the doc title and, per suggestion, a human-readable preview — pass these verbatim as documentTitle/expectedChange to apply_suggestions. Note: the Docs API exposes no author or timestamp for suggestions.

ParametersJSON Schema
NameRequiredDescriptionDefault
tabNoTarget a specific tab by tabId or title (from list_tabs). Defaults to the first tab.
pageNowhich header/footer, when a doc defines more than one (default-page, first-page, even-page). Omit to use whichever exists.
accountNoGoogle account email to use. Defaults to GDOCS_DEFAULT_ACCOUNT, or the sole account.
segmentNowhich content tree to target: body (default), or the page header/footer. Header/footer content is invisible to a body read — a letterhead logo lives there.
documentIdYesGoogle Doc id

TDQS

A4.2/5.0
Behavior4/5

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

With no annotations provided, the description carries the full transparency burden. It discloses that it lists only pending suggestions, returns diffs in document order, and notes the API exposes no author or timestamp — useful limitations. A minor gap is not explicitly stating it is read-only, but 'list' implies that.

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

Conciseness5/5

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

The description is two sentences (plus a short note) and front-loaded with the core purpose in the first sentence. Every sentence earns its place, providing output format, integration guidance, and an API limitation without redundancy.

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

Completeness4/5

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

The tool has 5 parameters and no output schema, so the description must define the output contract. It adequately explains the return structure (title + per-suggestion preview) and the no-author/timestamp limitation. It could also mention what happens when no suggestions exist, but 'pending' clarifies the scope.

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

Parameters3/5

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

Schema description coverage is 100%, so the baseline is 3. The description adds no extra meaning about parameters (documentId, tab, page, account, segment); it only mentions output fields title and preview, which relate to the response, not parameters. The params are well-documented in the schema.

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

Purpose5/5

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

The description clearly states the tool lists pending suggestions (tracked changes) in a Google Doc as before→after diffs in document order. This specific verb+resource+scope distinguishes it from sibling tools like apply_suggestions (which applies them) and list_comments (which handles comments).

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

Usage Guidelines4/5

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

The description provides clear context by explaining the output includes a preview to pass to apply_suggestions, implying usage as a precursor to applying changes. It does not explicitly mention alternatives or when not to use, but the integration hint gives practical guidance.

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

list_tabsList document tabsA

List the tabs in a Google Doc (tabId, title, index, nesting).

ParametersJSON Schema
NameRequiredDescriptionDefault
accountNoGoogle account email to use. Defaults to GDOCS_DEFAULT_ACCOUNT, or the sole account.
documentIdYes

TDQS

A3.5/5.0
Behavior3/5

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

With no annotations, the description carries the full burden. It states that the tool lists tabs and returns specific fields, implying a read-only operation, but does not disclose additional behavioral traits such as authentication requirements, errors, or absence of side effects. This is adequate but not rich.

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

Conciseness5/5

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

The description is a single, front-loaded sentence that immediately states the purpose and then adds the return fields in parentheses. Every word is informative, and there is no filler or redundant content.

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

Completeness4/5

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

For a simple list tool with one required parameter and no output schema, the description covers the return value and core behavior. It lacks parameter explanation but is otherwise complete, making it well-suited for straightforward tasks.

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

Parameters2/5

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

Schema description coverage is 50%, with 'account' described but 'documentId' lacking any description in either the schema or the tool description. The description does not compensate by explaining parameter usage, leaving the required parameter ambiguous.

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

Purpose5/5

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

The description clearly states the action ('List') and resource ('tabs in a Google Doc'), and enumerates the returned fields (tabId, title, index, nesting). This distinguishes it from sibling tools like add_tab, rename_tab, and delete_tab, which perform different operations.

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

Usage Guidelines2/5

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

No explicit guidance is given on when to use this tool versus alternatives. The description does not mention exclusions or provide context such as 'use before modifying tabs' or 'instead of read_doc'. Usage is only implied by the name and description.

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

overwrite_docOverwrite a doc (guarded)A

Replace the entire body of a doc (or one tab) with markdown-rendered content. Refuses if comments/suggestions are present (would orphan them) unless force=true. Pass expectTitle (the doc’s title) — shown for confirmation and verified against the live doc before replacing. For long documents, pass contentFile instead of content so the server reads the body directly (retyping a long doc inline can silently drop text). A direct edit, not a tracked suggestion.

ParametersJSON Schema
NameRequiredDescriptionDefault
tabNoTarget a specific tab by tabId or title (from list_tabs). Defaults to the first tab.
forceNoproceed even if comments/suggestions would be lost
accountNoGoogle account email to use. Defaults to GDOCS_DEFAULT_ACCOUNT, or the sole account.
baseDirNoabsolute dir to resolve relative local image paths against (e.g. the markdown file’s folder)
contentNomarkdown content (or use contentFile)
documentIdYes
contentFileNopath to a local markdown/text file to use as the new body, read directly by the server — preferred for long documents so the body is passed through mechanically rather than retyped inline (which can silently drop text). Absolute, or relative to baseDir. Mutually exclusive with content.
expectTitleNothe doc’s title; verified before overwriting so a wrong id is refused

TDQS

A4.6/5.0
Behavior5/5

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

With no annotations provided, the description carries the full burden and does it well. It discloses destructive behavior (overwrites the body), the refusal condition for comments/suggestions, the force escape hatch, the expectTitle verification mechanism, the contentFile mechanical-reading advantage, and the direct-edit (not tracked-suggestion) nature. This goes well beyond a simple mutation hint.

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

Conciseness5/5

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

The description is three sentences, with the core action and safety guard front-loaded. Every sentence adds critical information: what it does, when it refuses, how to avoid data loss, and the nature of the edit. No filler or redundancy.

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

Completeness4/5

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

Given the tool's 8 parameters and no output schema, the description provides a solid operational picture: full replacement semantics, safety hooks, and important usage guidance for the most complex parameters. It could mention side effects beyond comment/suggestion loss (e.g., formatting replacement) or account permissions, but the current description is adequate for an agent to invoke it correctly in most scenarios.

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

Parameters4/5

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

Schema coverage is high (88%), so the baseline is 3. The description adds meaningful semantics beyond the schema: it explains why contentFile is preferred for long documents (avoids silent text dropping), what expectTitle is used for (confirmation and live verification), and how force bypasses the comment/suggestion guard. This enhances the schema's bare parameter definitions.

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

Purpose5/5

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

The description uses a specific verb ('Replace') and resource ('entire body of a doc or one tab') and clarifies the markdown-rendering behavior. It distinguishes itself from sibling tools like edit_doc by explicitly stating this is a full-body replacement and 'a direct edit, not a tracked suggestion.'

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

Usage Guidelines4/5

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

The description clearly communicates when to use this tool (full overwrite, including per-tab) and when to prefer alternatives: contentFile for long documents instead of inline content. It also flags a safety condition (refuses if comments/suggestions unless force=true). However, it does not explicitly name edit_doc as the alternative for targeted edits, though this is strongly implied.

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

read_docRead a Google DocA

Read a Google Doc as markdown + inline HTML. mode: clean (committed text, default) · tracked (suggestions shown as /) · accepted · rejected. segment picks the content tree: body (default), header, footer, or all (body plus every header/footer, each labelled). A body read always reports which headers/footers exist and what they hold, since their content — a letterhead logo, a page number — is NOT part of the body and would otherwise be invisible.

ParametersJSON Schema
NameRequiredDescriptionDefault
tabNoTarget a specific tab by tabId or title (from list_tabs). Defaults to the first tab.
modeNoread mode (default clean)
pageNowhich header/footer, when a doc defines more than one (default-page, first-page, even-page). Omit to use whichever exists.
accountNoGoogle account email to use. Defaults to GDOCS_DEFAULT_ACCOUNT, or the sole account.
segmentNocontent tree to read (default body)
documentIdYesGoogle Doc id

TDQS

A4.2/5.0
Behavior4/5

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

With no annotations, the description carries the transparency burden. It discloses a non-obvious behavior: a body read always reports headers/footers and their content, even though that content is not part of the body. It also clarifies how tracked mode renders suggestions as <ins>/<del>. It doesn't explicitly state read-only, but the verb 'Read' implies it.

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

Conciseness5/5

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

Four sentences, front-loaded with the core purpose, then progressively detailed explanations of modes, segments, and the header/footer quirk. Every sentence earns its place; no filler.

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

Completeness4/5

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

The description covers the most important behavioral nuances for a read tool: output format, mode semantics, segment options, and the invisible-content quirk. The schema already documents parameters like tab, page, and account, so the description needn't repeat them. For a tool without an output schema, this is adequately complete.

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

Parameters4/5

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

Schema coverage is 100%, so baseline is 3. The description adds substantial meaning to mode ('clean (committed text, default) · tracked (suggestions shown as <ins>/<del>)') and segment ('body plus every header/footer, each labelled'), beyond the bare enum values. Useful context, but not every parameter is enriched.

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

Purpose5/5

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

The description opens with 'Read a Google Doc as markdown + inline HTML' – a specific verb, resource, and output format. The modes and segments clarify scope, distinguishing this from sibling mutation tools like edit_doc or overwrite_doc.

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

Usage Guidelines3/5

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

The description explains modes and segments, giving implicit guidance on when to use each, but it never names alternatives like export_doc for other formats or list_suggestions for suggestion-only queries. Usage context is implied, not explicit.

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

rename_tabRename a tabC

Rename a tab by tabId.

ParametersJSON Schema
NameRequiredDescriptionDefault
tabIdYes
titleYes
accountNoGoogle account email to use. Defaults to GDOCS_DEFAULT_ACCOUNT, or the sole account.
documentIdYes

TDQS

C2.9/5.0
Behavior2/5

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

No annotations are provided, so the description carries full responsibility. 'Rename a tab by tabId' discloses the basic action but omits behavioral details such as side effects, permissions, idempotency, error handling, or return values. For a mutation tool, this is a significant gap.

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

Conciseness4/5

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

The description is a single short sentence, appropriately sized for a simple operation. However, it is under-specified and does not fully earn its place, as it largely restates the tool's name.

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

Completeness2/5

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

For a mutation tool with no annotations, no output schema, and only 25% schema coverage, the description is incomplete. It does not explain the role of required parameters like 'title' and 'documentId', nor what happens after renaming. The operation is simple, but the guidance is too thin for an AI agent to invoke it correctly.

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

Parameters2/5

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

Schema coverage is only 25% (only 'account' has a description). The description only mentions tabId, failing to explain that 'title' is the new tab name or that 'documentId' identifies the containing document. It does not compensate for the low schema coverage; it adds minimal meaning beyond the parameter names.

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

Purpose5/5

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

The description 'Rename a tab by tabId' clearly states the action (rename) and the resource (a tab), with the key identifier (tabId). This distinguishes it from sibling tools like delete_tab, add_tab, and list_tabs.

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

Usage Guidelines2/5

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

There is no guidance on when to use this tool versus alternatives or any exclusions. The description simply states what it does without contextualizing its use relative to other tab operations.

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

resolve_commentResolve or reopen a commentA

Resolve (or reopen) a comment thread by comment id. Pass expectQuote (a snippet of the comment’s quoted text or body, from list_comments) — shown for confirmation and verified against the live comment, so a wrong/stale id is refused instead of resolving the wrong thread.

ParametersJSON Schema
NameRequiredDescriptionDefault
reopenNoreopen instead of resolve
accountNoGoogle account email to use. Defaults to GDOCS_DEFAULT_ACCOUNT, or the sole account.
commentIdYes
documentIdYes
expectQuoteNosnippet of the comment’s quoted text/body; verified before resolving

TDQS

A4.4/5.0
Behavior4/5

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

The description discloses a key safety behavior: expectQuote is verified against the live comment so a wrong/stale id is refused, preventing accidental resolution of the wrong thread. This goes beyond the basic action, though it does not cover permissions or return values.

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

Conciseness5/5

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

The description is a single sentence, front-loaded with the core purpose followed by a concise explanation of the verification parameter. No unnecessary words or repetition.

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

Completeness4/5

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

The description covers the primary action, the verification mechanism, and the prerequisite tool for obtaining the quote. It lacks information about return values or error handling, but with no output schema and moderate complexity, it provides sufficient context for an agent to invoke the tool correctly.

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

Parameters4/5

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

The description adds meaning to expectQuote by explaining its source (list_comments) and its role in confirmation and verification, which the schema only labels as a snippet. It does not elaborate on commentId/documentId, but these are self-evident from context.

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

Purpose5/5

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

The description starts with 'Resolve (or reopen) a comment thread by comment id,' clearly stating the action and target. It distinguishes this from sibling tools like list_comments or add_comment by specifying the resolve/reopen action and the required comment id.

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

Usage Guidelines4/5

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

It instructs the user to pass expectQuote, obtained from list_comments, and explains that it is verified, helping the agent know the expected prerequisite workflow. It warns against wrong/stale ids, but does not explicitly contrast with alternative tools or mention when not to use it.

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

set_page_setupSet document page setupA

Set document-level page setup for a doc (or tab): page margins, page size, and orientation — the File > Page setup controls, which set_style can’t reach. Margins and explicit page sizes are in points (72 pt = 1 inch). pageSize is a preset (letter/legal/a4/tabloid) or an explicit {width,height} in points; orientation (portrait/landscape) swaps the page dimensions. A direct change, not a tracked suggestion.

ParametersJSON Schema
NameRequiredDescriptionDefault
tabNoTarget a specific tab by tabId or title (from list_tabs). Defaults to the first tab.
accountNoGoogle account email to use. Defaults to GDOCS_DEFAULT_ACCOUNT, or the sole account.
pageSizeNoa preset name, or {width,height} in points
marginTopNotop margin in points (72 = 1 inch)
documentIdYesGoogle Doc id
marginLeftNoleft margin in points
marginRightNoright margin in points
orientationNoportrait or landscape (orders the page width/height)
marginBottomNobottom margin in points

TDQS

A4.5/5.0
Behavior4/5

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

With no annotations provided, the description carries the burden of behavioral disclosure. It adds critical context: 'A direct change, not a tracked suggestion', unit conventions ('72 pt = 1 inch'), and that orientation 'swaps the page dimensions'. This goes beyond the schema, though it doesn't mention error handling or permissions.

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

Conciseness5/5

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

The description is concise and well-structured: three sentences, each serving a distinct purpose (scope, units/presets, orientation/behavior). No filler or redundant content; every sentence earns its place.

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

Completeness5/5

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

Given no annotations and no output schema, the description is remarkably complete for a 9-parameter tool. It covers the core purpose, scope, unit system, preset options, orientation effect, and mutation semantics, making it self-sufficient for an agent to select and invoke.

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

Parameters4/5

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

The schema already documents all 9 parameters (100% coverage), so the baseline is 3. The description adds meaningful value by explaining pageSize presets and explicit dimensions, margin units in points, orientation semantics, and tab defaulting behavior, enriching the parameter understanding.

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

Purpose5/5

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

The description clearly states a specific action ('Set document-level page setup') and scope ('for a doc (or tab)'), while explicitly distinguishing from the sibling tool set_style ('which set_style can’t reach'). This makes the tool's purpose unambiguous and differentiated.

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

Usage Guidelines4/5

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

It provides a clear context for when to use this tool by referencing 'the File > Page setup controls' and directly contrasting it with set_style. It doesn't explicitly say when NOT to use it, but the exclusion of the alternative is strongly implied.

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

set_project_defaultSet this project’s default account/folderA

Write this project’s defaults to a .gdocs-mcp.json in the current working directory (or update an existing one up the tree). Set a default account and/or a default folder (URL or id) for new docs. To set a folder by name, find it first with drive({ cmd: 'find' }) and pass its id.

ParametersJSON Schema
NameRequiredDescriptionDefault
folderNodefault Drive folder (URL or id) for new docs
accountNodefault Google account email (must be authorized)

TDQS

A4.3/5.0
Behavior4/5

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

Despite having no annotations, the description discloses the important side effect: writing to `.gdocs-mcp.json` in the current working directory or updating an existing file up the tree. It also clarifies that these are defaults for new docs, which adds meaningful behavioral context beyond the schema.

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

Conciseness4/5

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

Three concise sentences with key information front-loaded. The first sentence captures the core behavior, and the follow-ups add useful parameter semantics without redundancy.

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

Completeness4/5

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

For a simple two-parameter tool, the description covers the main side-effect, file location, scope, and folder-id resolution workflow. It does not explicitly say what happens to existing defaults when a parameter is omitted, but overall completeness is good.

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

Parameters4/5

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

While the schema already documents both parameters at 100% coverage, the description adds valuable semantics: folder can be a URL or id, and account must be an authorized Google account email. The folder-by-name workaround also adds practical parameter guidance.

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

Purpose5/5

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

The description clearly states that the tool writes project defaults to a `.gdocs-mcp.json` file, with a default account and/or folder for new docs. This distinguishes it from sibling tools like `get_project_config` and other set-style tools.

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

Usage Guidelines4/5

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

It explains when the defaults apply (new docs), and gives concrete workaround for setting a folder by name via `drive({ cmd: 'find' })` and passing its id. It does not explicitly mention when to avoid using this tool or name alternatives, but the use case is clear.

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

set_styleStyle text in a docA

Apply styling to existing text in place (no content change), the way you select text in Docs and apply formatting. Pick ONE target: from (+ optional to) to style a selection — from the start of the unique from snippet to the end of the unique to snippet (omit to to style just from); or whole_document: true to style the entire doc/tab (e.g. one font throughout, without per-paragraph calls). Styles: bold/italic/underline/strikethrough, color (hex), fontSize (pt), fontFamily, link, paragraph alignment, and paragraph spacing (spaceBefore/spaceAfter in pt, lineSpacing %). Use get_style first to read current spacing/fonts. Prefer this over rewriting the text with edit_doc and a <span style="…">: that also works, but it makes you restate the whole run, and retyping text is how text gets silently dropped. NOTE: a direct style change, not a tracked suggestion.

ParametersJSON Schema
NameRequiredDescriptionDefault
toNooptional end anchor: a unique snippet; styles the whole span from the start of `from` to the end of `to` (a selection). Must appear after `from`.
tabNoTarget a specific tab by tabId or title (from list_tabs). Defaults to the first tab.
fromNostart anchor: a unique text snippet to style from (quote a slice from read_doc). Required unless whole_document is set.
pageNowhich header/footer, when a doc defines more than one (default-page, first-page, even-page). Omit to use whichever exists.
styleYesstyles to apply
accountNoGoogle account email to use. Defaults to GDOCS_DEFAULT_ACCOUNT, or the sole account.
segmentNowhich content tree to target: body (default), or the page header/footer. Header/footer content is invisible to a body read — a letterhead logo lives there.
documentIdYesGoogle Doc id
whole_documentNostyle the entire document (or tab, or the targeted header/footer) instead of a selection — e.g. to set one font throughout. Mutually exclusive with from/to.

TDQS

A4.6/5.0
Behavior4/5

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

With no annotations, the description carries full burden. It discloses that this is a 'direct style change, not a tracked suggestion', which is a key behavioral trait. It also clarifies the span semantics for from/to and the in-place (non-content) nature. However, it does not address failure modes (e.g., non-unique snippet) or reversibility, which would further enhance transparency.

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

Conciseness5/5

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

The description is dense but every sentence earns its place: purpose, targeting rules, style list, workflow hint, alternative comparison, and behavioral note. It is front-loaded with the primary action and uses clear structure (semicolons separating the two targeting modes). No filler.

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

Completeness4/5

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

For a 9-parameter tool with a nested style object and no output schema, the description plus the rich input schema cover the necessary context. It adds sequencing (get_style first) and behavior (direct vs suggestion). It does not explicitly mention segment/page/tab targeting, but those are fully described in the schema, so the description does not need to repeat them.

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

Parameters4/5

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

Schema coverage is 100%, so baseline is 3, but the description adds real semantics: the from/to span definition ('from the start of the unique from snippet to the end of the unique to snippet'), the mutual exclusivity with whole_document, and a summary of style properties with units (hex, pt, %). This goes beyond the schema's per-parameter hints.

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

Purpose5/5

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

The description opens with a specific verb+resource: 'Apply styling to existing text in place (no content change)'. It clearly distinguishes itself from sibling tools by contrasting with edit_doc ('Prefer this over rewriting the text with edit_doc'), and the 'no content change' phrase uniquely scopes the operation.

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

Usage Guidelines5/5

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

Explicit guidance is provided: 'Use get_style first to read current spacing/fonts' and 'Prefer this over rewriting the text with edit_doc'. It also explains the two targeting modes (selection vs whole_document) and notes that retyping text risks silent drops, giving a clear when-to-use rationale.

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

set_table_styleStyle an existing tableA

Edit style/layout of an existing table (located by any cell’s text): cell padding (pt), background color (hex), cell borders, column widths (pt), and pinned header rows. scope selects which cells padding/background/border hit — table (default), row, column, or cell (the row/column of the matched cell). Fixes e.g. thin left padding that clips the first letter of cells; border {width:0} makes a table borderless; headerRows repeats the top rows on every page. A direct edit, not a tracked suggestion.

ParametersJSON Schema
NameRequiredDescriptionDefault
tabNoTarget a specific tab by tabId or title (from list_tabs). Defaults to the first tab.
cellYestext of any cell in the target table (locates the table)
pageNowhich header/footer, when a doc defines more than one (default-page, first-page, even-page). Omit to use whichever exists.
scopeNodefault table
borderNocell borders, over the same scope as padding/background
accountNoGoogle account email to use. Defaults to GDOCS_DEFAULT_ACCOUNT, or the sole account.
paddingNocell padding in points
segmentNowhich content tree to target: body (default), or the page header/footer. Header/footer content is invisible to a body read — a letterhead logo lives there.
documentIdYes
headerRowsNorepeat the top N rows on every page (Docs’ "pin header rows"); 0 unpins. Independent of scope.
columnWidthsNoset specific column widths (points) by column index
backgroundColorNohex, e.g. #f1f3f4

TDQS

A4.4/5.0
Behavior4/5

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

With no annotations, the description carries the full transparency burden. It discloses that this is a 'direct edit, not a tracked suggestion' — a key behavioral trait. It also clarifies two important edge behaviors: border width 0 makes the table borderless, and headerRows repeats rows on every page. It does not explicitly mention permission requirements or irreversible overwrites, but the direct-edit caveat provides significant transparency.

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

Conciseness5/5

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

The description is three sentences long, front-loaded with the primary purpose, and every sentence contributes information: the first lists the editable properties, the second clarifies scope semantics, and the third provides concrete examples and the direct-edit caveat. There is no fluff or redundancy.

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

Completeness4/5

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

For a tool with 12 parameters, nested objects, and no output schema, the description covers the essential context: what the tool does, how scope works, and key behavioral caveats. It does not explain every parameter (the schema handles that), but it gives enough operational context for an agent to use it correctly. Minor gaps like ambiguous table matches or error handling are not addressed, but they are not critical for selection.

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

Parameters4/5

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

Although the schema has high parameter coverage (92%), the description adds meaning beyond the schema. It explains that 'scope selects which cells padding/background/border hit' and elaborates the options (table, row, column, or cell of the matched cell), which the schema only labels as 'default table'. It also gives a practical implication for padding (clipping first letter) and border width, adding contextual value.

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

Purpose5/5

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

The description uses a specific verb ('Edit') with a clear resource ('style/layout of an existing table') and enumerates the exact style properties (padding, background color, borders, column widths, pinned header rows). It also explains how the table is located (by any cell's text), which distinguishes it from generic style tools like set_style or read-style tools like get_table_style.

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

Usage Guidelines4/5

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

The description gives clear context for when to use this tool — when you need to edit a table's style or layout — and even provides a concrete use-case ('Fixes e.g. thin left padding that clips the first letter of cells'). However, it does not explicitly name alternatives or state when not to use it, so it stops short of a 5.

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

share_docShare a doc (person or link)A

Grant access to a Google Doc. With email, share with that person as reader/commenter/writer (optionally sending a notification). Without email, set anyone-with-link access to that role, or role "none" to disable link sharing. (To revoke a specific person’s access, use unshare_doc.)

ParametersJSON Schema
NameRequiredDescriptionDefault
roleNoaccess level; default writer. "none" (link only) disables link sharing.
emailNoperson to share with; omit to set anyone-with-link access instead
notifyNowhen sharing with a person, send a notification email (default true)
accountNoGoogle account email to use. Defaults to GDOCS_DEFAULT_ACCOUNT, or the sole account.
documentIdYes

TDQS

A4.6/5.0
Behavior4/5

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

With no annotations provided, the description carries the full burden. It discloses that sharing may optionally send notifications, that omitting email modifies link sharing, and that role 'none' disables link sharing. It doesn't explicitly state that this is a mutating operation that overwrites existing permissions, but the pointer to unshare_doc for revocation provides useful context about reversibility.

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

Conciseness5/5

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

The description is tightly written in three sentences: a clear purpose statement, two conditional modes, and a cross-reference to an alternative tool. Every sentence contributes essential information with no redundancy or fluff.

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

Completeness4/5

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

For a tool with moderate complexity and no output schema, the description covers the primary use cases and an alternative. It doesn't mention potential failure modes or return values, but those are not critical for a sharing action. The overall behavior is well-scoped and understandable.

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

Parameters4/5

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

Schema coverage is high (80%), but the description adds significant semantic value beyond the schema by explaining how the presence/absence of email toggles between person and link sharing, and by clarifying the special behavior of role 'none'. This enriches parameter understanding without repeating the schema descriptions verbatim.

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

Purpose5/5

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

The description opens with a specific verb and resource: 'Grant access to a Google Doc.' It then clearly distinguishes two operational modes (sharing with a person via email vs. setting anyone-with-link access) and explicitly references the sibling unshare_doc for the alternative action of revoking access, making it distinct from related tools.

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

Usage Guidelines5/5

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

The description provides clear when-to-use guidance: it explains the two modes (with/without email) and explicitly tells the user to use unshare_doc for revoking a specific person's access. This is a direct alternative, satisfying the criterion for explicit when/alternatives.

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

unshare_docRemove someone’s accessA

Revoke a grant on a Google Doc. Pass email for a person or a group. A grant with no email — a domain-wide grant, or anyone-with-link — has no email to pass, so address it by permissionId from list_permissions (run that first; it also tells you the role you are about to remove). Refuses to touch the owner. expectRole is REQUIRED — run list_permissions first and echo the role back; a permission change is recorded nowhere and cannot be restored from version history, so this is the only thing standing between a misaimed call and a silent, unrecoverable revocation. Note a doc created under a Workspace domain may carry a domain grant nobody explicitly added.

ParametersJSON Schema
NameRequiredDescriptionDefault
emailNoperson or group to revoke; omit when using permissionId
accountNoGoogle account email to use. Defaults to GDOCS_DEFAULT_ACCOUNT, or the sole account.
documentIdYes
expectRoleYesREQUIRED — the grant's current role as list_permissions reported it (reader/commenter/writer). Verified first: if it changed since you looked, nothing is removed. Revoking leaves no record anywhere, so this makes you look before you cut.
expectTitleNothe doc’s title; verified before revoking so a wrong id is refused
permissionIdNoid from list_permissions — the only way to revoke a domain or anyone-with-link grant

TDQS

A4.9/5.0
Behavior5/5

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

With no annotations, the description carries the full burden and does so thoroughly. It discloses that the operation is irreversible ('recorded nowhere and cannot be restored'), refuses to touch the owner, and verifies the current role before removal so nothing is deleted if the grant changed. This goes well beyond a generic 'revoke access' statement.

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

Conciseness4/5

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

The description is front-loaded with the core action and includes dense, high-value warnings. However, the instruction to run list_permissions first is stated multiple times, and the irreversibility warning is repeated in slightly different forms, adding mild redundancy.

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

Completeness5/5

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

Given the tool's complexity as an irreversible, potentially destructive operation with no annotations or output schema, the description covers all essential operational context: how to identify the target, the mandatory expectRole check, the domain-grant caveat, and owner protection. No critical gaps remain.

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

Parameters5/5

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

Despite high schema coverage (83%), the description adds significant meaning by mapping email to person/group, permissionId to domain or anyone-with-link grants, and explaining that expectRole is a safety echo from list_permissions. It also clarifies that expectTitle prevents wrong-document revocations, enriching the schema descriptions.

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

Purpose5/5

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

The description opens with 'Revoke a grant on a Google Doc,' which is a specific verb and resource, and the title 'Remove someone’s access' reinforces the intent. It clearly distinguishes from the sibling share_doc (granting access) and list_permissions (reading permissions).

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

Usage Guidelines5/5

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

The description explicitly instructs to run list_permissions first, and explains when to use email (person/group) versus permissionId (domain-wide or anyone-with-link grants). It also mandates that expectRole must be echoed from list_permissions, giving clear preconditions and preventing misuse.

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

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.

  1. 6 tool updatesv0.6.0
    • Removedcopy_doc
    • Removedcreate_folder
    • Addeddrive
    • Removedlist_folder
    • Removedsearch_drive
    • Removedupdate_doc
  2. 16 tool updatesv0.5.0
    • Changedapply_suggestions2 fields changed
      • addedInput schema / properties / page
        Added value: +{
        +  "description": "which header/footer, when a doc defines more than one (default-page, first-page, even-page). Omit to use whichever exists.",
        +  "enum": [
        +    "default",
        +    "first",
        +    "even"
        +  ],
        +  "type": "string"
        +}
      • addedInput schema / properties / segment
        Added value: +{
        +  "description": "which content tree to target: body (default), or the page header/footer. Header/footer content is invisible to a body read — a letterhead logo lives there.",
        +  "enum": [
        +    "body",
        +    "header",
        +    "footer"
        +  ],
        +  "type": "string"
        +}
    • Addedcopy_doc
    • Addedcreate_folder
    • Changededit_doc2 fields changed
      • addedInput schema / properties / page
        Added value: +{
        +  "description": "which header/footer, when a doc defines more than one (default-page, first-page, even-page). Omit to use whichever exists.",
        +  "enum": [
        +    "default",
        +    "first",
        +    "even"
        +  ],
        +  "type": "string"
        +}
      • addedInput schema / properties / segment
        Added value: +{
        +  "description": "which content tree to target: body (default), or the page header/footer. Header/footer content is invisible to a body read — a letterhead logo lives there.",
        +  "enum": [
        +    "body",
        +    "header",
        +    "footer"
        +  ],
        +  "type": "string"
        +}
    • Changededit_table2 fields changed
      • addedInput schema / properties / page
        Added value: +{
        +  "description": "which header/footer, when a doc defines more than one (default-page, first-page, even-page). Omit to use whichever exists.",
        +  "enum": [
        +    "default",
        +    "first",
        +    "even"
        +  ],
        +  "type": "string"
        +}
      • addedInput schema / properties / segment
        Added value: +{
        +  "description": "which content tree to target: body (default), or the page header/footer. Header/footer content is invisible to a body read — a letterhead logo lives there.",
        +  "enum": [
        +    "body",
        +    "header",
        +    "footer"
        +  ],
        +  "type": "string"
        +}
    • Addedexport_doc
    • Changedget_style2 fields changed
      • addedInput schema / properties / page
        Added value: +{
        +  "description": "which header/footer, when a doc defines more than one (default-page, first-page, even-page). Omit to use whichever exists.",
        +  "enum": [
        +    "default",
        +    "first",
        +    "even"
        +  ],
        +  "type": "string"
        +}
      • addedInput schema / properties / segment
        Added value: +{
        +  "description": "which content tree to target: body (default), or the page header/footer. Header/footer content is invisible to a body read — a letterhead logo lives there.",
        +  "enum": [
        +    "body",
        +    "header",
        +    "footer"
        +  ],
        +  "type": "string"
        +}
    • Addedget_table_style
    • Addedinsert_content
    • Changedinsert_image5 fields changed
      • addedInput schema / properties / baseDir
        Added value: +{
        +  "description": "absolute dir to resolve a relative local `uri` against",
        +  "type": "string"
        +}
      • addedInput schema / properties / createSegment
        Added value: +{
        +  "description": "when segment is header/footer and the doc has none, create it first (the letterhead case). Only the default header/footer can be created via the API.",
        +  "type": "boolean"
        +}
      • addedInput schema / properties / page
        Added value: +{
        +  "description": "which header/footer, when a doc defines more than one (default-page, first-page, even-page). Omit to use whichever exists.",
        +  "enum": [
        +    "default",
        +    "first",
        +    "even"
        +  ],
        +  "type": "string"
        +}
      • addedInput schema / properties / segment
        Added value: +{
        +  "description": "which content tree to target: body (default), or the page header/footer. Header/footer content is invisible to a body read — a letterhead logo lives there.",
        +  "enum": [
        +    "body",
        +    "header",
        +    "footer"
        +  ],
        +  "type": "string"
        +}
      • changedInput schema / properties / uri / description
        Previous value: -"public image URL"New value: +"public image URL, or a path to a local image file (absolute, or relative to baseDir)"
    • Changedinsert_table4 fields changed
      • addedInput schema / properties / align
        Added value: +{
        +  "description": "per-column text alignment, e.g. [\"left\",\"right\"]; null or \"left\" leaves a column at the default",
        +  "items": {
        +    "anyOf": [
        +      {
        +        "enum": [
        +          "left",
        +          "center",
        +          "right",
        +          "justify"
        +        ],
        +        "type": "string"
        +      },
        +      {
        +        "type": "null"
        +      }
        +    ]
        +  },
        +  "type": "array"
        +}
      • addedInput schema / properties / createSegment
        Added value: +{
        +  "description": "when segment is header/footer and the doc has none, create it first. Only the default header/footer can be created via the API.",
        +  "type": "boolean"
        +}
      • addedInput schema / properties / page
        Added value: +{
        +  "description": "which header/footer, when a doc defines more than one (default-page, first-page, even-page). Omit to use whichever exists.",
        +  "enum": [
        +    "default",
        +    "first",
        +    "even"
        +  ],
        +  "type": "string"
        +}
      • addedInput schema / properties / segment
        Added value: +{
        +  "description": "which content tree to target: body (default), or the page header/footer. Header/footer content is invisible to a body read — a letterhead logo lives there.",
        +  "enum": [
        +    "body",
        +    "header",
        +    "footer"
        +  ],
        +  "type": "string"
        +}
    • Changedlist_suggestions2 fields changed
      • addedInput schema / properties / page
        Added value: +{
        +  "description": "which header/footer, when a doc defines more than one (default-page, first-page, even-page). Omit to use whichever exists.",
        +  "enum": [
        +    "default",
        +    "first",
        +    "even"
        +  ],
        +  "type": "string"
        +}
      • addedInput schema / properties / segment
        Added value: +{
        +  "description": "which content tree to target: body (default), or the page header/footer. Header/footer content is invisible to a body read — a letterhead logo lives there.",
        +  "enum": [
        +    "body",
        +    "header",
        +    "footer"
        +  ],
        +  "type": "string"
        +}
    • Changedread_doc2 fields changed
      • addedInput schema / properties / page
        Added value: +{
        +  "description": "which header/footer, when a doc defines more than one (default-page, first-page, even-page). Omit to use whichever exists.",
        +  "enum": [
        +    "default",
        +    "first",
        +    "even"
        +  ],
        +  "type": "string"
        +}
      • addedInput schema / properties / segment
        Added value: +{
        +  "description": "content tree to read (default body)",
        +  "enum": [
        +    "body",
        +    "header",
        +    "footer",
        +    "all"
        +  ],
        +  "type": "string"
        +}
    • Changedset_style3 fields changed
      • addedInput schema / properties / page
        Added value: +{
        +  "description": "which header/footer, when a doc defines more than one (default-page, first-page, even-page). Omit to use whichever exists.",
        +  "enum": [
        +    "default",
        +    "first",
        +    "even"
        +  ],
        +  "type": "string"
        +}
      • addedInput schema / properties / segment
        Added value: +{
        +  "description": "which content tree to target: body (default), or the page header/footer. Header/footer content is invisible to a body read — a letterhead logo lives there.",
        +  "enum": [
        +    "body",
        +    "header",
        +    "footer"
        +  ],
        +  "type": "string"
        +}
      • changedInput schema / properties / whole_document / description
        Previous value: -"style the entire document (or tab) instead of a selection — e.g. to set one font throughout. Mutually exclusive with from/to."New value: +"style the entire document (or tab, or the targeted header/footer) instead of a selection — e.g. to set one font throughout. Mutually exclusive with from/to."
    • Changedset_table_style4 fields changed
      • addedInput schema / properties / border
        Added value: +{
        +  "additionalProperties": false,
        +  "description": "cell borders, over the same scope as padding/background",
        +  "properties": {
        +    "color": {
        +      "description": "hex, e.g. #cccccc (default #000000)",
        +      "type": "string"
        +    },
        +    "dashStyle": {
        +      "enum": [
        +        "SOLID",
        +        "DOT",
        +        "DASH"
        +      ],
        +      "type": "string"
        +    },
        +    "sides": {
        +      "description": "which edges to set (default all four)",
        +      "items": {
        +        "enum": [
        +          "top",
        +          "bottom",
        +          "left",
        +          "right"
        +        ],
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    "width": {
        +      "description": "points; 0 hides the border (borders cannot be transparent)",
        +      "type": "number"
        +    }
        +  },
        +  "type": "object"
        +}
      • addedInput schema / properties / headerRows
        Added value: +{
        +  "description": "repeat the top N rows on every page (Docs’ \"pin header rows\"); 0 unpins. Independent of scope.",
        +  "type": "number"
        +}
      • addedInput schema / properties / page
        Added value: +{
        +  "description": "which header/footer, when a doc defines more than one (default-page, first-page, even-page). Omit to use whichever exists.",
        +  "enum": [
        +    "default",
        +    "first",
        +    "even"
        +  ],
        +  "type": "string"
        +}
      • addedInput schema / properties / segment
        Added value: +{
        +  "description": "which content tree to target: body (default), or the page header/footer. Header/footer content is invisible to a body read — a letterhead logo lives there.",
        +  "enum": [
        +    "body",
        +    "header",
        +    "footer"
        +  ],
        +  "type": "string"
        +}
    • Changedunshare_doc5 fields changed
      • addedInput schema / properties / email / description
        Added value: +"person or group to revoke; omit when using permissionId"
      • addedInput schema / properties / expectRole
        Added value: +{
        +  "description": "REQUIRED — the grant's current role as list_permissions reported it (reader/commenter/writer). Verified first: if it changed since you looked, nothing is removed. Revoking leaves no record anywhere, so this makes you look before you cut.",
        +  "type": "string"
        +}
      • addedInput schema / properties / expectTitle
        Added value: +{
        +  "description": "the doc’s title; verified before revoking so a wrong id is refused",
        +  "type": "string"
        +}
      • addedInput schema / properties / permissionId
        Added value: +{
        +  "description": "id from list_permissions — the only way to revoke a domain or anyone-with-link grant",
        +  "type": "string"
        +}
      • changedInput schema / required
        Previous value: -[
        -  "documentId",
        -  "email"
        -]New value: +[
        +  "documentId",
        +  "expectRole"
        +]
  3. 31 tool updatesv0.1.1
    • First observedadd_comment
    • First observedadd_tab
    • First observedapply_suggestions
    • First observedcreate_doc
    • First observeddelete_tab
    • First observeddownload_images
    • First observededit_doc
    • First observededit_table
    • First observedget_page_setup
    • First observedget_project_config
    • First observedget_style
    • First observedinsert_image
    • First observedinsert_table
    • First observedlist_accounts
    • First observedlist_comments
    • First observedlist_folder
    • First observedlist_permissions
    • First observedlist_suggestions
    • First observedlist_tabs
    • First observedoverwrite_doc
    • First observedread_doc
    • First observedrename_tab
    • First observedresolve_comment
    • First observedsearch_drive
    • First observedset_page_setup
    • First observedset_project_default
    • First observedset_style
    • First observedset_table_style
    • First observedshare_doc
    • First observedunshare_doc
    • First observedupdate_doc

TDQS

A3.9/5.0
Disambiguation5/5

Every tool targets a distinct action or resource: read/write pairs (get_style/set_style), content operations (edit_doc, insert_content, overwrite_doc) are clearly differentiated, table style vs structure tools are separate, and sharing/tab/drive tools are unique. No two tools appear to do the same thing.

Naming Consistency5/5

Tool names follow a consistent verb_noun pattern (get_, set_, list_, read_, edit_, insert_, export_, overwrite_, share_, etc.). The only exception is 'drive' but it's a command-style tool; all others are predictable and consistent.

Tool Count2/5

32 tools is well above the typical well-scoped range (3-15). While the server covers many aspects of Google Docs, the sheer number, including many read/write pairs, makes the surface feel bloated; many tools could be consolidated or the scope narrowed.

Completeness4/5

The tool set is nearly comprehensive for document management: create, read, edit, style, insert, export, suggestions, comments, permissions, tabs, and Drive navigation are all covered. However, there is no delete_doc tool (Drive explicitly has no rm), leaving a notable gap in lifecycle coverage.

Maintenance

ActivityActive
ResponsivenessWithin a week

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

Latest Blog Posts

MCP directory API

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

curl -X GET 'https://glama.ai/api/mcp/v1/servers/dasasian/gdocs-mcp'

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