Back to Browse

Gogcli MCP Server

Developer ToolsLow Risk10.0Local
Free

Google Slides via gogcli for Claude — deck and slide authoring

About

Google Slides via gogcli for Claude — deck and slide authoring

Security Report

10.0
Low Risk10.0Low Risk

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.

file_system

Check that this permission is expected for this type of plugin.

What You'll Need

Set these up before or after installing:

Email address of the Google account to use (matches gogcli auth)Optional

Environment variable: GOG_ACCOUNT

Override path to the gogcli binary (auto-discovered otherwise)Optional

Environment variable: GOG_PATH

How to Install

Add this to your MCP configuration file:

{
  "mcpServers": {
    "io-github-chrischall-gogcli-mcp-slides": {
      "env": {
        "GOG_PATH": "your-gog-path-here",
        "GOG_ACCOUNT": "your-gog-account-here"
      },
      "args": [
        "-y",
        "gogcli-mcp-slides"
      ],
      "command": "npx"
    }
  }
}

Documentation

View on GitHub

From the project's GitHub README.

gogcli-mcp

CI npm coverage: 100% license

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

PackageToolsDescription
gogcli-mcp52All services — Sheets, Docs, Gmail, Calendar, Drive, Tasks, Contacts, Auth
gogcli-mcp-sheets35Auth + full Sheets (base + 22 extra: tabs, formatting, named ranges, etc.)
gogcli-mcp-docs26Auth + 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:

ServiceToolsAsks when
Gmailgog_gmail_send, _reply, _reply_all, _forward, _autoreply, _drafts_sendalways
Chatgog_chat_messages_send, gog_chat_dm_sendalways
Drivegog_drive_sharealways (granting access is the risk; gog sends no share email by default)
Classroomgog_classroom_announcements_createunless state is DRAFT (students cannot see drafts)
Classroomgog_classroom_invitations_createalways
Calendargog_calendar_createonly with attendees (the event lands on their calendars; no invitation email is sent)
Calendargog_calendar_updateonly for a change guests can see, on an event that has or gains guests (reminder-only changes never ask)
Calendargog_calendar_respondalways (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.

  1. Phase 1: the tool is called without confirmToken. Nothing is sent or changed. It returns "status": "confirmation-required", the full preview, a confirmToken, 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.
  2. 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:

errormeaning
DRAFT_CHANGEDwhat 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_EXPIREDolder than the TTL
TOKEN_REUSEDalready used: one approval acts once
TOKEN_INVALIDtampered, issued for a different tool, account or target, or issued before a server restart
variabledefault
GOG_SEND_CONFIRM_FALLBACKunset (off)token enables the two-step flow
GOG_CONFIRM_TTL_SECONDS600token lifetime
GOG_CONFIRM_SECRETrandom per processHMAC 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-input to prevent interactive prompts
  • All arguments are passed as arrays to child_process.spawn — no shell injection risk
  • GOG_ACCESS_TOKEN is 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 ~/.ssh or 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_run cannot 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>_run under each of gog's aliases for it, and by gog_api_call as 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=token replaces 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!