Skip to main content
Glama

show_device_dashboard

Display an interactive dashboard to view and control WeMo smart home devices with toggle, on, and off functionality directly within your AI assistant interface.

Instructions

Show an interactive WeMo device dashboard inline in the host.

Returns rich HTML showing all cached devices as cards with Toggle / On / Off buttons. Supported in Claude Desktop, VS Code, ChatGPT, Goose and any other MCP Apps-compatible host (spec: SEP-1865).

Text-only fallback: use list_devices instead.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault

No arguments

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault
resultYes

Implementation Reference

  • The show_device_dashboard tool implementation in server.py.
    @mcp.tool()
    async def show_device_dashboard() -> list[UIResource]:  # type: ignore[return]
        """Show an interactive WeMo device dashboard inline in the host.
    
        Returns rich HTML showing all cached devices as cards with Toggle / On
        / Off buttons.  Supported in Claude Desktop, VS Code, ChatGPT, Goose
        and any other MCP Apps-compatible host (spec: SEP-1865).
    
        Text-only fallback: use list_devices instead.
        """
        devices = _collect_unique_devices()
    
        if devices:
            card_parts: list[str] = []
            for d in devices:
                nh = _h(d["name"])
                nj = _js(d["name"])
                card_parts.append(
                    f'<div class="card">'
                    f'<div class="name" title="{nh}">{nh}</div>'
                    f'<div class="meta">{_h(d["host"])} · {_h(d["model"])}</div>'
                    f'<div class="btn-row">'
                    f"<button onclick=\"doOn('{nj}',this)\">On</button>"
                    f"<button onclick=\"doOff('{nj}',this)\">Off</button>"
                    f"<button onclick=\"doToggle('{nj}',this)\">Toggle</button>"
                    f"</div></div>"
                )
            count_badge = f'<span class="badge">{len(devices)}</span>'
            grid = '<div class="grid">' + "".join(card_parts) + "</div>"
        else:
            count_badge = ""
            grid = (
                '<p class="empty">No devices cached.'
                " Ask your assistant to run scan_network first.</p>"
            )
    
        html = (
            '<!DOCTYPE html><html lang="en"><head><meta charset="utf-8">'
            f"<style>{_DASHBOARD_CSS}</style></head><body>"
            f"<h2>WeMo Devices {count_badge}</h2>{grid}"
            '<div class="footer">wemo-mcp-server · MCP Apps</div>'
            f"<script>{_DASHBOARD_JS}</script></body></html>"
        )
        resource = create_ui_resource(
            {
                "uri": "ui://wemo/device-dashboard",
                "content": {"type": "rawHtml", "htmlString": html},
                "encoding": "text",
            }
        )
        return [resource]  # type: ignore[return-value]
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of behavioral disclosure. It effectively describes key behaviors: returns rich HTML with interactive elements, shows cached devices only (not live scan), and has host compatibility requirements. However, it doesn't mention potential performance implications, caching behavior details, or error conditions.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is perfectly structured and concise. Each sentence earns its place: first states the core functionality, second describes the output format, third specifies compatibility, fourth provides fallback guidance. No wasted words, front-loaded with the most important information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool has 0 parameters, an output schema exists, and no annotations, the description is complete. It explains what the tool does, what it returns, when to use it, compatibility requirements, and fallback alternatives. For a zero-parameter visualization tool, this provides all necessary context.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has 0 parameters with 100% schema description coverage. The description appropriately doesn't discuss parameters since none exist, but it does provide important context about what data the tool works with ('all cached devices'), which adds value beyond the empty schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose: 'Show an interactive WeMo device dashboard inline in the host' with specific details about what it returns ('rich HTML showing all cached devices as cards with Toggle / On / Off buttons'). It distinguishes from sibling tools by specifying this is a dashboard display tool, not a list or control tool.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides explicit guidance on when to use this tool vs alternatives: 'Text-only fallback: use list_devices instead.' It also specifies the supported contexts ('Claude Desktop, VS Code, ChatGPT, Goose and any other MCP Apps-compatible host'), giving clear implementation guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Install Server

Other Tools

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