{"_id":"@eebrami/google-workspace-mcp","_rev":"2-00b7c78c2cb910b7d03193a22f351a21","name":"@eebrami/google-workspace-mcp","dist-tags":{"latest":"1.0.1"},"versions":{"1.0.0":{"name":"@eebrami/google-workspace-mcp","version":"1.0.0","keywords":["mcp","model-context-protocol","google-workspace","gmail","calendar","drive","docs","sheets","chat","claude"],"author":{"name":"Presto AI"},"license":"MIT","_id":"@eebrami/google-workspace-mcp@1.0.0","maintainers":[{"name":"eebrami","email":"ebrahim.ebrami@gmail.com"}],"homepage":"https://github.com/jrenaldi79/google-workspace-mcp#readme","bugs":{"url":"https://github.com/jrenaldi79/google-workspace-mcp/issues"},"bin":{"google-workspace-mcp":"bin/cli.js"},"dist":{"shasum":"a556b348fdb42b22f152231963f34f41b7f20c88","tarball":"https://registry.npmjs.org/@eebrami/google-workspace-mcp/-/google-workspace-mcp-1.0.0.tgz","fileCount":6,"integrity":"sha512-uBTq8kGuvJ5eGbQ1mHgduaQgzkim8lIy8q6CCilHGj5mfu+hysoEH7KbpTQt/7qd7rd7jzAX8Tqhl3dMoLVm3A==","signatures":[{"sig":"MEYCIQCRB8woXSx6tO3NuImgAb/EJEAH9/3ZyqcYoCX1aTJD2QIhAOq4RMS9NYffyFqJjtH9Navc2fmBZ2uGdxyVXngZAlbC","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":52913008},"main":"dist/index.js","type":"commonjs","gitHead":"af159763e6b0f16712ec5e873bab1cb2a90870d4","scripts":{"test":"node --max-old-space-size=4096 node_modules/jest/bin/jest.js --runInBand --verbose","build":"node esbuild.config.js && npm run build:bin","clean":"rm -rf dist node_modules","start":"ts-node src/index.ts","test:ci":"node --max-old-space-size=4096 node_modules/jest/bin/jest.js --ci --coverage --maxWorkers=2","build:bin":"chmod +x bin/cli.js","test:watch":"jest --watch","test:coverage":"node --max-old-space-size=4096 node_modules/jest/bin/jest.js --coverage","prepublishOnly":"npm run build","build:auth-utils":"node esbuild.auth-utils.js"},"_npmUser":{"name":"eebrami","email":"ebrahim.ebrami@gmail.com"},"repository":{"url":"git+https://github.com/jrenaldi79/google-workspace-mcp.git","type":"git"},"_npmVersion":"11.6.2","description":"NPM-distributable Google Workspace MCP server for Claude Desktop, Claude Code CLI, and Chatwise","directories":{},"_nodeVersion":"25.2.1","dependencies":{"zod":"^3.22.4","jsdom":"^23.0.0","gaxios":"^6.1.1","keytar":"^7.9.0","marked":"^12.0.0","dompurify":"^3.0.6","googleapis":"^140.0.0","google-auth-library":"^9.0.0","@modelcontextprotocol/sdk":"^1.0.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"esbuild":"^0.27.1","typescript":"^5.3.0","@types/node":"^20.0.0"},"_npmOperationalInternal":{"tmp":"tmp/google-workspace-mcp_1.0.0_1786426300531_0.9926085534290594","host":"s3://npm-registry-packages-npm-production"}},"1.0.1":{"name":"@eebrami/google-workspace-mcp","version":"1.0.1","description":"NPM-distributable Google Workspace MCP server for Claude Desktop, Claude Code CLI, and Chatwise","main":"dist/index.js","bin":{"google-workspace-mcp":"bin/cli.js"},"scripts":{"test":"node --max-old-space-size=4096 node_modules/jest/bin/jest.js --runInBand --verbose","test:watch":"jest --watch","test:coverage":"node --max-old-space-size=4096 node_modules/jest/bin/jest.js --coverage","test:ci":"node --max-old-space-size=4096 node_modules/jest/bin/jest.js --ci --coverage --maxWorkers=2","start":"ts-node src/index.ts","clean":"rm -rf dist node_modules","build":"node esbuild.config.js && npm run build:bin","build:bin":"chmod +x bin/cli.js","build:auth-utils":"node esbuild.auth-utils.js","prepublishOnly":"npm run build"},"keywords":["mcp","model-context-protocol","google-workspace","gmail","calendar","drive","docs","sheets","chat","claude"],"author":{"name":"Presto AI"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/jrenaldi79/google-workspace-mcp.git"},"type":"commonjs","publishConfig":{"access":"public"},"dependencies":{"@modelcontextprotocol/sdk":"^1.0.0","dompurify":"^3.0.6","gaxios":"^6.1.1","google-auth-library":"^9.0.0","googleapis":"^140.0.0","jsdom":"^23.0.0","keytar":"^7.9.0","marked":"^12.0.0","zod":"^3.22.4"},"devDependencies":{"esbuild":"^0.27.1","@types/node":"^20.0.0","typescript":"^5.3.0"},"gitHead":"ef6223ef0a9fff04fb78142732732317180630a3","_id":"@eebrami/google-workspace-mcp@1.0.1","bugs":{"url":"https://github.com/jrenaldi79/google-workspace-mcp/issues"},"homepage":"https://github.com/jrenaldi79/google-workspace-mcp#readme","_nodeVersion":"25.2.1","_npmVersion":"11.6.2","dist":{"integrity":"sha512-2Zfk2oMCwfvx8zwsHQymHcv4Q8xQts5GbsR0y35BZKERmq62CVIPU/MiPGTJWsb5AdPR4Nxy6y1/lLDVq4GAJg==","shasum":"f8c8e850887bdbfb4018a3578280383652a517d2","tarball":"https://registry.npmjs.org/@eebrami/google-workspace-mcp/-/google-workspace-mcp-1.0.1.tgz","fileCount":8,"unpackedSize":103627774,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCIBA/3Q2qrx5PVH35iJx++10m46yQWZQc7n2Tj/bpht7hAiAIRX0YLJzNlJ1NYbSG89qPY7EjFZrSMQxS3CaMYBF8Bg=="}]},"_npmUser":{"name":"eebrami","email":"ebrahim.ebrami@gmail.com"},"directories":{},"maintainers":[{"name":"eebrami","email":"ebrahim.ebrami@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/google-workspace-mcp_1.0.1_1786657298732_0.3337834663580024"},"_hasShrinkwrap":false}},"time":{"created":"2026-08-11T05:31:40.318Z","modified":"2026-08-13T21:41:39.194Z","1.0.0":"2026-08-11T05:31:40.780Z","1.0.1":"2026-08-13T21:41:39.032Z"},"bugs":{"url":"https://github.com/jrenaldi79/google-workspace-mcp/issues"},"author":{"name":"Presto AI"},"license":"MIT","homepage":"https://github.com/jrenaldi79/google-workspace-mcp#readme","keywords":["mcp","model-context-protocol","google-workspace","gmail","calendar","drive","docs","sheets","chat","claude"],"repository":{"type":"git","url":"git+https://github.com/jrenaldi79/google-workspace-mcp.git"},"description":"NPM-distributable Google Workspace MCP server for Claude Desktop, Claude Code CLI, and Chatwise","maintainers":[{"name":"eebrami","email":"ebrahim.ebrami@gmail.com"}],"readme":"# @presto-ai/google-workspace-mcp\n\n[![npm version](https://img.shields.io/npm/v/@presto-ai/google-workspace-mcp.svg)](https://www.npmjs.com/package/@presto-ai/google-workspace-mcp)\n[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)\n\nNPM-distributable Google Workspace MCP server for Claude Desktop, Claude Code CLI, and Chatwise. Interact with Gmail, Calendar, Drive, Docs, Sheets, Chat, and more through Claude.\n\n## Quick Start\n\n### 1. Authenticate\n\n```bash\nnpx @presto-ai/google-workspace-mcp --auth\n```\n\nThis opens your browser to authorize Google Workspace access. Your credentials will be saved securely.\n\n### 2. Configure Your MCP Client\n\n#### Claude Desktop\n\nEdit `~/Library/Application Support/Claude/claude_desktop_config.json`:\n\n```json\n{\n  \"mcpServers\": {\n    \"google-workspace\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"@presto-ai/google-workspace-mcp\"]\n    }\n  }\n}\n```\n\n#### Claude Code CLI\n\nEdit `~/.claude/config.json`:\n\n```json\n{\n  \"mcpServers\": {\n    \"google-workspace\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"@presto-ai/google-workspace-mcp\"]\n    }\n  }\n}\n```\n\n#### Chatwise\n\nConfigure server command in settings:\n```\nnpx -y @presto-ai/google-workspace-mcp\n```\n\n### 3. Restart Your MCP Client\n\nYour credentials are stored securely in:\n- **macOS/Linux**: `~/.config/google-workspace-mcp/`\n- **Windows**: `%APPDATA%/google-workspace-mcp/`\n\n## Features\n\n### Supported Google Workspace Services\n\n- **Gmail**: Search emails, read messages, send emails, create/manage drafts, modify labels\n- **Google Calendar**: List calendars, create/read/update/delete events, find free time, manage attendees\n- **Google Drive**: Search files, download documents, access metadata, organize by folders\n- **Google Docs**: Read document content, create documents, insert/append/replace text\n- **Google Sheets**: Read spreadsheet ranges, get metadata, append data\n- **Google Chat**: Send messages, read threads, create spaces, list members\n- **Google Slides**: Read presentations, extract text, get metadata\n- **Google People**: Get user profiles, retrieve contact information\n- **Time Utilities**: Get current date/time in any timezone\n\n### Available MCP Tools\n\nOnce connected, Claude has access to 40+ tools including:\n- `gmail.search` - Search emails with Gmail query syntax\n- `gmail.send` - Send emails directly\n- `calendar.createEvent` - Schedule meetings\n- `drive.search` - Find files in Google Drive\n- `docs.create` - Create new Google Docs\n- `docs.replaceText` - Update document content\n- `sheets.getRange` - Read spreadsheet data\n- `chat.sendMessage` - Send messages to Google Chat spaces\n- `people.getMe` - Get your profile information\n- And many more...\n\nSee [CLAUDE.md](./CLAUDE.md) for the complete list of available tools and their parameters.\n\n## Configuration\n\n### Environment Variables\n\n```bash\n# Override credential storage location (optional)\nexport GOOGLE_WORKSPACE_MCP_HOME=/custom/path/for/credentials\n\n# Enable debug logging (optional)\n# Run server with --debug flag\nnpx @presto-ai/google-workspace-mcp --debug\n```\n\n### Credential Storage\n\nCredentials are automatically encrypted and stored in platform-standard locations:\n\n| Platform | Location |\n|----------|----------|\n| macOS | `~/.config/google-workspace-mcp/` |\n| Linux | `~/.config/google-workspace-mcp/` |\n| Windows | `%APPDATA%/google-workspace-mcp/` |\n| Custom | `$GOOGLE_WORKSPACE_MCP_HOME/` (if set) |\n\nFiles stored:\n- `token.json` - Encrypted OAuth token\n- `.master-key` - Encryption master key (for file-based storage)\n\n**Security**: Credentials are encrypted using your machine's OS keychain (or encrypted file storage on Linux). They are never transmitted or logged.\n\n## Platform Support\n\n- ✅ macOS (tested on Sonoma, Ventura)\n- ✅ Linux (Ubuntu, Debian, Fedora)\n- ✅ Windows 10+\n- ✅ Works with any MCP-compatible client\n\n## Requirements\n\n- Node.js 18 or higher\n- npm 8 or higher\n- Active Google Account with Google Workspace access\n- Web browser for OAuth authentication (required once for --auth setup)\n\n## Troubleshooting\n\n### \"No valid credentials found\"\n\nRun authentication again:\n```bash\nnpx @presto-ai/google-workspace-mcp --auth\n```\n\n### Token refresh errors\n\nDelete the credentials and re-authenticate:\n```bash\nrm -rf ~/.config/google-workspace-mcp  # macOS/Linux\nrmdir %APPDATA%\\google-workspace-mcp   # Windows\n\nnpx @presto-ai/google-workspace-mcp --auth\n```\n\n### Server won't start\n\n1. Ensure you've run `--auth` first\n2. Check that credentials file exists in your config directory\n3. Verify file permissions (should be readable by your user)\n4. Check logs: Run with `--debug` flag to see detailed error messages\n\n### Browser won't open during --auth\n\nIf the OAuth browser doesn't open automatically:\n1. The auth flow will provide a manual URL to visit\n2. Visit the URL in your browser manually\n3. Complete the OAuth consent\n4. Return to the terminal to finish setup\n\n### \"libsecret-1-dev\" errors on Linux\n\nIf you see \"Could not find keytar module\":\n```bash\n# Install required system libraries\nsudo apt-get install libsecret-1-dev  # Debian/Ubuntu\nsudo dnf install libsecret-devel      # Fedora/RHEL\n\n# Reinstall npm dependencies\nrm -rf node_modules/\nnpm install\n```\n\nFor more detailed troubleshooting, see [TESTING.md](./TESTING.md#troubleshooting).\n\n## Documentation\n\n- **[TESTING.md](./TESTING.md)** - Complete testing guide, pre-publish checklist, integration tests\n- **[CONTRIBUTING.md](./CONTRIBUTING.md)** - Developer guide, syncing with upstream, code standards\n- **[CLAUDE.md](./CLAUDE.md)** - Architecture overview, available tools, development patterns\n\n## Usage Examples\n\n### Search emails and draft a response\n\n```\nUser: Search my unread emails from the past week and draft a response to the most recent one from boss@company.com\n```\n\nClaude will:\n1. Search your Gmail for unread emails from the past week\n2. Find the most recent one from boss@company.com\n3. Use `gmail.createDraft` to create a draft response\n\n### Schedule a meeting\n\n```\nUser: Schedule a 1-hour meeting with alice@company.com and bob@company.com next Tuesday at 2 PM about Q1 planning\n```\n\nClaude will:\n1. Use `calendar.findFreeTime` to check availability\n2. Use `calendar.createEvent` to schedule the meeting\n3. Automatically add attendees and send invitations\n\n### Create a document with spreadsheet data\n\n```\nUser: Export last quarter's sales data from my spreadsheet to a new Google Doc\n```\n\nClaude will:\n1. Search for the spreadsheet using `drive.search`\n2. Read the data with `sheets.getRange`\n3. Create a new Doc with `docs.create`\n4. Format and insert the data\n\n## Advanced Configuration\n\n### Use in Docker\n\n```dockerfile\nFROM node:18-alpine\nRUN npm install -g @presto-ai/google-workspace-mcp\n\n# Run authentication\nRUN npx @presto-ai/google-workspace-mcp --auth\n\n# Start server\nCMD [\"npx\", \"@presto-ai/google-workspace-mcp\"]\n```\n\n### Custom credential location\n\n```bash\n# Set custom location for credentials\nexport GOOGLE_WORKSPACE_MCP_HOME=/secure/storage/location\n\n# Run authentication (will use custom location)\nnpx @presto-ai/google-workspace-mcp --auth\n\n# Verify credentials saved\nls -la $GOOGLE_WORKSPACE_MCP_HOME/\n```\n\n### Multiple Google accounts\n\nTo use multiple Google accounts:\n```bash\n# Account 1\nexport GOOGLE_WORKSPACE_MCP_HOME=~/.config/gws-account1/\nnpx @presto-ai/google-workspace-mcp --auth\n\n# Account 2\nexport GOOGLE_WORKSPACE_MCP_HOME=~/.config/gws-account2/\nnpx @presto-ai/google-workspace-mcp --auth\n\n# Switch between accounts by setting the environment variable\n```\n\n## Performance & Limitations\n\n- **Startup time**: ~500ms to establish MCP connection\n- **OAuth tokens**: Automatically refresh with 5-minute buffer\n- **API rate limits**: Subject to Google Workspace API quotas\n- **Concurrent requests**: Handled by MCP protocol\n- **Offline mode**: Not supported (requires internet connection)\n\n## Troubleshooting Advanced Issues\n\n### \"Token refresh failed\"\n\n```bash\n# Clear credentials and re-authenticate\nrm -rf ~/.config/google-workspace-mcp/\nnpx @presto-ai/google-workspace-mcp --auth\n```\n\n### \"403 Forbidden\" errors\n\nUsually means:\n1. Your Google account doesn't have access to requested resource\n2. Permissions weren't granted during `--auth`\n3. Re-run `--auth` and ensure you grant all permissions\n\n### \"Service temporarily unavailable\"\n\nUsually a temporary Google API outage:\n1. Wait a few minutes and try again\n2. Check [Google Workspace Status Dashboard](https://www.google.com/appsstatus)\n\n## Security & Privacy\n\n- ✅ **OAuth 2.0**: Secure authentication with Google\n- ✅ **Encrypted storage**: Credentials encrypted using OS keychain\n- ✅ **No cloud sync**: Credentials stay on your machine\n- ✅ **Minimal logging**: Error logs only, no credential logging\n- ✅ **Open source**: Code is auditable and transparent\n\nFor security concerns, please open a GitHub issue.\n\n## Support\n\n- 📖 [Documentation](https://github.com/jrenaldi79/google-workspace-mcp)\n- 🐛 [Report Issues](https://github.com/jrenaldi79/google-workspace-mcp/issues)\n- 💡 [Discussions](https://github.com/jrenaldi79/google-workspace-mcp/discussions)\n\n## Development\n\nSee [CONTRIBUTING.md](./CONTRIBUTING.md) for development guidelines and architecture details.\n\n## License\n\nMIT - See [LICENSE](./LICENSE)\n\n## Credits\n\nBased on [gemini-cli-extensions/workspace](https://github.com/gemini-cli-extensions/workspace)\n\n---\n\n**Made with ❤️ by Presto AI**\n","readmeFilename":"README.md"}