Skip to main content
Glama
iXanadu

gmail-mcp

by iXanadu

gmail-mcp

Коннектор Gmail для MCP-клиентов. Один сервер, много аккаунтов Gmail через OAuth refresh-токены. Отправляет настоящие MIME-сообщения (вложения по пути к файлу, актуальные подписи, подтверждение после отправки). Читает и сортирует почту, не сбрасывая мегабайты base64 в модель.

Не обёртка вокруг размещённого Google Gmail MCP — этот сервер собирает RFC822 на хосте и обращается напрямую к gmail.googleapis.com.

Возможности

  • Мультиаккаунтный OAuth — добавление почтовых ящиков через accounts_add; токены хранятся локально (права 0600)

  • Отправка / ответ / пересылка — сервер собирает MIME, только пути к файлам исходящих, лимит 25 МБ, ключи идемпотентности, подтверждение при успехе

  • Чтение / сортировка — поиск (цепочки + пагинация), получение цепочки/письма, метки, архив/корзина, черновики

  • Вложения — отправка из ~/Outbox (настраивается); загрузка в ~/Inbox (настраивается)

  • Двойной транспорт — stdio для локальных обвязок; Streamable HTTP за шлюзом для удалённых клиентов

Related MCP server: Gmail MCP Server

Требования

  • Python 3.12+ (в разработке используется 3.13 через pyenv)

  • OAuth-клиент Google Cloud для настольных приложений (client id + secret)

  • macOS для включённых скриптов LaunchAgent (HTTP-сервис); Linux подходит для ручного запуска

Быстрый старт

git clone https://github.com/iXanadu/gmcp.git
cd gmcp

# Python 3.12+ (example with pyenv)
pyenv virtualenv 3.13 gmail-mcp-3.13
pyenv local gmail-mcp-3.13
pip install -e '.[dev]'

# Config (see examples/)
cp examples/.env.example .env
cp examples/.keys.example .keys
chmod 600 .keys

# Sanity check
gmail-doctor

Заполните .keys своими учётными данными Google OAuth и HTTP bearer-токеном перед запуском HTTP-транспорта.

Google Cloud Console (однократно)

Вам нужен OAuth-клиент для настольных приложений — не сервисный аккаунт и не делегирование на весь домен.

Шаг

Где

Что

1

APIs и сервисы → Библиотека

Включите Gmail API

2

Экран согласия OAuth

External подходит для личного использования. Добавьте свой аккаунт Google как тестового пользователя, пока приложение находится в режиме тестирования.

3

Учётные данные → Создать

OAuth client ID → Настольное приложение

4

Настройки клиента

Добавьте redirect URI http://127.0.0.1:8767/oauth/callback (должен совпадать с GMAIL_MCP_OAUTH_REDIRECT_URI в .env)

5

.keys

Вставьте Client ID и Client secret как GMAIL_MCP_GOOGLE_CLIENT_ID / GMAIL_MCP_GOOGLE_CLIENT_SECRET

При первом accounts_add Google запрашивает согласие. Области доступа (scopes) фиксированы на сервере: чтение/отправка/сортировка почты плюс чтение подписи send-as (не кешируется).

Никаких имени пользователя/пароля, пароля приложения или вставленного refresh-токена в чате.

Подключение почтового ящика (accounts_add)

accounts_add открывает браузер для согласия Google. Он работает только на stdio-транспорте (gmail-mcp), не через HTTP.

gmail-mcp   # stdio — required for accounts_add and accounts_remove

Вызовите accounts_add из вашего MCP-клиента. Когда согласие будет завершено, сервер записывает адрес Gmail, возвращённый Google; этот адрес является ключом account для всех остальных инструментов.

Токены сохраняются в ~/.config/gmail-mcp/tokens/ (права 0600). При необходимости скопируйте этот каталог на любой другой хост, где работает тот же сервер.

Сервер без дисплея (нет локального браузера)

Обратный вызов OAuth — http://127.0.0.1:8767/oauth/callback. Машине без дисплея всё равно нужен браузер где-нибудь для страницы входа в Google. Два распространённых способа:

A — Проброс порта SSH (согласие на вашем ноутбуке)

На хосте без дисплея запустите stdio MCP / accounts_add. С вашего ноутбука:

ssh -L 8767:127.0.0.1:8767 user@headless-host

Откройте URL авторизации, который выводит сервер (или запустите accounts_add через ваш MCP-клиент при поднятом туннеле). Обратный вызов попадает на 127.0.0.1:8767 на хосте без дисплея через туннель.

B — Согласие на настольном компьютере, копирование токенов

Запустите accounts_add один раз на Mac или PC с браузером и теми же .env / .keys. После согласия скопируйте ~/.config/gmail-mcp/tokens/ на production-хост (те же пути, права 0600). Повторное согласие не требуется, если Google не отзовёт refresh-токен.

Схема развёртывания

Типичная схема в production:

┌─────────────────────┐         ┌──────────────────────────┐
│  Operator machine   │         │  MCP server (Linux/macOS) │
│  (browser for OAuth)│         │  gmail-mcp-http           │
│  accounts_add       │  copy   │  127.0.0.1:8879           │
│  token files ───────┼────────►│  + .env / .keys           │
└─────────────────────┘  tokens └───────────┬──────────────┘
                                            │
                              Cloudflare / gateway / TLS
                                            │
                                    Hand / remote MCP client
  • Не выставляйте ноутбук оператора в публичный интернет для MCP HTTP. HTTP привязывается к loopback (127.0.0.1:8879) на сервере; обратный прокси завершает TLS и перенаправляет трафик на этот порт.

  • OAuth выполняется там, где есть браузер (машина оператора или SSH-туннель). JSON-файлы с токенами копируются на сервер.

  • Шлюз указывет на управляемый вами сервер (например, mcp.example.com), а не на OAuth-рабочую станцию.

  • Сгенерируйте длинный случайный GMAIL_MCP_HTTP_BEARER_TOKEN; шлюз передаёт его как Authorization: Bearer ….

После развёртывания: gmail-doctor, ./scripts/start.sh (macOS LaunchAgent) или собственный systemd-юнит, затем accounts_list через HTTP для подтверждения токенов.

Конфигурация

Несекретные настройки находятся в .env; секреты — в .keys (не коммитьте их, когда они заполнены). Смотрите examplees/.env.example и examples/.keys.example.

Переменная

Файл

Назначение

GMAIL_MCP_ENVIRONMENT

.env

Метка для логов/статуса

GMAIL_MCP_LOG_LEVEL

.env

Уровень журнала сервера

GMAIL_MCP_HTTP_HOST

.env

Адрес привязки HTTP (по умолчанию 127.0.0.1)

GMAIL_MCP_HTTP_PORT

.env

HTTP-порт (по умолчанию 8879)

GMAIL_MCP_OUTBOX_ROOT

.env

Корень для путей к вложениям при отправке

GMAIL_MCP_DOWNLOAD_ROOT

.env

Корень для записи get_attachment

GMAIL_MCP_TOKENS_DIR

.env

Каталог хранения OAuth-токенов

GMAIL_MCP_OAUTH_REDIRECT_URI

.env

OAuth loopback-обратный вызов

GMAIL_MCP_GOOGLE_CLIENT_ID

.keys

Идентификатор клиента Google OAuth

GMAIL_MCP_GOOGLE_CLIENT_SECRET

.keys

Секрет клиента Google OAuth

GMAIL_MCP_HTTP_BEARER_TOKEN

.keys

Bearer-токен для HTTP-транспорта

Запускайте gmail-doctor после изменения конфигурации.

Транспорты

stdio (локальный)

gmail-mcp

Регистрирует все инструменты, включая accounts_add и accounts_remove.

Встройте в MCP-конфиг Cursor / Claude Code бинарник gmail-mcp из venv и cwd, указывающий на репозиторий (чтобы загружались .env / .keys).

Streamable HTTP (шлюз)

gmail-mcp-http

По умолчанию привязывается к 127.0.0.1:8879. Требуется Authorization: Bearer <GMAIL_MCP_HTTP_BEARER_TOKEN>; запросы без действительного токена получают 401.

Ручной список разрешений (только HTTP): инструменты чтения/сортировки плюс send, reply, forward, draft_create, draft_send, accounts_list и gmail_status. Управление аккаунтами остаётся на stdio.

Сервис macOS (пользовательский LaunchAgent)

./scripts/start.sh    # install plist → ~/Library/LaunchAgents, load
./scripts/stop.sh
./scripts/restart.sh

Отредактируйте пути в launchd/com.gmail-mcp.plist, если ваш checkout или имя pyenv отличается. Логи сохраняются в logs/.

На Linux запускайте gmail-mcp-http под systemd с той же привязкой к loopback — см. Схема развёртывания выше.

Инструменты

Инструмент

Примечания

gmail_status

Сводка по версии и конфигурации

accounts_list

Подключённые адреса и состояние токенов

accounts_add

Согласие OAuth (только stdio)

accounts_remove

Отзыв и удаление токена (только stdio)

search

Запрос Gmail; возвращает цепочки

get_thread / get_message

format=plain или full

get_attachment

Запись в каталог загрузок

send / reply / forward

Только пути; отклоняет content / base64 в JSON

draft_create / draft_send

Те же правила вложений/подтверждений, что и для send

labels_list / labels_create

Пользовательские + системные метки

label / unlabel

Имена или id через запятую

archive / trash / untrash

На уровне цепочки

Каждый инструмент, кроме accounts_list, accounts_add и gmail_status, требует аргумент account (адрес Gmail).

Правила отправки (сводка)

  • Вложения: { "path": "/absolute/or/under/outbox/file.pdf" } — без inline base64

  • Актуальная подпись Gmail добавляется при отправке (не кешируется)

  • Опциональный footer после подписи

  • Возвращает подтверждение: размеры, hrefs, ok false → ошибка инструмента (например, обрезанное вложение или переписанный google.com/url)

Тесты

pytest tests/ -v

Использует имитацию Gmail HTTP; живой почтовый ящик не требуется.

Спецификация

Требования к продукту: docs/specs/gmail-mcp-spec.md

Лицензия

Apache-2.0

A
license - permissive license
Not graded
quality - not tested
C
maintenance

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

  • A
    license
    Not graded
    quality
    C
    maintenance
    Enables interaction with Gmail through MCP-compatible clients to list, read, search, and send emails. It supports advanced features such as managing labels, handling threaded replies, and utilizing Gmail's native search syntax.
    49
    2
    MIT
  • A
    license
    A
    quality
    D
    maintenance
    Provides access to Gmail functionalities including listing unread emails, searching via query syntax, and managing messages through archiving or marking as read. It enables MCP clients to securely interact with and organize email data using the Gmail API.
    5
    MIT
  • A
    license
    Not graded
    quality
    D
    maintenance
    Enables interaction with Gmail through the MCP protocol, supporting sending, reading, searching, replying, forwarding, managing drafts and labels, and saving attachments.
    15
    3
    MIT
  • F
    license
    Not graded
    quality
    C
    maintenance
    Enables interacting with multiple Gmail accounts through a single MCP server, supporting search, labels, drafts, and thread management with per-account OAuth.

View all 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/iXanadu/pigeon-mcp'

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