Перейти к содержимому

MCP Сервер

Notifly MCP Server — это реализация Model Context Protocol (MCP), позволяющая AI-ассистентам (Claude, GitHub Copilot и другим) управлять Notifly через набор готовых инструментов.

С помощью MCP-сервера AI-ассистент может:

  • отправлять уведомления в каналы;
  • читать, фильтровать и удалять сообщения;
  • создавать и управлять каналами и клиентами;
  • администрировать пользователей сервера.

  • Go 1.21 или новее
Окно терминала
git clone https://github.com/notifly/mcp.git
cd mcp
go mod tidy
go build -o notifly-mcp .

Готовый бинарный файл notifly-mcp запускается через stdio-транспорт — MCP-клиент запускает его как дочерний процесс.


Сервер настраивается исключительно через переменные окружения:

ПеременнаяОбязательнаяОписание
NOTIFLY_URLБазовый URL сервера Notifly, например https://your-domain.com
NOTIFLY_APP_TOKENApp-токен (префикс A) — для инструмента send_message
NOTIFLY_CLIENT_TOKENMCP-код (префикс M) или client-токен (префикс C) — для управления ресурсами
NOTIFLY_USERЛогин для Basic Auth (альтернатива MCP-коду)
NOTIFLY_PASSПароль для Basic Auth

Откройте файл конфигурации Claude Desktop:

  • macOS: ~/Library/Application Support/Claude/claude_desktop_config.json
  • Windows: %APPDATA%\Claude\claude_desktop_config.json

Добавьте секцию mcpServers:

{
"mcpServers": {
"notifly": {
"command": "/usr/local/bin/notifly-mcp",
"env": {
"NOTIFLY_URL": "https://your-notifly-domain.com",
"NOTIFLY_APP_TOKEN": "AGdjfk_L.dKe8q",
"NOTIFLY_CLIENT_TOKEN": "CaQw5lL_L.yiRbN"
}
}
}
}

После перезапуска Claude Desktop инструменты Notifly появятся в интерфейсе.


Добавьте в .vscode/mcp.json в корне проекта или в пользовательские настройки VS Code:

{
"servers": {
"notifly": {
"type": "stdio",
"command": "/usr/local/bin/notifly-mcp",
"env": {
"NOTIFLY_URL": "https://your-notifly-domain.com",
"NOTIFLY_APP_TOKEN": "AGdjfk_L.dKe8q",
"NOTIFLY_CLIENT_TOKEN": "CaQw5lL_L.yiRbN"
}
}
}
}

Добавьте файл .cursor/mcp.json в корень проекта (project-scope) или ~/.cursor/mcp.json глобально:

{
"mcpServers": {
"notifly": {
"command": "/usr/local/bin/notifly-mcp",
"env": {
"NOTIFLY_URL": "https://your-notifly-domain.com",
"NOTIFLY_APP_TOKEN": "AGdjfk_L.dKe8q",
"NOTIFLY_CLIENT_TOKEN": "CaQw5lL_L.yiRbN"
}
}
}
}

После сохранения файла Cursor подхватит сервер автоматически. Убедитесь, что notifly-mcp доступен в PATH.


Откройте или создайте файл ~/.codeium/windsurf/mcp_config.json и добавьте секцию mcpServers:

{
"mcpServers": {
"notifly": {
"command": "/usr/local/bin/notifly-mcp",
"env": {
"NOTIFLY_URL": "https://your-notifly-domain.com",
"NOTIFLY_APP_TOKEN": "AGdjfk_L.dKe8q",
"NOTIFLY_CLIENT_TOKEN": "CaQw5lL_L.yiRbN"
}
}
}
}

После сохранения перезапустите Windsurf — инструменты Notifly появятся в Cascade.


Используйте команду claude mcp add для регистрации сервера:

Окно терминала
claude mcp add notifly /usr/local/bin/notifly-mcp \
-e NOTIFLY_URL=https://your-notifly-domain.com \
-e NOTIFLY_CLIENT_TOKEN=CaQw5lL_L.yiRbN

Флаг --scope user добавляет сервер глобально для всех проектов (по умолчанию — project-scope). Проверить список добавленных серверов: claude mcp list.


Откройте или создайте файл ~/.codex/config.toml и добавьте секцию:

[[mcp_servers]]
name = "notifly"
command = "/usr/local/bin/notifly-mcp"
env = { NOTIFLY_URL = "https://your-notifly-domain.com", NOTIFLY_CLIENT_TOKEN = "CaQw5lL_L.yiRbN" }

После сохранения Codex подхватит сервер при следующем запуске. Убедитесь, что notifly-mcp доступен в PATH.


Откройте файл настроек Zed (~/.config/zed/settings.json) и добавьте секцию context_servers:

{
"context_servers": {
"notifly": {
"command": {
"path": "/usr/local/bin/notifly-mcp",
"args": [],
"env": {
"NOTIFLY_URL": "https://your-notifly-domain.com",
"NOTIFLY_CLIENT_TOKEN": "CaQw5lL_L.yiRbN"
}
}
}
}
}

Zed подхватит сервер без перезапуска.


Добавьте секцию mcpServers в файл конфигурации Continue (~/.continue/config.json):

{
"mcpServers": [
{
"name": "notifly",
"command": "/usr/local/bin/notifly-mcp",
"env": {
"NOTIFLY_URL": "https://your-notifly-domain.com",
"NOTIFLY_CLIENT_TOKEN": "CaQw5lL_L.yiRbN"
}
}
]
}

Continue поддерживается как расширение для VS Code и JetBrains IDE.


ИнструментОписание
get_healthПроверить работоспособность сервера и базы данных
get_versionПолучить версию, commit и дату сборки
get_server_infoПолучить флаги сервера (регистрация, OIDC)
ИнструментПараметрыОписание
send_messagemessage*, title, priorityОтправить уведомление (требует NOTIFLY_APP_TOKEN)
list_messageslimit, sinceСписок всех сообщений с пагинацией
list_application_messagesapp_id*, limit, sinceСообщения конкретного канала
delete_messageid*Удалить сообщение по ID
delete_all_messagesУдалить все сообщения
delete_application_messagesapp_id*Удалить все сообщения канала
search_messagesq*, app_id, limit, sinceПоиск сообщений по тексту (мин. 2 символа); по всем каналам или в одном
mark_messages_readids*Отметить сообщения прочитанными (JSON-массив ID, например [1,2,3])
ИнструментПараметрыОписание
ask_questionquestion*, options, title, timeout_sec, default_answer, allow_multi, json_format, client_message_idЗадать вопрос человеку (push/Telegram/email с кнопками); вернёт id вопроса. Требует NOTIFLY_APP_TOKEN. См. Вопросы (Ask)
get_ask_answerid*, wait_secПолучить ответ; при wait_sec > 0 — дождаться (опрос раз в 3 с, до 300 с). Вернёт answered+ответ, pending, expired или cancelled. Требует NOTIFLY_APP_TOKEN
cancel_ask_questionid*Отменить ожидающий вопрос

Пара ask_questionget_ask_answer(wait_sec) — готовый approval-гейт для AI-агента: спросить разрешение у человека и продолжить по ответу.

ИнструментПараметрыОписание
list_applicationsСписок всех каналов
create_applicationname*, description, default_priorityСоздать канал
update_applicationid*, name, description, default_priorityОбновить канал
delete_applicationid*Удалить канал
ИнструментПараметрыОписание
list_clientsСписок всех клиентов (устройств/токенов)
create_clientname*Создать клиента, получить client-токен
update_clientid, nameПереименовать клиента
delete_clientid*Удалить клиента (отозвать токен)
ИнструментПараметрыОписание
get_current_userИнформация о текущем пользователе
list_usersСписок всех пользователей (требует admin)
get_userid*Получить пользователя по ID (admin)
create_username, pass, adminСоздать пользователя (admin)
delete_userid*Удалить пользователя (admin)
request_password_resetemail*Запросить сброс пароля — ссылка с токеном уйдёт на email (публичный, без авторизации)
confirm_password_resettoken, new_passwordПодтвердить сброс: задать новый пароль по токену из письма

Подробнее о heartbeat-ах — на странице Heartbeat.

ИнструментПараметрыОписание
list_heartbeatsСписок heartbeat-уведомлений (dead-man-switch)
create_heartbeatappid, name, intervalSec, alertMessage, graceSec, alertTitle, alertPriority, recoveryTitle, recoveryMessageСоздать heartbeat. intervalSec ≥ 30; алёрт уходит, если ping не пришёл за intervalSec+graceSec секунд; alertPriority по умолчанию 8
update_heartbeatid, name, intervalSec, alertMessage, graceSec, alertTitle, alertPriority, recoveryTitle, recoveryMessageОбновить настройки heartbeat-а
delete_heartbeatid*Удалить heartbeat
pause_heartbeatid*Приостановить (алёрты не отправляются до resume_heartbeat)
resume_heartbeatid*Возобновить приостановленный heartbeat
ping_heartbeatping_token*Отправить ping по публичному ping-токену (как это делает приложение из cron)

Подробнее об активных проверках — на странице Мониторы.

ИнструментПараметрыОписание
list_monitorsСписок активных мониторов (HTTP-URL и TCP-портов)
create_monitorappid, name, kind, target, intervalSec, alertMessage, timeoutSec, expectedStatus, consecutiveFails, alertTitle, alertPriority, recoveryTitle, recoveryMessageСоздать монитор. kind = http (тогда target — URL) или tcp (targethost:port). intervalSec 30–86400; timeoutSec по умолчанию 10; expectedStatus 0 = «любой 2xx»; consecutiveFails по умолчанию 1 (макс. 20); alertPriority по умолчанию 8
update_monitorid, name, kind, target, intervalSec, alertMessage, timeoutSec, expectedStatus, consecutiveFails, alertTitle, alertPriority, recoveryTitle, recoveryMessageОбновить настройки монитора
delete_monitorid*Удалить монитор
pause_monitorid*Приостановить (проверки не выполняются до resume_monitor)
resume_monitorid*Возобновить приостановленный монитор

Подробнее — на странице Делегирование каналов.

ИнструментПараметрыОписание
list_channel_sharesapp_id*Список share-токенов (делегаций) канала; доступно владельцу или пользователю с правом send
create_channel_shareapp_id, permission, recipient_email, noteСоздать делегацию. permission = view (чтение) или send (чтение + отправка); пустой recipient_email — открытый токен
update_channel_shareid, permission, recipient_email, noteИзменить email получателя, уровень доступа или заметку (только владелец канала)
delete_channel_shareid*Отозвать share-токен (удалить делегацию)
list_incoming_sharesКаналы, к которым текущий пользователь получил доступ (входящие share-ы по email)
accept_shareid*Принять входящую делегацию (статус → active)
decline_shareid*Отклонить входящую делегацию
join_share_by_tokentoken*Присоединиться к каналу по share-токену (префикс S)
ИнструментПараметрыОписание
get_client_subscriptionsclient_id*Каналы, на которые подписано устройство по ID клиента
set_client_subscriptionsclient_id, app_idsЗадать полный список подписок устройства; app_ids — JSON-массив ID, например [1,2,3] (заменяет текущие)
get_my_subscriptionsПодписки текущего устройства (авторизация device-токеном через NOTIFLY_CLIENT_TOKEN)
subscribe_to_channelapp_id*Подписать текущее устройство на канал
unsubscribe_from_channelchannel_id*Отписать текущее устройство от канала
ИнструментПараметрыОписание
get_quota_breakdowndayДетальная разбивка использования квоты событий за день (YYYY-MM-DD, по умолчанию — сегодня по MSK)
topup_balanceamount_rubles*Пополнить баланс (целое ≥ 1; только admin, остальным возвращаются реквизиты для оплаты)

* — обязательный параметр


Отправь уведомление в Notifly с заголовком "Деплой завершён"
и текстом "Версия 2.1.0 успешно развёрнута на prod" с приоритетом 7.

Claude вызовет инструмент send_message автоматически.

Покажи список всех каналов в Notifly и последние 10 сообщений
из канала с ID 3.

Claude последовательно вызовет list_applications и list_application_messages.

Создай нового пользователя в Notifly с именем "devops"
и паролем "securepass", без прав администратора.

Claude вызовет create_user с нужными параметрами.


  • MCP-сервер работает локально через stdio — сетевой порт не открывается.
  • Токены хранятся только в переменных окружения процесса.
  • Инструменты delete_all_messages и delete_user выполняют необратимые операции — AI-ассистент должен запросить подтверждение перед их вызовом.