Skip to main content
Glama

remnawave-mcp

Автономный MCP-сервер (Model Context Protocol) для панели Remnawave. Один инструмент — на каждую операцию method + path из OpenAPI-спеки панели (217 операций), плюс несколько служебных инструментов. Сервер сгенерирован из спеки, но не зависит от неё в рантайме — сгенерированный файл src/generated/tools.ts закоммитен в репозиторий.

Пакет самодостаточен: копия спеки лежит в spec/remnawave_openapi.json, внешних рантайм-зависимостей кроме @modelcontextprotocol/sdk и zod нет.

Что это

  • Полное покрытие API Remnawave 3.4.3: пользователи, ноды, хосты, подписки, инбаунды, шаблоны конфигов, bulk-операции и т.д. — 217 инструментов.

  • Слой безопасности в рантайме: режимы ro/rw, deny-листы, подтверждение мутирующих операций (confirm), dry-run, лимит на bulk-операции, редактирование секретов в ответах, аудит-журнал вызовов.

  • Служебные инструменты: api_search, api_describe, api_status, api_audit_tail, system_metrics.

  • Транспорт: stdio (по умолчанию) и опционально Streamable HTTP.

Related MCP server: mcp-remnawave

Установка

npm ci
npm run build

npm ci ставит зависимости строго по package-lock.json. Для разработки: npm test, npm run typecheck.

Конфигурация

Все настройки — через переменные окружения. Скопируйте .env.example в .env и заполните нужные поля (для локального запуска сервера через npm start; .env в .gitignore, секреты никуда не коммитятся).

Ключевые переменные (полный список с комментариями — в .env.example):

Переменная

Назначение

По умолчанию

REMNA_BASE_URL

URL панели, без завершающего слэша

— (обязателен)

REMNA_API_TOKEN / REMNA_API_TOKEN_FILE

Bearer JWT-токен панели (или путь к файлу с токеном)

—

REMNA_METRICS_USER / REMNA_METRICS_PASS

Basic-auth для /metrics (схема Prometheus в спеке)

—

MCP_MODE

ro — только GET, rw — всё, кроме deny-листа

ro

MCP_DENY

Доп. правила METHOD /prefix или /prefix, через запятую

пусто

MCP_DENY_DEFAULTS

Включить встроенный deny-лист Remnawave

1

MCP_CONFIRM

Требовать confirm:true для не-GET

1 в rw, 0 в ro (не имеет значения — там всё и так denied)

MCP_DRY_RUN

Не-GET никогда не отправляются, всегда превью

0

MCP_AUDIT_LOG

Путь к JSONL-журналу аудита

./.audit/remnawave-mcp.jsonl

MCP_TIMEOUT_MS

Таймаут HTTP-запроса к панели

30000

MCP_MAX_RESPONSE_BYTES

Лимит размера ответа инструмента

200000

MCP_TOOL_FILTER

Regex по имени инструмента — публикует подмножество

пусто (все)

MCP_REDACT

Редактирование секретов в ответах

1

MCP_REDACT_SUBSCRIPTION

Доп. редактирование полей подписки (trojanPassword и т.д.)

0

MCP_MAX_BULK_ITEMS

Лимит длины массивов uuids/ids в bulk-запросах

100

MCP_HTTP_PORT / MCP_HTTP_TOKEN

Опциональный HTTP-транспорт (см. ниже)

—

Режимы безопасности

ro (по умолчанию)

Разрешены только GET-запросы. Любая попытка вызвать не-GET инструмент возвращает отказ (isError: true, denied: true).

rw

Разрешены все операции, кроме тех, что попадают в deny-лист. Для не-GET операций по умолчанию (MCP_CONFIRM=1) первый вызов без confirm: true возвращает превью запроса (метод, URL, тело) и ничего не отправляет. Повторный вызов с confirm: true выполняет запрос.

// 1) без confirm — превью
{ "name": "users_create_user", "arguments": { "body": { "username": "bob", "expireAt": "2030-01-01T00:00:00Z" } } }
// -> { "preview": true, "method": "POST", "url": ".../api/users", "body": {...} }

// 2) с confirm — выполняется
{ "name": "users_create_user", "arguments": { "body": { "username": "bob", "expireAt": "2030-01-01T00:00:00Z" }, "confirm": true } }
// -> { "status": 201, "ok": true, "data": {...}, "truncated": false }

Deny-лист

Действует независимо от режима. Встроенный дефолт для Remnawave (MCP_DENY_DEFAULTS=1):

  • /api/keygen

  • POST /api/tokens

  • /api/auth

  • /api/passkeys

  • POST /api/nodes/actions/restart-all

  • POST /api/users/bulk/delete-by-status

Эти операции выдают постоянные админ-креды, генерируют ключи или уничтожают пользователей — они запрещены, даже если модель попросит confirm: true. Отключить дефолт: MCP_DENY_DEFAULTS=0. Добавить свои правила: MCP_DENY="DELETE /api/users,POST /api/hosts/bulk".

Dry-run

MCP_DRY_RUN=1 — ни одна не-GET операция не отправляется на панель, всегда возвращается превью, даже с confirm: true. Полезно для проверки, что делает модель, без реального изменения данных.

Bulk-лимит

Для bulk-инструментов (/api/users/bulk/*, /api/hosts/bulk/*) массивы uuids/ids в теле не могут превышать MCP_MAX_BULK_ITEMS (по умолчанию 100) — при превышении вызов отклоняется без обращения к панели.

Редактирование секретов

По умолчанию (MCP_REDACT=1) в ответах инструментов заменяются на <redacted> ключи, подходящие под /(password|passwd|secret|token|api_key|apikey|private_key|privateKey|authorization|cookie)/i.

Поля, специфичные для подписок Remnawave (trojanPassword, vlessUuid, ssPassword, subscriptionUrl, links, happ.cryptoLink) — это рабочие данные, нужные клиентам, поэтому по умолчанию не редактируются, даже если формально подпадают под базовый паттерн (например trojanPassword). Включить их редактирование: MCP_REDACT_SUBSCRIPTION=1. Полностью выключить редактирование: MCP_REDACT=0.

Заголовок Authorization никогда не попадает ни в ответы, ни в аудит-журнал.

Подключение к Claude Code

При старте сервер сам читает .env из корня своего каталога (уже заданные переменные окружения имеют приоритет). Поэтому проще всего заполнить .env и подключать без --env, чтобы секреты не попали в конфиг MCP-клиента:

claude mcp add remnawave -- node /абсолютный/путь/до/remnawave-mcp/dist/index.js
claude mcp add remnawave \
  --env REMNA_BASE_URL=https://panel.example.com \
  --env REMNA_API_TOKEN=xxxxx \
  --env MCP_MODE=ro \
  -- node /абсолютный/путь/до/remnawave-mcp/dist/index.js

Для rw-режима добавьте --env MCP_MODE=rw (и, по вкусу, MCP_CONFIRM, MCP_DENY). Не забудьте npm run build перед подключением — сервер запускается из dist/index.js.

Подключение через generic JSON-конфиг (любой MCP-клиент)

{
  "mcpServers": {
    "remnawave": {
      "command": "node",
      "args": ["/абсолютный/путь/до/remnawave-mcp/dist/index.js"],
      "env": {
        "REMNA_BASE_URL": "https://panel.example.com",
        "REMNA_API_TOKEN": "xxxxx",
        "MCP_MODE": "ro"
      }
    }
  }
}

Опциональный HTTP-транспорт

npm run start:http поднимает Streamable HTTP на 127.0.0.1:$MCP_HTTP_PORT. Обязателен MCP_HTTP_TOKEN — без него сервер откажется стартовать. Каждый HTTP-запрос должен нести заголовок Authorization: Bearer <MCP_HTTP_TOKEN> (это отдельный токен транспорта, не токен панели).

Имена инструментов

snake_case, ASCII, ≤ 60 символов, уникальные. Правило: из operationId вида XxxController_yyyZzz отрезается Controller, обе части переводятся в snake_case и склеиваются через _. Например: UsersController_getUsers → users_get_users, SystemController_getRemnawaveHealth → system_get_remnawave_health. Слишком длинные имена (после конвертации > 60 символов) обрезаются с добавлением короткого хэша для сохранения уникальности.

Примеры вызова часто используемых инструментов

Список пользователей (users_get_users, GET /api/users, пагинация через start/size):

{ "name": "users_get_users", "arguments": { "size": 20, "start": 0 } }

Пользователь по ID (users_get_user_by_id, GET /api/users/{userId}):

{ "name": "users_get_user_by_id", "arguments": { "userId": 42 } }

Список нод (nodes_get_nodes, GET /api/nodes):

{ "name": "nodes_get_nodes", "arguments": {} }

Здоровье панели (system_get_remnawave_health, GET /api/system/health; это же дёргает служебный api_status):

{ "name": "system_get_remnawave_health", "arguments": {} }

Список хостов (hosts_get_hosts, GET /api/hosts):

{ "name": "hosts_get_hosts", "arguments": {} }

Найти нужный инструмент, если имя не угадывается:

{ "name": "api_search", "arguments": { "query": "subscription" } }

Посмотреть полную входную схему конкретного инструмента:

{ "name": "api_describe", "arguments": { "tool": "users_create_user" } }

Как перегенерировать при обновлении панели

  1. Скопируйте актуальный openapi.json из контейнера панели, например:

    docker cp <remnawave-container>:/opt/app/openapi.json ./new_openapi.json
  2. Замените файл спеки в пакете:

    cp new_openapi.json spec/remnawave_openapi.json
  3. Перегенерируйте инструменты и пересоберите:

    npm run generate
    npm run build
  4. Прогоните тесты (число инструментов в тестах жёстко зашито — 217; если панель добавила/убрала операции, обновите ожидаемое число в test/generator.test.ts):

    npm test
  5. Проверьте git diff src/generated/tools.ts — новые/изменённые инструменты, изменившиеся deny-правила (если появились новые опасные операции — добавьте их в DEFAULT_DENY_RULES в src/config.ts и в MCP_DENY в .env.example).

Разработка

  • npm run typecheck — проверка типов без сборки.

  • npm test — vitest, все сетевые вызовы замоканы (vi.stubGlobal("fetch", ...)).

  • npm run smoke — живая проверка api_status + один GET к реальной панели; выполняется только если в корне пакета есть заполненный .env, иначе печатает skipped и завершается с кодом 0. Использует только GET.

Примечания к реализации

  • /metrics (Basic-auth, схема Prometheus) отсутствует как отдельный path в OpenAPI-спеке панели, поэтому не генерируется автоматически. Вместо этого добавлен вручную написанный служебный инструмент system_metrics, который использует REMNA_METRICS_USER/REMNA_METRICS_PASS и Basic-auth (а не Bearer-токен панели). Без этих переменных возвращает понятный отказ, не пытаясь ничего вызвать.

  • Ответы панели, обёрнутые в { "response": ... }, возвращаются как есть — сервер не разворачивает эту обёртку.

Available Tools

222 tools
api_audit_tailC

Последние N записей журнала аудита вызовов.

Inputs: n.

api_describeC

Полная схема входа и заметки по конкретному инструменту (по имени).

Inputs: tool (required).

api_statusB

Статус сервера: режим (ro/rw), базовый URL (хост, без секретов), число опубликованных инструментов, версия спеки, доступность панели (GET /api/system/health, только код ответа).

Inputs: no named parameters.

api_tokens_create_api_tokenB

POST /api/tokens Create a new API token This endpoint is forbidden to use via "API-key". It can only be used with an admin JWT-token. Tags: API Tokens Controller

Inputs: body (required), confirm.

api_tokens_delete_api_tokenB

DELETE /api/tokens/{uuid} Delete API token This endpoint is forbidden to use via "API-key". It can be used only with an admin JWT-token. Tags: API Tokens Controller

Inputs: uuid (required), confirm.

api_tokens_get_api_tokensA

GET /api/tokens Get all API tokens This endpoint is forbidden to use via "API-key". It can only be used with admin JWT-token. Tags: API Tokens Controller

Inputs: no named parameters.

api_tokens_get_scopesA

GET /api/tokens/scopes Get available API token scopes Returns the catalog of scopes that can be granted to an API token, grouped by resource. Forbidden via "API-key", admin JWT only. Tags: API Tokens Controller

Inputs: no named parameters.

auth_get_statusC

GET /api/auth/status Get the status of the authentication Tags: Auth Controller

Inputs: no named parameters.

auth_loginC

POST /api/auth/login Login as superadmin Tags: Auth Controller

Inputs: body (required), confirm.

auth_oauth2_authorizeC

POST /api/auth/oauth2/authorize Initiate OAuth2 authorization Tags: Auth Controller

Inputs: body (required), confirm.

auth_oauth2_callbackC

POST /api/auth/oauth2/callback Callback from OAuth2 Tags: Auth Controller

Inputs: body (required), confirm.

auth_passkey_authentication_optionsC

GET /api/auth/passkey/authentication/options Get the authentication options for passkey Tags: Auth Controller

Inputs: no named parameters.

auth_passkey_authentication_verifyC

POST /api/auth/passkey/authentication/verify Verify the authentication for passkey Tags: Auth Controller

Inputs: body (required), confirm.

auth_registerC

POST /api/auth/register Register as superadmin Tags: Auth Controller

Inputs: body (required), confirm.

bandwidth_stats_nodes_get_node_usageC

POST /api/bandwidth-stats/nodes/usage Get users exceeding a traffic threshold on the given nodes for a period Returns users whose total usage over the period on the given nodes is >= minTotalBytes. Underlying usage data is flushed to the database roughly every 2 minutes. Tags: Bandwidth Stats Controller Пагинация через query-параметры: start.

Inputs: end (required), body (required), start (required), confirm, +1 more.

bandwidth_stats_nodes_get_stats_nodes_users_usageC

POST /api/bandwidth-stats/nodes/users Get Nodes Users Usage by Nodes UUIDs Tags: Bandwidth Stats Controller Пагинация через query-параметры: start.

Inputs: end (required), body (required), start (required), confirm, +1 more.

bandwidth_stats_nodes_get_stats_node_users_usageC

GET /api/bandwidth-stats/nodes/{uuid}/users Get Node Users Usage by Node UUID Tags: Bandwidth Stats Controller Пагинация через query-параметры: start.

Inputs: end (required), uuid (required), start (required), topUsersLimit.

bandwidth_stats_users_get_stats_nodes_usageC

GET /api/bandwidth-stats/users/{userId} Get User Usage by Range Tags: Bandwidth Stats Controller Пагинация через query-параметры: start.

Inputs: end (required), start (required), userId (required), topNodesLimit.

config_profile_create_config_profileC

POST /api/config-profiles Create config profile Tags: Config Profiles Controller

Inputs: body (required), confirm.

config_profile_delete_config_profile_by_uuidC

DELETE /api/config-profiles/{uuid} Delete config profile Tags: Config Profiles Controller

Inputs: uuid (required), confirm.

config_profile_get_all_inboundsB

GET /api/config-profiles/inbounds Get all inbounds from all config profiles Tags: Config Profiles Controller

Inputs: no named parameters.

config_profile_get_computed_config_profile_by_uuidC

GET /api/config-profiles/{uuid}/computed-config Get computed config profile by uuid Tags: Config Profiles Controller

Inputs: uuid (required).

config_profile_get_config_profile_by_uuidC

GET /api/config-profiles/{uuid} Get config profile by uuid Tags: Config Profiles Controller

Inputs: uuid (required).

config_profile_get_config_profilesC

GET /api/config-profiles Get config profiles Tags: Config Profiles Controller

Inputs: no named parameters.

config_profile_get_inbounds_by_profile_uuidC

GET /api/config-profiles/{uuid}/inbounds Get inbounds by profile uuid Tags: Config Profiles Controller

Inputs: uuid (required).

config_profile_get_tagsB

GET /api/config-profiles/tags Get tags of Config Profiles Tags: Config Profiles Controller

Inputs: no named parameters.

config_profile_reorder_config_profilesC

POST /api/config-profiles/actions/reorder Reorder config profiles Tags: Config Profiles Controller

Inputs: body (required), confirm.

config_profile_set_tagsC

PATCH /api/config-profiles/tags Set tags of Config Profile Tags: Config Profiles Controller

Inputs: body (required), confirm.

config_profile_update_config_profileC

PATCH /api/config-profiles Update Core Config in specific config profile Tags: Config Profiles Controller

Inputs: body (required), confirm.

connections_connections_by_nodeC

POST /api/connections/by-node/{nodeUuid} Request Connections for Node Tags: Connections Controller

Inputs: nodeUuid (required), confirm.

connections_connections_by_node_resultC

GET /api/connections/by-node/{jobId} Get Connections for Node by Job ID Tags: Connections Controller

Inputs: jobId (required).

connections_connections_by_userD

POST /api/connections/by-user/{userId} Request Connections for User Tags: Connections Controller

Inputs: userId (required), confirm.

connections_connections_by_user_resultC

GET /api/connections/by-user/{jobId} Get Connections for User by Job ID Tags: Connections Controller

Inputs: jobId (required).

connections_drop_connectionsC

POST /api/connections/drop Drop Connections for Users or IPs Tags: Connections Controller

Inputs: body (required), confirm.

connections_geocheck_by_nodeA

POST /api/connections/geocheck/{nodeUuid} Request Geocheck for Node Queues a geocheck on the node and returns a job ID. Poll "Get Geocheck for Node by Job ID" for the result, the node may take up to a minute to answer. Tags: Connections Controller

Inputs: body (required), nodeUuid (required), confirm.

connections_geocheck_by_node_resultC

GET /api/connections/geocheck/{jobId} Get Geocheck for Node by Job ID Tags: Connections Controller

Inputs: jobId (required).

external_squad_add_users_to_external_squadC

POST /api/external-squads/{uuid}/bulk-actions/add-users Add all users to external squad Tags: External Squads Controller

Inputs: uuid (required), confirm.

external_squad_create_external_squadC

POST /api/external-squads Create external squad Tags: External Squads Controller

Inputs: body (required), confirm.

external_squad_delete_external_squadC

DELETE /api/external-squads/{uuid} Delete external squad Tags: External Squads Controller

Inputs: uuid (required), confirm.

external_squad_get_external_squad_by_uuidC

GET /api/external-squads/{uuid} Get external squad by uuid Tags: External Squads Controller

Inputs: uuid (required).

external_squad_get_external_squadsC

GET /api/external-squads Get all external squads Tags: External Squads Controller

Inputs: no named parameters.

external_squad_get_tagsC

GET /api/external-squads/tags Get tags of External Squads Tags: External Squads Controller

Inputs: no named parameters.

external_squad_remove_users_from_external_squadC

DELETE /api/external-squads/{uuid}/bulk-actions/remove-users Delete users from external squad Tags: External Squads Controller

Inputs: uuid (required), confirm.

external_squad_reorder_external_squadsC

POST /api/external-squads/actions/reorder Reorder external squads Tags: External Squads Controller

Inputs: body (required), confirm.

external_squad_set_tagsC

PATCH /api/external-squads/tags Set tags of External Squad Tags: External Squads Controller

Inputs: body (required), confirm.

external_squad_update_external_squadC

PATCH /api/external-squads Update external squad Tags: External Squads Controller

Inputs: body (required), confirm.

hosts_bulk_actions_delete_hostsC

POST /api/hosts/bulk/delete Delete hosts by UUIDs Tags: Hosts Bulk Actions Controller

Inputs: body (required), confirm.

hosts_bulk_actions_disable_hostsC

POST /api/hosts/bulk/disable Disable hosts by UUIDs Tags: Hosts Bulk Actions Controller

Inputs: body (required), confirm.

hosts_bulk_actions_enable_hostsC

POST /api/hosts/bulk/enable Enable hosts by UUIDs Tags: Hosts Bulk Actions Controller

Inputs: body (required), confirm.

hosts_bulk_actions_set_port_to_hostsC

PATCH /api/hosts/bulk/update Update many hosts Tags: Hosts Bulk Actions Controller

Inputs: body (required), confirm.

hosts_create_hostC

POST /api/hosts Create a new host Tags: Hosts Controller

Inputs: body (required), confirm.

hosts_delete_hostC

DELETE /api/hosts/{uuid} Delete a host by UUID Tags: Hosts Controller

Inputs: uuid (required), confirm.

hosts_get_hostsC

GET /api/hosts Get hosts Tags: Hosts Controller

Inputs: no named parameters.

hosts_get_hosts_tagsB

GET /api/hosts/tags Get tags of hosts Tags: Hosts Controller

Inputs: no named parameters.

hosts_get_one_hostC

GET /api/hosts/{uuid} Get a host by UUID Tags: Hosts Controller

Inputs: uuid (required).

hosts_reorder_hostsC

POST /api/hosts/actions/reorder Reorder hosts Tags: Hosts Controller

Inputs: body (required), confirm.

hosts_update_hostC

PATCH /api/hosts Update a host Tags: Hosts Controller

Inputs: body (required), confirm.

hwid_user_devices_create_user_hwid_deviceC

POST /api/hwid/devices Create a user HWID device Tags: HWID User Devices Controller

Inputs: body (required), confirm.

hwid_user_devices_delete_all_user_hwid_devicesC

POST /api/hwid/devices/delete-all Delete all user HWID devices Tags: HWID User Devices Controller

Inputs: body (required), confirm.

hwid_user_devices_delete_user_hwid_deviceC

POST /api/hwid/devices/delete Delete a user HWID device Tags: HWID User Devices Controller

Inputs: body (required), confirm.

hwid_user_devices_get_all_usersC

GET /api/hwid/devices Get HWID devices Please note that the filters here are primarily intended for use by the frontend and rely on expensive operators such as LIKE under the hood. Misusing these filters may negatively impact the performance of your database. Tags: HWID User Devices Controller Пагинация через query-параметры: start, size.

Inputs: size, start, filters, sorting, +2 more.

hwid_user_devices_get_hwid_devices_statsC

GET /api/hwid/devices/stats Get HWID devices stats Tags: HWID User Devices Controller

Inputs: no named parameters.

hwid_user_devices_get_top_users_by_hwid_devicesC

GET /api/hwid/devices/top-users Get top users by HWID devices Tags: HWID User Devices Controller Пагинация через query-параметры: start, size.

Inputs: size, start.

hwid_user_devices_get_user_hwid_devicesC

GET /api/hwid/devices/{userId} Get user HWID devices Tags: HWID User Devices Controller

Inputs: userId (required).

infra_billing_create_infra_billing_nodeC

POST /api/infra-billing/nodes Create infra billing node Tags: Infra Billing Controller

Inputs: body (required), confirm.

infra_billing_create_infra_billing_recordC

POST /api/infra-billing/history Create infra billing history Tags: Infra Billing Controller

Inputs: body (required), confirm.

infra_billing_create_infra_providerC

POST /api/infra-billing/providers Create infra provider Tags: Infra Billing Controller

Inputs: body (required), confirm.

infra_billing_delete_infra_billing_nodeC

DELETE /api/infra-billing/nodes/{uuid} Delete infra billing node Tags: Infra Billing Controller

Inputs: uuid (required), confirm.

infra_billing_delete_infra_billing_recordC

DELETE /api/infra-billing/history/{uuid} Delete infra billing history Tags: Infra Billing Controller

Inputs: uuid (required), confirm.

infra_billing_delte_infra_providerC

DELETE /api/infra-billing/providers/{uuid} Delete infra provider by uuid Tags: Infra Billing Controller

Inputs: uuid (required), confirm.

infra_billing_get_billing_nodesC

GET /api/infra-billing/nodes Get infra billing nodes Tags: Infra Billing Controller

Inputs: no named parameters.

infra_billing_get_infra_billing_recordsC

GET /api/infra-billing/history Get infra billing history Tags: Infra Billing Controller Пагинация через query-параметры: start, size.

Inputs: size, start.

infra_billing_get_infra_providerC

GET /api/infra-billing/providers/{uuid} Get infra provider by uuid Tags: Infra Billing Controller

Inputs: uuid (required).

infra_billing_get_infra_providersC

GET /api/infra-billing/providers Get all infra providers Tags: Infra Billing Controller

Inputs: no named parameters.

infra_billing_update_infra_billing_nodeC

PATCH /api/infra-billing/nodes Update infra billing nodes Tags: Infra Billing Controller

Inputs: body (required), confirm.

infra_billing_update_infra_providerC

PATCH /api/infra-billing/providers Update infra provider Tags: Infra Billing Controller

Inputs: body (required), confirm.

internal_squad_add_many_users_to_internal_squadC

POST /api/internal-squads/{uuid}/bulk-actions/add-many-users Add many users to internal squad Tags: Internal Squads Controller

Inputs: body (required), uuid (required), confirm.

internal_squad_add_users_to_internal_squadC

POST /api/internal-squads/{uuid}/bulk-actions/add-users Add all users to internal squad Tags: Internal Squads Controller

Inputs: uuid (required), confirm.

internal_squad_create_internal_squadC

POST /api/internal-squads Create internal squad Tags: Internal Squads Controller

Inputs: body (required), confirm.

internal_squad_delete_internal_squadC

DELETE /api/internal-squads/{uuid} Delete internal squad Tags: Internal Squads Controller

Inputs: uuid (required), confirm.

internal_squad_get_internal_squad_accessible_nodesC

GET /api/internal-squads/{uuid}/accessible-nodes Get internal squad accessible nodes Tags: Internal Squads Controller

Inputs: uuid (required).

internal_squad_get_internal_squad_by_uuidD

GET /api/internal-squads/{uuid} Get internal squad by uuid Tags: Internal Squads Controller

Inputs: uuid (required).

internal_squad_get_internal_squadsC

GET /api/internal-squads Get all internal squads Tags: Internal Squads Controller

Inputs: no named parameters.

internal_squad_get_internal_squad_usageC

GET /api/internal-squads/{uuid}/usage Get internal squad users traffic usage for a period Returns users whose total usage over the period on the given nodes is >= minTotalBytes, scoped to the nodes reachable via the internal squad inbounds. Underlying usage data is flushed to the database roughly every 2 minutes. Tags: Internal Squads Controller Пагинация через query-параметры: start, limit.

Inputs: end (required), uuid (required), start (required), limit, +2 more.

internal_squad_get_tagsB

GET /api/internal-squads/tags Get tags of Internal Squads Tags: Internal Squads Controller

Inputs: no named parameters.

internal_squad_remove_many_users_from_internal_squadC

DELETE /api/internal-squads/{uuid}/bulk-actions/remove-many-users Delete many users from internal squad Tags: Internal Squads Controller

Inputs: body (required), uuid (required), confirm.

internal_squad_remove_users_from_internal_squadC

DELETE /api/internal-squads/{uuid}/bulk-actions/remove-users Delete users from internal squad Tags: Internal Squads Controller

Inputs: uuid (required), confirm.

internal_squad_reorder_internal_squadsC

POST /api/internal-squads/actions/reorder Reorder internal squads Tags: Internal Squads Controller

Inputs: body (required), confirm.

internal_squad_set_tagsC

PATCH /api/internal-squads/tags Set tags of Internal Squad Tags: Internal Squads Controller

Inputs: body (required), confirm.

internal_squad_stats_get_internal_squad_usageB

GET /api/bandwidth-stats/internal-squads/{uuid}/usage Get internal squad users traffic usage for a period Returns users whose total usage over the period on the given nodes is >= minTotalBytes, scoped to the nodes reachable via the internal squad inbounds. Underlying usage data is flushed to the database roughly every 2 minutes. Tags: Bandwidth Stats Controller Пагинация через query-параметры: start, limit.

Inputs: end (required), uuid (required), start (required), limit, +2 more.

internal_squad_stats_get_internal_squad_user_usageC

GET /api/bandwidth-stats/internal-squads/{squadUuid}/users/{userId}/usage Get a single user daily traffic usage on the internal squad nodes for a period Returns users whose total usage over the period on the given nodes is >= minTotalBytes, scoped to the nodes reachable via the Internal Squad inbounds. Every day in the range is present (zero-filled). Underlying usage data is flushed to the database roughly every 2 minutes. Tags: Bandwidth Stats Controller Пагинация через query-параметры: start.

Inputs: end (required), start (required), userId (required), squadUuid (required).

internal_squad_update_internal_squadC

PATCH /api/internal-squads Update internal squad Tags: Internal Squads Controller

Inputs: body (required), confirm.

keygen_generate_keyB

GET /api/keygen Get SECRET_KEY for Remnawave Node Tags: Keygen Controller

Inputs: no named parameters.

metadata_get_node_metadataC

GET /api/metadata/node/{uuid} Get node metadata Tags: Metadata Controller

Inputs: uuid (required).

metadata_get_user_metadataC

GET /api/metadata/user/{userId} Get user metadata Tags: Metadata Controller

Inputs: userId (required).

metadata_upsert_node_metadataC

PUT /api/metadata/node/{uuid} Update or create Node Metadata Tags: Metadata Controller

Inputs: body (required), uuid (required), confirm.

metadata_upsert_user_metadataC

PUT /api/metadata/user/{userId} Update or create User Metadata Tags: Metadata Controller

Inputs: body (required), userId (required), confirm.

node_integration_create_integrationC

POST /api/node-integrations Create Node Integration Tags: Node Integrations Controller

Inputs: body (required), confirm.

node_integration_delete_integrationC

DELETE /api/node-integrations/{uuid} Delete Node Integration Tags: Node Integrations Controller

Inputs: uuid (required), confirm.

node_integration_get_all_integrationsC

GET /api/node-integrations Get all Node Integrations Tags: Node Integrations Controller

Inputs: no named parameters.

node_integration_get_integration_by_uuidC

GET /api/node-integrations/{uuid} Get Node Integration by uuid Tags: Node Integrations Controller

Inputs: uuid (required).

node_integration_update_integrationC

PATCH /api/node-integrations Update Node Integration Tags: Node Integrations Controller

Inputs: body (required), confirm.

node_plugin_clone_node_pluginC

POST /api/node-plugins/actions/clone Clone Node Plugin Tags: Node Plugins Controller

Inputs: body (required), confirm.

node_plugin_create_configC

POST /api/node-plugins Create Node Plugin Tags: Node Plugins Controller

Inputs: body (required), confirm.

node_plugin_create_shared_listC

POST /api/node-plugins/shared-lists Create Shared List Tags: Node Plugins Controller

Inputs: body (required), confirm.

node_plugin_delete_configC

DELETE /api/node-plugins/{uuid} Delete Node Plugin Tags: Node Plugins Controller

Inputs: uuid (required), confirm.

node_plugin_delete_shared_listC

DELETE /api/node-plugins/shared-lists Delete Shared List by name Tags: Node Plugins Controller

Inputs: body (required), confirm.

node_plugin_get_all_configsC

GET /api/node-plugins Get all Node Plugins Tags: Node Plugins Controller

Inputs: no named parameters.

node_plugin_get_all_shared_listsA

GET /api/node-plugins/shared-lists Get Shared Lists (Preview) Returns only the name, type and item count of every shared list. Use "Get Shared List by name" to fetch the items themselves. Tags: Node Plugins Controller

Inputs: no named parameters.

node_plugin_get_config_by_uuidC

GET /api/node-plugins/{uuid} Get Node Plugin by uuid Tags: Node Plugins Controller

Inputs: uuid (required).

node_plugin_get_shared_list_by_nameC

GET /api/node-plugins/shared-lists/by-name Get Shared List by name Tags: Node Plugins Controller

Inputs: name (required).

node_plugin_get_tagsB

GET /api/node-plugins/tags Get tags of Node Plugins Tags: Node Plugins Controller

Inputs: no named parameters.

node_plugin_plugin_executorC

POST /api/node-plugins/executor Execute command on node plugins Tags: Node Plugins Controller

Inputs: body (required), confirm.

node_plugin_reorder_node_pluginsC

POST /api/node-plugins/actions/reorder Reorder Node Plugins Tags: Node Plugins Controller

Inputs: body (required), confirm.

node_plugin_set_tagsC

PATCH /api/node-plugins/tags Set tags of Node Plugin Tags: Node Plugins Controller

Inputs: body (required), confirm.

node_plugin_sync_node_pluginC

POST /api/node-plugins/actions/sync Sync Node Plugin to nodes Push the current plugin config, including referenced shared lists, to every connected node this plugin is active on. Tags: Node Plugins Controller

Inputs: body (required), confirm.

node_plugin_sync_shared_listC

POST /api/node-plugins/shared-lists/actions/sync Sync Shared List to nodes Push every plugin referencing this shared list to the nodes it is active on. Tags: Node Plugins Controller

Inputs: body (required), confirm.

node_plugin_update_configC

PATCH /api/node-plugins Update Node Plugin Tags: Node Plugins Controller

Inputs: body (required), confirm.

node_plugin_update_shared_listC

PATCH /api/node-plugins/shared-lists Update Shared List Tags: Node Plugins Controller

Inputs: body (required), confirm.

nodes_bulk_nodes_actionsC

POST /api/nodes/bulk-actions Perform actions for many nodes Tags: Nodes Controller

Inputs: body (required), confirm.

nodes_bulk_nodes_updateC

POST /api/nodes/bulk-actions/update Update many nodes Tags: Nodes Controller

Inputs: body (required), confirm.

nodes_create_nodeC

POST /api/nodes Create a new node Tags: Nodes Controller

Inputs: body (required), confirm.

nodes_delete_nodeC

DELETE /api/nodes/{uuid} Delete a node Tags: Nodes Controller

Inputs: uuid (required), confirm.

nodes_disable_nodeC

POST /api/nodes/{uuid}/actions/disable Disable a node Tags: Nodes Controller

Inputs: uuid (required), confirm.

nodes_enable_nodeC

POST /api/nodes/{uuid}/actions/enable Enable a node Tags: Nodes Controller

Inputs: uuid (required), confirm.

nodes_get_nodeC

GET /api/nodes/{uuid} Get node by UUID Tags: Nodes Controller

Inputs: uuid (required).

nodes_get_nodesC

GET /api/nodes Get nodes Tags: Nodes Controller

Inputs: no named parameters.

nodes_get_nodes_tagsC

GET /api/nodes/tags Get nodes tags Tags: Nodes Controller

Inputs: no named parameters.

nodes_profile_modificationC

POST /api/nodes/bulk-actions/profile-modification Modify Inbounds & Profile for many nodes Tags: Nodes Controller

Inputs: body (required), confirm.

nodes_reorder_nodesC

POST /api/nodes/actions/reorder Reorder nodes Tags: Nodes Controller

Inputs: body (required), confirm.

nodes_reset_node_trafficC

POST /api/nodes/{uuid}/actions/reset-traffic Reset Node Traffic Tags: Nodes Controller

Inputs: uuid (required), confirm.

nodes_restart_all_nodesC

POST /api/nodes/actions/restart-all Restart all nodes Tags: Nodes Controller

Inputs: body (required), confirm.

nodes_restart_nodeD

POST /api/nodes/{uuid}/actions/restart Restart node Tags: Nodes Controller

Inputs: body (required), uuid (required), confirm.

nodes_update_nodeC

PATCH /api/nodes Update node Tags: Nodes Controller

Inputs: body (required), confirm.

nodes_usage_history_get_stats_nodes_usageC

GET /api/bandwidth-stats/nodes Get Nodes Usage by Range Tags: Bandwidth Stats Controller Пагинация через query-параметры: start.

Inputs: end (required), start (required), topNodesLimit.

passkey_delete_passkeyC

DELETE /api/passkeys Delete a passkey by ID Tags: Passkeys Controller

Inputs: body (required), confirm.

passkey_get_active_passkeysC

GET /api/passkeys Get passkeys Tags: Passkeys Controller

Inputs: no named parameters.

passkey_passkey_registration_optionsC

GET /api/passkeys/registration/options Get registration options for passkey Tags: Passkeys Controller

Inputs: no named parameters.

passkey_passkey_registration_verifyC

POST /api/passkeys/registration/verify Verify registration for passkey Tags: Passkeys Controller

Inputs: body (required), confirm.

passkey_update_passkeyC

PATCH /api/passkeys Update passkey Tags: Passkeys Controller

Inputs: body (required), confirm.

remnawave_settings_get_settingsC

GET /api/remnawave-settings Get Remnawave settings Tags: Remnawave Settings Controller

Inputs: no named parameters.

remnawave_settings_update_settingsD

PATCH /api/remnawave-settings Update Remnawave settings Tags: Remnawave Settings Controller

Inputs: body (required), confirm.

snippets_create_snippetC

POST /api/snippets Create snippet Tags: Snippets Controller

Inputs: body (required), confirm.

snippets_delete_snippet_by_nameC

DELETE /api/snippets Delete snippet Tags: Snippets Controller

Inputs: body (required), confirm.

snippets_get_snippetsC

GET /api/snippets Get snippets Tags: Snippets Controller

Inputs: no named parameters.

snippets_sync_snippetA

POST /api/snippets/actions/sync Sync snippet to affected config profiles Trigger the sync of a snippet to all config profiles that reference it. Nodes which use affected config profiles will be restarted. Tags: Snippets Controller

Inputs: body (required), confirm.

snippets_update_snippetC

PATCH /api/snippets Update snippet Tags: Snippets Controller

Inputs: body (required), confirm.

subscription_get_subscriptionD

GET /api/sub/{shortUuid} Tags: [Public] Subscription Controller

Inputs: shortUuid (required).

subscription_get_subscription_by_client_typeD

GET /api/sub/{shortUuid}/{clientType} Tags: [Public] Subscription Controller

Inputs: shortUuid (required), clientType (required).

subscription_get_subscription_info_by_short_uuidC

GET /api/sub/{shortUuid}/info Get Subscription Info by Short UUID Tags: [Public] Subscription Controller

Inputs: shortUuid (required).

subscription_page_config_clone_subscription_page_configC

POST /api/subscription-page-configs/actions/clone Clone subscription page config Tags: Subscription Page Configs Controller

Inputs: body (required), confirm.

subscription_page_config_create_configC

POST /api/subscription-page-configs Create subscription page config Tags: Subscription Page Configs Controller

Inputs: body (required), confirm.

subscription_page_config_delete_configC

DELETE /api/subscription-page-configs/{uuid} Delete subscription page config Tags: Subscription Page Configs Controller

Inputs: uuid (required), confirm.

subscription_page_config_get_all_configsC

GET /api/subscription-page-configs Get all subscription page configs Tags: Subscription Page Configs Controller

Inputs: no named parameters.

subscription_page_config_get_config_by_uuidC

GET /api/subscription-page-configs/{uuid} Get subscription page config by uuid Tags: Subscription Page Configs Controller

Inputs: uuid (required).

subscription_page_config_get_tagsC

GET /api/subscription-page-configs/tags Get tags of Subpage Configs Tags: Subscription Page Configs Controller

Inputs: no named parameters.

subscription_page_config_reorder_subscription_page_configsC

POST /api/subscription-page-configs/actions/reorder Reorder subscription page configs Tags: Subscription Page Configs Controller

Inputs: body (required), confirm.

subscription_page_config_set_tagsC

PATCH /api/subscription-page-configs/tags Set tags of Subpage Config Tags: Subscription Page Configs Controller

Inputs: body (required), confirm.

subscription_page_config_update_configC

PATCH /api/subscription-page-configs Update subscription page config Tags: Subscription Page Configs Controller

Inputs: body (required), confirm.

subscription_settings_get_settingsC

GET /api/subscription-settings Get subscription settings Tags: Subscription Settings Controller

Inputs: no named parameters.

subscription_settings_update_settingsD

PATCH /api/subscription-settings Update subscription settings Tags: Subscription Settings Controller

Inputs: body (required), confirm.

subscriptions_get_all_subscriptionsB

GET /api/subscriptions Get all subscriptions Tags: [Protected] Subscriptions Controller Пагинация через query-параметры: start, size.

Inputs: size, start.

subscriptions_get_connection_keys_by_user_idC

GET /api/subscriptions/connection-keys/{userId} Get connection keys (base64 format) by user id Tags: [Protected] Subscriptions Controller

Inputs: userId (required).

subscriptions_get_raw_subscription_by_short_uuidC

GET /api/subscriptions/by-short-uuid/{shortUuid}/raw Get Raw Subscription by Short UUID Tags: [Protected] Subscriptions Controller

Inputs: shortUuid (required), withDisabledHosts.

subscriptions_get_subpage_config_by_short_uuidC

GET /api/subscriptions/subpage-config/{shortUuid} Get Subpage Config by Short UUID Tags: [Protected] Subscriptions Controller

Inputs: body (required), shortUuid (required).

subscriptions_get_subscription_by_short_uuid_protectedC

GET /api/subscriptions/by-short-uuid/{shortUuid} Get subscription by short uuid (protected route) Tags: [Protected] Subscriptions Controller

Inputs: shortUuid (required).

subscriptions_get_subscription_by_usernameC

GET /api/subscriptions/by-username/{username} Get subscription by username Tags: [Protected] Subscriptions Controller

Inputs: username (required).

subscriptions_get_subscription_by_uuidC

GET /api/subscriptions/by-id/{userId} Get subscription by User ID Tags: [Protected] Subscriptions Controller

Inputs: userId (required).

subscription_template_create_templateC

POST /api/subscription-templates Create subscription template Tags: Subscription Template Controller

Inputs: body (required), confirm.

subscription_template_delete_templateC

DELETE /api/subscription-templates/{uuid} Delete subscription template Tags: Subscription Template Controller

Inputs: uuid (required), confirm.

subscription_template_get_all_templatesB

GET /api/subscription-templates Get all subscription templates (wihout content) Tags: Subscription Template Controller

Inputs: no named parameters.

subscription_template_get_tagsB

GET /api/subscription-templates/tags Get tags of Subscription Templates Tags: Subscription Template Controller

Inputs: no named parameters.

subscription_template_get_template_by_uuidC

GET /api/subscription-templates/{uuid} Get subscription template by uuid Tags: Subscription Template Controller

Inputs: uuid (required).

subscription_template_reorder_subscription_templatesC

POST /api/subscription-templates/actions/reorder Reorder subscription templates Tags: Subscription Template Controller

Inputs: body (required), confirm.

subscription_template_set_tagsC

PATCH /api/subscription-templates/tags Set tags of Subscription Template Tags: Subscription Template Controller

Inputs: body (required), confirm.

subscription_template_update_templateC

PATCH /api/subscription-templates Update subscription template Tags: Subscription Template Controller

Inputs: body (required), confirm.

system_debug_srr_matcherD

POST /api/system/testers/srr-matcher Test SRR Matcher Tags: System Controller

Inputs: body (required), confirm.

system_get_bandwidth_statsC

GET /api/system/stats/bandwidth Get Bandwidth Stats Tags: System Controller

Inputs: tz.

system_get_configurationC

GET /api/system/configuration Get Remnawave Configuration Returns some of the configuration values. Tags: System Controller

Inputs: no named parameters.

system_get_http_statsD

GET /api/system/stats/http Get HTTP Stats Tags: System Controller

Inputs: no named parameters.

system_get_metadataC

GET /api/system/metadata Get Remnawave Information Tags: System Controller

Inputs: no named parameters.

system_get_nodes_metricsC

GET /api/system/nodes/metrics Get Nodes Metrics Tags: System Controller

Inputs: no named parameters.

system_get_nodes_statisticsC

GET /api/system/stats/nodes Get Nodes Statistics Tags: System Controller

Inputs: no named parameters.

system_get_recapD

GET /api/system/stats/recap Get Recap Tags: System Controller

Inputs: no named parameters.

system_get_remnawave_healthC

GET /api/system/health Get Remnawave Health Tags: System Controller

Inputs: no named parameters.

system_get_statsD

GET /api/system/stats Get Stats Tags: System Controller

Inputs: no named parameters.

system_get_stats_digestB

GET /api/system/stats/digest Get Stats Digest Aggregated statistics for a datetime range [start, end): created and expired users, total traffic, traffic spent by users created within the range and new HWID devices. Per-user traffic history is stored with daily granularity (UTC), so the "traffic by new users" metric snaps to whole days at the range edges. Tags: System Controller Пагинация через query-параметры: start.

Inputs: end (required), start (required).

system_get_x25519_keypairsC

GET /api/system/tools/x25519/generate Generate 30 X25519 keypairs Tags: System Controller

Inputs: no named parameters.

system_metricsA

GET /metrics — метрики Prometheus. Эндпоинт использует Basic-auth (схема Prometheus в спеке), не Bearer-токен панели. Требует REMNA_METRICS_USER/REMNA_METRICS_PASS. Без них возвращает понятный отказ, не выполняет запрос. Примечание: /metrics отсутствует как отдельный path в OpenAPI-спеке панели, поэтому этот инструмент не генерируется, а добавлен вручную.

Inputs: no named parameters.

torrent_blocker_reports_get_torrent_blocker_reportsC

GET /api/node-plugins/torrent-blocker Get Torrent Blocker Reports Please note that the filters here are primarily intended for use by the frontend and rely on expensive operators such as LIKE under the hood. Misusing these filters may negatively impact the performance of your database. Tags: Node Plugins Controller Пагинация через query-параметры: start, size.

Inputs: size, start, filters, sorting, +2 more.

torrent_blocker_reports_get_torrent_blocker_reports_statsC

GET /api/node-plugins/torrent-blocker/stats Get Torrent Blocker Reports Stats Tags: Node Plugins Controller

Inputs: no named parameters.

torrent_blocker_reports_truncate_torrent_blocker_reportsC

DELETE /api/node-plugins/torrent-blocker/truncate Truncate Torrent Blocker Reports Tags: Node Plugins Controller

Inputs: confirm.

users_bulk_actions_bulk_all_extend_expiration_dateC

POST /api/users/bulk/all/extend-expiration-date Extend expiration date for all users by days Tags: Users Bulk Actions Controller

Inputs: body (required), confirm.

users_bulk_actions_bulk_all_reset_user_trafficC

POST /api/users/bulk/all/reset-traffic Reset user used traffic for all users Tags: Users Bulk Actions Controller

Inputs: confirm.

users_bulk_actions_bulk_delete_usersC

POST /api/users/bulk/delete Bulk delete users by User IDs Tags: Users Bulk Actions Controller

Inputs: body (required), confirm.

users_bulk_actions_bulk_delete_users_by_statusC

POST /api/users/bulk/delete-by-status Bulk delete users by status Tags: Users Bulk Actions Controller

Inputs: body (required), confirm.

users_bulk_actions_bulk_extend_expiration_dateB

POST /api/users/bulk/extend-expiration-date Extend expiration date for specified users by days Tags: Users Bulk Actions Controller

Inputs: body (required), confirm.

users_bulk_actions_bulk_reset_user_trafficC

POST /api/users/bulk/reset-traffic Bulk reset traffic users by User IDs Tags: Users Bulk Actions Controller

Inputs: body (required), confirm.

users_bulk_actions_bulk_revoke_users_subscriptionC

POST /api/users/bulk/revoke-subscription Revoke users subscription by User IDs Tags: Users Bulk Actions Controller

Inputs: body (required), confirm.

users_bulk_actions_bulk_update_all_usersC

POST /api/users/bulk/all/update Bulk update all users Tags: Users Bulk Actions Controller

Inputs: body (required), confirm.

users_bulk_actions_bulk_update_usersC

POST /api/users/bulk/update Bulk update users by User IDs Tags: Users Bulk Actions Controller

Inputs: body (required), confirm.

users_bulk_actions_bulk_update_users_internal_squadsC

POST /api/users/bulk/update-squads Bulk update users internal squads by User IDs Tags: Users Bulk Actions Controller

Inputs: body (required), confirm.

users_create_userC

POST /api/users Create a new user Tags: Users Controller

Inputs: body (required), confirm.

users_delete_userC

DELETE /api/users/{userId} Delete user Tags: Users Controller

Inputs: userId (required), confirm.

users_disable_userC

POST /api/users/{userId}/actions/disable Disable user Tags: Users Controller

Inputs: userId (required), confirm.

users_enable_userC

POST /api/users/{userId}/actions/enable Enable user Tags: Users Controller

Inputs: userId (required), confirm.

users_extend_user_expiration_dateA

POST /api/users/{userId}/actions/extend Extend user expiration date If user status is EXPIRED, the new expiration date is calculated from the current date and the user becomes ACTIVE. If user status is ACTIVE, the given number of days is added to the existing expiration date. DISABLED and LIMITED users will be extended, but their status will not change. Tags: Users Controller

Inputs: body (required), userId (required), confirm.

users_get_user_accessible_nodesC

GET /api/users/{userId}/accessible-nodes Get user accessible nodes Tags: Users Controller

Inputs: userId (required).

users_get_user_by_idC

GET /api/users/{userId} Get user by ID Tags: Users Controller

Inputs: userId (required).

users_get_user_by_short_uuidC

GET /api/users/by-short-uuid/{shortUuid} Get user by Short UUID Tags: Users Controller

Inputs: shortUuid (required).

users_get_user_by_usernameC

GET /api/users/by-username/{username} Get user by username Tags: Users Controller

Inputs: username (required).

users_get_usersB

GET /api/users Get all users using offset-based pagination Please note that the filters here are primarily intended for use by the frontend and rely on expensive operators such as LIKE under the hood. Misusing these filters may negatively impact the performance of your database. Tags: Users Controller Пагинация через query-параметры: start, size.

Inputs: size, start, filters, sorting, +2 more.

users_get_users_streamB

GET /api/users/stream Get all users using cursor-based (keyset) pagination with filtering options Tags: Users Controller Пагинация через query-параметры: size.

Inputs: tag, size, email, cursor, +4 more.

users_get_users_tagsC

GET /api/users/tags Get users tags Tags: Users Controller

Inputs: no named parameters.

users_get_user_subscription_request_historyB

GET /api/users/{userId}/subscription-request-history Get user subscription request history, recent 24 records Tags: Users Controller

Inputs: userId (required).

users_reset_user_trafficC

POST /api/users/{userId}/actions/reset-traffic Reset user traffic Tags: Users Controller

Inputs: userId (required), confirm.

users_resolve_userB

POST /api/users/resolve Resolve a user Resolve a user by ID, Short UUID or username. Exactly one of the fields must be provided. Tags: Users Controller

Inputs: body (required), confirm.

users_revoke_user_subscriptionC

POST /api/users/{userId}/actions/revoke Revoke user subscription Tags: Users Controller

Inputs: body (required), userId (required), confirm.

user_subscription_request_history_get_subscription_re_1r7914C

GET /api/subscription-request-history Get all subscription request history Please note that the filters here are primarily intended for use by the frontend and rely on expensive operators such as LIKE under the hood. Misusing these filters may negatively impact the performance of your database. Tags: Subscription Request History Controller Пагинация через query-параметры: start, size.

Inputs: size, start, filters, sorting, +2 more.

user_subscription_request_history_get_subscription_re_31zydoC

GET /api/subscription-request-history/stats Get subscription request history stats Tags: Subscription Request History Controller

Inputs: no named parameters.

users_update_userB

PATCH /api/users Update a user Update a user by ID or username. Exactly one of the fields must be provided. Tags: Users Controller

Inputs: body (required), confirm.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

Loading tool schema changelog…

    TDQS

    C2.3/5.0

    Scored across 222 tools

    Disambiguation2/5

    With 222 tools, many endpoints overlap in purpose (e.g., two internal squad usage tools, offset vs cursor user listing, multiple subscription getters), forcing the agent to read fine-grained descriptions to choose correctly. The controller prefixes help somewhat, but the volume and near-duplicate names make misselection likely.

    Naming Consistency3/5

    Names generally follow a resource_action snake_case pattern (users_create_user, nodes_restart_node), but inconsistencies appear: random suffixes like _1r7914, a typo (infra_billing_delte_infra_provider), and mixed get vs get_all conventions. Still, the dominant pattern is readable.

    Tool Count1/5

    222 tools vastly exceeds a reasonable MCP surface (calibration marks 50+ as extreme mismatch), overwhelming the agent and making navigation costly despite helper tools like api_search.

    Completeness5/5

    The surface covers nearly all Remnawave panel domains (users, nodes, hosts, squads, configs, billing, subscriptions, auth, passkeys, metrics, etc.) with full CRUD and bulk operations, leaving few obvious gaps.

    Maintenance

    ActivityStale
    ResponsivenessNo recent community issues

    Related MCP Connectors

    Related MCP Servers

    • A
      license
      Not graded
      quality
      B
      maintenance
      Enables MCP clients to manage a Remnawave panel through its full API, covering users, nodes, hosts, subscriptions, and more with configurable tool profiles and read/write token access.
      11 npm
      MIT
    • A
      license
      C
      quality
      B
      maintenance
      Enables MCP clients like Claude Code, Claude Desktop, or Cursor to read and manage Remnawave 3.x VPN panel resources — users, nodes, hosts, config profiles, squads, subscription templates, billing, and HWID devices — through the panel's REST API, with contract-driven tool schemas, numeric user IDs, multi-panel config lookup, and an optional readonly mode.
      204
      10 npm
      MIT
    • A
      license
      Not graded
      quality
      C
      maintenance
      Wraps the Remnawave panel API into 22 callable tools so AI assistants can manage VPN nodes, users, squads, config profiles, and hosts through natural language instead of manual curl requests. It supports listing, creating, enabling, disabling, restarting, and extending entities, along with traffic resets and node key generation, using credentials supplied via environment variables.
      2
      Apache 2.0
    • A
      license
      B
      quality
      C
      maintenance
      Enables AI CLI agents to operate an aaPanel (btPanel fork) hosting panel through its signature-authenticated HTTP API, exposing 57 described operations covering websites, databases, SSL certificates, backups, and system status plus resources for panel inventories. Ships with a read-only default mode and a separate gate over credential-exposing and file-level operations, redacting generated passwords from tool results.
      59
      14 npm
      MIT