npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

@statuser/mcp

v0.1.6

Published

MCP server for Statuser.cloud — monitor servers, manage incidents and status pages from your AI client

Readme

MCP-сервер Statuser

npm version License: MIT MCP

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.

Содержание

Быстрый старт

  1. Войдите в личный кабинет Statuser и создайте API-ключ.
  2. Добавьте сервер в конфиг вашего MCP-клиента — примеры ниже.
  3. Перезапустите клиент. Инструменты появятся под именем statuser.

Запускается через npx -y @statuser/mcp — глобально устанавливать ничего не нужно, Docker тоже не требуется. Единственный обязательный параметр — переменная окружения STATUSER_API_KEY.

Установка

В один клик

Для клиентов с поддержкой MCP-deeplink установка укладывается в нажатие кнопки. Клиент откроется, попросит API-ключ и сам сохранит конфиг.

Установить в VS Code Установить в VS Code Insiders Установить в Cursor

Перед установкой создайте 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/mcp

Cursor

Самый быстрый путь — кнопка «Установить в 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: npx
  • args: ["-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 и подобные) работают всегда без подтверждения.

При попытке вызвать заблокированный инструмент сервер возвращает осмысленную ошибку с двумя способами разрешить вызов:

  1. Разрешить навсегда в конфиге клиента: "STATUSER_ALLOW_WRITE": "1" в блоке env. Подходит, если вы доверяете ассистенту и заранее очертили его область работы через STATUSER_TOOLSETS.
  2. Разрешить разово в самом запросе: передайте ассистенту явное указание добавить аргумент 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/sdk1.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.