mcp-remnawave
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| REMNAWAVE_API_KEY | No | Доп. ключ для панели за Caddy с кастомным путём — уходит в X-Api-Key | |
| REMNAWAVE_BASE_URL | Yes | URL панели, например https://vpn.example.com | |
| REMNAWAVE_READONLY | No | true отключает все пишущие инструменты (190 → 87) | |
| REMNAWAVE_API_TOKEN | Yes | API-токен из настроек панели |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": true
} |
| prompts | {
"listChanged": true
} |
| resources | {
"listChanged": true
} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| users_listB | List all Remnawave VPN users with pagination |
| users_getA | Get a specific Remnawave user by their numeric ID (API 3.x: uuid is gone, id is the primary key) |
| users_get_by_usernameC | Get a Remnawave user by their username |
| users_get_by_short_uuidB | Get a Remnawave user by their short UUID |
| users_get_by_telegram_idA | Find Remnawave users by their Telegram ID (via the users stream filter) |
| users_get_by_emailA | Find Remnawave users by their email (via the users stream filter) |
| users_get_by_tagB | Find Remnawave users by tag (via the users stream filter) |
| users_streamB | Stream users with cursor pagination and filters (status, traffic strategy, telegramId, email, tag, external squad) |
| users_accessible_nodesB | Get nodes accessible to a specific user |
| users_subscription_request_historyB | Get subscription request history for a specific user |
| users_tags_listB | List all user tags |
| users_resolveA | Resolve a single user by numeric ID, short UUID, or username (provide exactly one) |
| users_createB | Create a new VPN user in Remnawave |
| users_updateB | Update an existing Remnawave user (identified by numeric ID) |
| users_deleteA | Permanently delete a Remnawave user |
| users_enableA | Enable a disabled Remnawave user (restore VPN access) |
| users_disableA | Disable a Remnawave user (block VPN access) |
| users_revoke_subscriptionB | Revoke subscription for a Remnawave user (generates new subscription link) |
| users_reset_trafficB | Reset traffic counter for a Remnawave user |
| users_extend_expirationA | Extend user subscription by N days (expired users become ACTIVE with +N days from now; active users get +N days added) |
| users_bulk_delete_by_statusB | Bulk delete users by status |
| users_bulk_updateB | Bulk update selected users (async, returns 202) |
| users_bulk_reset_trafficC | Bulk reset traffic for selected users |
| users_bulk_revoke_subscriptionB | Bulk revoke subscriptions for selected users |
| users_bulk_deleteB | Bulk delete selected users |
| users_bulk_update_squadsC | Bulk update internal squad assignments for selected users |
| users_bulk_extend_expirationC | Bulk extend expiration date for selected users |
| users_bulk_all_updateB | Update ALL users at once (async, returns 202) |
| users_bulk_all_reset_trafficB | Reset traffic counters for ALL users |
| users_bulk_all_extend_expirationB | Extend expiration date for ALL users |
| nodes_listB | List all Remnawave nodes |
| nodes_getC | Get a specific node by UUID |
| nodes_tags_listA | List all node tags |
| nodes_createB | Create a new node in Remnawave |
| nodes_updateC | Update an existing node |
| nodes_deleteB | Delete a node from Remnawave |
| nodes_enableC | Enable a disabled node |
| nodes_disableC | Disable a node |
| nodes_restartB | Restart a specific node |
| nodes_restart_allB | Restart all nodes |
| nodes_reset_trafficC | Reset traffic counter for a node |
| nodes_reorderC | Reorder nodes by providing each node UUID with its new position |
| nodes_bulk_profile_modificationB | Bulk modify config profile for selected nodes |
| nodes_bulk_actionsC | Bulk actions on selected nodes (enable/disable/restart) |
| nodes_bulk_updateC | Bulk update properties for selected nodes |
| hosts_listB | List all Remnawave hosts |
| hosts_getC | Get a specific host by UUID |
| hosts_tags_listA | List all host tags |
| hosts_createB | Create a new host in Remnawave |
| hosts_updateC | Update an existing host |
| hosts_deleteC | Delete a host from Remnawave |
| hosts_bulk_enableC | Bulk enable selected hosts |
| hosts_bulk_disableC | Bulk disable selected hosts |
| hosts_bulk_deleteA | Bulk delete selected hosts |
| hosts_bulk_updateB | Bulk update fields on selected hosts (replaces the removed set-inbound / set-port endpoints) |
| hosts_reorderB | Reorder hosts by providing each host UUID with its new position |
| system_statsB | Get overall Remnawave panel statistics (users, nodes, traffic, memory, CPU) |
| system_bandwidth_statsC | Get bandwidth statistics |
| bandwidth_stats_users_by_nodesB | Get top per-user bandwidth usage across the given nodes for a date range |
| system_nodes_metricsC | Get detailed node metrics |
| system_nodes_statisticsC | Get node statistics |
| system_healthB | Check Remnawave panel health status |
| system_metadataB | Get Remnawave panel metadata and version information |
| system_configurationB | Get Remnawave panel configuration |
| system_stats_digestB | Get system statistics digest for a date-time range |
| system_stats_httpB | Get HTTP request statistics |
| system_generate_x25519B | Generate X25519 key pair for VLESS Reality |
| auth_statusB | Check current authentication status with Remnawave panel |
| system_stats_recapC | Get system statistics recap |
| system_srr_matcherC | Test subscription request routing rules |
| subscriptions_listC | List all subscriptions with pagination |
| subscriptions_get_by_idC | Get subscription details by user numeric ID |
| subscriptions_get_by_usernameC | Get subscription details by username |
| subscriptions_get_by_short_uuidC | Get subscription details by short UUID |
| subscription_infoC | Get subscription info by short UUID (public endpoint) |
| subscriptions_get_raw_by_short_uuidC | Get raw subscription config by short UUID |
| subscriptions_get_subpage_configD | Get subscription page configuration |
| subscriptions_get_connection_keysB | Get connection keys for a user subscription |
| subscription_request_history_listB | List subscription request history |
| subscription_request_history_statsB | Get subscription request history statistics |
| config_profiles_listB | List all config profiles |
| config_profiles_getB | Get a config profile by UUID |
| inbounds_listB | List all inbounds from all config profiles |
| config_profiles_get_inboundsC | Get inbounds for a specific config profile |
| config_profiles_get_computed_configC | Get computed configuration for a config profile |
| config_profiles_createC | Create a new config profile |
| config_profiles_updateC | Update a config profile |
| config_profiles_deleteC | Delete a config profile |
| config_profiles_reorderB | Reorder config profiles by providing each profile UUID with its new position |
| squads_listB | List all internal squads |
| squads_getA | Get a specific internal squad by UUID |
| squads_accessible_nodesB | Get nodes accessible to a specific squad |
| squads_createC | Create a new internal squad |
| squads_updateC | Update an internal squad |
| squads_deleteB | Delete an internal squad |
| squads_add_usersA | Add specific users to an internal squad (1-1000 per call, async 202) |
| squads_remove_usersA | Remove specific users from an internal squad (1-1000 per call, async 202) |
| squads_add_all_usersA | Add ALL users to an internal squad (async 202) |
| squads_remove_all_usersA | Remove ALL users from an internal squad (async 202) |
| squads_reorderA | Reorder internal squads by providing each squad UUID with its new position |
| hwid_devices_listA | List HWID devices for a specific user |
| hwid_devices_list_allA | List all HWID devices across all users |
| hwid_statsB | Get HWID device statistics |
| hwid_top_usersA | Get users with most HWID devices |
| hwid_device_createB | Create a HWID device entry for a user |
| hwid_device_deleteB | Delete a specific HWID device (identified by user ID + hardware ID) |
| hwid_devices_delete_allC | Delete all HWID devices for a user |
| api_tokens_listA | List all API tokens |
| api_tokens_scopes_listA | List all valid API token scopes |
| api_tokens_createB | Create a new API token (API 3.x: tokens are scoped) |
| api_tokens_deleteB | Delete an API token |
| keygen_getB | Generate a new SECRET_KEY for node configuration |
| billing_providers_listA | List all infrastructure billing providers |
| billing_provider_getA | Get a billing provider by UUID |
| billing_nodes_listB | List all billing nodes |
| billing_history_listC | List billing history |
| billing_provider_createA | Create a new billing provider |
| billing_provider_updateC | Update a billing provider |
| billing_provider_deleteC | Delete a billing provider |
| billing_node_createC | Create a billing node |
| billing_node_updateC | Update a billing node |
| billing_node_deleteC | Delete a billing node |
| billing_history_createC | Create a billing history entry |
| billing_history_deleteB | Delete a billing history entry |
| snippets_listA | List all configuration snippets |
| snippets_createC | Create a new configuration snippet |
| snippets_updateB | Update an existing snippet (identified by name) |
| snippets_deleteC | Delete a snippet by name |
| snippets_syncA | Sync a snippet to the config profiles using it (async, 202) |
| external_squads_listB | List all external squads |
| external_squads_getC | Get an external squad by UUID |
| external_squads_createB | Create a new external squad |
| external_squads_updateC | Update an external squad |
| external_squads_deleteB | Delete an external squad |
| external_squads_add_all_usersB | Add ALL users to an external squad (async 202) |
| external_squads_remove_all_usersA | Remove ALL users from an external squad (async 202) |
| external_squads_reorderC | Reorder external squads |
| settings_getA | Get Remnawave panel settings |
| settings_updateC | Update Remnawave panel settings |
| sub_page_configs_listA | List all subscription page configurations |
| sub_page_configs_getB | Get a subscription page config by UUID |
| sub_page_configs_createB | Create a subscription page configuration |
| sub_page_configs_updateC | Update a subscription page configuration |
| sub_page_configs_deleteB | Delete a subscription page configuration |
| sub_page_configs_reorderC | Reorder subscription page configurations |
| sub_page_configs_cloneC | Clone a subscription page configuration |
| node_plugins_listA | List all node plugins |
| node_plugins_getA | Get a node plugin by UUID |
| node_plugins_torrent_reportsB | Get torrent blocker reports |
| node_plugins_torrent_statsC | Get torrent blocker statistics |
| shared_lists_listB | List all node plugin shared lists |
| shared_lists_getA | Get a node plugin shared list by name |
| node_plugins_createC | Create a new node plugin |
| node_plugins_updateC | Update a node plugin |
| node_plugins_deleteC | Delete a node plugin |
| node_plugins_reorderC | Reorder node plugins |
| node_plugins_cloneC | Clone a node plugin |
| node_plugins_executeC | Execute a node plugin |
| node_plugins_torrent_truncateB | Truncate all torrent blocker reports |
| node_plugins_syncC | Sync a node plugin to its nodes (async, 202) |
| shared_lists_createC | Create a node plugin shared list |
| shared_lists_updateB | Update a node plugin shared list (identified by name) |
| shared_lists_deleteA | Delete a node plugin shared list by name |
| shared_lists_syncA | Sync a shared list to its nodes (async, 202) |
| connections_fetch_by_userA | Fetch active connections for a user (async job, returns jobId) |
| connections_get_user_resultC | Get result of a user connections fetch job |
| connections_fetch_by_nodeA | Fetch connections for all users on a node (async job, returns jobId) |
| connections_get_node_resultC | Get result of a node connections fetch job |
| connections_geocheckB | Run a geolocation check from a node (async job; requires node 3.3.0+) |
| connections_get_geocheck_resultB | Get result of a geocheck job |
| connections_dropA | Drop active connections by user IDs or IP addresses on all or specific nodes (async, 202) |
| node_integrations_listB | List all node integrations |
| node_integrations_getC | Get a node integration by UUID |
| node_integrations_createC | Create a node integration |
| node_integrations_updateC | Update a node integration |
| node_integrations_deleteB | Delete a node integration |
| tags_listA | List all tags used in a domain (config profiles, internal/external squads, node plugins, subscription page configs, subscription templates) |
| tags_assignA | Replace the tags of one entity in a domain (config profiles, internal/external squads, node plugins, subscription page configs, subscription templates) |
| metadata_node_getB | Get metadata for a specific node |
| metadata_user_getC | Get metadata for a specific user |
| metadata_node_upsertB | Create or update metadata for a node |
| metadata_user_upsertB | Create or update metadata for a user |
| subscription_settings_getB | Get Remnawave subscription settings |
| subscription_settings_updateB | Update Remnawave subscription settings (API 3.x: profile title/support link/update interval/HAPP fields moved to custom response headers) |
| subscription_templates_listB | List all subscription templates |
| subscription_templates_getB | Get a subscription template by UUID |
| subscription_templates_createB | Create a new subscription template |
| subscription_templates_updateB | Update an existing subscription template |
| subscription_templates_deleteB | Delete a subscription template |
| subscription_templates_reorderA | Reorder subscription templates by providing each template UUID with its new position |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
| create_user_wizard | Step-by-step guide to create a new VPN user |
| node_diagnostics | Diagnose issues with a specific node |
| traffic_report | Generate a traffic usage report |
| user_audit | Complete audit of a specific user |
| bulk_user_cleanup | Find and manage expired or inactive users |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
| panel-stats | Current Remnawave panel statistics (users, nodes, traffic, system) |
| panel-nodes | Status of all Remnawave nodes (online/offline, traffic) |
| panel-health | Remnawave panel health check |
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.