MCP server wrapper around xiao that exposes Xiaomi/Roborock robot vacuum control as structured tools. Allows MCP-aware hosts (Claude Desktop, Cursor, mcp.so, etc.) to drive the vacuum as tools instead of shelling out to the CLI.
9 tools with minimal parameter schemas and inconsistent descriptions. Most tools have empty input schemas ({}), making them unsuitable for LLM reasoning about preconditions or parameter validation. Descriptions range from adequate (status, consumables) to vague (find_vacuum). No output schemas documented. No error handling guidance. Tool naming follows verb_noun convention (good), but lack of structured input/output severely limits agent composability. Baseline: 549 production tools average 4 params per tool with full type+description coverage; this server has 8 tools with zero params and 1 with minimal schema.
Clean a specific room by alias or numeric id. Aliases are configured via `xiao rooms rename <id> <name>`; the MCP tool resolves them the same way the CLI does.
Remaining life and hours for brushes, filter, and mop pad.
Make the vacuum beep so a human can locate it in the house.
List configured rooms: {id, name}. Useful before calling `clean_room` so the host knows which aliases exist.
Pause (without cancelling) the current cleaning job.
Send the vacuum back to its charging dock.
Start a full-house cleaning job immediately.
8 of 9 tools have empty input schemas ({}).
No output schemas documented for any tool. Rubric requires: 'Document the output schema. LLMs need to know what fields to expect.' Agents cannot plan downstream calls or extract data without knowing return structure.
Descriptions for action tools (start_cleaning, stop_cleaning, pause_cleaning, return_to_dock, find_vacuum) are 50-60 chars and lack context on side effects, prerequisites, or recovery guidance. Rubric baseline: 194 chars average for A+ tools.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | F | 49 | 2026-07-28+ | v2 |
Get the current vacuum status: state, battery %, fan speed, charging state, fault code, and other runtime fields. Returns the same dict as `xiao status --json`.
Stop the current cleaning job.
No error handling guidance. Rubric requires: 'Error responses must tell the LLM what to do next.' No documentation of retryable vs fatal errors, or recovery paths for failed operations.
clean_room accepts 'room' parameter (string) but no enum constraint or validation guidance. Rubric: 'When a parameter accepts one of a known set of values, declare it as an enum.' Should enumerate valid room IDs/aliases or reference list_rooms output.