Skip to main content
Glama

mcp-remnawave

MCP-сервер (Model Context Protocol) для управления VPN-панелью Remnawave из Claude Desktop, Cursor, Windsurf и любого MCP-клиента.

v2.2.0 · Remnawave API 3.4.7 · 191 инструмент (87 в readonly) · 3 ресурса · 5 промптов

Рассчитан на панель 3.4.x. Для панели 3.0–3.2 — v2.0.0, для 2.8.0 — v1.4.0. Панель 3.3.0+ требует ноды 3.3.0+ — обновляйте ноды вместе с панелью.

Установка

git clone https://github.com/Nurullaev/mcp-remnawave.git
cd mcp-remnawave && npm install && npm run build

Нужен Node.js >= 22 и API-токен из панели (Настройки → API Tokens).

Related MCP server: remnawave-mcp-server

Настройка

Переменная

Обязательна

Описание

REMNAWAVE_BASE_URL

да

URL панели, например https://vpn.example.com

REMNAWAVE_API_TOKEN

да

API-токен из настроек панели

REMNAWAVE_API_KEY

нет

Доп. ключ для панели за Caddy с кастомным путём — уходит в X-Api-Key

REMNAWAVE_READONLY

нет

true отключает все пишущие инструменты (191 → 87)

За Caddy с кастомным путём путь указывается прямо в base URL: REMNAWAVE_BASE_URL=https://example.com/secret-path/api.

Конфиг для Claude Desktop (~/Library/Application Support/Claude/claude_desktop_config.json на macOS). Cursor и Windsurf используют такой же JSON в .cursor/mcp.json / .windsurf/mcp.json:

{
  "mcpServers": {
    "remnawave": {
      "command": "node",
      "args": ["/absolute/path/to/mcp-remnawave/dist/index.js"],
      "env": {
        "REMNAWAVE_BASE_URL": "https://vpn.example.com",
        "REMNAWAVE_API_TOKEN": "your-api-token-here"
      }
    }
  }
}

Docker: npm run build && docker compose up -d (переменные через .env или docker-compose.yml).

Инструменты

Пользователи адресуются числовым id (в API 3.x пользовательские UUID убраны). Полный список с описанием параметров отдаёт сам клиент — ниже только распределение по категориям.

Категория

Кол-во

Категория

Кол-во

Пользователи

30

Страницы подписок

7

Плагины нод и shared lists

18

HWID-устройства

7

Ноды

15

Соединения

7

Система и статистика

14

Шаблоны подписок

6

Биллинг инфраструктуры

12

Сниппеты

5

Хосты

12

Интеграции нод

5

Внутренние группы

11

API-токены

4

Подписки

10

Метаданные

4

Конфиг-профили и inbounds

9

Настройки / Настройки подписок

2 + 2

Внешние группы

8

Теги · Keygen

2 · 1

Ресурсы: remnawave://stats, remnawave://nodes, remnawave://health, remnawave://users/{userId} Промпты: create_user_wizard, node_diagnostics, traffic_report, user_audit, bulk_user_cleanup

Примеры запросов: «покажи пользователей с истёкшей подпиской», «создай пользователя vasya на 50 ГБ на месяц», «перезапусти ноду amsterdam-01», «какие ноды офлайн?»

Разработка

src/client/index.ts — HTTP-клиент (по методу на эндпоинт), src/tools/*.ts — регистрация инструментов, по файлу на домен. @remnawave/backend-contract держим запиненным ровно на версию панели.

Лицензия

MIT. Проект вырос из TrackLine/mcp-remnawave.

Available Tools

190 tools
api_tokens_createB

Create a new API token (API 3.x: tokens are scoped)

Inputs: name (required), expiresInDays (required), scopes.

api_tokens_deleteB

Delete an API token

Inputs: uuid (required).

api_tokens_listA

List all API tokens

Inputs: no named parameters.

api_tokens_scopes_listA

List all valid API token scopes

Inputs: no named parameters.

auth_statusB

Check current authentication status with Remnawave panel

Inputs: no named parameters.

bandwidth_stats_users_by_nodesB

Get top per-user bandwidth usage across the given nodes for a date range

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

billing_history_createC

Create a billing history entry

Inputs: amount (required), providerUuid (required), description.

billing_history_deleteB

Delete a billing history entry

Inputs: uuid (required).

billing_history_listC

List billing history

Inputs: no named parameters.

billing_node_createC

Create a billing node

Inputs: nodeUuid (required), providerUuid (required), pricePerMonth.

billing_node_deleteC

Delete a billing node

Inputs: uuid (required).

billing_nodes_listB

List all billing nodes

Inputs: no named parameters.

billing_node_updateC

Update a billing node

Inputs: uuid (required), pricePerMonth.

billing_provider_createA

Create a new billing provider

Inputs: name (required), description.

billing_provider_deleteC

Delete a billing provider

Inputs: uuid (required).

billing_provider_getA

Get a billing provider by UUID

Inputs: uuid (required).

billing_providers_listA

List all infrastructure billing providers

Inputs: no named parameters.

billing_provider_updateC

Update a billing provider

Inputs: uuid (required), name, description.

config_profiles_createC

Create a new config profile

Inputs: name (required).

config_profiles_deleteC

Delete a config profile

Inputs: uuid (required).

config_profiles_getB

Get a config profile by UUID

Inputs: uuid (required).

config_profiles_get_computed_configC

Get computed configuration for a config profile

Inputs: uuid (required).

config_profiles_get_inboundsC

Get inbounds for a specific config profile

Inputs: uuid (required).

config_profiles_listB

List all config profiles

Inputs: no named parameters.

config_profiles_reorderB

Reorder config profiles by providing each profile UUID with its new position

Inputs: items (required).

config_profiles_updateC

Update a config profile

Inputs: uuid (required), name, config.

connections_dropA

Drop active connections by user IDs or IP addresses on all or specific nodes (async, 202)

Inputs: userIds, nodeUuids, ipAddresses.

connections_fetch_by_nodeA

Fetch connections for all users on a node (async job, returns jobId)

Inputs: nodeUuid (required).

connections_fetch_by_userA

Fetch active connections for a user (async job, returns jobId)

Inputs: userId (required).

connections_geocheckB

Run a geolocation check from a node (async job; requires node 3.3.0+)

Inputs: nodeUuid (required), ip, interface.

connections_get_geocheck_resultB

Get result of a geocheck job

Inputs: jobId (required).

connections_get_node_resultC

Get result of a node connections fetch job

Inputs: jobId (required).

connections_get_user_resultC

Get result of a user connections fetch job

Inputs: jobId (required).

external_squads_add_all_usersB

Add ALL users to an external squad (async 202)

Inputs: squadUuid (required).

external_squads_createB

Create a new external squad

Inputs: name (required).

external_squads_deleteB

Delete an external squad

Inputs: uuid (required).

external_squads_getC

Get an external squad by UUID

Inputs: uuid (required).

external_squads_listB

List all external squads

Inputs: no named parameters.

external_squads_remove_all_usersA

Remove ALL users from an external squad (async 202)

Inputs: squadUuid (required).

external_squads_reorderC

Reorder external squads

Inputs: uuids (required).

external_squads_updateC

Update an external squad

Inputs: uuid (required), name.

hosts_bulk_deleteA

Bulk delete selected hosts

Inputs: uuids (required).

hosts_bulk_disableC

Bulk disable selected hosts

Inputs: uuids (required).

hosts_bulk_enableC

Bulk enable selected hosts

Inputs: uuids (required).

hosts_bulk_updateB

Bulk update fields on selected hosts (replaces the removed set-inbound / set-port endpoints)

Inputs: uuids (required), sni, alpn, host, +12 more.

hosts_createB

Create a new host in Remnawave

Inputs: port (required), remark (required), address (required), configProfileUuid (required), +17 more.

hosts_deleteC

Delete a host from Remnawave

Inputs: uuid (required).

hosts_getC

Get a specific host by UUID

Inputs: uuid (required).

hosts_listB

List all Remnawave hosts

Inputs: no named parameters.

hosts_reorderB

Reorder hosts by providing each host UUID with its new position

Inputs: hosts (required).

hosts_tags_listA

List all host tags

Inputs: no named parameters.

hosts_updateC

Update an existing host

Inputs: uuid (required), sni, alpn, host, +15 more.

hwid_device_createB

Create a HWID device entry for a user

Inputs: hwid (required), userId (required), platform, osVersion, +2 more.

hwid_device_deleteB

Delete a specific HWID device (identified by user ID + hardware ID)

Inputs: hwid (required), userId (required).

hwid_devices_delete_allC

Delete all HWID devices for a user

Inputs: userId (required).

hwid_devices_listA

List HWID devices for a specific user

Inputs: userId (required).

hwid_devices_list_allA

List all HWID devices across all users

Inputs: no named parameters.

hwid_statsB

Get HWID device statistics

Inputs: no named parameters.

hwid_top_usersA

Get users with most HWID devices

Inputs: no named parameters.

inbounds_listB

List all inbounds from all config profiles

Inputs: no named parameters.

keygen_getB

Generate a new SECRET_KEY for node configuration

Inputs: no named parameters.

metadata_node_getB

Get metadata for a specific node

Inputs: uuid (required).

metadata_node_upsertB

Create or update metadata for a node

Inputs: uuid (required), metadata (required).

metadata_user_getC

Get metadata for a specific user

Inputs: userId (required).

metadata_user_upsertB

Create or update metadata for a user

Inputs: userId (required), metadata (required).

node_integrations_createC

Create a node integration

Inputs: name (required), config (required), description.

node_integrations_deleteB

Delete a node integration

Inputs: uuid (required).

node_integrations_getC

Get a node integration by UUID

Inputs: uuid (required).

node_integrations_listB

List all node integrations

Inputs: no named parameters.

node_integrations_updateC

Update a node integration

Inputs: uuid (required), name, config, description, +1 more.

node_plugins_cloneC

Clone a node plugin

Inputs: uuid (required).

node_plugins_createC

Create a new node plugin

Inputs: name (required).

node_plugins_deleteC

Delete a node plugin

Inputs: uuid (required).

node_plugins_executeC

Execute a node plugin

Inputs: uuid (required).

node_plugins_getA

Get a node plugin by UUID

Inputs: uuid (required).

node_plugins_listA

List all node plugins

Inputs: no named parameters.

node_plugins_reorderC

Reorder node plugins

Inputs: uuids (required).

node_plugins_syncC

Sync a node plugin to its nodes (async, 202)

Inputs: uuid (required).

node_plugins_torrent_reportsB

Get torrent blocker reports

Inputs: no named parameters.

node_plugins_torrent_statsC

Get torrent blocker statistics

Inputs: no named parameters.

node_plugins_torrent_truncateB

Truncate all torrent blocker reports

Inputs: no named parameters.

node_plugins_updateC

Update a node plugin

Inputs: uuid (required), name.

nodes_bulk_actionsC

Bulk actions on selected nodes (enable/disable/restart)

Inputs: action (required), nodeUuids (required).

nodes_bulk_profile_modificationB

Bulk modify config profile for selected nodes

Inputs: nodeUuids (required), configProfileUuid (required).

nodes_bulk_updateC

Bulk update properties for selected nodes

Inputs: uuids (required), note, tags, countryCode, +2 more.

nodes_createB

Create a new node in Remnawave

Inputs: name (required), address (required), activeInbounds (required), activeConfigProfileUuid (required), +12 more.

nodes_deleteB

Delete a node from Remnawave

Inputs: uuid (required).

nodes_disableC

Disable a node

Inputs: uuid (required).

nodes_enableC

Enable a disabled node

Inputs: uuid (required).

nodes_getC

Get a specific node by UUID

Inputs: uuid (required).

nodes_listB

List all Remnawave nodes

Inputs: no named parameters.

nodes_reorderC

Reorder nodes by providing each node UUID with its new position

Inputs: nodes (required).

nodes_reset_trafficC

Reset traffic counter for a node

Inputs: uuid (required).

nodes_restartB

Restart a specific node

Inputs: uuid (required), forceRestart.

nodes_restart_allB

Restart all nodes

Inputs: forceRestart.

nodes_tags_listA

List all node tags

Inputs: no named parameters.

nodes_updateC

Update an existing node

Inputs: uuid (required), ips, name, note, +11 more.

settings_getA

Get Remnawave panel settings

Inputs: no named parameters.

settings_updateC

Update Remnawave panel settings

Inputs: settings (required).

shared_lists_createC

Create a node plugin shared list

Inputs: name (required), config (required).

shared_lists_deleteA

Delete a node plugin shared list by name

Inputs: name (required).

shared_lists_getA

Get a node plugin shared list by name

Inputs: name (required).

shared_lists_listB

List all node plugin shared lists

Inputs: no named parameters.

shared_lists_syncA

Sync a shared list to its nodes (async, 202)

Inputs: name (required).

shared_lists_updateB

Update a node plugin shared list (identified by name)

Inputs: name (required), config (required).

snippets_createC

Create a new configuration snippet

Inputs: name (required), snippet (required).

snippets_deleteC

Delete a snippet by name

Inputs: name (required).

snippets_listA

List all configuration snippets

Inputs: no named parameters.

snippets_syncA

Sync a snippet to the config profiles using it (async, 202)

Inputs: name (required).

snippets_updateB

Update an existing snippet (identified by name)

Inputs: name (required), newName, snippet.

squads_accessible_nodesB

Get nodes accessible to a specific squad

Inputs: uuid (required).

squads_add_all_usersA

Add ALL users to an internal squad (async 202)

Inputs: squadUuid (required).

squads_add_usersA

Add specific users to an internal squad (1-1000 per call, async 202)

Inputs: userIds (required), squadUuid (required).

squads_createC

Create a new internal squad

Inputs: name (required).

squads_deleteB

Delete an internal squad

Inputs: uuid (required).

squads_getA

Get a specific internal squad by UUID

Inputs: uuid (required).

squads_listB

List all internal squads

Inputs: no named parameters.

squads_remove_all_usersA

Remove ALL users from an internal squad (async 202)

Inputs: squadUuid (required).

squads_remove_usersA

Remove specific users from an internal squad (1-1000 per call, async 202)

Inputs: userIds (required), squadUuid (required).

squads_reorderA

Reorder internal squads by providing each squad UUID with its new position

Inputs: items (required).

squads_updateC

Update an internal squad

Inputs: uuid (required), name.

sub_page_configs_cloneC

Clone a subscription page configuration

Inputs: uuid (required).

sub_page_configs_createB

Create a subscription page configuration

Inputs: name (required).

sub_page_configs_deleteB

Delete a subscription page configuration

Inputs: uuid (required).

sub_page_configs_getB

Get a subscription page config by UUID

Inputs: uuid (required).

sub_page_configs_listA

List all subscription page configurations

Inputs: no named parameters.

sub_page_configs_reorderC

Reorder subscription page configurations

Inputs: uuids (required).

sub_page_configs_updateC

Update a subscription page configuration

Inputs: uuid (required), name.

subscription_infoC

Get subscription info by short UUID (public endpoint)

Inputs: shortUuid (required).

subscription_request_history_listB

List subscription request history

Inputs: no named parameters.

subscription_request_history_statsB

Get subscription request history statistics

Inputs: no named parameters.

subscription_settings_getB

Get Remnawave subscription settings

Inputs: no named parameters.

subscription_settings_updateB

Update Remnawave subscription settings (API 3.x: profile title/support link/update interval/HAPP fields moved to custom response headers)

Inputs: uuid (required), hwidSettings, customRemarks, responseRules, +4 more.

subscriptions_get_by_idC

Get subscription details by user numeric ID

Inputs: userId (required).

subscriptions_get_by_short_uuidC

Get subscription details by short UUID

Inputs: shortUuid (required).

subscriptions_get_by_usernameC

Get subscription details by username

Inputs: username (required).

subscriptions_get_connection_keysB

Get connection keys for a user subscription

Inputs: userId (required).

subscriptions_get_raw_by_short_uuidC

Get raw subscription config by short UUID

Inputs: shortUuid (required).

subscriptions_get_subpage_configD

Get subscription page configuration

Inputs: shortUuid (required).

subscriptions_listC

List all subscriptions with pagination

Inputs: size, start.

subscription_templates_createB

Create a new subscription template

Inputs: name (required), templateType (required).

subscription_templates_deleteB

Delete a subscription template

Inputs: uuid (required).

subscription_templates_getB

Get a subscription template by UUID

Inputs: uuid (required).

subscription_templates_listB

List all subscription templates

Inputs: no named parameters.

subscription_templates_reorderA

Reorder subscription templates by providing each template UUID with its new position

Inputs: items (required).

subscription_templates_updateB

Update an existing subscription template

Inputs: uuid (required), name, templateJson, encodedTemplateYaml.

system_bandwidth_statsC

Get bandwidth statistics

Inputs: no named parameters.

system_configurationB

Get Remnawave panel configuration

Inputs: no named parameters.

system_generate_x25519B

Generate X25519 key pair for VLESS Reality

Inputs: no named parameters.

system_healthB

Check Remnawave panel health status

Inputs: no named parameters.

system_metadataB

Get Remnawave panel metadata and version information

Inputs: no named parameters.

system_nodes_metricsC

Get detailed node metrics

Inputs: no named parameters.

system_nodes_statisticsC

Get node statistics

Inputs: no named parameters.

system_srr_matcherC

Test subscription request routing rules

Inputs: input (required).

system_statsB

Get overall Remnawave panel statistics (users, nodes, traffic, memory, CPU)

Inputs: no named parameters.

system_stats_digestB

Get system statistics digest for a date-time range

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

system_stats_httpB

Get HTTP request statistics

Inputs: no named parameters.

system_stats_recapC

Get system statistics recap

Inputs: no named parameters.

tags_assignA

Replace the tags of one entity in a domain (config profiles, internal/external squads, node plugins, subscription page configs, subscription templates)

Inputs: tags (required), uuid (required), domain (required).

tags_listA

List all tags used in a domain (config profiles, internal/external squads, node plugins, subscription page configs, subscription templates)

Inputs: domain (required).

users_accessible_nodesB

Get nodes accessible to a specific user

Inputs: userId (required).

users_bulk_all_extend_expirationB

Extend expiration date for ALL users

Inputs: days (required).

users_bulk_all_reset_trafficB

Reset traffic counters for ALL users

Inputs: no named parameters.

users_bulk_all_updateB

Update ALL users at once (async, returns 202)

Inputs: tag, email, status, expireAt, +5 more.

users_bulk_deleteB

Bulk delete selected users

Inputs: userIds (required).

users_bulk_delete_by_statusB

Bulk delete users by status

Inputs: status (required).

users_bulk_extend_expirationC

Bulk extend expiration date for selected users

Inputs: days (required), userIds (required).

users_bulk_reset_trafficC

Bulk reset traffic for selected users

Inputs: userIds (required).

users_bulk_revoke_subscriptionB

Bulk revoke subscriptions for selected users

Inputs: userIds (required).

users_bulk_updateB

Bulk update selected users (async, returns 202)

Inputs: userIds (required), tag, email, status, +7 more.

users_bulk_update_squadsC

Bulk update internal squad assignments for selected users

Inputs: userIds (required), activeInternalSquads (required).

users_createB

Create a new VPN user in Remnawave

Inputs: expireAt (required), username (required), tag, email, +8 more.

users_deleteA

Permanently delete a Remnawave user

Inputs: userId (required).

users_disableA

Disable a Remnawave user (block VPN access)

Inputs: userId (required).

users_enableA

Enable a disabled Remnawave user (restore VPN access)

Inputs: userId (required).

users_extend_expirationA

Extend user subscription by N days (expired users become ACTIVE with +N days from now; active users get +N days added)

Inputs: days (required), userId (required).

users_getA

Get a specific Remnawave user by their numeric ID (API 3.x: uuid is gone, id is the primary key)

Inputs: userId (required).

users_get_by_emailA

Find Remnawave users by their email (via the users stream filter)

Inputs: email (required).

users_get_by_short_uuidB

Get a Remnawave user by their short UUID

Inputs: shortUuid (required).

users_get_by_tagB

Find Remnawave users by tag (via the users stream filter)

Inputs: tag (required).

users_get_by_telegram_idA

Find Remnawave users by their Telegram ID (via the users stream filter)

Inputs: telegramId (required).

users_get_by_usernameC

Get a Remnawave user by their username

Inputs: username (required).

users_listB

List all Remnawave VPN users with pagination

Inputs: size, start.

users_reset_trafficB

Reset traffic counter for a Remnawave user

Inputs: userId (required).

users_resolveA

Resolve a single user by numeric ID, short UUID, or username (provide exactly one)

Inputs: id, username, shortUuid.

users_revoke_subscriptionB

Revoke subscription for a Remnawave user (generates new subscription link)

Inputs: userId (required).

users_streamB

Stream users with cursor pagination and filters (status, traffic strategy, telegramId, email, tag, external squad)

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

users_subscription_request_historyB

Get subscription request history for a specific user

Inputs: userId (required).

users_tags_listB

List all user tags

Inputs: no named parameters.

users_updateB

Update an existing Remnawave user (identified by numeric ID)

Inputs: id (required), tag, email, status, +9 more.

Tool Schema Changelog

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

Loading tool schema changelog…

    TDQS

    C2.5/5.0

    Scored across 190 tools

    Disambiguation1/5

    Numerous tools have overlapping purposes, such as multiple lookup methods for users (users_get, users_get_by_username, users_get_by_short_uuid, users_get_by_telegram_id, users_get_by_email, users_stream, users_resolve) and several bulk operation tools that vary only slightly. This makes it difficult for an agent to select the correct tool, leading to frequent misselection.

    Naming Consistency4/5

    The naming pattern is largely consistent, using a resource_action convention (e.g., users_list, nodes_create, hosts_delete). Most tools follow this pattern, though there are minor deviations such as 'subscription_info' vs 'subscriptions_get_by_id' and 'keygen_get' which uses 'get' for generation. Overall, the pattern is predictable.

    Tool Count1/5

    With 190 tools, this is far beyond any reasonable scope for a single MCP server. The calibration indicates that 50+ tools are extreme, and this server has nearly four times that amount. The tool surface is overwhelming and would likely cause confusion and inefficiency for agents.

    Completeness4/5

    The tool set covers all major resources (users, nodes, hosts, squads, subscriptions, billing, config profiles, plugins, etc.) with full CRUD operations and lifecycle management. There are no obvious missing operations for the domain; the massive number of tools suggests thorough coverage. Minor gaps may exist (e.g., password management), but overall the surface is complete.

    Maintenance

    ActivityMaintained
    ResponsivenessOutdated data

    Related MCP Connectors

    Related MCP Servers

    • A
      license
      B
      quality
      F
      maintenance
      An MCP server that enables LLM clients to manage Remnawave VPN panels through 51 specialized tools for user, node, and subscription administration. It provides real-time access to panel statistics, health checks, and guided workflows for system diagnostics.
      51
      13 npm
      98
      MIT
    • 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.
      18 npm
      MIT