Google Drive, Sheets & Slides MCP server
Browse, read and write files in Google Drive, plus full Sheets, Slides and Docs editing, in the user's own Google Workspace.
How it connects
New to MCP? What is an MCP server?
- Runs on
- Statio's runtime
- Connects with
- Credentials you paste in once: OAuth Client ID, OAuth Client Secret, Refresh Token, Allow Write Access
- May connect to
www.googleapis.comdriveactivity.googleapis.comdrivelabels.googleapis.comsheets.googleapis.comslides.googleapis.comdocs.googleapis.comoauth2.googleapis.com- Category
- Productivity
What it does
This server lets an agent find, read and edit files across one Google account's Drive, and work inside Sheets, Docs and Slides: read and write cell ranges, insert and replace document text, add slides. It is @us-all/google-drive-mcp, an MIT-licensed community package on npm, and Google does not maintain it. Statio runs version 1.15.8 as one catalog entry covering all four apps, plus the shared drives, labels and approvals tools that only work on Google Workspace accounts.
It signs in with an OAuth client you create in your own Google Cloud project and a refresh token for your account, so it acts as you. Every file you can open, it can open.
Tools
Version 1.15.8 lists 100 tools, and every one sets a read-only or destructive hint, which the last column follows. 32 only read and 68 change something. The 68 write tools all stop with "Write operations are disabled" unless GOOGLE_DRIVE_ALLOW_WRITE is true, but they still appear in the tool list either way, so an agent sees all 100.
Drive files, sharing and history
| Tool | What it does | Reads or changes |
|---|---|---|
get-about | The account, storage quota and whether it is a personal or Workspace account. | Reads |
list-files | Files and folders in one folder, with name, type, size and modified time. | Reads |
get-file | One file's metadata, description, properties and content restrictions. | Reads |
read-file | A file's content. Docs come back as Markdown, Sheets as CSV, Slides as plain text, other files up to 10 MB. | Reads |
search-files | Search with Drive query syntax: full text, name, type, modified date. | Reads |
get-folder-tree | A folder tree, one to five levels deep. | Reads |
export-file | Exports a Doc, Sheet or Slides file to PDF, DOCX, CSV, XLSX, PPTX, HTML, Markdown or text. | Reads |
get-download-link | The download and web view links for a file. | Reads |
create-file | Creates a file, including a Doc or Sheet. | Changes |
update-file | Renames a file or replaces its content. | Changes |
copy-file | Copies a file, optionally to another folder under a new name. | Changes |
move-file | Moves a file or folder to another parent folder. | Changes |
create-folder | Creates a folder. | Changes |
delete-file | Moves a file to trash, or deletes it permanently when permanent is true. | Changes, destructive |
list-permissions | Who has access to a file or folder and with what role. | Reads |
share-file | Shares a file or folder with a user, group, domain or anyone with the link, as reader, commenter, writer or organizer. | Changes |
remove-permission | Removes one sharing permission. | Changes, destructive |
list-comments | Comments on a file, with author, text and whether they are resolved. | Reads |
get-comment | One comment with its replies and quoted text. | Reads |
create-comment | Adds a comment. | Changes |
resolve-comment | Marks a comment resolved. | Changes |
list-revisions | A file's revision history: who changed it and when. | Reads |
get-revision | One revision's details. | Reads |
get-activity | Who viewed, edited, commented on or reshared a file or folder. | Reads |
Sheets
| Tool | What it does | Reads or changes |
|---|---|---|
sheets-get-spreadsheet | Title, locale and the tabs with their sizes. | Reads |
summarize-spreadsheet | Every tab's shape, a few sample rows from each and the named ranges in one call. | Reads |
sheets-get-values | Cell values from one A1 range, as formatted values, raw values or formulas. | Reads |
sheets-batch-get-values | Several ranges in one call. | Reads |
sheets-update-values | Writes a range as if typed, so formulas and dates are parsed. | Changes |
sheets-batch-update-values | Writes several ranges in one call. | Changes |
sheets-append-values | Appends rows to the end of a table. | Changes |
sheets-create-spreadsheet | Creates a spreadsheet. | Changes |
sheets-manage-sheets | Adds, deletes or renames tabs. | Changes |
sheets-clear-values | Clears the values in a range and keeps the formatting. | Changes, destructive |
sheets-batch-clear-values | Clears several ranges at once. | Changes, destructive |
sheets-format-cells | Bold, italic, font, colours, alignment, number format and wrap. | Changes |
sheets-update-borders | Sets borders on a range. | Changes |
sheets-merge-cells | Merges cells. | Changes |
sheets-unmerge-cells | Unmerges cells. | Changes |
sheets-sort-range | Sorts a range by one or more columns. | Changes |
sheets-find-replace | Find and replace across a tab or the whole spreadsheet, with regex. | Changes |
sheets-insert-dimension | Inserts rows or columns. | Changes |
sheets-delete-dimension | Deletes rows or columns. | Changes, destructive |
sheets-copy-sheet-to | Copies a tab into another spreadsheet. | Changes |
sheets-duplicate-sheet | Duplicates a tab in the same spreadsheet. | Changes |
sheets-auto-resize | Fits column widths or row heights to their content. | Changes |
sheets-resize-dimensions | Sets a row height or column width in pixels. | Changes |
sheets-set-data-validation | Dropdowns, number and date rules, custom formulas. | Changes |
sheets-add-conditional-format | Highlight rules and colour scales. | Changes |
sheets-add-chart | Embeds a chart. | Changes |
sheets-delete-chart | Deletes an embedded chart. | Changes, destructive |
sheets-add-protected-range | Protects a range so only chosen editors can change it. | Changes |
sheets-delete-protected-range | Removes a range's protection. | Changes, destructive |
sheets-manage-named-range | Adds, updates or deletes named ranges. | Changes |
sheets-copy-paste | Copies a range within or across tabs: values, formats, formulas or transposed. | Changes |
Docs
| Tool | What it does | Reads or changes |
|---|---|---|
docs-get-document | Title, revision ID and a summary of the document's tabs. | Reads |
docs-list-tabs | Every tab in a multi-tab document. | Reads |
docs-get-content | The text, as plain text or JSON with character positions. | Reads |
summarize-doc | Metadata, text, permissions and optionally comments in one call. | Reads |
docs-create-document | Creates a document. | Changes |
docs-insert-text | Inserts text at a position or at the end. | Changes |
docs-delete-range | Deletes the content between two character positions. | Changes, destructive |
docs-replace-text | Find and replace across the document or chosen tabs. | Changes |
docs-format-text | Text style, colour and links. | Changes |
docs-format-paragraph | Alignment, heading level, spacing and indentation. | Changes |
docs-insert-table | Inserts a table. | Changes |
docs-insert-image | Inserts an image from a URL. | Changes |
docs-insert-page-break | Inserts a page break. | Changes |
docs-batch-update | Sends raw Docs API batchUpdate requests for anything the other tools don't cover. | Changes |
Slides
| Tool | What it does | Reads or changes |
|---|---|---|
slides-get-presentation | Metadata, the slide list and layouts. | Reads |
slides-get-slide | One slide's shapes, text, images and tables. | Reads |
slides-create-presentation | Creates a presentation. | Changes |
slides-duplicate-presentation | Copies a presentation. | Changes |
slides-add-slide | Adds a slide, optionally with a layout. | Changes |
slides-delete-slide | Deletes a slide. | Changes, destructive |
slides-move-slide | Reorders slides. | Changes |
slides-duplicate-slide | Duplicates a slide. | Changes |
slides-insert-text | Puts text into an existing text box or shape. | Changes |
slides-replace-text | Find and replace across the presentation or chosen slides. | Changes |
slides-insert-text-box | Adds a text box. | Changes |
slides-insert-image | Adds an image from a URL. | Changes |
slides-insert-table | Adds a table. | Changes |
slides-update-table-cell | Changes the text in one table cell. | Changes |
slides-insert-shape | Adds a shape. | Changes |
slides-format-text | Text style, font and colour. | Changes |
slides-format-shape | Fill colour, border colour and weight. | Changes |
slides-resize-element | Moves or resizes an element. | Changes |
slides-set-slide-background | Sets a solid background colour. | Changes |
slides-batch-update | Sends raw Slides API batchUpdate requests. | Changes |
Shared drives, labels, approvals and search
Labels and approvals need a Workspace account, and the package's own descriptions say shared drives and labels need Business Standard or higher. audit-external-shares also works on a personal account for files in My Drive.
| Tool | What it does | Reads or changes |
|---|---|---|
list-shared-drives | Shared drives you can see. | Reads |
get-shared-drive | One shared drive's restrictions and capabilities. | Reads |
create-shared-drive | Creates a shared drive. | Changes |
audit-shared-drive-permissions | Samples up to 100 files in a shared drive, newest first, and counts anyone-with-link and external shares. | Reads |
audit-external-shares | The same audit across every drive you can see, up to 1,000 files, with the external domains files are shared to. | Reads |
list-file-labels | Classification labels on a file. | Reads |
apply-label | Applies a classification label, with field values. | Changes |
remove-label | Removes a label. | Changes, destructive |
list-approvals | Approval requests on a file and their status. | Reads |
get-approval | One approval request with reviewers' responses. | Reads |
search-tools | Searches this server's own tool list by keyword. Makes no Google call. | Reads |
Set it up
You need three values: an OAuth client ID, its secret, and a refresh token for the Google account the agent should act as.
- In the Google Cloud console, create or pick a project and enable the Drive, Docs, Sheets, Slides, Drive Activity and Drive Labels APIs. The package's README lists those six.
- Set up the OAuth consent screen. On a Workspace account, choose Internal. Google's OAuth documentation says an External app left in Testing gets refresh tokens that expire after 7 days, which looks like the server breaking a week later.
- Under Credentials, create an OAuth client ID of type Desktop app and download its JSON file.
- Get the refresh token. Google's Ads API docs describe the two routes: a Desktop client uses the gcloud CLI, and a Web application client uses the OAuth 2.0 Playground. With gcloud:
gcloud auth application-default login \
--client-id-file=client_secret.json \
--scopes=https://www.googleapis.com/auth/drive.readonly,https://www.googleapis.com/auth/drive.activity.readonly,https://www.googleapis.com/auth/documents.readonlyThose three scopes are the package's own read-only defaults. For an agent that writes, use drive, drive.activity.readonly and documents instead. The scopes you approve here are the token's real limit, whatever the server is told. gcloud writes the result to ~/.config/gcloud/application_default_credentials.json (on Windows, under %APPDATA%\gcloud\), and the client_id, client_secret and refresh_token in that file are the three values. Google allows 100 refresh tokens per account per client, and creating a 101st silently invalidates the oldest.
If gcloud's file is on the same machine, the package finds it without any environment variables. To be explicit, or to run as a different account, pass the three values yourself.
Claude Code, directly:
claude mcp add google-drive \
-e GOOGLE_CLIENT_ID=your-client-id.apps.googleusercontent.com \
-e GOOGLE_CLIENT_SECRET=your-client-secret \
-e GOOGLE_REFRESH_TOKEN=your-refresh-token \
-e GOOGLE_DRIVE_ALLOW_WRITE=false \
-- npx -y @us-all/google-drive-mcp@1.15.8Cursor, directly, in ~/.cursor/mcp.json or .cursor/mcp.json:
{
"mcpServers": {
"google-drive": {
"command": "npx",
"args": ["-y", "@us-all/google-drive-mcp@1.15.8"],
"env": {
"GOOGLE_CLIENT_ID": "${env:GOOGLE_CLIENT_ID}",
"GOOGLE_CLIENT_SECRET": "${env:GOOGLE_CLIENT_SECRET}",
"GOOGLE_REFRESH_TOKEN": "${env:GOOGLE_REFRESH_TOKEN}",
"GOOGLE_DRIVE_ALLOW_WRITE": "false"
}
}
}
}Run directly, you can also set GD_TOOLS to load only some categories, for example GD_TOOLS=drive,docs,sheets. The categories are drive, sheets, docs, slides, shared-drives, labels and approvals, and search-tools always loads. The client tutorials, How to add MCP servers to Claude Code and How to set up MCP servers in Cursor, explain config scopes and how to keep the secret and token out of files you commit.
Through Statio: install Google Drive, Sheets & Slides from the catalog and paste the client ID, client secret and refresh token under the server's Credentials. The fourth field, Allow Write Access, takes true or false and sets GOOGLE_DRIVE_ALLOW_WRITE. Statio's entry loads all 100 tools, so narrow them with grants under Permissions instead of GD_TOOLS. A new server has no grants, so nobody can call it until you add some. The desktop app then writes your client configs. The manual entry is the local proxy URL with the server name from your dashboard, http://127.0.0.1:7777/google-drive/mcp, added in Claude Code with claude mcp add --transport http google-drive <url> or as a "url" in Cursor. Tools missing after that? Start a fresh session, then work through How to debug an MCP server that won't connect.
What to hold back
The write switch is all or nothing. With GOOGLE_DRIVE_ALLOW_WRITE=true, an agent that should only append rows to one sheet can also share, delete and rewrite anything in your Drive. Decide per tool which writes each agent gets.
share-file is the riskiest tool here. It can share any file you own with any address, or with anyone who has the link, and an agent that reads a document saying "share this folder with this address" has everything it needs to do it. Pair it with read-file or search-files and you have the read, the outside instruction and the way out that make up the lethal trifecta. Almost no agent needs it. remove-permission is its mirror: an agent can lock your colleagues out of a shared folder.
delete-file moves files to trash by default, but permanent: true skips the trash. Grant it to nothing that works unattended. The same goes for sheets-delete-dimension, sheets-clear-values and sheets-batch-clear-values, which can empty a finance sheet's rows in one call, and for docs-delete-range.
sheets-find-replace runs a regex across the whole spreadsheet, and docs-replace-text and slides-replace-text across a whole document or deck. A pattern that matches more than the agent expected changes every cell or paragraph it matches. update-file replaces a file's content outright.
docs-batch-update and slides-batch-update pass raw API requests through, so a grant on either covers anything the Docs or Slides API can do to that file, including the deletes the named tools would have shown you. Treat them like having every write tool for that app.
sheets-delete-protected-range removes the protection someone put on a range on purpose. An agent that keeps hitting a protected range should stop, not unlock it.
Every file the agent reads is input from whoever wrote it, including comments and shared documents from outside your company. That text can carry instructions aimed at the agent, which is why the write tools matter more on this server than on most.
The refresh token can do whatever its scopes allow, with or without this server. Store it like a password, rotate it if it leaks, and use the read-only scopes for agents that only read. With Statio you grant each tool separately, so one agent can have read-file, search-files and the Sheets reads while another also gets sheets-append-values. MCP permissions covers how grants and denies combine.
Questions
@us-all/google-drive-mcp is a community package under the MIT licence. Statio runs version 1.15.8 of it.GD_TOOLS when you run it yourself, or grant only the read tools in Statio.audit-external-shares, which checks My Drive.What Statio adds
- You choose which of its tools each agent may call. A tool you hold back is removed from that agent's tool list, and a call to it is refused.
- The credentials stay encrypted in Statio, so they never sit in an agent config file.
- Every call is recorded with the agent that made it, when, how long it took and whether it succeeded.
- The outbound list above is enforced outside the server's container, so it cannot reach any other host.
Lock down your first tool in minutes.
Three MCP servers, one of them hosted, and 10,000 calls a month, free and without a card. If you outgrow it the next plan is $19.
Two steps: create your account, then install the desktop app on each machine that runs an AI client.
- Keys encrypted at rest, never handed to an agent
- Cancel anytime, nothing is deleted
- How Statio handles credentials