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

# MCP-сервер для ИИ-агентов

У Echobell есть официальный сервер [Model Context Protocol](https://modelcontextprotocol.io) (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`, уведомление получают все подписчики этого канала — каждый с тем [типом уведомлений](/docs/notification), который выбрал сам.
- Учётные данные — это **токен триггера** канала, тот же токен, которым заканчивается webhook URL канала. MCP-сервер работает так же, как [вебхук](/docs/webhook) канала, только в виде инструмента, который агент умеет вызывать.

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

## Как получить 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>
```

<Callout type="warn">
  MCP URL содержит токен триггера вашего канала. Любой, у кого он есть, может
  отправлять уведомления подписчикам канала, поэтому храните его так же
  бережно, как пароль. См. раздел [Безопасность](#безопасность).
</Callout>

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

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

### Claude Code

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

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

### Codex

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

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

### Cursor

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

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

### VS Code (GitHub Copilot)

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

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

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

### Windsurf

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

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

### Gemini CLI

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

```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:

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

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

```json
{
  "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`. Агент сам решает, как заполнить его по вашему запросу.

| Аргумент | Тип | Обязательный | Описание |
|---|---|---|---|
| `title` | string | Да | Заголовок уведомления. |
| `body` | string | Нет | Текст уведомления. |
| `link` | string (URL) | Нет | Ссылка, которая открывается по нажатию на уведомление: пул-реквест, лог сборки или дашборд. |
| `urgency` | string | Нет | `normal`, `time-sensitive` или `calling`. Если не указан, каждый подписчик получает свой уровень. См. раздел [Срочность](#срочность). |

## Срочность

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

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

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

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

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

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

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

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

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

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

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

```json
{
  "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
    }
  ]
}
```

| Поле | Значение |
|---|---|
| `notificationTriggered` | `true`, если уведомление отправлено. |
| `reason` | Почему ничего не отправлено: `conditions-not-met` ([условия](/docs/conditions) канала не выполнены) или `no-subscribers` (на канал никто не подписан). `null`, если уведомление отправлено. |
| `requestedUrgency` | Значение `urgency`, которое запросил агент, или `null`, если он его не указал. |
| `recipients` | Сколько подписчиков получили уведомление. |
| `deliveredUrgency` | Сколько подписчиков получили каждый уровень. |
| `fallbacks` | Подписчики, получившие более низкий уровень, чем запрошен, и причина: `premium-required` (для звонка нужен Premium), `subscriber-setting` (собственный уровень подписчика для этого канала ниже) или `call-cooldown` (канал уже звонил этому подписчику в течение последней минуты). |

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

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

- **Каналы с прямой передачей** (по умолчанию) показывают `title` и `body` ровно в том виде, в каком их отправил агент.
- **Каналы с шаблоном** (когда в **Дополнительных настройках** включён **Свой шаблон**) собирают уведомление по вашим [шаблонам](/docs/template). В шаблонах доступны переменные `title`, `body`, `link`, `externalLink` и `urgency`, а [условия](/docs/conditions) канала продолжают действовать. Если условия не выполнены, ничего не отправляется, а агент получает `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**: токен не передан, неверен или был сброшен.

## См. также

- [Вебхуки](/docs/webhook) — запускайте тот же канал из скриптов, CI и других сервисов
- [Типы уведомлений](/docs/notification) — чем отличаются «Обычное», «Срочное» и «Звонок»
- [Шаблоны](/docs/template) и [условия](/docs/conditions) — оформление и фильтрация уведомлений
