MCP server for discovering and controlling TP-Link Tapo smart home devices via AI Agents
Connect Runs on your machine
claude mcp add tapo-mcp -e TAPO_MCP_USERNAME=<TAPO_MCP_USERNAME> -e TAPO_MCP_PASSWORD=<TAPO_MCP_PASSWORD> -e TAPO_MCP_CAMERA_USERNAME=<TAPO_MCP_CAMERA_USERNAME> -e TAPO_MCP_CAMERA_PASSWORD=<TAPO_MCP_CAMERA_PASSWORD> -e TAPO_MCP_DISCOVERY_TARGET=<TAPO_MCP_DISCOVERY_TARGET> -e TAPO_MCP_API_KEY=<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=<TAPO_MCP_DISCOVERY_TIMEOUT> -e TAPO_MCP_DISCOVERY_INTERVAL=<TAPO_MCP_DISCOVERY_INTERVAL> -e OTEL_EXPORTER_OTLP_ENDPOINT=<OTEL_EXPORTER_OTLP_ENDPOINT> -- docker run -i --rm ghcr.io/mihai-dinculescu/tapo-mcp:0.7.0
{
"mcpServers": {
"tapo-mcp": {
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"ghcr.io/mihai-dinculescu/tapo-mcp:0.7.0"
],
"env": {
"TAPO_MCP_USERNAME": "<TAPO_MCP_USERNAME>",
"TAPO_MCP_PASSWORD": "<TAPO_MCP_PASSWORD>",
"TAPO_MCP_CAMERA_USERNAME": "<TAPO_MCP_CAMERA_USERNAME>",
"TAPO_MCP_CAMERA_PASSWORD": "<TAPO_MCP_CAMERA_PASSWORD>",
"TAPO_MCP_DISCOVERY_TARGET": "<TAPO_MCP_DISCOVERY_TARGET>",
"TAPO_MCP_API_KEY": "<TAPO_MCP_API_KEY>",
"TAPO_MCP_ALLOWED_HOSTS": "<TAPO_MCP_ALLOWED_HOSTS>",
"TAPO_MCP_PUBLIC_URL": "<TAPO_MCP_PUBLIC_URL>",
"TAPO_MCP_DISCOVERY_TIMEOUT": "<TAPO_MCP_DISCOVERY_TIMEOUT>",
"TAPO_MCP_DISCOVERY_INTERVAL": "<TAPO_MCP_DISCOVERY_INTERVAL>",
"OTEL_EXPORTER_OTLP_ENDPOINT": "<OTEL_EXPORTER_OTLP_ENDPOINT>"
}
}
}
}
{
"mcpServers": {
"tapo-mcp": {
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"ghcr.io/mihai-dinculescu/tapo-mcp:0.7.0"
],
"env": {
"TAPO_MCP_USERNAME": "<TAPO_MCP_USERNAME>",
"TAPO_MCP_PASSWORD": "<TAPO_MCP_PASSWORD>",
"TAPO_MCP_CAMERA_USERNAME": "<TAPO_MCP_CAMERA_USERNAME>",
"TAPO_MCP_CAMERA_PASSWORD": "<TAPO_MCP_CAMERA_PASSWORD>",
"TAPO_MCP_DISCOVERY_TARGET": "<TAPO_MCP_DISCOVERY_TARGET>",
"TAPO_MCP_API_KEY": "<TAPO_MCP_API_KEY>",
"TAPO_MCP_ALLOWED_HOSTS": "<TAPO_MCP_ALLOWED_HOSTS>",
"TAPO_MCP_PUBLIC_URL": "<TAPO_MCP_PUBLIC_URL>",
"TAPO_MCP_DISCOVERY_TIMEOUT": "<TAPO_MCP_DISCOVERY_TIMEOUT>",
"TAPO_MCP_DISCOVERY_INTERVAL": "<TAPO_MCP_DISCOVERY_INTERVAL>",
"OTEL_EXPORTER_OTLP_ENDPOINT": "<OTEL_EXPORTER_OTLP_ENDPOINT>"
}
}
}
}
{
"servers": {
"tapo-mcp": {
"type": "stdio",
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"ghcr.io/mihai-dinculescu/tapo-mcp:0.7.0"
],
"env": {
"TAPO_MCP_USERNAME": "<TAPO_MCP_USERNAME>",
"TAPO_MCP_PASSWORD": "<TAPO_MCP_PASSWORD>",
"TAPO_MCP_CAMERA_USERNAME": "<TAPO_MCP_CAMERA_USERNAME>",
"TAPO_MCP_CAMERA_PASSWORD": "<TAPO_MCP_CAMERA_PASSWORD>",
"TAPO_MCP_DISCOVERY_TARGET": "<TAPO_MCP_DISCOVERY_TARGET>",
"TAPO_MCP_API_KEY": "<TAPO_MCP_API_KEY>",
"TAPO_MCP_ALLOWED_HOSTS": "<TAPO_MCP_ALLOWED_HOSTS>",
"TAPO_MCP_PUBLIC_URL": "<TAPO_MCP_PUBLIC_URL>",
"TAPO_MCP_DISCOVERY_TIMEOUT": "<TAPO_MCP_DISCOVERY_TIMEOUT>",
"TAPO_MCP_DISCOVERY_INTERVAL": "<TAPO_MCP_DISCOVERY_INTERVAL>",
"OTEL_EXPORTER_OTLP_ENDPOINT": "<OTEL_EXPORTER_OTLP_ENDPOINT>"
}
}
}
}
Replace the values in angle brackets with your own. Keys stay on your machine; we never see them.
Tools
This server runs locally, so its tools are listed by your MCP client once it starts.
Environment variables
| Name | Description |
|---|---|
TAPO_MCP_USERNAMERequired, secret | TP-Link Tapo account email |
TAPO_MCP_PASSWORDRequired, secret | TP-Link Tapo account password |
TAPO_MCP_CAMERA_USERNAMEOptional, secret | Optional camera account username; required for taking camera snapshots |
TAPO_MCP_CAMERA_PASSWORDOptional, secret | Optional camera account password; required for taking camera snapshots |
TAPO_MCP_DISCOVERY_TARGETRequired | IP address for device discovery, usually the network's broadcast address (e.g. 192.168.1.255) |
TAPO_MCP_API_KEYRequired, secret | Bearer token that clients send in the Authorization header; the image listens on all interfaces and does not start without it |
TAPO_MCP_ALLOWED_HOSTSOptional | Optional comma-separated Host header allowlist; replaces the loopback-only default |
TAPO_MCP_PUBLIC_URLOptional | Optional base URL clients reach the server at; enables short-lived snapshot links |
TAPO_MCP_DISCOVERY_TIMEOUTOptional | Device discovery timeout in seconds; must be between 1 and 60 |
TAPO_MCP_DISCOVERY_INTERVALOptional | Seconds 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 often |
OTEL_EXPORTER_OTLP_ENDPOINTOptional | Base URL of an OTLP/HTTP collector to export traces to, such as http://localhost:4318; traces go to /v1/traces under it |
Details
| Package | ghcr.io/mihai-dinculescu/tapo-mcp:0.7.0 (OCI, streamable-http) |
| First published | 12 Nov 2026 |
| Last updated | 12 Nov 2026 |
| Registry name | io.github.mihai-dinculescu/tapo-mcp |
More ai and media servers See all
Listing data from the official MCP registry. Status and tools from NestDaddy's daily check. Browse all MCP servers.
