google-docs-mcp
Provides tools to read, create, and edit Google Docs documents, including cloning templates, inserting text after headings, appending text, finding/replacing text, and retrieving document structure and headings.
Enables copying existing Google Drive files (e.g., document templates) through the Drive API to create new documents.
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-mcpClone the report template and replace {{CLIENT}} with Acme Inc."
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
MCP server to read, create and edit Google Docs. Built for report/audit workflows: clone a template, fill sections by heading, find/replace placeholders, round-trip content as Markdown, and make surgical edits (formatting, tables, headers/footers) without regenerating the whole document.
Tools (23)
Reading
Tool | What it does |
| Read the full document — as Markdown (default, keeps structure) or plain text |
| Index of H1–H6 headings with their position |
| List all headings with level and text, without loading full content |
Basic text editing
Tool | What it does |
| Insert text right after a section (partial, case-insensitive heading match) |
| Append text at the end of the document |
| Find and replace text (handy for |
Documents
Tool | What it does |
| Create a new empty document |
| Clone an existing document (e.g. from a template) |
Native Markdown round-trip
Tool | What it does |
| Create a Google Doc from Markdown with native formatting — headings land in the document outline, and bold, italics, links, tables, lists and quotes are preserved |
| Replace a whole existing Doc's content from Markdown, keeping the same document ID/URL so shared links and permissions don't break |
Images and page layout
Tool | What it does |
| Insert an image from a public URL (e.g. a chart) |
| Insert a page break — useful for reports meant to print or export to PDF |
| Set (or replace) the document header text, repeated at the top of every page |
| Set (or replace) the document footer text |
Named ranges (reusable templates)
Tool | What it does |
| Name a range of text so it can be referenced later without depending on indexes that shift as the document is edited |
| Replace a named range's content with new text, without touching the rest of the document — the core piece for monthly-report-style templates |
| Remove a range's name (doesn't delete the text, just the reference) |
Surgical formatting
Tool | What it does |
| Apply formatting (bold, italic, underline, color, font size) to a specific text range, without touching the rest of the document |
| Change the alignment of one or more paragraphs (left, center, right, justified) |
Tables
Tool | What it does |
| Insert a new table into the document without touching the rest of the content |
| Insert a row into an existing table |
| Delete a row from an existing table |
| Merge table cells — e.g. for a title spanning several columns |
Related MCP server: @node2flow/google-docs-mcp
⚠️ Note — character indexes go stale after any edit
format_text, align_paragraph, add_named_range and the table tools all work with character
indexes (start_index/end_index/table_start_index...). Any prior edit to the document —
even a one-character change — shifts every index that comes after it.
This is how Google Docs' index model works, not a bug in these tools: verified in production by capturing an index, making an unrelated edit in between (one that changed the length of the document), and then reusing the stale index — the formatting landed on the wrong paragraph. Re-reading the same index right before the call, with no edit in between, hit the correct paragraph both times.
Rule of thumb: fetch a fresh index (get_document_structure or a direct read) immediately
before calling any of these tools if anything else may have touched the document in between.
Never reuse an index from an earlier step.
Typical workflow
1. copy_document(template_id, "Client Report — August 2026")
2. find_replace("{{CLIENT}}", "Acme Inc.")
3. find_replace("{{DATE}}", "August 2026")
4. get_document_structure() → see available headings
5. insert_text_after_heading("TRAFFIC OVERVIEW", report_data)Or, for a document authored in Markdown:
1. create_document_from_markdown(markdown_text, title="Monthly Report")
... later, to update it in place ...
2. read_document(doc_id) → Markdown with full structure
... edit the Markdown ...
3. replace_document_from_markdown(doc_id, md) → same ID, same URLSetup
Create a Google Cloud project (or reuse one) and enable the Google Docs API and Google Drive API (needed for
copy_documentand the Markdown import/export tools).Create an OAuth 2.0 Client ID of type "Desktop app" and download it as
client_secret.json.If the app is in "Testing" mode, add your Google account as a test user.
Install dependencies:
python3 -m venv .venv source .venv/bin/activate pip install -r requirements.txtRun the OAuth flow once:
CLIENT_SECRET_PATH=~/.config/google-docs-mcp/client_secret.json \ python3 setup_auth.pyThis opens a browser — log in and grant access.
MCP client configuration
{
"mcpServers": {
"google-docs": {
"command": "/path/to/.venv/bin/python3",
"args": ["/path/to/google-docs-mcp/server.py"],
"env": {
"GOOGLE_WORKSPACE_TOKEN_PATH": "~/.config/google-docs-mcp/token.json"
}
}
}
}Env var | Default | Purpose |
|
| Path to the OAuth token |
Safety
Every tool carries MCP Tool Annotations from the spec (
readOnlyHint,destructiveHint,idempotentHint,openWorldHint).Execution errors propagate as real MCP protocol errors (
isError=true) — never as a JSON payload that looks like a success.replace_document_from_markdownoverwrites the entire document body (recoverable from Google Docs' own version history) — review the target document ID before calling it.
Notes
insert_text_after_headingdoes a case-insensitive substring match, so "traffic" matches "TRAFFIC OVERVIEW". If the heading isn't found, the response includesavailable_headingsso you can retry with the correct one.copy_documentuses the Drive API (files().copy()).Markdown round-trip preserves headings, bold/italic, links, tables, numbered and nested lists, quotes, inline code and task checkboxes (
- [ ]/- [x]). Fenced code blocks are the one exception: the content survives but the ``` markers don't round-trip.merge_table_cells: the absorbed cell isn't removed from the table's JSON, it's left empty — the merge itself shows up in the first cell'scolumnSpan/rowSpan, not in the cell count.
License
MIT — see LICENSE.
This server cannot be installed
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 Servers
- AlicenseAqualityDmaintenanceMCP server for Google Workspace APIs - Docs, Sheets, Drive, Gmail, and Calendar. Enables reading, creating, and editing Google Docs and Sheets, managing comments, reading emails, and viewing calendar events.343917MIT
- AlicenseNot gradedqualityDmaintenanceMCP server for Google Docs — create, read, edit, format, and manage documents through 26 tools via the Model Context Protocol.111MIT
- AlicenseNot gradedqualityDmaintenanceA powerful Model Context Protocol (MCP) server implementation for seamless Google Docs API integration, enabling AI assistants to create, read, update, and manage Google Docs.12MIT
- AlicenseNot gradedqualityDmaintenanceMCP server for Google Docs and Sheets that enables AI assistants to read, create, edit, style, export, and collaborate on documents using local OAuth authentication.42MIT
Related MCP Connectors
A paid remote MCP for Context7 MCP docs, built to return verdicts, receipts, usage logs, and audit-r
MCP server for the PDFGate API. Generate PDFs, manage documents and handle e-signatures.
PandaDoc MCP server for creating, sending, signing, and tracking PandaDoc documents.
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/YerayRodri/google-docs-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server