Двенадцать граблей Gmail API, которые я собрал, пока учил Claude отправлять почту

Коротко

  • Gmail API возвращает тело письма в исходной кодировке и не декодирует RFC 2047 в Subject, поэтому кириллицу нужно обрабатывать явно.
  • Для событий на весь день end.date является эксклюзивной границей, а повтор запроса после 429 не должен повторно мутировать тот же объект.
  • Поиск Contacts разделён между «Моими контактами» и «Другими контактами», причём у методов разные scopes, readMask и лимиты выдачи.
  • searchContacts без явного pageSize возвращает только 10 результатов, не поддерживает пагинацию и имеет жёсткий максимум в 30 совпадений.
  • После обновления до mcp 2.0.0 исчез mcp.server.fastmcp, поэтому незакреплённая версия зависимости может внезапно сломать работающий MCP-сервер.

Автор собрал локальный сервер Model Context Protocol (MCP), который даёт восемь инструментов для Gmail, Google Calendar и Contacts, и описал 12 ошибок, найденных при его разработке. Главный практический вывод: интеграция может корректно проходить сотни тестов, но ломаться на реальных данных, правах доступа и поведении API.

Сервер работает на собственных OAuth-данных и обращается к Google напрямую. Тонкий серверный слой только принимает параметры и формирует ответы, а основная логика вынесена в отдельный пакет и тестируется без сетевых вызовов: 300 тестов выполняются за девять секунд. При работе с почтой пришлось отдельно учитывать исходные кодировки сообщений, RFC 2047 в темах, локализованные префиксы ответов, неоднозначный разбор адресов и особенности Bcc.

В Calendar и Contacts обнаружились другие ограничения: у событий на весь день конечная дата является эксклюзивной, повторный запрос после ошибки не должен повторно изменять переданный объект, а минимальный OAuth-scope может не давать доступа к соседнему ресурсу API. Поиск контактов разделён между обычными и «Другими контактами», причём методы отличаются разрешениями, полями и лимитами выдачи.

Для AI-агента добавился отдельный слой безопасности: при превращении HTML-письма в текст нужно удалять не только теги, но и содержимое script и style, иначе невидимые человеку инструкции могут попасть в контекст модели. Проект делался вместе с Claude Code по TDD и с отдельным агентом-ревьюером после каждой задачи; ревью нашло девять дефектов, но проблему с реальным OAuth-доступом Calendar API обнаружила только проверка на живом аккаунте после 299 зелёных тестов.

FAQ

Зачем автор сделал собственный локальный MCP-сервер вместо Zapier и других готовых облачных коннекторов для Gmail?

Он не хотел, чтобы личная переписка проходила через стороннюю инфраструктуру. Локальный сервер использует собственные OAuth-данные и обращается к сервисам Google напрямую.

Почему простое удаление HTML-тегов из входящего письма не защищает AI-агента от скрытой непрямой инъекции промпта?

После удаления тегов содержимое script и style может остаться в тексте и попасть в контекст модели, хотя пользователь его не видит. Поэтому такие блоки нужно удалять целиком.

Читайте также

  1. SemrushSemrush MCP: подключение данных Semrush к ChatGPT, Claude и Gemini
  2. GEO своими руками: собираем трекинг видимости бренда в ИИ-ответах на n8n [+ воркфлоу]
  3. Скачал skills по совету из YouTube — слил все свои данные. Как это работает?
  4. AI-агенты и мультиагентные системы: угрозы и меры безопасности для MCP и A2A
  5. Котэ, язь, ничоси: как вчерашние мемы превратились в товарные знаки — исследование Яндекса
Ключевые инсайты из новости (по версии ChatGPT)
  • Декодирование писем из Gmail API по charset MIME-части: Gmail API возвращает тело письма в исходной кодировке отправителя, а не гарантированно в UTF-8. При чтении необходимо определять charset отдельно для каждой MIME-части по Content-Type и предусматривать безопасный fallback для неизвестных или ошибочных названий кодировок.
    [Gmail API]
Для получения полного доступа оформите подписку PubMag PRO.
Зарегистрированные пользователи видят только два тезиса.
Зарегистрироваться
Инсайты автоматически генерируются с помощью искусственного интеллекта на основе текста статьи.
← Назад в лентуЧитать оригинал →
✈️ Подписывайтесь на мой Telegram-канал — там еще больше интересного про AdTech, MarTech, AI и многое другое!