Один сервер, семь клиентов
Сервер — это единственный HTTPS-эндпоинт, говорящий на Model Context Protocol через Streamable HTTP: один POST с JSON-RPC внутри, один JSON-ответ, никакого держащегося открытым потока. На публичных доменах ничего не нужно устанавливать, ничего запускать локально и никуда регистрироваться — вся настройка сводится к одному URL:
Эндпоинт MCPhttps://grabmail.io/mcp
Любой клиент MCP умеет работать с удалённым HTTP-сервером, но каждый хранит настройку в своём файле и под слегка отличающимся именем ключа. В разделах ниже — точная строка для каждого. Форматы приведены по состоянию на сентябрь 2026 года; если что-то с тех пор изменилось, авторитетный источник — собственная документация клиента.
Проверьте, что сервер отвечает, из shell
Прежде чем трогать какой-либо клиент, убедитесь, что сервер на месте, и посмотрите, что он предлагает. Поскольку транспорт — это обычный HTTP, хватит одного curl:
$ curl -s -X POST https://grabmail.io/mcp -H "Content-Type: application/json" -d '{"jsonrpc":"2.0","id":1,"method":"tools/list"}' | jq '.result.tools[].name'"create_inbox"
"list_domains"
"list_messages"
"read_message"
"wait_for_message"
"delete_message"Если это работает, заработает и любой клиент ниже, а если конкретный клиент всё же не срабатывает, дело в его настройке, а не в сервере. Если не работает даже это, проверьте, что ваша сеть разрешает исходящий HTTPS к grabmail.io, — это весь сетевой след целиком.
Claude Code
Одна команда, из любого каталога. Она регистрирует сервер для вашего пользователя, поэтому он становится доступен в любом проекте:
$ claude mcp add --transport http grabmail https://grabmail.io/mcpЧтобы вместо этого поделиться сервером с командой через репозиторий, ограничьте область действия проектом. Это запишет .mcp.json в корень, который попадает под контроль версий, и коллегам будет предложено подтвердить его использование:
$ claude mcp add --transport http --scope project grabmail https://grabmail.io/mcp{
"mcpServers": {
"grabmail": {
"type": "http",
"url": "https://grabmail.io/mcp"
}
}
}Перезапустите Claude Code, выполните /mcp — и grabmail появится в списке со всеми шестью инструментами. Сервер также отвечает на протокольный вызов initialize коротким абзацем инструкций, который Claude Code передаёт модели, — так что агент сразу знает, что нужно отдавать алиас и ждать по адресу.
Claude Desktop
Удалённые серверы добавляются через само приложение, а не через файл настройки:
- Settings → Connectors → Add custom connector.
- Вставьте
https://grabmail.io/mcpв качестве URL и дайте ему имя. - Начните новый диалог — и инструменты появятся под этим коннектором.
В версии, которая принимает только локальные серверы в claude_desktop_config.json, свяжите удалённый эндпоинт через mcp-remote — он выполняется как локальный процесс и перенаправляет вызовы на URL:
{
"mcpServers": {
"grabmail": {
"command": "npx",
"args": ["-y", "mcp-remote", "https://grabmail.io/mcp"]
}
}
}Cursor
Cursor читает .cursor/mcp.json в проекте (либо ~/.cursor/mcp.json для всех проектов сразу). Удалённый сервер задаётся через url:
{
"mcpServers": {
"grabmail": {
"url": "https://grabmail.io/mcp"
}
}
}Откройте Cursor Settings → MCP, чтобы увидеть сервер в списке и включить его инструменты. В режиме Agent модель вызывает их сама; в чате их можно запросить по имени.
Windsurf
Windsurf хранит свои серверы в ~/.codeium/windsurf/mcp_config.json, и ключ для удалённого сервера — serverUrl, а не url, — единственное место, где формат отличается:
{
"mcpServers": {
"grabmail": {
"serverUrl": "https://grabmail.io/mcp"
}
}
}Cascade показывает сервер в списке после обновления панели MCP. К тому же файлу можно попасть через Windsurf Settings → Cascade → MCP servers → View raw config.
VS Code
Режим агента в VS Code читает .vscode/mcp.json в рабочей области, либо файл уровня пользователя, который создаёт команда MCP: Add Server в палитре команд. Серверы живут в разделе servers, а не mcpServers, и удалённый сервер объявляет свой транспорт:
{
"servers": {
"grabmail": {
"type": "http",
"url": "https://grabmail.io/mcp"
}
}
}Над записью в редакторе появляется небольшая ссылка «Start»; после этого инструменты показываются в выборе инструментов чата, а режим агента вызывает их без дополнительных просьб.
Codex CLI и Gemini CLI
Codex CLI хранит настройку в TOML по пути ~/.codex/config.toml. Удалённый сервер — это таблица с url:
[mcp_servers.grabmail]
url = "https://grabmail.io/mcp"Gemini CLI читает ~/.gemini/settings.json (либо .gemini/settings.json в проекте), и ключ для сервера Streamable HTTP — httpUrl:
{
"mcpServers": {
"grabmail": {
"httpUrl": "https://grabmail.io/mcp"
}
}
}Версия любого из них, принимающая только локальные серверы, может достучаться до эндпоинта через тот же мост mcp-remote, что показан для Claude Desktop: command = "npx", args = ["-y", "mcp-remote", "https://grabmail.io/mcp"].
Шесть инструментов
Независимо от клиента модель видит одни и те же шесть инструментов под одними и теми же именами. Между вызовами не нужно поддерживать состояние, и ни одному из них не нужен аргумент, которого не вернул предыдущий вызов.
create_inbox- Придумывает новый адрес и возвращает его вместе с алиасом и полем
next_step, объясняющим, что использовать где. На сервере ничего не резервируется, поэтому вызов не может провалиться. Принимает необязательный, удобочитаемыйprefix. wait_for_message- Блокирует вызов до прихода письма на адрес, максимум на 25 секунд, а затем возвращает его целиком — тему, отправителя, обычный текст, HTML. Фильтруйте через
subject_containsилиfrom_contains; передайтеsince_id, чтобы игнорировать то, что уже было. После тихого ожидания отвечаетtimed_outи просит вызвать себя снова. read_message- Одно письмо целиком по id. Нужен редко, потому что ожидание и так уже возвращает письмо целиком.
list_messages- Всё, что ждёт по адресу, от новых к старым, сразу же — в том числе когда там ничего нет.
list_domains- Публичные домены, которыми может пользоваться кто угодно, — на случай, если форма только что отказала одному из них.
delete_message- Удаляет письмо сразу, а не через 5 дней. Идемпотентно, так что повторный вызов агентом ничего не стоит.
Цикл регистрации за четыре вызова
Эта последовательность нужна почти в любой задаче, и клиент её не меняет:
create_inbox. В ответ приходят адрес, алиас и пометка, что есть что.- Алиас идёт в форму. Сайт получает рабочий адрес, который доставляет почту в ящик, но не может использоваться, чтобы этот ящик открыть.
wait_for_messageпо адресу, сразу после отправки формы, сsubject_contains, выставленным на слово, которое будет в письме с подтверждением. Вызов блокируется; агенту не нужно строить собственный цикл.- Код извлекается из письма, которое вернуло ожидание. Дальнейших вызовов обычно вообще не требуется.
Sign up for a trial at https://app.example.com/signup with a fresh GrabMail inbox.
Use the ALIAS in the form, wait for the confirmation code with wait_for_message
on the ADDRESS, enter it, and tell me the resulting login.Что добавить в собственные инструкции агента
Сервер сообщает модели, как им пользоваться, ещё в момент подключения, но модель, прочитавшая те же четыре правила в собственных инструкциях проекта, следует им каждый раз, а не почти каждый. Добавьте это в CLAUDE.md, .cursor/rules, .windsurfrules, AGENTS.md или GEMINI.md — смотря что читает ваш клиент:
## Email
- To receive email, use the `grabmail` MCP server. Call `create_inbox` once per task.
- Put the **alias** it returns into forms; poll the **address** it returns with `wait_for_message`.
- Call `wait_for_message` right after submitting a form, with `subject_contains` set to a word
you expect ("code", "verify", "confirm"). If it returns `timed_out`, call it again — up to
three times — before concluding the mail was not sent.
- Never reuse an inbox across tasks. Never send anything confidential to one: it is public.Два самых важных правила — это как раз то, что агент делает неправильно, если ему не сказать: вставлять в форму алиас, а опрашивать адрес, и относиться к timed_out как к «вызови снова», а не как к «письмо так и не отправили». В «Ящик, который может прочитать AI-агент» оба этих правила разобраны подробно, включая то, почему ожидание может завершиться раньше, чем придёт почта.
Когда что-то не работает
| Симптом | Причина | Решение |
|---|---|---|
| Сервер не появляется в списке | Файл настройки лежит не там, использует не тот ключ (url / serverUrl / httpUrl / servers), либо клиент не был перезапущен. | Скопируйте блок для вашего клиента без изменений, перезапустите его и выполните curl выше, чтобы исключить проблему на стороне сервера. |
| Инструменты в списке есть, но модель их не вызывает | Инструменты отключены в панели MCP клиента, либо модели не сообщили, что в задаче есть почтовый шаг. | Включите их и добавьте абзац с инструкциями выше. |
wait_for_message постоянно возвращает timed_out | Форма так и не была отправлена, алиас введён с опечаткой, сайт отказал домену, либо уже выполняется 8 ожиданий. | Вызовите снова, до трёх раз; проверьте собственную ошибку формы; прочитайте «Почему формы регистрации блокируют одноразовую почту». |
| Сайт говорит, что адрес недействителен | Публичный домен есть в чёрном списке одноразовой почты. | Используйте собственный домен (одна MX-запись) или домен из пула, который держат подальше от списков. |
Мост (mcp-remote) не запускается | На машине нет Node, либо npx не может достучаться до реестра. | Установите Node 18 или новее, либо используйте версию клиента, принимающую URL напрямую. |
Прежде чем считать задачу закрытой
curlвыше возвращает шесть инструментов с вашей машины.- После перезапуска сервер появляется в панели MCP клиента, инструменты включены.
- Абзац с инструкциями лежит в файле, который читает ваш клиент.
- Тестовый промпт довёл регистрацию до конца: алиас в форме, ожидание по адресу, код считан.
- На эти ящики никогда не отправится ничего конфиденциального — они публичные.
Вот и вся настройка. Тот же сервер работает из любого фреймворка, который говорит на MCP, а для агентов, построенных без MCP, — обычной функции-инструмента в LangChain, OpenAI Agents SDK или вашем собственном цикле — в «Почта для AI-агентов» показана REST-версия тех же четырёх шагов.
Вопросы
Нужен ли API-ключ или аккаунт для MCP-сервера?
Нет. Публичные домены не требуют ни ключа, ни аккаунта, ни заголовка, а MCP-сервер отдаёт ровно то же самое, что и REST API. Bearer-токен, передаваемый заголовком Authorization на эндпоинте, используется только для платного пула доменов, которые держат подальше от чёрных списков одноразовой почты.
Это Streamable HTTP или SSE?
Streamable HTTP: один POST, один JSON-ответ. Держать открытым поток событий не нужно, поэтому wait_for_message и ограничен 25 секундами, — а клиенту, открывающему GET в ожидании SSE, обычным JSON сообщают, что такового не предусмотрено.
Могут ли несколько агентов использовать сервер одновременно?
Да. Состояния сессии не существует; каждый вызов несёт в себе всё необходимое. Единственное общее ограничение — не больше 8 вызовов wait_for_message одновременно на всех сразу; при превышении инструмент сразу отвечает timed_out и просит вызвать себя снова, а это уже покрывается абзацем с инструкциями выше.
Почему wait_for_message завершается раньше, чем приходит почта?
Потому что серверный воркер, спящий по несколько минут, — это воркер, которым не может воспользоваться никто другой. Ожидание ограничено 25 секундами и честно отвечает timed_out, а не падает с ошибкой; агент просто вызывает его снова. Три вызова — это больше минуты ожидания, чего хватает для любого транзакционного письма, которое действительно было отправлено.
Может ли агент ещё и отправлять почту?
Нет. Сервис специально сделан только для приёма: бесплатный сервер без аккаунта, который умел бы ещё и отправлять почту, за час превратился бы в ретранслятор спама. Агенту, которому нужно отправлять почту, требуется провайдер отправки; этот сервер — для чтения того, что приходит в ответ.
Приватен ли ящик для моего агента?
Нет. Прочитать его может любой, кто знает адрес, — и на публичном домене, и на вашем собственном. Именно для этого существует алиас: сайт получает адрес, который доставляет почту в ящик, но не может использоваться, чтобы этот ящик открыть. Никогда не позволяйте агенту отправлять на эти ящики что-либо конфиденциальное.
Какая настройка клиента считается эталонной, если что-то из этого изменится?
Собственная документация каждого клиента. Форматы выше приведены по состоянию на сентябрь 2026 года; серверная сторона от них не зависит — это один URL, и его может вызвать любой клиент, умеющий обращаться к удалённому MCP-серверу по HTTP.


