MCP (Model Context Protocol) server for 3x-ui — an Xray/V2Ray proxy management panel. Exposes the 3x-ui HTTP API as MCP tools so LLMs can manage inbounds, clients, routing rules, Xray service, and…
Mcp Server For 3x Ui is an MCP project maintained in the pyworkload/3x-ui-mcp repository. The maintainer describes its purpose as “MCP (Model Context Protocol) server for 3x-ui — an Xray/V2Ray proxy management panel. Exposes the 3x-ui HTTP API as MCP tools so LLMs can manage…”. Read the project documentation for the complete scope.
Project documentation · Repository · Discovery listing. This profile records the public documentation checked on 2026-10-08.
Check the linked publisher documentation and your connected client's tool list. Names and availability can vary with the server version and account permissions.
| Tool | What it does |
|---|---|
| list_inbounds | List all inbound connections |
| get_inbound | Get inbound by ID |
| create_inbound | Create a new inbound |
| update_inbound | Update an existing inbound |
| delete_inbound | Delete an inbound |
| set_inbound_enable | Enable/disable an inbound without rewriting its settings |
| reset_inbound_traffic | Zero one inbound's traffic counters |
| delete_all_inbound_clients | Remove every client from an inbound, keeping the inbound |
| bulk_delete_inbounds | Delete several inbounds in one call |
| get_all_inbound_links | Counts the connection URLs and links to the full list (full=true inlines them) |
| list_inbounds_slim | Inbounds with client arrays trimmed — the cheap listing for large panels |
| get_inbound_options | Picker projection: id, remark, tag, protocol, port, capability flags |
| get_inbound_fallbacks | Fallback rules on a master VLESS/Trojan TCP-TLS inbound |
| set_inbound_fallbacks | Replace the whole fallback list (restarts Xray) |
| set_inbound_sub_sort_index | Set an inbound's position in subscription output |
| add_client | Create a client and attach it to one or more inbounds (inbound_ids) |
| update_client | Update a client by email (only supplied fields change; UUID preserved) |
| delete_client | Delete a client by email (optional keep_traffic) |
| get_client | Get a client's full config and its inbound attachments, by email |
| list_clients | Paged, searchable, filterable client list |
| attach_client | Attach an existing client to more inbounds |
| detach_client | Detach a client from given inbounds |
| bulk_create_clients | Create many clients across the same inbounds |
| bulk_delete_clients | Delete many clients by email |
| get_client_traffic | Get client traffic stats by email |
| get_client_ips | Get IPs used by a client |
| clear_client_ips | Clear recorded client IPs |
| reset_client_traffic | Reset traffic counters for a client by email |
| reset_all_traffics | Reset all inbound traffic counters |
| reset_all_client_traffics | Reset traffic for every client (panel-wide) |
| bulk_reset_traffic | Reset traffic for a specific set of clients |
| delete_depleted_clients | Delete clients with exhausted traffic/expired (panel-wide) |
| get_online_clients | List currently connected clients |
| get_last_online | Last-online timestamp for every client |
| update_client_traffic | Set specific upload/download byte counters for a client |
| get_subscription_links | Connection URLs served under a subscription ID, as JSON |
| get_client_links | Connection URLs for one client by email, one per inbound |
| get_happ_link | Encrypted happ://crypt5 link wrapping a client's subscription, for the Happ app |
| preview_client_renewal | When a quota renewal schedule fires next, in the panel's time zone; saves nothing |
| get_clients_by_telegram_id | Find clients by Telegram user ID |
| list_client_devices | HWID devices registered for a client |
| delete_client_device | Remove one registered device, freeing an HWID slot |
| clear_client_devices | Drop every registered device for a client |
| bulk_enable_clients | Enable many clients, one rewrite per owning inbound |
| bulk_disable_clients | Disable many clients, one rewrite per owning inbound |
| bulk_adjust_clients | Shift expiry and quota for many clients — the bulk renewal |
| delete_orphan_clients | Delete clients attached to no inbound, with their records |
| export_clients | Counts the clients and links to the full export (full=true inlines it) |
| import_clients | Create clients from an exported array; existing emails are skipped |
| set_client_external_links | Replace a client's external links and subscriptions |
| list_clients_paged | Server-side filtering, sorting and paging over clients |
| bulk_attach_clients | Attach many clients to many inbounds at once |
| bulk_detach_clients | Detach many clients from many inbounds at once |
| get_active_inbounds | Inbound tags that carried traffic, grouped by node |
| get_online_clients_by_node | Online clients grouped by the node serving them |
| get_client_ips_by_node | Per-client source IPs grouped by the node that saw them |
| server_status | Get server system status (CPU, RAM, disk, uptime) |
| restart_xray | Restart Xray service |
| stop_xray | Stop Xray service |
| get_xray_config | Summarizes the running Xray config and links to the full JSON (full=true inlines it) |
| get_xray_versions | List available Xray versions |
| install_xray | Install a specific Xray version |
| get_logs | Get panel service logs |
| get_xray_logs | Get Xray core logs |
| get_settings | Get panel settings |
| get_default_xray_config | Get default Xray configuration |
| restart_panel | Restart the 3x-ui panel |
| generate_key | Generate key material: UUID, X25519 (Reality), VLESS encryption, ML-KEM-768, ML-DSA-65 |
| scan_reality_target | Probe one REALITY candidate and report whether it is usable |
| scan_reality_targets | Probe domains, IPs or CIDR ranges, ranked by feasibility and latency |
| get_xray_template | Summarizes the template and links to the full JSON (full=true inlines it) |
| update_xray_template | Update Xray JSON template |
| get_routing_rules | List all routing rules (and the balancers they reference) |
| add_routing_rule | Add a routing rule |
| remove_routing_rule | Remove a routing rule by index |
| update_routing_rule | Update a routing rule by index |
| get_outbounds | List all outbounds |
| get_outbounds_traffic | Get outbound traffic statistics |
| reset_outbound_traffic | Reset traffic for an outbound tag |
| test_outbound | Test connectivity of an outbound |
| get_balancers | Balancer definitions plus their live state in the running core |
| set_balancer_override | Pin a balancer to one outbound, or release it back to its strategy |
| test_route | Ask the core which outbound it would pick for a synthetic connection |
| list_outbound_subs | List outbound subscriptions — remote URLs supplying extra outbounds |
| preview_outbound_sub | Parse a subscription URL without saving it |
| create_outbound_sub | Add an outbound subscription |
| update_outbound_sub | Update a subscription (only supplied fields change) |
| refresh_outbound_sub | Re-fetch a subscription now and return its outbounds |
| move_outbound_sub | Move a subscription up/down in priority |
| delete_outbound_sub | Delete an outbound subscription |
| list_hosts | Every host group across all inbounds |
| get_host_group | One group by its ID |
| get_inbound_hosts | The groups attached to one inbound |
| list_host_tags | Distinct tags used across the groups |
| add_host_group | Create a group over a set of inbounds |
| update_host_group | Update a group, keeping the fields you omit |
| delete_host_group | Delete a group and its hosts |
| set_host_group_enable | Enable or disable one group |
| reorder_host_groups | Set the order groups appear in |
| bulk_delete_host_groups | Delete several groups at once |
| bulk_set_host_groups_enable | Flip several groups at once |
| list_sub_balancers | Every subscription balancer in sort order |
| create_sub_balancer | Add one over a set of inbounds |
| update_sub_balancer | Update one, keeping the fields you omit |
| delete_sub_balancer | Remove one |
| list_api_tokens | Token metadata; the values themselves are never returned |
| create_api_token | Mint a scoped token — the plaintext is shown only once |
| set_api_token_enabled | Disable or re-enable a token without deleting it |
| delete_api_token | Delete a token permanently |
| get_warp_data | Warp account state or the stored WireGuard config |
| manage_warp | Register, rotate the IP, apply a license, set rotation, or erase |
| get_nordvpn_data | Countries, servers in a country, or the stored account |
| manage_nordvpn | Register with a token, set a key, or erase |
| get_pia_data | Regions, servers in a region, or the stored account |
| manage_pia | Log in, register a key against a server, or erase |
| get_fail2ban_status | Whether per-client IP limits can be enforced on this host |
| get_web_cert_files | This panel's own TLS certificate and key paths |
| get_cert_hash | SHA-256 of a certificate, for pinning |
| get_remote_cert_hash | SHA-256 of a remote server's live certificate |
| generate_ech_cert | An ECH keypair and config list for one SNI |
| update_geofile | Download fresh GeoIP/GeoSite data files |
| get_panel_update_status | How the last panel self-update ended |
| set_update_channel | Switch between the stable and dev channels |
| update_panel | Self-update the panel (it restarts) |
| get_amneziawg_logs | Live AmneziaWG peer activity and events |
| get_node_descendants | The nodes below this panel in the cluster tree |
| get_client_ips_table | The aggregated client-IP table behind IP limits |
| backup_to_telegram | Send a database backup to the admin Telegram chats |
| test_smtp | Test SMTP with stage-by-stage reporting |
| test_telegram_bot | Send a test message through the configured bot |
| validate_regex | Compile a pattern with the panel's Go RE2 engine |
| get_default_settings | Preview what a fresh install would compute |
| get_factory_defaults | The shipped default per setting key |
| update_admin_credentials | Change the panel admin username and password |
| list_nodes | Configured nodes with health, counts and last heartbeat |
| get_node | One node's connection details and sync state |
| get_node_history | CPU or memory history for one node |
| get_node_web_cert | The certificate and key paths that exist on the node |
| test_node | Probe connection details without saving them |
| list_node_inbounds | The inbounds available on a node, for selective sync |
| get_node_cert_fingerprint | SHA-256 of the node's leaf certificate, for pinning |
| add_node | Register a node (probed before it is saved) |
| update_node | Update a node, keeping the fields you omit |
| set_node_enable | Pause or resume traffic sync with a node |
| probe_node | Probe a registered node and refresh its cached health |
| delete_node | Delete a node; its inbounds are not migrated |
| get_node_mtls_ca | This panel's node-auth CA, minted on first call |
| set_node_mtls_trust_ca | The CA this panel trusts when acting as a node |
| reload_node_mtls_client | Apply a rotated client certificate without a restart |
| update_node_panels | Run the 3x-ui self-updater on the given nodes |
| list_client_groups | Every group with its member count, including empty ones |
| get_client_group_emails | Emails in one group — the input for a bulk action |
| create_client_group | Create an empty, selectable group |
| rename_client_group | Rename a group and repoint every member |
| delete_client_group | Drop a group, keeping its clients |
| add_clients_to_group | Label many clients with one group |
| remove_clients_from_group | Clear the group label on many clients |
| reset_client_group_traffic | Zero the group counter, leaving per-client counters running |
| get_metrics_history | Time-series for one host metric (cpu, mem, netUp/Down, online, load) |
| get_xray_metrics | Xray runtime metrics state and current expvar values |
| get_xray_metrics_history | Time-series for one Xray runtime metric |
| get_xray_observatory | Latest per-outbound latency and health snapshot |
| get_xray_observatory_history | Probe results over time for one outbound tag |
| get_panel_update_info | Whether a newer 3x-ui release is out |
| list_geodata_files | Geo databases in Xray's asset folder, with layout and category count |
| list_geodata_categories | Categories in one database, with entry counts and attributes |
| list_geodata_entries | The rules inside a category — typed domains or CIDRs |
| validate_geodata_tokens | Report routing tokens that do not resolve, with a reason |
Your assistant inside the workspace — read channels, search history, post messages and tame the noise.
Build a programmable telecommunications stack for connecting telephony services with the Internet via a cloud-based utility.
Inbox intelligence — search, read, draft and send Gmail through your assistant with OAuth auto-setup.
Read and write Jira, Confluence, Bitbucket, JSM and Compass from your AI client — with your own permissions.
Read and send Telegram messages through your assistant — chats, channels and history via the client API.
Enables Discord bot integration with Model Context Protocol (MCP) compatible applications like Claude Desktop.