google-docs-mcp
Enables adding bookmark-jump URLs in comments via an optional Apps Script bridge.
Provides tools to read, edit, and create Google Docs using text anchors instead of character indices, enabling surgical edits without corrupting document history.
Allows listing and searching Google Drive files to find documents by query.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@google-docs-mcpIn 'Report.docx', replace 'Q1 results' with 'Q2 results'."
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
google-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 --helpThat 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 --helpIf 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-auth2. Create a Google Cloud OAuth app
Go to console.cloud.google.com
Create a project (or select an existing one)
Enable these APIs (APIs & Services → Library):
Google Docs API
Google Drive API
Google Apps Script API (for inline-anchored comments)
Go to APIs & Services → Credentials
Click Create Credentials → OAuth 2.0 Client ID
Application type: Desktop App
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.jsonOr 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-authHeadless / 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 terminalAlready 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:
--credentials /path/to/credentials.json--client-idand--client-secretGOOGLE_DOCS_MCP_CLIENT_IDandGOOGLE_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:
Enable the Apps Script API for the Google account at https://script.google.com/home/usersettings
Create a standalone Apps Script project to use as the bridge
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-mcpIn that same Google Cloud project, ensure Apps Script API is enabled
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-mcpIf 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 |
| string |
| Search terms (searches title and content) |
| int |
| 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 |
| string | required | Google Doc ID |
| string | required | Text to find |
| string | required | Replacement text |
| int |
| Which occurrence: |
| bool |
| Treat |
# 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 |
| string | required | Text to find |
| string | required | Replacement text |
| int |
|
|
| bool |
| 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 |
| string | required | Google Doc ID |
| string | required | Comment text |
| string | required | Text in the document to attach the comment to |
| int |
| Which occurrence of |
| bool |
| Append the matched anchor text into the comment body |
| bool |
| 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_commentsand 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 theGOOGLE_DOCS_MCP_APPS_SCRIPT_IDenv 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 |
| string | required | Google Doc ID |
| bool |
| 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 |
| string | required | Google Doc ID |
| string | required | Comment ID (from |
| 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 |
| string | required | Google Doc ID |
| string | required | Comment ID |
| 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 addressedBulk 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 resultCollaborative review
1. docs_add_comment — add review notes
2. docs_reply_to_comment — respond to collaborator comments
3. docs_resolve_comment — close resolved threadsAuth environment variables
Variable | Description |
| Path to token file (preferred for standalone use) |
| Optional OAuth client ID override |
| Optional OAuth client secret override |
| Apps Script bridge project ID for |
| Legacy alias |
| 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 |
| Read and write Google Docs |
| Access Drive files and comments |
| Read Drive file metadata |
| Per-file Drive access |
| Create Apps Script projects for comment-path experiments |
| Deploy Apps Script functions |
| View script execution |
| Identity |
License
MIT
Available Tools
14 toolsdocs_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.
| Name | Required | Description | Default |
|---|---|---|---|
| doc_id | Yes | Google Doc ID (from the URL: /document/d/{DOC_ID}/edit) | |
| comment | Yes | The comment text to post | |
| occurrence | No | Which occurrence of anchor_text to use (default 1 = first). Use 2, 3, etc. if the text appears multiple times. | |
| anchor_text | Yes | Exact text in the document to attach the comment to. Use a short, unique phrase (a few words) for reliable matching. | |
| bookmark_jump | No | If 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_text | No | If True (default), append the matched anchor text excerpt into the comment body for human readability. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| rich | No | If True (default), interpret simple markdown-like formatting natively | |
| text | Yes | Text to append as the final paragraph | |
| doc_id | Yes | Google Doc ID |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| doc_id | Yes | Google Doc ID | |
| replacements_json | Yes | JSON 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
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| title | Yes | Document title | |
| initial_text | No | Optional first paragraph content |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| doc_id | Yes | Google Doc ID | |
| comment_id | Yes | ID of the comment to delete |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| anchor | Yes | Text to search for in paragraphs to delete | |
| doc_id | Yes | Google Doc ID |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| doc_id | Yes | Google Doc ID (from the URL: /document/d/{DOC_ID}/edit) |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| rich | No | If True (default), interpret simple markdown-like formatting natively | |
| text | Yes | Text to insert as the new paragraph | |
| anchor | Yes | Text to search for to find the target paragraph | |
| doc_id | Yes | Google Doc ID |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| rich | No | If True (default), interpret simple markdown-like formatting natively | |
| text | Yes | Text to insert as the new paragraph | |
| anchor | Yes | Text to search for to find the target paragraph | |
| doc_id | Yes | Google Doc ID |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of results (default 20) | |
| query | No | Optional search terms (searches title and content) |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| doc_id | Yes | Google Doc ID | |
| include_resolved | No | Include resolved/deleted comments (default False) |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| reply | Yes | Reply text to post | |
| doc_id | Yes | Google Doc ID | |
| comment_id | Yes | ID of the comment to reply to (from docs_read_comments) |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| reply | No | Optional reply text to post before resolving | |
| doc_id | Yes | Google Doc ID | |
| comment_id | Yes | ID of the comment to resolve (from docs_read_comments) |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| find | Yes | Text to search for (or regex pattern if regex=True) | |
| regex | No | If True, treat `find` as a Python regular expression | |
| doc_id | Yes | Google Doc ID | |
| replace | Yes | Text to replace it with | |
| occurrence | No | Which occurrence to replace. 1 = first (default), 2 = second, 0 = replace ALL occurrences. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
14 tool updates
v0.2.0- First observed
docs_add_comment - First observed
docs_append - First observed
docs_batch_replace - First observed
docs_create - First observed
docs_delete_comment - First observed
docs_delete_paragraph - First observed
docs_get - First observed
docs_insert_after - First observed
docs_insert_before - First observed
docs_list - First observed
docs_read_comments - First observed
docs_reply_to_comment - First observed
docs_resolve_comment - First observed
docs_search_replace
TDQS
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.
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.
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.
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
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
Persistent docs and memory for AI agents — read, write, organize & search a shared workspace.
Publish drafts to Google Docs for review, then revise and resolve reviewer comments in your AI tool
Collaborative word processor you can use with your agent.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceEnables AI agents to efficiently manage and update component documentation with precise partial updates, saving up to 75% tokens compared to full rewrites.ISC
- FlicenseNot gradedqualityCmaintenanceEnables reading, editing, and rewriting Google Docs documents with tools that support full content replacement, appending, heading-based insertion, and style-preserving rewrites.-
- FlicenseAqualityCmaintenanceEnables AI agents to create and edit Google Docs and draft Gmail emails through natural language.7-
- AlicenseNot gradedqualityBmaintenanceEnables AI assistants to make real in-place edits to Google Drive files—preserving file IDs, revision history, comments, and sharing—while also supporting appends, targeted find-and-replace, reads, searches, and file creation.MIT
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
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