remnawave-mcp
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@remnawave-mcp list active users and their subscription expiry dates"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
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 buildnpm ci ставит зависимости строго по package-lock.json. Для разработки:
npm test, npm run typecheck.
Конфигурация
Все настройки — через переменные окружения. Скопируйте .env.example в .env
и заполните нужные поля (для локального запуска сервера через npm start;
.env в .gitignore, секреты никуда не коммитятся).
Ключевые переменные (полный список с комментариями — в .env.example):
Переменная | Назначение | По умолчанию |
| URL панели, без завершающего слэша | — (обязателен) |
| Bearer JWT-токен панели (или путь к файлу с токеном) | — |
| Basic-auth для | — |
|
|
|
| Доп. правила | пусто |
| Включить встроенный deny-лист Remnawave |
|
| Требовать |
|
| Не-GET никогда не отправляются, всегда превью |
|
| Путь к JSONL-журналу аудита |
|
| Таймаут HTTP-запроса к панели |
|
| Лимит размера ответа инструмента |
|
| Regex по имени инструмента — публикует подмножество | пусто (все) |
| Редактирование секретов в ответах |
|
| Доп. редактирование полей подписки (trojanPassword и т.д.) |
|
| Лимит длины массивов |
|
| Опциональный 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/keygenPOST /api/tokens/api/auth/api/passkeysPOST /api/nodes/actions/restart-allPOST /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" } }Как перегенерировать при обновлении панели
Скопируйте актуальный
openapi.jsonиз контейнера панели, например:docker cp <remnawave-container>:/opt/app/openapi.json ./new_openapi.jsonЗамените файл спеки в пакете:
cp new_openapi.json spec/remnawave_openapi.jsonПерегенерируйте инструменты и пересоберите:
npm run generate npm run buildПрогоните тесты (число инструментов в тестах жёстко зашито — 217; если панель добавила/убрала операции, обновите ожидаемое число в
test/generator.test.ts):npm testПроверьте
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 toolsapi_audit_tailC
Последние N записей журнала аудита вызовов.
Inputs: n.
api_describeC
Полная схема входа и заметки по конкретному инструменту (по имени).
Inputs: tool (required).
api_searchA
Поиск инструментов Remnawave API по подстроке в имени, пути, описании или теге. Возвращает имя, метод, путь, описание.
Inputs: query (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_delete_configC
DELETE /api/node-plugins/{uuid} Delete Node Plugin Tags: Node Plugins Controller
Inputs: uuid (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_config_by_uuidC
GET /api/node-plugins/{uuid} Get Node Plugin by uuid Tags: Node Plugins Controller
Inputs: uuid (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_update_configC
PATCH /api/node-plugins Update Node Plugin 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
Scored across 222 tools
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.
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.
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.
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
Related MCP Connectors
Every Canopy public API operation as a tool, run as you after a browser sign-in or on an API key.
Supervised API-write gateway for AI agents with policy, human approval and execution receipts.
AI-callable tools for API mocking, testing, monitoring, security, and automation.
Operate Linux, macOS and Windows from your LLM. Every action runs through an auditable allowlist.
Related MCP Servers
- AlicenseNot gradedqualityBmaintenanceEnables 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 npmMIT
- AlicenseCqualityBmaintenanceEnables 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.20410 npmMIT
- AlicenseNot gradedqualityCmaintenanceWraps 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.2Apache 2.0
- AlicenseBqualityCmaintenanceEnables 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.5914 npmMIT