mcp-remnawave
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., "@mcp-remnawave which nodes are offline?"
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.
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
Настройка
Переменная | Обязательна | Описание |
| да | URL панели, например |
| да | API-токен из настроек панели |
| нет | Доп. ключ для панели за Caddy с кастомным путём — уходит в |
| нет |
|
За 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 toolsapi_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).
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
Scored across 190 tools
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.
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.
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.
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
Related MCP Connectors
Manage CloudPepper servers, Odoo instances, backups, and deployments over MCP.
Cloud-hosted MCP server for URnetwork VPN and Proxy
Official xCloud MCP: manage servers, sites, WordPress, SSL, backups and deploys from any MCP client.
Remote MCP server for Web3TV creators — manage your account over MCP.
Related MCP Servers
- AlicenseBqualityFmaintenanceAn 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.5113 npm98MIT
- AlicenseAqualityBmaintenanceMCP server for Remnawave panel API. Manage VPN users, nodes, hosts, and system stats from Claude Code or any MCP-compatible client.341MIT
- FlicenseNot gradedqualityDmaintenanceEnables comprehensive Mattermost administration and operations, including managing users, teams, channels, messages, plugins, and admin console settings through MCP tools.1-
- 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.18 npmMIT