MCP server: One MCP server.

Tapo MCP

@mihai-dinculescuMCP server · External

MCP server for discovering and controlling TP-Link Tapo smart home devices via AI Agents

Smart homev0.5.3MITRust
Freeno charge per call

Runs on your machine from its package; the steps are below.

What it does

  1. Reads
  2. Writes
  3. High impact

At most: creates or changes data: records, files, settings.

What it costs

Free

Odel charges nothing per call. The publisher may charge for its own service.

Runs locally over stdio

This server isn't hosted — your MCP client launches it from a package registry. Use one of the commands below, or drop the config into your client (e.g. Claude Desktop).

Dockerghcr.io/mihai-dinculescu/tapo-mcp:0.5.3

Run

docker run -i --rm ghcr.io/mihai-dinculescu/tapo-mcp:0.5.3

MCP client config

{
  "mcpServers": {
    "tapo-mcp": {
      "command": "docker",
      "args": [
        "run",
        "-i",
        "--rm",
        "ghcr.io/mihai-dinculescu/tapo-mcp:0.5.3"
      ]
    }
  }
}
README2 min read

Tapo

License Crates Documentation Crates.io PyPI Python PyPI
Unofficial Tapo API Client. Works with TP-Link Tapo smart devices. Tested with light bulbs (L510, L520, L530, L535, L610, L630), light strips (L900, L920, L930), plugs (P100, P105, P110, P110M, P115), power strips (P300, P304M, P306, P316M), hubs (H100, H200, H500), switches (S200B, S200D, S210), sensors (KE100, T100, T110, T300, T310, T315) and cameras (C210, C220, C225, C325WB, C520WS, TC40, TC70).

Supported Devices

See /SUPPORTED_DEVICES.md for the supported devices and feature matrix.

Rust Library

Usage

Cargo.toml

toml
[dependencies]
tapo = "0.11"

main.rs

rust
let device = ApiClient::new("<tapo-username>", "tapo-password")
    .p110("<device ip address>")
    .await?;

device.on().await?;

Examples

bash
export TAPO_USERNAME=
export TAPO_PASSWORD=
export IP_ADDRESS=

cargo run --example tapo_l530

See all examples in /tapo/examples.

Python Library

Usage

bash
pip install tapo
python
client = ApiClient("<tapo-username>", "tapo-password")
device = await client.p110("<device ip address>")

await device.on()

Examples

bash
cd tapo-py
uv venv # On the initial run only
uv sync --group dev --locked
uv run maturin develop # On the initial run and whenever the Rust code is modified

export TAPO_USERNAME=
export TAPO_PASSWORD=
export IP_ADDRESS=
bash
uv run python examples/tapo_p110.py

See all examples in /tapo-py/examples.

MCP Server

An MCP server that exposes Tapo devices as AI-callable tools and resources via the Model Context Protocol. See /tapo-mcp/README.md for setup and usage.

Community Projects

  • tapo-rest — a REST wrapper of this library that can be deployed as a service or serve as an advanced example.
  • tapoviz — audio-reactive and screen-reactive lighting for L920/L930 LED strips, with a local web UI.

Troubleshooting

See /TROUBLESHOOTING.md for solutions to common issues.

Contributing

Contributions are welcome and encouraged! See /CONTRIBUTING.md.

Sponsors

A big thank you to the sponsors of this project!

Credits

Inspired by petretiandrea/plugp100.

Similar modules

Browse Smart home