UI preview canvas for developers. See AI-generated designs instantly with built-in component library. No Figma needed.
UICanvas has 4 tools with mixed quality. All tools have descriptions (good), but 3 of 4 use dummy '_ping' parameters with minimal schemas. Tool naming is verb-based but descriptions are verbose and include implementation details rather than LLM-optimized guidance. init_project has a complex nested schema with JSON string parameters (colors, fonts) that should be typed objects. Error handling is present but generic. No tool annotations (readOnlyHint/destructiveHint). Output schemas are not documented.
Mark the design specification as complete. This unlocks page artboard creation. Call this after the Design Spec artboard is ready.
Get canvas info: artboard list, node count, and project workflow state.
Initialize a new project. This MUST be called before creating any artboards. ⚠️ PREREQUISITE: Call open_canvas first to ensure the canvas panel is open. UICanvas enforces a design-spec-first workflow: 1. Call open_canvas → opens the canvas panel 2. Call init_project → creates a Design Spec artboard automatically 3. Review/customize the spec (colors, fonts, spacing) 4. Call finalize_design_spec → unlocks page artboard creation 5. Now call create_artboard freely for your UI pages
Open the UICanvas preview panel in the editor. ⚠️ IMPORTANT: You MUST call this tool FIRST before calling any other UICanvas tool (init_project, create_artboard, write_html, etc.). The canvas panel must be open and connected for visual commands to work.
Three tools (open_canvas, finalize_design_spec, get_basic_info) use dummy '_ping' boolean parameters with no real function. This violates the constrained-input pattern and wastes schema space. These should accept no parameters or be redesigned with meaningful inputs.
init_project's designTokens parameter uses JSON string fields (colors, fonts) instead of typed objects. This forces LLMs to construct JSON strings manually, increasing error likelihood. Should be: designTokens: {colors: {primary: string, ...}, fonts: {heading: string, ...}}
No output schemas documented for any tool. LLMs cannot plan downstream calls or extract required fields (e.g., artboard IDs from get_basic_info). All tools should declare their return structure.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | F | 47 | 2026-07-28+ | v2 |
Tool descriptions are verbose and include implementation details (e.g., 'WS bridge connection timeout', 'Webview connection status') rather than user-facing intent. Descriptions should focus on WHAT the tool does and WHEN to use it, not internal mechanics.
No tool annotations (readOnlyHint, destructiveHint, idempotentHint) present. init_project and finalize_design_spec are state-modifying and should be marked destructiveHint=true. open_canvas and get_basic_info are read-only and should be marked readOnlyHint=true.