remnawave-mcp
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| REMNAWAVE_API_KEY | No | Value for the X-Api-Key header when the panel is behind Caddy with a secret path. | |
| REMNAWAVE_PRIVACY | No | Privacy mode: strict (default), basic, or off. | strict |
| REMNAWAVE_BASE_URL | Yes | Remnawave panel address, e.g. https://panel.example.com (without /api) | |
| REMNAWAVE_READONLY | No | true by default. Set to false to enable write commands (also requires a token with write permissions). | true |
| CF_ACCESS_CLIENT_ID | No | Cloudflare Access client ID when the panel is behind Cloudflare Access. | |
| REMNAWAVE_API_TOKEN | Yes | Remnawave API token | |
| REMNAWAVE_TIMEOUT_MS | No | Request timeout in milliseconds. | 30000 |
| REMNAWAVE_PRIVACY_SALT | No | Any long string used as a salt so pseudonyms do not change after restart. | |
| CF_ACCESS_CLIENT_SECRET | No | Cloudflare Access client secret when the panel is behind Cloudflare Access. | |
| REMNAWAVE_TOOLS_EXCLUDE | No | Comma-separated list of tools to hide. | |
| REMNAWAVE_TOOLS_INCLUDE | No | Comma-separated list of tools to keep; only these tools will be available. | |
| REMNAWAVE_MAX_RESPONSE_CHARS | No | Maximum number of characters for long responses before truncation. | 60000 |
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 | {} |
| prompts | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| find_userB | Find users by any identifier: id, username, shortUuid, telegramId, email or tag. Returns full user objects. Use this instead of guessing which endpoint to call. |
| panel_overviewA | One-call panel summary: users by status and online, node list with online/offline state, users online and traffic per node, bandwidth (2 days / 7 days / month) and subscriptions expiring soon. Start here for "how is the panel doing" questions. |
| user_reportA | Everything about one client in one call: subscription and status, devices (HWID), traffic per day and per node for the last N days, recent subscription requests (apps, IP pseudonyms). Identify the user by id, username, telegramId, email, shortUuid or a pseudonym. |
| sharing_suspectsA | Find clients who probably share their subscription: many different IPs / apps in recent subscription requests, and top users by number of HWID devices. Only counts and pseudonyms are returned. Cheap: reads panel history, does not touch the nodes. |
| geocheck_nodeA | Run GeoCheck on a node and wait for the result (how services see the node IP: country, blocks). The base64 SVG image is dropped, only the raw report is returned. Uses node traffic: repeated calls for the same node within the cooldown return the previous result. |
| node_connectionsA | Get users currently connected to a node with their IPs and last-seen time (starts a job and waits). |
| user_connectionsA | Get a user's current connections (IPs per node) — starts a job and waits for the result. |
| generate_x25519B | Generate 30 X25519 keypairs [READ] GET /api/system/tools/x25519/generate |
| get_all_inboundsA | Get all inbounds from all config profiles [READ] GET /api/config-profiles/inbounds |
| get_api_token_scopesA | 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. [READ] GET /api/tokens/scopes |
| get_bandwidth_statsC | Get Bandwidth Stats [READ] GET /api/system/stats/bandwidth |
| get_computed_config_profile_by_uuidB | Get computed config profile by uuid [READ] GET /api/config-profiles/:uuid/computed-config |
| get_config_profile_by_uuidB | Get config profile by uuid [READ] GET /api/config-profiles/:uuid |
| get_config_profilesC | Get config profiles [READ] GET /api/config-profiles/ |
| get_configurationB | Get Remnawave Configuration Returns some of the configuration values. [READ] GET /api/system/configuration |
| get_external_squad_by_uuidB | Get external squad by uuid [READ] GET /api/external-squads/:uuid |
| get_external_squadsB | Get all external squads [READ] GET /api/external-squads/ |
| get_hostB | Get a host by UUID [READ] GET /api/hosts/:uuid |
| get_hostsB | Get hosts [READ] GET /api/hosts/ |
| get_hosts_tagsB | Get tags of hosts [READ] GET /api/hosts/tags |
| get_http_statsC | Get HTTP Stats [READ] GET /api/system/stats/http |
| get_hwid_devicesB | 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. [READ] GET /api/hwid/devices |
| get_hwid_devices_statsC | Get HWID devices stats [READ] GET /api/hwid/devices/stats |
| get_inbounds_by_profile_uuidA | Get inbounds by profile uuid [READ] GET /api/config-profiles/:uuid/inbounds |
| get_infra_billing_nodesC | Get infra billing nodes [READ] GET /api/infra-billing/nodes |
| get_infra_billing_recordsB | Get infra billing history [READ] GET /api/infra-billing/history |
| get_infra_providerC | Get infra provider by uuid [READ] GET /api/infra-billing/providers/:uuid |
| get_infra_providersB | Get all infra providers [READ] GET /api/infra-billing/providers |
| get_internal_squadB | Get internal squad by uuid [READ] GET /api/internal-squads/:uuid |
| get_internal_squad_accessible_nodesC | Get internal squad accessible nodes [READ] GET /api/internal-squads/:uuid/accessible-nodes |
| get_internal_squad_usageA | 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. [READ] GET /api/bandwidth-stats/internal-squads/:uuid/usage |
| get_internal_squad_user_usageA | 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. [READ] GET /api/bandwidth-stats/internal-squads/:squadUuid/users/:userId/usage |
| get_internal_squadsB | Get all internal squads [READ] GET /api/internal-squads/ |
| get_metadataB | Get Remnawave Information [READ] GET /api/system/metadata |
| get_nodeB | Get node by UUID [READ] GET /api/nodes/:uuid Returns a compact view; pass full: true for the raw panel response. |
| get_node_integrationB | Get Node Integration by uuid [READ] GET /api/node-integrations/:uuid |
| get_node_integrationsB | Get all Node Integrations [READ] GET /api/node-integrations/ |
| get_node_metadataC | Get node metadata [READ] GET /api/metadata/node/:uuid |
| get_node_pluginB | Get Node Plugin by uuid [READ] GET /api/node-plugins/:uuid |
| get_node_pluginsB | Get all Node Plugins [READ] GET /api/node-plugins/ |
| get_node_usageB | 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. [READ] POST /api/bandwidth-stats/nodes/usage |
| get_nodesC | Get nodes [READ] GET /api/nodes/ Returns a compact view; pass full: true for the raw panel response. |
| get_nodes_metricsC | Get Nodes Metrics [READ] GET /api/system/nodes/metrics |
| get_nodes_statisticsC | Get Nodes Statistics [READ] GET /api/system/stats/nodes |
| get_nodes_tagsC | Get nodes tags [READ] GET /api/nodes/tags |
| get_recapC | Get Recap [READ] GET /api/system/stats/recap |
| get_remnawave_healthB | Get Remnawave Health [READ] GET /api/system/health |
| get_remnawave_settingsB | Get Remnawave settings [READ] GET /api/remnawave-settings/ |
| get_shared_listB | Get Shared List by name [READ] GET /api/node-plugins/shared-lists/:name |
| get_shared_listsA | Get Shared Lists (Preview) Returns only the name, type and item count of every shared list. Use "Get Shared List by name" to fetch the items themselves. [READ] GET /api/node-plugins/shared-lists |
| get_snippetsC | Get snippets [READ] GET /api/snippets/ |
| get_statsD | Get Stats [READ] GET /api/system/stats |
| get_stats_digestA | 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. [READ] GET /api/system/stats/digest |
| get_stats_node_users_usageC | Get Node Users Usage by Node UUID [READ] GET /api/bandwidth-stats/nodes/:uuid/users |
| get_stats_nodes_usageC | Get Nodes Usage by Range [READ] GET /api/bandwidth-stats/nodes/ |
| get_stats_nodes_users_usageC | Get Nodes Users Usage by Nodes UUIDs [READ] POST /api/bandwidth-stats/nodes/users |
| get_stats_user_usageC | Get User Usage by Range [READ] GET /api/bandwidth-stats/users/:userId |
| get_statusB | Get the status of the authentication [READ] GET /api/auth/status |
| get_subpage_configB | Get subscription page config by uuid [READ] GET /api/subscription-page-configs/:uuid |
| get_subpage_config_by_short_uuidC | Get Subpage Config by Short UUID [READ] GET /api/subscriptions/subpage-config/:shortUuid |
| get_subpage_configsA | Get all subscription page configs [READ] GET /api/subscription-page-configs/ |
| get_subscription_by_idB | Get subscription by User ID [READ] GET /api/subscriptions/by-id/:userId |
| get_subscription_by_short_uuid_protectedC | Get subscription by short uuid (protected route) [READ] GET /api/subscriptions/by-short-uuid/:shortUuid |
| get_subscription_by_usernameB | Get subscription by username [READ] GET /api/subscriptions/by-username/:username |
| get_subscription_info_by_short_uuidD | Get Subscription Info by Short UUID [READ] GET /api/sub/:shortUuid/info |
| get_subscription_request_historyA | 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. [READ] GET /api/subscription-request-history/ |
| get_subscription_request_history_statsC | Get subscription request history stats [READ] GET /api/subscription-request-history/stats |
| get_subscription_settingsB | Get subscription settings [READ] GET /api/subscription-settings/ |
| get_subscription_templateB | Get subscription template by uuid [READ] GET /api/subscription-templates/:uuid |
| get_subscription_templatesB | Get all subscription templates (wihout content) [READ] GET /api/subscription-templates/ |
| get_subscriptionsC | Get all subscriptions [READ] GET /api/subscriptions/ |
| get_top_users_by_hwid_devicesC | Get top users by HWID devices [READ] GET /api/hwid/devices/top-users |
| get_torrent_blocker_reportsB | 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. [READ] GET /api/node-plugins/torrent-blocker |
| get_torrent_blocker_reports_statsB | Get Torrent Blocker Reports Stats [READ] GET /api/node-plugins/torrent-blocker/stats |
| get_user_accessible_nodesC | Get user accessible nodes [READ] GET /api/users/:userId/accessible-nodes |
| get_user_by_idB | Get user by ID [READ] GET /api/users/:userId |
| get_user_by_short_uuidB | Get user by Short UUID [READ] GET /api/users/by-short-uuid/:shortUuid |
| get_user_by_usernameC | Get user by username [READ] GET /api/users/by-username/:username |
| get_user_hwid_devicesC | Get user HWID devices [READ] GET /api/hwid/devices/:userId |
| get_user_metadataC | Get user metadata [READ] GET /api/metadata/user/:userId |
| get_user_subscription_request_historyB | Get user subscription request history, recent 24 records [READ] GET /api/users/:userId/subscription-request-history |
| get_usersB | 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. [READ] GET /api/users/ |
| get_users_streamA | Get all users using cursor-based (keyset) pagination with filtering options [READ] GET /api/users/stream |
| get_users_tagsC | Get users tags [READ] GET /api/users/tags |
| resolve_userB | Resolve a user Resolve a user by ID, Short UUID or username. Exactly one of the fields must be provided. [READ] POST /api/users/resolve |
| test_srr_matcherC | Test SRR Matcher [READ] POST /api/system/testers/srr-matcher |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
| daily_summary | Users, online, offline nodes, traffic, subscriptions expiring soon |
| client_review | Subscription, devices, traffic and recent requests of one client |
| sharing_audit | Clients with many IPs or devices |
| node_check | Offline nodes, load balance, optional GeoCheck of one node |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
TDQS
Scored across 86 tools
The tool set contains many closely related read endpoints, such as multiple subscription lookups by different identifiers and numerous stats/usage tools (e.g., get_stats, get_bandwidth_stats, get_stats_digest, get_node_usage). Descriptions are detailed and help distinguish some tools, but an agent still faces ambiguity in selecting the right one for a given query.
Most tools follow a consistent snake_case pattern with a get_ prefix for read operations. A few custom tools (user_report, panel_overview, find_user, geocheck_node) deviate slightly, but the overall naming is predictable and readable.
With 86 tools, the server is far beyond a well-scoped size (typically 3–15). Many are thin wrappers around individual API endpoints, which creates an overwhelming and hard-to-navigate surface.
The tool set is almost entirely read-only (GET endpoints), with no create, update, or delete operations for users, nodes, subscriptions, or other core resources. For a panel management server, this is a significant gap that will prevent agents from performing lifecycle tasks.