list_devicesLABSCO SUMMARY
Your Tapo devices, reachable from the same place as everything else the agent uses.
Discovery is the part worth setting up carefully: give it the right broadcast address for your network and the devices show up on their own, rather than being enumerated by hand every time one gets a new address.
What it is
The MCP server that ships alongside an unofficial Tapo API client. It discovers devices on your network and presents them as AI-callable tools and resources over Streamable HTTP.
What you get
- Control of the device families the underlying client covers: light bulbs L510, L520, L530, L535, L610 and L630; light strips L900, L920 and L930; plugs P100, P105, P110, P110M and P115; power strips P300, P304M, P306 and P316M; the H100 hub; switches S200B, S200D and S210; sensors KE100, T100, T110, T300, T310 and T315; and cameras C210, C220, C225, C325WB, C520WS, TC40 and TC70
- Network discovery driven by a broadcast target you set, rather than requiring every device address to be listed by hand
- Optional bearer-token authentication on the server itself
- Optional OpenTelemetry tracing to a collector you nominate
Requirements
A published container image, ghcr.io/mihai-dinculescu/tapo-mcp (the project's docker run uses the latest tag), speaking Streamable HTTP at http://localhost:3000/. Three settings are required: TAPO_MCP_USERNAME and TAPO_MCP_PASSWORD for the TP-Link Tapo account, and TAPO_MCP_DISCOVERY_TARGET for the network broadcast address to discover on, such as 192.168.1.255. The container image also needs TAPO_MCP_API_KEY, a bearer token you choose: it listens on 0.0.0.0:3000 and will not start on a non-loopback address without one. Optional: TAPO_MCP_DISCOVERY_TIMEOUT in seconds with a default of 5, and OTEL_EXPORTER_OTLP_ENDPOINT for tracing. The device support matrix in the repository lists which features each model actually has. This is an unofficial client, not a TP-Link product.
Setup effort
One command plus a key — docker run --rm --network host -e TAPO_MCP_USERNAME="you@example.com" -e TAPO_MCP_PASSWORD="<YOUR_TAPO_PASSWORD>" -e TAPO_MCP_CAMERA_USERNAME="<YOUR_CAMERA_ACCOUNT_USERNAME>" -e TAPO_MCP_CAMERA_PASSWORD="<YOUR_CAMERA_ACCOUNT_PASSWORD>" -e TAPO_MCP_DISCOVERY_TARGET="192.168.1.255" -e TAPO_MCP_API_KEY="<YOUR_TAPO_MCP_API_KEY>" ghcr.io/mihai-dinculescu/tapo-mcp:latest
USE CASES
Turning something on or off from a conversation
Plugs, bulbs and strips are exposed as tools, so switching one is a request rather than an app on your phone.
Reading what a sensor says
The T-series temperature and contact sensors and the KE100 valve sit behind the H100 hub and come through the same server.
Checking power usage
The energy-monitoring plugs and strips report through the same client, so consumption becomes something you can ask about.
Finding the devices in the first place
Set the broadcast target for your subnet and raise the discovery timeout if a device is slow to answer.
Locking down the endpoint
Set the API key and every request must present it as a bearer token — worth doing before the server is reachable beyond your own machine.
5 tools
Listed in project docs. Your client may show a different list.
check_deviceget_device_statecontrol_devicetake_snapshotBEFORE YOU INSTALL
What to know first
Tools you get
5 tools named in the project's documentation.
Requires
- docker on PATH
- TAPO_MCP_USERNAME in your environment
- TAPO_MCP_PASSWORD in your environment
- TAPO_MCP_DISCOVERY_TARGET in your environment
- TAPO_MCP_API_KEY in your environment
INSTALLATION
Connect your client
This project publishes no client configuration, so the entry for your client is yours to write.
Server setup
docker run --rm \
--network host \
-e TAPO_MCP_USERNAME="<YOUR_TAPO_MCP_USERNAME>" \
-e TAPO_MCP_PASSWORD="<YOUR_TAPO_PASSWORD>" \
-e TAPO_MCP_CAMERA_USERNAME="<YOUR_CAMERA_ACCOUNT_USERNAME>" \
-e TAPO_MCP_CAMERA_PASSWORD="<YOUR_CAMERA_ACCOUNT_PASSWORD>" \
-e TAPO_MCP_DISCOVERY_TARGET="192.168.1.255" \
-e TAPO_MCP_API_KEY="<YOUR_TAPO_MCP_API_KEY>" \
ghcr.io/mihai-dinculescu/tapo-mcp:latestThe docker run command sets everything with -e: TAPO_MCP_USERNAME and TAPO_MCP_PASSWORD are your Tapo account email and password, TAPO_MCP_DISCOVERY_TARGET is your network's broadcast address, and the camera account is only needed for take_snapshot. The image listens on 0.0.0.0:3000, so it refuses to start without TAPO_MCP_API_KEY, a token you choose. In your client, add http://localhost:3000/ as a Streamable HTTP server, with the header Authorization: Bearer <your TAPO_MCP_API_KEY>. Discovery needs --network host, which Docker supports only on Linux, so devices will not be found from Docker on macOS or Windows.