---
title: Google Workspace MCP (Docs read/edit, Sheets, Drive for Claude CLI)
---

# Google Workspace MCP (Docs read/edit, Sheets, Drive for Claude CLI)

> **RETIRED FROM COMPOSITION (2026-09-19).** No AMC-built MCP server is composed into a session's `.mcp.json` any more, so this server no longer reaches sessions and its **Enable Google Workspace Tools** toggle is gone from Settings. The server source and its entry builder stay in the tree, unwired — restoring it is a revert. Google access is unaffected: it runs through the gws/gog CLI backend and the composed `google-drive` MCP server. The rest of this page is the tool reference for the day it returns.

## What it is

An MCP server that gives Claude CLI sessions direct access to Google Docs, Sheets, and Drive — 19 tools total. Unlike Omniscio's built-in Google integrations (which work through Omniscio's AI service loop), this server runs as a subprocess alongside the Claude CLI, so the agent can read, search, and edit Google Workspace documents mid-session without Omniscio mediating each call.

The primary use case is document workflows: searching for SOPs by name, reading their full contents, making batch edits (e.g. find-and-replace across sections), and working with spreadsheets — all from within a regular Claude Code session.

## Where to find it

### How to enable it

1. **Connect Google** (if not already). Settings → Google → Connect Google. One OAuth consent covers Gmail, Calendar, Drive, Sheets, and Docs.
2. **Enable the toggle.** _(Retired 2026-09-19 — the toggle no longer exists.)_ It used to register the `google-workspace` server in every new session's curated `.mcp.json` — a **private per-session file under Omniscio's data dir, never your project folder** (so it could not collide with or shadow a `google-workspace` server you wired into your own `~/.claude.json`).
3. **GCP prerequisite.** The Google Cloud project behind Omniscio's OAuth credentials must have the **Google Docs API** and **Google Sheets API** enabled. Drive API is already on. Without the Docs/Sheets APIs enabled, search and list operations work but read/edit operations return an API-not-enabled error. This is a one-time toggle in the GCP Console.

### What the user sees

When you ask the agent something like "find the SOP about uploading listings and show me what's in it," the agent:

1. Calls `search_documents` behind the scenes (tool call collapses in the chat)
2. Finds matching documents with title, owner, doc ID, and last-modified date
3. Calls `read_document` to pull up the full contents
4. Presents the document text in clean markdown in the session chat

The user doesn't see raw API calls — just the formatted results. MCP tool invocations appear as collapsible activity blocks in the session transcript (same as any other Claude Code tool call like `Read`, `Grep`, or `Bash`).

## How it behaves

### Available tools (19)

| Category          | Tool                     | Description                                              |
| ----------------- | ------------------------ | -------------------------------------------------------- |
| **Auth**          | `authenticate`           | Authenticate with Google Workspace                       |
|                   | `check_auth_status`      | Check current auth status                                |
| **Docs — read**   | `read_document`          | Read a full Google Doc                                   |
|                   | `read_document_section`  | Read a specific section                                  |
|                   | `list_document_tabs`     | List tabs in a document                                  |
|                   | `search_documents`       | Search across Google Docs                                |
| **Docs — edit**   | `edit_section`           | Edit a section in place                                  |
|                   | `batch_edit_section`     | Edit multiple sections in one call                       |
|                   | `insert_section`         | Add a new section                                        |
|                   | `remove_section`         | Delete a section                                         |
|                   | `find_and_replace`       | Find and replace text in a doc                           |
|                   | `batch_find_and_replace` | Multiple find-and-replace in one call                    |
| **Docs — create** | `create_document`        | Create a new Google Doc with optional initial content    |
| **Sheets**        | `create_spreadsheet`     | Create a new Google Sheet with optional tabs and headers |
|                   | `read_sheet`             | Read spreadsheet data                                    |
|                   | `update_sheet_cells`     | Update cells in a sheet                                  |
| **Drive**         | `list_folder_contents`   | List files in a Drive folder                             |
| **Jobs**          | `get_job_status`         | Check status of a batch job                              |
|                   | `get_job_results`        | Get results of a completed batch job                     |
|                   | `list_jobs`              | List all pending/completed jobs                          |

### Differences from built-in Google integrations

|                         | Built-in Google (Calendar/Drive/Sheets)            | Google Workspace MCP                                       |
| ----------------------- | -------------------------------------------------- | ---------------------------------------------------------- |
| **How it runs**         | Omniscio's AI service loop (IPC-mediated)          | Claude CLI subprocess (MCP protocol)                       |
| **When it's available** | In Omniscio's chat UI                              | In any Claude CLI session                                  |
| **Document editing**    | No (Drive: file-level ops; Sheets: cell-level)     | Yes (section-level Docs editing, find-and-replace)         |
| **Batch operations**    | No                                                 | Yes (batch edit, batch find-and-replace with job tracking) |
| **Enable toggle**       | `driveEnabled`, `calendarEnabled`, `sheetsEnabled` | _(retired 2026-09-19 — no per-session toggle)_              |

## For agents

### How it works

There is exactly one curated `.mcp.json` per session — written to a **private per-session path** (`<userData>/session-mcp/<sessionId>.mcp.json`, never the project folder) by a single owner: the shared [mcp-config-orchestrator.ts](/src/main/services/mcp/mcp-config-orchestrator.ts). At spawn time the orchestrator composes one entry per enabled MCP server into that one file, and Omniscio hands it to the CLI by absolute path via `--mcp-config` (see [backend-spawn-contract.md](/.claude/memory/contracts/backend-spawn-contract.md) §12). Writing it out of the project tree avoids a name collision with the user's own `~/.claude.json` servers and keeps any plaintext secrets in an entry's env out of a shared/git-tracked folder. Google Workspace _used to_ contribute an entry through a pure builder, `buildGoogleWorkspaceServerEntry()`, plus an Electron-aware deps resolver, `resolveGoogleWorkspaceMcpDeps()`, both in [mcp-config-writer.ts](/src/main/services/google-workspace-mcp/mcp-config-writer.ts) — both stay in the tree, unwired, since 2026-09-19. **It is not a live path:** the `out/mcp/google-workspace-server.js` bundle it names is no longer built, so anything that started composing this entry again would spawn a missing file. It is kept deliberately as the written-down shape a revival would have to restore, and says so in its own comment. The retirement itself is documented on `McpOrchestratorOpts` in [/src/main/services/mcp/mcp-compose.ts](/src/main/services/mcp/mcp-compose.ts); the feature keeps its own routes and settings, it simply no longer composes a per-session MCP process. If no server is enabled at all the orchestrator removes any stale `.mcp.json`.

The server itself lives at [src/main/services/google-workspace-mcp-server/](/src/main/services/google-workspace-mcp-server/) and is built to `out/mcp/google-workspace-server.js` during the standard `npm run build` step. It receives the Google OAuth refresh token, client ID/secret, and an encryption key via environment variables — credentials never touch disk in plaintext.

The server uses its own SQLite database at `<userData>/google-workspace-mcp/workspace.db` for caching document metadata, batch job tracking, and credential storage. Batch operations (like `batch_find_and_replace` across a large document) run as background jobs with status polling via the `get_job_status`/`get_job_results` tools.

Path resolution to the bundled `google-workspace-server.js` uses `app.isPackaged ? resolve(app.getAppPath(), …) : resolve(__dirname, '../../out/mcp/…')` so it works correctly in dev, sandbox (`out-sandbox/`), and packaged builds — mirroring `getMcpServerScriptPath()` in [mcp-registry.ts](/src/main/services/mcp/mcp-registry.ts), since `app.getAppPath()` alone resolves to the wrong root under sandbox mode.

## Related

- [google-integrations.md](google-integrations.md) — the IPC-based Calendar/Drive/Sheets integrations (same OAuth)
- [drive-integration.md](drive-integration.md) — the existing Drive MCP server (5 read-only tools)
- [sheets-integration.md](sheets-integration.md) — rich Sheets formatting and Trusted Sheets
- [mempalace-memory.md](mempalace-memory.md) — another MCP server composed into the same `.mcp.json` by the shared orchestrator
