UNPKG

@emit-ia/gdrive-mcp-server

Version:

Google Drive MCP Server - Model Context Protocol server for Google Drive and Gmail APIs

203 lines (142 loc) 6.33 kB
# Google Drive & Gmail MCP Server Model Context Protocol server for Google Drive and Gmail APIs with hybrid authentication. ## Key Features - **Hybrid Authentication**: Service Account (Drive) + OAuth2 (Gmail) - **Automatic Token Management**: Prevents 6-month Gmail token expiration - **Complete API Coverage**: Full Google Drive and Gmail functionality - **Intelligent Rate Limiting**: Automatic Gmail API rate limit management - **Batch Processing**: Efficient processing of large Gmail accounts (34K+ messages) - **Smart Analysis**: Pre-built analysis tools for common Gmail operations ## API Coverage **Google Drive**: Files, folders, sharing, search, comments, revisions, account info **Gmail**: Messages, sending, search, read/unread, profile, token management ## Installation ```bash # Global installation npm install -g gdrive-mcp-server # Or run directly with npx (recommended) npx gdrive-mcp-server # Or local development git clone https://github.com/igoralmeida1993/gdrive-mcp.git cd gdrive-mcp npm install && npm run build ``` ## Setup ### 1. Google Cloud Console Setup 1. Go to the [Google Cloud Console](https://console.cloud.google.com/) 2. Create a new project or select an existing one 3. Enable the Google Drive API: - Go to "APIs & Services" > "Library" - Search for "Google Drive API" - Click "Enable" ### 2. Create Credentials **Service Account** (for Google Drive): 1. Google Cloud Console > "Credentials" > "Service Account" 2. Download JSON key, extract `client_email` and `private_key` **OAuth 2.0** (for Gmail): 1. Google Cloud Console > "Credentials" > "OAuth 2.0 Client IDs" 2. Desktop application type 3. Generate refresh token via [OAuth Playground](https://developers.google.com/oauthplayground) > See [HYBRID-AUTH-SETUP.md](./HYBRID-AUTH-SETUP.md) for detailed steps. ### 3. Configure Environment ```bash cp env.example .env # Edit .env with your credentials ``` ## Environment Variables (.env file) ```bash # Google Drive & Gmail MCP Server Configuration # Get these from Google Cloud Console (https://console.cloud.google.com/) # OAuth 2.0 Credentials (REQUIRED for Gmail functionality) GOOGLE_CLIENT_ID=your_client_id_here.apps.googleusercontent.com GOOGLE_CLIENT_SECRET=your_client_secret_here GOOGLE_REDIRECT_URI=https://developers.google.com/oauthplayground GOOGLE_REFRESH_TOKEN=your_refresh_token_here # Service Account Credentials (REQUIRED for Google Drive functionality) GOOGLE_SERVICE_ACCOUNT_EMAIL=your-service-account@your-project.iam.gserviceaccount.com GOOGLE_PRIVATE_KEY="-----BEGIN PRIVATE KEY-----\nYour private key here\n-----END PRIVATE KEY-----" # MCP Server Configuration MCP_SERVER_NAME=gdrive-mcp-server MCP_SERVER_VERSION=1.0.0 # Optional: Default folder to operate in (leave empty for root) DEFAULT_FOLDER_ID= # Optional: File size limits (in bytes) MAX_FILE_SIZE=104857600 # 100MB default ``` ## Usage ### Running the Server ```bash # If installed globally gdrive-mcp-server # If running from source npm start # For development npm run dev ``` ### 4. MCP Client Configuration Claude Desktop configuration: ```json { "mcpServers": { "google-workspace": { "command": "npx", "args": ["gdrive-mcp-server"], "env": { "GOOGLE_CLIENT_ID": "your_client_id", "GOOGLE_CLIENT_SECRET": "your_client_secret", "GOOGLE_REFRESH_TOKEN": "your_refresh_token", "GOOGLE_SERVICE_ACCOUNT_EMAIL": "your-service-account@project.iam.gserviceaccount.com", "GOOGLE_PRIVATE_KEY": "-----BEGIN PRIVATE KEY-----\nYour private key\n-----END PRIVATE KEY-----" } } } } ``` ## Available Tools **Google Drive**: `gdrive_list_files`, `gdrive_get_file`, `gdrive_download_file`, `gdrive_upload_file`, `gdrive_update_file`, `gdrive_delete_file`, `gdrive_copy_file`, `gdrive_move_file`, `gdrive_create_folder`, `gdrive_get_folder_info`, `gdrive_share_file`, `gdrive_get_permissions`, `gdrive_remove_permission`, `gdrive_search`, `gdrive_get_recent_files`, `gdrive_get_comments`, `gdrive_add_comment`, `gdrive_get_revisions`, `gdrive_get_about`, `gdrive_empty_trash` **Gmail**: `gmail_list_messages`, `gmail_get_message`, `gmail_send_message`, `gmail_search_messages`, `gmail_mark_as_read`, `gmail_mark_as_unread`, `gmail_get_profile`, `gmail_check_token_status`, `gmail_refresh_token`, `gmail_batch_process_messages`, `gmail_smart_analysis` ## Usage Examples ```javascript // List Drive files { "tool": "gdrive_list_files", "arguments": { "maxResults": 50 } } // Upload file { "tool": "gdrive_upload_file", "arguments": { "name": "test.txt", "content": "Hello" } } // Send email { "tool": "gmail_send_message", "arguments": { "to": "user@example.com", "subject": "Test", "body": "Hello!" } } // Search emails { "tool": "gmail_search_messages", "arguments": { "query": "is:unread", "maxResults": 10 } } // Smart analysis for large accounts { "tool": "gmail_smart_analysis", "arguments": { "analysisType": "recent", "maxMessages": 500, "daysBack": 7 } } // Batch process specific messages { "tool": "gmail_batch_process_messages", "arguments": { "messageIds": ["id1", "id2"], "batchSize": 20 } } ``` ## Security - Never commit `.env` files to version control - Use environment variables in production - Server automatically refreshes Gmail tokens - Use minimal required OAuth scopes ## Troubleshooting ### Common Issues - **"Gmail requires OAuth2"**: Set OAuth credentials in .env - **"Drive requires Service Account"**: Set Service Account credentials in .env - **Authentication Error**: Verify credentials and enable APIs in Google Cloud Console - **Token Expired**: Use `gmail_check_token_status` and `gmail_refresh_token` ### Help - [HYBRID-AUTH-SETUP.md](./HYBRID-AUTH-SETUP.md) - Detailed setup guide - [Google Drive API Docs](https://developers.google.com/drive/api) - [Gmail API Docs](https://developers.google.com/gmail/api) ## Development ```bash # Install dependencies npm install # Run in development mode npm run dev # Build npm run build # Run tests (if available) npm test ``` ## License MIT License - see LICENSE file for details ## License MIT