Skip to main content
Glama

google-docs-mcp

Surgical Google Docs editing for AI agents — preserves history, never touches character indices.

An MCP server that makes Google Docs actually usable for LLMs. Standalone — no other tools required beyond a Google Cloud OAuth app.

Compatibility note: the repo, package, CLI, env vars, and default token path now use google-docs-mcp. Backward-compatible google-drive-mcp command and env-var aliases are still accepted so existing setups do not break immediately.

Indexing note: when the MCP reads document content before planning index-based edits, it requests suggestionsViewMode=SUGGESTIONS_INLINE. That keeps returned indices aligned for later documents.batchUpdate calls when the doc contains suggestions.

Why

The Google Docs API uses character indices for every edit. LLMs are bad at counting characters. Everyone ends up deleting and rewriting entire documents, which destroys version history, comments, and collaborator attribution.

This server uses the same abstraction as code editors: search by text, not by position. You describe what to change; the server finds where it is and handles the index arithmetic.


Related MCP server: gdocs-mcp-server

Quick start

1. Run directly from GitHub

uvx --from git+https://github.com/dbuxton/google-docs-mcp google-docs-mcp --help

That command downloads the package, creates an isolated environment, installs dependencies, and runs the google-docs-mcp entry point.

No PyPI release is required. uvx can execute the tool straight from the GitHub repository.

To pin to a branch, tag, or commit, add a ref to the URL:

uvx --from git+https://github.com/dbuxton/google-docs-mcp@main google-docs-mcp --help

If you prefer a persistent local install instead of uvx, use:

uv tool install --from git+https://github.com/dbuxton/google-docs-mcp google-docs-mcp
uv tool install --from git+https://github.com/dbuxton/google-docs-mcp google-docs-mcp-auth

2. Create a Google Cloud OAuth app

  1. Go to console.cloud.google.com

  2. Create a project (or select an existing one)

  3. Enable these APIs (APIs & Services → Library):

    • Google Docs API

    • Google Drive API

    • Google Apps Script API (for inline-anchored comments)

  4. Go to APIs & Services → Credentials

  5. Click Create Credentials → OAuth 2.0 Client ID

  6. Application type: Desktop App

  7. Download the JSON file

3. Authenticate

Normal — browser opens automatically:

uvx --from git+https://github.com/dbuxton/google-docs-mcp \
  google-docs-mcp-auth --credentials ~/credentials.json

Or use env vars instead of a credentials file:

export GOOGLE_DOCS_MCP_CLIENT_ID="your-google-client-id"
export GOOGLE_DOCS_MCP_CLIENT_SECRET="your-google-client-secret"

uvx --from git+https://github.com/dbuxton/google-docs-mcp \
  google-docs-mcp-auth

Headless / remote server — no browser on device:

uvx --from git+https://github.com/dbuxton/google-docs-mcp \
  google-docs-mcp-auth --credentials ~/credentials.json --headless
# Prints a URL → open on any device (phone, laptop, etc.)
# Paste the full redirect URL back into the terminal

Already have an auth code:

uvx --from git+https://github.com/dbuxton/google-docs-mcp \
  google-docs-mcp-auth --credentials ~/credentials.json --code "4/0Afr..."

google-docs-mcp-auth resolves OAuth client credentials in this order:

  1. --credentials /path/to/credentials.json

  2. --client-id and --client-secret

  3. GOOGLE_DOCS_MCP_CLIENT_ID and GOOGLE_DOCS_MCP_CLIENT_SECRET

Token is saved to ~/.google-docs-mcp/token.json by default. Override with --out /path/to/token.json.

4. Configure your MCP client

Claude Desktop (~/Library/Application Support/Claude/claude_desktop_config.json):

{
  "mcpServers": {
    "google-docs": {
      "command": "uvx",
      "args": ["--from", "git+https://github.com/dbuxton/google-docs-mcp", "google-docs-mcp"],
      "env": {
        "GOOGLE_DOCS_MCP_TOKEN": "/Users/you/.google-docs-mcp/token.json"
      }
    }
  }
}

OpenClaw (gateway config):

{
  "mcp": {
    "servers": {
      "google-docs": {
        "command": "uvx",
        "args": ["--from", "git+https://github.com/dbuxton/google-docs-mcp", "google-docs-mcp"],
        "env": {
          "GOOGLE_DOCS_MCP_TOKEN": "~/.google-docs-mcp/token.json"
        }
      }
    }
  }
}

Local checkout during development:

{
  "mcpServers": {
    "google-docs": {
      "command": "uvx",
      "args": ["--from", "/absolute/path/to/google-docs-mcp", "google-docs-mcp"],
      "env": {
        "GOOGLE_DOCS_MCP_TOKEN": "/Users/you/.google-docs-mcp/token.json"
      }
    }
  }
}

Optional: Apps Script bridge for bookmark-jump comments

If you want docs_add_comment(..., bookmark_jump=true) to append a real #bookmark=id... jump URL into the comment body, set up one persistent Apps Script bridge project and expose its script ID via an env var.

Required one-time setup:

  1. Enable the Apps Script API for the Google account at https://script.google.com/home/usersettings

  2. Create a standalone Apps Script project to use as the bridge

  3. In that Apps Script project, open Project Settings and switch it to the same standard Google Cloud project as the OAuth client used by google-docs-mcp

  4. In that same Google Cloud project, ensure Apps Script API is enabled

  5. Set the bridge script ID in the MCP process environment:

export GOOGLE_DOCS_MCP_APPS_SCRIPT_ID="1C6nchmQRobIwK8ELFe29k-XV2t7mUnhKiSpEKHThXOFHAL6Ahy4_Xju4"

Example uvx launch with both token + Apps Script bridge:

GOOGLE_DOCS_MCP_TOKEN="$HOME/.google-docs-mcp/token.json" \
GOOGLE_DOCS_MCP_APPS_SCRIPT_ID="your-apps-script-id" \
uvx --from git+https://github.com/dbuxton/google-docs-mcp google-docs-mcp

If the Apps Script bridge is still using its hidden default project, scripts.run fails even when account-level Apps Script access is enabled.


Tools reference

Document reading

docs_get(doc_id)

Read a Google Doc and return its full structure.

Returns the document title, a list of paragraphs (with text, heading style, and character indices), and the full plain text. Use this first to understand the document before making edits.

docs_get(doc_id="1BxiMVs0XRA5nFMdKvBdBZjgmUUqptlbs74OgVE2upms")

Returns:

{
  "title": "My Document",
  "paragraphs": [
    {"text": "Introduction", "style": "HEADING_1", "start": 0, "end": 13},
    {"text": "This is the body.", "style": "NORMAL_TEXT", "start": 13, "end": 31}
  ],
  "full_text": "Introduction\nThis is the body."
}

docs_list(query, limit)

List Google Docs from Drive, optionally filtered by a search query.

Param

Type

Default

Description

query

string

""

Search terms (searches title and content)

limit

int

20

Maximum results

docs_list(query="board deck 2026", limit=5)

Document editing

All editing tools use text anchors, never character indices. The server finds the text and handles the indices internally.

docs_search_replace(doc_id, find, replace, occurrence, regex)

Find text in a document and replace a specific occurrence.

Param

Type

Default

Description

doc_id

string

required

Google Doc ID

find

string

required

Text to find

replace

string

required

Replacement text

occurrence

int

1

Which occurrence: 1 = first, 2 = second, 0 = all

regex

bool

false

Treat find as a Python regex

# Replace first occurrence
docs_search_replace(doc_id="...", find="Q1 2024", replace="Q2 2024")

# Replace all occurrences
docs_search_replace(doc_id="...", find="ACME Corp", replace="Initech", occurrence=0)

# Regex replace
docs_search_replace(doc_id="...", find=r"\bDraft\b", replace="Final", regex=true)

docs_insert_after(doc_id, anchor, text)

Insert a new paragraph immediately after the paragraph containing anchor.

docs_insert_after(
  doc_id="...",
  anchor="Executive Summary",
  text="Updated as of March 2026 following board review."
)

docs_insert_before(doc_id, anchor, text)

Insert a new paragraph immediately before the paragraph containing anchor.

docs_insert_before(
  doc_id="...",
  anchor="Appendix A",
  text="See the following appendix for supporting data."
)

docs_delete_paragraph(doc_id, anchor)

Delete all paragraphs containing anchor text (case-insensitive).

docs_delete_paragraph(doc_id="...", anchor="[PLACEHOLDER — DELETE ME]")

docs_append(doc_id, text)

Append a new paragraph at the end of the document.

docs_append(doc_id="...", text="Document last updated: March 2026.")

docs_batch_replace(doc_id, replacements_json)

Apply multiple find→replace operations atomically in a single API call. Either all changes succeed or none do.

docs_batch_replace(
  doc_id="...",
  replacements_json='[
    {"find": "[CLIENT]", "replace": "Acme Corp", "occurrence": 0},
    {"find": "[DATE]", "replace": "10 March 2026", "occurrence": 0},
    {"find": "DRAFT", "replace": "FINAL"}
  ]'
)

Each item in the array:

Field

Type

Default

Description

find

string

required

Text to find

replace

string

required

Replacement text

occurrence

int

1

1 = first, 0 = all

regex

bool

false

Regex mode


docs_create(title, initial_text)

Create a new Google Doc.

docs_create(title="Q2 Board Deck", initial_text="Confidential — not for distribution.")

Returns {id, title, webViewLink}.


Comments

docs_add_comment(doc_id, comment, anchor_text, occurrence, include_anchor_text, bookmark_jump)

Add a comment anchored to specific text in the document.

Param

Type

Default

Description

doc_id

string

required

Google Doc ID

comment

string

required

Comment text

anchor_text

string

required

Text in the document to attach the comment to

occurrence

int

1

Which occurrence of anchor_text to use

include_anchor_text

bool

true

Append the matched anchor text into the comment body

bookmark_jump

bool

false

Use the Apps Script bridge to create a bookmark and append a jump URL

Use a short, distinctive phrase for anchor_text — a few words that are unique enough to match exactly one location.

docs_add_comment(
  doc_id="...",
  anchor_text="unable to perform the Employee's duties",
  comment="Legal risk: 3-month absence threshold may not satisfy Equality Act 2010 duty to make reasonable adjustments before terminating.",
  bookmark_jump=true
)

Note: The current implementation uses Drive comments plus a Docs named range. In the Docs UI these still show as "Original content deleted" rather than as proper inline highlights. The comments are fully readable via docs_read_comments and the Docs 💬 panel.

When bookmark_jump=true, the tool additionally uses Apps Script automation to create a bookmark at the anchor text and appends a #bookmark=id... jump URL into the comment body. This requires the GOOGLE_DOCS_MCP_APPS_SCRIPT_ID env var and the Apps Script bridge setup documented above.

A probe helper is included for this workstream:

python3 appscript_probe.py inspect-comment-api --doc-id <DOC_ID>

The probe now creates an API-executable deployment automatically. If account-level Apps Script access is still disabled, it stops with the settings-page message. If execution fails with a permission error, the next blocker is the shared standard Google Cloud project requirement documented at https://developers.google.com/apps-script/guides/cloud-platform-projects.


docs_read_comments(doc_id, include_resolved)

List all comments on a document.

Param

Type

Default

Description

doc_id

string

required

Google Doc ID

include_resolved

bool

false

Include resolved/deleted comments

Returns an array of comments with id, content, author, anchored (bool), named_range_id, quoted_text, resolved, deleted, created.

docs_read_comments(doc_id="...")

docs_reply_to_comment(doc_id, comment_id, reply)

Post a reply to an existing comment.

Param

Type

Default

Description

doc_id

string

required

Google Doc ID

comment_id

string

required

Comment ID (from docs_read_comments)

reply

string

required

Reply text

docs_reply_to_comment(
  doc_id="...",
  comment_id="AAAB1iPyaUY",
  reply="Agreed — adding Carer's Leave clause before we sign."
)

docs_resolve_comment(doc_id, comment_id, reply)

Resolve (close) a comment, optionally posting a final reply first.

Param

Type

Default

Description

doc_id

string

required

Google Doc ID

comment_id

string

required

Comment ID

reply

string

""

Optional reply to post before resolving

docs_resolve_comment(
  doc_id="...",
  comment_id="AAAB1iPyaUY",
  reply="Fixed in v2 — carer's leave clause added at 15.1."
)

docs_delete_comment(doc_id, comment_id)

Permanently delete a comment.

docs_delete_comment(doc_id="...", comment_id="AAAB1iPyaUY")

Typical workflows

Contract review

1. docs_get          — read the document
2. docs_add_comment  — flag issues with anchor_text pointing to specific clauses
3. docs_read_comments — audit what's been flagged
4. docs_search_replace — fix straightforward issues directly
5. docs_resolve_comment — close comments as they're addressed

Bulk document update

1. docs_list         — find all relevant documents
2. docs_batch_replace — apply changes atomically (e.g. rebrand, date update)
3. docs_get          — verify the result

Collaborative review

1. docs_add_comment  — add review notes
2. docs_reply_to_comment — respond to collaborator comments
3. docs_resolve_comment  — close resolved threads

Auth environment variables

Variable

Description

GOOGLE_DOCS_MCP_TOKEN

Path to token file (preferred for standalone use)

GOOGLE_DOCS_MCP_CLIENT_ID

Optional OAuth client ID override

GOOGLE_DOCS_MCP_CLIENT_SECRET

Optional OAuth client secret override

GOOGLE_DOCS_MCP_APPS_SCRIPT_ID

Apps Script bridge project ID for bookmark_jump=true

GOOGLE_DOCS_TOKEN_FILE

Legacy alias

GOG_KEYRING_PASSWORD

Auto-export from gog CLI (for personal/OpenClaw use)

Legacy GOOGLE_DRIVE_MCP_* env var aliases still work for backward compatibility.


Scopes

The auth setup requests these scopes:

Scope

Purpose

https://www.googleapis.com/auth/documents

Read and write Google Docs

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

Access Drive files and comments

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

Read Drive file metadata

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

Per-file Drive access

https://www.googleapis.com/auth/script.projects

Create Apps Script projects for comment-path experiments

https://www.googleapis.com/auth/script.deployments

Deploy Apps Script functions

https://www.googleapis.com/auth/script.processes

View script execution

openid, email, profile

Identity


License

MIT

Available Tools

14 tools
docs_add_commentA

Add a comment anchored to specific text in a Google Doc.

NOTE: The current implementation uses the Drive comments API plus a Docs named range. In the Docs UI this still shows as "Original content deleted" rather than a proper inline comment highlight. The comments ARE readable via docs_read_comments and the Docs 💬 panel.

The next path to investigate is Apps Script automation. The OAuth token must include the script.* scopes, and the Google account must also have the Apps Script API enabled at https://script.google.com/home/usersettings before remote Apps Script project creation/execution will work.

By default the tool also appends the matched anchor text into the comment body so the user can understand what was targeted even though the Docs UI does not render a proper inline highlight with the current API path.

When bookmark_jump=True, the tool also uses a persistent Apps Script bridge (configured via GOOGLE_DOCS_MCP_APPS_SCRIPT_ID) to create a bookmark at the target text, then appends a #bookmark jump URL into the comment body.

ParametersJSON Schema
NameRequiredDescriptionDefault
doc_idYesGoogle Doc ID (from the URL: /document/d/{DOC_ID}/edit)
commentYesThe comment text to post
occurrenceNoWhich occurrence of anchor_text to use (default 1 = first). Use 2, 3, etc. if the text appears multiple times.
anchor_textYesExact text in the document to attach the comment to. Use a short, unique phrase (a few words) for reliable matching.
bookmark_jumpNoIf True, create an Apps Script bookmark and append a jump URL into the comment body. Requires the Apps Script bridge env var setup documented in the README.
include_anchor_textNoIf True (default), append the matched anchor text excerpt into the comment body for human readability.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4/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 of behavioral disclosure. It does this well by explaining the UI limitation ('Original content deleted'), the current Drive/Docs API path, default anchor-text appending, and the bookmark_jump bridge behavior.

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

Conciseness3/5

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

The key information is front-loaded, but the description is bloated with a multi-sentence roadmap about a future Apps Script automation path and OAuth/API enablement. That content is not needed to invoke the current tool correctly.

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 six parameters and no annotations, the description provides important caveats, prerequisite setup for bookmark_jump, and expected user-visible limitations. An output schema exists, so missing return-value details are less critical. The main gap is lack of alternative-tool routing.

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 100%, so the baseline is 3. The description adds value beyond the schema by explaining the behavioral consequences of bookmark_jump and include_anchor_text, such as appending anchor text to the comment body and requiring the Apps Script bridge.

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: 'Add a comment anchored to specific text in a Google Doc.' This clearly separates it from comment-management siblings like docs_reply_to_comment, docs_resolve_comment, and docs_delete_comment.

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

Usage Guidelines2/5

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

There is no guidance about when to choose this tool instead of docs_reply_to_comment or docs_read_comments. The description explains implementation behavior and parameter effects but does not give selection criteria or exclusions.

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

docs_appendA

Append a new paragraph at the end of a Google Doc.

Rich formatting is ON by default. Set rich=False to append literal text.

ParametersJSON Schema
NameRequiredDescriptionDefault
richNoIf True (default), interpret simple markdown-like formatting natively
textYesText to append as the final paragraph
doc_idYesGoogle Doc ID

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.2/5.0
Behavior4/5

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

With no annotations, the description carries full behavioral burden. It discloses the key nuance: 'Rich formatting is ON by default. Set rich=False to append literal text.' This goes beyond the schema's parameter description and clarifies a non-obvious behavioral default.

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 tight sentences with the core action first and the formatting caveat second. There is no filler, and every phrase 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 simple tool with 3 parameters, 2 required, and an output schema, the description covers the operation and the one behavioral nuance (rich formatting). It could point to sibling insertion tools or mention edit access, but nothing essential for successful invocation is missing.

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 100%, giving a baseline of 3. The description adds practical meaning to the rich parameter by explicitly explaining the default behavior and the 'append literal text' alternative, which the schema only hints at with 'interpret simple markdown-like formatting natively'.

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 and resource: 'Append a new paragraph at the end of a Google Doc.' This clearly distinguishes it from sibling tools like docs_insert_after and docs_insert_before, which target specific locations rather than the end.

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 phrase 'at the end' implies this is for end-of-document additions, but the description never explicitly names alternative tools such as docs_insert_after or docs_insert_before, nor does it state when not to use this tool. Usage context is inferred rather than stated.

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

docs_batch_replaceA

Apply multiple find→replace operations atomically in a single batchUpdate.

All replacements are applied in one API call (end-of-document first to preserve index validity). Either ALL changes succeed, or none do.

ParametersJSON Schema
NameRequiredDescriptionDefault
doc_idYesGoogle Doc ID
replacements_jsonYesJSON array of replacements, e.g.: '[{"find": "Q1", "replace": "Q2"}, {"find": "draft", "replace": "final", "occurrence": 0}]' Each item: {"find": str, "replace": str, "occurrence": int (default 1, 0=all), "regex": bool (default false)}

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.2/5.0
Behavior4/5

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

There are no annotations, so the description carries the behavioral burden. It discloses atomicity ('Either ALL changes succeed, or none do'), single-call execution, and even the internal ordering detail ('end-of-document first to preserve index validity'). This is strong behavioral transparency beyond what the schema provides.

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 compact and front-loaded. The first sentence states exactly what the tool does, and the second sentence adds critical atomicity and execution-order behavior with 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?

With only two required parameters, 100% schema coverage, and an output schema present, the description covers the essential contract: what it does, how it behaves, and what success guarantees. It could be even more complete by mentioning limits or failure behavior, but nothing critical is missing 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 coverage is 100%, and the schema already gives detailed descriptions and examples for replacements_json, including the occurrence field. The description adds no parameter-specific semantics beyond what the schema documents, so the baseline of 3 is appropriate.

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

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: 'Apply multiple find→replace operations atomically in a single batchUpdate.' It also distinguishes itself from siblings by emphasizing 'multiple,' 'atomically,' and 'single batchUpdate,' which sets it apart from a presumably non-atomic search/replace tool like docs_search_replace.

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 communicates clear usage context: use this tool when multiple replacements must happen in one call with atomic all-or-nothing semantics. It does not explicitly name alternatives or exclusion criteria, so it stops short of a perfect score, but the context is clear enough for an agent to choose it appropriately.

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

docs_createA

Create a new Google Doc with an optional initial paragraph of text.

ParametersJSON Schema
NameRequiredDescriptionDefault
titleYesDocument title
initial_textNoOptional first paragraph content

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4/5.0
Behavior3/5

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

With no annotations provided, the description carries the full behavioral disclosure burden. It states the core action (creates a new Google Doc) and the optional initial paragraph, but does not mention side effects such as where the doc is stored, whether creation can be repeated, or any permission requirements. This is adequate but leaves some behavior implicit.

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, tightly worded sentence that conveys the purpose and the optional parameter without any redundancy. Every word adds value, and the most important information is front-loaded.

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

Completeness4/5

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

Given only two simple parameters and an existing output schema, the description is sufficient for an agent to understand the tool's core function and call it correctly. It does not specify permissions or location of the created doc, but these are not essential for a basic create operation with structured schema support.

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

Parameters3/5

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

The input schema already fully describes both parameters (title and initial_text) with 100% coverage. The description adds minimal extra meaning beyond restating that initial_text is optional and used as the first paragraph, so it does not meaningfully elevate the semantic value.

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

Purpose5/5

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

The description states a specific verb and resource: 'Create a new Google Doc'. The word 'new' and the optional initial paragraph distinguish it clearly from sibling tools like docs_insert_after, docs_append, and docs_get, which all operate on existing documents.

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 implies this tool is for creating new documents, which sets apart from siblings that edit or read existing docs. However, it does not explicitly list alternatives or state when not to use the tool, so it stops short of a full exclusionary guideline.

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

docs_delete_commentB

Delete a comment from a Google Doc.

ParametersJSON Schema
NameRequiredDescriptionDefault
doc_idYesGoogle Doc ID
comment_idYesID of the comment to delete

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.3/5.0
Behavior2/5

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

No annotations are provided, so the description must disclose behavior on its own. It only says 'delete,' which signals destructiveness, but it does not state whether deletion is permanent, whether replies are also deleted, or what permissions/side effects are involved.

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 that front-loads the action and object with no filler or repetition. It is easily parsed by an agent.

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 two-parameter tool with a present output schema, the call itself is well specified. However, because this is a destructive operation with no annotations, the description should have included at least a note on permanence or side effects to be fully contextually 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 schema already documents both required parameters (doc_id and comment_id) at 100% coverage, so the description does not need to repeat them. It also adds no extra meaning beyond what the schema gives.

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

Purpose5/5

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

The description states the exact operation (delete), the resource (a comment), and the container (a Google Doc). It is immediately distinguishable from siblings such as docs_add_comment, docs_reply_to_comment, and docs_resolve_comment because those do not delete.

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 about when to delete versus resolving a comment, and no mention of alternatives or prerequisites such as permissions. An agent cannot infer when this tool should be preferred over docs_resolve_comment or docs_read_comments.

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

docs_delete_paragraphA

Delete the paragraph(s) containing anchor text.

Deletes ALL paragraphs that contain the anchor string (case-insensitive). If the anchor matches only one paragraph, only that paragraph is deleted.

ParametersJSON Schema
NameRequiredDescriptionDefault
anchorYesText to search for in paragraphs to delete
doc_idYesGoogle Doc ID

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.5/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. It explicitly discloses case-insensitive matching, the behavior that ALL containing paragraphs are deleted, and that a unique match deletes only one. These are non-obvious behavioral traits that materially affect invocation.

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, no fluff. The core action is front-loaded and the behavioral nuances are presented directly.

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 is simple with only two required params, both fully covered by schema. The description addresses its key behavioral edge cases, and an output schema exists to document return values. Nothing essential is missing for an agent to call 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 coverage is 100%, so baseline is 3. The description adds meaning by explaining that 'anchor' is a search string with case-insensitive substring matching, which is more specific than the schema's 'Text to search for'. It does not add format constraints, but it clarifies matching rule.

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 (delete) and a specific resource (paragraphs containing anchor text). It distinguishes from sibling comment and search tools, 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 Guidelines3/5

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

The behavior description implies usage contexts (delete all matching paragraphs, case-insensitively), but there is no explicit guidance on when to choose this tool over alternatives such as docs_search_replace or docs_delete_comment. It provides enough context for an agent to infer, but not clear exclusions.

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

docs_getA

Read a Google Doc and return its structure as JSON.

Returns title, list of paragraphs (with text, style, start/end indices), and the full plain text. Use this before editing to understand the document.

ParametersJSON Schema
NameRequiredDescriptionDefault
doc_idYesGoogle Doc ID (from the URL: /document/d/{DOC_ID}/edit)

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.3/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 burden. It clearly signals a read-only operation by saying 'Read' and 'before editing,' and describes the returned content. It does not mention auth requirements or potential limitations, but for a simple read tool the core behavior is transparent.

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, well-structured sentences: the first states the purpose, the second gives output details and usage context. There is no redundant or vague wording.

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 is simple, has only one parameter, and an output schema exists. The description covers purpose, return contents, and recommended usage, so an agent has enough context to select and invoke the tool correctly.

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

Parameters3/5

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

Schema description coverage is 100% and the sole parameter doc_id is already well documented with URL extraction guidance. The description adds no parameter-level detail, but none is needed because the schema fully covers it.

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

Purpose5/5

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

States a specific verb ('Read a Google Doc') and resource ('Google Doc'), and clarifies the output is JSON structure. This clearly distinguishes it from sibling editing, commenting, creation, and listing 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?

Explicitly says to use it 'before editing to understand the document,' which gives clear context for when it is appropriate. It does not explicitly name alternatives or exclusions, but the read-versus-edit relationship to siblings is clear.

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

docs_insert_afterA

Insert a new paragraph immediately after the paragraph containing anchor.

The anchor is matched case-insensitively as a substring of the paragraph.

Rich formatting is ON by default. Set rich=False to insert literal text.

ParametersJSON Schema
NameRequiredDescriptionDefault
richNoIf True (default), interpret simple markdown-like formatting natively
textYesText to insert as the new paragraph
anchorYesText to search for to find the target paragraph
doc_idYesGoogle Doc ID

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.4/5.0
Behavior4/5

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

With no annotations provided, the description carries the full burden and does a good job: it discloses case-insensitive substring matching and the rich-formatting default with the rich=False escape hatch. It stops short of specifying behavior when the anchor is absent or appears in multiple paragraphs, which is a minor gap.

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 with no filler: the action is front-loaded, the matching rule follows, and the formatting default is stated last. Each sentence contributes distinct information needed to call the tool correctly.

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 low-complexity insert tool with an output schema available and a 100% documented input schema, the description is mostly complete. Remaining gaps (multiple matches, no-match error handling) are minor but would make it fully predictable.

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?

Input schema coverage is 100%, giving a baseline of 3. The description adds meaning beyond the schema by explaining that `anchor` is matched case-insensitively as a substring and by clarifying that `rich` defaults to native formatting and can be disabled for literal text.

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

Purpose5/5

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

The description states a specific action ('Insert a new paragraph immediately after') with a concrete resource (the paragraph containing `anchor`). This clearly distinguishes it from siblings like docs_insert_before and docs_append, even without reading their schemas.

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 the tool is appropriate: use it when you need to insert text after a specific paragraph identified by an anchor substring. It doesn't name alternatives or exclusions, but the 'after' positioning and anchor-matching rule make the intended usage evident.

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

docs_insert_beforeA

Insert a new paragraph immediately before the paragraph containing anchor.

The anchor is matched case-insensitively as a substring of the paragraph.

Rich formatting is ON by default. Set rich=False to insert literal text.

ParametersJSON Schema
NameRequiredDescriptionDefault
richNoIf True (default), interpret simple markdown-like formatting natively
textYesText to insert as the new paragraph
anchorYesText to search for to find the target paragraph
doc_idYesGoogle Doc ID

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.4/5.0
Behavior4/5

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

With no annotations, the description takes on the burden of behavior and does so well: it discloses case-insensitive substring matching, the default rich formatting behavior, and how to opt into literal text with rich=False. It does not specify behavior when multiple paragraphs contain the anchor or when no match is found, which is a minor but real gap.

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 short sentences, each earning its place: the operation, the matching rule, and the formatting default. There is no fluff or repetition of schema fields.

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 essential invocation details are covered, and since an output schema exists, return values need no explanation. The only missing context is edge-case behavior for unmatched or multiple matching anchors, which an agent would benefit from knowing.

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 100% of parameters, so the baseline is 3. The description adds useful meaning beyond the schema by explaining how `anchor` is matched (case-insensitive substring) and what `rich` controls (formatting mode and the default).

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 pair: 'Insert a new paragraph immediately before the paragraph containing `anchor`.' This states both the operation and its placement, and the word 'before' differentiates it from siblings like docs_insert_after and docs_append.

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 placement constraint 'immediately before the paragraph containing anchor' clearly tells an agent when this tool is appropriate, and the substring matching rule sets expectations about how the target is located. It does not explicitly name alternatives such as docs_insert_after, so it stops short of a full when-to-use/when-not-to-use statement.

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

docs_listB

List Google Docs from Drive, optionally filtered by a search query.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum number of results (default 20)
queryNoOptional search terms (searches title and content)

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.3/5.0
Behavior3/5

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

There are no annotations, so the description carries the burden of behavioral disclosure. 'List' implies a read-only, non-mutating operation, and the mention of 'optionally filtered by a search query' adds useful behavior. However, it does not explicitly state that no side effects occur, the scope of results, or how results are ordered.

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?

A single, clear sentence that is front-loaded with the action and resource. Every word earns its place with no redundant filler.

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

Completeness3/5

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

The tool is relatively simple with two optional parameters and an output schema that covers return values. However, with no annotations and no usage guidance relative to siblings, the description leaves the agent to infer when this tool should be used and what the results actually contain.

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

Parameters3/5

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

Schema coverage is 100%, so the schema already documents both parameters. The description mentions an optional search query but adds no detail beyond the schema, such as query syntax or what fields are searched.

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

Purpose4/5

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

The description clearly states the action ('List') and the resource ('Google Docs from Drive'), with an optional filter. It is clear enough to distinguish from sibling mutation and retrieval tools, though it does not explicitly name a sibling alternative.

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

Usage Guidelines2/5

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

No guidance is given about when to choose docs_list versus docs_get, docs_create, or other sibling tools. The usage context is only implied by the verb 'List' and the presence of an optional query filter.

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

docs_read_commentsA

Read all comments on a Google Doc.

Returns each comment with its content, author, anchor status, and whether it's resolved or deleted. Useful for auditing what comments exist and whether they are properly anchored to text.

ParametersJSON Schema
NameRequiredDescriptionDefault
doc_idYesGoogle Doc ID
include_resolvedNoInclude resolved/deleted comments (default False)

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4/5.0
Behavior3/5

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

No annotations are provided, so the description must disclose behavioral traits. It communicates a read operation and return fields, but it does not explain the default filtering behavior of include_resolved, pagination, permissions, or explicitly confirm no document modifications occur.

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 compact and front-loaded with the core action. Every sentence adds information—scope, return contents, and use case—without redundancy or filler.

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

Completeness4/5

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

For a two-parameter read tool with a complete input schema and an output schema, the description covers purpose, expected return values, and a use case. Minor gaps remain around filter semantics and explicit differentiation from sibling tools, but the essential information for selection and invocation is present.

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 parameters are already documented. The description adds modest value by mentioning 'resolved or deleted' status, which relates to include_resolved, but it does not meaningfully extend 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 opens with a specific verb and resource: 'Read all comments on a Google Doc.' It then lists the returned fields (content, author, anchor status, resolved/deleted), which clearly distinguishes it from sibling tools like docs_get or comment-mutation 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?

The description gives a clear intended use case: 'Useful for auditing what comments exist and whether they are properly anchored to text.' This provides context on when to choose the tool, though it does not explicitly name 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.

docs_reply_to_commentA

Reply to an existing comment on a Google Doc.

ParametersJSON Schema
NameRequiredDescriptionDefault
replyYesReply text to post
doc_idYesGoogle Doc ID
comment_idYesID of the comment to reply to (from docs_read_comments)

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.6/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 the full burden of behavioral disclosure. It states that a reply is posted but does not mention whether the action is destructive, requires permissions, changes comment state, or can fail if the comment is resolved/deleted.

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?

A single clear sentence with zero filler. It is front-loaded and immediately tells the agent the purpose.

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

Completeness4/5

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

For a low-complexity operation with fully documented parameters and an output schema, the description is largely sufficient. It clearly identifies the action and resource, though it could be more complete with behavioral caveats.

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 covers all three parameters at 100%, so the baseline is 3. The description does not add parameter-level detail beyond the schema, but it also does not need to.

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 ('Reply') and resource ('an existing comment on a Google Doc'). The word 'existing' distinguishes this from docs_add_comment, so an agent can tell the tools apart without opening the schema.

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

Usage Guidelines3/5

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

The phrase 'existing comment' implies this tool is for responding to comments already present, not for creating new ones. However, it does not explicitly state when to prefer this over docs_add_comment or mention any exclusions.

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

docs_resolve_commentB

Resolve (close) a comment on a Google Doc, optionally with a final reply.

ParametersJSON Schema
NameRequiredDescriptionDefault
replyNoOptional reply text to post before resolving
doc_idYesGoogle Doc ID
comment_idYesID of the comment to resolve (from docs_read_comments)

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.3/5.0
Behavior2/5

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

No annotations are provided, so the description must carry the full burden of disclosing side effects. It states the core action (resolve/close) but does not explain whether resolution is reversible, whether notifications are sent, whether the comment remains visible, or what happens if the comment is already resolved. This is a significant transparency gap for a mutating 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?

A single front-loaded sentence. The verb and object lead, and the optional reply is appended without filler. Every clause earns its place, making it concise and easy to scan.

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

Completeness3/5

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

The tool is simple, the schema fully documents parameters, and an output schema exists, so return-value detail is not required. However, with no annotations and no guidance on when to use this tool against sibling comment tools, the description lacks the contextual guardrails an agent needs for a mutating operation. It is minimally adequate but has clear gaps.

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

Parameters3/5

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

The input schema has 100% description coverage, so the baseline is 3. The description adds little beyond the schema: 'optionally with a final reply' restates the reply parameter's docstring. No additional semantics about ID formats or the source of comment_id are provided beyond what the schema already states.

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?

States a specific verb ('Resolve (close)') and a clear resource ('a comment on a Google Doc'), making the action immediately distinguishable from siblings like docs_reply_to_comment and docs_delete_comment. It also notes the optional final reply, so an agent can tell that this tool resolves rather than merely replies or deletes.

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 when-to-use or alternative routing is given. The description does not mention that this is the right tool for closing a comment versus replying or deleting, nor does it advise using docs_reply_to_comment when no resolution is desired. The only implicit hint is 'optionally with a final reply,' but no exclusions or comparison to alternatives are provided.

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

docs_search_replaceA

Find text in a Google Doc and replace a specific occurrence.

Preserves document history — uses real batchUpdate, not delete-and-rewrite.

ParametersJSON Schema
NameRequiredDescriptionDefault
findYesText to search for (or regex pattern if regex=True)
regexNoIf True, treat `find` as a Python regular expression
doc_idYesGoogle Doc ID
replaceYesText to replace it with
occurrenceNoWhich occurrence to replace. 1 = first (default), 2 = second, 0 = replace ALL occurrences.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.9/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 does meaningful work by stating that the operation preserves document history and uses a real batchUpdate instead of delete-and-rewrite. It does not cover permissions or side effects in depth, but it provides a valuable non-obvious guarantee.

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 focused sentences: the first states the tool's core function, the second adds a valuable behavioral guarantee. Every sentence earns its place and the description is well front-loaded.

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

Completeness3/5

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

The schema covers all parameters and an output schema exists, so return behavior does not need describing. However, the description lacks explicit guidance about when to use this tool instead of docs_batch_replace, which is an important selection-related gap given the sibling list.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already fully documents find, replace, doc_id, regex, and occurrence. The description reinforces the 'specific occurrence' idea but adds no new parameter-level detail beyond what the schema provides.

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

Purpose5/5

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

The description clearly identifies the action ('Find text... and replace') and the resource ('Google Doc'), and specifies that it targets a specific occurrence. This differentiates it from the sibling docs_batch_replace, which implies bulk replacement.

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 phrase 'specific occurrence' implies this tool is for targeted single-occurrence replacement, but it never explicitly says when to prefer it over docs_batch_replace or when not to use it. Usage context is present but only implicit, not explicit.

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. 14 tool updatesv0.2.0
    • First observeddocs_add_comment
    • First observeddocs_append
    • First observeddocs_batch_replace
    • First observeddocs_create
    • First observeddocs_delete_comment
    • First observeddocs_delete_paragraph
    • First observeddocs_get
    • First observeddocs_insert_after
    • First observeddocs_insert_before
    • First observeddocs_list
    • First observeddocs_read_comments
    • First observeddocs_reply_to_comment
    • First observeddocs_resolve_comment
    • First observeddocs_search_replace

TDQS

A3.9/5.0
Disambiguation4/5

Most tools target clearly distinct actions: insert before/after, append, delete paragraph, search/replace, and comment operations are easy to tell apart. The only mild ambiguity is between docs_search_replace and docs_batch_replace, since batch replace is a superset of single replace, though their descriptions clarify the intended use.

Naming Consistency4/5

All tools share a consistent docs_ prefix and use clear snake_case verb patterns. Minor deviations like docs_get vs docs_read_comments and compound verbs like search_replace and batch_replace keep naming predictable but not perfectly uniform.

Tool Count5/5

14 tools is well within the ideal range for a document-centric MCP server. Each tool covers a distinct operation, from document lifecycle to paragraph editing and comment management, without feeling bloated or redundant.

Completeness4/5

The toolset covers the main workflows: create, list, read, edit paragraphs, search/replace text, and full comment lifecycle. Minor gaps exist around document deletion, copying, exporting, and formatting control, but agents can accomplish most typical Google Docs tasks without dead ends.

Maintenance

ActivityInactive
ResponsivenessSyncing

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/dbuxton/google-docs-mcp'

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