Для ИИ-агентов
MCP-сервер SendHQ
Дайте ИИ-агенту полный и безопасный контроль над одним рабочим пространством SendHQ: отправка и получение писем, подтверждение доменов, публикация шаблонов и расследование проблем с доставляемостью через 59 строго типизированных инструментов. Написано в первую очередь для агентов, но людям тоже будет полезно.
curl -fsSL https://downloads.sendhq.cc/install.sh | sh
claude mcp add sendhq --env SENDHQ_API_KEY=re_your_key -- sendhq mcpЧто это за сервер
MCP-сервер SendHQ позволяет ИИ-агенту управлять одним рабочим пространством SendHQ через Model Context Protocol: отправлять письма (по одному, пакетами, по шаблонам, ответами, с вложениями, с идемпотентными повторами), читать и искать отправленные и полученные письма (по темам, текстам и именам вложений) и их события доставки, раскладывать письма по меткам с правилами автосортировки, управлять черновиками и закрытыми вложениями, создавать и публиковать хранимые шаблоны, добавлять и подтверждать домены и их DNS, настраивать приём входящей почты и входящие адреса, анализировать доставляемость, отказы, жалобы и стоп-лист, а также читать данные об использовании аккаунта, состоянии оплаты, аналитику и метаданные API-ключей.
Это локальный stdio-сервер, встроенный в CLI-бинарник sendhq. Ваш MCP-клиент запускает sendhq mcp как дочерний процесс и общается с ним по JSON-RPC через stdin/stdout. Каждый вызов инструмента превращается в один документированный запрос к REST API SendHQ по адресу https://sendhq.cc/api/v1, аутентифицированный API-ключом вашего рабочего пространства, поэтому у MCP-сервера ровно те же права, что и у этого ключа, и не больше.
- 59 инструментов в 8 группах, сгенерированных из единого каталога, который также опубликован как tools.json.
- Строгие JSON Schema: неизвестные аргументы, неверные типы и отсутствующие обязательные поля отклоняются локально, до того как что-либо попадёт в SendHQ.
- Структурированные ошибки со стабильным
code, HTTP-статусомstatus, пояснениемexplanation, конкретным способом исправленияremedyи признаком того, поможет ли повторная попытка. - Каждый инструмент, который отправляет реальные письма или удаляет данные, сообщает об этом в первых словах своего описания и снабжён аннотациями безопасности MCP.
- Режим
--read-onlyскрывает все инструменты, которые отправляют письма или что-либо изменяют. - Ничего не логируется. В stdout передаются только сообщения протокола; API-ключ и содержимое писем никогда не попадают в логи.
https://sendhq.cc/api/mcp (поиск по ценам и документации, без доступа к аккаунту). Сервер, описанный на этой странице, — полноценный, с доступом к аккаунту; он работает локально или как размещённый коннектор, описанный ниже.SendHQ в Claude и ChatGPT
Установка не нужна: SendHQ также запускает этот сервер как размещённый коннектор по адресу https://mcp.sendhq.cc/mcp с теми же инструментами. Вместо того чтобы вставлять ключ, вы входите в свой аккаунт SendHQ.
Claude
- Откройте Settings → Connectors и найдите SendHQ в каталоге или выберите Add custom connector и вставьте
https://mcp.sendhq.cc/mcp. - Нажмите Connect, войдите в SendHQ, проверьте запрашиваемый доступ и нажмите Allow.
- Попросите Claude проверить ваш почтовый ящик, отправить письмо с вашего подтверждённого домена или объяснить причину отказа.
ChatGPT
- Open Settings → Security and login and turn on Developer mode.
- Go to chatgpt.com/plugins, click Create MCP app, name it SendHQ and enter
https://mcp.sendhq.cc/mcp. - Sign in to SendHQ and click Allow, then pick SendHQ from the tools menu in a new chat.
Muse by Meta
In Muse, open Connectors and search for SendHQ. Click Connect, sign in to SendHQ and click Allow.
Подтверждение действий и отключение
- The
request_featuretool sends a feature request to the SendHQ team with your account details, so we can follow up by email. - Инструменты, которые отправляют реальные письма или удаляют данные, помечены соответствующим образом. Будет ли ассистент сначала спрашивать вас, настраивается для каждого инструмента в самом ассистенте: в Claude выберите Needs approval для этих инструментов в разделе Settings → Connectors → SendHQ.
- Коннектор получает собственный API-ключ, названный по имени ассистента (например, «Claude (AI connector)»). Удалите его в разделе API Keys, чтобы немедленно отключить коннектор.
- Он не может создавать или отзывать API-ключи и менять настройки оплаты. Вложения отправляются и возвращаются в base64; доступа к локальным файлам нет.
- Неоплаченные рабочие пространства (пробный период для интеграции) могут доставлять письма только на email аккаунта или на адрес симулятора AWS SES.
Вопросы: postmaster@sendhq.cc. Конфиденциальность: sendhq.cc/privacy.
Установка
Установите бинарник sendhq (Linux, macOS и Windows на x86-64 и arm64). Установщик проверяет контрольную сумму релиза и по умолчанию помещает бинарник в ~/.local/bin.
curl -fsSL https://downloads.sendhq.cc/install.sh | shirm https://downloads.sendhq.cc/install.ps1 | iexsendhq version
SENDHQ_API_KEY=re_your_key sendhq doctorСоздайте API-ключ в панели управления по адресу https://sendhq.cc/app#/keys. MCP-сервер не умеет создавать ключи. Сервер запускается одной командой:
SENDHQ_API_KEY=re_your_key sendhq mcpОбычно вручную её запускать не нужно: это делает MCP-клиент. Если запустить её в терминале, она будет ждать JSON-RPC на stdin.
Настройка клиента
Claude Code
claude mcp add sendhq --env SENDHQ_API_KEY=re_your_key -- sendhq mcp
# read-only variant
claude mcp add sendhq-readonly --env SENDHQ_API_KEY=re_your_key -- sendhq mcp --read-onlyДобавьте --scope user, чтобы сервер был доступен во всех проектах, или --scope project, чтобы записать его в .mcp.json проекта. Для общего .mcp.json берите ключ из переменной окружения, а не коммитьте его; Claude Code подставляет значения ${VAR} в .mcp.json.
{
"mcpServers": {
"sendhq": {
"command": "sendhq",
"args": [
"mcp"
],
"env": {
"SENDHQ_API_KEY": "${SENDHQ_API_KEY}"
}
}
}
}OpenAI Codex
[mcp_servers.sendhq]
command = "sendhq"
args = ["mcp"]
env = { SENDHQ_API_KEY = "re_your_key" }Или из командной строки: codex mcp add sendhq --env SENDHQ_API_KEY=re_your_key -- sendhq mcp.
Claude Desktop
Отредактируйте claude_desktop_config.json (macOS: ~/Library/Application Support/Claude/, Windows: %APPDATA%\Claude\) и перезапустите приложение. Десктопные приложения не наследуют PATH вашей оболочки, поэтому укажите абсолютный путь к бинарнику (which sendhq).
{
"mcpServers": {
"sendhq": {
"command": "/Users/you/.local/bin/sendhq",
"args": [
"mcp"
],
"env": {
"SENDHQ_API_KEY": "re_your_key"
}
}
}
}Любой другой MCP-клиент
Настройте stdio-сервер с командой sendhq, аргументами ["mcp"] (при необходимости "--read-only") и переменными окружения, перечисленными ниже. Сервер поддерживает версии протокола MCP 2024-11-05, 2025-03-26, 2025-06-18 и 2025-11-25 и реализует initialize, ping, tools/list и tools/call. Результаты инструментов содержат и текстовый JSON-блок, и structuredContent.
{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2025-06-18","capabilities":{},"clientInfo":{"name":"probe","version":"1"}}}
{"jsonrpc":"2.0","method":"notifications/initialized"}
{"jsonrpc":"2.0","id":2,"method":"tools/call","params":{"name":"get_service_health","arguments":{}}}Размещённого HTTP-транспорта для сервера с доступом к аккаунту нет. Удалённому MCP-эндпоинту с правом записи потребовался бы OAuth для каждого пользователя, которого SendHQ не предлагает; локальный бинарник хранит ключ на той машине, где он и так уже есть.
Переменные окружения и флаги
| Переменная или флаг | Обязательна | Назначение |
|---|---|---|
SENDHQ_API_KEY | да | API-ключ рабочего пространства (re_…). Нужен всем инструментам, кроме get_service_health. Без него сервер всё равно запускается, но каждый вызов возвращает структурированную ошибку auth_error с объяснением, как это исправить. |
SENDHQ_API_BASE_URL | нет | Базовый URL API. По умолчанию https://sendhq.cc/api/v1. Используйте только для локального или тестового (staging) развёртывания. SENDHQ_BASE_URL принимается как устаревший псевдоним. |
SENDHQ_MCP_READ_ONLY | нет | 1, true или yes работают как --read-only. |
--read-only | нет | Открывать только инструменты, которые не отправляют письма и не меняют состояние. Скрытые инструменты также отклоняются при вызове по имени. |
SENDHQ_PROFILE / --profile | нет | Использовать ключ, сохранённый командой sendhq auth login в хранилище ключей ОС, вместо SENDHQ_API_KEY. Если заданы оба, приоритет у переменной окружения. |
Ключ передаётся только в заголовке Authorization: Bearer на настроенный базовый URL. Он никогда не выводится, не логируется, не повторяется в ошибках и не включается в результаты инструментов.
Модель безопасности для агентов
- Отправляет реальные письма.
send_email,send_batchиsend_template_testдоставляют письма реальным людям и расходуют кредиты на доставку. Их описания начинаются сSENDS REAL EMAIL. Вызывайте их, только когда пользователь явно попросил отправить именно это письмо, подтвердив получателей, отправителя и содержание. - Деструктивно.
delete_email,delete_draft,delete_attachment,delete_domain,delete_inboxиremove_suppressionпомеченыdestructiveHint: true, а их описания начинаются сDESTRUCTIVE. Сначала получите подтверждение пользователя.remove_suppressionослабляет защитную блокировку и уместен, только когда человек подтвердил, что адрес снова работает. - Изменяет состояние. Создание и изменение черновиков, шаблонов, доменов и почтовых ящиков, публикация шаблонов и запуск проверки меняют рабочее пространство, но не отправляют писем.
- Только чтение. Все остальные инструменты имеют
readOnlyHint: true, и их можно свободно вызывать. - Этот сервер никогда не меняет DNS.
add_domainвозвращает записи, которые должен опубликовать человек;get_domain_connect_linkвозвращает URL согласия, который человек должен открыть и одобрить у своего DNS-провайдера. - Этот сервер никогда не меняет оплату.
get_accountтолько читает тариф, использование и состояние подписки. - Неоплаченные рабочие пространства (пробный период для интеграции) могут доставлять письма только на email владельца аккаунта (
get_account→user.email) или на адрес симулятора AWS SES, напримерsuccess@simulator.amazonses.com, и не могут отправлять вложения. - Принято — не значит доставлено. Успешная отправка возвращает ID; сведения о доставке, отказе и жалобе появляются позже в
list_email_events. Никогда не утверждайте, что письмо попало во «Входящие» или что человек его прочитал. - Не переключайтесь на другой адрес From, чтобы обойти приостановку
423, и никогда не добавляйте повторно получателей, которые отписались или пожаловались.
API-ключи вне зоны действия сервера
Намеренно нет инструментов, которые создают, изменяют, ротируют, отзывают или удаляют API-ключи. Агент не должен выпускать или уничтожать учётные данные. list_api_keys возвращает только имена, несекретные префиксы и время последнего использования. Управление ключами остаётся в панели управления за человеком, вошедшим в аккаунт.
Сценарии работы
1. Первая отправка
get_service_healthподтверждает, что API доступен (работает без ключа).get_accountпоказывает тариф (access.tier), оставшуюся квоту иuser.email. В пробном периоде этот email — единственный разрешённый реальный получатель.list_sending_identitiesперечисляет адреса From, которые можно использовать. Если список пуст, сначала пройдите сценарий подключения домена.- Подтвердите с пользователем отправителя, получателя, тему и текст, затем вызовите
send_emailсidempotency_key. list_email_eventsс возвращённымidпокажетdelivery,bounce,complaintилиreject, как только провайдер сообщит результат (обычно от нескольких секунд до минут).
{
"name": "send_email",
"arguments": {
"from": "Acme <hello@example.com>",
"to": [
"owner@example.com"
],
"subject": "SendHQ is connected",
"text": "It works.",
"idempotency_key": "first-send-2026-09-26"
}
}2. Подтверждение домена от начала до конца
add_domainсname: "example.com". Результат содержит DNS-записи (CNAME для DKIM, подтверждение SES, SPF, рекомендуемый DMARC).get_dns_providerсdomain_idопределяет авторитетного DNS-провайдера и возвращает точный относительный хост, который нужно указать для каждой записи у этого провайдера.- Если
providers.domainConnect.availableравно true,get_domain_connect_linkвозвращает URL согласия. Передайте его человеку: ничего не изменится, пока он не одобрит изменение у провайдера. В противном случае передайте человеку записи для публикации. Никогда не публикуйте вторую SPF-запись: добавьтеinclude:amazonses.comв существующее значениеv=spf1. verify_domainповторно проверяет DNS и SES. Статус проходит черезpending,checkingиpropagatingдоverified. Опрашивайтеverify_domainилиget_domainкаждые 30–60 секунд; обновление DNS может занять от нескольких минут до нескольких часов.- Когда
statusстановитсяverified, адреса домена появляются вlist_sending_identities.
3. Отказы, жалобы и стоп-лист
list_blocked_recipientsвозвращает все заблокированные адреса с причиной (bounce,complaint,unsubscribe) и сводным количеством.list_suppressionsвозвращает записи стоп-листа из-за жёстких отказов и жалоб;deliverability_statsдаёт доли доставки, отказов и жалоб за 30 дней;list_sender_reputationпоказывает, какие адреса From ограничены или приостановлены.- Отправка, среди получателей которой есть адрес из стоп-листа, завершается ошибкой
422 recipient_suppressed. Уберите этого получателя и отправьте снова. - Вызывайте
remove_suppression, только когда человек подтвердил, что ящик, давший отказ, теперь работает. Записи о жалобах в стоп-листе постоянны (409 complaint_suppression_locked).
4. Приём входящей почты
- Домен (часто поддомен, например
inbound.example.com) должен быть подтверждён. setup_inboundнастраивает приём и возвращает одну MX-запись. Её публикует человек.- Вызывайте
verify_inbound, покаstatusне станетready. create_inboxсdomain_idиlocal_part(например,support) создаётsupport@inbound.example.com.- Опрашивайте
list_emailsсdirection: "in"иunread: true(при необходимости сinbox_id). Читайте письмо черезget_email, переписку — черезget_thread, вложения — черезdownload_attachment, а обработанное письмо отмечайте черезmark_email(read: true). - Отвечайте в той же цепочке через
send_emailсreply_to_email_id; SendHQ сам выставит In-Reply-To, References и цепочку.
5. Вебхуки и уведомления о событиях
Сейчас SendHQ не предлагает настраиваемых клиентом вебхуков, поэтому инструмента для вебхуков нет. Уведомления провайдера обрабатываются внутри SendHQ и доступны через операции чтения. Вместо этого используйте опрос: list_email_events — для результата одного письма, list_emails со status (например, bounced) или after — для недавних изменений, list_emails с direction: "in" и unread: true — для новых входящих писем, list_blocked_recipients — для новых записей в стоп-листе. Опрашивайте не чаще примерно раза в минуту на каждый вопрос.
6. Диагностика сбоя доставки
- Найдите письмо:
list_emailsсdirection: "out"иtoилиqueryлибоget_email, если ID известен.status: failedозначает, что SendHQ или провайдер отклонили письмо при передаче; причина указана в ошибке письма. list_email_events:bounce(постоянный или временный, с диагностикой провайдера),complaint,rejectилиdelivery. Если событий ещё нет, провайдер пока не сообщил результат; подождите и проверьте снова.- Если завершился ошибкой сам вызов отправки, посмотрите
codeошибки:sender_domain_unverified→ завершите подтверждение домена;recipient_suppressed→ адрес ранее дал жёсткий отказ или на него поступила жалоба;sender_paused→ изучитеlist_sender_reputationи исправьте источник списка;trial_recipient_restricted→ ограничения пробного периода;quota_exhausted→ использование вget_account. get_domainпроверяет, что DKIM, SPF и DMARC по-прежнему опубликованы;deliverability_statsпоказывает, касается ли проблема одного письма или это тенденция.- Сообщайте то, что показывают факты. Событие
deliveryозначает, что сервер получателя принял письмо, а не что оно попало во «Входящие» или было прочитано.
7. Собственная группа для задач (метки)
create_labelсname(например,Agent/Orders) иskip_inbox: true. Это превращает метку в группу: полученные письма с этой меткой архивируются, поэтому отображаются только в метке и никогда — во «Входящих» человека.- Отправляйте письма по задачам через
send_email(илиsend_batch) сlabels: ["Agent/Orders"]. Ответы в этой переписке автоматически наследуют метку и минуют «Входящие». - Для писем, которые начинаются вне ваших переписок, добавьте правило сортировки:
create_label_ruleсinbox_id(выделенный адрес, напримерorders@…),from,toилиsubject. Передайтеapply_to_existing: true, чтобы разложить уже полученные письма. - Работа с группой:
list_emailsсlabel: "Agent/Orders",direction: "in"иunread: true; читайте черезget_emailилиget_thread, отвечайте черезsend_emailсreply_to_email_id, а после обработки вызывайтеmark_emailсread: true. - Чтобы переместить случайно попавшее не туда письмо в группу или из неё, используйте
label_email(add/remove). Добавление метки группы к полученному письму также архивирует его. - При необходимости
set_inbox_forwardingотправляет копию всех писем, приходящих на адрес получения, в другой почтовый ящик (получатель сначала подтверждает это по email).
{
"name": "send_email",
"arguments": {
"from": "Orders <orders@example.com>",
"to": [
"customer@example.net"
],
"subject": "Order 1042: confirm delivery window",
"text": "Reply with a time that works.",
"labels": [
"Agent/Orders"
],
"idempotency_key": "order-1042-window"
}
}8. Вложения и шаблоны
На платном тарифе прикрепляйте до 10 файлов через attachments в send_email (для каждого нужен content_base64 или локальный file_path; filename по умолчанию — базовое имя файла). Для хранимых шаблонов: create_template → update_template_draft → render_template для предпросмотра на тестовых данных → send_template_test (отправляет одно реальное тестовое письмо) → publish_template, затем отправляйте через send_email или send_batch с template: {key, data} и ровно одним получателем в to.
Результаты, пагинация и ошибки
Успешный вызов возвращает JSON-объект API в виде structuredContent и в виде текстового JSON-блока. Каждый инструмент list_* принимает limit (1–200, по умолчанию 50) и offset и добавляет объект pagination. Продолжайте вызывать с offset: pagination.next_offset, пока has_more равно true.
{
"data": [
"…"
],
"count": 50,
"pagination": {
"offset": 0,
"limit": 50,
"returned": 50,
"total": 180,
"has_more": true,
"next_offset": 50
}
}Неудачный вызов возвращает isError: true со структурированной ошибкой. Следуйте remedy, а не повторяйте вслепую; повторяйте, только если retryable равно true.
{
"error": {
"code": "trial_recipient_restricted",
"status": 402,
"message": "The integration trial can deliver only to your account email or an AWS SES simulator address",
"retryable": false,
"explanation": "This workspace is on the unpaid integration trial. Trial sends can be delivered only to the account owner's email address or an AWS SES simulator address.",
"remedy": "Send to the account email (get_account -> user.email) or a simulator address such as success@simulator.amazonses.com to test. To email anyone else, the account owner must activate a paid plan in the dashboard (Profile & Billing). Do not retry the same recipients."
}
}Необязательные поля ошибки: request_id (сообщите его в поддержку), retry_after_seconds, problems (список нарушений схемы для invalid_arguments) и idempotent_replayed (см. раздел «Идемпотентность»).
Идемпотентность
send_email и send_batch принимают idempotency_key (не более 200 символов), который передаётся в заголовке Idempotency-Key. Создавайте один стабильный ключ на каждое логическое письмо, например invoice-4812-receipt.
- При повторе нужно использовать тот же ключ И идентичное тело запроса. Тот же ключ с любым изменением (получатель, тема, текст, заголовок, данные шаблона, даже значения аргументов) возвращает
409 idempotency_conflict. - Тот же ключ, то же тело, исходный запрос завершён: SendHQ возвращает сохранённый результат без повторной отправки. Так можно безопасно повторить запрос после тайм-аута или
network_error. - Тот же ключ, пока исходный запрос ещё выполняется:
409 idempotency_in_progress, можно повторить после короткого ожидания. - Для нового логического письма нужен новый ключ.
- Сохранённые ошибки тоже воспроизводятся. Если первая попытка завершилась ошибкой, повтор с тем же ключом вернёт ту же ошибку с
idempotent_replayed: trueиretryable: false. Проверьте черезlist_emails(direction: out), что ничего не ушло, устраните причину и отправьте с новым ключом. - Сервер никогда сам не повторяет POST-запросы. Автоматически повторяются только GET-запросы на чтение (до 3 попыток при сетевых ошибках, 429 и 5xx).
send_emailсо встроеннымиattachmentsне принимаетidempotency_key, потому что выполняет несколько запросов. Для безопасной с точки зрения повторов отправки вложений:create_draft→upload_attachment→send_emailсdraft_idиidempotency_key.
{
"name": "send_email",
"arguments": {
"from": "Acme <billing@example.com>",
"to": [
"owner@example.com"
],
"subject": "Receipt #4812",
"text": "Thanks for your payment.",
"idempotency_key": "receipt-4812"
}
}Лимиты запросов и квоты
SendHQ не публикует фиксированный лимит запросов в секунду для API. На практике агент сталкивается с лимитами использования, которые возвращаются как 429:
- Месячный лимит доставок получателям по тарифу. Каждый адрес в To, Cc и Bcc считается одной доставкой. См.
get_account→usage.recipientDeliveriesв сравнении сusage.emailQuotaMonth. - Дневной лимит получателей для конкретного адреса From, который задаётся состоянием репутации этого отправителя (
list_sender_reputation→dailyLimit, по умолчанию 2 000 на платных тарифах). - Пробный период для интеграции: всего 100 получателей и только на email аккаунта или адреса симулятора SES.
- Вложения: не более 10 файлов и 10 МБ на письмо; 10 ГБ передачи вложений в месяц с учётом числа получателей на платных тарифах.
- На один запрос: To + Cc + Bcc — до 100 адресов;
send_batch— до 100 писем. - Репутационный предохранитель: если в скользящем 7-дневном окне отказы или жалобы превышают порог, отправка с конкретного адреса From ограничивается или приостанавливается (
423 sender_paused). Когда показатели снижаются, адрес восстанавливается автоматически.
quota_exhausted нельзя повторять, пока не начнётся новый период или не сменится тариф. rate_limited можно повторить через retry_after_seconds; для отправок повторяйте с тем же idempotency_key и идентичным телом.
Каталог ошибок
code стабилен; ветвите логику по нему, а не по message.
| code | HTTP | Повторять? | Что это значит и что делать |
|---|---|---|---|
invalid_arguments | — | нет | Аргументы не прошли локальную проверку JSON Schema инструмента; в SendHQ ничего не отправлено. Исправьте поля, перечисленные в problems. |
auth_error | 401 | нет | API-ключ отсутствует, отозван или неверен. Задайте SENDHQ_API_KEY для процесса сервера; ключи создаёт человек в панели управления. |
trial_recipient_restricted | 402 | нет | В пробном периоде для интеграции можно доставлять письма только на email аккаунта или адрес симулятора SES. Отправьте туда либо попросите владельца активировать платный тариф. |
payment_required | 402 | нет | Функция требует платного тарифа (например, вложения). Отправьте без неё или перейдите на платный тариф. |
sender_domain_not_owned | 403 | нет | Домен From не относится к этому рабочему пространству. Используйте list_sending_identities или add_domain. |
sender_domain_unverified | 403 | нет | Домен From ещё не подтверждён. get_domain, опубликуйте недостающие записи, verify_domain. |
domain_limit_reached | 403 | нет | Достигнут лимит доменов по тарифу. Удалите неиспользуемый домен (с согласия человека) или перейдите на старший тариф. |
marketing_not_enabled | 403 | нет | Маркетинговый класс не включён для этого домена или тарифа. Используйте transactional, только если письмо действительно транзакционное. |
forbidden | 403 | нет | Политика не разрешает эту операцию. Измените запрос. |
not_found | 404 | нет | Этот ID не относится к рабочему пространству. Запросите список ресурсов, чтобы найти правильный ID; архивные шаблоны сначала восстановите. |
idempotency_conflict | 409 | нет | Ключ повторно использован с другим телом. Отправьте в точности исходный запрос или используйте новый ключ для нового письма. |
idempotency_in_progress | 409 | да | Исходный запрос ещё выполняется. Подождите, затем повторите с тем же ключом и телом. |
revision_conflict | 409 | нет | Черновик шаблона изменился с момента чтения. get_template, объедините изменения, сохраните снова. |
complaint_suppression_locked | 409 | нет | Получатель пожаловался. Никогда больше ему не пишите. |
inbound_not_ready | 409 | нет | Приём входящей почты не готов. setup_inbound, опубликуйте MX, verify_inbound. |
conflict | 409 | нет | Ресурс уже существует или находится в неподходящем состоянии. Прочитайте его и скорректируйте запрос. |
attachments_too_large | 413 | нет | Больше 10 файлов или 10 МБ. Уберите или уменьшите вложения. |
recipient_suppressed | 422 | нет | Получатель ранее дал жёсткий отказ или пожаловался. Уберите его; см. list_blocked_recipients. |
recipient_unsubscribed | 422 | нет | Получатель отписался от маркетинговых писем. Уберите его навсегда. |
validation_failed | 422 | нет | Содержимое отклонено, например данные шаблона нарушают контракт переменных. Исправьте входные данные. |
sender_paused | 423 | нет | Этот адрес From приостановлен 7-дневным предохранителем по отказам и жалобам. Остановитесь, исправьте список, дождитесь автоматического восстановления. |
quota_exhausted | 429 | нет | Достигнут месячный, дневной (на отправителя), лимит на вложения или лимит пробного периода. Проверьте get_account; дождитесь сброса или перейдите на старший тариф. |
rate_limited | 429 | да | Снизьте темп; подождите retry_after_seconds. Для отправок: тот же ключ, то же тело. |
server_error | 5xx | да | Временный сбой SendHQ или провайдера. Сделайте паузу и повторите; отправки — с тем же ключом и телом. Если idempotent_replayed равно true, используйте новый ключ, убедившись, что ничего не было отправлено. |
network_error | — | да | Запрос или ответ потерян. Повторите; для отправок безопасность повтора обеспечивает тот же idempotency_key. |
invalid_request | 400 | нет | Некорректный запрос. Прочитайте message и исправьте его. |
tool_error | — | нет | Локальный сбой внутри MCP-сервера (например, нечитаемый file_path). Прочитайте message. |
Справочник инструментов
Все инструменты с классом безопасности, вызываемым REST-эндпоинтом, параметрами, форматом ответа и примером объекта параметров tools/call. Параметры указаны точно: сервер отклоняет всё, чего нет в списке.
Письма и цепочки: send_email, send_batch, list_emails, get_email, mark_email, delete_email, list_email_events, get_thread
Метки и правила автосортировки: list_labels, get_label, create_label, update_label, delete_label, create_label_rule, delete_label_rule, label_email
Черновики, вложения и адреса отправителя: list_sending_identities, create_draft, list_drafts, get_draft, update_draft, delete_draft, upload_attachment, download_attachment, delete_attachment
Хранимые шаблоны: list_templates, create_template, get_template, update_template_draft, create_template_draft, render_template, send_template_test, publish_template, archive_template, restore_template
Домены и DNS: list_domains, get_domain, add_domain, verify_domain, delete_domain, get_dns_provider, get_domain_connect_link
Входящая почта: setup_inbound, verify_inbound, list_inboxes, get_inbox, create_inbox, update_inbox, set_inbox_forwarding, delete_inbox
Доставляемость, отказы и стоп-лист: deliverability_stats, list_sender_reputation, list_suppressions, remove_suppression, list_blocked_recipients
Аккаунт, использование, аналитика и ключи: get_account, get_analytics, list_api_keys, get_service_health
Нет инструментов, подходящих под этот фильтр.
Письма и цепочки
send_emailОтправить одно письмо
SENDS REAL EMAIL. Отправляет одно письмо с подтверждённого домена: готовый html/текст, опубликованный хранимый шаблон, ответ в существующей цепочке или письмо с вложениями. Передавайте idempotency_key, чтобы повтор не привёл к двойной отправке; при повторе нужно использовать тот же ключ И идентичный запрос, иначе SendHQ вернёт 409. attachments — вспомогательная возможность: создаёт черновик, загружает каждый файл и отправляет с этим черновиком; её нельзя сочетать с idempotency_key или draft_id (для безопасной с точки зрения повторов отправки вложений используйте create_draft + upload_attachment + send_email с draft_id). Неоплаченные рабочие пространства (пробный период для интеграции) могут доставлять письма только на email аккаунта или адрес симулятора AWS SES и не могут отправлять вложения.
Укажите хотя бы одно из: html, text, template.
| Параметр | Тип | Обязательна | Описание |
|---|---|---|---|
from | string | да | Отправитель, например Acme <hello@example.com>. Домен должен быть подтверждён в этом рабочем пространстве (см. list_sending_identities). (макс. 998 символов) |
to | string[] | да | Получатели. Каждый элемент — адрес, при необходимости с отображаемым именем. В сумме To+cc+bcc — не более 100; каждый адресат расходует один кредит на доставку. (1–100 элементов) |
cc | string[] | нет | Получатели копии. (0–100 элементов) |
bcc | string[] | нет | Получатели скрытой копии. (0–100 элементов) |
subject | string | нет | Тема письма. Не указывайте при отправке шаблона. (макс. 998 символов) |
text | string | нет | Текстовая версия письма. Укажите text, html или template. |
html | string | нет | HTML-версия письма. SendHQ очищает её и формирует текст, если text не указан. |
reply_to | string | нет | Адрес Reply-To. |
headers | object | нет | Дополнительные безопасные пользовательские заголовки (строковые значения), например {"X-Entity-Ref-ID": "123"}. Заголовками маршрутизации, такими как From/To/Message-ID, управляет SendHQ. |
message_class | string | нет | transactional (по умолчанию) или marketing. Для маркетинговых писем нужен тариф или домен с включённым маркетингом; добавляется обработка отписки. (одно из transactional, marketing) |
reply_to_email_id | string | нет | Ответ внутри существующей переписки: ID вида em_… письма, на которое вы отвечаете. SendHQ выставляет In-Reply-To/References и цепочку. |
thread_id | string | нет | Явный ID цепочки, к которой относится письмо. |
draft_id | string | нет | Отправить с этим письмом вложения сохранённого черновика (dr_…). После успешной отправки черновик удаляется. |
template | object | нет | Отправить опубликованный хранимый шаблон вместо готового html/текста. Требуется ровно один получатель в to и никаких cc/bcc; тему задаёт шаблон. Укажите хотя бы одно из: id, key. |
template.id | string | нет | ID шаблона (tmpl_…). Укажите id или key. |
template.key | string | нет | Ключ шаблона, например account-welcome. Укажите id или key. |
template.version_id | string | нет | Необязательный ID опубликованного релиза (tmplv_…). По умолчанию — текущий опубликованный релиз. |
template.data | object | нет | Значения типизированных переменных шаблона. |
labels | string[] | нет | Имена меток или ID вида lbl_…, под которыми сохранить письмо. Неизвестные имена создаются. Ответы в переписке наследуют метки, а метка группы (skip_inbox) не пускает эти ответы во «Входящие». Не более 10. (0–10 элементов) |
idempotency_key | string | нет | Заголовок Idempotency-Key (макс. 200 символов). Используйте его повторно, только чтобы повторить этот же запрос. (макс. 200 символов) |
attachments | object[] | нет | Файлы для вложения (не более 10 файлов, 10 МБ в сумме). Для каждого нужен content_base64 (плюс filename) или локальный file_path. (0–10 элементов) Укажите хотя бы одно из: content_base64, file_path. |
attachments[].filename | string | нет | Имя файла, которое увидит получатель. Обязательно при content_base64; по умолчанию — базовое имя из file_path. (макс. 255 символов) |
attachments[].content_type | string | нет | MIME-тип, например application/pdf. По умолчанию application/octet-stream. |
attachments[].content_base64 | string | нет | Содержимое файла в стандартном base64. |
attachments[].file_path | string | нет | Абсолютный путь к локальному файлу, доступному для чтения процессу MCP-сервера. |
{
"name": "send_email",
"arguments": {
"from": "Acme <hello@example.com>",
"to": [
"owner@example.com"
],
"subject": "Your export is ready",
"text": "Download it from your dashboard.",
"idempotency_key": "export-ready-42"
}
}send_batchОтправить пакет индивидуальных писем
SENDS REAL EMAIL. Отправляет от 1 до 100 независимых писем одним запросом (используйте для персонализации шаблона под каждого получателя). Каждый элемент имеет ту же структуру, что и send_email (без attachments/idempotency_key). Элементы выполняются или завершаются ошибкой по отдельности: HTTP 207 означает частичный успех; проверяйте data[i].ok и data[i].error для каждого. Один idempotency_key покрывает всё тело пакета.
| Параметр | Тип | Обязательна | Описание |
|---|---|---|---|
emails | object[] | да | Письма для отправки. (1–100 элементов) Укажите хотя бы одно из: html, text, template. |
idempotency_key | string | нет | Idempotency-Key для всего пакета (макс. 200 символов). (макс. 200 символов) |
{
"name": "send_batch",
"arguments": {
"emails": [
{
"from": "Acme <hello@example.com>",
"to": [
"owner@example.com"
],
"template": {
"key": "account-welcome",
"data": {
"first_name": "Asha"
}
}
}
],
"idempotency_key": "welcome-batch-2026-09-26"
}
}list_emailsСписок писем и поиск
Список отправленных (direction: out) и полученных (direction: in) писем от новых к старым с фильтрами. Полученные письма классифицируются: чтобы читать «Входящие» человека, используйте direction: in, archived: false, category: primary; для приоритизации — important: true; спам скрыт, если не указано category: spam или include_spam: true. Результат разбит на страницы: он содержит pagination {offset, limit, returned, total?, has_more, next_offset}.
| Параметр | Тип | Обязательна | Описание |
|---|---|---|---|
direction | string | нет | in — полученные, out — отправленные. (одно из in, out) |
status | string | нет | Фильтр по статусу, например queued, sent, delivered, bounced, complained, failed. |
domain | string | нет | Только письма для этого домена или списка доменов через запятую (совпадение с любым). |
inbox_id | string | нет | Только письма, полученные этим почтовым ящиком (inb_…). |
label | string | нет | Только письма с этой меткой: ID метки lbl_… или точное имя либо список через запятую (совпадение с любым). Папки можно посмотреть через list_labels. |
archived | boolean | нет | false — представление «Входящие» (полученные неархивные письма), true — только архивные. Не указывайте, чтобы получить все письма. |
category | string | нет | primary (люди), updates (рассылки, массовые и автоматические письма) или spam; либо список через запятую. Спам скрыт, если его не запросить. |
important | boolean | нет | true — только письма, помеченные как важные (ответы на начатые вами переписки и письма от отправителей, отмеченных как важные). |
include_spam | boolean | нет | Включить спам в результаты (для поиска по всем папкам). |
from | string | нет | Адрес отправителя содержит это значение. |
to | string | нет | Адрес получателя содержит это значение. |
unread | boolean | нет | true — только непрочитанные, false — только прочитанные. |
after | string | нет | Метка времени ISO-8601; только письма, созданные после неё. (date-time) |
before | string | нет | Метка времени ISO-8601; только письма, созданные до неё. (date-time) |
query | string | нет | Полнотекстовый поиск по темам, текстам, адресам отправителей и получателей и именам файлов вложений. (макс. 200 символов) |
limit | integer | нет | Размер страницы. По умолчанию 50. (по умолчанию 50; 1–200) |
offset | integer | нет | Количество пропускаемых записей. Используйте pagination.next_offset из предыдущей страницы. (по умолчанию 0; 0–…) |
{
"name": "list_emails",
"arguments": {
"direction": "in",
"unread": true,
"limit": 25
}
}get_emailПолучить одно письмо
Получает одно письмо с заголовками, html/текстом, статусом, метаданными цепочки и метаданными вложений (сами байты скачивайте через download_attachment).
| Параметр | Тип | Обязательна | Описание |
|---|---|---|---|
email_id | string | да | ID письма (начинается с em_), возвращённый инструментом списка или создания. (макс. 128 символов) |
{
"name": "get_email",
"arguments": {
"email_id": "em_123"
}
}mark_emailОтметить как прочитанное, архивное, спам или важное
Изменяет одно письмо: read, archived, category (primary, updates, spam; только для полученных) и important. Пометка как спама или как важного обучает SendHQ в отношении этого отправителя для будущих писем; передайте learn: false, чтобы изменить только это письмо. Передайте хотя бы одно поле.
| Параметр | Тип | Обязательна | Описание |
|---|---|---|---|
email_id | string | да | ID письма (начинается с em_), возвращённый инструментом списка или создания. (макс. 128 символов) |
read | boolean | нет | true — прочитано, false — не прочитано. |
archived | boolean | нет | true — архивировать (убрать из «Входящих»), false — вернуть во «Входящие». |
category | string | нет | Переместить полученное письмо в primary, updates или spam. (одно из primary, updates, spam) |
important | boolean | нет | Поставить или снять отметку важности. |
learn | boolean | нет | false — не запоминать это решение для отправителя (по умолчанию true). |
{
"name": "mark_email",
"arguments": {
"email_id": "em_123",
"read": true
}
}delete_emailУдалить письмо
DESTRUCTIVE: безвозвратно удаляет сохранённое письмо и его вложения из SendHQ. Уже доставленное письмо при этом не отзывается.
| Параметр | Тип | Обязательна | Описание |
|---|---|---|---|
email_id | string | да | ID письма (начинается с em_), возвращённый инструментом списка или создания. (макс. 128 символов) |
{
"name": "delete_email",
"arguments": {
"email_id": "em_123"
}
}list_email_eventsСписок событий доставки письма
События провайдера для одного отправленного письма: delivery, bounce, complaint, reject, open, click. Это доказательство того, было ли письмо доставлено или почему произошёл сбой. Результат разбит на страницы: он содержит pagination {offset, limit, returned, total?, has_more, next_offset}.
| Параметр | Тип | Обязательна | Описание |
|---|---|---|---|
email_id | string | да | ID письма (начинается с em_), возвращённый инструментом списка или создания. (макс. 128 символов) |
limit | integer | нет | Размер страницы. По умолчанию 50. (по умолчанию 50; 1–200) |
offset | integer | нет | Количество пропускаемых записей. Используйте pagination.next_offset из предыдущей страницы. (по умолчанию 0; 0–…) |
{
"name": "list_email_events",
"arguments": {
"email_id": "em_123"
}
}get_threadПолучить переписку
Получает все письма переписки в хронологическом порядке (отправленные и полученные), каждое с метаданными вложений.
| Параметр | Тип | Обязательна | Описание |
|---|---|---|---|
thread_id | string | да | ID цепочки (обычно ID вида em_… первого письма; см. threadId у любого письма). (макс. 128 символов) |
{
"name": "get_thread",
"arguments": {
"thread_id": "em_123"
}
}Метки и правила автосортировки
list_labelsСписок меток
Список меток (папок) рабочего пространства с общим числом писем, числом непрочитанных и правилами автосортировки. Результат разбит на страницы: он содержит pagination {offset, limit, returned, total?, has_more, next_offset}.
| Параметр | Тип | Обязательна | Описание |
|---|---|---|---|
limit | integer | нет | Размер страницы. По умолчанию 50. (по умолчанию 50; 1–200) |
offset | integer | нет | Количество пропускаемых записей. Используйте pagination.next_offset из предыдущей страницы. (по умолчанию 0; 0–…) |
{
"name": "list_labels",
"arguments": {}
}get_labelПолучить метку
Получает одну метку со счётчиками и правилами автосортировки.
| Параметр | Тип | Обязательна | Описание |
|---|---|---|---|
label_id | string | да | ID метки (начинается с lbl_) или точное имя метки. (макс. 128 символов) |
{
"name": "get_label",
"arguments": {
"label_id": "Billing"
}
}create_labelСоздать метку
Создаёт метку-папку. Укажите skip_inbox: true, чтобы сделать её группой, которой владеет агент: отправляйте с labels: [name], и ответы будут попадать в метку, минуя «Входящие». Необязательные правила автосортировки раскладывают новые отправленные и полученные письма (должны совпасть все условия правила). Укажите apply_to_existing, чтобы разложить и уже сохранённые письма.
| Параметр | Тип | Обязательна | Описание |
|---|---|---|---|
name | string | да | Имя метки, например Billing или Clients/Acme. Уникально в рамках рабочего пространства (без учёта регистра). (макс. 64 символа) |
color | string | нет | Цвет в HEX, например #1a73e8. Необязательно. |
skip_inbox | boolean | нет | Режим группы: полученные письма с этой меткой (по правилу, как ответ на переписку, отправленную с этой меткой, или вручную) архивируются и отображаются только в метке, а не во «Входящих». |
rules | object[] | нет | Необязательные правила автосортировки (не более 20). Для каждого нужно хотя бы одно из: inbox_id, from, to, subject. (0–20 элементов) |
rules[].direction | string | нет | Только письма in (полученные) или out (отправленные). Не указывайте, чтобы учитывать оба направления. (одно из in, out) |
rules[].inbox_id | string | нет | Только письма, полученные этим почтовым ящиком (inb_…). Раскладывает письма каждого адреса получения в отдельную папку. |
rules[].from | string | нет | Отправитель содержит этот текст (без учёта регистра), например @stripe.com. (макс. 200 символов) |
rules[].to | string | нет | To/Cc содержит этот текст (без учёта регистра). (макс. 200 символов) |
rules[].subject | string | нет | Тема содержит этот текст (без учёта регистра). (макс. 200 символов) |
rules[].skip_inbox | boolean | нет | Архивировать подходящие полученные письма, чтобы они отображались только в папке метки, а не во «Входящих». |
apply_to_existing | boolean | нет | Разложить также уже сохранённые письма, подходящие под правила. |
{
"name": "create_label",
"arguments": {
"name": "Agent/Orders",
"skip_inbox": true,
"rules": [
{
"from": "@stripe.com"
}
]
}
}update_labelПереименовать метку, изменить цвет или сделать группой
Переименовывает метку, меняет её цвет или включает/выключает режим группы (skip_inbox). При включении режима группы полученные письма, уже имеющие эту метку, архивируются.
| Параметр | Тип | Обязательна | Описание |
|---|---|---|---|
label_id | string | да | ID метки (начинается с lbl_) или точное имя метки. (макс. 128 символов) |
name | string | нет | Новое имя. (макс. 64 символа) |
color | string | нет | Новый цвет в HEX. |
skip_inbox | boolean | нет | Режим группы: полученные письма с этой меткой (по правилу, как ответ на переписку, отправленную с этой меткой, или вручную) архивируются и отображаются только в метке, а не во «Входящих». |
{
"name": "update_label",
"arguments": {
"label_id": "lbl_123",
"name": "Finance/Billing"
}
}delete_labelУдалить метку
DESTRUCTIVE: удаляет метку и её правила. Сами письма сохраняются; с них лишь снимается эта метка.
| Параметр | Тип | Обязательна | Описание |
|---|---|---|---|
label_id | string | да | ID метки (начинается с lbl_) или точное имя метки. (макс. 128 символов) |
{
"name": "delete_label",
"arguments": {
"label_id": "lbl_123"
}
}create_label_ruleДобавить правило автосортировки
Добавляет к метке правило, чтобы подходящие новые письма раскладывались автоматически. Должны совпасть все заданные условия. Используйте inbox_id, чтобы выделить адресу получения отдельную папку; добавьте skip_inbox, чтобы такие письма не попадали во «Входящие».
| Параметр | Тип | Обязательна | Описание |
|---|---|---|---|
label_id | string | да | ID метки (начинается с lbl_) или точное имя метки. (макс. 128 символов) |
direction | string | нет | Только письма in (полученные) или out (отправленные). Не указывайте, чтобы учитывать оба направления. (одно из in, out) |
inbox_id | string | нет | Только письма, полученные этим почтовым ящиком (inb_…). Раскладывает письма каждого адреса получения в отдельную папку. |
from | string | нет | Отправитель содержит этот текст (без учёта регистра), например @stripe.com. (макс. 200 символов) |
to | string | нет | To/Cc содержит этот текст (без учёта регистра). (макс. 200 символов) |
subject | string | нет | Тема содержит этот текст (без учёта регистра). (макс. 200 символов) |
skip_inbox | boolean | нет | Архивировать подходящие полученные письма, чтобы они отображались только в папке метки, а не во «Входящих». |
apply_to_existing | boolean | нет | Разложить также уже сохранённые подходящие письма. |
{
"name": "create_label_rule",
"arguments": {
"label_id": "Billing",
"inbox_id": "inb_123",
"skip_inbox": true
}
}delete_label_ruleУдалить правило автосортировки
DESTRUCTIVE: удаляет одно правило автосортировки. Уже разложенные письма сохраняют метку.
| Параметр | Тип | Обязательна | Описание |
|---|---|---|---|
label_id | string | да | ID метки (начинается с lbl_) или точное имя метки. (макс. 128 символов) |
rule_id | string | да | ID правила (начинается с lrule_) из get_label. (макс. 128 символов) |
{
"name": "delete_label_rule",
"arguments": {
"label_id": "lbl_123",
"rule_id": "lrule_123"
}
}label_emailДобавить или снять метки с письма
Перемещает письмо между папками: добавляет и/или снимает метки по имени или ID вида lbl_…. Неизвестные имена в add создаются, если create не равно false.
| Параметр | Тип | Обязательна | Описание |
|---|---|---|---|
email_id | string | да | ID письма (начинается с em_), возвращённый инструментом списка или создания. (макс. 128 символов) |
add | string[] | нет | Метки для добавления. (0–10 элементов) |
remove | string[] | нет | Метки для снятия. (0–10 элементов) |
create | boolean | нет | Создавать неизвестные метки из add (по умолчанию true). |
{
"name": "label_email",
"arguments": {
"email_id": "em_123",
"add": [
"Billing"
],
"remove": [
"Support"
]
}
}Черновики, вложения и адреса отправителя
list_sending_identitiesСписок подтверждённых адресов отправителя
Адреса и домены, с которых это рабочее пространство может отправлять письма прямо сейчас (подтверждённые домены, их адрес From по умолчанию и активные адреса почтовых ящиков). Вызывайте перед send_email, чтобы выбрать допустимый from.
Без параметров.
{
"name": "list_sending_identities",
"arguments": {}
}create_draftСоздать черновик
Создаёт черновик в редакторе. В черновиках хранятся вложения: создайте черновик, вызовите upload_attachment, затем send_email с draft_id. Ничего не отправляет.
| Параметр | Тип | Обязательна | Описание |
|---|---|---|---|
from | string | нет | Адрес отправителя на подтверждённом домене (при создании черновика может быть пустым). |
to | string[] | нет | Получатели. (0–100 элементов) |
cc | string[] | нет | Получатели копии. (0–100 элементов) |
bcc | string[] | нет | Получатели скрытой копии. (0–100 элементов) |
subject | string | нет | Тема письма. (макс. 998 символов) |
html | string | нет | HTML-версия письма. |
text | string | нет | Текстовая версия письма. |
reply_to_email_id | string | нет | ID письма, на которое отвечает этот черновик. |
thread_id | string | нет | ID цепочки, к которой относится черновик. |
{
"name": "create_draft",
"arguments": {
"from": "hello@example.com",
"to": [
"owner@example.com"
],
"subject": "Invoice"
}
}list_draftsСписок черновиков
Список черновиков редактора, начиная с последних изменённых. Результат разбит на страницы: он содержит pagination {offset, limit, returned, total?, has_more, next_offset}.
| Параметр | Тип | Обязательна | Описание |
|---|---|---|---|
limit | integer | нет | Размер страницы. По умолчанию 50. (по умолчанию 50; 1–200) |
offset | integer | нет | Количество пропускаемых записей. Используйте pagination.next_offset из предыдущей страницы. (по умолчанию 0; 0–…) |
{
"name": "list_drafts",
"arguments": {}
}get_draftПолучить черновик
Получает один черновик с метаданными вложений.
| Параметр | Тип | Обязательна | Описание |
|---|---|---|---|
draft_id | string | да | ID черновика (начинается с dr_), возвращённый инструментом списка или создания. (макс. 128 символов) |
{
"name": "get_draft",
"arguments": {
"draft_id": "dr_123"
}
}update_draftЗаменить содержимое черновика
Заменяет содержимое и получателей черновика. Это полная замена: пропущенные поля очищаются, поэтому сначала прочитайте get_draft и передайте все поля, которые хотите сохранить. Вложения не затрагиваются.
| Параметр | Тип | Обязательна | Описание |
|---|---|---|---|
draft_id | string | да | ID черновика (начинается с dr_), возвращённый инструментом списка или создания. (макс. 128 символов) |
from | string | нет | Адрес отправителя на подтверждённом домене (при создании черновика может быть пустым). |
to | string[] | нет | Получатели. (0–100 элементов) |
cc | string[] | нет | Получатели копии. (0–100 элементов) |
bcc | string[] | нет | Получатели скрытой копии. (0–100 элементов) |
subject | string | нет | Тема письма. (макс. 998 символов) |
html | string | нет | HTML-версия письма. |
text | string | нет | Текстовая версия письма. |
reply_to_email_id | string | нет | ID письма, на которое отвечает этот черновик. |
thread_id | string | нет | ID цепочки, к которой относится черновик. |
{
"name": "update_draft",
"arguments": {
"draft_id": "dr_123",
"from": "hello@example.com",
"to": [
"owner@example.com"
],
"subject": "Invoice (updated)",
"text": "Attached."
}
}delete_draftУдалить черновик
DESTRUCTIVE: удаляет черновик и безвозвратно удаляет его сохранённые вложения.
| Параметр | Тип | Обязательна | Описание |
|---|---|---|---|
draft_id | string | да | ID черновика (начинается с dr_), возвращённый инструментом списка или создания. (макс. 128 символов) |
{
"name": "delete_draft",
"arguments": {
"draft_id": "dr_123"
}
}upload_attachmentЗагрузить вложение в черновик
Загружает один файл в черновик (не более 10 файлов и 10 МБ в сумме на письмо). Укажите content_base64 или локальный file_path. Для отправки вложений нужен платный тариф.
Укажите хотя бы одно из: content_base64, file_path.
| Параметр | Тип | Обязательна | Описание |
|---|---|---|---|
draft_id | string | да | ID черновика (начинается с dr_), возвращённый инструментом списка или создания. (макс. 128 символов) |
filename | string | нет | Имя файла, которое увидит получатель. По умолчанию — базовое имя из file_path. (макс. 255 символов) |
content_type | string | нет | MIME-тип, например application/pdf. По умолчанию application/octet-stream. |
content_base64 | string | нет | Содержимое файла в стандартном base64. |
file_path | string | нет | Абсолютный путь к локальному файлу, доступному для чтения процессу MCP-сервера. |
{
"name": "upload_attachment",
"arguments": {
"draft_id": "dr_123",
"filename": "invoice.pdf",
"content_type": "application/pdf",
"file_path": "/tmp/invoice.pdf"
}
}download_attachmentСкачать вложение
Скачивает закрытое вложение (отправленного, полученного письма или черновика). Возвращает содержимое в base64 или записывает файл, если задан save_to_path (не перезаписывает существующий файл, если overwrite не равно true).
| Параметр | Тип | Обязательна | Описание |
|---|---|---|---|
attachment_id | string | да | ID вложения (начинается с att_), возвращённый инструментом списка или создания. (макс. 128 символов) |
save_to_path | string | нет | Необязательный абсолютный локальный путь, по которому записать файл вместо возврата base64. |
overwrite | boolean | нет | Разрешить замену существующего файла по пути save_to_path. По умолчанию false. |
{
"name": "download_attachment",
"arguments": {
"attachment_id": "att_123",
"save_to_path": "/tmp/invoice.pdf"
}
}delete_attachmentУдалить вложение
DESTRUCTIVE: безвозвратно удаляет сохранённое вложение (например, чтобы убрать файл из черновика перед отправкой).
| Параметр | Тип | Обязательна | Описание |
|---|---|---|---|
attachment_id | string | да | ID вложения (начинается с att_), возвращённый инструментом списка или создания. (макс. 128 символов) |
{
"name": "delete_attachment",
"arguments": {
"attachment_id": "att_123"
}
}Хранимые шаблоны
list_templatesСписок хранимых шаблонов
Список хранимых шаблонов писем с состоянием публикации и статистикой использования. Результат разбит на страницы: он содержит pagination {offset, limit, returned, total?, has_more, next_offset}.
| Параметр | Тип | Обязательна | Описание |
|---|---|---|---|
lifecycle | string | нет | active (по умолчанию), archived или all. (одно из active, archived, all) |
query | string | нет | Поиск по имени или ключу. (макс. 120 символов) |
limit | integer | нет | Размер страницы. По умолчанию 50. (по умолчанию 50; 1–200) |
offset | integer | нет | Количество пропускаемых записей. Используйте pagination.next_offset из предыдущей страницы. (по умолчанию 0; 0–…) |
{
"name": "list_templates",
"arguments": {
"lifecycle": "active"
}
}create_templateСоздать хранимый шаблон
Создаёт шаблон с редактируемым черновиком, при необходимости на основе заготовки (welcome, reset, receipt или blank). Перед отправкой по ключу шаблон нужно опубликовать.
| Параметр | Тип | Обязательна | Описание |
|---|---|---|---|
name | string | да | Название для людей. (макс. 120 символов) |
key | string | нет | Стабильный ключ для отправки: строчные латинские буквы, цифры, дефисы; начинается с буквы (2–64 символа). Если не указан, формируется из названия. |
starter | string | нет | Начальное содержимое. (одно из blank, welcome, reset, receipt) |
{
"name": "create_template",
"arguments": {
"name": "Account welcome",
"key": "account-welcome",
"starter": "welcome"
}
}get_templateПолучить шаблон
Получает текущий черновик шаблона (с revision), активный опубликованный релиз, историю релизов и статистику использования. Принимает ID или ключ.
| Параметр | Тип | Обязательна | Описание |
|---|---|---|---|
template_id | string | да | ID шаблона (tmpl_…) или ключ. (макс. 128 символов) |
{
"name": "get_template",
"arguments": {
"template_id": "account-welcome"
}
}update_template_draftСохранить черновик шаблона
Сохраняет редактируемый черновик шаблона с оптимистичной блокировкой: передайте текущую revision из get_template (409 означает, что кто-то сохранил раньше; перечитайте и повторите). Это полная замена содержимого черновика: пропущенные поля очищаются, поэтому передавайте все поля, которые хотите сохранить. Используйте плейсхолдеры {{variable}}.
| Параметр | Тип | Обязательна | Описание |
|---|---|---|---|
template_id | string | да | ID или ключ шаблона. (макс. 128 символов) |
revision | integer | да | Текущая ревизия черновика из get_template. (1–…) |
name | string | нет | Название шаблона. (макс. 120 символов) |
subject_template | string | нет | Тема с плейсхолдерами. (макс. 998 символов) |
preheader_template | string | нет | Текст предпросмотра. (макс. 240 символов) |
html_template | string | нет | HTML-версия письма с плейсхолдерами. |
text_template | string | нет | Текстовая версия письма с плейсхолдерами. |
from | string | нет | Отправитель по умолчанию для отправок этого шаблона. |
reply_to | string | нет | Reply-To по умолчанию. |
variables | object[] | нет | Типизированный контракт переменных. Каждый элемент: {key (строчные буквы/подчёркивания), label, type: text|number|url|boolean, required (по умолчанию true), fallback, description}. |
variables[].key | string | да | |
variables[].label | string | нет | |
variables[].type | string | нет | (одно из text, number, url, boolean) |
variables[].required | boolean | нет | |
variables[].fallback | any | нет | |
variables[].description | string | нет | |
sample_data | object | нет | Тестовые значения для предпросмотра и тестов. |
{
"name": "update_template_draft",
"arguments": {
"template_id": "account-welcome",
"revision": 3,
"name": "Account welcome",
"subject_template": "Welcome, {{first_name}}",
"text_template": "Hi {{first_name}}",
"variables": [
{
"key": "first_name",
"type": "text",
"required": true
}
],
"sample_data": {
"first_name": "Asha"
}
}
}create_template_draftНачать новый черновик на основе опубликованного релиза
Создаёт новый редактируемый черновик как копию текущего опубликованного релиза (409, если черновик уже существует или ничего не опубликовано).
| Параметр | Тип | Обязательна | Описание |
|---|---|---|---|
template_id | string | да | ID или ключ шаблона. (макс. 128 символов) |
{
"name": "create_template_draft",
"arguments": {
"template_id": "account-welcome"
}
}render_templateОтрендерить предпросмотр шаблона
Рендерит точный результат на сервере (subject, html, text) для черновика, опубликованного релиза или конкретной версии с переданными данными. Ничего не отправляет. Возвращает 422 с findings, если данные нарушают контракт переменных.
| Параметр | Тип | Обязательна | Описание |
|---|---|---|---|
template_id | string | да | ID или ключ шаблона. (макс. 128 символов) |
version_id | string | нет | Необязательный ID версии; по умолчанию — черновик, затем опубликованный релиз. |
data | object | нет | Значения переменных; по умолчанию — тестовые данные версии. |
{
"name": "render_template",
"arguments": {
"template_id": "account-welcome",
"data": {
"first_name": "Asha"
}
}
}send_template_testОтправить тестовое письмо по шаблону
SENDS REAL EMAIL. Отправляет снимок черновика (или указанной версии) с префиксом [Test] указанным получателям. Учитывается в использовании; рабочие пространства в пробном периоде могут отправлять только на email аккаунта или адрес симулятора SES.
| Параметр | Тип | Обязательна | Описание |
|---|---|---|---|
template_id | string | да | ID или ключ шаблона. (макс. 128 символов) |
to | string[] | да | Тестовые получатели. (1–100 элементов) |
from | string | нет | Отправитель на подтверждённом домене; по умолчанию — From шаблона. |
version_id | string | нет | Необязательный ID версии. |
data | object | нет | Значения переменных; по умолчанию — тестовые данные. |
{
"name": "send_template_test",
"arguments": {
"template_id": "account-welcome",
"to": [
"owner@example.com"
]
}
}publish_templateОпубликовать релиз шаблона
Публикует текущий черновик как неизменяемый релиз, который будет использовать send_email с template.key. Завершается ошибкой 422 с findings при ошибках валидации или 409, если публикация нарушит действующий контракт переменных шаблона, уже используемого в продакшене.
| Параметр | Тип | Обязательна | Описание |
|---|---|---|---|
template_id | string | да | ID или ключ шаблона. (макс. 128 символов) |
{
"name": "publish_template",
"arguments": {
"template_id": "account-welcome"
}
}archive_templateАрхивировать шаблон
Останавливает новые отправки по этому шаблону (история сохраняется; можно отменить через restore_template). Любая интеграция, отправляющая по этому ключу, начнёт получать ошибку 404.
| Параметр | Тип | Обязательна | Описание |
|---|---|---|---|
template_id | string | да | ID или ключ шаблона. (макс. 128 символов) |
{
"name": "archive_template",
"arguments": {
"template_id": "account-welcome"
}
}restore_templateВосстановить шаблон из архива
Снова делает архивный шаблон активным.
| Параметр | Тип | Обязательна | Описание |
|---|---|---|---|
template_id | string | да | ID или ключ шаблона. (макс. 128 символов) |
{
"name": "restore_template",
"arguments": {
"template_id": "account-welcome"
}
}Домены и DNS
list_domainsСписок доменов
Список доменов отправки со сводным setup_status (verified | checking | pending), состоянием DNS по каждой записи и статусом входящей почты. Может работать медленно: неподтверждённые домены перепроверяются в реальном времени. Результат разбит на страницы: он содержит pagination {offset, limit, returned, total?, has_more, next_offset}.
| Параметр | Тип | Обязательна | Описание |
|---|---|---|---|
limit | integer | нет | Размер страницы. По умолчанию 50. (по умолчанию 50; 1–200) |
offset | integer | нет | Количество пропускаемых записей. Используйте pagination.next_offset из предыдущей страницы. (по умолчанию 0; 0–…) |
{
"name": "list_domains",
"arguments": {}
}get_domainПолучить параметры настройки домена
Получает один домен с точными DNS-записями для публикации (type, name, value), текущим состоянием каждой записи по данным двух публичных резолверов, dns_issues со способами исправления и статусом входящей почты.
| Параметр | Тип | Обязательна | Описание |
|---|---|---|---|
domain_id | string | да | ID домена (начинается с dom_), возвращённый инструментом списка или создания. (макс. 128 символов) |
{
"name": "get_domain",
"arguments": {
"domain_id": "dom_123"
}
}add_domainДобавить домен отправки
Регистрирует домен, которым вы управляете, для отправки. Возвращает DNS-записи (CNAME для SES Easy DKIM), которые должен опубликовать владелец. Сам DNS не меняет. Учитывается в лимите доменов по тарифу.
| Параметр | Тип | Обязательна | Описание |
|---|---|---|---|
name | string | да | Голое доменное имя, например example.com или mail.example.com. (макс. 253 символа) |
default_from | string | нет | Необязательный адрес отправителя по умолчанию на этом домене. |
{
"name": "add_domain",
"arguments": {
"name": "example.com"
}
}verify_domainПодтвердить домен
Запускает проверку SES/DNS в реальном времени. Можно безопасно повторять; после изменения DNS опрашивайте каждые 30–60 с (распространение может занять от нескольких минут до нескольких часов). Отправка разрешается, когда статус станет verified.
| Параметр | Тип | Обязательна | Описание |
|---|---|---|---|
domain_id | string | да | ID домена (начинается с dom_), возвращённый инструментом списка или создания. (макс. 128 символов) |
{
"name": "verify_domain",
"arguments": {
"domain_id": "dom_123"
}
}delete_domainУдалить домен
DESTRUCTIVE: удаляет домен из рабочего пространства вместе с маршрутом приёма входящей почты. Отправки с него сразу после этого начнут завершаться ошибкой. DNS-записи у вашего DNS-провайдера не удаляются.
| Параметр | Тип | Обязательна | Описание |
|---|---|---|---|
domain_id | string | да | ID домена (начинается с dom_), возвращённый инструментом списка или создания. (макс. 128 символов) |
{
"name": "delete_domain",
"arguments": {
"domain_id": "dom_123"
}
}get_dns_providerОпределить DNS-провайдера и хосты записей
Определяет авторитетного DNS-провайдера домена и возвращает относительный хост, который нужно ввести у этого провайдера для каждой записи, рекомендуемую DMARC-запись, рекомендации по входящей MX-записи и доступность настройки в один клик (Domain Connect).
| Параметр | Тип | Обязательна | Описание |
|---|---|---|---|
domain_id | string | да | ID домена (начинается с dom_), возвращённый инструментом списка или создания. (макс. 128 символов) |
{
"name": "get_dns_provider",
"arguments": {
"domain_id": "dom_123"
}
}get_domain_connect_linkПолучить ссылку для настройки DNS в один клик
Если get_dns_provider сообщает providers.domainConnect.available, создаёт подписанный URL согласия. Передайте его человеку: он откроет его и одобрит изменение DNS у своего провайдера. Пока он не одобрит, ничего не изменится. 409, если не поддерживается.
| Параметр | Тип | Обязательна | Описание |
|---|---|---|---|
domain_id | string | да | ID домена (начинается с dom_), возвращённый инструментом списка или создания. (макс. 128 символов) |
{
"name": "get_domain_connect_link",
"arguments": {
"domain_id": "dom_123"
}
}Входящая почта
setup_inboundВключить приём входящей почты для домена
Настраивает приём входящей почты через SES для подтверждённого домена. Использует корневой домен, если у него нет конфликтующей MX-записи, иначе inbound.<domain>. Возвращает MX-запись, которую должен опубликовать владелец; DNS не редактирует.
| Параметр | Тип | Обязательна | Описание |
|---|---|---|---|
domain_id | string | да | ID домена (начинается с dom_), возвращённый инструментом списка или создания. (макс. 128 символов) |
{
"name": "setup_inbound",
"arguments": {
"domain_id": "dom_123"
}
}verify_inboundПроверить входящую MX-запись
Повторно проверяет входящую MX-запись. Статус становится ready, когда её видят оба публичных резолвера.
| Параметр | Тип | Обязательна | Описание |
|---|---|---|---|
domain_id | string | да | ID домена (начинается с dom_), возвращённый инструментом списка или создания. (макс. 128 символов) |
{
"name": "verify_inbound",
"arguments": {
"domain_id": "dom_123"
}
}list_inboxesСписок входящих адресов
Список адресов получения, при необходимости для одного домена. Результат разбит на страницы: он содержит pagination {offset, limit, returned, total?, has_more, next_offset}.
| Параметр | Тип | Обязательна | Описание |
|---|---|---|---|
domain_id | string | нет | Необязательный фильтр по ID домена. |
limit | integer | нет | Размер страницы. По умолчанию 50. (по умолчанию 50; 1–200) |
offset | integer | нет | Количество пропускаемых записей. Используйте pagination.next_offset из предыдущей страницы. (по умолчанию 0; 0–…) |
{
"name": "list_inboxes",
"arguments": {
"domain_id": "dom_123"
}
}get_inboxПолучить почтовый ящик
Получает один входящий адрес.
| Параметр | Тип | Обязательна | Описание |
|---|---|---|---|
inbox_id | string | да | ID почтового ящика (начинается с inb_), возвращённый инструментом списка или создания. (макс. 128 символов) |
{
"name": "get_inbox",
"arguments": {
"inbox_id": "inb_123"
}
}create_inboxСоздать входящий адрес
Создаёт адрес вида support@<receiving domain> на домене со статусом входящей почты ready (сначала выполните setup_inbound и verify_inbound). Полученные письма появляются в list_emails с direction in.
| Параметр | Тип | Обязательна | Описание |
|---|---|---|---|
domain_id | string | да | ID домена (начинается с dom_), возвращённый инструментом списка или создания. (макс. 128 символов) |
local_part | string | да | Часть адреса до @, например support. (макс. 64 символа) |
name | string | нет | Необязательное отображаемое имя. |
{
"name": "create_inbox",
"arguments": {
"domain_id": "dom_123",
"local_part": "support",
"name": "Support"
}
}update_inboxПереименовать, включить или отключить почтовый ящик
Переименовывает почтовый ящик или задаёт его статус active / disabled.
| Параметр | Тип | Обязательна | Описание |
|---|---|---|---|
inbox_id | string | да | ID почтового ящика (начинается с inb_), возвращённый инструментом списка или создания. (макс. 128 символов) |
name | string | нет | Новое отображаемое имя. |
status | string | нет | Новый статус. (одно из active, disabled) |
{
"name": "update_inbox",
"arguments": {
"inbox_id": "inb_123",
"status": "disabled"
}
}set_inbox_forwardingПересылать письма из почтового ящика на другой адрес
SENDS REAL EMAIL при пересылке кому-либо, кроме владельца аккаунта: задаёт, куда пересылаются полученные письма почтового ящика. Собственный адрес владельца активируется сразу; на любой другой адрес приходит письмо с подтверждением, и пересылка остаётся в статусе pending, пока там её не подтвердят. Передайте forward_to: null, чтобы отключить пересылку. Пересланные копии приходят с адреса ящика, исходный отправитель указывается в Reply-To.
| Параметр | Тип | Обязательна | Описание |
|---|---|---|---|
inbox_id | string | да | ID почтового ящика (начинается с inb_), возвращённый инструментом списка или создания. (макс. 128 символов) |
forward_to | string,null | да | Email-адрес, на который пересылать письма, или null, чтобы отключить пересылку. (макс. 254 символа) |
{
"name": "set_inbox_forwarding",
"arguments": {
"inbox_id": "inb_123",
"forward_to": "team@example.net"
}
}delete_inboxУдалить почтовый ящик
DESTRUCTIVE: удаляет входящий адрес. Уже полученные письма сохраняются; новые письма на этот адрес больше в него не попадают.
| Параметр | Тип | Обязательна | Описание |
|---|---|---|---|
inbox_id | string | да | ID почтового ящика (начинается с inb_), возвращённый инструментом списка или создания. (макс. 128 символов) |
{
"name": "delete_inbox",
"arguments": {
"inbox_id": "inb_123"
}
}Доставляемость, отказы и стоп-лист
deliverability_statsСтатистика доставки за 30 дней
Итоги за 30 дней по всему рабочему пространству: sent, delivery, bounce, complaint, reject, open, click и deliveryRate (%).
Без параметров.
{
"name": "deliverability_stats",
"arguments": {}
}list_sender_reputationРепутация отправителей
Состояние репутации по каждому конкретному адресу From: active, throttled (сниженный дневной лимит) или paused (отправки возвращают 423) с причиной и дневным лимитом. Проверяйте, когда отправки завершаются ошибкой 423 или 429. Результат разбит на страницы: он содержит pagination {offset, limit, returned, total?, has_more, next_offset}.
| Параметр | Тип | Обязательна | Описание |
|---|---|---|---|
limit | integer | нет | Размер страницы. По умолчанию 50. (по умолчанию 50; 1–200) |
offset | integer | нет | Количество пропускаемых записей. Используйте pagination.next_offset из предыдущей страницы. (по умолчанию 0; 0–…) |
{
"name": "list_sender_reputation",
"arguments": {}
}list_suppressionsСтоп-лист
Стоп-лист рабочего пространства: получатели, заблокированные после постоянного отказа или жалобы на спам. Отправки им завершаются ошибкой 422. Результат разбит на страницы: он содержит pagination {offset, limit, returned, total?, has_more, next_offset}.
| Параметр | Тип | Обязательна | Описание |
|---|---|---|---|
limit | integer | нет | Размер страницы. По умолчанию 50. (по умолчанию 50; 1–200) |
offset | integer | нет | Количество пропускаемых записей. Используйте pagination.next_offset из предыдущей страницы. (по умолчанию 0; 0–…) |
{
"name": "list_suppressions",
"arguments": {}
}remove_suppressionУдалить запись об отказе из стоп-листа
DESTRUCTIVE (ослабляет защитную блокировку): удаляет запись об отказе из стоп-листа, чтобы на адрес снова можно было писать. Делайте это, только когда человек подтвердил, что адрес снова действителен. Записи о жалобах удалить нельзя (409).
| Параметр | Тип | Обязательна | Описание |
|---|---|---|---|
email | string | да | Адрес получателя в стоп-листе. (макс. 320 символов) |
{
"name": "remove_suppression",
"arguments": {
"email": "fixed-mailbox@example.net"
}
}list_blocked_recipientsСписок заблокированных получателей
Все получатели, которым SendHQ откажет в отправке: отказы, жалобы и отписки от маркетинговых писем в рамках домена, со сводкой по типам. Читает до 500 самых свежих записей. Результат разбит на страницы: он содержит pagination {offset, limit, returned, total?, has_more, next_offset}.
| Параметр | Тип | Обязательна | Описание |
|---|---|---|---|
limit | integer | нет | Размер страницы. По умолчанию 50. (по умолчанию 50; 1–200) |
offset | integer | нет | Количество пропускаемых записей. Используйте pagination.next_offset из предыдущей страницы. (по умолчанию 0; 0–…) |
{
"name": "list_blocked_recipients",
"arguments": {}
}Аккаунт, использование, аналитика и ключи
get_accountПолучить аккаунт, использование и оплату
Email владельца аккаунта, тариф/уровень доступа, использованные в текущем периоде доставки получателям в сравнении с квотой, использованные домены в сравнении с лимитом, объём передачи вложений, сводка по репутации, состояние подписки, опубликованные тарифы и счётчики рабочего пространства. Используйте, чтобы проверить оставшуюся квоту или на какой адрес можно доставлять письма в пробном периоде (email аккаунта).
Без параметров.
{
"name": "get_account",
"arguments": {}
}get_analyticsПолучить аналитику отправки
Аналитика панели управления за последние 7, 30 или 90 дней: итоги по отправленным, полученным, доставленным, отказам, заблокированным, открытиям, кликам и жалобам, ежедневная динамика, основные домены отправки и самые частые темы.
| Параметр | Тип | Обязательна | Описание |
|---|---|---|---|
days | integer | нет | Окно в днях: 7, 30 (по умолчанию) или 90. (одно из 7, 30, 90) |
{
"name": "get_analytics",
"arguments": {
"days": 30
}
}list_api_keysМетаданные API-ключей
Список имён API-ключей, несекретных префиксов и времени последнего использования. Только чтение: этот MCP-сервер не может создавать, ротировать или отзывать ключи; это делает человек в панели управления. Результат разбит на страницы: он содержит pagination {offset, limit, returned, total?, has_more, next_offset}.
| Параметр | Тип | Обязательна | Описание |
|---|---|---|---|
limit | integer | нет | Размер страницы. По умолчанию 50. (по умолчанию 50; 1–200) |
offset | integer | нет | Количество пропускаемых записей. Используйте pagination.next_offset из предыдущей страницы. (по умолчанию 0; 0–…) |
{
"name": "list_api_keys",
"arguments": {}
}get_service_healthПроверить работоспособность сервиса SendHQ
Проверяет, что API SendHQ работает, и какой почтовый провайдер активен. Действительный API-ключ не нужен.
Без параметров.
{
"name": "get_service_health",
"arguments": {}
}Покрытие API
Все операции публичного API и инструменты, которые их покрывают. Покрыто всё, что пользователь может сделать в панели управления и для чего есть API; перечисленные ниже исключения сделаны намеренно.
| Эндпоинт | Инструмент | Примечания |
|---|---|---|
| POST /emails | send_email | Отправить одно письмо |
| POST /emails/batch | send_batch | Отправить до 100 индивидуальных писем |
| GET /emails | list_emails | Список отправленных и полученных писем |
| GET /emails/:id | get_email | Получить письмо и его вложения |
| PATCH /emails/:id | mark_email | Изменить статус прочтения, архивации, спама, категорию или важность |
| POST /emails/:id/labels | label_email | Добавить или снять метки с письма |
| DELETE /emails/:id | delete_email | Удалить сохранённое письмо |
| GET /emails/:id/events | list_email_events | Список событий доставки письма |
| GET /threads/:id | get_thread | Получить переписку в хронологическом порядке |
| GET /labels | list_labels | Список меток с количеством писем и правилами сортировки |
| POST /labels | create_label | Создать метку, при необходимости с правилами автосортировки |
| GET /labels/:id | get_label | Получить метку по ID или имени |
| PATCH /labels/:id | update_label | Переименовать метку, изменить её цвет или превратить в группу |
| DELETE /labels/:id | delete_label | Удалить метку, не удаляя её письма |
| POST /labels/:id/rules | create_label_rule | Добавить к метке правило автосортировки |
| DELETE /labels/:id/rules/:rule_id | delete_label_rule | Удалить правило автосортировки |
| POST /drafts | create_draft | Создать черновик в редакторе |
| GET /drafts | list_drafts | Список черновиков редактора |
| GET /drafts/:id | get_draft | Получить черновик и вложения |
| PUT /drafts/:id | update_draft | Заменить содержимое черновика |
| DELETE /drafts/:id | delete_draft | Удалить черновик |
| POST /drafts/:id/attachments | upload_attachment | Загрузить вложение в черновик |
| GET /attachments/:id | download_attachment | Скачать закрытое вложение |
| DELETE /attachments/:id | delete_attachment | Удалить закрытое вложение |
| GET /sending-identities | list_sending_identities | Список подтверждённых адресов отправителя |
| GET /templates | list_templates | Список хранимых шаблонов |
| POST /templates | create_template | Создать хранимый шаблон |
| GET /templates/:id | get_template | Получить черновики, релизы и статистику использования |
| PUT /templates/:id/draft | update_template_draft | Автосохранение черновика шаблона |
| POST /templates/:id/draft | create_template_draft | Создать новый черновик на основе опубликованного релиза |
| POST /templates/:id/render | render_template | Отрендерить точный результат на сервере |
| POST /templates/:id/test | send_template_test | Отправить тестовый снимок |
| POST /templates/:id/publish | publish_template | Опубликовать неизменяемый релиз шаблона |
| POST /templates/:id/archive | archive_template | Архивировать шаблон |
| POST /templates/:id/restore | restore_template | Восстановить шаблон из архива |
| POST /domains | add_domain | Добавить домен отправки |
| GET /domains | list_domains | Список доменов и кешированное состояние DNS |
| GET /domains/:id | get_domain | Получить параметры настройки домена |
| POST /domains/:id/verify | verify_domain | Обновить статус подтверждения в SES и DNS |
| POST /domains/:id/inbound/setup | setup_inbound | Настроить приём входящей почты через SES |
| POST /domains/:id/inbound/verify | verify_inbound | Проверить маршрутизацию входящей почты по MX |
| DELETE /domains/:id | delete_domain | Удалить домен |
| GET /dns/provider | get_dns_provider | Определить авторитетного DNS-провайдера и относительные хосты записей |
| GET /dns/domain-connect/connect | get_domain_connect_link | Создать ссылку согласия Domain Connect для настройки DNS в один клик |
| POST /inboxes | create_inbox | Создать входящий адрес |
| GET /inboxes | list_inboxes | Список входящих адресов |
| GET /inboxes/:id | get_inbox | Получить входящий адрес |
| PATCH /inboxes/:id | update_inbox | Переименовать, включить или отключить почтовый ящик |
| PUT /inboxes/:id/forwarding | set_inbox_forwarding | Пересылать полученные письма почтового ящика на другой адрес |
| DELETE /inboxes/:id | delete_inbox | Удалить почтовый ящик с сохранением писем |
| GET /deliverability/stats | deliverability_stats | Получить статистику доставки за 30 дней |
| GET /deliverability/reputation | list_sender_reputation | Состояние репутации по точному адресу отправителя |
| GET /suppressions | list_suppressions | Стоп-лист рабочего пространства |
| DELETE /suppressions/:email | remove_suppression | Удалить из стоп-листа допустимую запись об отказе |
| GET /blocked-recipients | list_blocked_recipients | Список отказов, жалоб и отписок |
| GET /account | get_account | Получить аккаунт, использование, состояние оплаты и счётчики рабочего пространства с помощью API-ключа |
| GET /analytics | get_analytics | Получить аналитику отправки из панели управления за 7, 30 или 90 дней |
| GET /profile | get_account | Двойник GET /account, доступный только в сессии; MCP-сервер читает маршрут с API-ключом. |
| POST /billing/checkout | не предоставляется | Изменения оплаты намеренно доступны только в сессии и требуют действия владельца аккаунта в панели управления. Состояние оплаты можно прочитать через get_account. |
| POST /billing/cancel | не предоставляется | Изменения оплаты намеренно доступны только в сессии и требуют действия владельца аккаунта в панели управления. Состояние оплаты можно прочитать через get_account. |
| POST /keys | не предоставляется | Намеренно исключено: агент не должен выпускать или уничтожать учётные данные. Ключами управляет человек в панели управления. |
| GET /keys | list_api_keys | Список метаданных API-ключей |
| DELETE /keys/:id | не предоставляется | Намеренно исключено: агент не должен выпускать или уничтожать учётные данные. Ключами управляет человек в панели управления. |
Намеренно недоступно
| Возможность | Эндпоинты | Причина |
|---|---|---|
| Создание, ротация, отзыв или удаление API-ключей | POST /keys, DELETE /keys/:id | Намеренно исключено: агент не должен выпускать или уничтожать учётные данные. Ключами управляет человек в панели управления. |
| Оформление оплаты или отмена подписки | POST /billing/checkout, POST /billing/cancel | Изменения оплаты намеренно доступны только в сессии и требуют действия владельца аккаунта в панели управления. Состояние оплаты можно прочитать через get_account. |
| Настройка DNS Cloudflare в один клик (OAuth) | GET /api/dns/cloudflare/connect | Требует интерактивной сессии в браузере и согласия через OAuth Cloudflare. Вместо этого используйте записи из get_domain, хосты из get_dns_provider или get_domain_connect_link. |
| Регистрация, вход, выход, привязка аккаунта Google | /api/auth/* | Аутентификация человека в браузере; MCP-сервер аутентифицируется с помощью API-ключа. |
| Форма обращения в поддержку | POST /api/contact | Публичная форма на маркетинговом сайте для людей, а не операция рабочего пространства. |
Машиночитаемый каталог: /docs/mcp/tools.json (схемы, аннотации, соответствие эндпоинтам, исключения). Версия этой страницы в Markdown: /docs/mcp.md. Если установлен CLI, команда sendhq commands --format json выводит тот же каталог.