tplink-deco-mcp-server
This MCP server exposes a local TP-Link Deco mesh Wi-Fi network as callable tools so an LLM client can monitor and manage it without any cloud account.
List every Deco unit (model, role, IP, firmware, internet status, backhaul signal).
Report gateway CPU/memory usage, online client count and current total traffic.
Diagnose internet/WAN status: cable, IPv4/IPv6, public address, gateway and DNS.
Read the router's system log, paged and filterable by severity.
Inspect Wi-Fi SSIDs (main, guest, IoT, MLO) and radio channel settings; optionally include passwords.
List known clients, filter to online only, rename/recategorize them, or forget offline ones.
Block or unblock devices from the internet across the mesh.
Manage DHCP fixed-IP reservations (list, add, update, remove).
Distinguish read-only from modifying tools so clients can request confirmation before changes.
Allows managing and monitoring a TP-Link Deco mesh Wi-Fi network through local router tools: listing Deco nodes, checking router performance and internet status, viewing Wi-Fi configuration, listing/updating/removing clients, blocking/unblocking devices, and managing DHCP address reservations.
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., "@tplink-deco-mcp-server which devices are connected to my Deco mesh right now?"
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.
tplink-deco-mcp-server
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 |
| Deco units of the mesh: model, role, IP, firmware, internet status, backhaul signal. |
| Gateway CPU and memory usage, online clients and total traffic right now. |
| WAN cable, IPv4/IPv6 connection state, public address, gateway and DNS. |
| One page of the router's system log (newest by default): time, facility, level, process and message, filterable by minimum severity. |
| Every SSID (main, guest, IoT, MLO) with its bands, plus each radio's channel settings. Passwords only with |
| Devices known to the mesh: name, MAC, IP, network, band, category, current traffic. Filter: |
| Rename a device and optionally change its category. |
| Forget an offline device. |
| Devices blocked from the internet. |
| Cut a device off from the internet, or let it back in. |
| Fixed IPs reserved by the DHCP server, with the device names. |
| 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-serverRequires 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 |
| yes | — (IP of the main Deco, such as |
| yes | — (the router's local admin password) |
| no |
|
| no |
|
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:latestThe 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-serverSupport
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
Available Tools
15 toolsadd_address_reservationReserve fixed IPAIdempotent
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 clientAIdempotent
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 statusARead-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 performanceARead-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 logARead-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 configurationARead-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 IPsARead-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 clientsARead-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 clientsARead-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 unitsARead-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 IPADestructiveIdempotent
Drop a device's fixed IP reservation; it gets a dynamic address on its next renewal.
Inputs: mac (required). Returns: result
remove_clientForget clientADestructiveIdempotent
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 clientAIdempotent
Restore internet access for a device on the blocklist.
Inputs: mac (required). Returns: result
update_address_reservationChange fixed IPBIdempotent
Move a device's existing fixed IP reservation to another address.
Inputs: ip (required), mac (required). Returns: result
update_clientUpdate clientAIdempotent
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
Scored across 15 tools
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.
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.
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.
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
Related MCP Connectors
Read devices, users, keys, ACLs and DNS for a tailnet; manage devices, routes and auth keys.
Router default logins, compliance index, MAC/OUI lookup. Reads free; submit_correction is Pro.
Tailscale device, route, DNS, key, user, and ACL management over MCP and CLI.
IP intelligence, network diagnostics, and AI service availability tools for AI agents.
Related MCP Servers
- AlicenseBqualityDmaintenanceEnables AI agents to manage TP-Link routers by listing clients, checking status, controlling Wi-Fi, and rebooting via natural language.332MIT
- AlicenseNot gradedqualityCmaintenanceEnables 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
- AlicenseBqualityBmaintenanceEnables 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.16MIT
- AlicenseNot gradedqualityBmaintenanceEnables 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