google-docs-mcp
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| GOOGLE_DOCS_MCP_TOKEN | No | Path to the token file (preferred for standalone use). Defaults to ~/.google-docs-mcp/token.json if not provided. | ~/.google-docs-mcp/token.json |
| GOOGLE_DOCS_MCP_APPS_SCRIPT_ID | No | Optional Apps Script bridge project ID for bookmark_jump=true. |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": true
} |
| logging | {} |
| prompts | {
"listChanged": false
} |
| resources | {
"subscribe": false,
"listChanged": false
} |
| extensions | {
"io.modelcontextprotocol/ui": {}
} |
| experimental | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| 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. |
| docs_search_replaceA | Find text in a Google Doc and replace a specific occurrence. Preserves document history — uses real batchUpdate, not delete-and-rewrite. |
| docs_insert_afterA | Insert a new paragraph immediately after the paragraph containing 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. |
| docs_insert_beforeA | Insert a new paragraph immediately before the paragraph containing 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. |
| docs_delete_paragraphA | Delete the paragraph(s) containing Deletes ALL paragraphs that contain the anchor string (case-insensitive). If the anchor matches only one paragraph, only that paragraph is deleted. |
| 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. |
| 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. |
| 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. |
| docs_reply_to_commentA | Reply to an existing comment on a Google Doc. |
| docs_resolve_commentB | Resolve (close) a comment on a Google Doc, optionally with a final reply. |
| docs_delete_commentB | Delete a comment from a Google Doc. |
| 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. |
| docs_listB | List Google Docs from Drive, optionally filtered by a search query. |
| docs_createA | Create a new Google Doc with an optional initial paragraph of text. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
TDQS
Scored across 14 tools
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.