MCP server exposing file-system log tools (server.py) or smart home control tools (smart_home_server.py) to MCP-compatible clients via stdio transport
Server has 7 tools with basic descriptions and input schemas, but significant gaps limit production readiness. Tool names follow verb_noun convention (list_logs, read_log_head, get_rooms, etc.), which is good. However, descriptions are inconsistent in depth and actionability. Parameter descriptions exist but lack constraint details (ranges, formats, enums). Output schemas are not documented. Error handling returns plain strings rather than structured guidance. No tool annotations (readOnlyHint, destructiveHint). Security sanitization for path traversal is present in read_log_head but not systematized. Overall, this is a functional but incomplete implementation typical of community servers.
Return the current light state (ON or OFF) of a room without changing it.
Return the list of all rooms available in the smart home. Use this tool first to know which room names are valid before calling light_on, light_off, get_light_state, or get_temperature.
Read the current ambient temperature in a room.
Turn the light OFF in the specified room.
Turn the light ON in the specified room.
List all log files available in the simulation directory. Returns a comma-separated list of filenames so the LLM knows which files it can read with read_log_head().
Read the first N lines of a log file. Use list_logs() first to get the list of available filenames.
Output schemas not documented. Tools return strings or implicit objects without declaring field names, types, or structure. LLMs cannot plan downstream calls or extract structured data reliably.
Destructive tools (light_on, light_off) lack descriptions stating they modify state. LLMs cannot determine if calls are safe to retry or have irreversible consequences.
No tool annotations (readOnlyHint, destructiveHint, idempotentHint). Agents cannot distinguish read-only discovery tools from state-modifying commands without parsing descriptions.
Error responses are unstructured strings. No recovery guidance, error classification, or actionable next steps. LLMs receive 'Error: file not found' with no hint to call list_logs() first.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 55 | 2026-07-28+ | v2 |
Parameter 'room' in light_on, light_off, get_light_state, get_temperature lacks enum constraint or format specification. Description says 'use get_rooms() first' but does not declare valid values or format.