ShortlistLens
Structured website and review evidence for AI-assisted local-business shortlisting.
Crawler Summary
Google Drive MCP Server - Model Context Protocol server providing secure access to Google Drive, Docs, Sheets, and Slides through MCP clients e.g. Claude Desktop Google Drive MCP Server A Model Context Protocol (MCP) server that provides secure integration with Google Drive, Docs, Sheets, Slides, and Calendar. It allows Claude Desktop and other MCP clients to manage files in Google Drive and calendar events through a standardized interface. Features - **Multi-format Support**: Work with Google Docs, Sheets, Slides, Calendar, and regular files - **File Management**: Create, up Capability contract not published. No trust telemetry is available yet. 39 GitHub stars reported by the source. Last updated 2/25/2026.
Freshness
Last checked 2/25/2026
Best For
@piotr-agier/google-drive-mcp is best for mcp, model-context-protocol, claude workflows where MCP compatibility matters.
Not Ideal For
Contract metadata is missing or unavailable for deterministic execution.
Evidence Sources Checked
editorial-content, GITHUB MCP, runtime-metrics, public facts pack
Google Drive MCP Server - Model Context Protocol server providing secure access to Google Drive, Docs, Sheets, and Slides through MCP clients e.g. Claude Desktop Google Drive MCP Server A Model Context Protocol (MCP) server that provides secure integration with Google Drive, Docs, Sheets, Slides, and Calendar. It allows Claude Desktop and other MCP clients to manage files in Google Drive and calendar events through a standardized interface. Features - **Multi-format Support**: Work with Google Docs, Sheets, Slides, Calendar, and regular files - **File Management**: Create, up
Public facts
4
Change events
0
Artifacts
0
Freshness
Feb 25, 2026
Capability contract not published. No trust telemetry is available yet. 39 GitHub stars reported by the source. Last updated 2/25/2026.
Trust score
Unknown
Compatibility
MCP
Freshness
Feb 25, 2026
Vendor
Piotragier
Artifacts
0
Benchmarks
0
Last release
1.4.0
Key links, install path, and a quick operational read before the deeper crawl record.
Summary
Capability contract not published. No trust telemetry is available yet. 39 GitHub stars reported by the source. Last updated 2/25/2026.
Setup snapshot
git clone https://github.com/piotr-agier/google-drive-mcp.gitSetup complexity is MEDIUM. Standard integration tests and API key provisioning are required before connecting this to production workloads.
Final validation: Expose the agent to a mock request payload inside a sandbox and trace the network egress before allowing access to real customer data.
Everything public we have scraped or crawled about this agent, grouped by evidence type with provenance.
Vendor
Piotragier
Protocol compatibility
MCP
Adoption signal
39 GitHub stars
Handshake status
UNKNOWN
Merged public release, docs, artifact, benchmark, pricing, and trust refresh events.
Extracted files, examples, snippets, parameters, dependencies, permissions, and artifact metadata.
Extracted files
0
Examples
6
Snippets
0
Languages
typescript
text
Create a new Google Doc called "Project Plan" in the folder /Work/Projects with an outline for our Q1 initiatives including milestones and deliverables.
text
Search for files containing "budget" and organize them by moving each one to the appropriate folder in your Drive hierarchy.
text
Create a Google Sheet called "Sales Analysis 2024" with columns for Date, Product, Quantity, and Revenue to track your sales data.
text
Create a presentation called "Product Roadmap" with slides outlining our Q1 milestones, key features, and timeline.
text
Update the "Team Contacts" spreadsheet with new employee information by modifying specific cells or ranges with the provided data.
text
Search for documents in the /Reports folder and create a summary document listing the files you found.
Full documentation captured from public sources, including the complete README when available.
Docs source
GITHUB MCP
Editorial quality
ready
Google Drive MCP Server - Model Context Protocol server providing secure access to Google Drive, Docs, Sheets, and Slides through MCP clients e.g. Claude Desktop Google Drive MCP Server A Model Context Protocol (MCP) server that provides secure integration with Google Drive, Docs, Sheets, Slides, and Calendar. It allows Claude Desktop and other MCP clients to manage files in Google Drive and calendar events through a standardized interface. Features - **Multi-format Support**: Work with Google Docs, Sheets, Slides, Calendar, and regular files - **File Management**: Create, up
A Model Context Protocol (MCP) server that provides secure integration with Google Drive, Docs, Sheets, Slides, and Calendar. It allows Claude Desktop and other MCP clients to manage files in Google Drive and calendar events through a standardized interface.
/Work/Projects)This MCP server enables powerful file management workflows through natural language:
Create a new Google Doc called "Project Plan" in the folder /Work/Projects
with an outline for our Q1 initiatives including milestones and deliverables.
Search for files containing "budget" and organize them by moving each one
to the appropriate folder in your Drive hierarchy.
Create a Google Sheet called "Sales Analysis 2024" with columns for Date, Product,
Quantity, and Revenue to track your sales data.
Create a presentation called "Product Roadmap" with slides outlining
our Q1 milestones, key features, and timeline.
Update the "Team Contacts" spreadsheet with new employee information
by modifying specific cells or ranges with the provided data.
Search for documents in the /Reports folder and create a summary
document listing the files you found.
Create a Templates folder and add standard documents like
a Meeting Notes template, Project Proposal template,
and Budget Spreadsheet template.
./auth/drive.file.../auth/documents.../auth/spreadsheets.../auth/presentations.../auth/drive.../auth/drive.readonly.../auth/calendar.../auth/calendar.eventsgcp-oauth.keys.jsonYou can run the server directly without installation:
# Run the server (authentication happens automatically on first run)
npx @piotr-agier/google-drive-mcp
# Optional: Run authentication manually if needed
npx @piotr-agier/google-drive-mcp auth
Clone and install:
git clone https://github.com/piotr-agier/google-drive-mcp.git
cd google-drive-mcp
npm install
Set up credentials:
# Copy the example file
cp gcp-oauth.keys.example.json gcp-oauth.keys.json
# Edit gcp-oauth.keys.json with your OAuth client ID
Authenticate (optional):
npm run auth
Note: Authentication happens automatically on first run of an MCP client if you skip this step.
Authenticate locally first - Docker containers cannot open browsers for OAuth:
# Using npx
npx @piotr-agier/google-drive-mcp auth
# Or using local installation
npm run auth
Verify token location:
ls -la ~/.config/google-drive-mcp/tokens.json
Build the project (required before Docker build):
npm install
npm run build
Build the Docker image:
docker build -t google-drive-mcp .
Run the container with your credentials and tokens mounted:
docker run -it \
-v /path/to/gcp-oauth.keys.json:/config/gcp-oauth.keys.json:ro \
-v ~/.config/google-drive-mcp/tokens.json:/config/tokens.json \
google-drive-mcp
Important Notes:
/path/to/gcp-oauth.keys.json with the actual path to your OAuth credentials:ro flag mounts the credentials as read-only for securityAdd this configuration to use the Docker container with Claude Desktop:
{
"mcpServers": {
"google-drive": {
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"-v",
"/path/to/gcp-oauth.keys.json:/config/gcp-oauth.keys.json:ro",
"-v",
"/Users/yourname/.config/google-drive-mcp/tokens.json:/config/tokens.json",
"google-drive-mcp"
]
}
}
}
Docker-specific notes:
-i for interactive mode (required for MCP stdio communication)--rm to automatically remove the container after exitThe server supports multiple methods for providing OAuth credentials (in order of priority):
export GOOGLE_DRIVE_OAUTH_CREDENTIALS="/path/to/your/gcp-oauth.keys.json"
Place gcp-oauth.keys.json in the project root directory
By default, the server requests a broad scope set for Drive/Docs/Sheets/Slides/Calendar. You can override requested scopes with:
export GOOGLE_DRIVE_MCP_SCOPES="drive.readonly,documents,spreadsheets"
Notes:
drive, drive.file, drive.readonly, documents, spreadsheets, presentations, calendar, calendar.events.Authentication tokens are stored securely following the XDG Base Directory specification:
| Priority | Location | Configuration |
|----------|----------|---------------|
| 1 | Custom path | Set GOOGLE_DRIVE_MCP_TOKEN_PATH environment variable |
| 2 | XDG Config | $XDG_CONFIG_HOME/google-drive-mcp/tokens.json |
| 3 | Default | ~/.config/google-drive-mcp/tokens.json |
Security Notes:
Add the server to your Claude Desktop configuration:
macOS: ~/Library/Application Support/Claude/claude_desktop_config.json
Windows: %APPDATA%\Claude\claude_desktop_config.json
{
"mcpServers": {
"google-drive": {
"command": "npx",
"args": ["@piotr-agier/google-drive-mcp"],
"env": {
"GOOGLE_DRIVE_OAUTH_CREDENTIALS": "/path/to/your/gcp-oauth.keys.json"
}
}
}
}
{
"mcpServers": {
"google-drive": {
"command": "node",
"args": ["/absolute/path/to/google-drive-mcp/dist/index.js"],
"env": {
"GOOGLE_DRIVE_OAUTH_CREDENTIALS": "/path/to/your/gcp-oauth.keys.json"
}
}
}
}
Note: Replace /path/to/your/gcp-oauth.keys.json with the actual path to your OAuth credentials file.
search - Search for files across Google Drive
query: Search termspageSize: Number of results per page (optional, default 50, max 100)pageToken: Pagination token for next page (optional)listFolder - List contents of a folder
folderId: Folder ID (optional, defaults to root)pageSize: Number of results (optional, max 100)pageToken: Pagination token (optional)listSharedDrives - List available Google Shared Drives
pageSize: Number of drives to return (optional, default 50, max 100)pageToken: Pagination token (optional)createTextFile - Create a text or markdown file
name: File name (must end with .txt or .md)content: File contentparentFolderId: Parent folder ID (optional)updateTextFile - Update existing text file
fileId: File ID to updatecontent: New contentname: New name (optional)deleteItem - Move a file or folder to trash (not a permanent deletion - items can be restored from Google Drive trash)
itemId: Item ID to move to trashrenameItem - Rename a file or folder
itemId: Item ID to renamenewName: New namemoveItem - Move a file or folder
itemId: Item ID to movedestinationFolderId: Destination folder IDcopyFile - Create a copy of a Google Drive file or document
fileId: ID of the file to copynewName: Name for the copied file (optional, defaults to "Copy of [original name]")parentFolderId: Destination folder ID (optional, defaults to same location)listPermissions - List current sharing permissions on a file/folder
fileId: File or folder IDaddPermission - Add a new permission to a file/folder
fileId: File or folder IDtype: Permission target type (user, group, domain, anyone)role: Permission role (reader, commenter, writer, fileOrganizer, organizer, owner)emailAddress: Required for user/group typesdomain: Required for domain typesendNotificationEmail: Send notification email (optional)updatePermission - Update role for an existing permission
fileId: File or folder IDpermissionId: Permission IDrole: New roleremovePermission - Remove a permission from a file/folder
fileId: File or folder IDpermissionId: Permission ID (optional if emailAddress is provided)emailAddress: Email to find permission by (optional fallback)shareFile - Share file with a user email (idempotent helper)
fileId: File or folder IDemailAddress: Recipient emailrole: Role (reader, commenter, writer)sendNotificationEmail: Send notification email (optional)uploadFile - Upload a local file (any type: image, audio, video, PDF, etc.) to Google Drive
localPath: Absolute path to the local filename: File name in Drive (optional, defaults to local filename)parentFolderId: Parent folder ID or path (optional, e.g., '/Work/Projects')mimeType: MIME type (optional, auto-detected from extension)downloadFile - Download a Google Drive file to a local path
fileId: Google Drive file IDlocalPath: Absolute local path to save the file (can be a directory or full file path)exportMimeType: For Google Workspace files, MIME type to export as (optional, e.g., 'application/pdf', 'text/csv')overwrite: Whether to overwrite existing files (optional, default: false)name: Folder nameparent: Parent folder ID or path (optional)createGoogleDoc - Create a Google Doc
name: Document namecontent: Document contentparentFolderId: Parent folder ID (optional)updateGoogleDoc - Replace all content in a Google Doc
documentId: Document IDcontent: New contentreadGoogleDoc - Read content of a Google Doc with format options
documentId: Document IDformat: Output format — text, json, or markdown (optional, default: text)maxLength: Maximum characters to return (optional)getGoogleDocContent - Get document content with text indices for formatting
documentId: Document IDincludeFormatting: Include font, style, and color info for each text span (optional, default: false)listDocumentTabs - List all tabs in a Google Doc with their IDs and hierarchy
documentId: Document IDincludeContent: Include content summary (character count) for each tab (optional)listGoogleDocs - List Google Documents with optional filtering
query: Search query to filter by name or content (optional)maxResults: Maximum documents to return, 1-100 (optional, default: 20)orderBy: Sort order — name, modifiedTime, or createdTime (optional)getDocumentInfo - Get detailed metadata about a specific Google Document
documentId: Document IDinsertText - Insert text at a specific index (doesn't replace entire doc)
documentId: Document IDtext: Text to insertindex: Position to insert at (1-based)deleteRange - Delete content between start and end indices
documentId: Document IDstartIndex: Start index (1-based, inclusive)endIndex: End index (exclusive)applyTextStyle - Apply text formatting (bold, italic, color, etc.) to a range or found text
documentId: Document IDstartIndex+endIndex OR textToFind+matchInstancebold, italic, underline, strikethrough: Text styling (optional)fontSize: Font size in points (optional)fontFamily: Font family name (optional)foregroundColor: Hex color, e.g., #FF0000 (optional)backgroundColor: Hex background color (optional)linkUrl: URL for hyperlink (optional)applyParagraphStyle - Apply paragraph formatting
documentId: Document IDstartIndex+endIndex OR textToFind+matchInstance OR indexWithinParagraphnamedStyleType: NORMAL_TEXT, TITLE, SUBTITLE, HEADING_1 through HEADING_6 (optional)alignment: START, CENTER, END, or JUSTIFIED (optional)indentStart, indentEnd: Indent in points (optional)spaceAbove, spaceBelow: Spacing in points (optional)keepWithNext: Keep with next paragraph (optional)formatGoogleDocText - Alias for applyTextStyle (compatibility helper)
applyTextStyleformatGoogleDocParagraph - Alias for applyParagraphStyle (compatibility helper)
applyParagraphStylefindAndReplaceInDoc - Find and replace text across a Google Doc
documentId: Document IDfindText: Text to findreplaceText: Replacement textmatchCase: Case-sensitive match (optional, default: false)dryRun: Only report estimated matches, don’t modify document (optional, default: false)insertTable - Insert a new table at a given index
documentId: Document IDrows: Number of rowscolumns: Number of columnsindex: Position to insert at (1-based)editTableCell - Edit content and/or style of a specific table cell
documentId: Document IDtableStartIndex: Starting index of the table elementrowIndex: Row index (0-based)columnIndex: Column index (0-based)textContent: New text content (optional)bold, italic, fontSize, alignment: Cell styling (optional)insertImageFromUrl - Insert an inline image from a publicly accessible URL
documentId: Document IDimageUrl: Publicly accessible URL to the imageindex: Position to insert at (1-based)width, height: Image dimensions in points (optional)insertLocalImage - Upload a local image file to Drive and insert it into a document
documentId: Document IDlocalImagePath: Absolute path to the local image fileindex: Position to insert at (1-based)width, height: Image dimensions in points (optional)uploadToSameFolder: Upload to same folder as document (optional, default: true)listComments - List all comments in a Google Document
documentId: Document IDincludeDeleted: Include deleted comments (optional, default: false)pageSize: Max comments to return, 1-100 (optional, default: 100)pageToken: Token for next page of results (optional)getComment - Get a specific comment with its full thread of replies
documentId: Document IDcommentId: Comment IDaddComment - Add a comment anchored to a specific text range
documentId: Document IDstartIndex: Start index (1-based)endIndex: End index (exclusive)commentText: The comment contentreplyToComment - Add a reply to an existing comment
documentId: Document IDcommentId: Comment ID to reply toreplyText: The reply contentdeleteComment - Delete a comment from the document
documentId: Document IDcommentId: Comment ID to deletecreateGoogleSheet - Create a Google Sheet
name: Spreadsheet namedata: 2D array of cell valuesparentFolderId: Parent folder ID (optional)valueInputOption: RAW (default, safe) or USER_ENTERED (evaluates formulas) (optional)updateGoogleSheet - Update a Google Sheet
spreadsheetId: Spreadsheet IDrange: Range to update (e.g., 'Sheet1!A1:C10')data: 2D array of new valuesvalueInputOption: RAW (default, safe) or USER_ENTERED (evaluates formulas) (optional)getGoogleSheetContent - Get spreadsheet content with cell information
spreadsheetId: Spreadsheet IDrange: Range to get (e.g., 'Sheet1!A1:C10')getSpreadsheetInfo - Get detailed information about a spreadsheet including all sheets/tabs
spreadsheetId: Spreadsheet IDappendSpreadsheetRows - Append rows to the end of a sheet
spreadsheetId: Spreadsheet IDrange: A1 notation range indicating where to append (e.g., 'A1' or 'Sheet1!A1')values: 2D array of values to appendvalueInputOption: RAW or USER_ENTERED (optional, default: USER_ENTERED)addSpreadsheetSheet - Add a new sheet/tab to an existing spreadsheet
spreadsheetId: Spreadsheet IDsheetTitle: Title for the new sheetlistGoogleSheets - List Google Spreadsheets with optional filtering
query: Search query to filter by name or content (optional)maxResults: Maximum spreadsheets to return, 1-100 (optional, default: 20)orderBy: Sort order — name, modifiedTime, or createdTime (optional)formatGoogleSheetCells - Format cell properties
spreadsheetId: Spreadsheet IDrange: Range to format (e.g., 'A1:C10')backgroundColor: Cell background color (RGB 0-1) (optional)horizontalAlignment: LEFT, CENTER, or RIGHT (optional)verticalAlignment: TOP, MIDDLE, or BOTTOM (optional)wrapStrategy: OVERFLOW_CELL, CLIP, or WRAP (optional)formatGoogleSheetText - Apply text formatting to cells
spreadsheetId: Spreadsheet IDrange: Range to format (e.g., 'A1:C10')bold, italic, strikethrough, underline: Text styling (optional)fontSize: Font size in points (optional)fontFamily: Font name (optional)foregroundColor: Text color (RGB 0-1) (optional)formatGoogleSheetNumbers - Apply number/date formatting
spreadsheetId: Spreadsheet IDrange: Range to format (e.g., 'A1:C10')pattern: Format pattern (e.g., '#,##0.00', 'yyyy-mm-dd', '$#,##0.00', '0.00%')type: NUMBER, CURRENCY, PERCENT, DATE, TIME, DATE_TIME, or SCIENTIFIC (optional)setGoogleSheetBorders - Configure cell borders
spreadsheetId: Spreadsheet IDrange: Range to format (e.g., 'A1:C10')style: SOLID, DASHED, DOTTED, or DOUBLEwidth: Border thickness 1-3 (optional)color: Border color (RGB 0-1) (optional)top, bottom, left, right: Apply to specific borders (optional)innerHorizontal, innerVertical: Apply to inner borders (optional)mergeGoogleSheetCells - Merge cells in a range
spreadsheetId: Spreadsheet IDrange: Range to merge (e.g., 'A1:C3')mergeType: MERGE_ALL, MERGE_COLUMNS, or MERGE_ROWSaddGoogleSheetConditionalFormat - Add conditional formatting rules
spreadsheetId: Spreadsheet IDrange: Range to apply formatting (e.g., 'A1:C10')condition: Condition configuration
type: NUMBER_GREATER, NUMBER_LESS, TEXT_CONTAINS, TEXT_STARTS_WITH, TEXT_ENDS_WITH, or CUSTOM_FORMULAvalue: Value to compare or formulaformat: Format to apply when condition is true
backgroundColor: Cell color (RGB 0-1) (optional)textFormat: Text formatting with bold and foregroundColor (optional)createGoogleSlides - Create a presentation
name: Presentation nameslides: Array of slides with title and contentparentFolderId: Parent folder ID (optional)updateGoogleSlides - Update an existing presentation
presentationId: Presentation IDslides: Array of slides with title and content (replaces all existing slides)getGoogleSlidesContent - Get presentation content with element IDs
presentationId: Presentation IDslideIndex: Specific slide index (optional)formatGoogleSlidesText - Apply text formatting to slide elements
presentationId: Presentation IDobjectId: Element IDstartIndex/endIndex: Text range (optional, 0-based)bold, italic, underline, strikethrough: Text styling (optional)fontSize: Font size in points (optional)fontFamily: Font name (optional)foregroundColor: Text color (RGB 0-1) (optional)formatGoogleSlidesParagraph - Apply paragraph formatting
presentationId: Presentation IDobjectId: Element IDalignment: START, CENTER, END, or JUSTIFIED (optional)lineSpacing: Line spacing multiplier (optional)bulletStyle: NONE, DISC, ARROW, SQUARE, DIAMOND, STAR, or NUMBERED (optional)styleGoogleSlidesShape - Style shapes and elements
presentationId: Presentation IDobjectId: Shape IDbackgroundColor: Fill color (RGBA 0-1) (optional)outlineColor: Border color (RGB 0-1) (optional)outlineWeight: Border thickness in points (optional)outlineDashStyle: SOLID, DOT, DASH, DASH_DOT, LONG_DASH, or LONG_DASH_DOT (optional)setGoogleSlidesBackground - Set slide background color
presentationId: Presentation IDpageObjectIds: Array of slide IDsbackgroundColor: Background color (RGBA 0-1)createGoogleSlidesTextBox - Create formatted text box
presentationId: Presentation IDpageObjectId: Slide IDtext: Text contentx, y, width, height: Position/size in EMU (1/360000 cm)fontSize, bold, italic: Text formatting (optional)createGoogleSlidesShape - Create styled shape
presentationId: Presentation IDpageObjectId: Slide IDshapeType: RECTANGLE, ELLIPSE, DIAMOND, TRIANGLE, STAR, ROUND_RECTANGLE, or ARROWx, y, width, height: Position/size in EMUbackgroundColor: Fill color (RGBA 0-1) (optional)getGoogleSlidesSpeakerNotes - Get speaker notes from a slide
presentationId: Presentation IDslideIndex: Slide index (0-based)updateGoogleSlidesSpeakerNotes - Update or set speaker notes for a slide
presentationId: Presentation IDslideIndex: Slide index (0-based)notes: The speaker notes content to setlistCalendars - List all accessible Google Calendars
showHidden: Include hidden calendars (optional, default: false)getCalendarEvents - Get events from a calendar with optional filtering
calendarId: Calendar ID (optional, default: primary)timeMin: Start of time range, RFC3339 (optional, e.g., '2024-01-01T00:00:00Z')timeMax: End of time range, RFC3339 (optional)query: Free text search in events (optional)maxResults: Maximum events to return, 1-250 (optional, default: 50)singleEvents: Expand recurring events into instances (optional, default: true)orderBy: Sort order — startTime or updated (optional, default: startTime)getCalendarEvent - Get a single calendar event by ID
eventId: Event IDcalendarId: Calendar ID (optional, default: primary)createCalendarEvent - Create a new calendar event with Google Meet support
summary: Event titlestart: Start time (dateTime for timed events, date for all-day, optional timeZone)end: End time (same format as start)calendarId: Calendar ID (optional, default: primary)description: Event description (optional)location: Event location (optional)attendees: Array of email addresses (optional)sendUpdates: all, externalOnly, or none (optional, default: none)conferenceType: hangoutsMeet to add Google Meet link (optional)recurrence: Array of RRULE strings for recurring events (optional)visibility: default, public, private, or confidential (optional)updateCalendarEvent - Update an existing calendar event
eventId: Event IDcalendarId: Calendar ID (optional, default: primary)summary, description, location: Updated fields (optional)start, end: Updated times (optional)attendees: Updated attendee emails, replaces existing (optional)sendUpdates: all, externalOnly, or none (optional, default: none)deleteCalendarEvent - Delete a calendar event
eventId: Event IDcalendarId: Calendar ID (optional, default: primary)sendUpdates: Send cancellation notifications (optional, default: none)The server uses OAuth 2.0 for secure authentication:
~/.config/google-drive-mcp/tokens.jsonRun the auth command when you need to:
# Using npx
npx @piotr-agier/google-drive-mcp auth
# Using local installation
npm run auth
Never commit credentials: Add to .gitignore:
gcp-oauth.keys.json
client_secret*.json
.config/
Use environment variables for production:
export GOOGLE_DRIVE_OAUTH_CREDENTIALS="/secure/path/credentials.json"
export GOOGLE_DRIVE_MCP_TOKEN_PATH="/secure/path/tokens.json"
Monitor access:
If you need to revoke the Google Drive MCP's access to your Google account:
rm ~/.config/google-drive-mcp/tokens.json
After revoking access, you'll need to re-authenticate the next time you use the server.
OAuth credentials not found. Please provide credentials using one of these methods:
1. Environment variable:
export GOOGLE_DRIVE_OAUTH_CREDENTIALS="/path/to/gcp-oauth.keys.json"
2. Default file path:
Place your gcp-oauth.keys.json file in the package root directory.
Solution:
Possible causes:
Solution:
# Check if ports are in use
lsof -i :3000-3004
# Kill processes if needed
kill -9 <PID>
# Re-run authentication
npx @piotr-agier/google-drive-mcp auth
For Google OAuth apps in "Testing" status:
Solution:
# Clear old tokens and re-authenticate
rm ~/.config/google-drive-mcp/tokens.json
npx @piotr-agier/google-drive-mcp auth
For production:
If you updated the OAuth scopes but still get errors:
Solution:
rm ~/.config/google-drive-mcp/tokens.jsonError: Google Sheets API has not been used in project...
Solution:
Check scopes in your credentials:
Solution:
Google API Quotas:
Solution:
Problem: The MCP server in Docker shows authentication errors even though you have valid tokens.
Cause: OAuth flow requires browser access, which isn't available in Docker containers.
Solution:
# 1. Authenticate outside Docker first
npx @piotr-agier/google-drive-mcp auth
# 2. Verify tokens exist
ls -la ~/.config/google-drive-mcp/tokens.json
# 3. Run Docker with tokens mounted
docker run -it \
-v $(pwd)/gcp-oauth.keys.json:/config/gcp-oauth.keys.json:ro \
-v ~/.config/google-drive-mcp/tokens.json:/config/tokens.json \
google-drive-mcp
Problem: Docker build fails with tsc: not found or similar errors.
Solution:
# Build the project locally first
npm install
npm run build
# Then build Docker image
docker build -t google-drive-mcp .
The Dockerfile expects the dist/ directory to exist from your local build.
Problem: Tokens can't refresh inside the container.
Solution: Ensure the token file is mounted with write permissions:
# Correct: tokens can be updated
-v ~/.config/google-drive-mcp/tokens.json:/config/tokens.json
# Wrong: read-only mount prevents token refresh
-v ~/.config/google-drive-mcp/tokens.json:/config/tokens.json:ro
Enable detailed logging:
# Set debug environment variable
export DEBUG=google-drive-mcp:*
npx @piotr-agier/google-drive-mcp
npx @piotr-agier/google-drive-mcp helpnpx @piotr-agier/google-drive-mcp authgoogle-drive-mcp/
├── src/ # Source code
│ ├── index.ts # Main server implementation
│ ├── auth.ts # Main authentication module
│ ├── auth/ # Authentication components
│ │ ├── client.ts # OAuth2 client setup
│ │ ├── server.ts # Local auth server
│ │ ├── tokenManager.ts # Token storage and validation
│ │ └── utils.ts # Auth utilities
│ ├── tools/ # Tool implementations by service
│ │ ├── drive.ts # File management tools
│ │ ├── docs.ts # Google Docs tools
│ │ ├── sheets.ts # Google Sheets tools
│ │ ├── slides.ts # Google Slides tools
│ │ └── calendar.ts # Google Calendar tools
│ ├── utils.ts # Shared utility functions
│ ├── types.ts # TypeScript type definitions
│ └── download-file.ts # File download helper
├── dist/ # Compiled JavaScript (generated)
├── scripts/ # Build scripts
│ └── build.js # Custom build script
├── gcp-oauth.keys.json # OAuth credentials (create from example)
├── gcp-oauth.keys.example.json # Example credentials file
├── package.json # NPM package configuration
├── tsconfig.json # TypeScript configuration
├── LICENSE # MIT license
└── README.md # This file
npm run build # Compile TypeScript
npm run watch # Compile and watch for changes
npm run typecheck # Type checking without compilation
npm start - Start the compiled servernpm run auth - Run authentication flownpm run build - Build the project (runs typecheck + custom build script)npm run watch - Build and watch for changesnpm run typecheck - Run TypeScript type checking onlynpm run lint - Run TypeScript type checking (alias for typecheck)npm run prepare - Auto-runs build before npm publishnpm test - Run tests (placeholder - no tests implemented yet)Credentials (required - use one of these methods):
| Variable | Description | Example |
|----------|-------------|---------|
| GOOGLE_DRIVE_OAUTH_CREDENTIALS | Path to your OAuth credentials JSON file | /home/user/secrets/oauth.json |
| (or place file at) | Default location: gcp-oauth.keys.json in project root | ./gcp-oauth.keys.json |
Optional (for customization):
| Variable | Description | Default | Example |
|----------|-------------|---------|---------|
| GOOGLE_DRIVE_MCP_TOKEN_PATH | Override token storage location | ~/.config/google-drive-mcp/tokens.json | /custom/path/tokens.json |
| DEBUG | Enable debug logging | (disabled) | google-drive-mcp:* |
These are standard system environment variables that the application reads but you typically don't need to set:
| Variable | Description | Used For |
|----------|-------------|----------|
| XDG_CONFIG_HOME | Linux/Unix config directory standard | Determining default token storage location |
| NODE_ENV | Node.js environment mode | May affect error handling and logging |
| Variable | Description |
|----------|-------------|
| GOOGLE_TOKEN_PATH | Legacy token path - use GOOGLE_DRIVE_MCP_TOKEN_PATH instead |
| GOOGLE_CLIENT_SECRET_PATH | Legacy credentials path - use GOOGLE_DRIVE_OAUTH_CREDENTIALS instead |
MIT - See LICENSE file for details
Contributions are welcome! Please:
git checkout -b feature/amazing-feature)git commit -m 'Add amazing feature')git push origin feature/amazing-feature)Machine endpoints, protocol fit, contract coverage, invocation examples, and guardrails for agent-to-agent use.
Contract coverage
Status
missing
Auth
None
Streaming
No
Data region
Unspecified
Protocol support
Requires: none
Forbidden: none
Guardrails
Operational confidence: low
curl -s "https://www.xpersona.co/api/v1/agents/mcp-piotr-agier-google-drive-mcp/snapshot"
curl -s "https://www.xpersona.co/api/v1/agents/mcp-piotr-agier-google-drive-mcp/contract"
curl -s "https://www.xpersona.co/api/v1/agents/mcp-piotr-agier-google-drive-mcp/trust"
Trust and runtime signals, benchmark suites, failure patterns, and practical risk constraints.
Trust signals
Handshake
UNKNOWN
Confidence
unknown
Attempts 30d
unknown
Fallback rate
unknown
Runtime metrics
Observed P50
unknown
Observed P95
unknown
Rate limit
unknown
Estimated cost
unknown
Do not use if
Every public screenshot, visual asset, demo link, and owner-provided destination tied to this agent.
Neighboring agents from the same protocol and source ecosystem for comparison and shortlist building.
Structured website and review evidence for AI-assisted local-business shortlisting.
Loan & mortgage calculator, compound interest, ROI, crypto prices, FX conversion for AI agents.
Search ReliefWeb humanitarian reports, disasters, jobs, training, and country profiles via MCP.
63 production tools for AI agents — one API key, pay per call in USDC (x402) or Stripe credits.
Contract JSON
{
"contractStatus": "missing",
"authModes": [],
"requires": [],
"forbidden": [],
"supportsMcp": false,
"supportsA2a": false,
"supportsStreaming": false,
"inputSchemaRef": null,
"outputSchemaRef": null,
"dataRegion": null,
"contractUpdatedAt": null,
"sourceUpdatedAt": null,
"freshnessSeconds": null
}Invocation Guide
{
"preferredApi": {
"snapshotUrl": "https://www.xpersona.co/api/v1/agents/mcp-piotr-agier-google-drive-mcp/snapshot",
"contractUrl": "https://www.xpersona.co/api/v1/agents/mcp-piotr-agier-google-drive-mcp/contract",
"trustUrl": "https://www.xpersona.co/api/v1/agents/mcp-piotr-agier-google-drive-mcp/trust"
},
"curlExamples": [
"curl -s \"https://www.xpersona.co/api/v1/agents/mcp-piotr-agier-google-drive-mcp/snapshot\"",
"curl -s \"https://www.xpersona.co/api/v1/agents/mcp-piotr-agier-google-drive-mcp/contract\"",
"curl -s \"https://www.xpersona.co/api/v1/agents/mcp-piotr-agier-google-drive-mcp/trust\""
],
"jsonRequestTemplate": {
"query": "summarize this repo",
"constraints": {
"maxLatencyMs": 2000,
"protocolPreference": [
"MCP"
]
}
},
"jsonResponseTemplate": {
"ok": true,
"result": {
"summary": "...",
"confidence": 0.9
},
"meta": {
"source": "GITHUB_MCP",
"generatedAt": "2026-10-09T03:44:42.670Z"
}
},
"retryPolicy": {
"maxAttempts": 3,
"backoffMs": [
500,
1500,
3500
],
"retryableConditions": [
"HTTP_429",
"HTTP_503",
"NETWORK_TIMEOUT"
]
}
}Trust JSON
{
"status": "unavailable",
"handshakeStatus": "UNKNOWN",
"verificationFreshnessHours": null,
"reputationScore": null,
"p95LatencyMs": null,
"successRate30d": null,
"fallbackRate": null,
"attempts30d": null,
"trustUpdatedAt": null,
"trustConfidence": "unknown",
"sourceUpdatedAt": null,
"freshnessSeconds": null
}Capability Matrix
{
"rows": [
{
"key": "MCP",
"type": "protocol",
"support": "unknown",
"confidenceSource": "profile",
"notes": "Listed on profile"
},
{
"key": "mcp",
"type": "capability",
"support": "supported",
"confidenceSource": "profile",
"notes": "Declared in agent profile metadata"
},
{
"key": "model-context-protocol",
"type": "capability",
"support": "supported",
"confidenceSource": "profile",
"notes": "Declared in agent profile metadata"
},
{
"key": "claude",
"type": "capability",
"support": "supported",
"confidenceSource": "profile",
"notes": "Declared in agent profile metadata"
},
{
"key": "google-drive",
"type": "capability",
"support": "supported",
"confidenceSource": "profile",
"notes": "Declared in agent profile metadata"
},
{
"key": "google-docs",
"type": "capability",
"support": "supported",
"confidenceSource": "profile",
"notes": "Declared in agent profile metadata"
},
{
"key": "google-sheets",
"type": "capability",
"support": "supported",
"confidenceSource": "profile",
"notes": "Declared in agent profile metadata"
},
{
"key": "google-slides",
"type": "capability",
"support": "supported",
"confidenceSource": "profile",
"notes": "Declared in agent profile metadata"
},
{
"key": "google-workspace",
"type": "capability",
"support": "supported",
"confidenceSource": "profile",
"notes": "Declared in agent profile metadata"
},
{
"key": "ai",
"type": "capability",
"support": "supported",
"confidenceSource": "profile",
"notes": "Declared in agent profile metadata"
},
{
"key": "llm",
"type": "capability",
"support": "supported",
"confidenceSource": "profile",
"notes": "Declared in agent profile metadata"
},
{
"key": "integration",
"type": "capability",
"support": "supported",
"confidenceSource": "profile",
"notes": "Declared in agent profile metadata"
},
{
"key": "oauth2",
"type": "capability",
"support": "supported",
"confidenceSource": "profile",
"notes": "Declared in agent profile metadata"
},
{
"key": "file-management",
"type": "capability",
"support": "supported",
"confidenceSource": "profile",
"notes": "Declared in agent profile metadata"
},
{
"key": "document-automation",
"type": "capability",
"support": "supported",
"confidenceSource": "profile",
"notes": "Declared in agent profile metadata"
},
{
"key": "cli",
"type": "capability",
"support": "supported",
"confidenceSource": "profile",
"notes": "Declared in agent profile metadata"
}
],
"flattenedTokens": "protocol:MCP|unknown|profile capability:mcp|supported|profile capability:model-context-protocol|supported|profile capability:claude|supported|profile capability:google-drive|supported|profile capability:google-docs|supported|profile capability:google-sheets|supported|profile capability:google-slides|supported|profile capability:google-workspace|supported|profile capability:ai|supported|profile capability:llm|supported|profile capability:integration|supported|profile capability:oauth2|supported|profile capability:file-management|supported|profile capability:document-automation|supported|profile capability:cli|supported|profile"
}Facts JSON
[
{
"factKey": "vendor",
"category": "vendor",
"label": "Vendor",
"value": "Piotragier",
"href": "https://piotragier.net",
"sourceUrl": "https://piotragier.net",
"sourceType": "profile",
"confidence": "medium",
"observedAt": "2026-02-25T02:58:13.622Z",
"isPublic": true
},
{
"factKey": "protocols",
"category": "compatibility",
"label": "Protocol compatibility",
"value": "MCP",
"href": "https://www.xpersona.co/api/v1/agents/mcp-piotr-agier-google-drive-mcp/contract",
"sourceUrl": "https://www.xpersona.co/api/v1/agents/mcp-piotr-agier-google-drive-mcp/contract",
"sourceType": "contract",
"confidence": "medium",
"observedAt": "2026-02-25T02:58:13.622Z",
"isPublic": true
},
{
"factKey": "traction",
"category": "adoption",
"label": "Adoption signal",
"value": "39 GitHub stars",
"href": "https://github.com/piotr-agier/google-drive-mcp",
"sourceUrl": "https://github.com/piotr-agier/google-drive-mcp",
"sourceType": "profile",
"confidence": "medium",
"observedAt": "2026-02-25T02:58:13.622Z",
"isPublic": true
},
{
"factKey": "handshake_status",
"category": "security",
"label": "Handshake status",
"value": "UNKNOWN",
"href": "https://www.xpersona.co/api/v1/agents/mcp-piotr-agier-google-drive-mcp/trust",
"sourceUrl": "https://www.xpersona.co/api/v1/agents/mcp-piotr-agier-google-drive-mcp/trust",
"sourceType": "trust",
"confidence": "medium",
"observedAt": null,
"isPublic": true
}
]Change Events JSON
[]
Sponsored
Ads related to @piotr-agier/google-drive-mcp and adjacent AI workflows.