A React-based interior design and room planning application with MCP tool integration for agent-assisted furniture arrangement and room analysis
5 tools with verb-noun naming (load_preset, encode_share, load_share, violations, ascii_map). All have descriptions (10-150 chars, baseline 194). Input schemas present for all tools with proper types. However, descriptions are terse (e.g., 'Check the current room against design rules' lacks WHEN/WHY context). Parameter descriptions minimal or absent. No output schemas documented. No error handling guidance. No pagination, no result limits stated. Composition is reasonable (each tool does one thing), but descriptions lack LLM-optimization depth required for A-grade tools.
Generate an ASCII character grid representation of the room at 20cm per cell, with legend mapping characters to furniture items and their positions
Encode the current room layout as a base64-encoded shareable URL hash containing room dimensions, items, profile, hour, and notes
Load a preset room configuration by ID, resetting the scene to its starting state
Decode and load a shared room layout from a base64-encoded URL hash
Check the current room against design rules and return all violations (errors and warnings)
Output schemas not documented. LLMs cannot infer what fields violations(), encode_share(), ascii_map() return, forcing guesswork on downstream processing.
Parameter descriptions missing or minimal. 'id' in load_preset lacks context (what preset IDs exist?). 'hash' in load_share lacks format hint (base64 length, structure).
Tool descriptions lack WHEN/WHY guidance. 'Check the current room against design rules' does not explain when to call violations() vs other tools, or what 'design rules' means.
No error handling guidance. If load_share() receives invalid base64 or malformed JSON, no recovery hint provided. LLM cannot self-correct.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 50 | 2026-07-28+ | v2 |
No idempotency or confirmation pattern for destructive operations. load_preset() and load_share() reset scene state; no dry-run or confirmation step to prevent accidental overwrites.