list_devices
Retrieve cached WeMo smart home devices discovered in previous network scans to view available device names and IP addresses for management.
Instructions
List all discovered WeMo devices from the cache.
Returns a list of devices that were found in previous network scans. Run scan_network first to populate the device cache.
Returns
Dictionary containing:
- device_count: Number of cached devices
- devices: List of device names and IPsInput Schema
TableJSON Schema
| Name | Required | Description | Default |
|---|---|---|---|
No arguments | |||
Implementation Reference
- src/wemo_mcp_server/server.py:517-577 (handler)The list_devices function is implemented as an MCP tool, querying the _device_cache and falling back to a persistent JSON cache if the in-memory cache is empty.
@mcp.tool() async def list_devices() -> dict[str, Any]: """List all discovered WeMo devices from the cache. Returns a list of devices that were found in previous network scans. Run scan_network first to populate the device cache. Returns ------- Dictionary containing: - device_count: Number of cached devices - devices: List of device names and IPs """ try: # Get unique devices from in-memory cache (device cache may have duplicates by name and IP) unique_devices: dict[str, dict[str, Any]] = {} for key, device in _device_cache.items(): device_name = device.name if device_name not in unique_devices: unique_devices[device_name] = { "name": device_name, "ip_address": getattr(device, "host", "unknown"), "model": getattr(device, "model", "Unknown"), "type": type(device).__name__, "source": "memory", } # If in-memory cache is empty, fall back to persistent JSON cache if not unique_devices: cached_data = _cache_manager.load() if cached_data: for _key, info in cached_data.items(): if not isinstance(info, dict): continue name = info.get("name", _key) if name not in unique_devices: unique_devices[name] = { "name": name, "ip_address": info.get("host", "unknown"), "model": info.get("model_name") or info.get("model", "Unknown"), "type": info.get("device_type", "Unknown"), "source": "file_cache", } result: dict[str, Any] = { "device_count": len(unique_devices), "devices": list(unique_devices.values()), } if unique_devices and all(d.get("source") == "file_cache" for d in unique_devices.values()): result["note"] = ( "Devices loaded from persistent cache file (server was restarted). " "Control commands will automatically reconnect to devices as needed." ) return result except Exception as e: logger.error(f"Error listing devices: {e}", exc_info=True) error_response = build_error_response(e, "List devices") error_response.update({"device_count": 0, "devices": []}) return error_response