MCP-сервер - ИИ-агенты присылают уведомления и звонят вам

Подключите Claude Code, Codex, Cursor, ChatGPT и других ИИ-агентов к MCP-серверу Echobell, чтобы получать от них push-уведомления или звонки.


У Echobell есть официальный сервер Model Context Protocol (MCP). Подключите его к своему ИИ-агенту — Claude Code, Codex, Cursor, VS Code, Windsurf, Gemini CLI, Claude, ChatGPT или любому другому MCP-клиенту, — и у агента появится один инструмент, notify, который отправляет уведомление через один из ваших каналов Echobell.

Запустите долгий рефакторинг, прогон тестов или деплой, отойдите от компьютера и попросите агента сообщить, когда он закончит. Телефон завибрирует, когда работа будет готова, покажет срочное оповещение, когда агенту понадобитесь вы, или зазвонит, как при входящем вызове, если что-то пошло совсем не так.

Как это работает

  • Это удалённый MCP-сервер по адресу https://mcp.echobell.one/mcp, работающий через транспорт Streamable HTTP. Ничего устанавливать не нужно: ни npm-пакета, ни npx, ни локального процесса.
  • Каждый MCP URL относится к одному каналу. Когда агент вызывает notify, уведомление получают все подписчики этого канала — каждый с тем типом уведомлений, который выбрал сам.
  • Учётные данные — это токен триггера канала, тот же токен, которым заканчивается webhook URL канала. MCP-сервер работает так же, как вебхук канала, только в виде инструмента, который агент умеет вызывать.

Создайте отдельный канал для агентов, например «ИИ-агенты», и подпишитесь на него с типом «Звонок». Тогда агенты смогут выбирать любой уровень вплоть до звонка, а сам канал можно отдать коллегам, которым нужны те же оповещения.

Как получить MCP URL

В приложении

  1. Откройте приложение Echobell и нажмите на канал, который должен использовать агент.
  2. В сведениях о канале найдите раздел Подключить ИИ-агента.
  3. Скопируйте URL MCP-сервера или готовый фрагмент настройки для вашего агента.

Из webhook URL

MCP URL использует тот же токен, что и webhook URL канала. Возьмите токен из конца webhook URL и подставьте его после https://mcp.echobell.one/mcp/:

Webhook URL: https://hook.echobell.one/t/<channel-token>
MCP URL:     https://mcp.echobell.one/mcp/<channel-token>

MCP URL содержит токен триггера вашего канала. Любой, у кого он есть, может отправлять уведомления подписчикам канала, поэтому храните его так же бережно, как пароль. См. раздел Безопасность.

Подключение агента

Во всех фрагментах ниже используется вариант с токеном в URL. Замените <channel-token> на токен триггера вашего канала или вставьте фрагмент из приложения — в нём токен уже подставлен.

Claude Code

claude mcp add --transport http echobell https://mcp.echobell.one/mcp/<channel-token>

Добавьте --scope user, чтобы сервер был доступен во всех проектах, а не только в текущем.

Codex

Добавьте в ~/.codex/config.toml:

[mcp_servers.echobell]
url = "https://mcp.echobell.one/mcp/<channel-token>"

Cursor

Добавьте в ~/.cursor/mcp.json или в .cursor/mcp.json внутри проекта:

{
  "mcpServers": {
    "echobell": {
      "url": "https://mcp.echobell.one/mcp/<channel-token>"
    }
  }
}

VS Code (GitHub Copilot)

Добавьте в .vscode/mcp.json в рабочей области, а затем пользуйтесь инструментом в Copilot Chat в режиме агента:

{
  "servers": {
    "echobell": {
      "type": "http",
      "url": "https://mcp.echobell.one/mcp/<channel-token>"
    }
  }
}

Если .vscode/mcp.json хранится в репозитории, используйте вариант с заголовком и запросом ввода, чтобы токена не было в файле.

Windsurf

Добавьте в ~/.codeium/windsurf/mcp_config.json:

{
  "mcpServers": {
    "echobell": {
      "serverUrl": "https://mcp.echobell.one/mcp/<channel-token>"
    }
  }
}

Gemini CLI

Добавьте в ~/.gemini/settings.json:

{
  "mcpServers": {
    "echobell": {
      "httpUrl": "https://mcp.echobell.one/mcp/<channel-token>"
    }
  }
}

Claude Desktop и claude.ai

  1. Откройте Settings → Connectors.
  2. Выберите Add custom connector.
  3. Введите имя Echobell и URL https://mcp.echobell.one/mcp/<channel-token>, затем добавьте коннектор.

Коннектор доступен и в веб-версии Claude, и в настольном приложении.

ChatGPT

  1. Включите режим разработчика в настройках ChatGPT.
  2. Откройте Settings → Connectors и выберите Create.
  3. Введите URL https://mcp.echobell.one/mcp/<channel-token> и выберите аутентификацию No authentication — учётными данными служит токен в URL.

Другие MCP-клиенты

Подойдёт любой клиент с поддержкой транспорта Streamable HTTP. Укажите ему URL https://mcp.echobell.one/mcp/<channel-token> или используйте вариант с заголовком ниже.

Вариант с заголовком

Вместо того чтобы помещать токен в URL, его можно передать в заголовке Authorization. Оба варианта равнозначны.

URL:            https://mcp.echobell.one/mcp
Authorization:  Bearer <channel-token>

В Claude Code:

claude mcp add --transport http echobell https://mcp.echobell.one/mcp \
  --header "Authorization: Bearer <channel-token>"

В VS Code запрос ввода (input) не даёт токену попасть в .vscode/mcp.json, так что файл можно спокойно коммитить. VS Code спросит токен при первом запуске сервера и надёжно его сохранит:

{
  "inputs": [
    {
      "type": "promptString",
      "id": "echobell-token",
      "description": "Echobell channel trigger token",
      "password": true
    }
  ],
  "servers": {
    "echobell": {
      "type": "http",
      "url": "https://mcp.echobell.one/mcp",
      "headers": {
        "Authorization": "Bearer ${input:echobell-token}"
      }
    }
  }
}

Инструмент notify

Сервер предоставляет единственный инструмент — notify. Агент сам решает, как заполнить его по вашему запросу.

АргументТипОбязательныйОписание
titlestringДаЗаголовок уведомления.
bodystringНетТекст уведомления.
linkstring (URL)НетСсылка, которая открывается по нажатию на уведомление: пул-реквест, лог сборки или дашборд.
urgencystringНетnormal, time-sensitive или calling. Если не указан, каждый подписчик получает свой уровень. См. раздел Срочность.

Срочность

Каждый, кто подписывается на канал, выбирает для него в приложении тип уведомлений: «Обычное», «Срочное» или «Звонок». Этот выбор — наивысший уровень, на котором канал может до него достучаться.

  • Если агент не передаёт urgency, каждый подписчик получает выбранный им уровень.
  • Если агент передаёт urgency, он может только понизить уровень подписчика, но никогда не повысить. Если вы подписаны с типом «Звонок», "urgency": "normal" придёт как обычное уведомление. Если вы подписаны с типом «Обычное», "urgency": "calling" всё равно придёт как обычное уведомление.

Так один канал покрывает всё. Подпишитесь с типом «Звонок» и попросите агента отправлять рутинные новости как normal, а calling использовать, только когда что-то сломалось.

В отличие от notificationType в запросах к вебхуку, urgency работает и в каналах с собственным шаблоном.

Для звонков нужен Echobell Premium

Уведомления-звонки — функция Echobell Premium. Если агент запрашивает calling, подписчик без Premium получает вместо звонка срочное уведомление — точно так же, как в приложении и с вебхуками.

Один звонок в минуту на канал

Канал звонит каждому подписчику не чаще одного раза в минуту. Если агент запросит ещё один звонок в течение этой минуты — например, потому что застрял на повторных попытках, — подписчик получит вместо звонка срочное уведомление, которое всё равно пробивается через режимы фокусирования. Вебхуки и email-триггеры подчиняются тому же правилу.

Агент узнаёт об обоих случаях. В результате инструмента перечислены все такие замены, поэтому агент знает, что телефон не зазвонил, и может прямо сказать об этом, а не считать, что вам позвонили.

Что получает агент в ответ

Каждый вызов notify возвращает агенту короткую текстовую сводку и структурированные данные:

{
  "notificationTriggered": true,
  "reason": null,
  "requestedUrgency": "calling",
  "recipients": 1,
  "deliveredUrgency": { "normal": 0, "time-sensitive": 1, "calling": 0 },
  "fallbacks": [
    {
      "from": "calling",
      "to": "time-sensitive",
      "reason": "premium-required",
      "recipients": 1
    }
  ]
}
ПолеЗначение
notificationTriggeredtrue, если уведомление отправлено.
reasonПочему ничего не отправлено: conditions-not-met (условия канала не выполнены) или no-subscribers (на канал никто не подписан). null, если уведомление отправлено.
requestedUrgencyЗначение urgency, которое запросил агент, или null, если он его не указал.
recipientsСколько подписчиков получили уведомление.
deliveredUrgencyСколько подписчиков получили каждый уровень.
fallbacksПодписчики, получившие более низкий уровень, чем запрошен, и причина: premium-required (для звонка нужен Premium), subscriber-setting (собственный уровень подписчика для этого канала ниже) или call-cooldown (канал уже звонил этому подписчику в течение последней минуты).

Каналы с прямой передачей и с шаблоном

MCP-сервер работает с обоими видами каналов:

  • Каналы с прямой передачей (по умолчанию) показывают title и body ровно в том виде, в каком их отправил агент.
  • Каналы с шаблоном (когда в Дополнительных настройках включён Свой шаблон) собирают уведомление по вашим шаблонам. В шаблонах доступны переменные title, body, link, externalLink и urgency, а условия канала продолжают действовать. Если условия не выполнены, ничего не отправляется, а агент получает reason: "conditions-not-met".

Примеры запросов

Когда сервер подключён, просите об уведомлениях обычными словами:

  • «Прогони полный набор тестов и пришли уведомление в Echobell, когда закончишь».
  • «Отрефактори платёжный модуль. Если понадобится моё решение, пришли срочное оповещение в Echobell».
  • «Задеплой на staging. Если деплой упадёт — позвони мне, иначе пришли обычное уведомление с URL».
  • «Когда миграция закончится, пришли уведомление с кратким итогом и ссылкой на пул-реквест».

Чтобы это вошло в привычку, добавьте в файл инструкций агента (CLAUDE.md, AGENTS.md, .cursorrules и т. п.) примерно такие строки:

When a task takes longer than a few minutes, call the Echobell notify tool when it finishes.
Use urgency "calling" only when something is broken and needs me right away.

Безопасность

  • Токен — это учётные данные. Любой, у кого есть MCP URL (или токен), может отправлять уведомления подписчикам канала. Ничего прочитать или изменить в вашем аккаунте с ним нельзя — единственное, что он позволяет, это отправлять уведомления.
  • Не кладите его в общие файлы. Не коммитьте конфигурацию с токеном в URL. Для настроек на уровне проекта используйте вариант с заголовком с запросом ввода или переменной окружения.
  • Чтобы отозвать доступ, сбросьте токен триггера. Откройте канал в приложении и сбросьте его токен триггера. Старый MCP URL сразу перестаёт работать (запросы получают 401 Unauthorized), как и старый webhook URL. Обновите токен у агентов и у всех, кто вызывает вебхук.

Ограничения и ошибки

  • Лимит запросов: каждый токен принимает до 120 MCP-запросов в минуту. У MCP-запросов свой лимит, отдельный от webhook-запросов канала.
  • 401 Unauthorized: токен не передан, неверен или был сброшен.

См. также