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

Коротко

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

Автор собрал локальный сервер Model Context Protocol (MCP), который даёт Claude восемь инструментов для 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. ИИ-агент для скоринга торговых рекомендаций
  2. Gemini Spark теперь работает с вашими логинами в Chrome
  3. Человекоцентричный B2B-экран: снижение нагрузки на техподдержку и ускорение поиска ошибок
  4. Telegram 2026 в России: взгляд разработчика ботов
  5. Кейс рекламного агентства: управленческая аналитика в BI Конструкторе Битрикс24
Ключевые инсайты из новости (по версии ChatGPT)
  • Декодирование писем из Gmail API по charset MIME-части: Gmail API возвращает тело письма в исходной кодировке отправителя, а не гарантированно в UTF-8. При чтении необходимо определять charset отдельно для каждой MIME-части по Content-Type и предусматривать безопасный fallback для неизвестных или ошибочных названий кодировок.
    [Gmail API]
Для получения полного доступа оформите подписку PubMag PRO.
Зарегистрированные пользователи видят только два тезиса.
Зарегистрироваться
Инсайты автоматически генерируются с помощью искусственного интеллекта на основе текста статьи.
← Назад в лентуЧитать оригинал →
✈️ Подписывайтесь на мой Telegram-канал — там еще больше интересного про AdTech, MarTech, AI и многое другое!