@statuser/mcp
v0.1.6
Published
MCP server for Statuser.cloud — monitor servers, manage incidents and status pages from your AI client
Maintainers
Readme
MCP-сервер Statuser
MCP-сервер для управления Statuser из ИИ-клиента — Claude Desktop, Claude Code, Cursor, Windsurf, VS Code и любого другого, который поддерживает Model Context Protocol.
С ним ассистент умеет работать с вашим аккаунтом Statuser напрямую: смотреть текущее состояние серверов, разбирать инциденты, публиковать обновления на страницах статуса, настраивать уведомления. Всё это поверх публичного API Statuser с авторизацией по API-ключу.
Что внутри
- Мониторинг сервисов. Список серверов, их статусы, графики проверок и heartbeat-событий, история изменений DNS, добавление и редактирование серверов, постановка на паузу и тестовые уведомления.
- Инциденты. Подробная карточка с диагностикой и таймингами по каждой локации, AI-саммари, PDF-отчёт, комментарии с вложениями.
- Страницы статуса. Создание и настройка, управление группами и серверами, публикация инцидент-отчётов и плановых работ с таймлайном обновлений.
- Уведомления. Правила нотификаций по типам подписок (email, Telegram, MAX), управление вебхуками, добавление и подтверждение email-каналов.
- Аккаунт. Профиль, тариф и фичи, режим отпуска, 2FA, привязки Telegram и MAX.
[!NOTE] MCP-сервер обращается к API от имени аккаунта-владельца ключа. Все ограничения тарифа сохраняются — например, AI-саммари и кастомный домен будут доступны только если они включены в вашем плане. Сверяйтесь с инструментом
current_plan_get.
Содержание
- Быстрый старт
- Установка
- Настройки
- Группы инструментов
- Защита от случайных изменений
- Инструменты
- Примеры запросов к ассистенту
- Что делать при ошибках
- Совместимость
- Лицензия
Быстрый старт
- Войдите в личный кабинет Statuser и создайте API-ключ.
- Добавьте сервер в конфиг вашего MCP-клиента — примеры ниже.
- Перезапустите клиент. Инструменты появятся под именем
statuser.
Запускается через npx -y @statuser/mcp — глобально устанавливать ничего не нужно, Docker тоже не требуется. Единственный обязательный параметр — переменная окружения STATUSER_API_KEY.
Установка
В один клик
Для клиентов с поддержкой MCP-deeplink установка укладывается в нажатие кнопки. Клиент откроется, попросит API-ключ и сам сохранит конфиг.
Перед установкой создайте API-ключ в личном кабинете Statuser — клиент попросит его в момент установки. Кнопка для Cursor подставит плейсхолдер API_KEY_HERE; замените его на свой ключ в форме, которую откроет Cursor.
Для Claude Desktop, Claude Code, Windsurf, Zed и других клиентов автоустановки пока нет — там нужен ручной конфиг ниже.
Claude Desktop
Откройте Настройки → Developer → Edit Config и добавьте в claude_desktop_config.json:
{
"mcpServers": {
"statuser": {
"command": "npx",
"args": ["-y", "@statuser/mcp"],
"env": {
"STATUSER_API_KEY": "ваш_ключ"
}
}
}
}После сохранения полностью закройте Claude Desktop (Cmd/Ctrl + Q) и откройте заново — простого закрытия окна недостаточно.
Claude Code
В корне проекта создайте .mcp.json:
{
"mcpServers": {
"statuser": {
"command": "npx",
"args": ["-y", "@statuser/mcp"],
"env": {
"STATUSER_API_KEY": "ваш_ключ"
}
}
}
}Или одной командой:
claude mcp add statuser --env STATUSER_API_KEY=ваш_ключ -- npx -y @statuser/mcpCursor
Самый быстрый путь — кнопка «Установить в Cursor» выше. Если нужно вручную, Настройки → MCP → Add new server:
{
"mcpServers": {
"statuser": {
"command": "npx",
"args": ["-y", "@statuser/mcp"],
"env": {
"STATUSER_API_KEY": "ваш_ключ"
}
}
}
}VS Code (GitHub Copilot Chat и другие MCP-расширения)
Самый быстрый путь — кнопка «Установить в VS Code» выше. Если нужно вручную, Настройки → MCP servers → Add:
{
"statuser": {
"command": "npx",
"args": ["-y", "@statuser/mcp"],
"env": {
"STATUSER_API_KEY": "ваш_ключ"
}
}
}Любой клиент с поддержкой MCP принимает один и тот же формат запуска:
command:npxargs:["-y", "@statuser/mcp"]env.STATUSER_API_KEY: ваш ключ
Название поля настройки (mcpServers, mcp.servers, experimental.mcp и т.п.) различается между клиентами — сверяйтесь с их документацией.
Настройки
Все параметры задаются через переменные окружения в блоке env конфига клиента.
| Переменная | Обязательно | По умолчанию | Описание |
| ---------------------- | ----------- | ---------------------------- | --------------------------------------------------------------------------------------------------------------------------------- |
| STATUSER_API_KEY | да | — | API-ключ от statuser.cloud/my/account/api-keys. Без него сервер не запустится. |
| STATUSER_ALLOW_WRITE | нет | 0 | Если 1, true или on — инструменты, которые создают, изменяют или удаляют данные, работают без явного подтверждения. |
| STATUSER_TOOLSETS | нет | all | Список включённых групп инструментов через запятую. Значение all включает все группы. |
| STATUSER_API_URL | нет | https://api.statuser.cloud | Альтернативный базовый URL. Нужен только если вы проксируете API или работаете со staging-окружением. |
Группы инструментов
Около 70 инструментов разбиты на 7 логических групп. По умолчанию включены все, но через STATUSER_TOOLSETS=... можно оставить только нужные.
Зачем это бывает удобно:
- меньше инструментов в контексте — ассистент точнее выбирает подходящий;
- меньше токенов в системном промпте клиента;
- если ключ имеет доступ ко всему API, а вам нужны только серверы — можно показать ассистенту только их.
| Группа | Что включает | Примеры инструментов |
| ----------------------- | --------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------- |
| account | Профиль, тариф, режим отпуска, 2FA, привязки Telegram и MAX | account_get, current_plan_get, holiday_mode_set, telegram_linked_list, max_get_link |
| monitors | Серверы, их проверки, heartbeat-события, история изменений DNS | monitor_list, monitor_create, monitor_pause, monitor_get_checks, monitor_get_dns_history |
| incidents | Инциденты, события, AI-саммари, PDF-отчёт | incident_list, incident_get, incident_get_events, incident_generate_ai_summary, incident_get_report_pdf |
| incident-comments | Комментарии к инцидентам с вложениями | incident_comment_create, incident_comment_upload_file, incident_comment_delete |
| status-pages | Страницы статуса, группы, серверы, домены, slug, подписчики | status_page_list, status_page_create, status_page_set_groups, status_page_subscriber_list |
| status-page-reports | Публикация инцидент-отчётов и плановых работ с таймлайном обновлений | status_page_incident_report_publish, status_page_maintenance_schedule, ..._update_add |
| notifications | Правила нотификаций, вебхуки, email-каналы | notification_rule_set, webhook_create, notification_email_add, notification_email_confirm |
Примеры значения:
// только серверы и инциденты
"env": { "STATUSER_API_KEY": "...", "STATUSER_TOOLSETS": "monitors,incidents" }
// явно все группы — то же самое, что не задавать переменную
"env": { "STATUSER_API_KEY": "...", "STATUSER_TOOLSETS": "all" }Если в списке указана неизвестная группа, сервер не запустится и подскажет допустимые значения.
Защита от случайных изменений
API-ключ Statuser даёт полный доступ к аккаунту, поэтому MCP-сервер по умолчанию блокирует все инструменты, которые что-либо создают, изменяют или удаляют. Это защищает от того, чтобы ассистент случайно удалил сервер продакшна или отписал нужного человека от уведомлений.
[!IMPORTANT] Инструменты только для чтения (
*_list,*_get,monitor_get_checks,incident_get_report_pdfи подобные) работают всегда без подтверждения.
При попытке вызвать заблокированный инструмент сервер возвращает осмысленную ошибку с двумя способами разрешить вызов:
- Разрешить навсегда в конфиге клиента:
"STATUSER_ALLOW_WRITE": "1"в блокеenv. Подходит, если вы доверяете ассистенту и заранее очертили его область работы черезSTATUSER_TOOLSETS. - Разрешить разово в самом запросе: передайте ассистенту явное указание добавить аргумент
confirm: trueк конкретному вызову. Это удобно, когда основная сессия должна оставаться read-only, но один-два изменения всё-таки нужны.
Под защитой находятся в том числе:
- удаление серверов, страниц статуса, комментариев, отчётов и плановых работ;
- удаление вебхуков и email-каналов;
- постановка серверов на паузу и снятие;
- публикация и скрытие страниц статуса;
- включение режима отпуска;
- отправка тестовых уведомлений.
Инструменты дополнительно помечаются MCP-аннотациями destructiveHint и readOnlyHint. Клиенты, которые их читают, добавляют поверх нашего собственный экран подтверждения.
Инструменты
Полный список с описанием параметров MCP-клиент покажет автоматически при подключении. Ниже — обзор по группам. Условные обозначения: ✏️ — инструмент изменяет данные, ⚠️ — действие необратимо.
| Инструмент | Что делает | Изменяет данные |
| ----------------------- | ----------------------------------------------------------------------- | :-------------: |
| account_get | Профиль текущего аккаунта | |
| account_update | Изменить имя, часовой пояс или флаг отображения AI-ассистента | ✏️ |
| current_plan_get | Текущий тариф со всеми возможностями и лимитами | |
| plan_list | Публичный каталог тарифов | |
| holiday_mode_get | Статус режима отпуска | |
| holiday_mode_set | Включить режим отпуска до указанной даты или выключить | ✏️ |
| two_factor_info | Сведения о текущем втором факторе и доступных методах | |
| telegram_linked_list | Привязанные Telegram-аккаунты и чаты | |
| telegram_set_topic | Привязать топик в Telegram-группе для уведомлений или снять привязку | ✏️ |
| max_linked_list | Привязанные аккаунты и групповые чаты MAX | |
| max_get_link | Получить ссылки для привязки MAX — личного чата или групповой | |
| max_unlink | Отвязать MAX-аккаунт | ✏️ |
| max_set_2fa_account | Сменить MAX-аккаунт, на который приходят коды второго фактора | ✏️ |
| Инструмент | Что делает | Изменяет данные |
| -------------------------------- | ------------------------------------------------------------------------------------------------ | :-------------: |
| monitor_list | Список всех серверов аккаунта | |
| monitor_get | Полная карточка одного сервера | |
| monitor_create | Добавить новый сервер — тип проверки ping, http, keyword, tcp, dns или heartbeat | ✏️ |
| monitor_update | Частичное обновление настроек сервера | ✏️ |
| monitor_pause | Поставить проверки на паузу или возобновить (action: pause или unpause) | ✏️ |
| monitor_delete | Удалить сервер вместе со всей историей | ⚠️ |
| monitor_test_notify | Отправить тестовое уведомление по всем настроенным каналам | ✏️ |
| monitor_get_checks | Агрегированные результаты проверок для графиков uptime и latency | |
| monitor_get_heartbeat_events | События heartbeat для серверов с protocol: heartbeat | |
| monitor_get_dns_history | История изменений DNS-записей для серверов с protocol: dns | |
| Инструмент | Что делает | Изменяет данные |
| -------------------------------- | --------------------------------------------------------------------------------------------------------- | :-------------: |
| incident_list | Инциденты по всему аккаунту или по конкретному серверу | |
| incident_get | Подробная карточка с диагностикой — скриншот, replay, ping/nmap/mtr/traceroute, тайминги | |
| incident_get_events | Хронологическая лента событий — изменения статуса, отправленные уведомления, авто-восстановления | |
| incident_get_server | Связанный с инцидентом сервер одним запросом | |
| incident_generate_ai_summary | Сгенерировать или вернуть закэшированное AI-саммари инцидента | ✏️ |
| incident_rate_ai_summary | Поставить оценку AI-саммари — positive или negative | ✏️ |
| incident_get_report_pdf | Скачать PDF-отчёт по инциденту — возвращается в виде Base64 | |
| Инструмент | Что делает | Изменяет данные |
| -------------------------------- | --------------------------------------------------------------------------------------------------- | :-------------: |
| incident_comment_list | Все комментарии к инциденту | |
| incident_comment_create | Создать комментарий с текстом и вложениями — можно передать локальные пути файлов, сервер загрузит их сам | ✏️ |
| incident_comment_update | Отредактировать текст или список вложений | ✏️ |
| incident_comment_delete | Удалить комментарий и все его файлы | ⚠️ |
| incident_comment_upload_file | Загрузить локальный файл для использования как вложение | ✏️ |
| Инструмент | Что делает | Изменяет данные |
| -------------------------------- | ------------------------------------------------------------------------------------------------ | :-------------: |
| status_page_list | Все страницы статуса аккаунта | |
| status_page_get | Полная конфигурация одной страницы | |
| status_page_check_slug | Проверка, свободен ли slug | |
| status_page_check_domain | Проверка свободного кастомного домена и правильности CNAME-записи | |
| status_page_create | Создать страницу статуса | ✏️ |
| status_page_update | Частично обновить настройки | ✏️ |
| status_page_set_groups | Полностью заменить структуру групп и список серверов на странице | ✏️ |
| status_page_publish | Опубликовать (published) или скрыть (unpublished) страницу | ✏️ |
| status_page_delete | Удалить страницу | ⚠️ |
| status_page_subscriber_list | Подписчики страницы (емейл, статус, даты) и сводка с лимитом | |
| status_page_subscriber_export | Экспорт подписчиков в CSV | |
| status_page_subscriber_delete | Удалить подписчика | ⚠️ |
Инцидент-отчёты:
| Инструмент | Что делает | Изменяет данные |
| ------------------------------------------------ | --------------------------------------------------------------------------------------- | :-------------: |
| status_page_incident_report_list | Все опубликованные отчёты на странице | |
| status_page_incident_report_publish | Опубликовать новый отчёт со стартовым сообщением и статусами влияния на каждый сервер | ✏️ |
| status_page_incident_report_update | Изменить поля отчёта — заголовок, время начала | ✏️ |
| status_page_incident_report_update_add | Добавить сообщение в таймлайн с новыми статусами серверов | ✏️ |
| status_page_incident_report_update_edit | Отредактировать текст одного сообщения | ✏️ |
| status_page_incident_report_update_delete | Удалить сообщение из таймлайна. Первичное сообщение удалить нельзя | ⚠️ |
| status_page_incident_report_delete | Удалить отчёт целиком | ⚠️ |
Плановые работы:
| Инструмент | Что делает | Изменяет данные |
| ------------------------------------------------ | --------------------------------------------------------------------------------------- | :-------------: |
| status_page_maintenance_list | Все запланированные работы на странице | |
| status_page_maintenance_schedule | Запланировать работы — окно времени и список затронутых сервисов | ✏️ |
| status_page_maintenance_update | Изменить поля записи о работах | ✏️ |
| status_page_maintenance_update_add | Добавить сообщение в таймлайн | ✏️ |
| status_page_maintenance_update_edit | Отредактировать текст одного сообщения | ✏️ |
| status_page_maintenance_update_delete | Удалить сообщение из таймлайна. Первичное сообщение удалить нельзя | ⚠️ |
| status_page_maintenance_delete | Удалить запись о работах целиком | ⚠️ |
Вебхуки:
| Инструмент | Что делает | Изменяет данные |
| ------------------ | ------------------------------------------------------------------------------------------------ | :-------------: |
| webhook_list | Все вебхуки аккаунта | |
| webhook_create | Создать вебхук с подписками (service_alerts, ssl_alerts и т.д.) и опциональным секретом | ✏️ |
| webhook_update | Частично обновить вебхук | ✏️ |
| webhook_delete | Удалить вебхук | ⚠️ |
| webhook_test | Отправить тестовый запрос в вебхук | ✏️ |
Правила нотификаций — email, telegram, max для каждого типа подписки:
| Инструмент | Что делает | Изменяет данные |
| ------------------------- | ----------------------------------------------------------------------------------- | :-------------: |
| notification_rule_list | Текущая матрица правил | |
| notification_rule_set | Включить или выключить каналы для одного типа подписки | ✏️ |
Email-каналы:
| Инструмент | Что делает | Изменяет данные |
| -------------------------------- | ----------------------------------------------------------------------- | :-------------: |
| notification_email_list | Все email-адреса аккаунта со статусом подтверждения | |
| notification_email_add | Добавить адрес и отправить на него код подтверждения | ✏️ |
| notification_email_confirm | Подтвердить адрес кодом из письма | ✏️ |
| notification_email_resend | Повторно отправить код подтверждения | ✏️ |
| notification_email_remove | Удалить адрес из списка | ⚠️ |
Примеры запросов к ассистенту
Несколько фраз, которые ассистент сможет выполнить сразу после установки:
- «Покажи все серверы, которые сейчас не отвечают.»
- «Заведи сервер
nightly-exportс проверкой heartbeat, интервал 12 часов, grace 10 минут.» - «Поставь на паузу сервер
staging-dbдо конца дня.» - «Возьми последний инцидент на
api.example.comи сгенерируй по нему AI-саммари. Потом скачай PDF-отчёт с секциямиai_summaryиdiagnostics.» - «Опубликуй на странице статуса
prodотчёт об инциденте: заголовокРасследуем повышенную задержку API, затронутыapi-1иapi-2со статусомdegraded, стартовое сообщение про повышенный p95 на API-слое.» - «Запланируй плановые работы на странице статуса
prod: завтра с 02:00 до 04:00 МСК, описаниеОбновление БД, затронуты сервисыapiиworker.» - «Заведи вебхук
Slack prodнаhttps://hooks.slack.com/...с подпискамиservice_alertsиssl_alerts, подпиши его секретом….» - «Включи режим отпуска до понедельника, 9 утра.»
Что делать при ошибках
STATUSER_API_KEY is not set — переменная не передана в env MCP-клиента или клиент не был перезапущен после правки конфига. На macOS Claude Desktop иногда требуется полностью выйти через Cmd+Q.
Statuser API 401 — ключ невалиден или отозван. Перевыпустите его на statuser.cloud/my/account/api-keys.
Statuser API 403 — возможность недоступна на вашем тарифе (например, вебхуки, AI-саммари, кастомный домен) или достигнут лимит — серверов, страниц статуса, помесячная квота отчётов. Сверьтесь с инструментом current_plan_get.
Statuser API 429 (too_many_requests) — превышен лимит запросов. Сервер автоматически повторяет запрос один-два раза, дождавшись окончания окна по заголовку ratelimit-reset. Если ошибка повторяется — уменьшите частоту обращений.
Refusing to call ...: this tool performs a write/destructive operation — сработала защита от случайных изменений. Установите STATUSER_ALLOW_WRITE=1 в конфиге клиента или попросите ассистента добавить confirm: true к конкретному вызову.
STATUSER_TOOLSETS contains unknown toolsets — опечатка в названии группы. Допустимые значения перечислены в тексте ошибки и в разделе Группы инструментов.
Совместимость
| Компонент | Версия |
| ------------------- | ------------------------------------------------------------------- |
| Node.js | 18.17 и новее |
| MCP SDK | @modelcontextprotocol/sdk ≥ 1.0 |
| API Statuser | v1 (https://api.statuser.cloud) |
| Клиенты | Claude Desktop, Claude Code, Cursor, Windsurf, VS Code, Zed и др. |
Пакет публикуется как ESM. Если ваш MCP-клиент запускает Node более старой версии — обновите его минимум до 18.17.
Обратная связь
Ошибки и предложения — в issues.
Общие вопросы по API — в документации Statuser или на [email protected].
Лицензия
MIT — см. LICENSE.
