io.github.mmedum/google-docs-mcp
MCPB · GOOGLE-DOCS-MCP_3.0.0.MCPB
Google Docs as MCP tools: read, edit, suggest and comment on documents.
Available components
Last scanned (8 hours ago)
Scores higher than 93% of MCPB servers
Category Documents and Files
How this component scores in each security and reliability category. Every signal is checked automatically from public evidence about the published package, including repeated runs of it in an isolated sandbox, and we only credit what we can confirm. How we score → Why this is hard to score →
Supply Chain Security0
- No malware scan is available for this kind of package: the supply-chain vendors we use do not cover it. This is a permanent gap in our coverage, not a finding about the package.Unverified
- Known CVEs could not be checked: we found no dependency list to check in this bundle: either it runs a compiled binary, whose bundled manifests we do not read, or none of the package.json, requirements.txt, pyproject.toml or uv.lock files it ships for its runtime declares a dependency we can read (a requirements.txt that only points at a setup.py project, a local path, or a nested requirements file we cannot follow counts as none).Unverified
- Install-script risk not yet assessed.Unverified
- Dependency health could not be checked: we found no dependency list to check in this bundle: either it runs a compiled binary, whose bundled manifests we do not read, or none of the package.json, requirements.txt, pyproject.toml or uv.lock files it ships for its runtime declares a dependency we can read (a requirements.txt that only points at a setup.py project, a local path, or a nested requirements file we cannot follow counts as none).Unverified
Provenance & Transparency100
- Source repository is publicly reachable at the declared URL. View diagnostics → Pass
- Cryptographically verified build provenance (signed, bound to mmedum/google-docs-mcp). View diagnostics → Pass
- Clear OSI-approved license (Apache-2.0).Pass
- Actively maintained (last published 0 days ago).Pass
- Publishes a security disclosure policy (SECURITY.md).Pass
Schema Quality & AI Usability58
- AI-judged instruction clarity (good).Pass
- Context-footprint check failed: tool/resource definitions use about 6326 tokens (~301/item across 21 items; 21 tools + 0 resources), over budget; trim descriptions and params. See how to fix → Fail
- Usage-examples check failed: none of the tools include examples. See how to fix → Fail
Stability & Change Management64
- Stability check failed: the tool surface changed between 2.1.1 and 3.0.0: 0 tool removals, 1 breaking changes, 1 additions. See how to fix → Fail
Tool Coverage98
- 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
- 91% of tool parameters carry a description.Partial
- Structured output schemas are declared (52% of tools); any adoption earns full credit.Pass
Tool Safety100
- No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.Pass
- We read all 21 captured tool definition(s), and no name or description among them implies an irreversible operation.Pass
- An AI judge read all 22 captured unit(s) of tool text and found none that tries to manipulate the model reading it.Pass
Capabilities100
- Implements a current MCP spec version (2026-07-28).Pass
Unverified: 1 category
A category scored 0 because we could not verify it: a data source with nothing on this package, evidence we could not reach, or a check we could not run. We only credit what we can confirm.
Every change we have recorded for this component, newest first. Security-relevant changes are always shown. ▲ marks a change for the better, ▼ a change for the worse; unmarked changes are neutral.
- 23 Oct 26 0
- Stability: 0.63 → fail ▼ security
- Package version: 2.4.0 → 3.0.0 functional
- 22 Oct 26 0
- Stability: 0.60 → unverified ▼ security
- Tool safety: pass → unverified ▼ security
- Tool coverage: 100 → unverified ▼ functional
- Capabilities: pass → unverified ▼ functional
- Package version: 2.3.1 → 2.4.0 functional
- 21 Oct 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 57 to 60. That category is still filling its 30-day observation window: 17 days of observed history at the previous scan, 18 at this one. The score rises as the window fills, whether or not the server changes.
- 19 Oct 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 50 to 53. That category is still filling its 30-day observation window: 15 days of observed history at the previous scan, 16 at this one. The score rises as the window fills, whether or not the server changes.
- 17 Oct 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 43 to 47. That category is still filling its 30-day observation window: 13 days of observed history at the previous scan, 14 at this one. The score rises as the window fills, whether or not the server changes.
- 15 Oct 26 +34
- Injection markers: unverified → pass ▲ security
- Schema quality: 262 → 306 ▼ functional
- Tool coverage: unverified → 100 ▲ functional
- MCP protocol: unverified → pass ▲ functional
- Stability: unverified → 0.40 ▲ functional
- Schema quality: excellent → good functional
- 14 Oct 26 0
- Injection markers: unverified → pass ▲ security
- Stability: unverified → 0.37 ▲ functional
- MCP protocol: unverified → pass ▲ functional
- Tool coverage: unverified → 100 ▲ functional
- Package version: 2.1.1 → 2.3.1 functional
- Package version: 2.2.0 → 2.3.0 functional
- Package version: 2.1.1 → 2.2.0 functional
- 13 Oct 26 0
- Package version: 2.1.1 → 2.2.0 functional
Diagnostic detail from the automated scan of this channel: what the scanner observed at each step, so you can see exactly where a check passed or failed. It is informational only and never changes the trust score.
Captured 23 Oct 2026 · Analysed mcpb/https://github.com/mmedum/google-docs-mcp/releases/download/v3.0.0/google-docs-mcp_3.0.0.mcpb@3.0.0
Provenance Verified
A signed build attestation was found and verified, binding this exact artifact to the source repository it claims to come from.
| Result | Verified |
|---|---|
| Ecosystem | mcpb |
| Reason | Verified |
| Discovered via | GitHub artifact attestations |
| Source repo | mmedum/google-docs-mcp |
| Certificate issuer | https://token.actions.githubusercontent.com |
| Certificate SAN | https://github.com/mmedum/google-docs-mcp/.github/workflows/release.yml@refs/tags/v3.0.0 |
| Rekor log index | 3422361704 |
| Predicate type | SLSA build provenance https://slsa.dev/provenance/v1 |
| Subject digest | sha256:8621433c5e6122e1a8ce7041adf1499a782ea983d3d89bd444171cf9ea70fe86 |
Background: How many MCP packages publish verified provenance →
The tools this component advertises to a client, with an estimated token cost for each. Expand a tool to see its parameters and schema. The per-tool counts are indicative and are not scored directly; the schema's total context footprint is one signal in Schema Quality & AI Usability. A tool's description is untrusted text the model reads on every call, which is what makes this list a security surface and not just an inventory: how tool poisoning works →
add_comment ~275
Post a comment on a Google Doc. With a target (exact text, heading_id, handle or cell) the comment is pinned to that passage; if Google refuses the comments view for the document it quotes the text instead and the editor shows it unanchored, which the result says. Without a target it is a comment on the document as a whole. Nothing in the document text changes. To propose an edit as a comment, use edit_document with mode comment. On a Markdown file (.md) the comment is written into the file under the signed-in account's name, the way the Docs editor writes its own, and needs a target. dry_run resolves the target and stops before posting.
| Name | Type | Req | Description |
|---|---|---|---|
| assignee | string | – | email address to assign the comment to (pinned comments only) |
| content | string | yes | the comment text (plain text, up to 2048 bytes) |
| document | string | yes | document id, or any docs.google.com URL or drive.google.com file URL |
| dry_run | boolean | – | resolve the target and stop before posting |
| expect_revision | string | – | fail if the document is no longer at this revision id |
| target | null|object | – | the text, section, block or cell to comment on; omit for a comment on the document as a whole |
| Name | Type | Req | Description |
|---|---|---|---|
| anchored | boolean | yes | – |
| dry_run | boolean | – | – |
| handle | string | – | – |
| id | string | yes | – |
| quote | string | – | – |
| revision_id | string | yes | – |
| warnings | null|array | – | – |
No examples provided.
create_document ~250
Create a new Google Doc in the signed-in account's Drive, optionally with initial content written as markdown (headings, formatting, lists, tables, images). Returns the id and URL. Initial content is written directly because a new document has nothing to suggest against. With kind markdown_file it makes a Markdown file (.md) instead, holding the content as written; such a file is edited as text. With from_file it makes a working copy of a Markdown file: a Google Doc holding its text, for working in together live with every write mode, which write_markdown_file writes back into the file.
| Name | Type | Req | Description |
|---|---|---|---|
| content | string | – | initial content as markdown, tables and images included |
| content_format | string | – | markdown (default) or text |
| from_file | string | – | a Markdown file (id or drive.google.com URL) to make a working copy of: a Google Doc holding its text; title then defaults to the file's |
| kind | string | – | document (default: a Google Doc) or markdown_file (a .md file in Drive that Docs opens in place, holding content exactly as given) |
| title | string | – | document title; required unless from_file |
| Name | Type | Req | Description |
|---|---|---|---|
| id | string | yes | – |
| kind | string | yes | – |
| revision_id | string | yes | – |
| title | string | yes | – |
| url | string | yes | – |
| warnings | null|array | – | – |
No examples provided.
diff_revisions ~179
Show what changed between two revisions of a Google Doc as a unified diff of Google's markdown (or plain text) export, with line counts per hunk. Pass from (older) and optionally to (newer, default current). Use list_revisions to pick ids.
| Name | Type | Req | Description |
|---|---|---|---|
| context | integer | – | unchanged lines shown around each change; default 2 |
| document | string | yes | document id, or any docs.google.com URL or drive.google.com file URL |
| format | string | – | md (default) or txt: which export to compare |
| from | string | yes | the older revision id from list_revisions |
| max_chars | integer | – | output budget in characters, cut at a hunk boundary; default 20000 |
| to | string | – | the newer revision id from list_revisions; default the current content |
No output schema declared.
No examples provided.
edit_document ~658
Change the text of a Google Doc with one batch of operations. Address content by exact text (quoted from a read), by heading_id or heading (a whole section), by block handle, or by cell; never by position numbers. Ops: insert (at a location), append (end of body), replace (minimal diff, so untouched words keep their formatting and comments), delete, replace_all (find/replace in one tab, by text or regex), insert_break (page break), insert_footnote, create_header, create_footer, delete_header, delete_footer (target: tab and segment), and the named-range ops: create_named_range names a target so later calls can find it again after edits move it, where a handle is only valid for the revision it came from; replace_named_range writes plain text over it; delete_named_range forgets the name and leaves the text. Content is markdown. A table or image in it is placed by later batches once the text has landed, so a failure there leaves the text written and says so. mode chooses how the change lands: suggest = tracked change for a person to accept, direct = edit the text, comment = post each proposed change as a comment and change nothing. Direct edits refuse to delete ranges holding comments, suggestions, images or footnotes unless force is set. Use dry_run to preview the plan. Returns the new revision id, suggestion or comment ids, and a rendered preview of the edited region. On a Markdown file (.md) the ops are insert, append, replace, delete and replace_all, content is written as the file's own markdown, mode is direct or comment (no suggestions), the comments Docs keeps in the file are never touched, and the whole file is uploaded once per call, which makes an editor that has it open reload; the write waits for, then refuses, changes made there and not saved yet. To work in one together live, use a working copy (create_document from_file). On a Word file (.docx) the same ops write its body's text into the file, addressed as on a Google Doc, a suggestion as a tracked chang…
| Name | Type | Req | Description |
|---|---|---|---|
| document | string | yes | document id, or any docs.google.com URL or drive.google.com file URL |
| dry_run | boolean | – | resolve and plan everything, show the exact requests and the current text of the region, but send nothing |
| expect_revision | string | – | fail if the document is no longer at this revision id |
| force | boolean | – | direct mode only: allow deleting ranges that hold comment anchors, pending suggestions, images or footnotes; ask the person first |
| mode | string | – | suggest (tracked changes a person accepts), direct (edit the text), or comment (post each change as a comment on the passage, changing nothing); default from get_document capabilities |
| ops | null|array | yes | operations sent together in one batch; the content of a new header, footer or footnote and the tables and images of content follow in later batches. Targets are resolved against the document as it is… |
| Name | Type | Req | Description |
|---|---|---|---|
| changes | null|array | yes | – |
| comment_ids | null|array | – | – |
| dry_run | boolean | yes | – |
| followups | null|array | – | – |
| mode | string | yes | – |
| ops_applied | integer | yes | – |
| preview | string | – | – |
| request_kinds | null|array | – | – |
| revision_id | string | yes | – |
| suggestion_ids | null|array | – | – |
| warnings | null|array | – | – |
No examples provided.
edit_table ~346
Create and change tables in a Google Doc. Ops: insert_table (rows, columns, optional data grid, at a location), set_cells (write cells by name or as a grid from start_cell; each cell is replaced by minimal diff), insert_rows, delete_rows, insert_columns, delete_columns, merge_cells, unmerge_cells, style_cells (background, vertical alignment, padding), style_columns (fixed width in points, or share the width evenly), style_rows (least height, keep a row off a page break), pin_header_rows (repeat the first n rows on every page). Tables are named by handle (tbl1) from a read with with_handles; cells as r2c3. Text inside cells can also be edited with edit_document (target cell) and styled with format_document. Same mode, dry_run, expect_revision and force semantics as edit_document; deleting rows or columns that hold comments or suggestions is refused in direct mode unless forced.
| Name | Type | Req | Description |
|---|---|---|---|
| document | string | yes | document id, or any docs.google.com URL or drive.google.com file URL |
| dry_run | boolean | – | – |
| expect_revision | string | – | – |
| force | boolean | – | direct mode only: allow deleting rows or columns that hold comments, suggestions, images or footnotes |
| mode | string | – | suggest, direct or comment; default from get_document capabilities |
| ops | null|array | yes | operations applied in order; after an op changes a table's grid (rows, columns, merges) the ops that follow it on that table are applied in a batch of their own, so their row, column and cell numbers… |
| Name | Type | Req | Description |
|---|---|---|---|
| changes | null|array | yes | – |
| comment_ids | null|array | – | – |
| dry_run | boolean | yes | – |
| followups | null|array | – | – |
| mode | string | yes | – |
| ops_applied | integer | yes | – |
| preview | string | – | – |
| request_kinds | null|array | – | – |
| revision_id | string | yes | – |
| suggestion_ids | null|array | – | – |
| warnings | null|array | – | – |
No examples provided.
export_document ~169
Export a Google Doc through Google's converters. md, txt and html come back inline (budgeted by max_chars); pdf, docx, odt, rtf and epub are written as new files under the server's export directory, never over a file already there, and the path is returned. The markdown export is Google's own rendering, useful for a faithful whole-document dump; read_document is better for working with sections.
| Name | Type | Req | Description |
|---|---|---|---|
| document | string | yes | document id, or any docs.google.com URL or drive.google.com file URL |
| format | string | yes | md, txt or html (returned inline); pdf, docx, odt, rtf or epub (written under GDOCS_EXPORT_DIR) |
| max_chars | integer | – | inline formats: character budget, default 20000 |
No output schema declared.
No examples provided.
find_in_document ~206
Find text or a regular expression in a Google Doc and return every match with its block handle, offset and surrounding context. Use it to locate passages before targeting them with edit_document (quote the matched text as the target) and to check how many times a phrase occurs.
| Name | Type | Req | Description |
|---|---|---|---|
| context | integer | – | characters of context on each side; default 60 |
| document | string | yes | document id, or any docs.google.com URL or drive.google.com file URL |
| limit | integer | – | maximum matches to return; default 50 |
| match_case | boolean | – | match case exactly; default case-insensitive |
| query | string | yes | text to find (normalized exact match) or a regular expression when regex is true |
| regex | boolean | – | treat query as an RE2 regular expression |
| segment | string | – | body (default), header, footer or footnote |
| tab | string | – | tab id, title or number; default the first tab |
No output schema declared.
No examples provided.
format_document ~209
Change formatting in a Google Doc without changing its text: text_style (bold, italic, underline, strikethrough, small caps, font, size, color, highlight, link, superscript), paragraph_style (named style such as HEADING_2 or NORMAL_TEXT, alignment, line spacing, spacing, indents), bullets (bullet, numbered, checkbox, or none), and clear_formatting. Targets work as in edit_document. This styles the passages you target: to restyle every paragraph carrying a style at once, and everything written with it later, redefine the style itself with layout_document's named_style op. Same mode, dry_run and expect_revision semantics.
| Name | Type | Req | Description |
|---|---|---|---|
| document | string | yes | document id, or any docs.google.com URL or drive.google.com file URL |
| dry_run | boolean | – | – |
| expect_revision | string | – | – |
| mode | string | – | suggest, direct or comment; default from get_document capabilities |
| ops | null|array | yes | – |
| Name | Type | Req | Description |
|---|---|---|---|
| changes | null|array | yes | – |
| comment_ids | null|array | – | – |
| dry_run | boolean | yes | – |
| followups | null|array | – | – |
| mode | string | yes | – |
| ops_applied | integer | yes | – |
| preview | string | – | – |
| request_kinds | null|array | – | – |
| revision_id | string | yes | – |
| suggestion_ids | null|array | – | – |
| warnings | null|array | – | – |
No examples provided.
get_document ~236
Get metadata and structure counts for a Google Doc: title, tabs, the current revision id, owner, last modification, paragraph and word counts, pending suggestion count, and this server's capabilities (whether suggestion mode is available, the default write mode, read-only). Per tab it also reports what no read of the text shows: page setup, floating images, named ranges, and the named style definitions the tab's paragraphs carry (the font, size, color and spacing every heading or body paragraph inherits, with how many paragraphs of that tab carry each, headers and footnotes included; layout_document's named_style op redefines those definitions). kind says whether it is a Google Doc, a Markdown file (.md) that Docs opens in place, which is read and written as its own text, or a Word file (.docx), read like a Google Doc and written into the file itself. Cheap; call it first when handed a document id or URL. Then use get_outline for the heading tree and read_document for content.
| Name | Type | Req | Description |
|---|---|---|---|
| document | string | yes | document id, or any docs.google.com URL or drive.google.com file URL |
No output schema declared.
No examples provided.
get_outline ~137
Return the heading tree of a Google Doc per tab: each heading's stable heading_id, block handle, level, text, and the size of its section in blocks and words, plus per-tab counts of paragraphs, tables, headers, footers and footnotes. Use it to pick a section to read with read_document (pass heading_id) instead of reading a long document whole, and to learn block handles. Cheap.
| Name | Type | Req | Description |
|---|---|---|---|
| document | string | yes | document id, or any docs.google.com URL or drive.google.com file URL |
| tab | string | – | tab id, title or number to limit the outline to; default all tabs |
No output schema declared.
No examples provided.
insert_object ~683
Insert, replace or delete a non-text object in a Google Doc. action insert (default) adds an image from a public URL (optionally sized in points), a person chip (email), a rich-link chip to a Google resource (Drive file, Calendar event, YouTube video), or a date chip at a location; objects go inline in a paragraph, so use edit_document for the surrounding text. action replace swaps an existing image's source while it keeps its place and size (crop center-crops the new image instead of resizing the frame). action delete removes an object, including a floating image, which no text range covers and no edit_document delete can reach. Both name the object by the id a read shows, like kix.img1. Same mode, dry_run, expect_revision and force semantics as edit_document; deleting an inline object that also carries a comment or a suggestion is refused in direct mode unless forced. Suggestion mode tracks the insertion.
| Name | Type | Req | Description |
|---|---|---|---|
| action | string | – | insert (default), replace to swap an image's source in place, or delete to remove an object |
| crop | boolean | – | replace: center-crop the new image into the old one's frame instead of resizing the frame to it |
| date | string | – | date: the date as YYYY-MM-DD or an RFC 3339 timestamp |
| date_format | string | – | date: iso (2026-09-03), full (September 3, 2026), abbreviated (Sep 3, 2026, default), or month_day (Sep 3) |
| document | string | yes | document id, or any docs.google.com URL or drive.google.com file URL |
| dry_run | boolean | – | – |
| string | – | person: the email address of the person chip | |
| expect_revision | string | – | – |
| force | boolean | – | delete in direct mode: remove an inline object even though a comment or suggestion sits on it; ask the person first |
| height_pt | number | – | image: height in points |
| kind | string | – | insert: image, person, rich_link, or date |
| location | object | – | insert: where the object goes — after or before a block, start or end of a paragraph, or end of the body |
| mode | string | – | suggest, direct or comment; default from get_document capabilities |
| name | string | – | person: display name shown on the chip |
| object | string | – | replace and delete: the object's id as a read shows it, e.g. kix.img1 |
| tab | string | – | replace and delete: tab id, title or number; default the first tab |
| time_zone | string | – | date: IANA time zone id such as Europe/Copenhagen; default UTC |
| title | string | – | rich_link: display title (Google fills it from the resource when omitted) |
| url | string | – | image: a publicly fetchable PNG, JPEG or GIF URL (under 50 MB, 25 megapixels); rich_link: the URL of a Google Drive file, Calendar event or YouTube video |
| width_pt | number | – | image: width in points; with only one dimension the aspect ratio is kept |
| with_time | boolean | – | date: also show the time |
| Name | Type | Req | Description |
|---|---|---|---|
| changes | null|array | yes | – |
| comment_ids | null|array | – | – |
| dry_run | boolean | yes | – |
| followups | null|array | – | – |
| mode | string | yes | – |
| ops_applied | integer | yes | – |
| preview | string | – | – |
| request_kinds | null|array | – | – |
| revision_id | string | yes | – |
| suggestion_ids | null|array | – | – |
| warnings | null|array | – | – |
No examples provided.
layout_document ~293
Change how a Google Doc is laid out rather than what it says. Ops: page (page size, margins, background color, landscape, where page numbering starts, whether the first and even pages get their own header and footer, pageless), section (the same for one section, plus 1-3 columns with an optional separating line and the gap between them), section_break (start a new section at a location, continuous or on the next page), and named_style (redefine NORMAL_TEXT, TITLE, SUBTITLE or HEADING_1 … HEADING_6 for the whole tab, which restyles every paragraph carrying that style and everything written with it later; get_document reports the definition of each style the tab's paragraphs currently carry, so read it first to see what one looks like today). Lengths are in points: 72 to the inch, so US Letter is 612×792 and A4 is 595×842. Use format_document instead to style one passage. Same mode, dry_run and expect_revision semantics as edit_document.
| Name | Type | Req | Description |
|---|---|---|---|
| document | string | yes | document id, or any docs.google.com URL or drive.google.com file URL |
| dry_run | boolean | – | – |
| expect_revision | string | – | – |
| mode | string | – | suggest, direct or comment; default from get_document capabilities |
| ops | null|array | yes | operations applied together as one atomic batch |
| Name | Type | Req | Description |
|---|---|---|---|
| changes | null|array | yes | – |
| comment_ids | null|array | – | – |
| dry_run | boolean | yes | – |
| followups | null|array | – | – |
| mode | string | yes | – |
| ops_applied | integer | yes | – |
| preview | string | – | – |
| request_kinds | null|array | – | – |
| revision_id | string | yes | – |
| suggestion_ids | null|array | – | – |
| warnings | null|array | – | – |
No examples provided.
list_comments ~195
List the comment threads of a Google Doc with their full history: author, time, quoted text, the block handle the comment sits on, resolved state, who it is assigned to, and every reply (including resolve and reopen actions). Resolved threads are included unless hide_resolved is set; deleted ones only with include_deleted. Thread ids feed reply_comment and delete_comment. On a Markdown file (.md) the comments made in the Docs editor live in the file, the line they sit on is shown as [L12], and the id of one written by this server changes each time the file is written until a person saves it in the editor.
| Name | Type | Req | Description |
|---|---|---|---|
| document | string | yes | document id, or any docs.google.com URL or drive.google.com file URL |
| hide_resolved | boolean | – | leave out resolved threads; default shows them |
| include_deleted | boolean | – | also list deleted threads (their text is gone) |
No output schema declared.
No examples provided.
list_revisions ~115
List a Google Doc's version history, newest first: revision id, time and who changed it. These ids feed diff_revisions and read_document's revision parameter; they are Drive revision ids, not the revision_id that reads and writes return for concurrency control. Drive may omit older revisions of busy documents.
| Name | Type | Req | Description |
|---|---|---|---|
| document | string | yes | document id, or any docs.google.com URL or drive.google.com file URL |
| limit | integer | – | how many of the newest revisions to return; default 20, max 200 |
No output schema declared.
No examples provided.
list_suggestions ~129
List pending suggested edits (tracked changes) in a Google Doc: id, kind (insert, delete, replace, structure, format), the inserted, deleted and restyled text, the block handle, and, where Google includes them, the author and status, and the replies on its thread. A format suggestion changes only formatting and says what it restyles, as "text: bold" or "paragraph: alignment". Ids feed review_suggestion, and reply_comment with suggestion_id.
| Name | Type | Req | Description |
|---|---|---|---|
| document | string | yes | document id, or any docs.google.com URL or drive.google.com file URL |
No output schema declared.
No examples provided.
manage_tabs ~237
Add, rename or move a tab of a Google Doc. add takes a title, optional position, parent tab, emoji and initial markdown content; rename changes the title or emoji; move changes the position among siblings or nests the tab under a parent. Tab changes are always direct edits (the API cannot suggest them). Other tools address tabs by id, title or number; get_document lists them.
| Name | Type | Req | Description |
|---|---|---|---|
| action | string | yes | add, rename, or move |
| content | string | – | add: initial content as markdown |
| document | string | yes | document id, or any docs.google.com URL or drive.google.com file URL |
| emoji | string | – | add, rename: a single emoji as the tab icon |
| expect_revision | string | – | – |
| parent | string | – | add, move: nest under this tab (id, title or number) |
| position | integer | – | add, move: 1-based position among its sibling tabs |
| tab | string | – | rename, move: the tab to change, by id, title or number |
| title | string | – | add, rename: the tab title |
| Name | Type | Req | Description |
|---|---|---|---|
| action | string | yes | – |
| dry_run | boolean | – | – |
| revision_id | string | yes | – |
| tab_id | string | – | – |
| title | string | – | – |
| warnings | null|array | – | – |
No examples provided.
read_document ~748
Read part or all of a Google Doc as markdown (default), plain text, or raw Docs API JSON. Scope it to one section with heading_id (from get_outline) or heading text, to a block range with from_handle/to_handle, to another tab with tab, or to a header, footer or footnote with segment; with no scope it reads the whole body of the first tab. Output is budgeted by max_chars (default 20000 characters); when truncated the result carries continue_from to pass back. Block handles ([p12]) and heading ids come with the text unless with_handles is false; with_styles adds formatting markdown cannot show, include_suggestions shows pending suggested edits inline as {++inserted++} / {--deleted--}, with a formatting-only suggestion as {==highlighted==} because it adds and removes nothing, and include_comments marks commented passages with {>>c:id<<} and lists those threads below. Empty paragraphs are kept so structure is faithful. Handles are valid for the revision_id returned. A Markdown file (.md) reads as its own text, without handles: scope it by heading_id or heading, and a truncated read continues from a line (continue_from L120).
| Name | Type | Req | Description |
|---|---|---|---|
| continue_from | string | – | the continue_from handle returned by a truncated read; resumes there |
| document | string | yes | document id, or any docs.google.com URL or drive.google.com file URL |
| format | string | – | markdown (default), text, or raw (Docs API JSON for the scoped blocks) |
| from_handle | string | – | first block handle of a range, e.g. p12 (from get_outline or a read with with_handles) |
| heading | string | – | read one section by its heading text (whole heading, case-insensitive) |
| heading_id | string | – | read one section by its stable heading id from get_outline; overrides tab and segment |
| heading_level | integer | – | only match headings of this level (1-6) when using heading |
| include_comments | boolean | – | mark commented passages with {>>c:<comment id><<} right after the text they cover and list those threads below the content |
| include_suggestions | boolean | – | show pending suggested edits as CriticMarkup: {++inserted++}, {--deleted--} and {==restyled==} for a formatting-only suggestion, each followed by {>>s:<suggestion id><<}; default shows the committed… |
| max_chars | integer | – | output budget in characters, cut at a block boundary; default 20000, maximum 400000 |
| occurrence | integer | – | which match to use when the heading text repeats, 1-based |
| revision | string | – | read an old revision by its id from list_revisions: Google's markdown or text export of the whole document at that time, with no handles or scoping |
| segment | string | – | body (default), header, footer or footnote, optionally numbered (header2, footnote3) |
| tab | string | – | tab id, title or number; default the first tab |
| to_handle | string | – | last block handle of the range, inclusive |
| with_handles | null|boolean | – | prefix every block with its handle like [p12] and headings with {heading_id}; on by default because handles are what an edit targets; pass false to save about 15% of the tokens |
| with_styles | boolean | – | annotate fonts, sizes, colors, underline and alignment that markdown cannot express, e.g. {font: Arial 11pt, color: #c00} |
No output schema declared.
No examples provided.
reply_comment ~271
Reply to a comment thread, resolve it, reopen it, or rewrite what it says. Resolving and reopening are reversible; both may carry a message. action edit replaces the text of the thread's own comment, or of one reply when reply_id names it; Google allows only the author of a comment to rewrite it. Thread and reply ids come from list_comments. With suggestion_id instead of comment_id it replies on a suggested edit's thread; accepting or rejecting one is review_suggestion. On a Markdown file (.md) a comment the Docs editor keeps takes replies only, written into the file; the person resolves it in the editor.
| Name | Type | Req | Description |
|---|---|---|---|
| action | string | – | reply (default), resolve, reopen, or edit |
| comment_id | string | – | thread id from list_comments or add_comment; pass this or suggestion_id |
| content | string | – | reply text; required for a plain reply and for edit, optional with resolve or reopen |
| document | string | yes | document id, or any docs.google.com URL or drive.google.com file URL |
| reply_id | string | – | edit: the reply to rewrite; without it the thread's own comment is rewritten |
| suggestion_id | string | – | reply on a suggestion's thread instead; id from list_suggestions. Plain replies only |
| Name | Type | Req | Description |
|---|---|---|---|
| action | string | yes | – |
| comment_id | string | yes | – |
| reply_id | string | yes | – |
| resolved | boolean | yes | – |
| suggestion_id | string | – | – |
No examples provided.
review_suggestion ~169
Accept, reject or discard pending suggested edits, each named by its id from list_suggestions. Accepting applies the suggested text; rejecting declines it, which any editor may do; discarding removes the suggestion outright, which Google allows only its author. Pass expect_revision to refuse if the document changed since the list was read. dry_run resolves the suggestions and stops before the write.
| Name | Type | Req | Description |
|---|---|---|---|
| action | string | yes | accept, reject, or discard (author only) |
| document | string | yes | document id, or any docs.google.com URL or drive.google.com file URL |
| dry_run | boolean | – | resolve the suggestions and stop before the write |
| expect_revision | string | – | – |
| ids | null|array | yes | the suggestions to review, each by its id from list_suggestions |
| Name | Type | Req | Description |
|---|---|---|---|
| action | string | yes | – |
| dry_run | boolean | – | – |
| ids | null|array | yes | – |
| remaining | integer | yes | – |
| revision_id | string | yes | – |
No examples provided.
search_documents ~193
Locate Google Docs the signed-in account can open, by words in the title or the text, optionally limited by owner or modification date, newest first. Returns ids and URLs to pass to the other tools. With no filters it lists recently modified documents. Markdown files (.md) are found with kind markdown_file or any.
| Name | Type | Req | Description |
|---|---|---|---|
| kind | string | – | document (the default: Google Docs), markdown_file (.md files Docs opens in place), or any |
| limit | integer | – | page size, default 20, max 100 |
| modified_after | string | – | only documents modified after this date (YYYY-MM-DD or RFC 3339) |
| owner | string | – | owner email address |
| page_token | string | – | next_page_token from a previous result |
| query | string | – | words that must appear in the document text |
| title | string | – | words that must appear in the title |
No output schema declared.
No examples provided.
write_markdown_file ~255
Write a working copy back into the Markdown file it was made from (create_document from_file makes one). Only what changed in the copy is carried over, block by block; the rest of the file keeps its own Markdown, its front matter and the comments Docs keeps in it. A change to a block that was also changed in the file since the copy was made is a conflict and is refused, unless force keeps the file's version of those and writes the rest. edit_document's guard applies, and a write waits for, then refuses, changes made in the Docs editor on the file and not saved yet, forced or not: that work is in no revision yet. dry_run shows the diff.
| Name | Type | Req | Description |
|---|---|---|---|
| document | string | yes | the working copy: the Google Doc create_document from_file made |
| dry_run | boolean | – | plan and show the diff, write nothing |
| file | string | – | the Markdown file to write into, when it is not the one the copy was made from |
| force | boolean | – | write past conflicts (the file's version of those blocks is kept) and the guard; only when the person chose to. Changes in the Docs editor not saved yet are never written past |
| Name | Type | Req | Description |
|---|---|---|---|
| changes | null|array | yes | – |
| comment_ids | null|array | – | – |
| dry_run | boolean | yes | – |
| followups | null|array | – | – |
| mode | string | yes | – |
| ops_applied | integer | yes | – |
| preview | string | – | – |
| request_kinds | null|array | – | – |
| revision_id | string | yes | – |
| suggestion_ids | null|array | – | – |
| warnings | null|array | – | – |
No examples provided.
How do I install the io.github.mmedum/google-docs-mcp server?
io.github.mmedum/google-docs-mcp ships as an MCPB bundle, a single file you download and open in an MCP host that supports MCPB bundles, such as Claude Desktop. The host reads the launch command from the bundle's own manifest, so there is no command to copy. Before opening it, check the file's SHA-256 matches the one the MCP registry declares for it, 8621433c5e6122e1a8ce7041adf1499a782ea983d3d89bd444171cf9ea70fe86; the commands to do that are on this page. If it does not match, do not open it.
mcpb · google-docs-mcp_3.0.0.mcpb
Download bundleCheck the download matches the SHA-256 the MCP registry declares before you open it. If it does not match, do not open the file.
SHA-256
8621433c5e6122e1a8ce7041adf1499a782ea983d3d89bd444171cf9ea70fe86
macOS / Linux
echo "8621433c5e6122e1a8ce7041adf1499a782ea983d3d89bd444171cf9ea70fe86 google-docs-mcp_3.0.0.mcpb" | shasum -a 256 -c
Windows (PowerShell)
(Get-FileHash -Algorithm SHA256 .\google-docs-mcp_3.0.0.mcpb).Hash -eq "8621433c5e6122e1a8ce7041adf1499a782ea983d3d89bd444171cf9ea70fe86"
Run it in the folder you saved the bundle to, then open the file with an MCPB-capable host such as Claude Desktop.
What is the io.github.mmedum/google-docs-mcp server?
io.github.mmedum/google-docs-mcp is listed in the public MCP registry as io.github.mmedum/google-docs-mcp. Google Docs as MCP tools: read, edit, suggest and comment on documents. This page covers its MCPB bundle (https://github.com/mmedum/google-docs-mcp/releases/download/v3.0.0/google-docs-mcp_3.0.0.mcpb).
Is the io.github.mmedum/google-docs-mcp server safe to use?
io.github.mmedum/google-docs-mcp scores 57 out of 100 on VerifyMCP. Its build provenance is signed and verified. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.
What tools does the io.github.mmedum/google-docs-mcp server expose?
io.github.mmedum/google-docs-mcp exposes 21 tools: add_comment, create_document, diff_revisions, edit_document, edit_table, and 16 more. Their descriptions and schemas cost roughly 5,953 tokens of context every time the server is loaded.
What licence is the io.github.mmedum/google-docs-mcp server under?
io.github.mmedum/google-docs-mcp declares the Apache-2.0 licence, which is OSI-approved. That covers the source only, and says nothing about the cost of any service it calls.