universal-tplink-mcp
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| PYTHONPATH | No | Path to the universal-tplink-mcp repository, as shown in the MCP configuration example | |
| TPLINK_PASSWORD | Yes | Router administrator password | |
| TPLINK_ROUTER_IP | No | Router IP or base URL, for example http://192.168.1.1 |
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": false
} |
| prompts | {
"listChanged": false
} |
| resources | {
"subscribe": false,
"listChanged": false
} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| router_profile_checkA | Inspects the current host network environment (SSID, Gateway) to ensure connection safety. Use this tool before applying configuration changes to confirm that the host is connected to the target router and not University Wi-Fi (e.g. SLIIT) or a mobile hotspot. |
| router_get_statusA | Retrieves full device, cellular LTE, RF signal metrics, and WAN network status. Args: force: Set to True to bypass Network Guard SSID/Gateway validation. |
| router_get_rf_signalB | Retrieves real-time 4G LTE RF signal metrics (RSRP, RSRQ, SNR, EARFCN, PCI, Signal Bars). Guides router placement and antenna alignment for maximum 4G speed in Sri Lanka (e.g. Malabe/SLIIT). |
| router_set_cell_lockA | Locks or unlocks the router to a specific cellular base station tower (EARFCN + PCI). IMPORTANT: Changing the cell tower momentarily drops and renegotiates the cellular link. You MUST provide confirm=True to execute. Args: enable: True to lock to cell, False to unlock (return to auto roaming). earfcn: E-UTRA Absolute Radio Frequency Channel Number (e.g. '1550' for Band 3). pci: Physical Cell Identity (e.g. '58'). confirm: Safety confirmation. Set to True to proceed with connection renegotiation. force: Set to True to bypass Network Guard safety check. |
| router_set_dnsA | Configures custom DNS resolvers on the router's WAN connection. Args: primary_dns: Primary DNS IP (e.g. '8.8.8.8' for Google DNS, '1.1.1.1' for Cloudflare). secondary_dns: Secondary DNS IP (default '8.8.8.8'). force: Set to True to bypass Network Guard safety check. |
| router_toggle_ipv6A | Enables or disables the IPv6 stack on the router's cellular connection. Disabling IPv6 is recommended if Hutch IPv6 routing is introducing dual-stack timeout delays. Args: enable: True to enable IPv6, False to disable. force: Set to True to bypass Network Guard safety check. |
| router_run_ussdA | Executes a USSD query on the cellular SIM card (e.g. '*344#' for Hutch quota, '*123#' for balance). Args: code: USSD string to send. force: Set to True to bypass Network Guard safety check. |
| router_read_smsA | Reads incoming or sent SMS messages from the router SIM inbox (e.g. package expiry alerts). Args: limit: Maximum number of SMS messages to retrieve (default 10). folder: Message folder ('inbox' or 'sent'). force: Set to True to bypass Network Guard safety check. |
| router_send_smsB | Sends an SMS message through the router SIM card. Args: to_phone: Recipient phone number. message: Message text content. force: Set to True to bypass Network Guard safety check. |
| router_get_connected_clientsB | Retrieves all connected wired and wireless devices currently on the router LAN. Returns hostnames, IP addresses, MAC addresses, and lease durations. |
| router_manage_dhcp_reservationA | Manages static DHCP IP address reservations on the router. Args: action: 'add', 'delete', or 'list'. mac: Hardware MAC address (e.g. 'AA:BB:CC:DD:EE:FF', required for 'add' or 'delete'). ip: Desired reserved IP address (required for 'add'). confirm: Confirmation required for 'add' or 'delete'. force: Set to True to bypass Network Guard safety check. |
| router_get_data_limitB | Retrieves monthly cellular data allowance, billing cycle start day, and live bandwidth. |
| router_set_data_limitA | Configures monthly cellular data quota, billing day reset, and usage alert threshold. Args: limit_mb: Total monthly data allowance in Megabytes (e.g. 50000 for 50GB). payment_day: Day of month when billing cycle resets (1-31). warning_percent: Threshold percent to trigger alert (e.g. 90). enable: True to enforce quota, False to disable. confirm: Confirmation required to apply data quota limits. force: Set to True to bypass Network Guard safety check. |
| router_get_wifi_networksC | Retrieves status, SSIDs, channels, and operational state of 2.4 GHz and 5 GHz Wi-Fi radios. |
| router_set_wifi_radioA | Enables or disables a Wi-Fi radio (2.4GHz or 5GHz) and optionally updates its SSID. IMPORTANT: Disabling the Wi-Fi band you are currently connected to will disconnect your host! You MUST provide confirm=True to execute. Args: band: '2.4GHz' or '5GHz'. enable: True to enable radio, False to disable. ssid: Optional new SSID name. confirm: Safety confirmation. Set to True to apply radio changes. force: Set to True to bypass Network Guard safety check. |
| router_get_led_statusB | Retrieves the physical LED status and night mode schedule. |
| router_set_led_night_modeA | Configures night mode to turn off router front panel LEDs automatically during sleeping hours. Args: enable: True to activate night mode schedule, False to disable. start_time: 'HH:MM' time when LEDs turn OFF (e.g. '22:00'). end_time: 'HH:MM' time when LEDs turn back ON (e.g. '07:00'). force: Set to True to bypass Network Guard safety check. |
| router_run_diagnosticC | Runs a router-side diagnostic self-test verifying physical link, WAN IP, and Internet NCSI reachability. |
| router_set_lte_bandA | Manually locks router to a specific LTE band (e.g. '3' for 1800MHz, '8' for 900MHz, '40' for 2300MHz, or 'auto'). Essential for locking to optimal Hutch/Dialog 4G towers in Sri Lanka (e.g. Malabe). IMPORTANT: Changing bands triggers cellular radio renegotiation. Args: band: LTE Band number (e.g. '3', '8', '40') or 'auto'. confirm: Safety confirmation. Set to True to execute band change. force: Set to True to bypass Network Guard safety check. |
| router_calibrateA | Runs autonomous RF band calibration across LTE frequencies (Band 8, 3, 1, 40, Auto) with 45s watchdog fail-safe. Launches a real-time Live Web Dashboard on http://localhost:8765. During band switches, the router modem temporarily detaches for 5-15 seconds. The local daemon safeguards against permanent disconnection by auto-reverting if WAN drops for >45s. Args: web: Launch real-time Web UI on localhost:8765 (default: True). port: Web dashboard port (default: 8765). dry_run: Simulate band switches without modem detachment. confirm: Confirmation flag to execute calibration. |
| router_rebootA | Initiates a graceful reboot of the TP-Link router. IMPORTANT: Rebooting will terminate the host's internet and Wi-Fi connection for ~60-90 seconds. You MUST provide confirm=True to execute. Args: confirm: Safety confirmation. Set to True to trigger the restart. force: Set to True to bypass Network Guard safety check. |
| router_get_system_logsA | Retrieves system and cellular event logs from the TP-Link router. Args: lines: Maximum number of recent log entries to return (default: 50). module: Optional filter by subsystem (e.g. '4G', 'DHCP', 'System', 'DNS'). min_level: Optional minimum severity filter ('EMERG', 'ALERT', 'CRIT', 'ERROR', 'WARN', 'NOTICE', 'INFO', 'DEBUG'). force: Set to True to bypass Network Guard safety check. |
| router_clear_system_logsA | Clears the internal system event log buffer on the router. Args: confirm: Safety confirmation. Set to True to clear logs. force: Set to True to bypass Network Guard safety check. |
| router_get_guest_wifiA | Retrieves current dual-band (2.4GHz / 5GHz) Guest Wi-Fi status, SSIDs, and isolation settings. Args: force: Set to True to bypass Network Guard safety check. |
| router_set_guest_wifiB | Configures or toggles dual-band Guest Wi-Fi networks and local LAN isolation. Args: band: Target band ('2.4GHz', '5GHz', or 'both'). enabled: Enable (True) or disable (False) Guest Wi-Fi on selected band. ssid: Custom SSID name for the guest network. password: WPA2-PSK password (minimum 8 characters, or empty string '' for open network). allow_lan: If True, guests can reach LAN devices; if False, guests are isolated to Internet-only. confirm: Confirmation flag to apply configuration. force: Set to True to bypass Network Guard safety check. |
| router_get_port_forwardingA | Lists active NAT Virtual Server port forwarding rules on the cellular WAN interface. Args: force: Set to True to bypass Network Guard safety check. |
| router_add_port_forwardingA | Creates a new NAT virtual server port forwarding rule on the router. Args: name: Service or descriptive name (e.g. 'web', 'ssh', 'minecraft'). external_port: Incoming WAN port or port range (e.g. '8080' or '8000-8010'). internal_ip: LAN destination IP address (e.g. '192.168.1.150'). internal_port: LAN destination port (defaults to external_port if omitted). protocol: Transport protocol ('TCP', 'UDP', or 'ALL'). confirm: Confirmation flag to add rule. force: Set to True to bypass Network Guard safety check. |
| router_del_port_forwardingC | Deletes an existing NAT virtual server port forwarding rule by stack ID. Args: rule_stack: Stack identifier of the rule to remove (e.g. '2,1,1,1,0,0'). confirm: Confirmation flag to delete rule. force: Set to True to bypass Network Guard safety check. |
| router_get_dmzB | Retrieves DMZ (Demilitarized Zone) host forwarding status and destination IP. Args: force: Set to True to bypass Network Guard safety check. |
| router_set_dmzB | Enables or disables DMZ host forwarding to an internal IP address. Args: enabled: True to enable DMZ, False to disable. ip_address: Internal IP address to receive all unmapped incoming traffic. confirm: Confirmation flag to modify DMZ. force: Set to True to bypass Network Guard safety check. |
| router_get_upnpB | Retrieves Universal Plug and Play (UPnP) status and active dynamic port mappings. Args: force: Set to True to bypass Network Guard safety check. |
| router_set_upnpB | Enables or disables UPnP dynamic port forwarding on the router. Args: enabled: True to enable UPnP, False to disable. confirm: Confirmation flag to modify UPnP. force: Set to True to bypass Network Guard safety check. |
| router_get_reboot_scheduleA | Retrieves the automated periodic reboot schedule settings. Args: force: Set to True to bypass Network Guard safety check. |
| router_set_reboot_scheduleA | Configures or disables automated daily or weekly periodic router reboots. Args: enabled: True to enable auto-reboot, False to disable. hours: Hour of the day in 24h format (0-23, default: 3). minutes: Minute of the hour (0-59, default: 0). mode: Repeat frequency ('daily' or 'weekly'). day_of_week: Day of week for weekly mode (1=Mon, 2=Tue, ..., 7=Sun). confirm: Confirmation flag to apply schedule. force: Set to True to bypass Network Guard safety check. |
| router_get_timeB | Retrieves current router system clock, time zone, daylight savings, and NTP server status. Args: force: Set to True to bypass Network Guard safety check. |
| router_sync_timeA | Triggers an immediate NTP network time synchronization on the router. Args: force: Set to True to bypass Network Guard safety check. |
| router_get_operation_modeB | Retrieves the active router operation mode (3G/4G Router Mode vs Wireless Router Mode). Args: force: Set to True to bypass Network Guard safety check. |
| router_get_ddnsA | Retrieves Dynamic DNS (DDNS) provider configurations (TP-Link Cloud, No-IP, DynDNS). Args: force: Set to True to bypass Network Guard safety check. |
| router_check_firmwareB | Checks for available online official TP-Link firmware updates. Args: force: Set to True to bypass Network Guard safety check. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
TDQS
Scored across 39 tools
Most tools target a distinct resource+action pair (DNS, DMZ, UPnP, guest Wi-Fi, port forwarding), but the cellular-tuning cluster overlaps: router_set_cell_lock, router_set_lte_band, and router_calibrate all renegotiate the radio to different towers/bands. Similarly router_get_status, router_get_rf_signal, and router_run_diagnostic partially overlap in connectivity reporting, though descriptions do help separate them.
Strong, predictable router_<verb>_<noun> pattern throughout (router_get_*, router_set_*, router_add_*, router_del_*), with a consistent shared arg vocabulary (confirm, force). Minor deviations: router_manage_dhcp_reservation uses a vague 'manage' verb instead of add/delete/list, router_profile_check is noun_verb order, and 'del' is abbreviated where other tools spell things out.
39 tools is heavy for a single router surface and pushes well past the comfortable 3-15 range, with several near-duplicate getters that could be folded into a single status call. Each tool does map to a real router feature, so it is not gratuitous padding, but the surface is on the bloated side.
Coverage is broad and balanced: DHCP reservations, DNS, IPv6, Wi-Fi radios, guest networks, NAT/DMZ/UPnP, SMS/USSD, data quotas, logs, scheduling, and diagnostics are all present with get/set pairs. Gaps remain: firmware is check-only (no update action), and there is no WPS, MAC/access-control filtering, or static routing surface.