Extended Google Docs for Claude via gogcli — auth + full Docs and comments support
About
Extended Google Docs for Claude via gogcli — auth + full Docs and comments support
Security Report
Valid MCP server (2 strong, 1 medium validity signals). 1 code issue detected. No known CVEs in dependencies. ⚠️ Package registry links to a different repository than scanned source. Imported from the Official MCP Registry. Trust signals: trusted author (69/70 approved). 2 finding(s) downgraded by scanner intelligence.
14 files analyzed · 2 issues found
Security scores are indicators to help you make informed decisions, not guarantees. Always review permissions before connecting any MCP server.
Permissions Required
This plugin requests these system permissions. Most are normal for its category.
What You'll Need
Set these up before or after installing:
Environment variable: GOG_ACCOUNT
Environment variable: GOG_PATH
How to Install
Add this to your MCP configuration file:
{
"mcpServers": {
"io-github-chrischall-gogcli-mcp-docs": {
"env": {
"GOG_PATH": "your-gog-path-here",
"GOG_ACCOUNT": "your-gog-account-here"
},
"args": [
"-y",
"gogcli-mcp-docs"
],
"command": "npx"
}
}
}Documentation
View on GitHubFrom the project's GitHub README.
gogcli-mcp
A monorepo of Model Context Protocol servers that give Claude natural-language access to Google Workspace via gogcli.
[!WARNING] AI-developed project. This codebase was built and is actively maintained by Claude. Review all code and tool permissions before use.
Packages
| Package | Tools | Description |
|---|---|---|
| gogcli-mcp | 52 | All services — Sheets, Docs, Gmail, Calendar, Drive, Tasks, Contacts, Auth |
| gogcli-mcp-sheets | 35 | Auth + full Sheets (base + 22 extra: tabs, formatting, named ranges, etc.) |
| gogcli-mcp-docs | 26 | Auth + full Docs (base + 14 extra: insert, export, sed, comments, etc.) |
Each package is a standalone MCP server. Install whichever one fits your needs — you don't need to install more than one.
Prerequisites
Acknowledgement of Terms
By using this MCP server, you acknowledge and agree to the following:
1. This server accesses your own Google Workspace data via Google's official APIs (Gmail, Calendar, Drive, Sheets, Docs, Contacts). Auth happens via OAuth, with your explicit consent at each scope. It does not — and cannot — access anyone else's Google account or shared content you don't have permission to read.
2. Google's APIs Terms of Service govern your use of this server, in addition to any Google Workspace Acceptable Use Policy your domain admin enforces. The clauses most relevant here:
Google sets and enforces limits on your use of the APIs (e.g. limiting the number of API requests that you may make or the number of users you may serve), in our sole discretion.
And on credentials, which is the most-tripped-on clause for open-source projects:
You will keep your credentials confidential and make reasonable efforts to prevent and discourage other API Clients from using your credentials. Developer credentials may not be embedded in open source projects.
You are agreeing to those terms — read by the maintainer 2026-05-23 — every time you invoke a tool in this server.
3. You must configure your own OAuth client. This MCP does not ship an embedded client_secret.json. You register your own OAuth client at https://console.cloud.google.com/, scope it to your own user/project, and authorize it for the Workspace APIs you want to use. Do not check client_secret.json, credentials.json, or any refresh tokens into git — these are credentials and Google's ToS explicitly prohibits embedding them in OSS.
4. Personal, single-user use only. This project is not affiliated with, endorsed by, sponsored by, or in partnership with Google LLC. It is a personal automation tool for one Google account holder to read and write their own Workspace content. Do not use it to bulk-extract Workspace data from your org, automate against other users' accounts, or build a multi-tenant SaaS on top of it. If you want to do those things, you need a verified app, a domain-wide-delegation service account, and a Workspace admin's blessing — none of which this MCP provides.
5. Your domain admin's policy may add restrictions. If you're using a corporate Google Workspace account, your admin may restrict third-party OAuth apps, prohibit data exfiltration, or require app verification. Check with your IT admin before authorizing this MCP against a corporate domain.
6. You accept full responsibility for any consequences of using this server in connection with your Google account — quota exhaustion (Gmail and Drive APIs have aggressive per-user quotas), token revocation, account warnings, your domain admin emailing you, or any enforcement action. If Google or your domain admin objects to your use, stop using this server.
This section is the maintainer's good-faith summary of the terms — it is not legal advice and does not modify or supersede Google's actual APIs ToS or your domain's policies.
Install gogcli
gogcli is the CLI that these MCP servers wrap. Install it for your platform:
macOS (Homebrew):
brew install steipete/tap/gogcli
macOS / Linux (binary):
curl -fsSL https://github.com/openclaw/gogcli/releases/latest/download/gog-$(uname -s | tr '[:upper:]' '[:lower:]')-$(uname -m | sed 's/x86_64/amd64/;s/aarch64/arm64/') -o /usr/local/bin/gog
chmod +x /usr/local/bin/gog
Windows (Scoop):
scoop bucket add steipete https://github.com/steipete/scoop-bucket
scoop install gogcli
Windows (manual):
Download gog-windows-amd64.exe from the latest release, rename to gog.exe, and add to your PATH.
Authenticate
gog auth add your@gmail.com
This opens a browser for Google OAuth. For specific services only:
gog auth add your@gmail.com --services sheets,docs,drive
Install Node.js
Node.js 22 or later is required. Install via nodejs.org or:
brew install node # macOS
Quick Start
# Install the package you want
npm install -g gogcli-mcp # base
npm install -g gogcli-mcp-sheets # extended sheets
npm install -g gogcli-mcp-docs # extended docs
Claude Desktop
Add to ~/Library/Application Support/Claude/claude_desktop_config.json:
{
"mcpServers": {
"gogcli": {
"command": "gogcli-mcp",
"env": {
"GOG_ACCOUNT": "you@gmail.com"
}
}
}
}
Replace gogcli-mcp with gogcli-mcp-sheets or gogcli-mcp-docs for extended packages.
Claude Code
claude mcp add gogcli -- gogcli-mcp
What you can do
Ask Claude things like:
- "Read the data in Sheet1!A1:D20 of my budget spreadsheet"
- "Append this week's expenses to my tracking sheet"
- "Search my Gmail for invoices from last month"
- "Create a calendar event for tomorrow at 3pm"
- "List comments on my project doc"
- "Export my doc as a PDF"
Multiple Accounts
All tools accept an optional account parameter:
Read Sheet1!A1:D10 from spreadsheet abc123 using my work account work@company.com
Local files
Tools that read or write files on the machine gog runs on (attach, localPath, file, out, export and
download paths) only accept paths inside the directories listed in GOG_FILE_ROOTS — a :-separated list
(; on Windows). Unset, it defaults to ~/gogcli-mcp-files: put files you want to attach or upload there, and
point exports and downloads there. Widen it deliberately (for example to your home directory) if you need to:
"env": { "GOG_ACCOUNT": "you@gmail.com", "GOG_FILE_ROOTS": "/Users/you/Documents:/Users/you/Downloads" }
attachInline / content carry file bytes with the request and are not affected.
The escape hatches are bound by the same roots: a path flag passed through gog_<service>_run (--out,
--out-dir, --attach, --file, any --*-file, an @file JSON input) must be inside GOG_FILE_ROOTS, and
gog_api_call's @file body likewise. Subcommands that take a local path positionally (drive upload,
drive sync, gmail import, appscript pull, slides add-slide / insert-image / replace-slide) are refused
there — use their dedicated tools.
Confirmation prompts, and clients without them
Tools that reach another person ask the user to confirm a preview first, through an MCP elicitation prompt:
| Service | Tools | Asks when |
|---|---|---|
| Gmail | gog_gmail_send, _reply, _reply_all, _forward, _autoreply, _drafts_send | always |
| Chat | gog_chat_messages_send, gog_chat_dm_send | always |
| Drive | gog_drive_share | always (granting access is the risk; gog sends no share email by default) |
| Classroom | gog_classroom_announcements_create | unless state is DRAFT (students cannot see drafts) |
| Classroom | gog_classroom_invitations_create | always |
| Calendar | gog_calendar_create | only with attendees (the event lands on their calendars; no invitation email is sent) |
| Calendar | gog_calendar_update | only for a change guests can see, on an event that has or gains guests (reminder-only changes never ask) |
| Calendar | gog_calendar_respond | always (the organizer sees it) |
A Gmail forwarding filter (gog_gmail_filters_create with forward) asks too, but never takes the fallback below.
Some clients, claude.ai chat among them, cannot show the prompt, and by default these tools refuse there
("reason": "confirmation-unsupported"). To use them from such a client, opt in to a two-step fallback:
"env": { "GOG_ACCOUNT": "you@gmail.com", "GOG_SEND_CONFIRM_FALLBACK": "token" }
It applies only when the client declares no elicitation support; a client that can prompt keeps the prompt.
- Phase 1: the tool is called without
confirmToken. Nothing is sent or changed. It returns"status": "confirmation-required", the full preview, aconfirmToken, and the instruction to show the preview to the user verbatim and go ahead only after they approve in chat. For mail the preview has from, to, cc, bcc, subject, the complete body, attachment names and sizes, threadId and In-Reply-To (a draft also shows its draftId and messageId). A share names the file, grantee and role. An announcement or invitation names the class. A calendar change shows the event as it stands and what changes. - Phase 2: the tool is called again with the same arguments plus
confirmToken. It re-reads the draft, message, file, course or event, and acts only if that still matches what the token was issued for.
A token is an HMAC-SHA256 over the tool, account, target, the target's version (a draft's messageId, an event's etag) and a SHA-256 of the payload. For mail the payload is the recipients, subject, text and HTML body, attachment names and sizes (plus a content hash for files you pass in), and In-Reply-To/References. The token is single-use and expires after 10 minutes. Anything else sends nothing and returns an error:
| error | meaning |
|---|---|
DRAFT_CHANGED | what would happen changed: a draft was edited or re-saved (its messageId rotated, which mail clients such as Apple Mail do on every save), an event was edited elsewhere (its etag rotated), or the payload differs. The result carries the new preview and a fresh token for the user to re-approve. |
TOKEN_EXPIRED | older than the TTL |
TOKEN_REUSED | already used: one approval acts once |
TOKEN_INVALID | tampered, issued for a different tool, account or target, or issued before a server restart |
| variable | default | |
|---|---|---|
GOG_SEND_CONFIRM_FALLBACK | unset (off) | token enables the two-step flow |
GOG_CONFIRM_TTL_SECONDS | 600 | token lifetime |
GOG_CONFIRM_SECRET | random per process | HMAC key; set it only if tokens must survive a server restart. Used tokens are remembered in memory, per process, so with a fixed secret a token that was already used is accepted again after a restart (or by another instance with the same secret) until it expires. Leave it unset unless you need that. |
What this does not do. With elicitation, the host asks the user and the model never sees the approval. With the fallback, the approval is a tool argument, so the check that the user really approved is the model following the instruction. The token makes sure what happens is exactly what was previewed, and that it happens once, for that one tool, account and target. It cannot prove a human said yes. That is why the fallback is opt-in.
Development
npm install # install all workspace dependencies
npm run build # build all packages
npm test # test all packages (267 tests, 100% coverage)
npm run typecheck # typecheck all packages
Security
- No credentials are stored or passed by these servers — authentication is handled by gogcli's keyring
- All gogcli invocations use
--no-inputto prevent interactive prompts - All arguments are passed as arrays to
child_process.spawn— no shell injection risk GOG_ACCESS_TOKENis stripped from the child process environment to prevent stale token auth- Server-side paths are confined to
GOG_FILE_ROOTS(resolved through symlinks), in the structured tools and the escape hatches alike, so a prompt-injected agent cannot attach~/.sshor gog's own credentials to an email, or write attachment bytes over~/.zshrc; escape-hatch flags that make gog run a local command (--on-change,--on-new,--mmdc) are refused - Escape-hatch tools (
gog_<service>_run,gog_api_call) refuse args that would override safety flags (--readonly=false,--disable-commands=,--account, a bare--, …);gog_auth_runcannot export tokens - The escape hatches cannot skip a confirmation: every action a dedicated tool asks about (a Gmail send, a Chat post, a Drive share, a Classroom announcement or invitation, a Calendar create/update/respond) is refused by
gog_<service>_rununder each of gog's aliases for it, and bygog_api_callas the raw API method - Every tool that reaches another person asks the user to confirm a preview first: every Gmail send path and a forwarding filter, Chat posts and DMs, Drive shares, published Classroom announcements and invitations, and Calendar changes that guests will see. On a client without elicitation, the opt-in
GOG_SEND_CONFIRM_FALLBACK=tokenreplaces that prompt with a two-step preview and a single-use token (details). A forwarding filter never takes that path - Attachment downloads land in a private per-user temp directory (mode 0700) and are deleted after delivery or swept after 24 hours
License
MIT
Reviews
No reviews yet
Be the first to review this server!
More Developer Tools MCP Servers
Git
Freeby Modelcontextprotocol · Developer Tools
Read, search, and manipulate Git repositories programmatically
Fetch
Freeby Modelcontextprotocol · Developer Tools
Web content fetching and conversion for efficient LLM usage
Paperclip
Freeby Paperclipai · Developer Tools
Trending hip-hop artist momentum scores across four cultural dimensions.
Toleno
Freeby Toleno · Developer Tools
Toleno Network MCP Server — Manage your Toleno mining account with Claude AI using natural language.
mcp-creator-python
Freeby mcp-marketplace · Developer Tools
Create, build, and publish Python MCP servers to PyPI — conversationally.
MCP Marketplace
Freeby mcp-marketplace · Developer Tools
Search and install MCP servers from inside your AI client.