Tapo MCP
MCP server for discovering and controlling TP-Link Tapo smart home devices via AI Agents
Installation
Ajoutez ceci à la configuration MCP de votre client (Claude Desktop : claude_desktop_config.json ; Cursor : .cursor/mcp.json ; VS Code et les autres utilisent la même forme « mcpServers »).
ghcr.io/mihai-dinculescu/tapo-mcp:0.6.0claude mcp add tapo-mcp -e 'TAPO_MCP_USERNAME=<your tapo_mcp_username>' -e 'TAPO_MCP_PASSWORD=<your tapo_mcp_password>' -e 'TAPO_MCP_CAMERA_USERNAME=<your tapo_mcp_camera_username>' -e 'TAPO_MCP_CAMERA_PASSWORD=<your tapo_mcp_camera_password>' -e 'TAPO_MCP_DISCOVERY_TARGET=<TAPO_MCP_DISCOVERY_TARGET>' -e 'TAPO_MCP_API_KEY=<your tapo_mcp_api_key>' -e 'TAPO_MCP_ALLOWED_HOSTS=<TAPO_MCP_ALLOWED_HOSTS>' -e 'TAPO_MCP_PUBLIC_URL=<TAPO_MCP_PUBLIC_URL>' -e 'TAPO_MCP_DISCOVERY_TIMEOUT=5' -e 'TAPO_MCP_DISCOVERY_INTERVAL=600' -e 'OTEL_EXPORTER_OTLP_ENDPOINT=<OTEL_EXPORTER_OTLP_ENDPOINT>' -- docker run -i --rm ghcr.io/mihai-dinculescu/tapo-mcp:0.6.0
{
"mcpServers": {
"tapo-mcp": {
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"ghcr.io/mihai-dinculescu/tapo-mcp:0.6.0"
],
"env": {
"TAPO_MCP_USERNAME": "<your tapo_mcp_username>",
"TAPO_MCP_PASSWORD": "<your tapo_mcp_password>",
"TAPO_MCP_CAMERA_USERNAME": "<your tapo_mcp_camera_username>",
"TAPO_MCP_CAMERA_PASSWORD": "<your tapo_mcp_camera_password>",
"TAPO_MCP_DISCOVERY_TARGET": "<TAPO_MCP_DISCOVERY_TARGET>",
"TAPO_MCP_API_KEY": "<your tapo_mcp_api_key>",
"TAPO_MCP_ALLOWED_HOSTS": "<TAPO_MCP_ALLOWED_HOSTS>",
"TAPO_MCP_PUBLIC_URL": "<TAPO_MCP_PUBLIC_URL>",
"TAPO_MCP_DISCOVERY_TIMEOUT": "5",
"TAPO_MCP_DISCOVERY_INTERVAL": "600",
"OTEL_EXPORTER_OTLP_ENDPOINT": "<OTEL_EXPORTER_OTLP_ENDPOINT>"
}
}
}
}
Variables d'environnement
TAPO_MCP_USERNAMEobligatoire secret TP-Link Tapo account emailTAPO_MCP_PASSWORDobligatoire secret TP-Link Tapo account passwordTAPO_MCP_CAMERA_USERNAMEsecret Optional camera account username; required for taking camera snapshotsTAPO_MCP_CAMERA_PASSWORDsecret Optional camera account password; required for taking camera snapshotsTAPO_MCP_DISCOVERY_TARGETobligatoire Network target for device discovery (e.g. 192.168.1.255)TAPO_MCP_API_KEYsecret Optional Bearer token for API authenticationTAPO_MCP_ALLOWED_HOSTSOptional comma-separated Host header allowlist; replaces the loopback-only defaultTAPO_MCP_PUBLIC_URLOptional base URL clients reach the server at; enables short-lived snapshot linksTAPO_MCP_DISCOVERY_TIMEOUTDevice discovery timeout in seconds; must be between 1 and 60TAPO_MCP_DISCOVERY_INTERVALSeconds between background device discoveries that refresh the device list; must be at least TAPO_MCP_DISCOVERY_TIMEOUT and at most 86400 (one day); tool calls wait while a discovery runs, so a short interval delays them more oftenOTEL_EXPORTER_OTLP_ENDPOINTOptional OpenTelemetry collector endpoint for tracing
Documentation
Tirée du README du projet sur GitHub, actualisée chaque semaine. Les liens ouvrent GitHub.
Sommaire
Tapo
[![License][license_badge]][license] [![Crates][crates_badge]][crates] [![Documentation][crates_documentation_badge]][crates_documentation] [![Crates.io][crates_downloads_badge]][crates] [![PyPI][pypi_badge]][pypi] [![Python][pypi_versions_badge]][pypi] [![PyPI][pypi_downloads_badge]][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, P125, P125M, TP10), power strips (P300, P304M, P306, P316M), hubs (H100, H110, H200, H500), switches (S200B, S200D, S210), sensors (KE100, T100, T110, T300, T310, T315) and cameras (C120, C210, C220, C225, C325WB, C520WS, TC40, TC70).
[license_badge]: https://img.shields.io/crates/l/tapo.svg [license]: https://github.com/mihai-dinculescu/tapo/blob/main/LICENSE [crates_badge]: https://img.shields.io/crates/v/tapo.svg?logo=rust&color=F75101 [crates]: https://crates.io/crates/tapo [crates_documentation_badge]: https://img.shields.io/docsrs/tapo.svg?logo=rust&color=F75101 [crates_documentation]: https://docs.rs/tapo [crates_downloads_badge]: https://img.shields.io/crates/d/tapo?logo=rust&label=downloads&color=F75101
[pypi_badge]: https://img.shields.io/pypi/v/tapo.svg?logo=pypi&color=00ADD4 [pypi]: https://pypi.org/project/tapo [pypi_versions_badge]: https://img.shields.io/pypi/pyversions/tapo.svg?logo=python&color=00ADD4 [pypi_downloads_badge]: https://img.shields.io/pypi/dm/tapo?logo=python&color=00ADD4
Supported Devices
See [/SUPPORTED_DEVICES.md][supported_devices] for the supported devices and feature matrix.
Rust Library
Usage
Cargo.toml
[dependencies]
tapo = "0.11"
main.rs
let device = ApiClient::new("<tapo-username>", "tapo-password")
.p110("<device ip address>")
.await?;
device.on().await?;
Examples
export TAPO_USERNAME=
export TAPO_PASSWORD=
export IP_ADDRESS=
cargo run --example tapo_l530
See all examples in [/tapo/examples][examples].
Python Library
Usage
pip install tapo
client = ApiClient("<tapo-username>", "tapo-password")
device = await client.p110("<device ip address>")
await device.on()
Examples
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=
uv run python examples/tapo_p110.py
See all examples in [/tapo-py/examples][examples-py].
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][tapo_mcp] for setup and usage.
Community Projects
- [tapo-rest][tapo_rest] — a REST wrapper of this library that can be deployed as a service or serve as an advanced example.
- [tapoviz][tapoviz] — audio-reactive and screen-reactive lighting for L920/L930 LED strips, with a local web UI.
Troubleshooting
See [/TROUBLESHOOTING.md][troubleshooting] for solutions to common issues.
Contributing
Contributions are welcome and encouraged! See [/CONTRIBUTING.md][contributing].
Sponsors
A big thank you to the sponsors of this project!
- [abler98][sponsor_abler98]
- [nathanja][sponsor_nathanja]
- [santiago-salas-v][sponsor_santiago_salas_v]
Credits
Created and maintained by [Mihai Dinculescu][author].
Inspired by [petretiandrea/plugp100][inspired_by_plugp100] and [python-kasa/python-kasa][inspired_by_kasa].
[supported_devices]: https://github.com/mihai-dinculescu/tapo/blob/main/SUPPORTED_DEVICES.md [examples]: https://github.com/mihai-dinculescu/tapo/tree/main/tapo/examples [examples-py]: https://github.com/mihai-dinculescu/tapo/tree/main/tapo-py/examples [tapo_mcp]: https://github.com/mihai-dinculescu/tapo/tree/main/tapo-mcp [tapo_rest]: https://github.com/ClementNerma/tapo-rest [tapoviz]: https://github.com/The-DarkMatter/tapoviz [troubleshooting]: https://github.com/mihai-dinculescu/tapo/blob/main/TROUBLESHOOTING.md [contributing]: https://github.com/mihai-dinculescu/tapo/blob/main/CONTRIBUTING.md [sponsor_abler98]: https://github.com/abler98 [sponsor_nathanja]: https://github.com/nathanja [sponsor_santiago_salas_v]: https://github.com/santiago-salas-v [author]: https://mihai.dinculescu.dev [inspired_by_plugp100]: https://github.com/petretiandrea/plugp100 [inspired_by_kasa]: https://github.com/python-kasa/python-kasa
Questions fréquentes
Qu'est-ce que Tapo MCP ?
MCP server for discovering and controlling TP-Link Tapo smart home devices via AI Agents
Comment installer Tapo MCP ?
Il s'exécute sur votre machine. Dans Claude Code : claude mcp add tapo-mcp -e 'TAPO_MCP_USERNAME=<your tapo_mcp_username>' -e 'TAPO_MCP_PASSWORD=<your tapo_mcp_password>' -e 'TAPO_MCP_CAMERA_USERNAME=<your tapo_mcp_camera_username>' -e 'TAPO_MCP_CAMERA_PASSWORD=<your tapo_mcp_camera_password>' -e 'TAPO_MCP_DISCOVERY_TARGET=<TAPO_MCP_DISCOVERY_TARGET>' -e 'TAPO_MCP_API_KEY=<your tapo_mcp_api_key>' -e 'TAPO_MCP_ALLOWED_HOSTS=<TAPO_MCP_ALLOWED_HOSTS>' -e 'TAPO_MCP_PUBLIC_URL=<TAPO_MCP_PUBLIC_URL>' -e 'TAPO_MCP_DISCOVERY_TIMEOUT=5' -e 'TAPO_MCP_DISCOVERY_INTERVAL=600' -e 'OTEL_EXPORTER_OTLP_ENDPOINT=<OTEL_EXPORTER_OTLP_ENDPOINT>' -- docker run -i --rm ghcr.io/mihai-dinculescu/tapo-mcp:0.6.0. Pour les autres clients, collez la configuration JSON de cette page dans leurs réglages MCP.
Faut-il une clé API pour Tapo MCP ?
Oui. Il attend TAPO_MCP_USERNAME, TAPO_MCP_PASSWORD, TAPO_MCP_CAMERA_USERNAME, TAPO_MCP_CAMERA_PASSWORD, TAPO_MCP_DISCOVERY_TARGET, TAPO_MCP_API_KEY, à renseigner dans sa configuration.
Tapo MCP est-il open source ?
Oui. Son code est sur GitHub sous licence MIT.
Qui maintient Tapo MCP ?
Il est publié par mihai-dinculescu. AI.tn le référence sans le maintenir ni le recommander.
Issu du registre MCP officiel. Être listé n'est pas une recommandation : vérifiez le code et les permissions d'un serveur avant de lui donner accès à vos données.