Server data from the Official MCP Registry
Control WeMo smart home devices - discover, toggle, adjust brightness, and manage HomeKit codes
Control WeMo smart home devices - discover, toggle, adjust brightness, and manage HomeKit codes
Valid MCP server (1 strong, 3 medium validity signals). No known CVEs in dependencies. Package registry verified. Imported from the Official MCP Registry.
13 tools verified · Open access · 1 issue found
Security scores are indicators to help you make informed decisions, not guarantees. Always review permissions before connecting any MCP server.
Add this to your MCP configuration file:
{
"mcpServers": {
"io-github-apiarya-wemo": {
"args": [
"wemo-mcp-server"
],
"command": "uvx"
}
}
}From the project's GitHub README.
Control WeMo smart home devices through AI assistants using natural language.
mcp-name: io.github.apiarya/wemo
Seamlessly integrate WeMo smart home devices with AI assistants through the Model Context Protocol. Built on pywemo, this server enables natural language control of your WeMo devices with intelligent multi-phase discovery.

Control WeMo devices through AI assistants with natural language - just ask in plain English!

"Goodnight" — one command turns off every device in the house
devices:// and device://{id} URIsAll configurations use uvx (from the uv Python package manager) to run the server. Install uv first:
# macOS/Linux
curl -LsSf https://astral.sh/uv/install.sh | sh
# macOS with Homebrew
brew install uv
# Windows
powershell -c "irm https://astral.sh/uv/install.ps1 | iex"
After installation, restart your terminal and verify:
uvx --version
Get started in seconds with Claude Code CLI:
claude mcp add wemo -- uvx wemo-mcp-server
Click your client to install instantly:
| Client | Install |
|---|---|
| Claude Desktop | |
| Claude Code CLI | Run: claude mcp add wemo -- uvx wemo-mcp-server |
| VS Code | |
| Cursor | |
| Cline | Manual config (VS Code extension) |
| Windsurf | Manual config |
| Zed | Manual config |
| Continue | Manual config (VS Code extension) |
Edit ~/Library/Application Support/Claude/claude_desktop_config.json:
{
"mcpServers": {
"wemo": {
"command": "uvx",
"args": ["wemo-mcp-server"],
"env": {
"WEMO_MCP_DEFAULT_SUBNET": "192.168.1.0/24"
}
}
}
}
Restart Claude Desktop after saving.
Edit ~/.vscode/mcp.json:
{
"servers": {
"wemo": {
"type": "stdio",
"command": "uvx",
"args": ["wemo-mcp-server"],
"env": {
"WEMO_MCP_DEFAULT_SUBNET": "192.168.1.0/24"
}
}
}
}
Reload VS Code after saving.
Edit ~/.cursor/mcp.json:
{
"servers": {
"wemo": {
"type": "stdio",
"command": "uvx",
"args": ["wemo-mcp-server"]
}
}
}
Restart Cursor after saving.
Cline is a VS Code extension. Add to VS Code's settings.json:
{
"mcp.servers": {
"wemo": {
"command": "uvx",
"args": ["wemo-mcp-server"]
}
}
}
Reload VS Code after saving.
Edit ~/.windsurf/mcp.json:
{
"mcpServers": {
"wemo": {
"command": "uvx",
"args": ["wemo-mcp-server"]
}
}
}
Restart Windsurf after saving.
Edit ~/.config/zed/settings.json:
{
"context_servers": {
"wemo": {
"command": "uvx",
"args": ["wemo-mcp-server"]
}
}
}
Restart Zed after saving.
Continue is a VS Code extension. Edit ~/.continue/config.json:
{
"mcpServers": [
{
"name": "wemo",
"command": "uvx",
"args": ["wemo-mcp-server"]
}
]
}
Reload VS Code after saving.
The WeMo MCP Server supports flexible configuration through YAML files and environment variables.
The most important setting is your network subnet — the server defaults to 192.168.1.0/24 but your devices may be on a different subnet (e.g. 192.168.86.0/24).
Set it directly in your MCP client config using env:
"env": {
"WEMO_MCP_DEFAULT_SUBNET": "192.168.86.0/24"
}
Or export it before starting the server:
Using Environment Variables (simplest):
export WEMO_MCP_DEFAULT_SUBNET="192.168.1.0/24"
export WEMO_MCP_CACHE_TTL=7200
export WEMO_MCP_LOG_LEVEL=DEBUG
Using YAML Config File:
# Copy example config and customize
cp config.example.yaml config.yaml
# Edit config.yaml with your settings
| Setting | Environment Variable | Default | Description |
|---|---|---|---|
| Network | |||
| Default subnet | WEMO_MCP_DEFAULT_SUBNET | 192.168.1.0/24 | Network to scan for devices |
| Scan timeout | WEMO_MCP_SCAN_TIMEOUT | 0.6 | Port probe timeout (seconds) |
| Max workers | WEMO_MCP_MAX_WORKERS | 60 | Concurrent scanning threads |
| Cache | |||
| Enable cache | WEMO_MCP_CACHE_ENABLED | true | Persistent device caching |
| Cache file | WEMO_MCP_CACHE_FILE | ~/.wemo_mcp_cache.json | Cache file location |
| Cache TTL | WEMO_MCP_CACHE_TTL | 3600 | Cache lifetime (seconds) |
| Logging | |||
| Log level | WEMO_MCP_LOG_LEVEL | INFO | DEBUG, INFO, WARNING, ERROR |
Large Network (multiple subnets):
export WEMO_MCP_DEFAULT_SUBNET="10.0.0.0/16"
export WEMO_MCP_SCAN_TIMEOUT=1.0
export WEMO_MCP_MAX_WORKERS=100
Debug Mode:
export WEMO_MCP_LOG_LEVEL=DEBUG
export WEMO_MCP_CACHE_TTL=300 # 5 minutes
Disable Caching:
export WEMO_MCP_CACHE_ENABLED=false
See config.example.yaml and .env.example for complete configuration templates.
For detailed configuration guide, see CONFIGURATION.md.
Discover WeMo devices on your network using intelligent multi-phase scanning.
Example Prompts:
Example Response:
Found 12 WeMo devices in 23.5 seconds:
1. Office Light (Dimmer) - 192.168.1.100 - OFF
2. Living Room (Switch) - 192.168.1.101 - ON
3. Bedroom Lamp (Dimmer) - 192.168.1.102 - OFF
...
List all devices cached from previous scans.
Example Prompts:
Example Response:
12 devices in cache:
- Office Light (Dimmer) at 192.168.1.100
- Living Room (Switch) at 192.168.1.101
- Bedroom Lamp (Dimmer) at 192.168.1.102
...
Get current state and information for a specific device.
Example Prompts:
Example Response:
Office Light (Dimmer):
- State: OFF
- Brightness: 75%
- IP: 192.168.1.100
- Model: DimmerLongPress
Control a WeMo device (on/off/toggle/brightness).
Example Prompts:
Example Response:
✓ Office Light turned ON
Brightness set to 75%
Current state: ON
Rename a WeMo device (change its friendly name).
Example Prompts:
Example Response:
✓ Device renamed successfully
'Office Dimmer' → 'Office Light'
IP: 192.168.1.100
The new name will appear in the WeMo app and all control interfaces.
Get the HomeKit setup code for a WeMo device.
Example Prompts:
Example Response:
HomeKit Setup Code for 'Office Light':
123-45-678
Use this code to add the device to Apple Home.
Note: Not all WeMo devices support HomeKit. If a device doesn't support HomeKit, you'll get an error message.


Get information about the persistent device cache.
Example Prompts:
Example Response:
Device Cache Status:
✅ Cache exists
📁 Location: ~/.wemo_mcp_cache.json
📊 Devices: 12
⏰ Age: 1,234 seconds (20.6 minutes)
💾 TTL: 3,600 seconds (1 hour)
✅ Status: Valid (not expired)
Clear the persistent device cache to force a fresh scan.
Example Prompts:
Example Response:
✅ Cache cleared successfully
Next scan will discover devices fresh.
Run scan_network to rebuild the cache.
Note: This clears both the persistent cache file and in-memory cache. After clearing, run scan_network to rediscover devices.
View current server configuration settings.
Example Prompts:
Example Response:
Current Configuration:
Network:
• Default subnet: 192.168.1.0/24
• Scan timeout: 0.6 seconds
• Max workers: 60
Cache:
• Enabled: true
• File: ~/.wemo_mcp_cache.json
• TTL: 3600 seconds (1 hour)
Logging:
• Level: INFO
Note: Shows all configuration including defaults and environment variable overrides. Use environment variables with WEMO_MCP_ prefix to customize.
Beyond tools, this server exposes the full suite of MCP primitives.
Subscribe to live device data without calling a tool:
| URI | Description |
|---|---|
devices:// | JSON index of all cached devices |
device://{name-or-ip} | Live state for a specific device (URL-encoded name supported) |
Clients that support MCP Resources (VS Code, MCP Inspector) can read these directly.
Four built-in guided prompts available via / slash commands in supporting clients:
| Prompt | Description |
|---|---|
discover-devices | Guided network scan with subnet selection |
device-status-report | Summary report of all device states |
activate-scene | Control multiple devices as a scene |
troubleshoot-device | Step-by-step device troubleshooting |

All four prompts surfaced as /mcp.wemo.* slash commands in VS Code
The server proactively asks for missing information rather than failing silently:
scan_network — if no custom subnet is configured (default 192.168.1.0/24), asks which subnet to scan before proceedingcontrol_device — if a device name isn't found in cache, presents closest matches and asks which device was intended
Elicitation in action — server asks for the subnet rather than scanning the wrong network silently
| Feature | Claude Desktop | VS Code | Cursor | MCP Inspector |
|---|---|---|---|---|
| Tools | ✅ | ✅ | ✅ | ✅ |
| Resources | ⚠️ protocol only | ✅ | ✅ | ✅ |
| Prompts | ⚠️ no slash UI | ✅ / commands | ✅ | ✅ |
| Elicitations | ✅ v1.1+ | ❌ | ❌ | ✅ v0.20+ |
The server uses a three-phase discovery process optimized for reliability:
Phase 1 - UPnP/SSDP Discovery (Primary)
Phase 2 - Network Port Scanning (Backup)
Phase 3 - Device Verification (Backup)
This approach achieves 100% device discovery reliability while maintaining fast scan times (23-30 seconds for complete networks).
All device commands travel exclusively over your local network — no cloud hop required at any stage.
Voice path (Google Home + WeMo):
sequenceDiagram
participant U as User
participant GH as Google Home Hub
participant GC as Google Cloud (ASR only)
participant WD as WeMo Device
U->>GH: "Hey Google, turn on chandelier"
GH->>GC: Audio stream for speech-to-text
GC-->>GH: Intent: {action: ON, device: chandelier}
GH->>WD: Matter OnOff.On (UDP 5540, LAN)
WD-->>GH: ACK
GH-->>U: "OK, turning on chandelier"
MCP path (AI assistant + this server):
sequenceDiagram
participant U as User
participant AI as AI Assistant
participant MS as MCP Server
participant WD as WeMo Device
U->>AI: "Turn on the desk light"
AI->>MS: tools/call control_device("desk light", "on")
MS->>WD: UPnP/SOAP BinaryState=1 (TCP 49153, LAN)
WD-->>MS: HTTP 200 OK
MS-->>AI: {success: true, state: "on"}
AI-->>U: "Desk light is now on!"
Both paths use local protocols only after the initial voice recognition (Google Cloud handles speech-to-text; Belkin's cloud is never involved).
Comparison of features between this MCP server and the main wemo-ops-center project:
| Feature | wemo-ops-center | MCP Server | Notes |
|---|---|---|---|
| Device Discovery | ✅ UPnP + Port Scan | ✅ Implemented | Multi-phase discovery with 100% reliability |
| Device Control | ✅ On/Off/Toggle | ✅ Implemented | Includes brightness control for dimmers |
| Device Status | ✅ Real-time | ✅ Implemented | Query by name or IP address |
| Device Rename | ✅ Friendly names | ✅ Implemented | Updates device cache automatically |
| HomeKit Codes | ✅ Extract codes | ✅ Implemented | For HomeKit-compatible devices |
| Multi-subnet | ✅ VLAN support | ❌ Planned | Currently single subnet per scan |
| WiFi Provisioning | ✅ Smart setup | ❌ Not planned | Requires PC WiFi connection changes |
| Scheduling | ✅ Time + Solar | ❌ Not planned | Requires persistent daemon (incompatible with MCP model) |
| Maintenance Tools | ✅ Resets | ❌ Not planned | Factory reset, clear WiFi, clear data |
| Profile Management | ✅ Save/Load | ❌ Not planned | WiFi credential profiles for bulk setup |
| User Interface | ✅ GUI + Web | ❌ N/A | MCP uses AI assistant interface |
Legend:
Why some features aren't planned for MCP:
Current MCP Coverage: 5 of 11 core features (45%) - focused on device discovery, monitoring, and control use cases that fit the MCP model.
git clone https://github.com/apiarya/wemo-mcp-server.git
cd wemo-mcp-server
uv venv
source .venv/bin/activate # On Windows: .venv\Scripts\activate
uv sync --dev
# Unit tests (CI-compatible, ~4 seconds, 128 tests)
.venv/bin/python -m pytest tests/test_server.py tests/test_phase2.py tests/test_models.py -v
# With coverage report
pytest tests/test_server.py tests/test_phase2.py tests/test_models.py --cov=wemo_mcp_server --cov-report=html
# E2E tests (requires WeMo devices on network)
python tests/test_e2e.py
In your MCP client config, use:
{
"command": "python",
"args": ["-m", "wemo_mcp_server"],
"env": {
"PYTHONPATH": "/path/to/mcp/src"
}
}
Contributions welcome! Please:
git checkout -b feature/amazing-feature)python tests/test_e2e.py)git commit -m 'Add amazing feature')git push origin feature/amazing-feature)MIT License - see LICENSE file for details.
Be the first to review this server!
by Modelcontextprotocol · Developer Tools
Web content fetching and conversion for efficient LLM usage
by Modelcontextprotocol · Developer Tools
Read, search, and manipulate Git repositories programmatically
by Toleno · Developer Tools
Toleno Network MCP Server — Manage your Toleno mining account with Claude AI using natural language.
by mcp-marketplace · Developer Tools
Create, build, and publish Python MCP servers to PyPI — conversationally.