{"id":50719462,"url":"https://github.com/danish-mar/google-mcp","last_synced_at":"2026-06-09T22:03:38.672Z","repository":{"id":355292634,"uuid":"1227528297","full_name":"danish-mar/google-mcp","owner":"danish-mar","description":"Single MCP gateway for YouTube, Google Maps, Calendar and Gmail with per-service endpoints and a WebUI control center","archived":false,"fork":false,"pushed_at":"2026-05-02T20:13:36.000Z","size":64,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-05-02T22:14:41.790Z","etag":null,"topics":["calendar","fastmcp","gmail","google","maps","mcp","model-context-protocol","youtube"],"latest_commit_sha":null,"homepage":null,"language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/danish-mar.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-05-02T20:10:08.000Z","updated_at":"2026-05-02T20:13:40.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/danish-mar/google-mcp","commit_stats":null,"previous_names":["danish-mar/google-mcp"],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/danish-mar/google-mcp","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/danish-mar%2Fgoogle-mcp","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/danish-mar%2Fgoogle-mcp/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/danish-mar%2Fgoogle-mcp/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/danish-mar%2Fgoogle-mcp/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/danish-mar","download_url":"https://codeload.github.com/danish-mar/google-mcp/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/danish-mar%2Fgoogle-mcp/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34127345,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-09T02:00:06.510Z","response_time":63,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["calendar","fastmcp","gmail","google","maps","mcp","model-context-protocol","youtube"],"created_at":"2026-06-09T22:03:38.610Z","updated_at":"2026-06-09T22:03:38.664Z","avatar_url":"https://github.com/danish-mar.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Google MCP\n\nA single MCP gateway that exposes Google services as separate endpoints — connect your AI client to only the services you need.\n\n```\nhttp://localhost:8080/mcp/youtube    ← YouTube (search, transcripts, details)\nhttp://localhost:8080/mcp/maps       ← Google Maps (places, directions, geocoding)\nhttp://localhost:8080/mcp/calendar   ← Google Calendar (events, create/delete)\nhttp://localhost:8080/mcp/gmail      ← Gmail (read, search, send)\nhttp://localhost:8080/mcp/contacts   ← Google Contacts (list, search, create)\n\nhttp://localhost:8080/dashboard      ← WebUI control center\nhttp://localhost:8080/configure      ← Dynamic configuration manager\n```\n\n## Architecture\n\n```\n                ┌─────────────────────────────────────────┐\n  AI Client ──▶ │  Gateway  :8080                          │\n                │  /mcp/youtube ──proxy──▶ :8081 (FastMCP) │\n                │  /mcp/maps    ──proxy──▶ :8082 (FastMCP) │\n                │  /mcp/calendar──proxy──▶ :8083 (FastMCP) │\n                │  /mcp/gmail   ──proxy──▶ :8084 (FastMCP) │\n                │  /mcp/contacts──proxy──▶ :8085 (FastMCP) │\n                │  /dashboard   ──────────  WebUI          │\n                └─────────────────────────────────────────┘\n```\n\nEach service runs as an independent FastMCP process on an internal port. Only port 8080 is exposed.\n\n## Quick Start\n\n```bash\ngit clone \u003crepo\u003e\ncd google-mcp\nnpm install\ncp .env.example .env\n# Fill in your API keys (see Setup below)\nnpm run dev\n```\n\n## Setup\n\n### YouTube \u0026 Maps (API Key)\n1. Go to [Google Cloud Console](https://console.cloud.google.com) → **APIs \u0026 Services → Credentials**\n2. Create an **API Key**\n3. Enable **YouTube Data API v3** and/or **Maps JavaScript API**\n4. Set `YOUTUBE_API_KEY` and/or `MAPS_API_KEY` in `.env`\n\n### Calendar \u0026 Gmail (OAuth2)\n1. In Cloud Console → Credentials → **Create OAuth 2.0 Client ID** (Desktop app)\n2. Enable **Google Calendar API** and **Gmail API**\n3. Get your `GOOGLE_CLIENT_ID` and `GOOGLE_CLIENT_SECRET`\n4. Exchange an auth code for refresh tokens:\n\n```bash\n# Step 1 — Open this URL in your browser, authorize the app\nhttps://accounts.google.com/o/oauth2/v2/auth?client_id=\u003cYOUR_CLIENT_ID\u003e\u0026redirect_uri=urn:ietf:wg:oauth:2.0:oob\u0026response_type=code\u0026scope=https://www.googleapis.com/auth/calendar%20https://www.googleapis.com/auth/gmail.modify%20https://www.googleapis.com/auth/contacts\u0026access_type=offline\u0026prompt=consent\n\n# Step 2 — Exchange the code for tokens\ncurl -X POST https://oauth2.googleapis.com/token \\\n  -d client_id=\u003cYOUR_CLIENT_ID\u003e \\\n  -d client_secret=\u003cYOUR_CLIENT_SECRET\u003e \\\n  -d code=\u003cCODE_FROM_BROWSER\u003e \\\n  -d grant_type=authorization_code \\\n  -d redirect_uri=urn:ietf:wg:oauth:2.0:oob\n```\nCopy `refresh_token` from the response into `GOOGLE_CALENDAR_REFRESH_TOKEN`, `GOOGLE_GMAIL_REFRESH_TOKEN`, and `GOOGLE_CONTACTS_REFRESH_TOKEN`.\n\n## MCP Endpoint Auth (optional)\n\nSet `MCP_ACCESS_TOKEN` in `.env` to protect all `/mcp/*` endpoints.  \nClients must then send: `Authorization: Bearer \u003cyour-token\u003e`\n\n**Claude Desktop config example:**\n```json\n{\n  \"mcpServers\": {\n    \"google-youtube\": {\n      \"url\": \"http://localhost:8080/mcp/youtube\",\n      \"headers\": { \"Authorization\": \"Bearer \u003cyour-token\u003e\" }\n    },\n    \"google-maps\": {\n      \"url\": \"http://localhost:8080/mcp/maps\",\n      \"headers\": { \"Authorization\": \"Bearer \u003cyour-token\u003e\" }\n    }\n  }\n}\n```\n\n## Available Tools\n\n### 📺 YouTube (`/mcp/youtube`)\n| Tool | Description |\n|------|-------------|\n| `search_videos` | Search YouTube videos by query |\n| `get_video_details` | Get stats, duration, tags for a video |\n| `get_video_transcript` | Fetch full captions/transcript |\n| `search_channels` | Search for channels |\n\n### 🗺️ Maps (`/mcp/maps`)\n| Tool | Description |\n|------|-------------|\n| `search_places` | Text search for places |\n| `get_place_details` | Hours, phone, reviews for a place |\n| `get_directions` | Directions + travel time between two points |\n| `geocode` | Address ↔ coordinates conversion |\n\n### 📅 Calendar (`/mcp/calendar`)\n| Tool | Description |\n|------|-------------|\n| `list_events` | List upcoming events with filters |\n| `create_event` | Create an event with attendees |\n| `delete_event` | Delete an event by ID |\n| `list_calendars` | List all calendars |\n\n### 📧 Gmail (`/mcp/gmail`)\n| Tool | Description |\n|------|-------------|\n| `list_emails` | List emails from inbox |\n| `get_email` | Read full email content |\n| `send_email` | Send an email |\n| `search_emails` | Search with Gmail query syntax |\n\n### 👤 Contacts (`/mcp/contacts`)\n| Tool | Description |\n|------|-------------|\n| `list_contacts` | List all contacts |\n| `search_contacts` | Search contacts by name/email/phone |\n| `create_contact` | Create a new contact |\n\n### Docker\nBuild locally:\n```bash\ndocker build -t google-mcp .\ndocker run -p 8080:8080 --env-file .env google-mcp\n```\n\n### Docker Compose (GHCR)\nUse the pre-built image from GitHub Container Registry:\n```yaml\nservices:\n  google-mcp:\n    image: ghcr.io/danish-mar/google-mcp:latest\n    ports:\n      - \"8080:8080\"\n    env_file:\n      - .env\n    volumes:\n      - ./data:/app/data\n    restart: unless-stopped\n```\n\n## WebUI\n\nDashboard at `http://localhost:8080/dashboard` — shows service status, endpoints, and live metrics. Log in with `WEBUI_PASSWORD`.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdanish-mar%2Fgoogle-mcp","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdanish-mar%2Fgoogle-mcp","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdanish-mar%2Fgoogle-mcp/lists"}