gmail-mcp
Local MCP server that manages Gmail OAuth 2.0 authentication (read-only) and filter setup, with planned AI-driven email digest and summarization features.
README
Gmail MCP
Lokalna, rozwijana w Pythonie usługa MCP do prywatnej pracy z Gmailem. Projekt portfolio pokazuje integrację OAuth 2.0, architekturę heksagonalną i bezpieczne przygotowanie pod analizę GenAI (OpenAI lub Claude).
Aktualny etap: gotowy lokalny OAuth Gmail oraz zarządzanie aktywnym filtrem z dostępem tylko do odczytu. Serwer MCP, pobieranie wiadomości, podsumowania AI i harmonogram są kolejnymi etapami MVP — nie są jeszcze dostępne.
Co działa
- Lokalny flow OAuth 2.0 dla jednego aktywnego konta Gmail naraz, uruchamiany w przeglądarce; docelowo lokalne filtry są odseparowane per konto.
- Wyłącznie scope
https://www.googleapis.com/auth/gmail.readonly. - Polecenia do połączenia, sprawdzenia statusu i lokalnego odłączenia konta.
- Token OAuth poza repozytorium, w prywatnym katalogu danych użytkownika.
- Ochrona przed symlinkami dla pliku credentials i tokenu oraz ograniczone
uprawnienia tokenu (
0600na systemach POSIX). - Konfiguracja przyszłego dostawcy AI: OpenAI domyślnie lub Claude, bez wymogu klucza AI do OAuth.
Wymagania
- Python 3.12
- uv
- Konto Google oraz projekt Google Cloud z włączonym Gmail API
Instalacja
git clone git@github.com:under34/mcp-gmail.git
cd mcp-gmail
uv sync --locked
cp .env.example .env
Uruchomienie kontroli jakości:
uv run pytest -q
uv run ruff check .
Konfiguracja Google OAuth
- W Google Cloud utwórz lub wybierz projekt.
- Włącz Gmail API.
- Skonfiguruj ekran zgody OAuth. Dla trybu testowego dodaj własny adres jako test user.
- Utwórz OAuth Client ID typu Desktop app i pobierz plik JSON.
- Zapisz go poza checkoutem, np.
~/secure/gmail-credentials.json. - Ustaw w lokalnym
.envjego bezwzględną ścieżkę:
GMAIL_CREDENTIALS_PATH=/absolute/path/to/gmail-credentials.json
Plik credentials musi być zwykłym plikiem, bez symlinków i poza repozytorium. Nie dodawaj go do Git.
Polecenia Gmail
# Przy braku używalnego tokenu otwiera przeglądarkę i wykonuje lokalny flow OAuth.
uv run gmail-mcp connect-gmail
# Sprawdza zapisane połączenie; nie otwiera przeglądarki.
uv run gmail-mcp gmail-status
# Usuwa wyłącznie lokalny token OAuth. Nie cofa dostępu w Google i nie zmienia maili.
uv run gmail-mcp disconnect-gmail
# Pokazuje liczbę wątków przed zapisem filtra.
uv run gmail-mcp preview-gmail-filter --query 'from:boss@example.com'
# Ponownie sprawdza i zapisuje filtr wyłącznie po jawnym potwierdzeniu.
uv run gmail-mcp set-gmail-filter --query 'label:work' --confirm
# Pokazuje filtr aktywny dla bieżącego konta i stan lokalnego dostawcy AI.
uv run gmail-mcp gmail-filter-status
uv run gmail-mcp ai-provider-status
Po poprawnym połączeniu pierwsze polecenie wyświetli adres połączonego konta.
Jeżeli token jest nieważny lub cofnięty, narzędzie zwróci bezpieczny komunikat z
instrukcją ponownego połączenia. disconnect-gmail działa także wtedy, gdy
oryginalny plik credentials nie jest już dostępny.
Zmienne środowiskowe
| Zmienna | Cel |
|---|---|
GMAIL_CREDENTIALS_PATH |
Wymagany wyłącznie dla connect-gmail; ścieżka do pobranego pliku OAuth poza repozytorium. |
GMAIL_MCP_DATA_DIR |
Opcjonalne lokalne nadpisanie katalogu danych; musi znajdować się poza checkoutem. |
AI_PROVIDER |
Przyszły dostawca podsumowań: openai (domyślnie) lub claude. |
OPENAI_API_KEY |
Klucz wymagany później, gdy wybrano openai. |
ANTHROPIC_API_KEY |
Klucz wymagany później, gdy wybrano claude. |
Zmienne procesu mają pierwszeństwo przed .env. OAuth nie wymaga żadnego klucza
OpenAI ani Anthropic.
Bezpieczeństwo i prywatność
- Aplikacja nie wysyła, nie usuwa ani nie modyfikuje wiadomości Gmail.
- Nie loguje tokenów, kodów OAuth, treści maili ani załączników.
- Token, przyszła baza SQLite i digesty pozostają w lokalnym katalogu danych
użytkownika (
platformdirs), poza checkoutem. disconnect-gmailusuwa tylko lokalny token. Jeśli chcesz cofnąć dostęp po stronie Google, zrób to w ustawieniach bezpieczeństwa konta Google.
Architektura i roadmapa
Kod jest podzielony na warstwy domain, application, adapters i bootstrap.
Szczegóły decyzji oraz plan prac znajdują się w
_bmad-output/planning-artifacts.
Następne kroki MVP:
- Konfiguracja filtra Gmail i wyboru dostawcy AI.
- Odczyt oraz deduplikacja wątków, następnie podsumowania OpenAI/Claude.
- Lokalny harmonogram digestów.
- Serwer FastMCP z narzędziami do odczytu digestu i analizy ad hoc.
Licencja
Projekt hobbystyczny/portfolio. Licencja zostanie dodana przed publiczną dystrybucją.
推荐服务器
Baidu Map
百度地图核心API现已全面兼容MCP协议,是国内首家兼容MCP协议的地图服务商。
Playwright MCP Server
一个模型上下文协议服务器,它使大型语言模型能够通过结构化的可访问性快照与网页进行交互,而无需视觉模型或屏幕截图。
Audiense Insights MCP Server
通过模型上下文协议启用与 Audiense Insights 账户的交互,从而促进营销洞察和受众数据的提取和分析,包括人口统计信息、行为和影响者互动。
Magic Component Platform (MCP)
一个由人工智能驱动的工具,可以从自然语言描述生成现代化的用户界面组件,并与流行的集成开发环境(IDE)集成,从而简化用户界面开发流程。
VeyraX
一个单一的 MCP 工具,连接你所有喜爱的工具:Gmail、日历以及其他 40 多个工具。
Kagi MCP Server
一个 MCP 服务器,集成了 Kagi 搜索功能和 Claude AI,使 Claude 能够在回答需要最新信息的问题时执行实时网络搜索。
graphlit-mcp-server
模型上下文协议 (MCP) 服务器实现了 MCP 客户端与 Graphlit 服务之间的集成。 除了网络爬取之外,还可以将任何内容(从 Slack 到 Gmail 再到播客订阅源)导入到 Graphlit 项目中,然后从 MCP 客户端检索相关内容。
Exa MCP Server
模型上下文协议(MCP)服务器允许像 Claude 这样的 AI 助手使用 Exa AI 搜索 API 进行网络搜索。这种设置允许 AI 模型以安全和受控的方式获取实时的网络信息。
mcp-server-qdrant
这个仓库展示了如何为向量搜索引擎 Qdrant 创建一个 MCP (Managed Control Plane) 服务器的示例。
e2b-mcp-server
使用 MCP 通过 e2b 运行代码。