{"_id":"@automate-army/google-calendar-mcp","_rev":"3-f1ff702cdd989d591829a60ea113423f","name":"@automate-army/google-calendar-mcp","dist-tags":{"latest":"2.1.1"},"versions":{"2.1.0":{"name":"@automate-army/google-calendar-mcp","version":"2.1.0","keywords":["mcp","model-context-protocol","claude","google-calendar","calendar","ai","llm","integration"],"author":{"name":"GuilhermeBarroso-sys"},"license":"MIT","_id":"@automate-army/google-calendar-mcp@2.1.0","maintainers":[{"name":"automatearmy","email":"team@automatearmy.com"},{"name":"guilhermebarroso-sys","email":"guibarrosodeoliveira5@gmail.com"}],"homepage":"https://github.com/nspady/google-calendar-mcp#readme","bugs":{"url":"https://github.com/nspady/google-calendar-mcp/issues"},"bin":{"google-calendar-mcp":"build/index.js"},"dist":{"shasum":"140d60d78f77a6feaaeb4593fa4228fef54983b0","tarball":"https://registry.npmjs.org/@automate-army/google-calendar-mcp/-/google-calendar-mcp-2.1.0.tgz","fileCount":7,"integrity":"sha512-+RNb6b9Ovyjgj7vZzj9OBnNIN1LFtkvScgtm8uilsRT2mZFoO21SgoX/B1eGkQBlRQfcl1GuRBA9jbQJU7sGag==","signatures":[{"sig":"MEYCIQCyLHLWrGy5ACnM5IEz5LrhD77yuogVOP5WdGHtXS2ImwIhALgzT785d5/5uR97AXYMEqwYseP2/3bpOJEOXzVAJbZL","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":425100},"type":"module","gitHead":"2a01327f1c7874876b8dbff0a37387f02d027b54","scripts":{"dev":"node scripts/dev.js","auth":"node build/auth-server.js","test":"vitest run src/tests/unit","build":"node scripts/build.js","start":"node build/index.js","test:all":"vitest run src/tests","start:http":"node build/index.js --transport http --port 3000","test:watch":"vitest src/tests/unit","test:coverage":"vitest run src/tests/unit --coverage","test:integration":"vitest run src/tests/integration","start:http:public":"node build/index.js --transport http --port 3000 --host 0.0.0.0"},"_npmUser":{"name":"automatearmy","actor":{"name":"automatearmy","type":"user","email":"team@automatearmy.com"},"email":"team@automatearmy.com"},"repository":{"url":"git+https://github.com/nspady/google-calendar-mcp.git","type":"git"},"_npmVersion":"11.0.0","description":"Google Calendar MCP Server with extensive support for calendar management","directories":{},"_nodeVersion":"22.9.0","dependencies":{"zod":"^3.22.4","open":"^7.4.2","esbuild":"^0.25.0","googleapis":"^144.0.0","zod-to-json-schema":"^3.24.5","google-auth-library":"^9.15.0","@google-cloud/local-auth":"^3.0.1","@modelcontextprotocol/sdk":"^1.12.1"},"_hasShrinkwrap":false,"devDependencies":{"openai":"^4.104.0","vitest":"^3.1.1","typescript":"^5.3.3","@types/node":"^20.10.4","@anthropic-ai/sdk":"^0.52.0","@vitest/coverage-v8":"^3.1.1"},"_npmOperationalInternal":{"tmp":"tmp/google-calendar-mcp_2.1.0_1750967457331_0.07622876216627517","host":"s3://npm-registry-packages-npm-production"}},"2.1.1":{"name":"@automate-army/google-calendar-mcp","version":"2.1.1","keywords":["mcp","model-context-protocol","claude","google-calendar","calendar","ai","llm","integration"],"author":{"name":"automate-army"},"license":"MIT","_id":"@automate-army/google-calendar-mcp@2.1.1","maintainers":[{"name":"automatearmy","email":"team@automatearmy.com"},{"name":"guilhermebarroso-sys","email":"guibarrosodeoliveira5@gmail.com"}],"homepage":"https://github.com/nspady/google-calendar-mcp#readme","bugs":{"url":"https://github.com/nspady/google-calendar-mcp/issues"},"bin":{"google-calendar-mcp":"build/index.js"},"dist":{"shasum":"f8f3cf7301372c9ff97e247fc730d73ff084aab1","tarball":"https://registry.npmjs.org/@automate-army/google-calendar-mcp/-/google-calendar-mcp-2.1.1.tgz","fileCount":7,"integrity":"sha512-w1NyEppAbSjwNzOH11UmbqIdp+sfv77aZLvj5Wydqp/4MWtYupkL2iAmyyVZ+uakSu2n0SwVyBhc7C+xx6/Esw==","signatures":[{"sig":"MEQCID4famMrnhI6+pzSmXuZ/QCcKgRR4+3JYOKtBXkreCH1AiAuI24+20sO0YPaCzs1MU2XWvjd5L5eTyxgJoewd9pDQQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":425072},"type":"module","gitHead":"e7279700c24b53589dd8ff5b4e996dcb2ce955cc","scripts":{"dev":"node scripts/dev.js","auth":"node build/auth-server.js","test":"vitest run src/tests/unit","build":"node scripts/build.js","start":"node build/index.js","test:all":"vitest run src/tests","start:http":"node build/index.js --transport http --port 3000","test:watch":"vitest src/tests/unit","test:coverage":"vitest run src/tests/unit --coverage","test:integration":"vitest run src/tests/integration","start:http:public":"node build/index.js --transport http --port 3000 --host 0.0.0.0"},"_npmUser":{"name":"automatearmy","actor":{"name":"automatearmy","type":"user","email":"team@automatearmy.com"},"email":"team@automatearmy.com"},"repository":{"url":"git+https://github.com/nspady/google-calendar-mcp.git","type":"git"},"_npmVersion":"11.0.0","description":"Google Calendar MCP Server with extensive support for calendar management","directories":{},"_nodeVersion":"22.9.0","dependencies":{"zod":"^3.22.4","open":"^7.4.2","esbuild":"^0.25.0","googleapis":"^144.0.0","zod-to-json-schema":"^3.24.5","google-auth-library":"^9.15.0","@google-cloud/local-auth":"^3.0.1","@modelcontextprotocol/sdk":"^1.12.1"},"_hasShrinkwrap":false,"devDependencies":{"openai":"^4.104.0","vitest":"^3.1.1","typescript":"^5.3.3","@types/node":"^20.10.4","@anthropic-ai/sdk":"^0.52.0","@vitest/coverage-v8":"^3.1.1"},"_npmOperationalInternal":{"tmp":"tmp/google-calendar-mcp_2.1.1_1750968050707_0.694095086191933","host":"s3://npm-registry-packages-npm-production"}}},"time":{"created":"2025-06-26T19:50:57.256Z","modified":"2026-03-31T18:22:53.605Z","2.1.0":"2025-06-26T19:50:57.514Z","2.1.1":"2025-06-26T20:00:50.990Z"},"bugs":{"url":"https://github.com/nspady/google-calendar-mcp/issues"},"author":{"name":"automate-army"},"license":"MIT","homepage":"https://github.com/nspady/google-calendar-mcp#readme","keywords":["mcp","model-context-protocol","claude","google-calendar","calendar","ai","llm","integration"],"repository":{"url":"git+https://github.com/nspady/google-calendar-mcp.git","type":"git"},"description":"Google Calendar MCP Server with extensive support for calendar management","maintainers":[{"email":"team@automatearmy.com","name":"automatearmy"},{"email":"adamjwattis@gmail.com","name":"adamwattis"},{"email":"guibarrosodeoliveira5@gmail.com","name":"guilhermebarroso-sys"}],"readme":"# Google Calendar MCP Server\n\nA Model Context Protocol (MCP) server that provides Google Calendar integration for AI assistants like Claude.\n\n## Features\n\n- **Multi-Calendar Support**: List events from multiple calendars simultaneously\n- **Event Management**: Create, update, delete, and search calendar events\n- **Recurring Events**: Advanced modification capabilities for recurring events\n- **Free/Busy Queries**: Check availability across calendars\n- **Smart Scheduling**: Natural language understanding for dates and times\n- **Inteligent Import**: Add calendar events from images, PDFs or web links\n\n## Quick Start\n\n### Prerequisites\n\n1. A Google Cloud project with the Calendar API enabled\n2. OAuth 2.0 credentials (Desktop app type)\n\n### Google Cloud Setup\n\n1. Go to the [Google Cloud Console](https://console.cloud.google.com)\n2. Create a new project or select an existing one.\n3. Enable the [Google Calendar API](https://console.cloud.google.com/apis/library/calendar-json.googleapis.com) for your project. Ensure that the right project is selected from the top bar before enabling the API.\n4. Create OAuth 2.0 credentials:\n   - Go to Credentials\n   - Click \"Create Credentials\" > \"OAuth client ID\"\n   - Choose \"User data\" for the type of data that the app will be accessing\n   - Add your app name and contact information\n   - Add the following scopes (optional):\n     - `https://www.googleapis.com/auth/calendar.events` and `https://www.googleapis.com/auth/calendar`\n   - Select \"Desktop app\" as the application type (Important!)\n   - Save the auth key, you'll need to add its path to the JSON in the next step\n   - Add your email address as a test user under the [Audience screen](https://console.cloud.google.com/auth/audience)\n      - Note: it might take a few minutes for the test user to be added. The OAuth consent will not allow you to proceed until the test user has propagated.\n      - Note about test mode: While an app is in test mode the auth tokens will expire after 1 week and need to be refreshed by running `npm run auth`.\n\n### Installation\n\n**Option 1: Use with npx (Recommended)**\n\nAdd to your Claude Desktop configuration:\n\n**macOS**: `~/Library/Application Support/Claude/claude_desktop_config.json`\n**Windows**: `%APPDATA%\\Claude\\claude_desktop_config.json`\n```json\n{\n  \"mcpServers\": {\n    \"google-calendar\": {\n      \"command\": \"npx\",\n      \"args\": [\"@automate-army/google-calendar-mcp\"],\n      \"env\": {\n        \"GOOGLE_OAUTH_CREDENTIALS\": \"/path/to/your/gcp-oauth.keys.json\"\n      }\n    }\n  }\n}\n```\nor pass your key as JSON STRING\n```\n{\n  \"mcpServers\": {\n    \"google-calendar\": {\n      \"command\": \"npx\",\n      \"args\": [\"@automate-army/google-calendar-mcp\"],\n      \"env\": {\n        \"GOOGLE_OAUTH_CREDENTIALS_JSON\": \"{}\"\n      }\n    }\n  }\n}\n```\n\n**⚠️ Important Note for npx Users**: When using npx, you **must** specify the credentials file path using the `GOOGLE_OAUTH_CREDENTIALS` environment variable.\n\n**Option 2: Local Installation**\n\n```bash\ngit clone https://github.com/nspady/google-calendar-mcp.git\ncd google-calendar-mcp\nnpm install\nnpm run build\n```\n\nThen add to Claude Desktop config using the local path or by specifying the path with the `GOOGLE_OAUTH_CREDENTIALS` environment variable.\n\n**Option 3: Docker Installation**\n\n```bash\ngit clone https://github.com/nspady/google-calendar-mcp.git\ncd google-calendar-mcp\ncp /path/to/your/gcp-oauth.keys.json .\ndocker compose up\n```\n\nSee the [Docker deployment guide](docs/docker.md) for detailed configuration options including HTTP transport mode.\n\n### First Run\n\n1. Start Claude Desktop\n2. The server will prompt for authentication on first use\n3. Complete the OAuth flow in your browser\n4. You're ready to use calendar features!\n\n## Example Usage\n\nAlong with the normal capabilities you would expect for a calendar integration you can also do really dynamic, multi-step processes like:\n\n1. **Cross-calendar availability**:\n   ```\n   Please provide availability looking at both my personal and work calendar for this upcoming week.\n   I am looking for a good time to meet with someone in London for 1 hr.\n   ```\n\n2. Add events from screenshots, images and other data sources:\n   ```\n   Add this event to my calendar based on the attached screenshot.\n   ```\n   Supported image formats: PNG, JPEG, GIF\n   Images can contain event details like date, time, location, and description\n\n3. Calendar analysis:\n   ```\n   What events do I have coming up this week that aren't part of my usual routine?\n   ```\n4. Check attendance:\n   ```\n   Which events tomorrow have attendees who have not accepted the invitation?\n   ```\n5. Auto coordinate events:\n   ```\n   Here's some available that was provided to me by someone. {available times}\n   Take a look at the times provided and let me know which ones are open on my calendar.\n   ```\n\n## Available Tools\n\n| Tool | Description |\n|------|-------------|\n| `list-calendars` | List all available calendars |\n| `list-events` | List events with date filtering |\n| `search-events` | Search events by text query |\n| `create-event` | Create new calendar events |\n| `update-event` | Update existing events |\n| `delete-event` | Delete events |\n| `get-freebusy` | Check availability across calendars, including external calendars |\n| `list-colors` | List available event colors |\n\n## Documentation\n\n- [Authentication Setup](docs/authentication.md) - Detailed Google Cloud setup\n- [Advanced Usage](docs/advanced-usage.md) - Multi-account, batch operations\n- [Deployment Guide](docs/deployment.md) - HTTP transport, remote access\n- [Docker Guide](docs/docker.md) - Docker deployment with stdio and HTTP modes\n- [OAuth Verification](docs/oauth-verification.md) - Moving from test to production mode\n- [Architecture](docs/architecture.md) - Technical architecture overview\n- [Development](docs/development.md) - Contributing and testing\n- [Testing](docs/testing.md) - Unit and integration testing guide\n\n## Configuration\n\n**Environment Variables:**\n- `GOOGLE_OAUTH_CREDENTIALS` - Path to OAuth credentials file\n- `GOOGLE_CALENDAR_MCP_TOKEN_PATH` - Custom token storage location (optional)\n\n**Claude Desktop Config Location:**\n- macOS: `~/Library/Application Support/Claude/claude_desktop_config.json`\n- Windows: `%APPDATA%\\Claude\\claude_desktop_config.json`\n\n\n## Security\n\n- OAuth tokens are stored securely in your system's config directory\n- Credentials never leave your local machine\n- All calendar operations require explicit user consent\n\n### Troubleshooting\n\n1. **OAuth Credentials File Not Found:**\n   - For npx users: You **must** specify the credentials file path using `GOOGLE_OAUTH_CREDENTIALS`\n   - Verify file paths are absolute and accessible\n\n2. **Authentication Errors:**\n   - Ensure your credentials file contains credentials for a **Desktop App** type\n   - Verify your user email is added as a **Test User** in the Google Cloud OAuth Consent screen\n   - Try deleting saved tokens and re-authenticating\n   - Check that no other process is blocking ports 3000-3004\n\n3. **Tokens Expire Weekly:**\n   - If your Google Cloud app is in **Testing** mode, refresh tokens expire after 7 days\n   - Consider moving your app to **Production** for longer-lived refresh tokens (requires Google verification)\n\n4. **Build Errors:**\n   - Run `npm install` again\n   - Check Node.js version (use LTS)\n   - Delete the `build/` directory and run `npm run build`\n\n### Manual Authentication\nFor re-authentication or troubleshooting:\n```bash\n# For npx installations\nexport GOOGLE_OAUTH_CREDENTIALS=\"/path/to/your/credentials.json\"\nnpx @automate-army/google-calendar-mcp auth\n\n# For local installations\nnpm run auth\n```\n\n## License\n\nMIT\n\n## Support\n\n- [GitHub Issues](https://github.com/nspady/google-calendar-mcp/issues)\n- [Documentation](docs/)\n","readmeFilename":"README.md"}