A Model Context Protocol server that integrates with Home Assistant to expose tools and prompts via websocket API
This server exposes 4 tools via websocket API, but suffers from critical definition quality gaps. Tool names are non-standard (mcp/tools/list, mcp/tools/call, mcp/prompts/list, mcp/prompts/get), they do not follow verb_noun patterns and lack clarity about what action is taken. Descriptions are present but minimal (e.g., 'Handle listing tools', 'Handle calling tools') and do not explain WHEN to use the tool, WHAT it returns, or prerequisites. Parameter schemas are declared but severely incomplete: the 'type' parameter appears in all tools with only a description 'websocket command type', and the 'arguments' parameter is a bare dict with no schema for its contents, LLMs cannot infer valid argument shapes. Output schemas are not documented anywhere in the visible code. Error handling is minimal, the websocket_tools_call function catches HomeAssistantError and vol.Invalid but returns only {'error': type(e).__name__} with optional error_text, providing no guidance on recovery or retry logic. The server is a thin wrapper around Home Assistant's LLM API and does not define domain-specific tools, it merely proxies external tool calls, making it impossible to evaluate tool composition or chaining patterns. The implementation is correct for its purpose (a Home Assistant integration), but as an MCP server, it does not meet production quality standards for agent integration.
Handle getting prompt content
Handle listing prompts
Handle calling tools
Handle listing tools
Non-standard tool naming: tool names use 'mcp/tools/list', 'mcp/tools/call' instead of verb_noun pattern (e.g., 'list_tools', 'call_tool'). Tool names do not clearly signal action to LLMs.
Minimal descriptions that do not answer WHAT the tool does, WHEN to use it, or WHAT it returns. 'Handle listing tools' and 'Handle calling tools' are implementation detail descriptions, not LLM-focused explanations.
The 'arguments' parameter is defined as a bare dict with no schema for its contents. LLMs cannot determine what keys are valid or what types the values should be. This violates the constrained-input pattern.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | F | 30 | 2026-07-28+ | v2 |
| 2026-03-09 | F | 15 | - | v1 |
No output schemas documented. The visible code does not declare what fields or structure the tools return, forcing LLMs to guess downstream field names and types.
Error handling provides only error type name and optional text. No guidance on recovery, retry eligibility, or actionable next steps. Violates recovery-guide and error-classification patterns.
The server acts as a transparent proxy to Home Assistant LLM API tools, not a domain-specific tool provider. This makes it difficult to evaluate tool composition, idempotency, or whether the interface matches user natural language.