Skip to main content
Glama
tplink-deco-mcp-server

tplink-deco-mcp-server

by roquerodrigo

tplink-deco-mcp-server

CI PyPI

Sponsor

Model Context Protocol server that exposes a TP-Link Deco mesh Wi-Fi network as tools an LLM client (Claude Desktop, Claude Code, etc.) can call. It talks to the router on your local network through the tplink-deco-api SDK — no cloud account involved.

Tools

Tool

What it does

list_deco_nodes

Deco units of the mesh: model, role, IP, firmware, internet status, backhaul signal.

get_router_performance

Gateway CPU and memory usage, online clients and total traffic right now.

get_internet_status

WAN cable, IPv4/IPv6 connection state, public address, gateway and DNS.

get_system_log

One page of the router's system log (newest by default): time, facility, level, process and message, filterable by minimum severity.

get_wifi_configuration

Every SSID (main, guest, IoT, MLO) with its bands, plus each radio's channel settings. Passwords only with include_passwords: true.

list_clients

Devices known to the mesh: name, MAC, IP, network, band, category, current traffic. Filter: online_only.

update_client

Rename a device and optionally change its category.

remove_client

Forget an offline device.

list_blocked_clients

Devices blocked from the internet.

block_client / unblock_client

Cut a device off from the internet, or let it back in.

list_address_reservations

Fixed IPs reserved by the DHCP server, with the device names.

add_address_reservation / update_address_reservation / remove_address_reservation

Reserve, move or release a device's fixed IP.

Tools that change settings are annotated as such, so clients can ask for confirmation before running them.

Related MCP server: miwifi-mcp

Install

pip install tplink-deco-mcp-server

Requires Python ≥ 3.14 and a Deco router reachable on the local network.

Configuration

The server reads the router credentials from environment variables:

Variable

Required

Default

DECO_HOST

yes

— (IP of the main Deco, such as 192.168.68.1)

DECO_PASSWORD

yes

— (the router's local admin password)

DECO_USERNAME

no

admin

DECO_TIMEOUT

no

10 (seconds per router request)

NOTE

The router keeps a single session per account. Every login — from this server, the Deco app or another integration — ends the previous one. The server logs in again by itself when its session is taken over, but the Deco app may ask you to log in again after the server has been used.

Use with Claude Desktop / Claude Code

{
  "mcpServers": {
    "deco": {
      "command": "uvx",
      "args": ["tplink-deco-mcp-server"],
      "env": {
        "DECO_HOST": "192.168.68.1",
        "DECO_PASSWORD": "your-password"
      }
    }
  }
}

Run with Docker

A multi-arch image (linux/amd64, linux/arm64) is published to GitHub Container Registry on every release, tagged with the release version (1.2.0, 1.2, 1) and latest:

docker run -d --name deco-mcp \
  -e DECO_HOST=192.168.68.1 \
  -e DECO_PASSWORD=your-password \
  -p 8000:8000 \
  ghcr.io/roquerodrigo/tplink-deco-mcp-server:latest

The container serves Streamable HTTP at http://localhost:8000/mcp, with a health endpoint at /healthz:

{
  "mcpServers": {
    "deco": {
      "type": "http",
      "url": "http://localhost:8000/mcp"
    }
  }
}

The HTTP endpoint has no authentication of its own: keep it on a trusted network or behind a reverse proxy that authenticates. To use stdio instead, run the server binary as the container command:

{
  "mcpServers": {
    "deco": {
      "command": "docker",
      "args": [
        "run", "-i", "--rm",
        "-e", "DECO_HOST", "-e", "DECO_PASSWORD",
        "ghcr.io/roquerodrigo/tplink-deco-mcp-server:latest",
        "tplink-deco-mcp-server"
      ],
      "env": {
        "DECO_HOST": "192.168.68.1",
        "DECO_PASSWORD": "your-password"
      }
    }
  }
}

Command-line options

tplink-deco-mcp-server [--transport {stdio,streamable-http}] [--host HOST] [--port PORT]
                       [--log-level {DEBUG,INFO,WARNING,ERROR}]

stdio is the default transport. --host (default 127.0.0.1) and --port (default 8000) apply to streamable-http.

Run from source

git clone https://github.com/roquerodrigo/tplink-deco-mcp-server.git
cd tplink-deco-mcp-server
uv sync
DECO_HOST=… DECO_PASSWORD=… uv run tplink-deco-mcp-server

Support

This MCP server is built and maintained on personal time, on hardware bought for the purpose. If it is useful to you, consider sponsoring the work — it keeps the devices, the testing and the releases coming.

License

MIT

Available Tools

15 tools
add_address_reservationReserve fixed IPA
Idempotent

Reserve a fixed IP for a device that has none yet.

The device picks the address up on its next DHCP renewal or reconnect. Use update_address_reservation when the device already has one.

Inputs: ip (required), mac (required). Returns: result

block_clientBlock clientA
Idempotent

Block a device from the internet on every Deco unit; it stays on the local network.

name and client_type default to what list_clients shows for the device, so they are only needed for a device the mesh does not list.

Inputs: mac (required), name, client_type. Returns: result

get_internet_statusInternet statusA
Read-only

Report whether the mesh is online and how the gateway reaches the provider.

Returns the WAN cable state, the IPv4 and IPv6 connection state (online/offline, protocol such as pppoe, router error code), the public WAN address with its gateway and DNS servers, and the gateway's LAN address. Use it to diagnose an internet outage.

Inputs: no named parameters. Returns: Whether the mesh is online, and the addresses on both sides of the gateway.

get_router_performanceRouter performanceA
Read-only

Report how busy the gateway is and how much traffic flows through the mesh right now.

Returns CPU and memory usage of the gateway in percent, the number of online clients and the summed instantaneous download and upload rates of every client, in kilobytes per second.

Inputs: no named parameters. Returns: CPU and memory of the gateway plus the traffic of every client right now.

get_system_logSystem logA
Read-only

Read one page of the router's system log, newest page by default.

Returns up to 100 lines from oldest to newest (time, syslog facility and level, the process that wrote it, message), the page count, and the severities that can be passed as severity. Use it to explain outages, PPPoE reconnects, reboots, DHCP or Wi-Fi events. The newest page can hold only a few lines, so read the page before it when more context is needed. The router keeps a limited buffer, so older history may already be gone.

Inputs: page, severity. Returns: One page of up to 100 system-log lines, plus the severities that can be read.

get_wifi_configurationWi-Fi configurationA
Read-only

Describe the Wi-Fi networks the mesh broadcasts and how each radio is tuned.

Returns every network (main, guest, iot, mlo) with its SSID, whether it is enabled, the bands it is broadcast on and whether it is hidden, plus each radio band's channel, channel width, 802.11 mode and backhaul channel. Passwords are left out unless include_passwords is set.

Inputs: include_passwords. Returns: Every SSID the mesh broadcasts and how each radio is tuned.

list_address_reservationsList fixed IPsA
Read-only

List the fixed IPs the DHCP server always hands to the same device.

Returns each reservation's MAC and IP with the device name the mesh shows for that MAC (null when the device is not on the client list), and the most reservations the router accepts.

Inputs: no named parameters. Returns: Every fixed IP reservation and how many the router accepts.

list_blocked_clientsList blocked clientsA
Read-only

List the devices that are blocked from the internet across the whole mesh.

Returns each blocked device's MAC, the name and the category stored with the block.

Inputs: no named parameters. Returns: result

list_clientsList clientsA
Read-only

List the devices (phones, computers, TVs, IoT gadgets) the mesh knows about.

Returns each device's MAC, name, IP, whether it is online, the network it joined (main, guest, iot, mlo), how it connects (wired or the radio band), its category, the Deco unit it is attached to, its instantaneous download/upload rate and whether QoS prioritizes it. The MAC is the key every other client tool takes; find it here first when the user names a device.

Inputs: online_only. Returns: result

list_deco_nodesList Deco unitsA
Read-only

List the Deco units that form the mesh: the gateway and every satellite.

Returns each unit's MAC, name, model, role (master is the gateway), LAN IP, hardware and firmware versions, internet status as the unit sees it, and the backhaul signal level per band.

Inputs: no named parameters. Returns: result

remove_address_reservationRelease fixed IPA
DestructiveIdempotent

Drop a device's fixed IP reservation; it gets a dynamic address on its next renewal.

Inputs: mac (required). Returns: result

remove_clientForget clientA
DestructiveIdempotent

Forget a device that is no longer used, removing it from the client list.

Meant for offline devices: the router lists the device again as soon as it reconnects. This does not block it — use block_client for that.

Inputs: mac (required). Returns: result

unblock_clientUnblock clientA
Idempotent

Restore internet access for a device on the blocklist.

Inputs: mac (required). Returns: result

update_address_reservationChange fixed IPB
Idempotent

Move a device's existing fixed IP reservation to another address.

Inputs: ip (required), mac (required). Returns: result

update_clientUpdate clientA
Idempotent

Rename a device and optionally change its category in the Deco app.

The router only applies an edit that carries a name, so name is always required.

Inputs: mac (required), name (required), client_type. Returns: result

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

Loading tool schema changelog…

    TDQS

    A4.1/5.0

    Scored across 15 tools

    Disambiguation5/5

    Each tool targets a distinct resource+action pair: logs, mesh nodes, performance, WAN status, Wi-Fi config, clients, blocklist, and DHCP reservations never overlap. The few potentially confusable pairs (remove_client vs. block_client, add vs. update_address_reservation) are explicitly disambiguated in the descriptions, and the three diagnostic getters return clearly different data.

    Naming Consistency5/5

    Every tool follows a consistent snake_case verb_noun pattern (get_, list_, update_, add_, remove_, block_, unblock_) with resource names that match across families (client, address_reservation, blocked_clients). No mixed conventions or vague verbs.

    Tool Count5/5

    15 tools sit at the top of the well-scoped range and each earns its place, since the read-only diagnostics, client management, blocklist, and reservation CRUD families are all genuinely distinct capabilities. Nothing feels padded or redundant.

    Completeness4/5

    Client, blocklist, and address-reservation lifecycles are fully covered (list/add/update/remove), and diagnostics span logs, WAN, performance, and Wi-Fi. Gaps remain: Wi-Fi configuration is read-only (no set/update for SSID or password) and there is no reboot or firmware operation, which are common requests for this domain.

    Maintenance

    ActivityMaintained
    ResponsivenessNo recent community issues

    Related MCP Connectors

    Related MCP Servers

    • A
      license
      Not graded
      quality
      C
      maintenance
      Enables AI assistants to interact with Xiaomi/Redmi routers, providing read-only queries and management capabilities such as device listing, port forwarding, DHCP reservations, and reboot control.
      MIT
    • A
      license
      B
      quality
      B
      maintenance
      Enables Claude Code and other MCP clients to inspect and manage a TP-Link router over stdio, including device lists, DHCP leases and reservations, Wi-Fi settings, firmware and IP status, mesh nodes, and safe raw endpoint requests with confirmation for writes and secret masking.
      16
      MIT
    • A
      license
      Not graded
      quality
      B
      maintenance
      Enables LLM/MCP clients to read and, when explicitly allowed, modify TP-Link Archer AX53 router settings directly over the LAN using the router's own web protocol, without a browser or cloud account. It is read-first, write-gated, and lockout-aware, with tools for clients, DHCP, Wi-Fi, access control, presence history, and other router operations.
      MIT