remnawave-mcp-server
Allows managing Remnawave panel users, including looking up users by Telegram ID, enabling/disabling users, and managing subscription settings.
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-server list all users"
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-server
MCP server for Remnawave panel API. Manage VPN users, nodes, hosts, and system stats from Claude Code or any MCP-compatible client.
Tools
Users
Tool | Description |
| List users with pagination |
| Get user by UUID, username, telegram ID, or email |
| Create new user |
| Update user properties |
| Permanently delete user |
| Enable disabled user |
| Disable user (suspend VPN) |
| Revoke subscription, regenerate credentials |
| Reset traffic counter to zero |
Nodes
Tool | Description |
| List all XRay nodes |
| Get node details by UUID |
| Update node settings (address, config profile/inbounds, traffic limits, tags, note) |
| Enable node |
| Disable node |
| Restart single node (sends |
| Restart all nodes |
Note: panel 2.8.0 requires
forceRestartin the single-node restart body and honors it (older panels ignored the flag and skipped the restart when the config hash matched). The tool sendsforceRestart=trueby default.force_cycle=truedisables and re-enables the node instead - a heavier fallback that also re-establishes the panel-node connection (briefly drops its connections).
Hosts
Tool | Description |
| List all subscription hosts |
| Get host details by UUID |
| Create a host on a config profile inbound |
| Update host properties |
| Permanently delete a host |
Squads
Tool | Description |
| List inbound groups (with inbound UUIDs) |
| Update squad name/inbounds (replaces the inbound set) |
| List tariff plans |
Config Profiles
Tool | Description |
| List XRay config profiles with inbound UUIDs |
| Full raw XRay config JSON + inbounds + attached nodes |
| Replace a profile's XRay config and/or rename it |
Subscriptions
Tool | Description |
| View global subscription settings |
System
Tool | Description |
| User counts, traffic, server resources |
| Panel process health (runtime metrics per process) |
| Per-node bandwidth over a date range |
| Per-user traffic on one node over a date range |
| Real-time node metrics |
| Node provisioning SECRET_KEY (sensitive) |
Related MCP server: mcp-impresario
Configuration
Claude Code (.mcp.json)
{
"mcpServers": {
"remnawave-mcp": {
"command": "uvx",
"args": ["--from", "git+https://github.com/ssasuoirafen/remnawave-mcp-server", "remnawave-mcp"],
"env": {
"REMNAWAVE_API_URL": "https://panel.example.com",
"REMNAWAVE_API_USERNAME": "your-username",
"REMNAWAVE_API_PASSWORD": "your-password"
}
}
}
}Variable | Description |
| Panel root URL, no |
| Admin username |
| Admin password |
| Optional. Set to |
Targets Remnawave panel 2.8.x and carries forward-compat guards for known 2.9.0 changes (bodyless
DELETEresponses, removal of the by-telegram-id/by-email user endpoints, the keygenpubKey→secretKeyrename).
Development
git clone https://github.com/ssasuoirafen/remnawave-mcp-server.git
cd remnawave-mcp-server
uv syncLicense
MIT
Available Tools
34 toolsremnawave_create_hostA
Create a subscription host (MUTATES PROD: enabled hosts appear in user subscriptions immediately). Requires the config profile + inbound pair the host points at (UUIDs via remnawave_list_config_profiles).
Inputs: params (required). Returns: result
remnawave_create_userA
Create a new VPN user. Requires username and expiration date. Returns created user details including subscription URL.
Inputs: params (required). Returns: result
remnawave_delete_hostADestructive
Permanently delete a host (MUTATES PROD: it disappears from user subscriptions). Cannot be undone.
Inputs: params (required). Returns: result
remnawave_delete_userBDestructive
Permanently delete a user by UUID. This action cannot be undone.
Inputs: params (required). Returns: result
remnawave_disable_nodeAIdempotent
Disable a node, stopping it from accepting new connections.
Inputs: params (required). Returns: result
remnawave_disable_userBIdempotent
Disable a user account, suspending VPN access. Can be re-enabled later.
Inputs: params (required). Returns: result
remnawave_enable_nodeBIdempotent
Enable a disabled node, allowing it to accept connections.
Inputs: params (required). Returns: result
remnawave_enable_userAIdempotent
Enable a disabled user account, restoring VPN access.
Inputs: params (required). Returns: result
remnawave_get_bandwidth_statsARead-onlyIdempotent
Get historical bandwidth for all nodes over a date range: per-node totals, peak days, and the fleet-wide total.
Inputs: params (required). Returns: result
remnawave_get_config_profileARead-onlyIdempotent
Get one config profile with its FULL raw XRay config JSON (inbounds/outbounds/ routing), registered inbounds with UUIDs, and attached nodes.
Inputs: params (required). Returns: result
remnawave_get_hostARead-onlyIdempotent
Get detailed info about a single host by UUID.
Inputs: params (required). Returns: result
remnawave_get_keygenARead-onlyIdempotent
Get the panel's node provisioning key (SECRET_KEY env for remnanode). SENSITIVE: anyone holding this key can connect a node to the panel. Handles both field names: pubKey (<=2.8.x) and secretKey (2.9.0+).
Inputs: no named parameters. Returns: result
remnawave_get_nodeARead-onlyIdempotent
Get detailed info about a single node by UUID.
Inputs: params (required). Returns: result
remnawave_get_node_metricsARead-onlyIdempotent
Get real-time metrics for all nodes: users online, traffic per inbound (upload/download).
Inputs: no named parameters. Returns: result
remnawave_get_node_users_usageARead-onlyIdempotent
Historical per-user traffic on ONE node over a date range (daily totals + top users). Complements remnawave_get_bandwidth_stats (all nodes) and remnawave_get_node_metrics (realtime).
Inputs: params (required). Returns: result
remnawave_get_subscription_settingsARead-onlyIdempotent
Get global subscription settings: profile title, update interval, support link, Happ routing, custom headers.
Inputs: no named parameters. Returns: result
remnawave_get_system_healthARead-onlyIdempotent
Check panel health. Shows Node.js runtime metrics (RSS, heap, event loop lag, uptime) per panel process (api/scheduler/processor).
Inputs: no named parameters. Returns: result
remnawave_get_system_statsARead-onlyIdempotent
Get system-wide statistics: user counts by status, online stats, node count, total traffic, server CPU/memory.
Inputs: no named parameters. Returns: result
remnawave_get_userARead-onlyIdempotent
Get a single user by UUID, shortUuid, username, telegram ID, or email. Specify exactly one identifier.
Inputs: params (required). Returns: result
remnawave_list_config_profilesARead-onlyIdempotent
List all XRay config profiles with their inbounds (protocol, transport, port).
Inputs: no named parameters. Returns: result
remnawave_list_external_squadsARead-onlyIdempotent
List all external squads (tariff plans). Shows name and user count.
Inputs: no named parameters. Returns: result
remnawave_list_hostsARead-onlyIdempotent
List all subscription hosts with addresses, SNI, security settings, and assigned nodes.
Inputs: no named parameters. Returns: result
remnawave_list_internal_squadsARead-onlyIdempotent
List all internal squads (inbound groups). Shows name, user count, and inbound count.
Inputs: no named parameters. Returns: result
remnawave_list_nodesARead-onlyIdempotent
List all XRay nodes with connection status, traffic, version info, and hardware specs.
Inputs: no named parameters. Returns: result
remnawave_list_usersARead-onlyIdempotent
List all VPN users with pagination. Returns username, status, traffic usage, expiration date, and squads.
Inputs: params (required). Returns: result
remnawave_reset_user_trafficAIdempotent
Reset a user's traffic counter to zero.
Inputs: params (required). Returns: result
remnawave_restart_all_nodesAIdempotent
Restart XRay on ALL enabled nodes. By default sends forceRestart=true so the panel skips its config-hash check; pass force=false to use the panel's hash-based decision (which often skips the restart).
Inputs: params. Returns: result
remnawave_restart_nodeAIdempotent
Restart XRay on one node (MUTATES PROD: interrupts the node briefly). Default mode sends forceRestart (panel 2.8.0+ requires it in the body); force=true skips the config-hash check like the UI's restart-all. force_cycle=true disables and re-enables the node instead - heavier, also re-establishes the panel-node link.
Inputs: params (required). Returns: result
remnawave_revoke_userADestructive
Revoke a user's subscription, regenerating their credentials. Old subscription links stop working.
Inputs: params (required). Returns: result
remnawave_update_config_profileADestructiveIdempotent
Update a config profile (MUTATES PROD: replaces the XRay config that nodes run;
a bad config can take user traffic down). config overwrites the whole document.
Nodes apply it on their next config sync/restart.
Inputs: params (required). Returns: result
remnawave_update_hostAIdempotent
Update a host (MUTATES PROD: changes flow into user subscriptions). Only provided fields change; tags/nodes replace their whole set.
Inputs: params (required). Returns: result
remnawave_update_internal_squadAIdempotent
Update an internal squad (MUTATES PROD: changes which inbounds its members
get). inbounds replaces the full set.
Inputs: params (required). Returns: result
remnawave_update_nodeAIdempotent
Update node settings (MUTATES PROD). Changing the config profile / inbounds re-syncs what the node serves. Only provided fields change.
Inputs: params (required). Returns: result
remnawave_update_userAIdempotent
Update an existing user. Identify by UUID (preferred) or username. Only provided fields will be changed.
Inputs: params (required). Returns: result
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 34 tools
Each tool targets a distinct resource and action combination (e.g., create_user, delete_host, get_node_metrics). Descriptions clearly differentiate overlapping functions like bandwidth stats vs node metrics vs user usage. No ambiguity exists.
All tools follow a consistent 'remnawave_verb_noun' pattern with snake_case. Verbs are action-oriented (create, delete, get, list, enable, etc.) and nouns are descriptive (user, host, node, config_profile). No deviations or mixed styles.
34 tools is high for most domains, but the Remnawave panel's scope (user, node, host, profile, squad, and system management) justifies a larger surface. However, it exceeds the typical 3-15 range for a well-scoped server, making it borderline heavy.
The tool set covers many operations but has notable gaps: no create/delete for nodes or config profiles, and only list/update for squads (no create/delete). These missing CRUD operations will cause agent failures when full lifecycle management is needed.
Maintenance
Related MCP Connectors
Cloud-hosted MCP server for URnetwork VPN and Proxy
Customer support for MCP servers: work your tickets from Claude or any MCP client. Service key auth.
Secure and manage MCP servers through the Speakeasy AI Control Plane from your agent.
Related MCP Servers
- AlicenseAqualityDmaintenanceMCP server for Claude Code to interact with OpenClaw AI agents (Daemon, Soren, Ash, etc.) via the gateway API, providing tools to ask agents, list them, and check their status.3959 npmMIT
- AlicenseNot gradedqualityDmaintenanceMCP server for Claude Code to execute commands on any remote server over SSH. Provides tools for remote execution, file operations, and connection info.1MIT

@krovacloud/mcpofficial
AlicenseAqualityBmaintenanceMCP server for interacting with the Krova Cloud API, enabling AI assistants like Claude to manage cloud resources.37MIT
erebrus-mcpofficial
AlicenseBqualityDmaintenanceMCP server for deploying and managing Erebrus decentralized VPN nodes, API keys, and file uploads.40GPL 3.0