NestDaddy

Tapo MCP

io.github.mihai-dinculescu/tapo-mcp ยท v0.7.0

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

Connect Runs on your machine

Terminal
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
claude_desktop_config.json
{
  "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>"
      }
    }
  }
}
~/.cursor/mcp.json
{
  "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>"
      }
    }
  }
}
.vscode/mcp.json
{
  "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

NameDescription
TAPO_MCP_USERNAME
Required, secret
TP-Link Tapo account email
TAPO_MCP_PASSWORD
Required, secret
TP-Link Tapo account password
TAPO_MCP_CAMERA_USERNAME
Optional, secret
Optional camera account username; required for taking camera snapshots
TAPO_MCP_CAMERA_PASSWORD
Optional, secret
Optional camera account password; required for taking camera snapshots
TAPO_MCP_DISCOVERY_TARGET
Required
IP address for device discovery, usually the network's broadcast address (e.g. 192.168.1.255)
TAPO_MCP_API_KEY
Required, 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_HOSTS
Optional
Optional comma-separated Host header allowlist; replaces the loopback-only default
TAPO_MCP_PUBLIC_URL
Optional
Optional base URL clients reach the server at; enables short-lived snapshot links
TAPO_MCP_DISCOVERY_TIMEOUT
Optional
Device discovery timeout in seconds; must be between 1 and 60
TAPO_MCP_DISCOVERY_INTERVAL
Optional
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_ENDPOINT
Optional
Base URL of an OTLP/HTTP collector to export traces to, such as http://localhost:4318; traces go to /v1/traces under it

Details

Packageghcr.io/mihai-dinculescu/tapo-mcp:0.7.0 (OCI, streamable-http)
First published12 Nov 2026
Last updated12 Nov 2026
Registry nameio.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.