Читает тексты посторонних: документация с сайта emailmd.dev. В таком тексте могут прятаться команды для агента.
Осторожно в паре с подключениями, которые могут отправлять наружу.
Что сможет агент
Агент пишет письмо рассылки в Markdown, а сервер собирает из него HTML-письмо, текстовую версию и ссылку на предпросмотр в браузере. Авторы emailmd обещают, что такое письмо правильно выглядит в Gmail, Outlook и Apple Mail, в самих почтовых программах мы его не открывали.
Перед отправкой сервер прогоняет черновик через 12 проверок, среди них подписи к картинкам, ссылки по http, прехедер, ссылка отписки и размер письма под обрезку Gmail в 102 КБ. Если находка относится к строке, сервер называет её номер.
Кнопки, колонки и подвал задаются короткими блоками в тексте. Плитки с цифрами и графики сервер рисует ячейками таблицы, без картинок.
Через read_docs агенту доступна документация emailmd: без аргументов инструмент присылает список из 37 страниц, с именем страницы присылает её текст.
Промпт собран из паспорта: команды в нём те же, что во вкладках Claude Code и Codex.
Промпт для агента
Подключи MCP-сервер «emailmd» версии 0.13.2. Работай по шагам и после каждого коротко говори, что сделал.
Данные сервера (каталог smyslokod.ru, проверено 09.10.2026):
- имя в конфиге: emailmd
- официальный источник: https://github.com/anypost/emailmd/tree/main
- запуск: npx -y emailmd@0.13.2 mcp
Правила:
1. Не ставь Node.js, uv или Docker без моего «да». Не хватает - остановись и скажи, что поставить и откуда.
2. Ставь только пакет или адрес из этого промпта. Никаких установочных скриптов из README без моего подтверждения.
3. Перед правкой конфига сделай его резервную копию.
Шаги:
0. Определи, кто ты (Claude Code, Codex или другой агент) и какая у меня система.
1. Проверь окружение: node --version и npx --version (нужен Node.js 20 или новее). Скажи, что нашёл.
2. Проверь, нет ли уже сервера с таким именем: `claude mcp get emailmd` (в Codex: `codex mcp list`).
3. Подключи сервер:
Claude Code: claude mcp add --scope user --transport stdio emailmd -- npx -y emailmd@0.13.2 mcp
Codex: codex mcp add emailmd -- npx -y emailmd@0.13.2 mcp
Если ты не Claude Code и не Codex, подключи способом, принятым у тебя, с той же командой запуска.
4. Проверка: `claude mcp list` (в Codex: `codex mcp list`), статус должен быть «Connected». Попроси меня перезапустить сессию. У сервера 3 инструмента, перечисли их. Сделай пробный запрос: «Через emailmd проверь командой lint письмо с заголовком «Новости», текстом «Dear friend, act now!» и картинкой без подписи, которая грузится по http, и перечисли проблемы по-русски». Покажи результат.
5. Итог одним сообщением: что добавлено и куда, статус, число инструментов, команда отката и откуда восстановить копию конфига. Откат: `claude mcp remove emailmd --scope user` (в Codex: `codex mcp remove emailmd`).
Если на любом шаге ошибка, не чини наугад. Покажи текст ошибки и скажи, что, по-твоему, случилось. Частые проблемы: https://smyslokod.ru/mcp/emailmd#problemy
Выполнят Claude Code, Codex, Hermes и любой агент с доступом к терминалу.
Что нужно на компьютере: Node.js 20 или новее.
Ключ: не нужен.
Ключ и аккаунт не нужны, нужен Node.js 20 или новее. Сервер встроен в программу emailmd и запускается её командой mcp. Письма он собирает и проверяет на компьютере. В сеть ходит только инструмент read_docs, он загружает документацию с сайта emailmd.dev. У проекта есть и удалённый сервер на сайте emailmd.dev, но там всегда последняя версия и закрепить её нельзя, поэтому в карточке только локальный способ.
Проверь, что работает
Пробный запрос
Через emailmd проверь командой lint письмо с заголовком «Новости», текстом «Dear friend, act now!» и картинкой без подписи, которая грузится по http, и перечисли проблемы по-русски
Что должно получиться: Промпт просит агента вызвать lint. Похожий черновик в прямом вызове через mcp-probe дал 8 находок, среди них спам-фразы «act now» и «dear friend», картинку без подписи, ссылку по http и отсутствие ссылки отписки. Пересказ агента по-русски мы не проверяли. Если в ответе нет вызова emailmd, посмотри командой /mcp, подключён ли сервер.
Что можно сделать
3 сценария
Проверить письмо рассылки перед отправкой
На прогоне lint разобрал черновик за 1,9 секунды и нашёл 8 проблем: картинку без подписи, две ссылки по http, письмо почти из одной картинки, нет прехедера и ссылки отписки, плюс фразы «act now» и «dear friend». У пяти находок был номер строки, у трёх, которые касаются письма целиком, его нет. Правки по этому списку агент вносит сам, этот шаг мы не запускали.
lint возвращает список находок: правило, важность (warning или suggestion), текст и номер строки, если находка относится к строке.
Повторный вызов после правок показывает, что осталось.
Промпт
Через подключение emailmd проверь черновик письма рассылки в файле letter.md командой lint. Перечисли найденные проблемы по-русски: что не так, в какой строке и как исправить. Сначала исправь предупреждения, потом подсказки, и проверь письмо ещё раз, пока не останется только то, что я решу оставить.
Бесплатно: почта или сразу Телеграм-канал клуба
Совет. Спам-фразы сервер ищет только английские, на прогоне «Только сегодня! Купите сейчас, бесплатно» он пропустил. Русский текст перечитай сам.
Письмо о новостях сервиса с кнопкой и отпиской
За 11 мс сервер собрал письмо из заголовка, абзаца, кнопки «Открыть личный кабинет» и подвала с отпиской. Вернулись HTML на 11 759 байт, текстовая версия и ссылка предпросмотра на emailmd.dev/builder. В Gmail и Outlook мы это письмо не открывали.
Синтаксис кнопки агент берёт из read_docs со страницей buttons: [Текст](адрес){button}.
render возвращает HTML, текстовую версию, предупреждения и ссылку предпросмотра previewUrl.
Файлы letter.html и letter.txt записывает сам агент, сервер файлов не пишет.
Промпт
Через подключение emailmd собери письмо о новостях нашего сервиса. Прехедер: «Что изменилось в сервисе за месяц». Заголовок, два коротких абзаца о новых возможностях, кнопка «Открыть личный кабинет» со ссылкой на мой кабинет, внизу строка, почему человек получил письмо, и ссылка «Отписаться» на мою страницу отписки. Адреса спроси у меня. Поставь lang: ru, проверь письмо через lint, потом через render сохрани HTML в letter.html, текстовую версию в letter.txt и пришли ссылку на предпросмотр.
Бесплатно: почта или сразу Телеграм-канал клуба
Совет. Без lang: ru в начале письма сервер ставит lang="und", язык не указан. С lang: ru на прогоне вышло lang="ru".
Итоги месяца клиентам: цифры и график прямо в письме
Блоки ::: stats и ::: chart сервер превращает в плитки с цифрами и столбики из ячеек таблицы, картинки для этого не нужны. Письмо с тремя цифрами и графиком за четыре недели собралось за 36 мс в HTML на 29 612 байт, в текстовой версии столбики нарисованы символами. Красивее ли оно в почте, чем картинка, мы не сравнивали.
Параметры блоков агент читает через read_docs: directives/stats и directives/chart.
render с minify: true даёт сжатый HTML, так письмо дальше от предела Gmail в 102 КБ.
Промпт
Через подключение emailmd собери письмо «Итоги месяца» для подписчиков: три цифры плитками (заявки, оплаты, средний чек) и график по неделям из таблицы report.csv. Прочитай страницы документации directives/stats и directives/chart через read_docs, собери письмо с lang: ru и тёмной темой по настройке почты (theme: auto), проверь через lint и сохрани минифицированный HTML в report-letter.html.
Бесплатно: почта или сразу Телеграм-канал клуба
Совет. Таблицу report.csv агент читает сам. Сервер получает только готовый текст письма.
Пример работы
редакция, прогон при проверке 09.10.2026
Задача
Проверить и собрать письмо о новостях сервиса
Промпт
Через подключение emailmd проверь письмо о новостях сервиса и собери из него HTML
Что сделал агент
read_docs без аргументов за 260 мс прислал список из 37 страниц, страница buttons показала синтаксис кнопки.
Черновик с картинкой по http и без отписки lint разобрал за 1,9 секунды: 4 предупреждения и 4 подсказки.
Исправленное письмо с прехедером, кнопкой и отпиской lint пропустил за 49 мс: «No problems found».
render собрал его за 11 мс в HTML на 11 759 байт, вернул текстовую версию и ссылку предпросмотра.
Результат
Ключ не понадобился, render и lint работали без сети. Вызовы делал mcp-probe в песочнице, агент Claude Code промпт не выполнял.
Инструменты
3 · описания около 1,1 тыс. токенов
Жёлтым то, что агент делает от твоего имени, красным запуск команд на компьютере. Нажми на имя: покажем, что делает инструмент, и описание, которое читает агент. В Claude Code инструменты грузятся по запросу и почти не занимают память агента; в других клиентах и при своём адресе подключения (ANTHROPIC_BASE_URL) описания грузятся целиком на каждом сообщении.
Когда не нужен
Если рассылку ты верстаешь в редакторе сервиса рассылок, сервер не нужен. Отправлять он не умеет и базу подписчиков не видит, на выходе только HTML и текстовая версия, их ты сам вставляешь в сервис или в свою программу отправки.
Частые проблемы
7
lint пишет «No unsubscribe link found», хотя ссылка «Отписаться» в письме есть
Сервер ищет в HTML письма латинские буквы unsub. На прогоне ссылку на адрес с otpiska он не узнал. С адресом, где есть unsubscribe, проверка прошла. Поставь адрес отписки, в котором есть unsubscribe, или оставь подсказку без внимания: она помечена suggestion, письмо от неё не ломается.
read_docs отвечает «Could not fetch» и «HTTP 404»
Агент запросил страницу, которой в документации нет. Попроси агента вызвать read_docs без аргументов: придёт список всех 37 страниц с точными именами.
В готовом HTML стоит lang="und"
Язык письма не указан, и сервер ставит значение по умолчанию. Добавь в начало письма строку lang: ru между линиями ---. На прогоне после этого вышло lang="ru".
Агент не видит инструментов сервера
Клиент не перезапущен после подключения: Claude Code читает подключения при старте сессии. Закрой и открой сессию, потом проверь: claude mcp list.
«spawn npx ENOENT» при запуске
Клиент не видит npx: приложения с иконкой не читают PATH из настроек терминала. Пропиши полный путь к npx. Узнать его: which npx на Mac, where npx на Windows.
«Unsupported engine» или падение при старте
Старая версия Node.js. Нужна 20 или новее, проверить: node --version.
Codex: сервер не успевает запуститься
Codex ждёт запуска 10 секунд, а первый запуск npx скачивает пакет дольше. Во вкладке Codex уже стоит startup_timeout_sec = 30, возьми фрагмент оттуда.
Всё, что агент передаёт в вызов: текст письма в Markdown, общие куски письма (partials), если агент их передал, настройку сжатия HTML и имя страницы документации. Если в письме есть имена, почты или суммы клиентов, сервер их видит. Сам он файлы проекта и разговор не читает. Ключи и пароли в текст письма не вставляй.
Куда уходят данные
Данные уходят: UNMTA LLC, сайт www.emailmd.dev на Vercel, страна обработки не указана сервисом.
Что может изменить
Сервер ничего не меняет: render и lint возвращают текст, файлы письма записывает сам агент. Отправлять письма он не умеет. Ссылка предпросмотра хранит текст в части адреса после знака #, а эту часть браузер на сервер не передаёт. Код страницы предпросмотра мы не читали. Текст письма целиком лежит в ссылке предпросмотра, поэтому любой, кому ты её перешлёшь, увидит письмо. HTML из Markdown сервер переносит как есть и не чистит, поэтому чужой непроверенный текст туда лучше не вставлять.
Наша проверка
Пакет emailmd и адрес сервера указаны в документации на сайте проекта emailmd.dev. Исходный код лежит в репозитории anypost/emailmd под лицензией MIT от UNMTA LLC, версия 0.13.2 вышла 6 октября 2026 года. Мы прочитали код сервера. Инструкция сервера описывает порядок работы: написать письмо, проверить его через lint, собрать через render и показать человеку ссылку предпросмотра. Скрытых указаний в ней и в описаниях инструментов нет. Пометок вроде «только чтение» автор у инструментов не ставил. По коду все три только читают: render и lint работают с переданным текстом, read_docs скачивает страницу документации с www.emailmd.dev. Адрес сайта в коде задан жёстко, и сайту уходит только имя страницы, поэтому личные данные в запрос документации включать не стоит. Писем, сообщений и запросов на другие адреса сервер не делает. Документация приходит из сети, и если в ней встретятся указания агенту, выполнять их не нужно. В одноразовой песочнице Ubuntu 24.04.5 мы вызвали все 3 инструмента через npx, 11 вызовов от 11 мс до 1,9 секунды, и ещё 2 вызова сделали из установленного пакета, чтобы посмотреть журнал соединений. Под npx в журнале соединений только реестр npm, это сам npx, и сайт emailmd.dev от read_docs. Сервер из установленного пакета, вызванный без read_docs, не открыл ни одного соединения. Скриптов установки у пакета нет. В базе OSV записей нет ни по emailmd, ни по 360 пакетам его зависимостей, npm audit тоже ничего не нашёл. Версия в команде закреплена.
Версия
В командах закреплена версия 0.13.2: ставится ровно то, что мы проверили.
Отпечаток - контрольная сумма того, что сервер отдаёт агенту. Поменялся при той же версии - поменялось поведение.
Подключения делают их авторы. Мы проверяем установку и описываем, что они умеют, но код и сервис остаются чужими. Перед установкой посмотри, какие данные получит агент.