[{"name":"list_templates","description":"List all available page templates (id/name/size). Pick one, then apply_template.","inputSchema":{"type":"object","properties":{},"required":[]}},{"name":"list_components","description":"List all UI components (builtin + user) with variants/categories/descriptions.","inputSchema":{"type":"object","properties":{},"required":[]}},{"name":"component_compile","description":"Compile & register a user component from a .mbt.md declaration.","inputSchema":{"type":"object","properties":{"source_b64":{"type":"string","description":"base64(utf8) user component declaration"}},"required":["source_b64"]}},{"name":"component_describe","description":"Describe a user component: params/variants/usage string.","inputSchema":{"type":"object","properties":{"component_id":{"type":"string","description":"user component id"}},"required":["component_id"]}},{"name":"component_export","description":"Export a user component declaration (base64 .mbt.md).","inputSchema":{"type":"object","properties":{"component_id":{"type":"string","description":"user component id"}},"required":["component_id"]}},{"name":"component_import","description":"Import user components from MCF bundle.","inputSchema":{"type":"object","properties":{"mcf_b64":{"type":"string","description":"base64 MCF bundle"}},"required":["mcf_b64"]}},{"name":"component_delete","description":"Delete a user component.","inputSchema":{"type":"object","properties":{"component_id":{"type":"string","description":"user component id"}},"required":["component_id"]}},{"name":"library_snapshot","description":"Snapshot the whole user component library (for persistence).","inputSchema":{"type":"object","properties":{},"required":[]}},{"name":"library_restore","description":"Restore user components at session start.","inputSchema":{"type":"object","properties":{"source_b64s":{"type":"string","description":"space-separated base64 declarations"}},"required":["source_b64s"]}},{"name":"list_tokens","description":"List design tokens (colors/spacings/radii/typography). Reference these for visual consistency.","inputSchema":{"type":"object","properties":{},"required":[]}},{"name":"list_themes","description":"List builtin theme names (light/dark/high_contrast/sepia/nord/sunset).","inputSchema":{"type":"object","properties":{},"required":[]}},{"name":"list_artboards","description":"List all artboards in the project with metadata and node counts.","inputSchema":{"type":"object","properties":{},"required":[]}},{"name":"apply_theme","description":"Switch global theme: rewrites matching node colors via role recolor (reversible). Frontmatter `theme:` persists it.","inputSchema":{"type":"object","properties":{"theme":{"type":"string","description":"theme name from list_themes"}},"required":["theme"]}},{"name":"set_token","description":"Override a single design token; recolors old-value literals immediately and persists via frontmatter `tokens:`. Setting the default value back reverts it.","inputSchema":{"type":"object","properties":{"token":{"type":"string","description":"token role, e.g. primary"},"value":{"type":"string","description":"hex color value, e.g. #FF7A45"}},"required":["token","value"]}},{"name":"apply_template","description":"Instantiate a template as a new artboard (id = template_id unless overridden).","inputSchema":{"type":"object","properties":{"template_id":{"type":"string","description":"template id from list_templates"},"artboard":{"type":"string","description":"artboard id for the new board (default: template_id)"},"name":{"type":"string","description":"alias of artboard"}},"required":["template_id"]}},{"name":"export_artifact","description":"Export an MBT-derived artifact bundle for this agent session.","inputSchema":{"type":"object","properties":{},"required":[]}},{"name":"query_nodes","description":"Query nodes of an artboard (id/kind/component/rect/style/text).","inputSchema":{"type":"object","properties":{"artboard":{"type":"string","description":"artboard id"}},"required":["artboard"]}},{"name":"place_component","description":"Place a component instance on an artboard at final size (w/h applied at place time, so gate surfaces evaluate the final bbox).","inputSchema":{"type":"object","properties":{"artboard":{"type":"string","description":"artboard id"},"component_id":{"type":"string","description":"component id from list_components"},"instance_id":{"type":"string","description":"unique node id for the instance"},"variant":{"type":"string","description":"variant name (or '-' for default)"},"x":{"type":"number","description":"x position"},"y":{"type":"number","description":"y position"},"w":{"type":"number","description":"final width (>0 overrides default size; omit to keep default)"},"h":{"type":"number","description":"final height (>0 overrides default size; omit to keep default)"},"args":{"type":"string","description":"space-separated k=v slots for user component params"}},"required":["artboard","component_id","instance_id","x","y"]}},{"name":"variants","description":"Design variant exploration: fork an artboard into variants, score all artboards (richness vs debt), or merge a source variant back into a target. action: fork | score | merge.","inputSchema":{"type":"object","properties":{"action":{"type":"string","description":"fork | score | merge"},"artboard":{"type":"string","description":"fork: base artboard id"},"names":{"type":"string","description":"fork: comma-separated variant artboard names"},"source":{"type":"string","description":"merge: source artboard id"},"target":{"type":"string","description":"merge: target artboard id"}},"required":["action"]}},{"name":"update_node","description":"Edit node properties via space-separated k=v pairs.","inputSchema":{"type":"object","properties":{"artboard":{"type":"string","description":"artboard id"},"node_id":{"type":"string","description":"node id"},"args":{"type":"string","description":"k=v keys: w h text fill text_color stroke stroke_width radius opacity font_size weight shadow rotate blur blend line_height tracking flip text_align font_style stroke_dash visible overlay constraint. Image src goes in text=<url>. overlay=true declares a decorative layer (sibling overlaps become intentional layering)"}},"required":["artboard","node_id","args"]}},{"name":"move_node","description":"Move a node to absolute x/y.","inputSchema":{"type":"object","properties":{"artboard":{"type":"string","description":"artboard id"},"node_id":{"type":"string","description":"node id"},"x":{"type":"number","description":"new x"},"y":{"type":"number","description":"new y"}},"required":["artboard","node_id","x","y"]}},{"name":"group_nodes","description":"Group >=2 nodes into a frame/group.","inputSchema":{"type":"object","properties":{"artboard":{"type":"string","description":"artboard id"},"new_id":{"type":"string","description":"group id"},"nodes":{"type":"string","description":"comma-separated node ids"}},"required":["artboard","new_id","nodes"]}},{"name":"ungroup_node","description":"Ungroup a group; children return to parent.","inputSchema":{"type":"object","properties":{"artboard":{"type":"string","description":"artboard id"},"node_id":{"type":"string","description":"group id to dissolve"}},"required":["artboard","node_id"]}},{"name":"align_nodes","description":"Align >=2 nodes. modes: left right top bottom hcenter vcenter.","inputSchema":{"type":"object","properties":{"artboard":{"type":"string","description":"artboard id"},"mode":{"type":"string","description":"alignment mode"},"nodes":{"type":"string","description":"comma-separated node ids"}},"required":["artboard","mode","nodes"]}},{"name":"resize_canvas","description":"Resize an artboard canvas.","inputSchema":{"type":"object","properties":{"artboard":{"type":"string","description":"artboard id"},"width":{"type":"number","description":"new width"},"height":{"type":"number","description":"new height"}},"required":["artboard","width","height"]}},{"name":"restyle_component","description":"Restyle a user component definition (affects instances).","inputSchema":{"type":"object","properties":{"artboard":{"type":"string","description":"artboard id"},"component_id":{"type":"string","description":"component id"},"args":{"type":"string","description":"space-separated k=v pairs"}},"required":["artboard","component_id","args"]}},{"name":"lint_design","description":"Design quality lint: contrast/touch-target/spacing/readability. Returns structured suggestions.","inputSchema":{"type":"object","properties":{"artboard":{"type":"string","description":"artboard id"}},"required":["artboard"]}},{"name":"critique","description":"AI-flavored design critique for an artboard.","inputSchema":{"type":"object","properties":{"artboard":{"type":"string","description":"artboard id"}},"required":["artboard"]}},{"name":"benchmark","description":"Run the engine benchmark suite (render/validate timings).","inputSchema":{"type":"object","properties":{},"required":[]}},{"name":"auto_fix","description":"Auto-fix fixable violations on an artboard.","inputSchema":{"type":"object","properties":{"artboard":{"type":"string","description":"artboard id"}},"required":["artboard"]}},{"name":"generate_spec","description":"Generate a structured design spec from an artboard.","inputSchema":{"type":"object","properties":{"artboard":{"type":"string","description":"artboard id"}},"required":["artboard"]}},{"name":"infer_page_type","description":"Infer the page type (login/list/detail/dashboard...).","inputSchema":{"type":"object","properties":{"artboard":{"type":"string","description":"artboard id"}},"required":["artboard"]}},{"name":"infer_missing","description":"Infer and suggest missing elements for an artboard.","inputSchema":{"type":"object","properties":{"artboard":{"type":"string","description":"artboard id"}},"required":["artboard"]}},{"name":"suggest_alignment","description":"Suggest alignment fixes for an artboard.","inputSchema":{"type":"object","properties":{"artboard":{"type":"string","description":"artboard id"}},"required":["artboard"]}},{"name":"extract_design_system","description":"Extract the implicit design system (palette/typography/spacing) from an artboard.","inputSchema":{"type":"object","properties":{"artboard":{"type":"string","description":"artboard id"}},"required":["artboard"]}},{"name":"generate_responsive","description":"Generate responsive variants (_tablet/_desktop) for an artboard.","inputSchema":{"type":"object","properties":{"artboard":{"type":"string","description":"artboard id"}},"required":["artboard"]}},{"name":"interact","description":"Attach an interaction to a node (writes ⚡trigger→action marker).","inputSchema":{"type":"object","properties":{"artboard":{"type":"string","description":"artboard id"},"node_id":{"type":"string","description":"node id"},"trigger":{"type":"string","description":"tap|long_press|swipe_left|swipe_right|swipe_up|swipe_down|scroll_end|keyboard_enter|focus|blur"},"action_spec":{"type":"string","description":"back|haptic|navigate_to:<board>|show_toast:\"msg\"|play_sound:<name>|toggle_state:<node>|set_state:<node>:<state>|set_text:<node>:\"txt\""}},"required":["artboard","node_id","trigger","action_spec"]}},{"name":"uninteract","description":"Detach all interactions from a node.","inputSchema":{"type":"object","properties":{"artboard":{"type":"string","description":"artboard id"},"node_id":{"type":"string","description":"node id"}},"required":["artboard","node_id"]}},{"name":"interactions","description":"List interactions of an artboard (node/trigger/action).","inputSchema":{"type":"object","properties":{"artboard":{"type":"string","description":"artboard id"}},"required":["artboard"]}},{"name":"define_state","description":"Define a component state variant (patch applied at render).","inputSchema":{"type":"object","properties":{"artboard":{"type":"string","description":"artboard id"},"node_id":{"type":"string","description":"node id"},"state_name":{"type":"string","description":"state name, e.g. pressed/disabled"},"args":{"type":"string","description":"k=v keys: fill text_color stroke text radius font_size"}},"required":["artboard","node_id","state_name"]}},{"name":"set_state","description":"Set the current state of a node ([cur:<name>] marker persists it).","inputSchema":{"type":"object","properties":{"node_id":{"type":"string","description":"node id"},"state_name":{"type":"string","description":"state name from define_state"},"toggle":{"type":"string","description":"\"true\" to toggle between default and the state"}},"required":["node_id","state_name"]}},{"name":"list_states","description":"List component states defined on an artboard.","inputSchema":{"type":"object","properties":{"artboard":{"type":"string","description":"artboard id"}},"required":["artboard"]}},{"name":"read_mbt","description":"Return canonical .mbt.md source from a base64 document.","inputSchema":{"type":"object","properties":{"source_b64":{"type":"string","description":"base64(utf8) .mbt.md source"}},"required":["source_b64"]}},{"name":"render_mbt","description":"Validate + render canonical .mbt.md (full artboards JSON).","inputSchema":{"type":"object","properties":{"source_b64":{"type":"string","description":"base64(utf8) .mbt.md source"}},"required":["source_b64"]}},{"name":"export_html","description":"Export the whole project as a self-contained interactive HTML prototype (node-level flows, state CSS, nav stack, toast).","inputSchema":{"type":"object","properties":{},"required":[]}},{"name":"export_svg","description":"Export one artboard as SVG (themed surface/outline).","inputSchema":{"type":"object","properties":{"artboard":{"type":"string","description":"artboard id"}},"required":["artboard"]}},{"name":"ddp_view","description":"Report DDP codec status (read-only view).","inputSchema":{"type":"object","properties":{},"required":[]}},{"name":"list_ops","description":"Machine-readable CLI op surface: all 27 mutating ops with usage/category/gates/description (source of the moonviz-ops.json dictionary).","inputSchema":{"type":"object","properties":{},"required":[]}},{"name":"history","description":"Design version control on the current artboard: time-travel, branch-less commit log, semantic diff. command: init|commit|log|undo|redo|checkout|diff; args: artboard, message, rev, from, to","inputSchema":{"type":"object","properties":{"command":{"type":"string","description":"init|commit|log|undo|redo|checkout|diff"},"artboard":{"type":"string","description":"artboard id (init/commit)"},"message":{"type":"string","description":"commit message"},"rev":{"type":"string","description":"target revision (checkout)"},"from":{"type":"string","description":"diff from revision"},"to":{"type":"string","description":"diff to revision"}},"required":["command"]}},{"name":"protest","description":"Run a prototype test script against an artboard (assertion-based: navigation/inputs/render/violations). script: tap:x:y>board; back>board; swipe:left>board; set:node:value; noviol; render","inputSchema":{"type":"object","properties":{"artboard":{"type":"string","description":"artboard id"},"script":{"type":"string","description":"semicolon-separated assertions"}},"required":["artboard","script"]}},{"name":"animation_presets","description":"List the 6 builtin animation presets (press/fade_in/slide_in_right/modal_present/shake/pop).","inputSchema":{"type":"object","properties":{},"required":[]}},{"name":"animation_css","description":"Generate CSS @keyframes + animation for a node with a preset. args: node_id, preset","inputSchema":{"type":"object","properties":{"node_id":{"type":"string","description":"target node id"},"preset":{"type":"string","description":"press|fade_in|slide_in_right|modal_present|shake|pop"}},"required":["node_id","preset"]}},{"name":"collab_merge","description":"Multi-agent three-way merge: submit N agents' op sequences, get conflicts + auto-resolution. spec: <base_rev> <agent>=<op>[+op...] ... (op grammar: insert/delete/move/fill/radius/font/text/pos/size/gap)","inputSchema":{"type":"object","properties":{"spec":{"type":"string","description":"<base_rev> <agent>=<op>[+op...] ..."}},"required":["spec"]}}]
