Google Drive CRUD MCP Server
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| USER_GOOGLE_EMAIL | No | Pin the server to one Google account in single-user mode | |
| MCP_ENABLE_OAUTH21 | No | Multi-user mode where each caller sends their own bearer token. Set to true to enable. | false |
| WORKSPACE_MCP_HOST | No | Bind address | 0.0.0.0 |
| WORKSPACE_MCP_PORT | No | Port to bind. Railway sets PORT, which takes precedence. | 8000 |
| MCP_SINGLE_USER_MODE | No | Single-user mode, an alternative to OAuth 2.1. Set to 1 to enable. | off |
| GOOGLE_OAUTH_CLIENT_ID | Yes | OAuth client ID from Google Cloud | |
| WORKSPACE_EXTERNAL_URL | No | Public URL the server is reachable at, used as the base for the OAuth endpoints. Required when deployed. | |
| WORKSPACE_MCP_BASE_URI | No | Base used with the port when WORKSPACE_EXTERNAL_URL is unset | http://localhost |
| WORKSPACE_MCP_READ_ONLY | No | Drop the write scopes and disable every mutating tool. Set to true to enable. | off |
| WORKSPACE_MCP_TRANSPORT | No | stdio or streamable-http. Deployed servers need streamable-http. | stdio |
| GOOGLE_OAUTH_REDIRECT_URI | No | Callback URI, must match one registered on the OAuth client. Defaults to <base URL>/oauth2callback | |
| GOOGLE_OAUTH_CLIENT_SECRET | Yes | OAuth client secret from Google Cloud | |
| DOWNLOAD_FILE_CONTENT_MAX_MB | No | Largest file download_file_content will return inline | 25 |
| WORKSPACE_MCP_STATELESS_MODE | No | Keep no per-session state on disk, needed behind a stateless proxy. Set to true to enable. | off |
| WORKSPACE_MCP_CREDENTIALS_DIR | No | Where credentials persist when not stateless, for local use | ~/.google_workspace_mcp/credentials |
Capabilities
Features and capabilities supported by this server
| Capability | Details |
|---|---|
| tools | {
"listChanged": true
} |
| logging | {} |
| prompts | {
"listChanged": false
} |
| resources | {
"subscribe": false,
"listChanged": false
} |
| extensions | {
"io.modelcontextprotocol/ui": {}
} |
| experimental | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| start_google_authA | Manually initiate Google OAuth authentication flow. NOTE: This is a legacy OAuth 2.0 tool and is disabled when OAuth 2.1 is enabled. The authentication system automatically handles credential checks and prompts for authentication when needed. Only use this tool if:
In most cases, simply try calling the Google Workspace tool you need - it will automatically handle authentication if required. |
| search_filesB | Searches for files and folders within a user's Google Drive, including shared drives. |
| list_recent_filesA | Lists the user's most recently modified files in Google Drive (across all drives the user has access to). Excludes trashed items. |
| get_file_metadataA | Returns metadata for a single Google Drive file by ID. |
| read_file_contentA | Retrieves the content of a specific Google Drive file by ID, supporting files in shared drives. • Native Google Docs, Sheets, Slides → exported as text / CSV. • Office files (.docx, .xlsx, .pptx) → unzipped & parsed with std-lib to extract readable text. • PDFs → text extracted with pypdf when possible; scanned/image-only PDFs fall back to a download hint. • Images → returned as base64 with MIME metadata for multimodal clients. • Any other file → downloaded; tries UTF-8 decode, else notes binary. |
| download_file_contentA | Downloads a Google Drive file and returns its raw bytes as a base64-encoded blob. For Google native files (Docs, Sheets, Slides), exports to a useful format:
For other files, downloads the original file format. Size limit: DOWNLOAD_FILE_CONTENT_MAX_MB env var (default 25 MB). Files larger than the limit return an error pointing to read_file_content for text extraction, or a Drive shareable link as a fallback. |
| list_drive_itemsA | Lists files/folders or shared drive containers, supporting shared drives.
If |
| create_drive_folderA | Creates a new folder in Google Drive, supporting creation within shared drives. |
| create_fileA | Creates a new file in Google Drive, supporting creation within shared drives. Accepts either direct content or a fileUrl to fetch the content from. |
| create_resumable_upload_sessionA | Creates a Google Drive resumable upload session and returns the upload URL. The caller (e.g. a skill running in claude.ai's sandbox) uses the returned
|
| import_to_google_docA | Imports a file (Markdown, DOCX, TXT, HTML, RTF, ODT) into Google Docs format with automatic conversion. Google Drive automatically converts the source file to native Google Docs format, preserving formatting like headings, lists, bold, italic, etc. For batch operations, prefer file_path for files on disk so callers do not need to load full file contents into their context. |
| get_drive_file_permissionsB | Gets detailed metadata about a Google Drive file including sharing permissions. |
| check_drive_file_public_accessA | Searches for a file by name and checks if it has public link sharing enabled. |
| update_drive_fileC | Updates metadata and properties of a Google Drive file. |
| get_drive_shareable_linkA | Gets the shareable link for a Google Drive file or folder. |
| manage_drive_accessA | Consolidated tool for managing Google Drive file and folder access permissions. Supports granting, batch-granting, updating, revoking permissions, and transferring file ownership -- all through a single entry point. |
| copy_drive_fileA | Creates a copy of an existing Google Drive file. This tool copies the template document to a new location with an optional new name. The copy maintains all formatting and content from the original file. |
| set_drive_file_permissionsA | Sets file-level sharing settings and controls link sharing for a Google Drive file or folder. This is a high-level tool for the most common permission changes. Use this to toggle "anyone with the link" access or configure file-level sharing behavior. For managing individual user/group permissions, use share_drive_file or update_drive_permission instead. |
| spreadsheets_batch_updateA | Apply a batch of update requests to a Google Sheet (spreadsheets.batchUpdate). Used by the QBR skill to create native charts (addChart) and set cell number
formats (repeatCell). Build the |
| spreadsheets_getA | Read a Google Sheet's metadata (spreadsheets.get). Use a |
| presentations_batch_updateA | Apply a batch of update requests to a Google Slides presentation (presentations.batchUpdate). Used by the QBR skill to delete chart placeholders and embed LINKED Sheets
charts (createSheetsChart, linkingMode=LINKED). Build Retries transient Drive eventual-consistency failures (a just-converted Sheet not yet visible to Slides) with exponential backoff up to ~30s. |
| presentations_getA | Read a Google Slides presentation (presentations.get). Use a
|
| docs_getA | Read a Google Doc's content and structure (documents.get). The returned resource's |
| docs_batch_updateA | Apply a batch of edit requests to a Google Doc (documents.batchUpdate). Accepts any Docs API request type (insertText, deleteContentRange,
updateTextStyle, insertTable, insertInlineImage, ...). Indexes shift as
earlier requests in the batch insert or delete content, so order edits from
the END of the document toward the start, or send one request per call.
Get current indexes from docs_get first. Pass |
| docs_replace_all_textA | Find-and-replace text across a Google Doc (documents.batchUpdate with one replaceAllText request per item). Preserves surrounding formatting, so it is the safest way to fill placeholders in a template document. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/adampaulwalker/claude-gdrive-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server