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: ChatterBox MCP Server

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.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, but the verb 'Checks' clearly conveys a read-only inspection with no mutating side effects. It also enumerates the specific aspects inspected: status, tokens, credentials, and API scopes. This is sufficient behavioral disclosure for a simple status-checking tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, front-loaded sentence with no filler. Every element earns its place by specifying exactly what the tool checks.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with no parameters, an output schema, and a simple read-only purpose, this description provides adequate context for an agent to select and invoke it. The only gap is explicit guidance about when to prefer this over related auth tools.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has zero parameters and the schema coverage is 100%, so there is no parameter information for the description to add. The description appropriately omits parameter details because none exist.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('Checks') and identifies a clear resource: Google OAuth2 authentication status, tokens, credentials, and API scopes. This distinguishes it from its sibling meet_setup_auth, which is about establishing authentication rather than checking it.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies this tool should be used when an agent needs to verify the current OAuth2 authentication state before proceeding with Google Meet operations. However, it does not explicitly state when to use it versus alternatives like meet_setup_auth or provide exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
formatNomarkdown
session_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden. It does disclose the filesystem side effect (writes local documents to the exports directory) and adds useful format traits (HTML is print/PDF ready, JSON is structured). However, it omits what happens when a session has no synthesized minutes, overwrite behavior, and auth prerequisites.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single, front-loaded sentence with the verb 'Exports' leading. Every clause earns its place: resource, three formats with useful traits, and the destination. There is no repetition of schema fields or filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple two-parameter tool with an output schema covering return values, the description covers the essentials: what is exported, available formats, and where files land. Remaining gaps are moderate given zero annotations and schema descriptions - the unstated prerequisite of meet_synthesize_meeting, exact format string values, and auth/overwrite behavior.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, so the description must compensate. It adds real meaning to the format parameter by enumerating Markdown/.md, HTML/.html, and JSON/.json, and it scopes session_id to a session whose minutes were synthesized. Yet it never gives the exact accepted string values for format or defines the session lifecycle relationship beyond the adjective 'synthesized.'

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb and resource combination ('Exports the synthesized meeting minutes') plus concrete output formats and a destination. Among the siblings, none perform exports, so this tool is inherently distinguished from meet_synthesize_meeting (which produces minutes) and the fetch/list tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage context is implied rather than explicit: calling the minutes 'synthesized' signals the prerequisite of meet_synthesize_meeting, but the description never names the sibling, states 'run after synthesis completes,' or mentions auth requirements via meet_check_auth. No exclusions or alternative routing are given.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

meet_fetch_drive_transcriptB

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

ParametersJSON Schema
NameRequiredDescriptionDefault
titleNo
file_id_or_queryYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden. It discloses a side effect ('parses them into a durable session') but does not state authentication prerequisites, whether a session is created or updated, or the lifecycle impact. The read-then-persist behavior is only partially transparent.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single tight sentence that leads with the main action and resource. No filler; every clause adds information about the tool's behavior.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Despite an output schema, the description omits prerequisites (auth/session existence) and parameter semantics, and only vaguely explains the 'durable session' side effect. For a tool with no annotations and a low-coverage schema, this is not complete enough to invoke reliably in all cases.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must clarify the two parameters. It does not explain how file_id_or_query behaves when it is a query versus an ID, and the optional title is left entirely ambiguous. The word 'Finds' provides only a weak hint.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description identifies a specific verb sequence ('finds and reads... parses') and a concrete resource: Google Meet transcripts auto-saved in Google Drive. It is clear enough to distinguish from siblings like meet_fetch_google_transcript, though it does not explicitly name the distinction.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The source ('auto-saved in Google Drive') and destination ('durable session') imply when to use it, but the description gives no explicit guidance on when not to use it or what alternative to choose, such as meet_fetch_google_transcript or meet_start_session.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
titleNo
conference_record_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the behavioral disclosure burden. It does disclose the external API source, participant-name resolution, and the non-obvious side effect of creating a local durable session. However, it does not mention authentication prerequisites, idempotency, or failure behavior, which are relevant for an external API call.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single dense sentence with no filler, front-loaded with the main action and followed by useful secondary behaviors. Every clause earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description covers the main input, source, resolution behavior, and side effect, and the output schema makes return values unnecessary to describe. Gaps remain: no stated requirement for prior authentication/setup and no semantics for the optional title parameter, leaving the tool slightly incomplete for correct invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate. It gives some meaning to conference_record_id by saying 'for a given conference record,' but it entirely omits the optional title parameter, leaving its purpose and default behavior unexplained.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific action (fetches full transcript entries), a specific source (Google Meet API v2), and a target input (a given conference record). It also clearly distinguishes itself from the Drive-transcript sibling by naming the Meet API source.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies when to use the tool: when a conference_record_id is available and full transcript entries plus participant names are needed. However, it does not explicitly mention alternatives such as meet_fetch_drive_transcript or any conditions for avoiding this tool.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

meet_get_live_statusB

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

ParametersJSON Schema
NameRequiredDescriptionDefault
session_idYes
recent_linesNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.2/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full behavioral burden. It discloses read-only intent via 'Retrieves' and lists response contents, but omits auth expectations (significant given meet_check_auth/meet_setup_auth siblings), the precondition that the session must be active/live, and error behavior for stale or nonexistent sessions.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

One efficient sentence with the verb and resource front-loaded, followed by a tight enumeration of response fields. No filler; every element names a distinct piece of returned data and earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values are covered elsewhere and the field enumeration is a helpful bonus. The tool is low-complexity (2 params, 1 required), but the description fails to state the live-session prerequisite and session_id provenance, both of which an agent needs to call it correctly without erroring.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate but only weakly does. 'Recent utterances' loosely hints at recent_lines' purpose, yet session_id provenance is never explained — an agent cannot tell it should come from meet_start_session or meet_list_sessions — and the mapping from recent_lines to the returned utterances is only implicit.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Specific verb ('Retrieves'), clear resource ('live status of a meeting'), and an explicit enumeration of the returned data (duration, word count, utterance count, speaker breakdown, recent utterances). The 'live status' framing distinguishes it from the transcript-fetching siblings (meet_fetch_google_transcript, meet_fetch_drive_transcript) and session-management tools without needing to open their schemas.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance on when to use this tool versus alternatives. The 'live' qualifier implies it is meant for in-progress meetings, but there is no explicit statement of when to prefer it over transcript-fetching or session-list tools, and no mention that a session must already exist before calling.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

meet_ingest_chunkB

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

ParametersJSON Schema
NameRequiredDescriptionDefault
textYes
speakerYes
session_idYes
relative_secondsNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of behavioral disclosure. It does add one meaningful behavior, 'automatically flushes to disk immediately', indicating persistence, but it omits critical operational details such as authentication requirements, failure behavior when no active session exists, whether chunks are appended, and whether calls are idempotent.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is exactly two sentences with no filler. It front-loads the primary purpose and then adds a concise behavioral detail about immediate disk flushing; every word earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a write operation with no annotations and 0% parameter documentation, the description is too thin to fully prepare an agent. It does not explain how to supply relative_seconds, what speaker values should look like, whether an active session must already exist, or what happens if the session is invalid.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate for undocumented parameters. It indirectly maps 'spoken line/chunk' to the text parameter and 'active session' to session_id, but it never explains the speaker or relative_seconds parameters, their formats, or semantics.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('ingests'), a specific resource ('live spoken line/chunk'), and a clear context ('active session', 'real-time'), which makes the tool's purpose unmistakable. It is distinguishable from sibling tools like fetch_google_transcript or export_minutes by its ingestion focus, though it does not explicitly name those alternatives.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The phrase 'live spoken line/chunk into an active session in real-time' implies it should be used during an ongoing meeting, when streaming spoken content into the session. However, it gives no explicit guidance on when to prefer this tool over alternatives, nor does it state when not to use it.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

meet_list_recent_conferencesC

Queries Google Meet REST API v2 for recent conference records.

ParametersJSON Schema
NameRequiredDescriptionDefault
page_sizeNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of behavioral disclosure. It states that the tool queries an API, implying a read operation, but it does not mention auth requirements, pagination behavior, rate limits, or any other side effects. This is minimal transparency for an API-backed tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single sentence that clearly states the action, the API version, and the object. It is front-loaded and contains no filler, making it appropriately concise for a simple list operation.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool is simple, has an output schema, and only one optional parameter, so the description is mostly sufficient for basic invocation. However, it lacks any mention of auth prerequisites or when to choose this over related Meet tools, leaving some contextual gaps.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, and the description does not compensate by explaining the page_size parameter. The parameter is simple and self-explanatory from its name and default value, but the description adds no semantic meaning beyond what the schema already provides.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('Queries') and a specific resource ('Google Meet REST API v2') with a clear object ('recent conference records'). It is not a tautology, but it does not distinguish itself from the sibling tool meet_list_sessions, so it stops short of a perfect score.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no guidance about when to use this tool versus alternatives like meet_list_sessions or meet_fetch_google_transcript. The description gives no context about prerequisites such as authentication being set up or when a caller should choose this over a sibling.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

meet_list_sessionsC

Lists all locally stored meeting sessions with metadata.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description must carry the full behavioral burden. It does disclose a read-only operation and local scope, but it does not explain how the 'limit' parameter interacts with the claim of listing 'all' sessions, nor does it mention auth requirements or session-state filtering.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, front-loaded sentence with no wasted words. It efficiently conveys the core action and resource.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple one-optional-parameter tool with an output schema, the description is minimally adequate. However, it is incomplete in distinguishing this tool from meet_list_recent_conferences and in clarifying the behavior of the limit parameter relative to 'all' sessions.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, and the description never mentions the only parameter, limit. While 'limit' is fairly self-explanatory from the schema title and default value, the description's use of 'all' creates ambiguity about whether the limit actually truncates the result set.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('Lists') and clearly identifies the resource: locally stored meeting sessions with metadata. It is understandable on its own, but it does not differentiate itself from the sibling tool meet_list_recent_conferences, which may appear similar to an agent.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no guidance on when to use this tool versus alternatives such as meet_list_recent_conferences. The phrase 'locally stored' hints at a scope distinction, but no explicit context, exclusions, or conditions are provided.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
open_browserNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations available, the description carries the disclosure burden and does so meaningfully: it explicitly says the tool initiates an OAuth flow, runs in the browser, authorizes three specific API scopes, and needs a credential file. It does not mention token persistence or blocking behavior, but the browser-flow framing is sufficiently transparent for the core operation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single sentence packs the action, scope, and prerequisite with no filler. The key behavior is front-loaded, and every phrase earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For an interactive setup tool, the description covers the action, authorized scopes, browser behavior, and required credential file. Since an output schema exists, explaining return values is not the description's responsibility. The main missing context is a note about headless environments or open_browser=false, but the definition is otherwise nearly complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, and the only parameter is open_browser. The description's 'in the browser' reinforces that parameter's meaning, but it does not explain the behavior when open_browser=false or why an agent would set it that way. For a single simple boolean, this partial compensation is adequate but not detailed.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ('Initiates') and names the exact resource: the Google OAuth 2.0 flow, scoped to Meet, Drive, and Calendar access. This clearly distinguishes it from the sibling tools, none of which perform auth setup.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives a hard prerequisite: credentials.json from Google Cloud Console. It implies this is the setup step before other Meet tools, but it never explicitly says when to run it, when not to, or how it relates to meet_check_auth.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
titleNoCuį»™c hį»p trį»±c tiįŗæp
sourceNolive_stream
meeting_codeNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full behavioral burden — and it delivers meaningfully. It discloses durability, append-only disk buffering, a 3+ hour capacity, and the specific failure modes it prevents (memory exhaustion, data loss). It does not disclose idempotency, auth requirements, or what happens if called twice with the same meeting_code, but the core behavior is well covered.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences with the main action front-loaded and every clause earning its place. The durability guarantee and the 3+ hour claim are packed efficiently without filler or repetition of the tool name.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values are handled, and the description covers core behavior well. However, with 0% parameter coverage, no annotations, and no positioning relative to siblings — especially the auth tools and meet_ingest_chunk — the agent lacks enough context to invoke this tool correctly within the larger meeting workflow.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters1/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, and the description mentions none of the three parameters (title, source, meeting_code). The unexplained defaults — including the Vietnamese default 'Cuį»™c hį»p trį»±c tiįŗæp' and source='live_stream' — leave an agent without any basis for choosing parameter values or understanding what meeting_code is for.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb and resource — 'Starts a new durable meeting session' — with 'durable' and 'append-only disk buffering' adding discriminating detail. The action clearly contrasts with sibling tools that list, fetch, ingest, synthesize, or export, so an agent can tell them apart without opening schemas.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives no guidance on when to use this tool versus alternatives, and no prerequisites are stated. Given siblings like meet_check_auth and meet_setup_auth, an agent is left to guess whether authentication must happen first. The tool's position in the session pipeline (start → ingest → synthesize → export) is never indicated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
session_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.7/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of behavioral disclosure. It does state the transformation ('synthesizes into a report') and lists the output sections, which tells the agent what to expect. However, it does not disclose whether the operation is read-only, requires authentication, is asynchronous, or has prerequisites like a completed/ingested session.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single sentence that leads with the core action and packs the output components into a list. The final clause about AI prompts adds non-obvious value. No filler or redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool has a simple one-parameter schema and an output schema, so the description does not need to enumerate return values. However, it omits call preconditions: whether the session must be finished, ingested, or whether '3-hour+' is a hard requirement. Auth and status could have been clarified, leaving the agent to infer setup steps from sibling tools.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has one parameter (session_id) with no description, and schema coverage is 0%. The description references 'meeting session' twice, which connects session_id to a meeting session, but it does not specify where to obtain the ID (e.g., meet_list_sessions), its format, or any constraints. Some meaning is added, but not enough to fully compensate for zero schema coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb ('Synthesizes') and resource ('a 3-hour+ meeting session'), and details the report components (Timeline Milestones, Decision Log, Action Items Matrix, Participant Analytics). This clearly differentiates it from sibling tools like meet_fetch_*_transcript and meet_export_minutes, which have different actions.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies the tool should be used when a comprehensive minutes report is needed from a long meeting session, but it does not provide explicit guidance on when to prefer it over meet_export_minutes, fetch transcripts, or other alternatives. No when-not conditions or alternative tool names are mentioned.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.

  1. 11 tool updatesv0.1.0
    • First observedmeet_check_auth
    • First observedmeet_export_minutes
    • First observedmeet_fetch_drive_transcript
    • First observedmeet_fetch_google_transcript
    • First observedmeet_get_live_status
    • First observedmeet_ingest_chunk
    • First observedmeet_list_recent_conferences
    • First observedmeet_list_sessions
    • First observedmeet_setup_auth
    • First observedmeet_start_session
    • First observedmeet_synthesize_meeting

TDQS

A3.7/5.0
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

ActivityMaintained
ResponsivenessNo issues

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

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/DuongNAD/google-meet-mcp'

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