MCP Google Workspace Server

by j3k0
# MCP Google Workspace Server A Model Context Protocol server for Google Workspace services. This server provides tools to interact with Gmail and Google Calendar through the MCP protocol. ## Features - **Multiple Google Account Support** - Use and switch between multiple Google accounts - Each account can have custom metadata and descriptions - **Gmail Integration** - Query emails with advanced search - Read full email content and attachments - Create and manage drafts - Reply to emails - Archive emails - Handle attachments - Bulk operations support - **Calendar Integration** - List available calendars - View calendar events - Create new events - Delete events - Support for multiple calendars - Custom timezone support ## Example Prompts Try these example prompts with your AI assistant: ### Gmail - "Retrieve my latest unread messages" - "Search my emails from the Scrum Master" - "Retrieve all emails from accounting" - "Take the email about ABC and summarize it" - "Write a nice response to Alice's last email and upload a draft" - "Reply to Bob's email with a Thank you note. Store it as draft" ### Calendar - "What do I have on my agenda tomorrow?" - "Check my private account's Family agenda for next week" - "I need to plan an event with Tim for 2hrs next week. Suggest some time slots" ## Prerequisites - Node.js >= 18 - A Google Cloud project with Gmail and Calendar APIs enabled - OAuth 2.0 credentials for Google APIs ## Installation 1. Clone the repository: ```bash git clone https://github.com/j3k0/mcp-google-workspace.git cd mcp-google-workspace ``` 2. Install dependencies: ```bash npm install ``` 3. Build the TypeScript code: ```bash npm run build ``` ## Configuration ### OAuth 2.0 Setup Google Workspace (G Suite) APIs require OAuth2 authorization. Follow these steps to set up authentication: 1. Create OAuth2 Credentials: - Go to the [Google Cloud Console](https://console.cloud.google.com/) - Create a new project or select an existing one - Enable the Gmail API and Google Calendar API for your project - Go to "Credentials" → "Create Credentials" → "OAuth client ID" - Select "Desktop app" or "Web application" as the application type - Configure the OAuth consent screen with required information - Add authorized redirect URIs (include `http://localhost:4100/code` for local development) 2. Required OAuth2 Scopes: ```json [ "openid", "https://mail.google.com/", "https://www.googleapis.com/auth/calendar", "https://www.googleapis.com/auth/userinfo.email" ] ``` 3. Create a `.gauth.json` file in the project root with your Google OAuth 2.0 credentials: ```json { "installed": { "client_id": "your_client_id", "project_id": "your_project_id", "auth_uri": "https://accounts.google.com/o/oauth2/auth", "token_uri": "https://oauth2.googleapis.com/token", "auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs", "client_secret": "your_client_secret", "redirect_uris": ["http://localhost:4100/code"] } } ``` 4. Create a `.accounts.json` file to specify which Google accounts can use the server: ```json { "accounts": [ { "email": "your.email@gmail.com", "account_type": "personal", "extra_info": "Primary account with Family Calendar" } ] } ``` You can specify multiple accounts. Make sure they have access in your Google Auth app. The `extra_info` field is especially useful as you can add information here that you want to tell the AI about the account (e.g., whether it has a specific calendar). ### Claude Desktop Configuration Configure Claude Desktop to use the mcp-google-workspace server: On MacOS: Edit `~/Library/Application\ Support/Claude/claude_desktop_config.json` On Windows: Edit `%APPDATA%/Claude/claude_desktop_config.json` <details> <summary>Development/Unpublished Servers Configuration</summary> ```json { "mcpServers": { "mcp-google-workspace": { "command": "<dir_to>/mcp-google-workspace/launch" } } } ``` </details> <details> <summary>Published Servers Configuration</summary> ```json { "mcpServers": { "mcp-google-workspace": { "command": "npx", "args": [ "mcp-google-workspace" ] } } } ``` </details> ## Usage 1. Start the server: ```bash npm start ``` Optional arguments: - `--gauth-file`: Path to the OAuth2 credentials file (default: ./.gauth.json) - `--accounts-file`: Path to the accounts configuration file (default: ./.accounts.json) - `--credentials-dir`: Directory to store OAuth credentials (default: current directory) 2. The server will start and listen for MCP commands via stdin/stdout. 3. On first run for each account, it will: - Open a browser window for OAuth2 authentication - Listen on port 4100 for the OAuth2 callback - Store the credentials for future use in a file named `.oauth2.{email}.json` ## Available Tools ### Account Management 1. `gmail_list_accounts` / `calendar_list_accounts` - List all configured Google accounts - View account metadata and descriptions - No user_id required ### Gmail Tools 1. `gmail_query_emails` - Search emails with Gmail's query syntax (e.g., 'is:unread', 'from:example@gmail.com', 'newer_than:2d', 'has:attachment') - Returns emails in reverse chronological order - Includes metadata and content summary 2. `gmail_get_email` - Retrieve complete email content by ID - Includes full message body and attachment info 3. `gmail_bulk_get_emails` - Retrieve multiple emails by ID in a single request - Efficient for batch processing 4. `gmail_create_draft` - Create new email drafts - Support for CC recipients 5. `gmail_delete_draft` - Delete draft emails by ID 6. `gmail_reply` - Reply to existing emails - Option to send immediately or save as draft - Support for "Reply All" via CC 7. `gmail_get_attachment` - Download email attachments - Save to disk or return as embedded resource 8. `gmail_bulk_save_attachments` - Save multiple attachments in a single operation 9. `gmail_archive` / `gmail_bulk_archive` - Move emails out of inbox - Support for individual or bulk operations ### Calendar Tools 1. `calendar_list` - List all accessible calendars - Includes calendar metadata, access roles, and timezone information 2. `calendar_get_events` - Retrieve events in a date range - Support for multiple calendars - Filter options (deleted events, max results) - Timezone customization 3. `calendar_create_event` - Create new calendar events - Support for attendees and notifications - Location and description fields - Timezone handling 4. `calendar_delete_event` - Delete events by ID - Option for cancellation notifications ## Development - Source code is in TypeScript under the `src/` directory - Build output goes to `dist/` directory - Uses ES modules for better modularity - Follows Google API best practices ### Project Structure ``` mcp-google-workspace/ ├── src/ │ ├── server.ts # Main server implementation │ ├── services/ │ │ └── gauth.ts # Google authentication service │ ├── tools/ │ │ ├── gmail.ts # Gmail tools implementation │ │ └── calendar.ts # Calendar tools implementation │ └── types/ │ └── tool-handler.ts # Common types and interfaces ├── .gauth.json # OAuth2 credentials ├── .accounts.json # Account configuration ├── package.json # Project dependencies └── tsconfig.json # TypeScript configuration ``` ### Development Commands - `npm run build`: Build TypeScript code - `npm start`: Start the server - `npm run dev`: Start in development mode with auto-reload ## Contributing 1. Fork the repository 2. Create a feature branch 3. Commit your changes 4. Push to the branch 5. Create a Pull Request ## License MIT License - see LICENSE file for details