# MCP-сервер Statuser
[](https://www.npmjs.com/package/@statuser/mcp)
[](LICENSE)
[](https://modelcontextprotocol.io)
MCP-сервер для управления [Statuser](https://statuser.cloud) из ИИ-клиента — Claude Code, Cursor, VS Code, Windsurf, Claude Desktop и любого другого, который поддерживает Model Context Protocol.
С ним ассистент работает с вашим аккаунтом Statuser напрямую: смотрит состояние серверов, разбирает инциденты, публикует обновления на страницах статуса, настраивает уведомления. Всё это поверх [публичного API Statuser](https://statuser.cloud/api-reference) с авторизацией по API-ключу.
Подключить сервер можно двумя способами, инструменты в обоих одни и те же:
- **По адресу** `https://mcp.statuser.cloud` — ничего не нужно устанавливать: клиент ходит на наш сервер с вашим ключом в заголовке.
- **Локально** через `npx -y @statuser/mcp` — сервер работает на вашей машине, нужен Node.js.
## Что внутри
- **Мониторинг сервисов.** Список серверов, их статусы, графики проверок и heartbeat-событий, история изменений DNS, добавление и редактирование серверов, постановка на паузу и тестовые уведомления.
- **Инциденты.** Подробная карточка с диагностикой и таймингами по каждой локации, AI-саммари, PDF-отчёт, комментарии с вложениями.
- **Страницы статуса.** Создание и настройка, управление группами и серверами, публикация инцидент-отчётов и плановых работ с таймлайном обновлений.
- **Уведомления.** Правила нотификаций по типам подписок (email, Telegram, MAX и рабочие чаты — Mattermost, Rocket.Chat, Пачка, Discord, Slack), управление вебхуками, добавление и подтверждение email-каналов.
- **Аккаунт и проекты.** Профиль, тариф и фичи, режим отпуска, 2FA, привязки Telegram и MAX, история действий, проекты.
> [!NOTE]
> MCP-сервер обращается к API от имени аккаунта-владельца ключа. Все ограничения тарифа сохраняются — например, AI-саммари и кастомный домен будут доступны только если они включены в вашем плане. Сверяйтесь с инструментом `current_plan_get`.
## Содержание
- [Быстрый старт](#быстрый-старт)
- [Подключение по адресу](#подключение-по-адресу)
- [Локальный запуск через npx](#локальный-запуск-через-npx)
- [Настройки](#настройки)
- [Группы инструментов](#группы-инструментов)
- [Защита от случайных изменений](#защита-от-случайных-изменений)
- [Инструменты](#инструменты)
- [Примеры запросов к ассистенту](#примеры-запросов-к-ассистенту)
- [Что делать при ошибках](#что-делать-при-ошибках)
- [Совместимость](#совместимость)
- [Лицензия](#лицензия)
## Быстрый старт
1. Создайте API-ключ в [панели управления Statuser](https://statuser.cloud/my/account/api-keys).
2. Добавьте сервер в MCP-клиент. Проще всего — по адресу `https://mcp.statuser.cloud` с заголовком `Authorization: Bearer ваш_ключ`; готовые конфиги — [ниже](#подключение-по-адресу).
3. Перезапустите клиент. Инструменты появятся под именем `statuser`.
Если клиент подключает только локальные серверы — например, Claude Desktop, — используйте [локальный запуск через npx](#локальный-запуск-через-npx).
## Подключение по адресу
| Параметр | Значение |
| ----------- | ------------------------------------------ |
| Адрес | `https://mcp.statuser.cloud` |
| Транспорт | Streamable HTTP |
| Авторизация | заголовок `Authorization: Bearer ваш_ключ` |
### Claude Code
```bash
claude mcp add --transport http statuser https://mcp.statuser.cloud --header "Authorization: Bearer ваш_ключ"
```
С флагом `--scope user` сервер будет доступен во всех проектах, с `--scope project` — запишется в `.mcp.json` проекта. Файл с ключом не коммитьте в репозиторий.
### Cursor
В `~/.cursor/mcp.json` — для всех проектов, или в `.cursor/mcp.json` — для одного:
```json
{
"mcpServers": {
"statuser": {
"url": "https://mcp.statuser.cloud",
"headers": {
"Authorization": "Bearer ваш_ключ"
}
}
}
}
```
### VS Code
В `.vscode/mcp.json`. VS Code спросит ключ при первом подключении, в самом файле его не будет:
```json
{
"inputs": [
{
"type": "promptString",
"id": "statuser_api_key",
"description": "API-ключ Statuser (https://statuser.cloud/my/account/api-keys)",
"password": true
}
],
"servers": {
"statuser": {
"type": "http",
"url": "https://mcp.statuser.cloud",
"headers": {
"Authorization": "Bearer ${input:statuser_api_key}"
}
}
}
}
```
### Windsurf (Devin Desktop)
В `mcp_config.json` — в актуальных версиях это `~/.config/devin/mcp_config.json`, в Windows `%APPDATA%\devin\mcp_config.json`. У удалённого сервера поле называется `serverUrl`, а не `url`:
```json
{
"mcpServers": {
"statuser": {
"serverUrl": "https://mcp.statuser.cloud",
"headers": {
"Authorization": "Bearer ваш_ключ"
}
}
}
}
```
### Другие клиенты
Подойдёт любой клиент, который подключается к удалённому MCP-серверу по Streamable HTTP и умеет передавать заголовок: укажите адрес и заголовок из таблицы выше. Устаревший транспорт SSE сервер не поддерживает.
Сервер опубликован в [официальном реестре MCP](https://registry.modelcontextprotocol.io/v0/servers?search=statuser) как `io.github.statuser-cloud/mcp`: клиенты, которые берут серверы оттуда, найдут его сами и спросят только ключ.
### Что стоит знать
- **Клиенты, которые умеют только OAuth, пока не подключатся.** ChatGPT и пользовательские коннекторы Claude Desktop и claude.ai не передают собственный API-ключ в заголовке. Для Claude Desktop есть [локальный запуск](#claude-desktop).
- **Группы инструментов** выбираются параметром в адресе: `https://mcp.statuser.cloud/?toolsets=monitors,incidents`. Значения те же, что в [таблице групп](#группы-инструментов).
- **Изменения данных** подтверждаются в каждом вызове аргументом `confirm: true`: переменной `STATUSER_ALLOW_WRITE`, как при локальном запуске, здесь нет. Подробнее — в разделе [Защита от случайных изменений](#защита-от-случайных-изменений).
- **Локальные файлы недоступны:** сервер работает не на вашей машине. `incident_comment_upload_file` и поле `attached_local_files` у `incident_comment_create` есть только при локальном запуске; вложения по готовым ссылкам работают.
- **Лимиты** те же, что у API, но считаются на ключ, а не на адрес. После 30 запросов с неверным ключом за 10 минут адрес получает `429` до конца окна.
- **Ключ** уходит на наш сервер так же, как при обращении к API напрямую. MCP-сервер его не сохраняет и не пишет в логи; действия видны в [истории действий](https://statuser.cloud/my/account/activity) аккаунта от имени ключа.
## Локальный запуск через npx
Запускается через `npx -y @statuser/mcp` — глобально устанавливать ничего не нужно, Docker тоже не требуется. Нужен Node.js 18.17 или новее. Единственный обязательный параметр — переменная окружения `STATUSER_API_KEY`.
### В один клик
Для клиентов с поддержкой MCP-deeplink установка укладывается в нажатие кнопки. Клиент откроется, попросит API-ключ и сам сохранит конфиг.
[](https://vscode.dev/redirect?url=vscode:mcp/install?%7B%22name%22%3A%22statuser%22%2C%22command%22%3A%22npx%22%2C%22args%22%3A%5B%22-y%22%2C%22%40statuser/mcp%22%5D%2C%22inputs%22%3A%5B%7B%22id%22%3A%22statuser_api_key%22%2C%22type%22%3A%22promptString%22%2C%22password%22%3Atrue%2C%22description%22%3A%22API-%5Cu043a%5Cu043b%5Cu044e%5Cu0447%20Statuser%20%28https%3A//statuser.cloud/my/account/api-keys%29%22%7D%5D%2C%22env%22%3A%7B%22STATUSER_API_KEY%22%3A%22%24%7Binput%3Astatuser_api_key%7D%22%7D%7D)
[](https://insiders.vscode.dev/redirect?url=vscode-insiders:mcp/install?%7B%22name%22%3A%22statuser%22%2C%22command%22%3A%22npx%22%2C%22args%22%3A%5B%22-y%22%2C%22%40statuser/mcp%22%5D%2C%22inputs%22%3A%5B%7B%22id%22%3A%22statuser_api_key%22%2C%22type%22%3A%22promptString%22%2C%22password%22%3Atrue%2C%22description%22%3A%22API-%5Cu043a%5Cu043b%5Cu044e%5Cu0447%20Statuser%20%28https%3A//statuser.cloud/my/account/api-keys%29%22%7D%5D%2C%22env%22%3A%7B%22STATUSER_API_KEY%22%3A%22%24%7Binput%3Astatuser_api_key%7D%22%7D%7D)
[](https://cursor.com/install-mcp?name=statuser&config=eyJjb21tYW5kIjoibnB4IiwiYXJncyI6WyIteSIsIkBzdGF0dXNlci9tY3AiXSwiZW52Ijp7IlNUQVRVU0VSX0FQSV9LRVkiOiJBUElfS0VZX0hFUkUifX0)
Перед установкой создайте API-ключ в [панели управления Statuser](https://statuser.cloud/my/account/api-keys) — клиент попросит его в момент установки. Кнопка для Cursor подставит плейсхолдер `API_KEY_HERE`; замените его на свой ключ в форме, которую откроет Cursor.
Для Claude Desktop, Claude Code, Windsurf, Zed и других клиентов автоустановки пока нет — там нужен ручной конфиг ниже.
### Claude Desktop
Откройте `Настройки → Developer → Edit Config` и добавьте в `claude_desktop_config.json`:
```json
{
"mcpServers": {
"statuser": {
"command": "npx",
"args": ["-y", "@statuser/mcp"],
"env": {
"STATUSER_API_KEY": "ваш_ключ"
}
}
}
}
```
После сохранения полностью закройте Claude Desktop (`Cmd/Ctrl + Q`) и откройте заново — простого закрытия окна недостаточно.
### Claude Code
В корне проекта создайте `.mcp.json`:
```json
{
"mcpServers": {
"statuser": {
"command": "npx",
"args": ["-y", "@statuser/mcp"],
"env": {
"STATUSER_API_KEY": "ваш_ключ"
}
}
}
}
```
Или одной командой:
```bash
claude mcp add statuser --env STATUSER_API_KEY=ваш_ключ -- npx -y @statuser/mcp
```
### Cursor
Самый быстрый путь — кнопка [«Установить в Cursor»](#в-один-клик) выше. Если нужно вручную, `Настройки → MCP → Add new server`:
```json
{
"mcpServers": {
"statuser": {
"command": "npx",
"args": ["-y", "@statuser/mcp"],
"env": {
"STATUSER_API_KEY": "ваш_ключ"
}
}
}
}
```
### VS Code (GitHub Copilot Chat и другие MCP-расширения)
Самый быстрый путь — кнопка [«Установить в VS Code»](#в-один-клик) выше. Если нужно вручную, `Настройки → MCP servers → Add`:
```json
{
"statuser": {
"command": "npx",
"args": ["-y", "@statuser/mcp"],
"env": {
"STATUSER_API_KEY": "ваш_ключ"
}
}
}
```
Windsurf, Zed и другие MCP-клиенты
Любой клиент с поддержкой 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](https://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-окружением. |
## Группы инструментов
Больше 80 инструментов разбиты на **8** логических групп. По умолчанию включены все; оставить только нужные можно переменной `STATUSER_TOOLSETS` при локальном запуске или параметром `?toolsets=` в адресе.
Зачем это бывает удобно:
- меньше инструментов в контексте — ассистент точнее выбирает подходящий;
- меньше токенов в системном промпте клиента;
- если ключ имеет доступ ко всему API, а вам нужны только серверы — можно показать ассистенту только их.
| Группа | Что включает | Примеры инструментов |
| ----------------------- | --------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------- |
| `account` | Профиль, тариф, режим отпуска, 2FA, привязки Telegram и MAX, история действий | `account_get`, `current_plan_get`, `activity_log_list`, `holiday_mode_set`, `telegram_linked_list`, `max_get_link` |
| `projects` | Проекты — области внутри аккаунта: свои серверы, страницы статуса и правила уведомлений | `project_list`, `project_create`, `project_delete`, `project_channel_list`, `project_channel_set` |
| `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_delete` |
| `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` |
Примеры значения:
```jsonc
// только серверы и инциденты
"env": { "STATUSER_API_KEY": "...", "STATUSER_TOOLSETS": "monitors,incidents" }
// явно все группы — то же самое, что не задавать переменную
"env": { "STATUSER_API_KEY": "...", "STATUSER_TOOLSETS": "all" }
```
По адресу — то же самое параметром: `https://mcp.statuser.cloud/?toolsets=monitors,incidents`.
Если в списке указана неизвестная группа, сервер не запустится и подскажет допустимые значения.
## Защита от случайных изменений
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, но один-два изменения всё-таки нужны.
При подключении по адресу работает только второй способ: переменной окружения у удалённого сервера нет, каждое изменение подтверждается `confirm: true`.
Под защитой находятся в том числе:
- удаление серверов, страниц статуса, комментариев, отчётов и плановых работ;
- удаление вебхуков и email-каналов;
- постановка серверов на паузу и снятие;
- публикация и скрытие страниц статуса;
- включение режима отпуска;
- отправка тестовых уведомлений.
Инструменты дополнительно помечаются MCP-аннотациями `destructiveHint` и `readOnlyHint`. Клиенты, которые их читают, добавляют поверх нашего собственный экран подтверждения.
## Инструменты
Полный список с описанием параметров MCP-клиент покажет автоматически при подключении. Ниже — обзор по группам. Условные обозначения: ✏️ — инструмент изменяет данные, ⚠️ — действие необратимо.
account — 13 инструментов
| Инструмент | Что делает | Изменяет данные |
| ----------------------- | ----------------------------------------------------------------------- | :-------------: |
| `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-аккаунт, на который приходят коды второго фактора | ✏️ |
projects — 7 инструментов
| Инструмент | Что делает | Изменяет данные |
| ----------------------- | ----------------------------------------------------------------------- | :-------------: |
| `project_list` | Проекты аккаунта — с них начинается работа с областями | |
| `project_create` | Завести проект; лимит зависит от тарифа | ✏️ |
| `project_update` | Переименовать проект | ✏️ |
| `project_delete` | Удалить проект, перенеся его содержимое в другой | ✏️ ⚠️ |
| `project_reorder` | Задать порядок проектов в панели | ✏️ |
| `project_channel_list` | Каналы аккаунта и их положение в этом проекте | |
| `project_channel_set` | Включить или выключить канал в проекте | ✏️ |
Проект — область внутри аккаунта: ему принадлежат серверы, страницы статуса и правила уведомлений о мониторинге. Каналы связи, тариф и API-ключи остаются общими. Вызовы без `project_id` читают весь аккаунт, а создают в самом старом проекте — так работали интеграции до появления проектов, и это поведение сохранено.
monitors — 12 инструментов
| Инструмент | Что делает | Изменяет данные |
| -------------------------------- | ------------------------------------------------------------------------------------------------ | :-------------: |
| `monitor_list` | Список всех серверов аккаунта | |
| `monitor_get` | Полная карточка одного сервера | |
| `monitor_create` | Добавить новый сервер — тип проверки `ping`, `http`, `keyword`, `tcp`, `dns`, `heartbeat`, `llm` или `scenario` | ✏️ |
| `monitor_update` | Частичное обновление настроек сервера | ✏️ |
| `monitor_pause` | Поставить проверки на паузу или возобновить (`action: pause` или `unpause`) | ✏️ |
| `monitor_delete` | Удалить сервер вместе со всей историей | ⚠️ |
| `monitor_test_notify` | Отправить тестовое уведомление по всем настроенным каналам | ✏️ |
| `monitor_run_scenario` | Проверить сценарий сейчас, вне расписания, — с теми же последствиями, что плановый прогон | ✏️ |
| `monitor_get_scenario_run_latest` | Идёт ли ручной прогон сценария и чем закончился последний | |
| `monitor_get_checks` | Агрегированные результаты проверок для графиков uptime и latency | |
| `monitor_get_heartbeat_events` | События heartbeat для серверов с `protocol: heartbeat` | |
| `monitor_get_dns_history` | История изменений DNS-записей для серверов с `protocol: dns` | |
incidents — 9 инструментов
| Инструмент | Что делает | Изменяет данные |
| -------------------------------- | --------------------------------------------------------------------------------------------------------- | :-------------: |
| `incident_list` | Инциденты по всему аккаунту или по конкретному серверу | |
| `incident_get` | Подробная карточка с диагностикой — скриншот, replay, `ping`/`nmap`/`mtr`/`traceroute`, тайминги | |
| `incident_get_events` | Хронологическая лента событий — изменения статуса, уведомления, комментарии, скриншот и сетевая диагностика | |
| `incident_get_server` | Связанный с инцидентом сервер одним запросом | |
| `incident_get_scenario_details` | Диагностика инцидента сценария — упавший тест, ошибка Playwright, консоль, есть ли скриншот, видео и трейс | |
| `incident_generate_ai_summary` | Сгенерировать или вернуть закэшированное AI-саммари инцидента | ✏️ |
| `incident_rate_ai_summary` | Поставить оценку AI-саммари — `positive` или `negative` | ✏️ |
| `incident_get_report_pdf` | Скачать PDF-отчёт по инциденту — возвращается в виде Base64 | |
| `incident_delete` | Безвозвратно удалить закрытый инцидент со всей диагностикой — аптайм пересчитается вверх | ✏️ |
incident-comments — 5 инструментов
| Инструмент | Что делает | Изменяет данные |
| -------------------------------- | --------------------------------------------------------------------------------------------------- | :-------------: |
| `incident_comment_list` | Все комментарии к инциденту | |
| `incident_comment_create` | Создать комментарий с текстом и вложениями — при локальном запуске можно передать пути к файлам, сервер загрузит их сам | ✏️ |
| `incident_comment_update` | Отредактировать текст или список вложений | ✏️ |
| `incident_comment_delete` | Удалить комментарий и все его файлы | ⚠️ |
| `incident_comment_upload_file` | Загрузить локальный файл для использования как вложение — только при локальном запуске | ✏️ |
status-pages — 12 инструментов
| Инструмент | Что делает | Изменяет данные |
| -------------------------------- | ------------------------------------------------------------------------------------------------ | :-------------: |
| `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-reports — 14 инструментов
Инцидент-отчёты:
| Инструмент | Что делает | Изменяет данные |
| ------------------------------------------------ | --------------------------------------------------------------------------------------- | :-------------: |
| `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` | Удалить запись о работах целиком | ⚠️ |
notifications — 11 инструментов
Вебхуки:
| Инструмент | Что делает | Изменяет данные |
| ------------------ | ------------------------------------------------------------------------------------------------ | :-------------: |
| `webhook_list` | Все вебхуки аккаунта | |
| `webhook_create` | Создать вебхук с подписками (`service_alerts`, `ssl_alerts` и т.д.) и опциональным секретом | ✏️ |
| `webhook_update` | Частично обновить вебхук | ✏️ |
| `webhook_delete` | Удалить вебхук | ⚠️ |
| `webhook_test` | Отправить тестовый запрос в вебхук | ✏️ |
Правила нотификаций — `email`, `telegram`, `max` для каждого типа подписки:
| Инструмент | Что делает | Изменяет данные |
| ------------------------- | ----------------------------------------------------------------------------------- | :-------------: |
| `notification_rule_list` | Текущая матрица правил; `project_id` выбирает проект для типов о мониторинге | |
| `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](https://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`** — сработала [защита от случайных изменений](#защита-от-случайных-изменений). Попросите ассистента добавить `confirm: true` к конкретному вызову; при локальном запуске можно вместо этого установить `STATUSER_ALLOW_WRITE=1` в конфиге клиента.
**`Missing or malformed API key`** — при подключении по адресу клиент не передал заголовок `Authorization: Bearer ваш_ключ` или передал его в другом виде. Проверьте, что слово `Bearer` стоит перед ключом через пробел.
**`The API key is invalid, expired or revoked`** — клиент подключается по адресу, но ключ отозван или истёк. Перевыпустите его на [statuser.cloud/my/account/api-keys](https://statuser.cloud/my/account/api-keys).
**`Too many requests with an invalid API key from this address`** — с вашего адреса пришло больше 30 запросов с неверным ключом за 10 минут. Исправьте ключ и подождите столько секунд, сколько указано в заголовке `Retry-After`.
**Клиент не подключается по адресу и получает `405`** — он пытается открыть устаревший SSE-поток. Выберите в настройках клиента транспорт Streamable HTTP (часто он называется просто HTTP).
**`STATUSER_TOOLSETS contains unknown toolsets`** — опечатка в названии группы. Допустимые значения перечислены в тексте ошибки и в разделе [Группы инструментов](#группы-инструментов).
## Совместимость
| Компонент | Версия |
| --------------------- | ------------------------------------------------------------------- |
| Подключение по адресу | без установки; клиент с Streamable HTTP и заголовками |
| Node.js | **18.17** и новее — только для локального запуска |
| MCP SDK | `@modelcontextprotocol/sdk` ≥ **1.0** |
| API Statuser | `v1` (`https://api.statuser.cloud`) |
| Клиенты | Claude Code, Cursor, VS Code, Windsurf — по адресу и локально; Claude Desktop, Zed — локально |
Пакет публикуется как ESM. Если ваш MCP-клиент запускает Node более старой версии — обновите его минимум до **18.17** или подключитесь по адресу.
## Обратная связь
Ошибки и предложения — в [issues](https://github.com/statuser-cloud/mcp/issues). Об уязвимостях сообщайте приватно — см. [SECURITY.md](SECURITY.md).
Общие вопросы по API — в [документации Statuser](https://statuser.cloud/api-reference) или на [info@statuser.cloud](mailto:info@statuser.cloud).
## Лицензия
MIT — см. [LICENSE](LICENSE).