Skip to main content
Glama

Google MCP Router

A Google-only MCP (Model Context Protocol) Router for scheduling meetings and sending email confirmations.

Features

  • 5 MCP Tools: time.resolve, calendar.find_free_slots, calendar.create_event, calendar.cancel_event, email.send

  • Policy Enforcement: Working hours, calendar allowlist, overlap prevention

  • OAuth Integration: Secure Google API authentication with PKCE

  • Idempotency: Prevents duplicate operations

  • Observability: Structured logging, Prometheus metrics, OpenTelemetry tracing

Quick Start

Prerequisites

  • Node.js ≥ 20

  • Redis (optional, falls back to in-memory store)

  • Google Cloud project with Calendar API and Gmail API enabled

Installation

Quick Setup (Recommended)

Windows:

setup.bat

Linux/Mac:

chmod +x setup.sh ./setup.sh

Manual Setup

  1. Clone the repository:

git clone <repository-url> cd google-mcp-router
  1. Install dependencies:

npm install
  1. Set up environment variables:

cp .env.example .env # Edit .env with your configuration
  1. Build the project:

npm run build
  1. Start the server:

npm start

Environment Configuration

Create a .env file with the following variables:

NODE_ENV=staging APP_PORT=8080 DEFAULT_TZ=America/Chicago DEFAULT_MEETING_MIN=30 ALLOWLIST_CALENDAR_IDS=primary WORK_HOURS_START=08:00 WORK_HOURS_END=18:00 WORK_DAYS=Mon,Tue,Wed,Thu,Fri GOOGLE_CLIENT_ID=your_google_client_id_here GOOGLE_CLIENT_SECRET=your_google_client_secret_here GOOGLE_REDIRECT_URI=http://localhost:8080/oauth/google/callback TOKEN_ENC_KEY=base64:your_base64_encryption_key_here REDIS_URL=redis://localhost:6379 LOG_LEVEL=info GMAIL_SENDER_EMAIL=assistant@yourdomain.com GMAIL_SENDER_NAME=Thinh's Assistant

Google Cloud Setup

  1. Create a Google Cloud project

  2. Enable Calendar API and Gmail API

  3. Create OAuth 2.0 credentials (Web application)

  4. Set redirect URI to http://localhost:8080/oauth/google/callback

  5. Configure OAuth scopes:

    • https://www.googleapis.com/auth/calendar.events

    • https://www.googleapis.com/auth/gmail.send

API Usage

Authentication

  1. Visit /oauth/google/login to start OAuth flow

  2. Complete Google authentication

  3. You'll be redirected to /oauth/google/callback with tokens stored

Tool Execution

Execute MCP tools via POST requests:

# Resolve time expression curl -X POST http://localhost:8080/mcp/tools/time.resolve \ -H "Content-Type: application/json" \ -d '{"input": "next Tuesday 3pm"}' # Find free slots curl -X POST http://localhost:8080/mcp/tools/calendar.find_free_slots \ -H "Content-Type: application/json" \ -d '{ "window_start_iso": "2024-01-15T09:00:00-06:00", "window_end_iso": "2024-01-15T17:00:00-06:00", "duration_min": 30 }' # Create event curl -X POST http://localhost:8080/mcp/tools/calendar.create_event \ -H "Content-Type: application/json" \ -d '{ "title": "Team Meeting", "start_iso": "2024-01-15T14:00:00-06:00", "end_iso": "2024-01-15T15:00:00-06:00", "attendees": [{"email": "colleague@example.com"}], "idempotency_key": "unique-key-123" }'

Available Tools

  1. time.resolve - Parse natural language time expressions

  2. calendar.find_free_slots - Find available time slots

  3. calendar.create_event - Create calendar events

  4. calendar.cancel_event - Cancel calendar events

  5. email.send - Send templated emails

Development

Running in Development Mode

npm run dev

Running Tests

npm test npm run test:coverage

Linting

npm run lint

Type Checking

npm run type-check

Architecture

src/ ├── server.ts # Fastify server ├── mcp/ │ ├── index.ts # MCP tool registry │ ├── tools/ # Individual tool implementations │ └── schemas/ # JSON schemas for validation ├── adapters/ # Google API adapters ├── policy/ # Business rule enforcement ├── auth/ # OAuth and token management ├── templates/ # Email templates └── util/ # Shared utilities

Security

  • OAuth 2.0 with PKCE for secure authentication

  • AES-256-GCM encryption for token storage

  • Policy enforcement for all operations

  • Input validation and sanitization

  • Rate limiting and idempotency

Monitoring

  • Health Check: GET /health

  • Metrics: GET /metrics (Prometheus format)

  • Logs: Structured JSON logging with Pino

License

MIT License

-
security - not tested
-
license - not tested
-
quality - not tested

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/Thinh-nguyen-03/virtual-assistant-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server