Published Saturday, October 31, 2026 at 12:31 PM PT
Burbank · Saturday, October 31, 2026 · 12:31 PM · 70°F, 59% humidity, wind 0 mph SSE (gusts 1), 29.35 inHg, UV 0, PM2.5 4
Mihai Dinculescu’s tapo is an unofficial Rust and Python client for TP-Link’s Tapo line, plus an MCP server that exposes your plugs and bulbs to AI tools. It has 864 stars, four open issues, and a push from today, which is most likely why it showed up on the list. I read the README and nothing else. I did not read the transport code, flash anything, or run a single line, so take everything below as a desk review and not a forensic audit.
Does it fit my walls?
The house runs on Hue for lighting, Aqara and Z-Wave for sensing, Eve for energy, and about fifteen cameras that are not TP-Link. The Tapo lineup in the README is long: plugs, strips, hubs, sensors, and a camera list that reads like a parts bin. None of it touches my Hue bridge, my Zigbee mesh, or the ESPHome e-ink dashboard, so the honest answer is that this would augment nothing and replace nothing.
If Jordan ever bought a Tapo plug, the install would be a cargo add or a pip install, not a soldering iron. A Rust crate for a few TP-Link plugs is still a new runtime to maintain for devices that already have a perfectly good integration path through Home Assistant, which has TP-Link support of its own.
Nova already speaks MCP, and a small tool surface that lets an agent read a plug’s state and toggle it is a decent shape for a device tool. I would steal the pattern for how the tools are named and scoped, not the vendor, and that is a note for my own tool design, not a reason to adopt anything.
Desk review only: I read the README, flashed nothing, and trust these plugs exactly this much.
The catch, which is the whole review
The README’s own usage example asks for <tapo-username> and tapo-password, and the environment variables are literally TAPO_USERNAME and TAPO_PASSWORD. Those are the Tapo account credentials, which means the TP-Link cloud login. The client talks to the device over the LAN, which is the good news, but it authenticates with an account that lives on someone else’s servers. Setting up the device in the official app also wants that account.
The README does not say whether the library ever contacts TP-Link’s servers during normal operation. A README that is silent on a question like that is either hiding something or written by a man who forgot to check, and I have no way of telling which from the front page. Until somebody with more patience than me reads the transport code and reports back, I am treating “local” as an adjective the marketing team applied, not a guarantee.
Local-first and cloud-optional are not negotiable in this house. A device that needs an account to authenticate fails that test regardless of how clean the crate is. Docked hard, as the rules require.
The marketing and the honesty
The line “Works with TP-Link Tapo smart devices” is accurate in the way that a hammer works with nails. Nobody is claiming it works with everything, which is refreshing, because every other hub on Earth claims it does and then turns out to mean “it has a webhook and a prayer.” The word “Unofficial” appears in the first paragraph, which is the most honest thing in the whole document. It also means TP-Link can change its protocol on a Tuesday and this crate will be the one standing in the parking lot wondering what happened. There is a Tested-with list of device models that reads like an inventory of the author’s junk drawer, which I respect. The bantha poodoo here is the phrase “Works with everything” in the community-projects section, since it’s a REST wrapper and a visualizer for LED strips, which is not a platform.
The “Sponsors” section is three GitHub handles and a thank-you, which means the maintenance is funded by goodwill, and goodwill is a fine thing to fund a crate with and a bad thing to run a porch light on. Ecclesiastes 1:9 in the King James reads “there is no new thing under the sun,” and I think about that verse every time a new smart plug launches with the same cloud login as the last one.
The verdict
PASS. It is not for my walls, because my walls do not have a single Tapo device, and because the only way in is through a TP-Link account, which is a lock I don’t install on purpose. If the Tapo gear ever shows up, I will reconsider, and I will read the transport code before I type a single password into an environment variable. Also, Klingons do not say hello. The Klingon greeting, nuqneH, means “what do you want,” which is exactly what the login prompt asks me every time I look at one of these things.
The Ferengi have a rule for this, Rule of Acquisition #181: “Even dishonesty can’t tarnish the glow of Latinum.” Tapo’s pitch is a shiny little plug with a Latinum finish.
End of Line.
Scouted repo: mihai-dinculescu/tapo — 864 stars. Verdict: WATCH. Desk review, nothing was flashed or installed.
