Skip to main content
Glama

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 IPs

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault

No arguments

Implementation Reference

  • 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

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/apiarya/wemo-mcp-server'

If you have feedback or need assistance with the MCP directory API, please join our Discord server