Skip to main content
Glama

google-meet-mcp β€” Multimodal Meeting Copilot & FastMCP Server

Python Version FastMCP Protocol Tests Passing Docker License: MIT Platforms GitHub Repo

Production-grade, zero-loss multimodal Google Meet copilot, 3-hour+ resilient session buffering, WebRTC audio & slide vision ingestion, interactive web dashboard, multi-channel alerts (Telegram & Zalo), and deep executive intelligence synthesis connecting Google Antigravity, Claude, and AI Agents with Google Meet.




πŸ‡¬πŸ‡§ English

Table of Contents


Related MCP server: mcp-meeting-analyzer

1. Overview & Key Capabilities

Strategic executive, technical architecture, and board meetings routinely run for 2 to 3+ hours (exceeding 25,000–45,000 spoken words). Traditional note-taking tools and single-modal AI bots suffer from critical vulnerabilities:

  1. Fragility & Catastrophic Data Loss: Network drops, browser tab crashes, or token expirations wipe out hours of unsaved context.

  2. Context Window Overload & Hallucination: Submitting raw 45,000-word transcripts directly into an LLM causes lost commitments, overlooked decision points, and superficial summaries.

  3. Missing Visual & Audio Evidence: Presenters share slides with dense architecture charts, code snippets, financial tables, and QR codes that voice-only transcripts fail to capture.

  4. Scattered Multi-Account Environments: Workspace domains support Google Meet REST API & Drive auto-transcripts, whereas personal Google accounts only support live closed captions.

google-meet-mcp is an enterprise-ready solution engineered to solve these challenges completely:

  • πŸ›‘οΈ Zero-Loss Append-Only Buffer: Writes every spoken utterance (.utterances.jsonl), slide screenshot (.jpg), and WebRTC Opus audio chunk (.webm) directly to durable disk storage (~/.google_meet_mcp).

  • πŸ‘οΈ Multimodal Capture & Vision Engine: Synchronizes live captions with speaker diarization, high-resolution slide captures on visual transitions, and embedded QR code/hyperlink extraction.

  • πŸ“Š Interactive Web Dashboard: Embedded SPA (served on http://127.0.0.1:8765/dashboard) providing a session history browser, slide carousel gallery, audio playback synchronized with captions, and multi-format minutes exports (Markdown, HTML, JSON).

  • πŸ’¬ Interactive Meeting Chat Assistant: Natural-language conversational Q&A over the entire meeting transcript and slides powered by Gemini Multimodal API with offline heuristic fallback and interactive audio/slide citation pills.

  • πŸ”” Multi-Channel Alert Engine: Instant mention notifications dispatched via native Telegram Bot and Zalo OA/Webhook with direct links to the meeting dashboard.

  • ⚑ 1-Click Packaging & Turnkey Docker: Single-command startup (google-meet-mcp start/companion/dashboard) and unprivileged hardened Docker container with automated healthcheck.


2. Competitive Comparison Matrix

Feature / Capability

Standard MCP Bots

Commercial Notetakers (Otter / Fireflies)

google-meet-mcp

3-Hour+ Zero-Loss Disk Buffer

❌ Memory-only

⚠️ Dependent on cloud stability

βœ… Append-only .jsonl on durable disk

Multimodal Slide Vision & QR Capture

❌ Text only

❌ Voice / Text only

βœ… High-res slide capture + QR extraction

Synchronized Audio & Caption Player

❌ No audio playback

⚠️ Proprietary cloud player

βœ… Local WebM Opus player with timestamp seek

Offline / No-API-Key Synthesis

❌ Hard crash without API

❌ Cloud only

βœ… Heuristic fallback engine included

Multi-Channel Mentions (Telegram & Zalo)

❌ None

⚠️ Slack / Email only

βœ… Native Telegram Bot + Zalo OA / Webhook

Support Personal & Workspace Accounts

⚠️ Workspace API only

⚠️ Requires bot joining call

βœ… Dual support (Live captions + REST API)

FastMCP Protocol for AI Agents

⚠️ Basic tools

❌ Closed proprietary SaaS

βœ… Full FastMCP 2024-11-05 for Antigravity & Claude

Data Privacy & On-Premises Control

⚠️ Depends on host

❌ Cloud vendor storage

βœ… 100% Local storage under ~/.google_meet_mcp


3. System Architecture & Data Flow

ASCII Architecture Overview

+---------------------------------------------------------------------------------------+
|                               GOOGLE MEET (meet.google.com)                           |
+---------------------------------------------------------------------------------------+
        β”‚ (Live Captions Scraper)   β”‚ (Slide Vision Canvas)        β”‚ (WebRTC Opus Audio)
        β–Ό                           β–Ό                              β–Ό
+---------------------------------------------------------------------------------------+
|                         CHROME EXTENSION (Manifest V3)                                |
|  - Floating Status Badge & Controls [🟒 Recording | πŸ“Š Dashboard | ⚑ AI Synthesis]    |
|  - Background Service Worker (Proxy for Google Meet CSP connect-src)                  |
+---------------------------------------------------------------------------------------+
                                            β”‚ HTTP POST (port 8765)
                                            β–Ό
+---------------------------------------------------------------------------------------+
|                       GOOGLE-MEET-MCP COMPANION HTTP SERVER                           |
|                                                                                       |
|  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  |
|  β”‚  POST /chunk     β”‚  β”‚  POST /snapshot  β”‚  β”‚  POST /audio     β”‚  β”‚ GET /health   β”‚  |
|  β”‚  (Live Captions) β”‚  β”‚  (Slide Vision)  β”‚  β”‚  (WebRTC Opus)   β”‚  β”‚ (Docker Probe)β”‚  |
|  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  |
|            β”‚                     β”‚                     β”‚                              |
|            β–Ό                     β–Ό                     β–Ό                              |
|  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  |
|  β”‚             SessionManager (Append-Only Durable Storage: ~/.google_meet_mcp)    β”‚  |
|  β”‚             β€’ .utterances.jsonl  β€’ slides/*.jpg  β€’ audio/*.webm  β€’ .meta.json   β”‚  |
|  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  |
|                                          β”‚                                            |
|       β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”         |
|       β–Ό                                                                     β–Ό         |
| β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”          β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  |
| β”‚  Interactive Web Dashboard (port 8765)β”‚          β”‚ Autonomous Synthesis & AI Chat β”‚  |
| β”‚  - Sessions Browser & Statistics     β”‚          β”‚ - Executive Summary            β”‚  |
| β”‚  - Slide Carousel & QR/Link Gallery  β”‚          β”‚ - Action Matrix & Decisions    β”‚  |
| β”‚  - Synchronized WebM Audio Player    β”‚          β”‚ - Gemini Multimodal Chat API   β”‚  |
| β”‚  - Multi-Channel Alerts Modal        β”‚          β”‚ - Multi-format Exporters:      β”‚  |
| β”‚    (Telegram Bot + Zalo Webhook/OA)  β”‚          β”‚   β€’ Markdown β€’ HTML β€’ JSON     β”‚  |
| β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜          β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  |
+---------------------------------------------------------------------------------------+
                                            β”‚ FastMCP stdio (JSON-RPC 2.0)
                                            β–Ό
+---------------------------------------------------------------------------------------+
|                     AI AGENT ECOSYSTEM (Google Antigravity / Claude)                  |
|                 Tools: meet_start_session, meet_synthesize_meeting, ...               |
+---------------------------------------------------------------------------------------+

Mermaid Architecture Diagram

flowchart TD
    subgraph Client["Browser: meet.google.com"]
        GM[Google Meet Meeting Room]
        EXT["Chrome Extension MV3<br/>(Floating Badge & Service Worker)"]
        SCRIPT["Tampermonkey Userscript<br/>(Alternative Ingestion)"]
        GM -->|Captions, Slides & Audio| EXT
        GM -.->|Captions only| SCRIPT
    end

    subgraph Server["google-meet-mcp Companion Server (Port 8765)"]
        HTTP["HTTP Endpoints<br/>/chunk, /snapshot, /audio, /health"]
        SM["SessionManager<br/>(Append-Only Buffer)"]
        SYN["MeetingSynthesizer<br/>(Executive Summary, Action Matrix)"]
        CHAT["AI Chat Engine<br/>(Gemini Multimodal API)"]
        ALERT["Alert Dispatcher<br/>(Telegram Bot + Zalo OA)"]
        DASH["Web Dashboard SPA<br/>(/dashboard)"]
    end

    subgraph Storage["Durable Storage (~/.google_meet_mcp)"]
        DISK["Session Store<br/>β€’ .utterances.jsonl<br/>β€’ slides/*.jpg<br/>β€’ audio/*.webm<br/>β€’ exports/"]
    end

    subgraph Consumers["Downstream Consumers"]
        USER["User via Web Browser"]
        TELEGRAM["Telegram Messenger"]
        ZALO["Zalo Notification"]
        MCP["Google Antigravity / Claude (FastMCP stdio)"]
    end

    EXT -->|HTTP POST| HTTP
    SCRIPT -.->|HTTP POST /chunk| HTTP
    HTTP --> SM
    SM <--> DISK
    SM --> SYN
    SM --> CHAT
    SM --> ALERT
    HTTP --> DASH
    DASH <--> USER
    ALERT --> TELEGRAM
    ALERT --> ZALO
    Server -->|FastMCP stdio| MCP

4. Repository Directory Structure

google-meet-mcp/
β”œβ”€β”€ .dockerignore
β”œβ”€β”€ .gitignore
β”œβ”€β”€ Dockerfile                  # Hardened, non-root (UID 10001) production image
β”œβ”€β”€ docker-compose.yml          # Turnkey 1-command container orchestration
β”œβ”€β”€ pyproject.toml              # Build & dependency declarations (FastMCP, Pydantic, etc.)
β”œβ”€β”€ uv.lock                     # Deterministic dependency lockfile
β”œβ”€β”€ LICENSE                     # MIT License
β”œβ”€β”€ README.md                   # Complete bilingual documentation
β”‚
β”œβ”€β”€ extension/                  # Chrome Extension (Manifest V3)
β”‚   β”œβ”€β”€ manifest.json           # MV3 extension manifest
β”‚   β”œβ”€β”€ background.js           # Service worker proxy (bypasses Google Meet CSP)
β”‚   β”œβ”€β”€ content.js              # DOM caption observer, slide capturer, tab audio recorder
β”‚   β”œβ”€β”€ popup.html / popup.js   # Extension settings & quick status popup
β”‚   └── icons/                  # High-resolution extension icons
β”‚
β”œβ”€β”€ src/google_meet_mcp/        # Core Python Application
β”‚   β”œβ”€β”€ __init__.py
β”‚   β”œβ”€β”€ __main__.py             # Direct execution entrypoint
β”‚   β”œβ”€β”€ cli.py                  # Rich CLI commands (start, dashboard, companion, etc.)
β”‚   β”œβ”€β”€ config.py               # Central environment and path configurations
β”‚   β”œβ”€β”€ server.py               # FastMCP standard server (stdio)
β”‚   β”‚
β”‚   β”œβ”€β”€ auth/                   # Google OAuth2 Authentication Engine
β”‚   β”‚   └── google_auth.py      # Browser-based OAuth2 workflow with local callback
β”‚   β”‚
β”‚   β”œβ”€β”€ capture/                # Ingestion Server & Web Dashboard
β”‚   β”‚   β”œβ”€β”€ companion_server.py # aiohttp HTTP server handling /chunk, /audio, /snapshot, /chat
β”‚   β”‚   β”œβ”€β”€ meet_captions.user.js # Tampermonkey userscript alternative
β”‚   β”‚   └── templates/
β”‚   β”‚       └── dashboard.html  # Embedded single-page application (Vue/Alpine-like UI)
β”‚   β”‚
β”‚   β”œβ”€β”€ engine/                 # Intelligence & Synthesis Engine
β”‚   β”‚   β”œβ”€β”€ prompts.py          # Multimodal & executive synthesis system prompts
β”‚   β”‚   └── synthesizer.py      # Map-Reduce & sliding window synthesis pipeline
β”‚   β”‚
β”‚   β”œβ”€β”€ google_client/          # Google API Clients
β”‚   β”‚   β”œβ”€β”€ meet_api.py         # Google Meet REST API v2 client
β”‚   β”‚   └── drive_api.py        # Google Drive API v3 transcript parser
β”‚   β”‚
β”‚   β”œβ”€β”€ notifications/          # Real-time Alerting System
β”‚   β”‚   β”œβ”€β”€ alert_detector.py   # Mention & keyword detector with Vietnamese diacritic normalization
β”‚   β”‚   β”œβ”€β”€ telegram.py         # Telegram Bot native HTTP dispatcher
β”‚   β”‚   └── zalo.py             # Zalo Webhook & Zalo OA OpenAPI v3.0 dispatcher
β”‚   β”‚
β”‚   └── session/                # Data Models & Storage
β”‚       β”œβ”€β”€ models.py           # Pydantic v2 domain schemas (Utterance, Slide, Audio, Synthesis)
β”‚       β”œβ”€β”€ session_manager.py  # Durable append-only storage manager
β”‚       └── chat.py             # Interactive AI meeting assistant engine
β”‚
└── tests/                      # Automated Test Suite (495 tests)
    β”œβ”€β”€ conftest.py             # Fixtures, mocks, and test utilities
    β”œβ”€β”€ e2e/                    # End-to-end multi-tier test scenarios
    β”‚   β”œβ”€β”€ test_tier1_features.py
    β”‚   β”œβ”€β”€ test_tier2_boundaries.py
    β”‚   β”œβ”€β”€ test_tier3_interactions.py
    β”‚   └── test_tier4_workloads.py
    └── test_*.py               # Comprehensive unit & integration tests

5. 1-Click Quickstart & Installation

Requires Python 3.10+ (Python 3.11 recommended).

# 1. Clone repository
git clone https://github.com/DuongNAD/google-meet-mcp.git
cd google-meet-mcp

# 2. Setup virtual environment
python3 -m venv .venv
source .venv/bin/activate

# 3. Install dependencies in editable mode
pip install -e ".[dev]"

# 4. Launch 1-Click Web Dashboard & Companion Server
google-meet-mcp dashboard

The Web Dashboard will automatically launch in your default web browser at http://127.0.0.1:8765/dashboard.

Run the hardened, unprivileged container with built-in healthcheck:

# 1. (Optional) Set API keys in your shell
export GEMINI_API_KEY="your-gemini-api-key"
export TELEGRAM_BOT_TOKEN="your-bot-token"
export TELEGRAM_CHAT_ID="your-chat-id"

# 2. Launch container in background
docker compose up -d

# 3. Verify health status
docker compose ps
curl -s http://localhost:8765/health

# 4. Open dashboard in browser
open http://localhost:8765/dashboard  # macOS
# xdg-open http://localhost:8765/dashboard  # Linux

6. Client Ingestion Options

You can capture Google Meet sessions using either the Chrome Extension or the Userscript:

Full multimodal support: Live Captions, High-Resolution Slides, and WebRTC Tab Audio.

  1. Open Chrome and navigate to chrome://extensions/.

  2. Toggle on Developer mode (top-right corner).

  3. Click Load unpacked and select the extension/ folder in this repository.

  4. Join any Google Meet call (https://meet.google.com/*-*-*).

  5. Turn on closed captions in Google Meet (press c).

  6. The Floating Status Badge will appear at the bottom-left of your meeting screen:

    • 🟒 Green badge: Connected to companion server (http://127.0.0.1:8765).

    • πŸ”΄ Red badge: Server offline (check google-meet-mcp companion).

    • Counter: Displays live count of captured utterances, slides, and audio chunks.

    • Quick Actions: "Dashboard" button, "Synthesize" button, and "Audio" toggle.

Method 2: Tampermonkey Userscript (Lightweight Alternative)

Captures live captions directly without loading an unpacked extension.

  1. Install Tampermonkey in your browser.

  2. Create a new script and paste the content of src/google_meet_mcp/capture/meet_captions.user.js.

  3. Save the script and join your Google Meet meeting.

  4. Enable captions in Google Meet (c). Utterances stream automatically to port 8765.


7. CLI Command Reference

The google-meet-mcp CLI provides rich terminal commands powered by rich:

Command

Syntax

Description

start

google-meet-mcp start [--mode companion|stdio|all] [--host HOST] [--port PORT] [--open-browser]

1-Click production service launcher. In all mode, runs both HTTP companion and FastMCP stdio simultaneously.

dashboard

google-meet-mcp dashboard [--host HOST] [--port PORT] [--no-browser]

1-Click launcher that starts the companion server and automatically opens the Web Dashboard in the browser.

companion

google-meet-mcp companion [--host HOST] [--port PORT]

Starts HTTP live ingestion server and hosts the Web Dashboard on port 8765.

stdio

google-meet-mcp stdio

Executes the FastMCP server over standard I/O (stdio) for Google Antigravity and Claude Desktop.

status

google-meet-mcp status

Displays Google OAuth credential status and prints a rich summary table of all stored sessions.

auth

google-meet-mcp auth [--no-browser]

Runs Google OAuth2 browser authentication flow for Google Meet and Drive APIs.

synthesize

google-meet-mcp synthesize <SESSION_ID> [--export]

Synthesizes a meeting session and prints executive summary, action items, and decisions.


8. Interactive Web Dashboard

The embedded Web Dashboard at http://127.0.0.1:8765/dashboard provides an all-in-one executive workstation:

  • πŸ—‚οΈ Session Explorer: Browse past and ongoing meetings, view total duration, active participant list, word count, and speech volume.

  • 🎡 Synchronized Audio Player: Play back recorded WebM Opus audio chunks with sub-second timeline seeking linked to utterance timestamps.

  • πŸ–ΌοΈ Slide Carousel & Gallery: Browse high-definition presentation slides captured at visual transition points, view extracted QR codes, and click detected URLs.

  • πŸ“ Multi-Format Minutes Exporter: 1-click download of executive minutes in:

    • Markdown (.md): Ready for Obsidian, Notion, or GitHub.

    • Printable HTML (.html): Beautiful executive typography formatted for PDF printing.

    • JSON (.json): Raw structured data for enterprise pipelines.

  • βš™οΈ Multi-Channel Alert Modal: Live configuration of Telegram Bot and Zalo notifications with built-in test buttons.


9. Interactive Meeting Chat Assistant & Gemini Intelligence

The dashboard includes a real-time conversational AI panel:

  • Ask natural-language questions about the meeting:

    • "What was decided regarding the database migration?"

    • "Who was assigned the Q3 roadmap deliverables?"

    • "Explain the system architecture shown on slide 3."

  • Powered by Gemini Multimodal API: Integrates both transcript text and slide images for context-aware answers.

  • Interactive Citation Pills:

    • [MM:SS] (e.g., [04:15]): Instantly seeks the audio player to the exact second.

    • [Slide #N] (e.g., [Slide #2]): Navigates the slide gallery to the referenced visual.

  • Offline Heuristic Fallback: Operates deterministically without an API key using local text mining and decision extraction algorithms.


10. Multi-Channel Alert Engine (Telegram & Zalo)

Stay informed even when stepping away from long meetings:

  • ✈️ Telegram Bot Native: Sends real-time notifications with speaker attribution, transcript snippet, and an inline button linking directly to the Web Dashboard.

  • πŸ’¬ Zalo Integration: Supports both Zalo Webhooks (for custom gateways / n8n) and Zalo Official Account (OA) OpenAPI v3.0.

  • 🎯 Smart Mention Matching:

    • Diacritic normalization (strip_accents) handles Vietnamese names accurately (e.g., DΖ°Ζ‘ng, Duong, duongnad).

    • Urgent keyword detection (deadline, gαΊ₯p, hỏi, Ζ‘i, nhờ, urgent).

    • Cooldown suppression prevents alert storms when a name is repeated multiple times.


11. Complete RESTful API Specifications

The Companion Server exposes 14+ standardized RESTful endpoints:

Method

Endpoint

Description

Payload / Parameters

Response

GET

/health

Liveness and Docker health probe

None

{"status": "ok", "service": "google-meet-mcp-companion"}

GET

/dashboard

Serves Interactive Web Dashboard SPA

None

HTML Web Application

GET

/

Redirects to Dashboard

None

HTTP 302 to /dashboard

POST

/chunk

Ingest captions with speaker diarization

{"meeting_code": str, "speaker": str, "text": str, "timestamp": str}

{"status": "ok", "session_id": str, "utterances_count": int}

POST

/snapshot

Ingest slide image with QR/links

{"meeting_code": str, "image_base64": str, "qr_codes": [], "links": []}

{"status": "ok", "session_id": str, "slide_index": int}

POST

/audio

Ingest WebRTC Opus audio chunk

{"meeting_code": str, "audio_base64": str, "duration_seconds": float}

{"status": "ok", "session_id": str, "chunk_index": int}

POST

/session/start

Explicitly start named session

{"title": str, "meeting_code": str, "session_id": Optional[str]}

MeetingSession JSON object

POST

/session/end

End session and trigger synthesis

{"session_id": str}

{"status": "ended", "session_id": str}

GET

/api/sessions

List recorded sessions

?limit=20

List[SessionSummary] JSON

GET

/api/session/{id}

Detailed session payload

Path {id}

SessionDetail (utterances, slides, audio)

GET

/api/session/{id}/slides/{file}

Serve high-res slide JPEG

Path {id}, {file}

Binary image/jpeg

GET

/api/session/{id}/audio/{file}

Stream WebM Opus chunk (RFC 7233 Range)

Path {id}, {file}, Range header

Binary audio/webm (HTTP 200 or 206)

GET

/api/session/{id}/export

Download formatted minutes

?format=markdown|html|json

File attachment download

POST

/api/session/{id}/chat

Meeting Chat Assistant Q&A

{"question": str, "stream": bool}

SSE stream or JSON answer with citations

GET

/api/alerts/config

Read current alert configuration

None

AlertConfig JSON

POST

/api/alerts/config

Update alert configuration

AlertConfig JSON

{"status": "ok", "config": ...}

POST

/api/alerts/test

Dispatch test alert (Telegram/Zalo)

{"channel": "telegram"|"zalo", ...}

{"status": "ok"|"error", "message": ...}

POST

/session/synthesize

Trigger AI meeting synthesis

{"session_id": str}

{"status": "ok", "exports": {...}}


12. FastMCP Tools for AI Agents (Antigravity, Claude, Cursor)

Connect google-meet-mcp to autonomous AI coding and workflow agents:

1. Google Antigravity (~/.gemini/config/mcp_config.json)

{
  "mcpServers": {
    "google-meet": {
      "command": "/path/to/google-meet-mcp/.venv/bin/python",
      "args": ["-m", "google_meet_mcp.cli", "stdio"],
      "env": {
        "GOOGLE_MEET_MCP_DATA_DIR": "/Users/duongnad/.google_meet_mcp",
        "GEMINI_API_KEY": "your-gemini-api-key"
      }
    }
  }
}

2. Claude Desktop (~/Library/Application Support/Claude/claude_desktop_config.json)

{
  "mcpServers": {
    "google-meet": {
      "command": "/path/to/google-meet-mcp/.venv/bin/python",
      "args": ["-m", "google_meet_mcp.cli", "stdio"]
    }
  }
}

3. Cursor IDE (.cursor/mcp.json)

{
  "mcpServers": {
    "google-meet": {
      "command": "google-meet-mcp",
      "args": ["stdio"]
    }
  }
}

Available FastMCP Tools:

  1. meet_start_session: Initialize a durable session for multi-hour live recording.

  2. meet_ingest_chunk: Append a spoken utterance line directly to the disk buffer.

  3. meet_get_live_status: Real-time session inspection (active speakers, word counts, duration).

  4. meet_list_sessions: List all historical sessions recorded on disk.

  5. meet_fetch_google_transcript: Retrieve Google Meet API v2 transcripts.

  6. meet_fetch_drive_transcript: Query and parse auto-saved transcript docs from Google Drive.

  7. meet_list_recent_conferences: List recent Google Meet conferences via Google Calendar API.

  8. meet_synthesize_meeting: Execute deep AI synthesis (Executive Summary, Action Matrix, Decision Log, Timeline).

  9. meet_export_minutes: Export comprehensive minutes to Markdown, HTML, or JSON.

  10. meet_check_auth / meet_setup_auth: Inspect and initiate Google OAuth2 workflow.


13. Environment Variables Reference

Variable

Default

Description

GOOGLE_MEET_MCP_DATA_DIR

~/.google_meet_mcp

Root directory for sessions, slides, audio, and exports

GOOGLE_MEET_COMPANION_HOST

127.0.0.1

Bind host for the companion HTTP server & dashboard

GOOGLE_MEET_COMPANION_PORT

8765

Port for the companion HTTP server & dashboard

GEMINI_API_KEY

(None)

Google Gemini API key for multimodal chat and synthesis

TELEGRAM_BOT_TOKEN

(None)

Telegram Bot token created via @BotFather

TELEGRAM_CHAT_ID

(None)

Telegram user or group chat ID for alerts

ZALO_WEBHOOK_URL

(None)

Webhook endpoint for forwarding Zalo alerts

ZALO_OA_ACCESS_TOKEN

(None)

Official Account access token for Zalo OpenAPI v3.0

ZALO_USER_ID

(None)

Target Zalo user ID to receive direct messages

GOOGLE_MEET_CREDENTIALS_FILE

~/.google_meet_mcp/credentials.json

Path to Google OAuth2 client credentials JSON

GOOGLE_MEET_TOKEN_FILE

~/.google_meet_mcp/token.json

Path to saved Google OAuth2 user token JSON


14. Troubleshooting Guide Matrix

Issue / Symptom

Root Cause

Resolution Steps

Port 8765 Conflict (Address already in use)

Another companion instance or process occupies port 8765.

Identify PID with lsof -i :8765 and terminate it, or specify an alternative port: google-meet-mcp companion --port 8766.

Extension Connection Failed (Failed to fetch)

Companion server is offline or blocked by firewall.

Run google-meet-mcp companion or docker compose up -d. Verify via curl -s http://127.0.0.1:8765/health.

Google Meet CSP Error (Refused connect-src)

Google Meet CSP blocks direct third-party fetch calls.

Use the updated Chrome Extension which routes all requests through the background Service Worker.

No Audio Captured

Browser tab audio capture permission not granted.

When starting screen/tab sharing in Chrome, ensure the "Share tab audio" checkbox is checked.

Docker Permission Denied on ~/.google_meet_mcp

Host volume owned by root instead of non-root UID 10001.

Run sudo chown -R 10001:10001 ~/.google_meet_mcp on host system before starting Docker container.

Gemini AI Chat Fails

Missing or invalid Gemini API key.

Set export GEMINI_API_KEY="your-key" or enter key directly in Dashboard Settings Modal. Offline heuristic fallback will be used automatically if omitted.

Telegram Alert Not Received

Invalid Bot Token or user has not messaged the bot.

Verify token via curl -s https://api.telegram.org/bot<TOKEN>/getMe. Ensure you clicked /start in your bot's chat.


15. Testing & Quality Assurance

The codebase includes an exhaustive 495-test suite spanning 4 rigorous validation tiers:

  • Tier 1 (Core Features): Unit tests for SessionManager, Synthesizer, Chat Assistant, and Alert Detectors.

  • Tier 2 (Boundaries & Edge Cases): Multi-hour rollover tests, malformed inputs, missing headers, and partial audio chunks.

  • Tier 3 (Interactions & Endpoints): REST API contract tests, Range streaming header validation, and WebSocket fallbacks.

  • Tier 4 (Workloads & Stress): 3-hour meeting simulation with 45,000+ utterances, concurrent writes, and eviction stability.

# Run complete test suite (495 tests)
.venv/bin/pytest tests/ -v

# Run with coverage report
.venv/bin/pytest tests/ --cov=google_meet_mcp --cov-report=term-missing

16. Security & Privacy Guarantees

  • πŸ”’ Local-First Processing: All transcripts, slide captures, and audio chunks reside exclusively on your local machine (~/.google_meet_mcp). No meeting data is uploaded to third-party servers unless you configure an external LLM API key.

  • πŸ›‘οΈ Hardened Docker Container: Runs under an unprivileged user (appuser, UID 10001) with no-new-privileges:true and automated container healthcheck.

  • πŸ”‘ Safe Credential Management: OAuth tokens and API keys are stored in user-restricted paths and ignored by git (.gitignore).



πŸ‡»πŸ‡³ TiαΊΏng Việt

Mα»₯c Lα»₯c


1. Tα»•ng quan & VαΊ₯n đề giαΊ£i quyαΊΏt

CΓ‘c cuα»™c họp Δ‘iều hΓ nh chiαΊΏn lược, kiαΊΏn trΓΊc kα»Ή thuαΊ­t hoαΊ·c Δ‘αΊ‘i hα»™i cα»• Δ‘Γ΄ng thường kΓ©o dΓ i tα»« 2 Δ‘αΊΏn 3 tiαΊΏng hoαΊ·c lΓ’u hΖ‘n (tΖ°Ζ‘ng Δ‘Ζ°Ζ‘ng 25,000 – 45,000 tα»« thoαΊ‘i). CΓ‘c cΓ΄ng cα»₯ ghi chΓΊ thΓ΄ng thường vΓ  bot phiΓͺn Γ’m truyền thα»‘ng bα»™c lα»™ nhα»―ng hαΊ‘n chαΊΏ chΓ­ mαΊ‘ng:

  1. Rα»§i ro mαΊ₯t trαΊ―ng dα»― liệu (Data Loss): MαΊ₯t mαΊ‘ng, sαΊ­p nguα»“n hoαΊ·c vΓ΄ tΓ¬nh Δ‘Γ³ng tab trΓ¬nh duyệt khiαΊΏn toΓ n bα»™ biΓͺn bαΊ£n ghi trΖ°α»›c Δ‘Γ³ biαΊΏn mαΊ₯t.

  2. QuΓ‘ tαΊ£i ngα»― cαΊ£nh (Context Window Overload): NαΊ‘p toΓ n bα»™ 45,000 tα»« thΓ΄ vΓ o LLM khiαΊΏn AI tΓ³m tαΊ―t qua loa, bỏ sΓ³t cam kαΊΏt hΓ nh Δ‘α»™ng (Action Items) vΓ  quyαΊΏt Δ‘α»‹nh chα»‘t ở giα»―a buα»•i họp.

  3. ThiαΊΏu hα»₯t hΓ¬nh αΊ£nh & Γ’m thanh minh chα»©ng: Diα»…n giαΊ£ trΓ¬nh chiαΊΏu slide kiαΊΏn trΓΊc, sΖ‘ Δ‘α»“ kα»Ή thuαΊ­t, bαΊ£ng tΓ i chΓ­nh hoαΊ·c mΓ£ QR tΓ i liệu nhΖ°ng cΓ΄ng cα»₯ Γ’m thanh khΓ΄ng ghi nhαΊ­n được.

  4. MΓ΄i trường tΓ i khoαΊ£n phΓ’n tΓ‘n: Google Workspace hα»— trợ Meet API/Drive, trong khi tΓ i khoαΊ£n cΓ‘ nhΓ’n thΓ΄ng thường chỉ hiển thα»‹ phα»₯ đề trα»±c tiαΊΏp (Live Captions).

google-meet-mcp giαΊ£i quyαΊΏt triệt để toΓ n bα»™ vαΊ₯n đề trΓͺn:

  • πŸ›‘οΈ Bα»™ đệm Append-Only Chα»‘ng MαΊ₯t Dα»― Liệu: Ghi tα»©c thΓ¬ tα»«ng cΓ’u thoαΊ‘i (.utterances.jsonl), αΊ£nh slide (.jpg) vΓ  khα»‘i Γ’m thanh Opus (.webm) xuα»‘ng α»• cα»©ng cα»₯c bα»™ (~/.google_meet_mcp).

  • πŸ‘οΈ Thu thαΊ­p Đa phΖ°Ζ‘ng thα»©c & Thα»‹ giΓ‘c AI: Đồng bα»™ hΓ³a phα»₯ đề (phΓ’n tΓ‘ch người nΓ³i), tα»± Δ‘α»™ng chα»₯p slide Δ‘α»™ nΓ©t cao khi diα»…n giαΊ£ chuyển trang vΓ  bΓ³c tΓ‘ch mΓ£ QR/liΓͺn kαΊΏt Δ‘Γ­nh kΓ¨m.

  • πŸ“Š Web Dashboard QuαΊ£n lΓ½ TΖ°Ζ‘ng tΓ‘c: Ứng dα»₯ng Web trα»±c quan (http://127.0.0.1:8765/dashboard) duyệt lα»‹ch sα»­ họp, trΓ¬nh chiαΊΏu slide gallery, phΓ‘t Γ’m thanh WebM khα»›p vα»›i phα»₯ đề vΓ  xuαΊ₯t biΓͺn bαΊ£n Markdown/HTML/JSON.

  • πŸ’¬ Trợ lΓ½ Hỏi Δ‘Γ‘p Cuα»™c họp AI (Meeting Chat): Chat tα»± do hỏi Δ‘Γ‘p mọi nα»™i dung cuα»™c họp hα»— trợ bởi Gemini Multimodal API, Δ‘Γ­nh kΓ¨m nΓΊt trΓ­ch dαΊ«n [MM:SS] phΓ‘t lαΊ‘i Γ’m thanh vΓ  [Slide #X] mở trα»±c tiαΊΏp trang slide.

  • πŸ”” CαΊ£nh bΓ‘o Đa kΓͺnh Tα»©c thΓ¬ (Telegram + Zalo): Gα»­i tin nhαΊ―n cαΊ£nh bΓ‘o khi bαΊ‘n được gọi tΓͺn qua bot Telegram chΓ­nh chα»§ hoαΊ·c Zalo OA/Webhook kΓ¨m liΓͺn kαΊΏt mở Dashboard.

  • ⚑ Đóng gΓ³i 1-ChαΊ‘m & Docker Tiện lợi: Khởi Δ‘α»™ng tα»©c thΓ¬ bαΊ±ng lệnh CLI (google-meet-mcp dashboard) hoαΊ·c triển khai container Docker bαΊ£o mαΊ­t chαΊ‘y khΓ΄ng dΓΉng quyền root.


2. Ma trận So sÑnh Tính năng Cẑnh tranh

Tính năng / Năng lực

Bot MCP Thông thường

CΓ΄ng cα»₯ ThΖ°Ζ‘ng mαΊ‘i (Otter / Fireflies)

google-meet-mcp

Ghi đệm 3h+ Chα»‘ng mαΊ₯t dα»― liệu

❌ Chỉ lΖ°u trΓͺn RAM

⚠️ Phα»₯ thuα»™c Δ‘α»™ α»•n Δ‘α»‹nh mαΊ‘ng cloud

βœ… Ghi nα»‘i tiαΊΏp .jsonl vΓ o α»• cα»©ng

BαΊ―t αΊ£nh Slide & BΓ³c tΓ‘ch mΓ£ QR

❌ Chỉ xα»­ lΓ½ vΔƒn bαΊ£n

❌ Chỉ xα»­ lΓ½ giọng nΓ³i

βœ… Chα»₯p slide HD + nhαΊ­n diện QR/link

PhΓ‘t lαΊ‘i Audio Δ‘α»“ng bα»™ vα»›i Phα»₯ đề

❌ Không lưu audio

⚠️ Player Δ‘Γ³ng trΓͺn cloud

βœ… PhΓ‘t WebM Opus tua chuαΊ©n mα»‘c giΓ’y

Tα»•ng hợp NgoαΊ‘i tuyαΊΏn (KhΓ΄ng cαΊ§n API Key)

❌ Lα»—i nαΊΏu thiαΊΏu API

❌ Hoàn toàn dùng cloud

βœ… TΓ­ch hợp thuαΊ­t toΓ‘n heuristic cα»₯c bα»™

CαΊ£nh bΓ‘o Gọi tΓͺn (Telegram & Zalo)

❌ Không có

⚠️ Chỉ cΓ³ Slack / Email

βœ… Gα»­i Telegram Bot + Zalo OA / Webhook

Hα»— trợ cαΊ£ TΓ i khoαΊ£n CΓ‘ nhΓ’n & Workspace

⚠️ Chỉ chαΊ‘y vα»›i Workspace API

⚠️ BαΊ―t buα»™c thΓͺm bot vΓ o phΓ²ng họp

βœ… Đa cΖ‘ chαΊΏ (Phα»₯ đề sα»‘ng + REST API)

Giao thα»©c FastMCP cho AI Agent

⚠️ CΓ΄ng cα»₯ cΖ‘ bαΊ£n

❌ Hệ thα»‘ng Δ‘Γ³ng SaaS

βœ… ChuαΊ©n FastMCP 2024-11-05 cho Antigravity & Claude

BαΊ£o mαΊ­t & Tα»± chα»§ Dα»― liệu 100%

⚠️ Phα»₯ thuα»™c mΓ‘y host

❌ Dα»― liệu lΖ°u mΓ‘y chα»§ bΓͺn thα»© ba

βœ… LΖ°u cα»₯c bα»™ tαΊ‘i ~/.google_meet_mcp


3. SΖ‘ Δ‘α»“ KiαΊΏn trΓΊc & Luα»“ng Dα»― liệu

SΖ‘ Δ‘α»“ Khα»‘i ASCII

+---------------------------------------------------------------------------------------+
|                               GOOGLE MEET (meet.google.com)                           |
+---------------------------------------------------------------------------------------+
        β”‚ (Thu thαΊ­p Phα»₯ đề)         β”‚ (Chα»₯p Slide TrΓ¬nh chiαΊΏu)     β”‚ (Luα»“ng Γ‚m thanh Opus)
        β–Ό                           β–Ό                              β–Ό
+---------------------------------------------------------------------------------------+
|                         CHROME EXTENSION (Manifest V3)                                |
|  - Huy hiệu Nα»•i & NΓΊt Điều khiển [🟒 Đang ghi | πŸ“Š Dashboard | ⚑ Tα»•ng hợp AI]         |
|  - Service Worker (Vượt rào CSP connect-src của Google Meet an toàn)                 |
+---------------------------------------------------------------------------------------+
                                            β”‚ HTTP POST (cα»•ng 8765)
                                            β–Ό
+---------------------------------------------------------------------------------------+
|                       GOOGLE-MEET-MCP COMPANION HTTP SERVER                           |
|                                                                                       |
|  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  |
|  β”‚  POST /chunk     β”‚  β”‚  POST /snapshot  β”‚  β”‚  POST /audio     β”‚  β”‚ GET /health   β”‚  |
|  β”‚  (Phα»₯ đề ThoαΊ‘i)  β”‚  β”‚  (αΊ’nh Slide HD)  β”‚  β”‚  (WebRTC Opus)   β”‚  β”‚ (Kiểm tra Sα»‘ngβ”‚  |
|  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  |
|            β”‚                     β”‚                     β”‚                              |
|            β–Ό                     β–Ό                     β–Ό                              |
|  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  |
|  β”‚             SessionManager (LΖ°u trα»― Bền vα»―ng Cα»₯c bα»™: ~/.google_meet_mcp)        β”‚  |
|  β”‚             β€’ .utterances.jsonl  β€’ slides/*.jpg  β€’ audio/*.webm  β€’ .meta.json   β”‚  |
|  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  |
|                                          β”‚                                            |
|       β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”         |
|       β–Ό                                                                     β–Ό         |
| β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”          β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  |
| β”‚  Web Dashboard Trα»±c quan (cα»•ng 8765) β”‚          β”‚ Động cΖ‘ Tα»•ng hợp & Trợ lΓ½ Chat β”‚  |
| β”‚  - Danh sΓ‘ch Cuα»™c họp & Thα»‘ng kΓͺ     β”‚          β”‚ - TΓ³m tαΊ―t Điều hΓ nh            β”‚  |
| β”‚  - TrΓ¬nh duyệt Slide & ThΖ° viện QR   β”‚          β”‚ - Ma trαΊ­n QuyαΊΏt Δ‘α»‹nh & Việc cαΊ§nβ”‚  |
| β”‚  - TrΓ¬nh phΓ‘t Audio WebM Đồng bα»™     β”‚          β”‚ - API Chat Gemini Multimodal   β”‚  |
| β”‚  - Hα»™p thoαΊ‘i CΓ i Δ‘αΊ·t CαΊ£nh bΓ‘o        β”‚          β”‚ - XuαΊ₯t BiΓͺn bαΊ£n Đa Δ‘α»‹nh dαΊ‘ng:  β”‚  |
| β”‚    (Telegram Bot + Zalo Webhook/OA)  β”‚          β”‚   β€’ Markdown β€’ HTML In β€’ JSON  β”‚  |
| β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜          β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  |
+---------------------------------------------------------------------------------------+
                                            β”‚ FastMCP stdio (JSON-RPC 2.0)
                                            β–Ό
+---------------------------------------------------------------------------------------+
|                     HỆ SINH THÁI AI AGENT (Google Antigravity / Claude)               |
|                 CΓ΄ng cα»₯: meet_start_session, meet_synthesize_meeting, ...             |
+---------------------------------------------------------------------------------------+

SΖ‘ Δ‘α»“ Luα»“ng Dα»― liệu Mermaid

flowchart TD
    subgraph Browser["TrΓ¬nh duyệt: meet.google.com"]
        GM[Phòng họp Google Meet]
        EXT["Chrome Extension MV3<br/>(Huy hiệu Nα»•i & Service Worker)"]
        SCRIPT["Tampermonkey Userscript<br/>(Thu thαΊ­p NhαΊΉ)"]
        GM -->|Phα»₯ đề, Slide & Audio| EXT
        GM -.->|Chỉ phα»₯ đề| SCRIPT
    end

    subgraph Server["MΓ‘y chα»§ Companion (Cα»•ng 8765)"]
        HTTP["HTTP Endpoints<br/>/chunk, /snapshot, /audio, /health"]
        SM["SessionManager<br/>(Bα»™ đệm Append-Only)"]
        SYN["MeetingSynthesizer<br/>(TΓ³m tαΊ―t, Ma trαΊ­n Việc cαΊ§n lΓ m)"]
        CHAT["Động cΖ‘ Chat AI<br/>(Gemini Multimodal API)"]
        ALERT["Bα»™ phΓ‘t CαΊ£nh bΓ‘o<br/>(Telegram Bot + Zalo OA)"]
        DASH["Giao diện Web Dashboard<br/>(/dashboard)"]
    end

    subgraph Storage["Lưu trữ Bền vững (~/.google_meet_mcp)"]
        DISK["ThΖ° mα»₯c PhiΓͺn họp<br/>β€’ .utterances.jsonl<br/>β€’ slides/*.jpg<br/>β€’ audio/*.webm<br/>β€’ exports/"]
    end

    subgraph Consumers["Người dùng & TÑc tử AI"]
        USER["Người dΓΉng qua TrΓ¬nh duyệt"]
        TELEGRAM["KΓͺnh / Chat Telegram"]
        ZALO["Ứng dα»₯ng Zalo"]
        MCP["Google Antigravity / Claude (FastMCP stdio)"]
    end

    EXT -->|HTTP POST| HTTP
    SCRIPT -.->|HTTP POST /chunk| HTTP
    HTTP --> SM
    SM <--> DISK
    SM --> SYN
    SM --> CHAT
    SM --> ALERT
    HTTP --> DASH
    DASH <--> USER
    ALERT --> TELEGRAM
    ALERT --> ZALO
    Server -->|FastMCP stdio| MCP

4. CαΊ₯u trΓΊc ThΖ° mα»₯c Dα»± Γ‘n

google-meet-mcp/
β”œβ”€β”€ .dockerignore
β”œβ”€β”€ .gitignore
β”œβ”€β”€ Dockerfile                  # Docker image bαΊ£o mαΊ­t khΓ΄ng dΓΉng quyền root (UID 10001)
β”œβ”€β”€ docker-compose.yml          # Triển khai trọn gΓ³i tiện lợi 1 cΓ’u lệnh
β”œβ”€β”€ pyproject.toml              # Khai bΓ‘o gΓ³i cΓ i Δ‘αΊ·t vΓ  thΖ° viện phα»₯ thuα»™c
β”œβ”€β”€ uv.lock                     # KhΓ³a phiΓͺn bαΊ£n gΓ³i xΓ‘c Δ‘α»‹nh
β”œβ”€β”€ LICENSE                     # GiαΊ₯y phΓ©p nguα»“n mở MIT
β”œβ”€β”€ README.md                   # TΓ i liệu hΖ°α»›ng dαΊ«n song ngα»― hoΓ n chỉnh
β”‚
β”œβ”€β”€ extension/                  # Tiện Γ­ch mở rα»™ng Chrome Extension (Manifest V3)
β”‚   β”œβ”€β”€ manifest.json           # Khai bΓ‘o quyền hαΊ‘n vΓ  tΓ i nguyΓͺn tiện Γ­ch
β”‚   β”œβ”€β”€ background.js           # Service worker vượt rΓ o CSP Google Meet
β”‚   β”œβ”€β”€ content.js              # LαΊ―ng nghe DOM phα»₯ đề, chα»₯p slide, thu Γ’m tab
β”‚   β”œβ”€β”€ popup.html / popup.js   # Giao diện bαΊ­t popup kiểm tra trαΊ‘ng thΓ‘i
β”‚   └── icons/                  # Bα»™ icon Δ‘α»™ phΓ’n giαΊ£i cao
β”‚
β”œβ”€β”€ src/google_meet_mcp/        # MΓ£ nguα»“n cα»‘t lΓ΅i Python
β”‚   β”œβ”€β”€ __init__.py
β”‚   β”œβ”€β”€ __main__.py             # Điểm chαΊ‘y thα»±c thi trα»±c tiαΊΏp
β”‚   β”œβ”€β”€ cli.py                  # Giao diện dΓ²ng lệnh CLI tΖ°Ζ‘ng tΓ‘c Rich
β”‚   β”œβ”€β”€ config.py               # QuαΊ£n lΓ½ đường dαΊ«n vΓ  biαΊΏn mΓ΄i trường
β”‚   β”œβ”€β”€ server.py               # MΓ‘y chα»§ FastMCP stdio chuαΊ©n MCP
β”‚   β”‚
β”‚   β”œβ”€β”€ auth/                   # Luα»“ng xΓ‘c thα»±c Google OAuth2
β”‚   β”‚   └── google_auth.py      # Mở trΓ¬nh duyệt xΓ‘c thα»±c vΓ  nhαΊ­n mΓ£ callback
β”‚   β”‚
β”‚   β”œβ”€β”€ capture/                # MΓ‘y chα»§ Ingestion & Giao diện Dashboard
β”‚   β”‚   β”œβ”€β”€ companion_server.py # MΓ‘y chα»§ aiohttp xα»­ lΓ½ /chunk, /audio, /snapshot, /chat
β”‚   β”‚   β”œβ”€β”€ meet_captions.user.js # Userscript Tampermonkey thay thαΊΏ
β”‚   β”‚   └── templates/
β”‚   β”‚       └── dashboard.html  # Ứng dα»₯ng Web SPA hiện Δ‘αΊ‘i
β”‚   β”‚
β”‚   β”œβ”€β”€ engine/                 # Động cΖ‘ TrΓ­ tuệ NhΓ’n tαΊ‘o & Tα»•ng hợp Cuα»™c họp
β”‚   β”‚   β”œβ”€β”€ prompts.py          # TαΊ­p hợp cΓ’u lệnh Δ‘α»‹nh hΓ¬nh phong cΓ‘ch tΓ³m tαΊ―t
β”‚   β”‚   └── synthesizer.py      # Kα»Ή thuαΊ­t Map-Reduce & cα»­a sα»• trượt tα»•ng hợp
β”‚   β”‚
β”‚   β”œβ”€β”€ google_client/          # TΖ°Ζ‘ng tΓ‘c API Google
β”‚   β”‚   β”œβ”€β”€ meet_api.py         # Google Meet REST API v2
β”‚   β”‚   └── drive_api.py        # BΓ³c tΓ‘ch transcript Google Drive v3
β”‚   β”‚
β”‚   β”œβ”€β”€ notifications/          # Hệ thα»‘ng CαΊ£nh bΓ‘o Đa kΓͺnh
β”‚   β”‚   β”œβ”€β”€ alert_detector.py   # NhαΊ­n diện gọi tΓͺn vΓ  chuαΊ©n hΓ³a tiαΊΏng Việt khΓ΄ng dαΊ₯u
β”‚   β”‚   β”œβ”€β”€ telegram.py         # Gα»­i tin nhαΊ―n Telegram Bot native
β”‚   β”‚   └── zalo.py             # Gα»­i tin nhαΊ―n Zalo Webhook & Zalo OA OpenAPI v3.0
β”‚   β”‚
β”‚   └── session/                # QuαΊ£n lΓ½ Dα»― liệu & LΖ°u trα»― Bền vα»―ng
β”‚       β”œβ”€β”€ models.py           # MΓ΄ hΓ¬nh dα»― liệu Pydantic v2 chuαΊ©n hΓ³a
β”‚       β”œβ”€β”€ session_manager.py  # Bα»™ đệm append-only ghi trα»±c tiαΊΏp α»• cα»©ng
β”‚       └── chat.py             # Động cΖ‘ trợ lΓ½ trΓ² chuyện hỏi Δ‘Γ‘p cuα»™c họp
β”‚
└── tests/                      # Bα»™ kiểm thα»­ tα»± Δ‘α»™ng toΓ n diện (495 tests)
    β”œβ”€β”€ conftest.py             # Bα»™ dα»― liệu mαΊ«u vΓ  mock
    β”œβ”€β”€ e2e/                    # CΓ‘c kα»‹ch bαΊ£n kiểm thα»­ tΓ­ch hợp 4 tαΊ§ng
    β”‚   β”œβ”€β”€ test_tier1_features.py
    β”‚   β”œβ”€β”€ test_tier2_boundaries.py
    β”‚   β”œβ”€β”€ test_tier3_interactions.py
    β”‚   └── test_tier4_workloads.py
    └── test_*.py               # CΓ‘c bΓ i kiểm thα»­ Δ‘Ζ‘n vα»‹ & tΓ­ch hợp chi tiαΊΏt

5. HΖ°α»›ng dαΊ«n CΓ i Δ‘αΊ·t & Khởi Δ‘α»™ng 1-ChαΊ‘m

CΓ‘ch 1: ChαΊ‘y Cα»₯c bα»™ vα»›i Python (KhuyΓͺn dΓΉng khi PhΓ‘t triển)

YΓͺu cαΊ§u mΓ‘y tΓ­nh cΓ i Δ‘αΊ·t Python 3.10 trở lΓͺn (khuyαΊΏn nghα»‹ 3.11).

# 1. TαΊ£i mΓ£ nguα»“n về mΓ‘y
git clone https://github.com/DuongNAD/google-meet-mcp.git
cd google-meet-mcp

# 2. Khởi tẑo và kích hoẑt môi trường ảo
python3 -m venv .venv
source .venv/bin/activate

# 3. CΓ i Δ‘αΊ·t cΓ‘c thΖ° viện cαΊ§n thiαΊΏt
pip install -e ".[dev]"

# 4. Khởi Δ‘α»™ng Web Dashboard & Companion Server 1-chαΊ‘m
google-meet-mcp dashboard

TrΓ¬nh duyệt cα»§a bαΊ‘n sαΊ½ tα»± Δ‘α»™ng mở giao diện Dashboard tαΊ‘i http://127.0.0.1:8765/dashboard.

CΓ‘ch 2: Triển khai Nhanh vα»›i Docker & Docker Compose (KhuyΓͺn dΓΉng cho Production)

Triển khai container an toΓ n chαΊ‘y bαΊ±ng tΓ i khoαΊ£n thường appuser (UID 10001, khΓ΄ng quyền root, cΓ³ cΖ‘ chαΊΏ healthcheck):

# 1. (Tùy chọn) Khai bÑo khóa API vào môi trường
export GEMINI_API_KEY="khoa-gemini-cua-ban"
export TELEGRAM_BOT_TOKEN="token-bot-telegram"
export TELEGRAM_CHAT_ID="id-chat-telegram"

# 2. BαΊ­t dα»‹ch vα»₯ chαΊ‘y ngαΊ§m vα»›i Docker Compose
docker compose up -d

# 3. Kiểm tra trαΊ‘ng thΓ‘i hoαΊ‘t Δ‘α»™ng
docker compose ps
curl -s http://localhost:8765/health

# 4. Mở Dashboard trΓͺn trΓ¬nh duyệt
open http://localhost:8765/dashboard

6. TΓΉy chọn Thu thαΊ­p Dα»― liệu Cuα»™c họp

BαΊ‘n cΓ³ thể lα»±a chọn thu thαΊ­p dα»― liệu bαΊ±ng Chrome Extension hoαΊ·c Userscript:

CΓ‘ch 1: Chrome Extension (Manifest V3) β€” KhuyαΊΏn nghα»‹

Thu thαΊ­p Δ‘αΊ§y Δ‘α»§ Δ‘a phΖ°Ζ‘ng thα»©c: Phα»₯ đề, αΊ’nh chα»₯p Slide HD vΓ  Luα»“ng Γ‚m thanh Tab WebRTC.

  1. Mở trΓ¬nh duyệt Chrome vΓ  truy cαΊ­p: chrome://extensions/.

  2. BαΊ­t cΓ΄ng tαΊ―c Developer mode ở gΓ³c trΓͺn cΓΉng bΓͺn phαΊ£i.

  3. NhαΊ₯p vΓ o nΓΊt Load unpacked vΓ  chọn thΖ° mα»₯c extension/ trong dα»± Γ‘n nΓ y.

  4. Tham gia bαΊ₯t kα»³ phΓ²ng họp Google Meet nΓ o (https://meet.google.com/*-*-*).

  5. BαΊ­t phα»₯ đề trα»±c tiαΊΏp trong Meet (phΓ­m tαΊ―t c).

  6. Huy hiệu TrαΊ‘ng thΓ‘i Nα»•i sαΊ½ xuαΊ₯t hiện ở gΓ³c dΖ°α»›i bΓͺn trΓ‘i mΓ n hΓ¬nh cuα»™c họp:

    • 🟒 ChαΊ₯m xanh: Đã kαΊΏt nα»‘i thΓ nh cΓ΄ng vα»›i mΓ‘y chα»§ companion (http://127.0.0.1:8765).

    • πŸ”΄ ChαΊ₯m đỏ: MΓ‘y chα»§ chΖ°a chαΊ‘y (kiểm tra lαΊ‘i google-meet-mcp companion).

    • Bα»™ Δ‘αΊΏm: Thα»‘ng kΓͺ sα»‘ cΓ’u thoαΊ‘i, sα»‘ slide vΓ  khα»‘i Γ’m thanh Δ‘Γ£ thu thαΊ­p theo thời gian thα»±c.

    • Thao tΓ‘c nhanh: NΓΊt mở "Dashboard", nΓΊt kΓ­ch hoαΊ‘t "Tα»•ng hợp AI", nΓΊt bαΊ­t "Audio".

CΓ‘ch 2: Tampermonkey Userscript (NhαΊΉ & Nhanh)

Thu thαΊ­p phα»₯ đề trα»±c tiαΊΏp mΓ  khΓ΄ng cαΊ§n cΓ i extension dαΊ‘ng unpacked.

  1. CΓ i Δ‘αΊ·t tiện Γ­ch Tampermonkey trΓͺn trΓ¬nh duyệt cα»§a bαΊ‘n.

  2. TαΊ‘o mα»›i mα»™t script vΓ  dΓ‘n toΓ n bα»™ nα»™i dung tệp src/google_meet_mcp/capture/meet_captions.user.js.

  3. LΖ°u lαΊ‘i vΓ  tham gia phΓ²ng họp Google Meet. BαΊ­t phα»₯ đề (c), cΓ’u thoαΊ‘i sαΊ½ tα»± Δ‘α»™ng truyền về cα»•ng 8765.


7. BαΊ£ng Lệnh CLI Chi tiαΊΏt

Bα»™ cΓ΄ng cα»₯ google-meet-mcp cung cαΊ₯p cΓ‘c lệnh trα»±c quan:

Lệnh

CΓΊ phΓ‘p

Ý nghĩa & Mô tả

start

google-meet-mcp start [--mode companion|stdio|all] [--host HOST] [--port PORT] [--open-browser]

Khởi Δ‘α»™ng toΓ n diện hệ thα»‘ng. MαΊ·c Δ‘α»‹nh chαΊ‘y companion. Ở chαΊΏ Δ‘α»™ all, chαΊ‘y song song cαΊ£ Companion HTTP vΓ  FastMCP stdio.

dashboard

google-meet-mcp dashboard [--host HOST] [--port PORT] [--no-browser]

Khởi Δ‘α»™ng mΓ‘y chα»§ companion vΓ  tα»± Δ‘α»™ng bαΊ­t Web Dashboard trΓͺn trΓ¬nh duyệt mαΊ·c Δ‘α»‹nh.

companion

google-meet-mcp companion [--host HOST] [--port PORT]

Khởi Δ‘α»™ng mΓ‘y chα»§ nαΊ‘p phα»₯ đề HTTP vΓ  phα»₯c vα»₯ Web Dashboard tαΊ‘i cα»•ng 8765.

stdio

google-meet-mcp stdio

ChαΊ‘y mΓ‘y chα»§ FastMCP qua luα»“ng nhαΊ­p/xuαΊ₯t chuαΊ©n (stdio) dΓ nh cho Google Antigravity vΓ  Claude Desktop.

status

google-meet-mcp status

Kiểm tra tΓ¬nh trαΊ‘ng OAuth Google vΓ  in danh sΓ‘ch cΓ‘c phiΓͺn họp Δ‘Γ£ lΖ°u trα»― dΖ°α»›i dαΊ‘ng bαΊ£ng Rich.

auth

google-meet-mcp auth [--no-browser]

Mở trΓ¬nh duyệt thα»±c hiện cαΊ₯p quyền Google OAuth2 cho Meet API vΓ  Drive API.

synthesize

google-meet-mcp synthesize <SESSION_ID> [--export]

Tα»•ng hợp phiΓͺn họp ngay tα»« dΓ²ng lệnh vΓ  in tΓ³m tαΊ―t Δ‘iều hΓ nh, tΓΉy chọn xuαΊ₯t ra Markdown.


8. Giao diện Web Dashboard TΖ°Ζ‘ng tΓ‘c

Truy cαΊ­p Dashboard tαΊ‘i http://127.0.0.1:8765/dashboard để sα»­ dα»₯ng Δ‘αΊ§y Δ‘α»§ cΓ‘c tiện Γ­ch:

  • πŸ—‚οΈ QuαΊ£n lΓ½ PhiΓͺn họp: Xem danh sΓ‘ch cΓ‘c cuα»™c gọi, thα»‘ng kΓͺ sα»‘ người tham gia, tα»•ng sα»‘ cΓ’u nΓ³i, sα»‘ tα»« vΓ  thời lượng cuα»™c họp.

  • 🎡 TrΓ¬nh phΓ‘t Γ‚m thanh Đồng bα»™: Nghe lαΊ‘i cΓ‘c Δ‘oαΊ‘n ghi Γ’m WebM Opus, bαΊ₯m tua trα»±c tiαΊΏp Δ‘αΊΏn mα»‘c thời gian cα»§a tα»«ng cΓ’u thoαΊ‘i.

  • πŸ–ΌοΈ ThΖ° viện Slide & αΊ’nh minh chα»©ng: Duyệt cΓ‘c slide trΓ¬nh chiαΊΏu chαΊ₯t lượng cao, nhαΊ₯p mở trα»±c tiαΊΏp cΓ‘c mΓ£ QR vΓ  liΓͺn kαΊΏt tΓ i liệu được bΓ³c tΓ‘ch tα»± Δ‘α»™ng.

  • πŸ“ TαΊ£i BiΓͺn bαΊ£n Đa Δ‘α»‹nh dαΊ‘ng: XuαΊ₯t biΓͺn bαΊ£n tα»©c thΓ¬ dΖ°α»›i dαΊ‘ng:

    • Markdown (.md): PhΓΉ hợp chΓ©p vΓ o Obsidian, Notion, GitHub.

    • HTML In αΊ₯n (.html): TrΓ¬nh bΓ y chuyΓͺn nghiệp theo chuαΊ©n tΓ i liệu Δ‘iều hΓ nh, sαΊ΅n sΓ ng in ra PDF.

    • JSON (.json): Dα»― liệu cΓ³ cαΊ₯u trΓΊc cho cΓ‘c hệ thα»‘ng phαΊ§n mềm khΓ‘c.

  • βš™οΈ CΓ i Δ‘αΊ·t CαΊ£nh bΓ‘o Trα»±c quan: Hα»™p thoαΊ‘i cαΊ₯u hΓ¬nh vΓ  kiểm tra kαΊΏt nα»‘i gα»­i tin nhαΊ―n Δ‘αΊΏn Telegram vΓ  Zalo.


9. Trợ lΓ½ Hỏi Δ‘Γ‘p Cuα»™c họp AI & TrΓ­ tuệ Gemini

Khung chat tΖ°Ζ‘ng tΓ‘c trα»±c tiαΊΏp trΓͺn Web Dashboard:

  • Đặt cΓ’u hỏi tα»± nhiΓͺn về bαΊ₯t kα»³ nα»™i dung nΓ o trong cuα»™c họp:

    • "Ai được giao phα»₯ trΓ‘ch chuαΊ©n bα»‹ hαΊ‘ tαΊ§ng cΖ‘ sở dα»― liệu?"

    • "QuyαΊΏt Δ‘α»‹nh chα»‘t về ngΓ’n sΓ‘ch quΓ½ 4 lΓ  bao nhiΓͺu?"

    • "GiαΊ£i thΓ­ch sΖ‘ Δ‘α»“ kiαΊΏn trΓΊc xuαΊ₯t hiện ở slide sα»‘ 3."

  • TΓ­ch hợp Gemini Multimodal API: AI đọc hiểu Δ‘α»“ng thời cαΊ£ vΔƒn bαΊ£n phα»₯ đề vΓ  nα»™i dung hΓ¬nh αΊ£nh trong slide trΓ¬nh chiαΊΏu.

  • NΓΊt TrΓ­ch dαΊ«n TΖ°Ζ‘ng tΓ‘c:

    • NΓΊt [MM:SS] (vΓ­ dα»₯ [04:15]): NhαΊ₯p vΓ o để tua trΓ¬nh phΓ‘t Γ’m thanh Δ‘αΊΏn Δ‘ΓΊng giΓ’y diα»…n giαΊ£ phΓ‘t biểu.

    • NΓΊt [Slide #X] (vΓ­ dα»₯ [Slide #2]): NhαΊ₯p vΓ o để trượt slide gallery Δ‘αΊΏn Δ‘ΓΊng trang tΓ i liệu liΓͺn quan.

  • ChαΊΏ Δ‘α»™ NgoαΊ‘i tuyαΊΏn Tα»± hΓ nh (Heuristic Fallback): HoαΊ‘t Δ‘α»™ng trΖ‘n tru ngay cαΊ£ khi khΓ΄ng cΓ³ Internet hoαΊ·c chΖ°a nhαΊ­p khΓ³a API nhờ Δ‘α»™ng cΖ‘ bΓ³c tΓ‘ch ngα»― nghΔ©a cα»₯c bα»™.


10. Động cΖ‘ CαΊ£nh bΓ‘o Đa kΓͺnh (Telegram & Zalo)

KhΓ΄ng bao giờ bỏ lα»‘ cΓ‘c thΓ΄ng tin quan trọng khi Δ‘ang bαΊ­n việc khΓ‘c:

  • ✈️ KΓͺnh Telegram Bot Native: NhαΊ­n tin nhαΊ―n cαΊ£nh bΓ‘o tα»©c thΓ¬ kΓ¨m tΓͺn người gọi, nα»™i dung thoαΊ‘i vΓ  nΓΊt bαΊ₯m trα»±c tiαΊΏp mở Dashboard.

  • πŸ’¬ KΓͺnh Zalo: Hα»— trợ cαΊ£ Zalo Webhook (cho hệ thα»‘ng n8n / bot riΓͺng) vΓ  Zalo Official Account (OA) OpenAPI v3.0.

  • 🎯 NhαΊ­n diện ThΓ΄ng minh & ChuαΊ©n hΓ³a TiαΊΏng Việt:

    • Tα»± Δ‘α»™ng bỏ dαΊ₯u (strip_accents) nhαΊ­n diện chuαΊ©n xΓ‘c cΓ‘c cΓ‘ch viαΊΏt tΓͺn (vΓ­ dα»₯: DΖ°Ζ‘ng, Duong, duongnad).

    • Lọc cΓ‘c tα»« khΓ³a cαΊ₯p bΓ‘ch (deadline, gαΊ₯p, hỏi, Ζ‘i, nhờ, urgent).

    • CΖ‘ chαΊΏ chα»‘ng spam (cooldown) trΓ‘nh gα»­i lαΊ·p tin nhαΊ―n khi tΓͺn được nhαΊ―c liΓͺn tα»₯c trong thời gian ngαΊ―n.


11. Đặc tαΊ£ ToΓ n diện API RESTful

MΓ‘y chα»§ Companion phα»₯c vα»₯ 14+ endpoint chuαΊ©n RESTful:

PhΖ°Ζ‘ng thα»©c

Endpoint

Chức năng

Tham sα»‘ / Body

CαΊ₯u trΓΊc Dα»― liệu TrαΊ£ về

GET

/health

Kiểm tra trαΊ‘ng thΓ‘i hoαΊ‘t Δ‘α»™ng (Docker Healthcheck)

KhΓ΄ng

{"status": "ok", "service": "google-meet-mcp-companion"}

GET

/dashboard

Giao diện Web Dashboard tΖ°Ζ‘ng tΓ‘c

KhΓ΄ng

Ứng dα»₯ng HTML Web SPA

GET

/

Điều hΖ°α»›ng trang chα»§

KhΓ΄ng

Chuyển hΖ°α»›ng HTTP 302 về /dashboard

POST

/chunk

NαΊ‘p cΓ’u thoαΊ‘i phα»₯ đề trα»±c tiαΊΏp

{"meeting_code": str, "speaker": str, "text": str, "timestamp": str}

{"status": "ok", "session_id": str, "utterances_count": int}

POST

/snapshot

NαΊ‘p αΊ£nh chα»₯p slide vΓ  mΓ£ QR/link

{"meeting_code": str, "image_base64": str, "qr_codes": [], "links": []}

{"status": "ok", "session_id": str, "slide_index": int}

POST

/audio

NαΊ‘p Δ‘oαΊ‘n Γ’m thanh Opus WebRTC

{"meeting_code": str, "audio_base64": str, "duration_seconds": float}

{"status": "ok", "session_id": str, "chunk_index": int}

POST

/session/start

Khởi tαΊ‘o phiΓͺn họp mα»›i

{"title": str, "meeting_code": str, "session_id": Optional[str]}

Đối tượng JSON MeetingSession

POST

/session/end

KαΊΏt thΓΊc phiΓͺn vΓ  kΓ­ch hoαΊ‘t tα»•ng hợp

{"session_id": str}

{"status": "ended", "session_id": str}

GET

/api/sessions

LαΊ₯y danh sΓ‘ch cΓ‘c phiΓͺn họp Δ‘Γ£ lΖ°u

?limit=20

MαΊ£ng JSON List[SessionSummary]

GET

/api/session/{id}

LαΊ₯y chi tiαΊΏt phiΓͺn họp

Đường dẫn {id}

Đối tượng SessionDetail (thoαΊ‘i, slide, audio)

GET

/api/session/{id}/slides/{file}

Phα»₯c vα»₯ tệp αΊ£nh slide chαΊ₯t lượng cao

Đường dẫn {id}, {file}

Nhα»‹ phΓ’n image/jpeg

GET

/api/session/{id}/audio/{file}

PhΓ‘t luα»“ng Γ’m thanh WebM Opus (hα»— trợ RFC 7233 Range)

Đường dẫn {id}, {file}, Header Range

Nhα»‹ phΓ’n audio/webm (HTTP 200 hoαΊ·c 206)

GET

/api/session/{id}/export

TαΊ£i xuα»‘ng biΓͺn bαΊ£n cuα»™c họp

?format=markdown|html|json

Tệp Δ‘Γ­nh kΓ¨m tαΊ£i về

POST

/api/session/{id}/chat

Trợ lΓ½ Chat AI hỏi Δ‘Γ‘p cuα»™c họp

{"question": str, "stream": bool}

Luα»“ng SSE hoαΊ·c JSON cΓ’u trαΊ£ lời kΓ¨m trΓ­ch dαΊ«n

GET

/api/alerts/config

Đọc cαΊ₯u hΓ¬nh cαΊ£nh bΓ‘o hiện tαΊ‘i

KhΓ΄ng

Đối tượng JSON AlertConfig

POST

/api/alerts/config

CαΊ­p nhαΊ­t cαΊ₯u hΓ¬nh cαΊ£nh bΓ‘o

Dα»― liệu JSON AlertConfig

{"status": "ok", "config": ...}

POST

/api/alerts/test

Thα»­ nghiệm gα»­i tin cαΊ£nh bΓ‘o (Telegram/Zalo)

{"channel": "telegram"|"zalo", ...}

{"status": "ok"|"error", "message": ...}

POST

/session/synthesize

KΓ­ch hoαΊ‘t AI tα»•ng hợp cuα»™c họp

{"session_id": str}

{"status": "ok", "exports": {...}}


12. Danh mα»₯c CΓ΄ng cα»₯ FastMCP cho AI Agent (Antigravity, Claude, Cursor)

Tích hợp google-meet-mcp vào cÑc tÑc tử AI lập trình:

1. Google Antigravity (~/.gemini/config/mcp_config.json)

{
  "mcpServers": {
    "google-meet": {
      "command": "/duong-dan/google-meet-mcp/.venv/bin/python",
      "args": ["-m", "google_meet_mcp.cli", "stdio"],
      "env": {
        "GOOGLE_MEET_MCP_DATA_DIR": "/Users/tenban/.google_meet_mcp",
        "GEMINI_API_KEY": "khoa-gemini-cua-ban"
      }
    }
  }
}

2. Claude Desktop (~/Library/Application Support/Claude/claude_desktop_config.json)

{
  "mcpServers": {
    "google-meet": {
      "command": "/duong-dan/google-meet-mcp/.venv/bin/python",
      "args": ["-m", "google_meet_mcp.cli", "stdio"]
    }
  }
}

3. Cursor IDE (.cursor/mcp.json)

{
  "mcpServers": {
    "google-meet": {
      "command": "google-meet-mcp",
      "args": ["stdio"]
    }
  }
}

Danh sΓ‘ch CΓ΄ng cα»₯ FastMCP:

  1. meet_start_session: BαΊ―t Δ‘αΊ§u phiΓͺn họp mα»›i vα»›i bα»™ đệm an toΓ n hα»— trợ họp 3 tiαΊΏng+.

  2. meet_ingest_chunk: Ghi nhαΊ­n trα»±c tiαΊΏp tα»«ng cΓ’u nΓ³i vΓ o bα»™ đệm α»• cα»©ng.

  3. meet_get_live_status: Xem nhanh trαΊ‘ng thΓ‘i trα»±c tiαΊΏp (thời lượng, sα»‘ tα»«, người nΓ³i).

  4. meet_list_sessions: Xem danh sΓ‘ch cΓ‘c phiΓͺn họp Δ‘Γ£ lΖ°u trΓͺn α»• cα»©ng.

  5. meet_fetch_google_transcript: TαΊ£i toΓ n bα»™ transcript qua Google Meet REST API v2.

  6. meet_fetch_drive_transcript: PhΓ’n tΓ­ch tệp transcript tα»± Δ‘α»™ng lΖ°u trΓͺn Google Drive.

  7. meet_list_recent_conferences: Liệt kΓͺ cΓ‘c cuα»™c họp Google Meet gαΊ§n nhαΊ₯t.

  8. meet_synthesize_meeting: Tα»•ng hợp sΓ’u toΓ n diện: TΓ³m tαΊ―t Δ‘iều hΓ nh, Ma trαΊ­n nhiệm vα»₯, BαΊ£ng quyαΊΏt Δ‘α»‹nh.

  9. meet_export_minutes: XuαΊ₯t biΓͺn bαΊ£n họp hoΓ n chỉnh ra Markdown, HTML hoαΊ·c JSON.

  10. meet_check_auth / meet_setup_auth: Kiểm tra vΓ  khởi Δ‘α»™ng luα»“ng xΓ‘c thα»±c Google OAuth2.


13. Bảng Tham chiếu Biến Môi trường

Biến môi trường

MαΊ·c Δ‘α»‹nh

Ý nghĩa & Mô tả

GOOGLE_MEET_MCP_DATA_DIR

~/.google_meet_mcp

ThΖ° mα»₯c gα»‘c lΖ°u trα»― cΓ‘c phiΓͺn họp, slide, audio vΓ  xuαΊ₯t dα»― liệu

GOOGLE_MEET_COMPANION_HOST

127.0.0.1

Địa chỉ IP mΓ‘y chα»§ companion vΓ  Web Dashboard lαΊ―ng nghe

GOOGLE_MEET_COMPANION_PORT

8765

Cα»•ng mαΊ‘ng mΓ‘y chα»§ companion vΓ  Web Dashboard phα»₯c vα»₯

GEMINI_API_KEY

(KhΓ΄ng cΓ³)

KhΓ³a API Google Gemini phα»₯c vα»₯ chat hỏi Δ‘Γ‘p vΓ  tα»•ng hợp thΓ΄ng minh

TELEGRAM_BOT_TOKEN

(KhΓ΄ng cΓ³)

Token bot Telegram tαΊ‘o qua @BotFather

TELEGRAM_CHAT_ID

(KhΓ΄ng cΓ³)

ID cuα»™c trΓ² chuyện hoαΊ·c nhΓ³m nhαΊ­n thΓ΄ng bΓ‘o Telegram

ZALO_WEBHOOK_URL

(KhΓ΄ng cΓ³)

Đường dαΊ«n webhook chuyển tiαΊΏp thΓ΄ng bΓ‘o Zalo

ZALO_OA_ACCESS_TOKEN

(KhΓ΄ng cΓ³)

Access token cα»§a Zalo Official Account v3.0

ZALO_USER_ID

(KhΓ΄ng cΓ³)

ID người dΓΉng Zalo Δ‘Γ­ch để nhαΊ­n tin nhαΊ―n riΓͺng

GOOGLE_MEET_CREDENTIALS_FILE

~/.google_meet_mcp/credentials.json

Đường dαΊ«n tệp client credentials Google OAuth2

GOOGLE_MEET_TOKEN_FILE

~/.google_meet_mcp/token.json

Đường dαΊ«n tệp token người dΓΉng Google OAuth2


14. CαΊ©m nang Xα»­ lΓ½ Sα»± cα»‘ & ThαΊ―c mαΊ―c

Sα»± cα»‘ thường gαΊ·p

NguyΓͺn nhΓ’n gα»‘c rα»…

HΖ°α»›ng dαΊ«n khαΊ―c phα»₯c tα»«ng bΖ°α»›c

Xung Δ‘α»™t Cα»•ng 8765 (Address already in use)

CΓ³ mα»™t tiαΊΏn trΓ¬nh hoαΊ·c mΓ‘y chα»§ khΓ‘c Δ‘ang chiαΊΏm dα»₯ng cα»•ng 8765.

TΓ¬m mΓ£ PID qua lệnh lsof -i :8765 vΓ  tαΊ―t nΓ³, hoαΊ·c Δ‘α»•i cα»•ng khΓ‘c: google-meet-mcp companion --port 8766.

Extension BΓ‘o Lα»—i KαΊΏt Nα»‘i (Failed to fetch)

MΓ‘y chα»§ companion chΖ°a chαΊ‘y hoαΊ·c bα»‹ tường lα»­a chαΊ·n.

ChαΊ‘y lệnh google-meet-mcp companion hoαΊ·c docker compose up -d. Kiểm tra bαΊ±ng lệnh curl -s http://127.0.0.1:8765/health.

Lα»—i CSP Google Meet (Refused connect-src)

ChΓ­nh sΓ‘ch bαΊ£o mαΊ­t cα»§a Google Meet chαΊ·n kαΊΏt nα»‘i fetch tα»« nα»™i dung trang.

Sα»­ dα»₯ng bαΊ£n Chrome Extension mα»›i nhαΊ₯t Δ‘Γ£ Δ‘iều hΖ°α»›ng toΓ n bα»™ request qua Service Worker ngαΊ§m.

KhΓ΄ng Thu được Γ‚m thanh

ChΖ°a cαΊ₯p quyền thu Γ’m thanh tab cho trΓ¬nh duyệt.

Khi chọn chia sαΊ» mΓ n hΓ¬nh/tab trong Meet, nhα»› tΓ­ch chọn vΓ o Γ΄ "Share tab audio" (Chia sαΊ» Γ’m thanh tab).

Docker BΓ‘o Lα»—i PhΓ’n quyền ~/.google_meet_mcp

ThΖ° mα»₯c trΓͺn mΓ‘y host thuα»™c sở hα»―u cα»§a root thay vΓ¬ UID 10001.

ChαΊ‘y lệnh sudo chown -R 10001:10001 ~/.google_meet_mcp trΓͺn mΓ‘y host trΖ°α»›c khi bαΊ­t docker.

Lα»—i Chat AI Gemini

ChΖ°a cαΊ₯u hΓ¬nh hoαΊ·c sai khΓ³a API Gemini.

ThiαΊΏt lαΊ­p biαΊΏn mΓ΄i trường export GEMINI_API_KEY="khoa-cua-ban" hoαΊ·c nhαΊ­p trα»±c tiαΊΏp trong CΓ i Δ‘αΊ·t Dashboard. NαΊΏu khΓ΄ng cΓ³ key, hệ thα»‘ng tα»± Δ‘α»™ng dΓΉng thuαΊ­t toΓ‘n phΓ’n tΓ­ch cα»₯c bα»™.

KhΓ΄ng NhαΊ­n được Tin Telegram

Sai Bot Token/Chat ID hoαΊ·c chΖ°a tα»«ng nhαΊ―n tin cho Bot.

Kiểm tra token qua curl -s https://api.telegram.org/bot<TOKEN>/getMe. HΓ£y chαΊ―c chαΊ―n bαΊ‘n Δ‘Γ£ bαΊ₯m /start vα»›i bot trong Telegram.


15. Kiểm thα»­ & Đảm bαΊ£o ChαΊ₯t lượng

Hệ thα»‘ng được bαΊ£o vệ bởi 495 bΓ i kiểm thα»­ tα»± Δ‘α»™ng chαΊ‘y qua 4 tαΊ§ng kiểm Δ‘α»‹nh:

  • TαΊ§ng 1 (Chα»©c nΔƒng cα»‘t lΓ΅i): Kiểm thα»­ SessionManager, Synthesizer, Chat Assistant, vΓ  bα»™ phΓ‘t hiện nhαΊ―c tΓͺn.

  • TαΊ§ng 2 (BiΓͺn giα»›i hαΊ‘n & NgoαΊ‘i lệ): MΓ΄ phỏng họp nhiều giờ liΓͺn tα»₯c, dα»― liệu Δ‘αΊ§u vΓ o khiαΊΏm khuyαΊΏt, audio ngαΊ―t quΓ£ng.

  • TαΊ§ng 3 (TΖ°Ζ‘ng tΓ‘c & Endpoints): Kiểm tra chuαΊ©n hợp Δ‘α»“ng 14+ REST API, phΓ‘t audio Range RFC 7233 vΓ  WebSocket.

  • TαΊ§ng 4 (TαΊ£i trọng & Ứng suαΊ₯t cao): MΓ΄ phỏng tαΊ£i 45,000+ cΓ’u thoαΊ‘i, ghi đệm Δ‘α»“ng thời vΓ  kiểm tra dọn dαΊΉp bα»™ nhα»› đệm an toΓ n.

# ChαΊ‘y bα»™ test tα»± Δ‘α»™ng (495 tests)
.venv/bin/pytest tests/ -v

# Chẑy kèm bÑo cÑo độ phủ mã nguồn (Coverage)
.venv/bin/pytest tests/ --cov=google_meet_mcp --cov-report=term-missing

16. Cam kαΊΏt An toΓ n & BαΊ£o mαΊ­t Dα»― liệu

  • πŸ”’ Xα»­ lΓ½ Cα»₯c bα»™ Tuyệt Δ‘α»‘i: ToΓ n bα»™ phα»₯ đề, αΊ£nh chα»₯p slide vΓ  file ghi Γ’m chỉ lΖ°u trα»― trα»±c tiαΊΏp trΓͺn mΓ‘y cα»§a bαΊ‘n (~/.google_meet_mcp). KhΓ΄ng cΓ³ bαΊ₯t kα»³ dα»― liệu nΓ o bα»‹ tαΊ£i lΓͺn mΓ‘y chα»§ cα»§a bΓͺn thα»© ba nαΊΏu bαΊ‘n khΓ΄ng chα»§ Δ‘α»™ng cαΊ₯u hΓ¬nh khΓ³a API LLM bΓͺn ngoΓ i.

  • πŸ›‘οΈ Container Docker ChuαΊ©n Doanh nghiệp: ChαΊ‘y dΖ°α»›i quyền người dΓΉng thΓ΄ng thường (appuser, UID 10001), kΓ­ch hoαΊ‘t chΓ­nh sΓ‘ch no-new-privileges:true vΓ  kiểm tra sα»©c khỏe container Δ‘α»‹nh kα»³.

  • πŸ”‘ BαΊ£o vệ ThΓ΄ng tin NhαΊ‘y cαΊ£m: Token OAuth vΓ  API Key được lΖ°u tαΊ‘i thΖ° mα»₯c hαΊ‘n chαΊΏ quyền truy cαΊ­p vΓ  tα»± Δ‘α»™ng được loαΊ‘i trα»« khỏi git qua .gitignore.


πŸ“œ GiαΊ₯y phΓ©p Nguα»“n mở (License)

Dα»± Γ‘n được phΓ‘t hΓ nh theo giαΊ₯y phΓ©p mΓ£ nguα»“n mở MIT License.
BαΊ£n quyền Β© 2026 thuα»™c về DuongNAD.

Available Tools

11 tools
meet_check_authA

Checks Google OAuth2 authentication status, tokens, credentials, and API scopes.

Inputs: no named parameters. Returns: result

meet_export_minutesA

Exports the synthesized meeting minutes to a local Markdown (.md), HTML (.html, print/PDF ready), or structured JSON (.json) document in the exports directory.

Inputs: session_id (required), format. Returns: result

meet_fetch_drive_transcriptB

Finds and reads Google Meet transcript documents auto-saved in Google Drive, and parses them into a durable session.

Inputs: file_id_or_query (required), title. Returns: result

meet_fetch_google_transcriptA

Fetches full transcript entries from Google Meet API v2 for a given conference record, resolves participant names, and creates a local durable session.

Inputs: conference_record_id (required), title. Returns: result

meet_get_live_statusB

Retrieves live status of a meeting: duration, word count, utterance count, speaker breakdown, and recent utterances.

Inputs: session_id (required), recent_lines. Returns: result

meet_ingest_chunkB

Ingests a live spoken line/chunk into an active session in real-time. Automatically flushes to disk immediately.

Inputs: text (required), speaker (required), session_id (required), relative_seconds. Returns: result

meet_list_recent_conferencesC

Queries Google Meet REST API v2 for recent conference records.

Inputs: page_size. Returns: result

meet_list_sessionsC

Lists all locally stored meeting sessions with metadata.

Inputs: limit. Returns: result

meet_setup_authA

Initiates Google OAuth 2.0 flow in the browser to authorize Google Meet, Drive, and Calendar access. Requires credentials.json from Google Cloud Console.

Inputs: open_browser. Returns: result

meet_start_sessionB

Starts a new durable meeting session with append-only disk buffering. Safely handles meetings up to 3+ hours without memory exhaustion or data loss.

Inputs: title, source, meeting_code. Returns: result

meet_synthesize_meetingA

Synthesizes a 3-hour+ meeting session into a comprehensive Executive Meeting Minutes report with Timeline Milestones, Decision Log, Action Items Matrix (PIC & Deadlines), and Participant Analytics. Also returns optimized AI prompts for Antigravity.

Inputs: session_id (required). Returns: result

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

Loading tool schema changelog…

    TDQS

    A3.7/5.0

    Scored across 11 tools

    Disambiguation5/5

    Every tool targets a distinct action and resource: auth setup vs. auth check, live session ingestion vs. status, local session listing vs. cloud conference listing, and Meet transcript fetching vs. Drive transcript fetching. The only borderline pair is list_sessions and list_recent_conferences, but their descriptions clearly separate local storage from the Meet REST API.

    Naming Consistency5/5

    All tools use a consistent meet_ prefix followed by verb_noun names in snake_case, such as check_auth, start_session, ingest_chunk, list_sessions, fetch_google_transcript, and export_minutes. There are no mixed casing styles, vague generic verbs, or unexpected naming deviations.

    Tool Count5/5

    With 11 tools, the set is well-scoped for a Google Meet transcription and minutes-generation server. Each tool covers a meaningful step in the workflow without redundancy or unnecessary bloat.

    Completeness4/5

    The core workflow is well covered: auth, live ingestion, status, listing, transcript retrieval from both Meet and Drive, synthesis, and export. Minor gaps exist around session lifecycle managementβ€”there is no explicit stop/end session, delete session, or raw transcript exportβ€”but agents can work around these by using synthesize and export.

    Maintenance

    ActivityStale
    ResponsivenessOutdated data

    Related MCP Connectors

    Related MCP Servers

    • A
      license
      B
      quality
      D
      maintenance
      A Model Context Protocol server that enables AI agents to join and interact with online meetings (Zoom and Google Meet), capturing transcripts and recordings to generate meeting summaries.
      3
      10
      MIT
    • A
      license
      Not graded
      quality
      C
      maintenance
      Local-first meeting capture and transcription for Claude Code. Records audio from meeting apps, transcribes locally with whisper.cpp, and produces structured notes via Claude.
      1
      Apache 2.0