
Security News
Happy Birthday, Shai-Hulud
It has been one year since Shai-Hulud made its first appearance on npm.
mcp-google-gdrive
Advanced tools
MCP server for Google Drive, Docs, Sheets, and Slides with multi-account support, permissions, labels, and full CRUD
An MCP server for Google Drive, Docs, Sheets, and Slides. Lets AI assistants manage files, folders, permissions, labels, and trash with full read/write access across multiple Google accounts. Includes automatic Workspace format conversion (Docs to Markdown, Sheets to CSV/JSON, Slides to text).
| Tool | Description |
|---|---|
gdrive_list_accounts | List all configured Google accounts with labels and emails |
gdrive_switch_account | Set the active account for subsequent calls |
gdrive_add_account | Generate an authorization URL to add a new Google account |
| Tool | Description |
|---|---|
gdrive_list_files | List files with optional search query and folder filtering |
gdrive_get_metadata | Get detailed metadata for a file by ID |
gdrive_read_file | Read file content with automatic Workspace format conversion |
gdrive_download_file | Download a file to local disk (supports Workspace export) |
gdrive_create_file | Create a new file with optional OCR on image/PDF uploads |
gdrive_update_file | Update a file's content, name, or description |
gdrive_copy_file | Copy a file, optionally to a different folder |
gdrive_move_file | Move a file to a different folder |
gdrive_search_files | Full-text search across file names and content |
| Tool | Description |
|---|---|
gdrive_create_folder | Create a new folder |
gdrive_list_folder | List contents of a specific folder |
gdrive_delete_folder | Delete a folder (trash or permanent) |
| Tool | Description |
|---|---|
gdrive_trash_file | Move a file or folder to trash |
gdrive_untrash_file | Restore a file or folder from trash |
gdrive_empty_trash | Permanently delete all trashed files (irreversible) |
gdrive_list_trash | List files currently in trash |
| Tool | Description |
|---|---|
gdrive_share_file | Share a file with a user, group, domain, or anyone |
gdrive_list_permissions | List all permissions on a file or folder |
gdrive_update_permission | Update a permission's role |
gdrive_remove_permission | Remove a permission (unshare) |
gdrive_transfer_ownership | Transfer file ownership to another user |
| Tool | Description |
|---|---|
gdrive_list_labels | List available Drive labels |
gdrive_list_file_labels | List labels applied to a file |
gdrive_set_file_labels | Add, update, or remove labels on a file |
| Tool | Description |
|---|---|
gdrive_export_doc | Export a Google Doc (markdown, html, text, docx, pdf). Use savePath to save binary formats to disk |
gdrive_create_doc | Create a Google Doc from Markdown content |
gdrive_update_doc | Replace a Google Doc's content with Markdown |
| Tool | Description |
|---|---|
gdrive_create_sheet | Create a new spreadsheet with named tabs |
gdrive_export_sheet | Export a sheet to CSV, JSON, or XLSX. Use savePath to save XLSX to disk |
gdrive_list_sheets | List all sheets/tabs in a spreadsheet |
gdrive_read_sheet_range | Read a specific range from any tab (A1 notation) |
gdrive_write_sheet_range | Write data to a specific range |
| Tool | Description |
|---|---|
gdrive_create_slides | Create a new presentation |
gdrive_export_slides | Export slides to text, PDF, or PPTX. Use savePath to save binary formats to disk |
gdrive_get_slide_thumbnail | Get a thumbnail image URL for a specific slide |
outputFormat parameter — 12 read/list tools now accept outputFormat: "json" | "yaml" | "text". Default is json (backwards compatible). Use yaml for structured output or text for compact human-readable tables. Supported on: list_accounts, list_files, list_folder, list_trash, list_permissions, list_labels, list_file_labels, list_sheets, get_metadata, read_sheet_range, get_slide_thumbnail, search_files.gdrive_download_file — Download any file from Drive to a local disk path. Workspace files (Docs, Sheets, Slides) are automatically exported to the specified format (pdf, docx, xlsx, pptx, csv, txt, html, or markdown).savePath on export tools — gdrive_export_doc, gdrive_export_sheet, and gdrive_export_slides now accept an optional savePath parameter. When provided, binary exports (docx, pdf, xlsx, pptx) are saved to disk instead of returned as base64. Omitting savePath preserves the v2.0 behavior.gdrive_list_accounts email resolution — Accounts migrated from v0.x that showed "migrated" instead of an email address now auto-resolve via the Google userinfo API on first call.gdrive_empty_trash notes eventual consistency; gdrive_transfer_ownership notes cross-org limitation.All read and list tools support an outputFormat parameter:
| Format | Description | Use Case |
|---|---|---|
json | Pretty-printed JSON (default) | Machine consumption, API pipelines |
yaml | YAML serialization | Human-readable structured data, config files |
text | Compact aligned tables and key-value pairs | Quick scanning, terminal output, token-efficient LLM context |
Example: gdrive_list_files({ query: "name contains 'report'", outputFormat: "text" }) returns:
files:
id name mimeType modifiedTime size
------------- ---------------- --------------- ------------ ----
abc123def456 Q1 Report.pdf application/pdf 2026-04-01 1024
ghi789jkl012 Q2 Report.docx application/pdf 2026-03-15 2048
resultCount: 2
mkdir -p ~/.config/mcp-google-gdrive
cp ~/Downloads/client_secret_*.json ~/.config/mcp-google-gdrive/credentials.json
chmod 600 ~/.config/mcp-google-gdrive/credentials.json
npx mcp-google-gdrive --auth primary
This prints a URL for Google consent. After granting access, paste the authorization code back into the terminal.
Add additional accounts with unique labels:
npx mcp-google-gdrive --auth work
npx mcp-google-gdrive --auth personal
Each account gets its own token file at ~/.config/mcp-google-gdrive/tokens/{label}.json. Use the account parameter on any tool to specify which account to use, or call gdrive_switch_account to change the default.
Add to ~/.gemini/settings.json:
{
"mcpServers": {
"google-gdrive": {
"command": "npx",
"args": ["-y", "mcp-google-gdrive"]
}
}
}
orchestrate toolkits import --kind mcp \
--name google-gdrive \
--description "Google Drive, Docs, Sheets, Slides" \
--command "npx -y mcp-google-gdrive" \
--tools "*"
claude mcp add -s user google-gdrive -- npx -y mcp-google-gdrive
Add to .vscode/mcp.json in your workspace:
{
"mcpServers": {
"google-gdrive": {
"type": "stdio",
"command": "npx",
"args": ["-y", "mcp-google-gdrive"]
}
}
}
The server uses OAuth2 for Google Drive access. Credentials are stored locally:
~/.config/mcp-google-gdrive/credentials.json — OAuth2 client (shared across accounts)~/.config/mcp-google-gdrive/tokens/{label}.json — Per-account tokens (chmod 600)~/.config/mcp-google-gdrive/config.json — Active account and account registryAccess tokens expire after one hour and are refreshed automatically using stored refresh tokens. Token refresh is transparent and requires no user interaction.
If upgrading from a single-account v0.x installation, the server automatically migrates your existing token.json to tokens/primary.json on first start.
MIT
FAQs
MCP server for Google Drive, Docs, Sheets, and Slides with multi-account support, permissions, labels, and full CRUD
We found that mcp-google-gdrive demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 1 open source maintainer collaborating on the project.

Security News
It has been one year since Shai-Hulud made its first appearance on npm.

Research
/Security News
Operators behind PolinRider used a compromised GitHub account to plant malware in four development versions of a Packagist package with 700,000+ downloads.

Security News
GitHub Actions now supports cache-mode, a least-privilege control on the Actions cache aimed at the cache poisoning technique behind recent compromises.