Skip to main content
Glama

The server exposes a deterministic, offline registry for AI coding agents instead of requiring clients to scrape documentation. It runs over local stdio with zero runtime network requests, bounded < 2 KB responses, and bounded lexical/heuristic static source validation. The host application remains responsible for rendering, data access, authentication, sessions, credentials, OAuth, captcha, and other runtime behavior.

Install

Requires Node.js 22.14.0 or newer.

Quick Start by Client

Cursor (.cursor/mcp.json)

{
  "mcpServers": {
    "basecoat-ui": {
      "command": "npx",
      "args": ["-y", "@intellmedia/basecoat-ui-mcp", "--project-root", "${workspaceFolder}"]
    }
  }
}

Claude Desktop (claude_desktop_config.json)

{
  "mcpServers": {
    "basecoat-ui": {
      "command": "npx",
      "args": ["-y", "@intellmedia/basecoat-ui-mcp", "--project-root", "/absolute/path/to/your/application"]
    }
  }
}

Claude Code (CLI)

claude mcp add basecoat-ui -- npx -y @intellmedia/basecoat-ui-mcp --project-root $(pwd)

Generic npx (no install)

{
  "mcpServers": {
    "basecoat-ui": {
      "command": "npx",
      "args": ["-y", "@intellmedia/basecoat-ui-mcp", "--project-root", "/absolute/path/to/your/application"]
    }
  }
}

npm

npm install --global @intellmedia/basecoat-ui-mcp

Add the server to an MCP client. Use an absolute path for the host application so design context and persistent sessions belong to the intended project:

{
  "mcpServers": {
    "basecoat-ui": {
      "command": "basecoat-ui-mcp",
      "args": ["--project-root", "/absolute/path/to/your/application"]
    }
  }
}

The compiled entry can also be invoked directly:

{
  "mcpServers": {
    "basecoat-ui": {
      "command": "node",
      "args": [
        "/absolute/path/to/node_modules/@intellmedia/basecoat-ui-mcp/dist/server/stdio.js",
        "--project-root",
        "/absolute/path/to/your/application"
      ]
    }
  }
}

Published packages include prebuilt dist/ and the immutable semantic snapshot under src/semantics/. Server startup reads that snapshot and does not write inside the installed package. The package contract test builds first, creates and extracts an actual npm tarball, marks the extracted package tree read-only, starts its dist/server/stdio.js under a network tripwire, completes MCP initialize and tool-list requests, and closes the connection. A source checkout does not include dist/.

From source

git clone https://github.com/zygiu-zygis/basecoat-ui-mcp.git
cd basecoat-ui-mcp
npm ci
npm run build
npm start -- --project-root /absolute/path/to/your/application

--project-root takes precedence over BASECOAT_PROJECT_ROOT, which takes precedence over the launch directory. The selected directory is the host project, not the MCP installation directory. The server exposes stdio only.

Related MCP server: Maket

Project-root configuration

The configured root controls two things:

  • DESIGN.md is read from that directory by basecoat://project/context.

  • Persistent macro sessions are stored under <project-root>/.basecoat/designer/.

  • .basecoat/rhythm.json is an optional strict override. It must live under a real .basecoat directory inside the project root, be a regular non-symlink file no larger than 65,536 UTF-8 bytes, and resolve inside that root; missing or rejected files leave the packaged profile unchanged. Matching mapping IDs replace in place and keep packaged order.

Only that exact directory is used. The server does not walk parent directories. Keep .basecoat/ in the host project and back it up if design sessions are part of your workflow. The MCP server never writes host application source files.

Basecoat MCP tools

The server exposes 22 offline MCP tools organized across six architectural layers: project setup and configuration, intent-driven layout orchestration, theme-aware charts, component retrieval, macro design graphs, and semantic state contracts. Every tool result is a bounded MCP packet of at most 1,999 UTF-8 bytes. Larger result sets use cursors; responses are not sliced mid-JSON.

Complete MCP Tool Table

Tool Name

Layer

Description

Mode

basecoat_setup_config

Setup & Config

Generates framework boilerplates, Tailwind CSS 4 imports, OKLCH variables, and no-flash dark mode scripts

Read-only

basecoat_page_architect

Intent Fast Path

Plans complete layout scaffolds with container grid contracts and explicit slot topology

Read-only

basecoat_compose_stack

Intent Fast Path

Assembles composable component stacks into canonical shells (sidebar-01..16, topbar, inset, split) with slot hydration

Read-only

basecoat_rules_enforcer

Intent Fast Path

Enforces technical constraints across Tailwind v4, FSM state contracts, semantic tokens, and dashboard rules

Read-only

basecoat_creative_director

Intent Fast Path

Surfaces Kanso minimalism, 4px/8px optical rhythm, density profiles, typography ladders, and contrast pairings

Read-only

basecoat_component_syntax

Intent Fast Path

Delivers copy-pasteable HTML/Astro component markup with pre-configured FSM state variants and inline SVG icons

Read-only

basecoat_list_charts

Charts & Data Viz

Lists and filters 56 theme-aware chart blueprints across 7 categories with keyword search

Read-only

basecoat_get_chart_blueprint

Charts & Data Viz

Retrieves chart HTML using semantic CSS tokens (--chart-1..5) and mount scripts for 5 frameworks

Read-only

basecoat_quality_inspector

Quality & Audit

Audits HTML/Astro markup with Score (0-100), letter grade, syntax violations, a11y omissions, and auto-fix suggestions

Read-only

search_components

Components

Searches up to 8 compact component summaries by intent and/or query across 62 curated components

Read-only

get_component_details

Components

Retrieves minimal component template, dependencies, and composition guidance for Astro or HTML

Read-only

get_component_html

Components

Retrieves HTML markup template and dependencies for any curated component

Read-only

validate_composition

Static Analysis

Statically checks up to 256 KiB of markup for migration errors, rhythm, FSM bindings, and accessibility

Read-only

validate_markup

Static Analysis

Validates HTML/Astro markup syntax, structure, landmark ordering, and semantic constraints

Read-only

search_macro_blocks

Macro Graph

Searches approved macro layout blocks by query, role, family, or tag across 84 blocks and aliases

Read-only

get_macro_block

Macro Graph

Retrieves a section of a compiled macro block blueprint (manifest, structure, slots, ports, rules, etc.)

Read-only

begin_design

Macro Graph

Creates a persistent, hash-verified design session under .basecoat/designer/ pinning profile and registry revision

Mutation (idempotent)

get_design_context

Macro Graph

Reads focused design session views (sessions, overview, decisions, graph, rules, focus, next)

Read-only

apply_design_patch

Macro Graph

Applies atomic graph mutations with expectedRevision and idempotent operationId

Mutation (idempotent)

validate_design

Macro Graph

Validates draft or complete design graphs, returning diagnostic totals and paginated issues

Read-only

get_rhythm_rules

Semantics & Tokens

Reads effective semantic rhythm profiles and approved utilities by family, supporting project-local overrides

Read-only

get_fsm_recipe

Semantics & State

Reads finite state machine interaction states, events, transitions, guards, and actions

Read-only

Intent-Driven Design Layer (Fast Path)

  1. basecoat_setup_config - Framework and styling configuration generator. Outputs ready-to-use boilerplate for 6 targets (astro, vanilla, nextjs, sveltekit, vite, htmx), 8 aesthetic style packs (vega, nova, maia, lyra, mira, luma, sera, rhea), complete OKLCH @theme inline blocks, and synchronous <head> inline dark mode scripts.

  2. basecoat_page_architect - Query recipes (src/macros/authoring/recipes/*.json) and macro blocks (src/macros/authoring/blocks/*.json) by intent, recipe, or block. Delivers full layout scaffolds with explicit data-slot markers, semantic HTML skeletons, grid structures, and responsive containers. Fully covers 5 dashboard page archetypes:

    • Executive Dashboard (workspace-dashboard, executive-dashboard) - KPI stat cards, revenue chart, and recent activity.

    • E-commerce Overview (ecommerce-overview) - Sales metrics, revenue analytics, top products card, and order summary.

    • Analytics Workspace (analytics-workspace) - Filter toolbar, time-series interactive chart, and cohort analysis breakdown.

    • Data Table Detail (workspace-detail, data-table-detail) - Paginated data table with search/filters and slide-over inspection drawer.

    • Settings Split-Screen (workspace-settings, settings-split-screen) - Two-column responsive layout with vertical section navigation and form controls. Supports density controls (compact for high-density enterprise tools, comfortable for standard interfaces).

  3. basecoat_compose_stack - Dynamically composes 45 pre-built component stacks across 7 categories (shell-stacks, header-stacks, kpi-stacks, chart-stacks, table-stacks, overlay-stacks, form-stacks) into canonical shells (sidebar-01..sidebar-16, topbar-shell, inset-shell, split-shell) with automated slot hydration.

  4. basecoat_rules_enforcer - Enforces strict technical constraints across tailwind-v4, fsm-contracts, tokens, semantic-html, and dashboard-patterns:

    • MET-01: KPI numerals require text-2xl/text-3xl with tabular-nums and semantic trend indicators.

    • TBL-01: Data tables require <div class="overflow-x-auto"> wrapper, sticky blurred <thead class="sticky top-0 bg-background/90 backdrop-blur">, and right-aligned numeric cells.

    • FRM-01: Input controls require <div class="field"> wrappers with associated <label class="label" for="id">.

    • NAV-01: Headers must use compact h-12 or h-14 (forbidding oversized h-16).

    • TW4-01: Rejects deprecated Tailwind v3 utilities (bg-opacity-*, flex-shrink-*, @tailwind directives).

    • TOK-01: Rejects arbitrary bracket dimensions (w-[327px]) and hardcoded hex colors (#ff0000, bg-[#123456]).

    • FSM-01: Enforces finite state machine contracts on interactive primitives (dialog, dropdown-menu, accordion, tabs).

  5. basecoat_creative_director - Surfaces Kanso minimalism and Basecoat design intelligence:

    • Density profiles: compact (p-4 gap-4, header h-12, table py-2), standard (p-6 gap-4/gap-6, header h-14, table py-3), and comfortable (p-6 md:p-8, header h-14).

    • Mathematical 4px/8px optical rhythm grid and typography ladders (tabular-nums on all metrics and numeric table cells).

    • Subtle 1px card ring elevation without conflicting border utilities.

    • WCAG 2.1 AA (contrast >= 4.5:1) and APCA ($L_c \ge 60$) token pairings.

  6. basecoat_component_syntax - Delivers copy-pasteable HTML or Astro component markup from src/registry/components.json with pre-configured FSM state variants (default, active, loading, disabled, open, closed, open/closed), verified inline SVG action icons (plus, edit, trash, search, chevron-down, check, external-link), and composite component patterns:

    • metric-card (metrics-summary, kpi-card) - Stat card with tabular-nums numeral and trend badge.

    • data-table (datatable) - Sticky header table wrapped in overflow-x-auto with right-aligned numeric cells.

    • sidebar-shell (sidebar-dashboard-shell) - Desktop sticky navigation with responsive flyout below md.

  7. basecoat_quality_inspector - Audits HTML/Astro compositions against dashboard audit rules: table-overflow-wrapper, kpi-metric-tabular-nums, table-numeric-alignment, a11y-focus-ring (flagging outline-none without focus visible ring), arbitrary color/dimension violations, and WCAG/APCA contrast pairings. Returns score (0-100), letter grade (A-F), structured issues, and actionable autoFixSuggestions.

Theme-Aware Charts and Data Visualization

  1. basecoat_list_charts - Discovers and filters 56 theme-aware chart blueprints across 7 categories (area, bar, line, pie, radar, radial, tooltip) with keyword search / query, layout footprint (layoutFootprint), requiredTokens, and variant summaries.

  2. basecoat_get_chart_blueprint - Retrieves chart container HTML (chart-container, role="img", accessible <table class="sr-only"> fallback, and glassmorphic tooltip markup with bg-background/95 backdrop-blur-sm), CSS tokens (var(--chart-1) through var(--chart-5), var(--color-border), var(--color-muted-foreground)), client options, layoutFootprint, and framework mount code for 5 frameworks (vanilla, astro, react, vue, svelte) with optional themeTokens overrides. Accepts chartId or alias id (defaults to area-default). Integrated directly into dashboard-01 and svg-area-chart (data-chart-id="area-interactive"). Generated deterministically via node scripts/ingest-shadcn-charts.mjs.

Component tools

  • search_components returns up to 8 compact {id, name, intent} summaries across the 62 curated components and never returns markup. intent and query are optional; an empty search returns an empty list.

  • get_component_details returns one Astro or HTML template with dependencies and composition guidance. Oversized entries fail closed. theme-toggle resolves to theme-switcher.

  • get_component_html returns the HTML markup template and dependencies for any curated component (environment defaults to html).

  • validate_composition statically checks up to 256 KiB (262,144 UTF-8 bytes) of HTML or Astro source and returns at most 24 issues (including WCAG 2.1 / APCA token contrast, arbitrary dimensions, dialog focus traps, and aria-controls bindings). Pass code or html, and optional semanticProfile or densityProfile (comfortable|compact). It does not render, execute, resolve application modules, or certify runtime browser accessibility.

  • validate_markup statically validates HTML/Astro source syntax, container tags, landmark ordering, and semantic constraints against Basecoat guidelines.

Macro tools

The macro layer is this project's curated, project-specific composition system for shells, auth flows, data workspaces, slots, ports, rules, and recipes. It is compiled into a pinned registry snapshot. These layout contracts are not supplied automatically by shadcn or by MCP.

  1. search_macro_blocks - find compatible blueprint blocks by query, role, family, or tag across 84 blocks and aliases.

  2. get_macro_block - read a block section such as manifest, structure, slots, ports, rules, dependencies, or provenance.

  3. begin_design - create a persistent design session and pin its profile and registry revision. Pinned registries are hash-verified on load.

  4. get_design_context - read session lists or focused views such as overview, graph, rules, focus, and next.

  5. apply_design_patch - apply atomic graph changes with expectedRevision and an idempotent operationId. A committed mutation always returns a success acknowledgement; oversized optional payload may be omitted with truncated: true.

  6. validate_design - validate a draft or complete design graph and page its diagnostics.

Design sessions persist under <project-root>/.basecoat/designer/. Registry revisions are content-addressed; a session keeps using its pinned revision even after the package snapshot changes. Design snapshots use the form d:<designId>@<revision>.

Curated block blueprints (84 blocks and aliases including translated shadcn/ui v4 blocks):

  • Canonical Shells & Sidebars: sidebar-01 through sidebar-16, sidebar-dashboard-shell, sidebar-inset-shell, sidebar-collapsible-icon, sidebar-mobile-flyout, sidebar-nav, topbar-shell, topbar-nav, app-shell, page-header.

  • Dashboards & Workspaces: dashboard-01 through dashboard-07, dashboard-workspace, dashboard-main, dashboard-activity, analytics, analytics-workspace, ecommerce-overview, tasks, tasks-table-workspace, mail, mail-workspace.

  • Metrics & Data Tables: metrics-summary, data-table-rich, data-table, data-table-detail-layout, data-workspace, data-bulk-actions, data-filters, data-pager, products, billing, settings.

  • Forms & Authentication: login-01 through login-05, signup-01 through signup-05, otp-01 through otp-05, form-field-group, forms, form-section, authentication, auth-sign-in, auth-sign-up, auth-split-screen, auth-recovery, auth-reset.

  • Charts & Feedback: svg-area-chart, empty-state, error-boundary, newsletter-waitlist, pricing-tiers, segmented-toggle, detail-drawer-panel, product-detail-layout, settings-workspace.

Multi-block recipes (11 page recipes):

  • workspace-dashboard - full analytics dashboard (KPI cards, activity chart, records table).

  • ecommerce-overview - e-commerce operational dashboard with order metrics and product highlights.

  • analytics-workspace - analytics dashboard with time-series charts and cohort views.

  • workspace-settings - application shell with navigation, header, and settings workspace tabs.

  • workspace-detail / tasks-table-workspace - data table workspace with slide-over detail inspection drawer.

  • mail-workspace - multi-pane email client layout with inbox list and detail view.

  • auth-flow - bidirectional authentication flow between sign-in and sign-up cards.

  • auth-split-flow - split-screen auth frame pairing sign-in and sign-up with hero media.

  • data-records - records page with filters, table, and pager.

  • marketing-pricing - 3-tier pricing table paired with newsletter/waitlist banner.

Semantic tools

The semantic layer provides compiled rhythm profiles and finite state machine recipes:

  1. get_rhythm_rules - access approved spacing, typography, surfaces, borders, and layout patterns by profile and family filters.

  2. get_fsm_recipe - read interaction states, events, transitions, guards, and actions for dialog, navigation (collapsible-navigation), auth-flow, and tabs.

Semantic tools use the same bounded pagination as macro tools. Each rhythm record keeps the semantic token ID separate from its approved Tailwind utility. Put the utility in class; keep the semantic ID in design metadata and agent reasoning. Project overrides from <project-root>/.basecoat/rhythm.json are reflected in an effective content ref and revision. FSM recipes are structural metadata, not runtime implementations.

End-to-end example

A dashboard page can follow this sequence:

get_design_context(view="sessions")
begin_design(designId="admin", profile="app-default", operationId="begin-admin")
get_rhythm_rules(profile="default", family="density")
search_macro_blocks(q="shell", limit=8)
apply_design_patch(
  designId="admin",
  expectedRevision=0,
  operationId="add-dashboard",
  operations=[{ op: "instantiate_recipe",
               recipe: "workspace-dashboard",
               pagePrefix: "admin" }]
)
get_design_context(view="overview", designId="admin")
get_macro_block(idOrRef="app-shell", section="structure", designId="admin")
get_fsm_recipe(recipe="dialog", section="transitions")

Implement the selected component leaves in the host project, then record completed regions with apply_design_patch(record_written). Finish with validate_design(mode="complete") and validate_composition on the generated Astro or HTML source. After a conflict or restart, reread the session and use the returned revision and cursors.

Copy templates/cursor/basecoat-designer.mdc into a host project's .cursor/rules for agent guidance. The MCP server does not write consumer application source files.

Auditing or restyling an existing UI

No design session is needed. Read basecoat://design/theming and basecoat://design/rhythm, call get_component_details for each control you change, then run validate_composition on the rendered layout source including <head> scripts and <style>. Theme rules:

  • theme-strategy-mixed - @media (prefers-color-scheme: dark) combined with the .dark class strategy (dark tokens leak into light mode).

  • theme-storage-key - a theme script persists under a key other than Basecoat's themeMode, creating a second resolver that drifts from window.basecoat.theme.

Check light and dark screenshots with an OS dark preference and empty localStorage before deploying.

Source adaptation and offline import

The macro importer is intentionally local-first. It accepts a checked-out or otherwise locally saved shadcn-style registry-item.json, a reviewed mapping, and a local dependency lock:

npm run import:blocks -- \
  --item=/path/to/registry-item.json \
  --mapping=/path/to/mapping.json \
  --lock=/path/to/dependency-lock.json \
  --dry-run

This command does not fetch live shadcn registry items, install packages, execute upstream code, or make runtime network requests. Unknown, unlocked, or explicitly unsupported dependencies produce diagnostics instead of guesses. Omitted OAuth, captcha, session, credential, and other application features are reported as obligations. The importer emits only the curated structural block; the host application must implement the runtime behavior.

The mapping and resulting provenance make the boundary explicit: shadcn-style source is an input reference, while layout contracts, slots, ports, rules, and recipes are curated adaptations owned by this project's macro layer. They are not features provided by shadcn or by MCP. Upstream refreshes are separate maintainer authoring operations and never occur from the MCP server.

Basecoat MCP resources

The server exposes 8 authoritative MCP resources spanning the 3-pillar Skill Vault, core design system contracts, multi-framework integration guides, and live host project context:

Complete MCP Resource Table

Resource URI

Category

Description

MIME Type

basecoat://skills/core

Skill Vault

Core Basecoat UI design philosophy, Kanso minimalism, and foundational component usage

text/markdown

basecoat://skills/dashboard

Skill Vault

Comprehensive dashboard architecture, layout patterns, page types, sidebar configurations, and audit checklists

text/markdown

basecoat://skills/charts

Skill Vault

Theme-aware chart blueprints, CSS token mapping (--chart-1..5), ApexCharts configuration, and multi-framework integration

text/markdown

basecoat://skills/files/*

Skill Vault

Dynamic file access resource to read individual documentation and reference markdown files across the 96-file Skill Vault

text/markdown

basecoat://design/rhythm

Design System

Content hierarchy, 4px/8px optical spacing rhythm, typography ladders, density profiles, and structural composition rules

text/markdown

basecoat://design/theming

Theming & Dark Mode

Basecoat OKLCH token contract, 8 official style packs (Vega..Rhea), class-based dark mode (themeMode resolver), and no-flash bootstrap

text/markdown

basecoat://integration/frameworks

Integration Guide

Production integration guide covering Astro, Next.js, Express, Vite, Tailwind CSS 4 setup, and framework-agnostic HTML

text/markdown

basecoat://project/context

Project Context

Live on-demand read of the host project's DESIGN.md (bounded to 6,000 UTF-8 bytes)

application/json

  • basecoat://skills/core provides foundational guidelines for building clean, minimal interfaces using Basecoat CSS, including design philosophy, atomic styling principles, and component construction.

  • basecoat://skills/dashboard provides enterprise dashboard architecture, navigation patterns, data display conventions, form layouts, and accessibility checklists.

  • basecoat://skills/charts provides complete guidance on theme-aware ApexCharts and SVG data visualization using pure Basecoat CSS color tokens (var(--chart-1) through var(--chart-5)) across 5 frameworks.

  • basecoat://skills/files/* enables dynamic lookup and retrieval of any specific markdown file within the 96-file Skill Vault (skills/basecoat, skills/basecoat-dashboard, skills/basecoat-charts).

  • basecoat://design/rhythm provides content hierarchy, spacing, typography, component-family, and structural composition rules.

  • basecoat://design/theming provides the Basecoat token contract, all 8 official style packs (Vega, Nova, Maia, Lyra, Mira, Luma, Sera, Rhea), class-based dark mode via window.basecoat.theme (themeMode key), no-flash bootstrap, and form-control/autofill pitfalls. Read it before restyling or auditing an existing UI.

  • basecoat://integration/frameworks provides Astro, Next.js, Express, Vite, Tailwind CSS 4 (including style pack imports like @import "basecoat-css/vega";), selective Basecoat JavaScript, and native dialog setup.

  • basecoat://project/context reads the configured host project's DESIGN.md on demand. Output is capped at 6,000 UTF-8 bytes and truncates on a newline or sentence boundary when possible. Symlinks and non-regular files are refused.

Recommended flow:

  1. Read the rhythm and project-context resources.

  2. Decide content hierarchy and layout.

  3. Search summaries, then request details only for selected components.

  4. Read the integration resource when connecting production assets.

  5. Validate the final source.

Minimal HTML example

The host application supplies its compiled Tailwind and Basecoat stylesheet:

<link rel="stylesheet" href="/assets/basecoat.css">
<button type="button" class="btn" data-variant="default">Save changes</button>

Header Control Cluster (Style Preset Selector + Theme Switcher)

<div class="flex items-center gap-2">
  <select id="style-variant-select" class="select h-8 w-28 text-sm leading-none" aria-label="Style pack">
    <option value="vega">Vega</option>
    <option value="nova">Nova</option>
    <option value="maia">Maia</option>
    <option value="lyra">Lyra</option>
    <option value="mira">Mira</option>
    <option value="luma">Luma</option>
    <option value="sera">Sera</option>
    <option value="rhea">Rhea</option>
  </select>
  <button type="button" aria-label="Toggle dark mode" data-tooltip="Toggle dark mode" data-side="bottom" onclick="window.basecoat.theme.toggle()" class="btn size-8" data-variant="outline" data-size="icon">
    <span class="hidden dark:block" aria-hidden="true"><svg class="lucide lucide-sun size-4" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="4"/><path d="M12 2v2m0 16v2m-7.07-2.93 1.41-1.41m11.32-11.32 1.41-1.41M2 12h2m16 0h2m-2.93 7.07-1.41-1.41M6.34 6.34 4.93 4.93"/></svg></span>
    <span class="block dark:hidden" aria-hidden="true"><svg class="lucide lucide-moon size-4" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M20.985 12.486a9 9 0 1 1-9.473-9.472c.405-.022.617.46.402.803a6 6 0 0 0 8.268 8.268c.344-.215.825-.004.803.401"/></svg></span>
  </button>
</div>

Basecoat 1.x uses btn with data-variant and data-size. Interactive components list the granular JavaScript modules the host must load.

Macro-Driven Dashboard Generation

The MCP server provides a robust set of macro layouts (search_macro_blocks) that enable connected LLMs to predictably assemble complex layouts (like Shadcn dashboards) out-of-the-box.

  • Layout Neutrality: Supports both sidebar (sidebar-dashboard-shell, sidebar-inset-shell) and top-bar architectures (topbar-shell, topbar-nav).

  • Strict Validation: The validate_composition tool ensures that generated layouts adhere to the Basecoat CSS theming contracts, strict spacing rhythm scales (0, 2, 4, 6, 8, 12), and proper landmark accessibility.

  • Agent Guidance: LLMs are encouraged to use search_macro_blocks to find a shell (layout wrapper), and dashboard-main or dashboard-workspace to populate the main container, guaranteeing deterministic, pixel-perfect Shadcn/ui parody without React runtime artifacts.

Registry and exclusions

The checked-in registry contains 62 curated components: all 57 shadcn/ui New York v4 primitives adapted for pure Basecoat CSS without React, plus Basecoat extensions (theme-switcher, segmented-toggle, svg-area-chart, native-select) with explicit FSM state contracts:

accordion, alert, alert-dialog, aspect-ratio, avatar, badge, breadcrumb, button, button-group, calendar, card, carousel, chart, checkbox, collapsible, combobox, command, context-menu, data-table, date-picker, dialog, drawer, dropdown-menu, empty, field, form, hover-card, input, input-group, input-otp, item, kbd, label, menubar, native-select, navigation-menu, pagination, popover, progress, radio-group, resizable, scroll-area, segmented-toggle, select, separator, sheet, sidebar, skeleton, slider, sonner, spinner, svg-area-chart, switch, table, tabs, textarea, theme-switcher, toast, toggle, toggle-group, tooltip

Comprehensive Catalog Counts

  • 62 Curated Components: All 57 shadcn/ui new-york-v4 primitives plus Basecoat extensions with verified HTML/Astro markup templates, zero React bundling requirements, and finite state machine (FSM) contracts.

  • 84 Macro Blocks & Aliases: Layout blueprints covering sidebar-01..16, dashboard-01..07, login-01..05, signup-01..05, otp-01..05, mail, tasks, forms, products, analytics, billing, and settings.

  • 11 Page Recipes: End-to-end multi-page layout graphs (workspace-dashboard, ecommerce-overview, analytics-workspace, workspace-settings, workspace-detail, tasks-table-workspace, mail-workspace, auth-flow, auth-split-flow, data-records, marketing-pricing).

  • 45 Composable Component Stacks: Composable stacks across 7 categories (shell-stacks, header-stacks, kpi-stacks, chart-stacks, table-stacks, overlay-stacks, form-stacks) with slot hydration into canonical shells.

  • 56 Theme-Aware Chart Blueprints: Visualizations across 7 categories (area, bar, line, pie, radar, radial, tooltip) mapped to CSS tokens (var(--chart-1) through var(--chart-5)) with mounts for 5 frameworks (vanilla, astro, react, vue, svelte).

  • 96 Markdown Files across the 3-Pillar Skill Vault: Distributed across skills/basecoat (core foundations and 57 component guides), skills/basecoat-dashboard (dashboard architecture, block patterns, and audit checklist), and skills/basecoat-charts (ApexCharts blueprints and token mapping).

The maintenance snapshot records 41 discovered upstream components. All 57 shadcn/ui primitives are now curated with templates, dependencies, and state contracts. Slider uses basecoat-css/range, not a slider module.

The runtime has no network client, remote documentation dependency, frontend framework runtime, remote media analysis, or bundled host assets. Generated templates may not use basecoat-css/all; each controller is imported explicitly. Search results do not contain markup, newly discovered components are never auto-promoted, and JSON or HTML is never sliced to fit a response budget.

Astro and static HTML use cases

In Astro, use the integration resource for Vite, Tailwind CSS 4, CSS ordering, selective controller imports, native <dialog> wiring, and ClientRouter hooks. In static HTML, copy the listed built controller files from basecoat-css into the host application's asset directory and preserve dependency order. Chart templates require host-supplied Chart.js.

Maintainers can refresh the pinned Basecoat snapshot only with an explicit immutable commit source, for example npm run sync -- --ref <40-character-commit-sha>. This is the only command that uses HTTPS. It validates schema, exports, notices, response budgets, version direction, and atomic replacement before changing the registry. It does not refresh shadcn mappings or macro blocks.

Development and verification

Install dependencies with npm ci, then run the focused checks:

npm run check
npm pack --dry-run
npm audit --omit=dev

npm run check type-checks, verifies both compiled snapshots, builds and runs the Node test suite, and checks the branch diff for whitespace errors. The test suite also exercises the packed read-only MCP bin offline. npm pack --dry-run checks the package file allowlist without retaining a tarball. npm audit --omit=dev checks production dependencies against the npm advisory database and therefore requires network access. Maintainers can verify the pinned Basecoat source with:

For release parity evidence, run the local-only routine before and after any approved publication:

npm run release:check -- --phase=pre-release --write=tmp/release-pre.json
npm run release:check -- --phase=post-release --write=tmp/release-post.json

The routine discovers surfaces from current repository metadata, compares local authoritative values, and records current, expected, correction, status, and verification. It checks package identity, server manifest parity, stdio transport, advertised capabilities, install metadata, and restrained discoverability copy. It never performs network requests or external writes; GitHub, npm, the MCP Registry, and directory/catalog corrections remain explicitly approved manual actions. Do not treat badges, download counts, upstream references, or search-result snippets as release authority.

npm run sync -- --ref <40-character-commit-sha> --check

The sync command is the only network boundary. Macro authoring changes require npm run compile:blocks; review the generated src/macros/registry.snapshot.json and then run npm run compile:blocks:check.

Contributing

  1. Create a focused branch from the default branch.

  2. Keep component templates, macro contracts, and documentation aligned with checked-in source.

  3. Run npm run typecheck, npm run compile:semantics:check, npm run compile:blocks:check, and npm run test.

  4. Run npm pack --dry-run when package contents or metadata change.

  5. Describe behavior changes, bounded-output effects, and any required host application work in the pull request.

Do not add GitHub Actions workflows. Upstream registry refreshes and macro authoring are maintainer-reviewed changes, not server startup tasks.

Troubleshooting

  • The server starts but reads the wrong project: set an absolute --project-root or BASECOAT_PROJECT_ROOT. The fallback is the process launch directory.

  • DESIGN.md is not available: place a regular file at the configured root. Parent directories and symlinks are not followed.

  • A source checkout cannot start: run npm run build before npm start.

  • A macro result has a cursor: request the next page with that cursor; do not concatenate or parse partial JSON. Changed registry, design, or effective rhythm revisions make prior cursors stale.

  • An apply acknowledgement includes truncated: true: the mutation committed; reread context or validation tools for the omitted detail.

  • An importer diagnostic mentions OAuth, captcha, or an unsupported dependency: implement or resolve it in the host application or reviewed mapping. The importer does not guess runtime behavior.

  • A design patch conflicts: reread get_design_context, use its current revision, and send a new unique operationId.

See ARCHITECTURE.md for runtime boundaries, persistence, packet limits, and sync policy. Report reproducible defects in the issue tracker.

Author, license, and upstream attribution

Created and maintained by Žygimantas Jasiulionis / Intellmedia under the MIT License.

Basecoat UI is an independent MIT-licensed project by Ronan Berder. Adapted templates and metadata retain the complete Basecoat notice in THIRD_PARTY_NOTICES.md. Basecoat adapts design patterns from shadcn/ui; the notice preserves that attribution. No Basecoat CSS or shadcn source is vendored here.

Available Tools

33 tools
apply_design_patchA
Idempotent

Apply one atomic list of design graph operations with expectedRevision and operationId. Replay with the same operationId returns the original receipt. A committed mutation always acknowledges success; oversized optional fields may be omitted with truncated:true. Does not write application source files.

NameRequiredDescriptionDefault
designIdYesIdentifier of the design session to mutate.
operationsYesOrdered array of patch operations (add_node, remove_node, move_node, connect, disconnect, set_decision, set_binding).
operationIdYesIdempotency key for this patch transaction.
expectedRevisionYesExpected current revision of the session to guarantee optimistic concurrency.

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare idempotentHint=true and readOnlyHint=false, and the description meaningfully extends that: replay returns the original receipt, committed mutations always acknowledge success, oversized optional fields may be omitted with truncated:true, and it does not touch source files. This is substantive behavioral context beyond the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Four tight sentences that are front-loaded with the atomic-apply statement and follow with replay, acknowledgment/truncation, and scope boundary. No filler; each sentence carries distinct information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description compensates by describing the return behavior (receipt on replay, success acknowledgment, truncated:true), and it covers concurrency and idempotency for a mutating tool. The omission is any explanation of the operation kinds themselves, though the schema's oneOf branches carry that.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3, but the description adds meaning the schema does not: operationId is positioned as a replay/idempotency key and expectedRevision as the concurrency guard, tying the parameters to their operational contract.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

Specific verb+resource: 'Apply one atomic list of design graph operations' clearly names both the action and the target, and the closing 'Does not write application source files' carves out scope. It does not name a sibling alternative, but the graph-mutation domain is unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Idempotency and concurrency requirements are explained ('Replay with the same operationId', 'with expectedRevision'), which imply the calling context, but there is no explicit when-to-use or when-not-to-use guidance relative to validate_design or the other design siblings.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

basecoat_component_syntaxA
Read-onlyIdempotent

[STAGE 3: SYNTAX & STACKS] Retrieve copy-pasteable Basecoat component markup with pre-configured FSM state variants (default, active, loading, disabled, open, closed) and dependencies for any of the 57 Basecoat components. Next step: Call basecoat_quality_inspector to audit assembled markup.

NameRequiredDescriptionDefault
idNoAlternative identifier alias for the component (matches component argument).
iconNoVerified Lucide action icon to inject with canonical data-icon="inline-start|inline-end" positioning.
nameNoAlternative identifier alias for the component.
stateNoTarget interactive state variant to bind to markup: "default", "active", "loading", "disabled", "open", "closed", "invalid", or "open/closed".
variantNoVisual variant token (e.g. "outline", "ghost", "secondary", "destructive", "subcard", "horizontal", "inline", "error").
componentNoComponent name or alias to retrieve canonical FSM-bound syntax for (e.g. "dialog", "tabs", "button", "input", "select", "metric-card", "data-table", "sidebar-shell", "field", "field-group").
componentIdNoAlternative identifier alias for the component.
environmentNoTarget output environment: "html", "astro", "react", "vue", or "svelte". Defaults to "html".
orientationNoSpatial orientation: "vertical" (standard stacked), "horizontal" (grid 2-column for settings), or "inline" (checkbox/switch/radio).

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false, and closed-world, so the safety profile is fully covered structurally. The description adds useful behavioral detail about the payload (pre-configured FSM state variants plus dependencies), but says nothing about return format, size, or limits.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, front-loaded with the stage tag and the core action, with no wasted clauses. It is appropriately sized for the tool, though the bracketed stage marker is meta-scaffolding rather than tool-specific content.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description does carry the burden of explaining the return value, and it does so ('copy-pasteable markup with state variants and dependencies'). Combined with annotations covering safety and a 100%-covered schema, the definition is nearly complete, with only the absence of sibling disambiguation as a gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so all nine parameters are already documented in the schema, making 3 the baseline. The description echoes the state variants and dependencies but adds no syntax or format guidance beyond what the schema provides, and does not clarify the four alias parameters.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource ('Retrieve copy-pasteable Basecoat component markup') and adds scope (57 components, FSM state variants, dependencies). However, it never distinguishes itself from lookalike siblings such as get_component_html or get_component_syntax, so an agent still has to guess which retrieval tool to pick.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The '[STAGE 3: SYNTAX & STACKS]' label and 'Next step: Call basecoat_quality_inspector' give workflow context, which implies when this tool fits. But there is no explicit when-not guidance and no comparison to the sibling retrieval tools that appear to do overlapping work.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

basecoat_compose_stackA
Read-onlyIdempotent

[STAGE 3: SYNTAX & STACKS] Assemble full shell architectures (sidebar-01..16, topbar-shell, inset-shell, split-shell) and hydrate pre-configured component stacks (kpi-4-col-delta, area-revenue-stack, data-table-full-crud, detail-inspector-drawer, field-group-settings) into slots with optical density control. Next step: Call basecoat_quality_inspector to verify markup compliance.

NameRequiredDescriptionDefault
idNoPoka-Yoke alias for shellId.
nameNoPoka-Yoke alias for shellId.
shellNoPoka-Yoke alias for shellId.
titleNoOptional workspace/page title to inject into the shell header.
stacksNoOrdered list or record of component stack IDs to hydrate into the shell slots (e.g., ["kpi-4-col", "area-chart-overview", "data-table-full-crud", "recent-sales-feed", "detail-drawer"]). Also accepts category shorthands: "kpi", "chart", "table", "form", "overlay".
densityNoOptical spacing density mode. Defaults to standard.
shellIdNoShell architecture ID from shell-stacks: sidebar-01..sidebar-16, topbar-shell, inset-shell, or split-shell. Defaults to sidebar-01.
headerIdNoOptional header stack ID from header-stacks: breadcrumb-command-header, tabs-filter-header, or date-range-export-header.
componentIdNoPoka-Yoke alias for shellId.
environmentNoTarget output environment/framework. Defaults to html.

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint/idempotentHint=true and destructiveHint=false, establishing this as a safe, repeatable composition step with no persistence. The description adds value beyond that by naming the produced artifact (a full shell architecture with hydrated slots), the downstream verification step, and the optical density concept; it still says nothing about the returned payload, but with annotations covering the safety profile and no output schema, this is a solid disclosure.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, both earning their place: the first front-loads the stage and the core action, the second routes to the next tool. The long parenthetical stack enumerations and bracket tag make it dense, but they carry real routing information rather than filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 10-parameter, zero-required composition tool with full schema coverage and no output schema, the description supplies the missing conceptual layer: what a 'shell + stacks' composition is and how it is validated afterward. The omission of return-value/pagination-style detail is acceptable precisely because no output schema exists to be redundant with, though a hint about the returned artifact would close the gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so every parameter (including the alias cluster id/name/shell/componentId, the stacks array, and density) is already documented with defaults and enums in the schema. The description's examples overlap heavily with the schema's own examples for `stacks`, adding little new syntax or format meaning. Baseline 3 applies when the schema carries the load.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific verb+resource ('Assemble full shell architectures', 'hydrate pre-configured component stacks into slots') and enumerates the concrete artifacts involved (sidebar-01..16, topbar-shell, kpi-4-col-delta, data-table-full-crud). It is clearly distinguishable from siblings like basecoat_component_syntax or basecoat_quality_inspector, including by nominating one of them as the follow-up stage.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The '[STAGE 3: SYNTAX & STACKS]' prefix and 'Next step: Call basecoat_quality_inspector to verify markup compliance' give explicit workflow sequencing, so the agent knows where this fits. However, it never states when NOT to use it or which sibling covers the adjacent stages (e.g., basecoat_page_architect), leaving the only exclusion to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

basecoat_creative_directorB
Read-onlyIdempotent

[STAGE 2: RULES & RHYTHM] Surface Kanso minimalism and Basecoat design intelligence: typography ladders, optical spacing rhythm, whitespace density, contrast ratios, style packs, and subtle elevation strategies. Next step: Call basecoat_compose_stack or basecoat_component_syntax.

NameRequiredDescriptionDefault
idNoPrinciple ID or component ID alias.
nameNoComponent name or principle name alias.
topicNoDesign topic to inspect: "typography", "whitespace", "hierarchy", "elevation", "style-packs", "content-strategy", "density", or "all".
densityNoInterface spatial density profile: "compact" (dense table/data tool, p-4/h-12), "standard" (balanced dashboard, p-6/h-14), or "comfortable" (generous whitespace reading, p-8/h-14).
stylePackNoBasecoat curated style pack aesthetic: "vega" (default New York v4), "nova" (SaaS), "maia" (organic pill), "lyra" (high-density brutalist), "mira" (editorial), "luma" (soft), "sera" (architectural), or "rhea" (curved).
visitorJobNoVisitor mental model and primary task: "operate" (fast scanning SaaS), "persuade" (marketing landing), "read" (prose doc), or "experience" (immersive showcase).
componentIdNoComponent ID alias.
environmentNoTarget environment (defaults to "html").

TDQS

B3.1/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, openWorldHint=false and destructiveHint=false, so the safety profile is fully covered by structured data. The description adds useful context that this is a read-only advisory stage in a multi-stage pipeline, but discloses nothing further about what it returns or any limits.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, stage tag front-loaded, no padding. It is efficient, though the topic enumeration largely duplicates the topic enum and could be trimmed.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With 100% schema coverage and full annotations, the structured data covers inputs and safety, and there is no output schema to explain. What remains missing is disambiguation from the crowded sibling set (get_rhythm_rules, get_design_rules, basecoat_page_architect), which an agent in this pipeline genuinely needs.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% with 8 well-documented parameters and five enums, so the schema carries parameter meaning entirely. The description's topic list loosely echoes the topic enum but adds no syntax, defaults, or interaction semantics beyond what the schema already provides; baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose3/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states it surfaces Kanso minimalism and design intelligence across enumerated topics (typography ladders, spacing rhythm, whitespace density, contrast ratios, style packs, elevation), which aligns with the topic enum. However, the verb 'Surface' is abstract and the phrasing is marketing-flavored rather than a concrete verb+resource. It does not distinguish itself from close siblings like get_rhythm_rules, get_design_rules, or get_creative_direction.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The '[STAGE 2: RULES & RHYTHM]' tag plus 'Next step: Call basecoat_compose_stack or basecoat_component_syntax' gives genuine workflow positioning. But it never states when to choose this tool over alternatives such as get_rhythm_rules or get_design_rules, so usage is only implied by pipeline order.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

basecoat_get_chart_blueprintA
Read-onlyIdempotent

[STAGE 3: SYNTAX & STACKS] Retrieve complete chart markup, CSS theme tokens (--chart-1..5), layout footprint, client options, and framework mount code (vanilla, astro, react, vue, svelte) with optional theme token overrides for a specific chart blueprint ID or category. Next step: Call basecoat_quality_inspector to audit the assembled page.

NameRequiredDescriptionDefault
idNoAlias for chartId. Defaults to "area-default" if neither chartId nor id is provided.
nameNoAlias for chartId/name.
engineNoChart rendering engine (svg or apexcharts). Defaults to svg.svg
chartIdNoChart blueprint ID from basecoat_list_charts (e.g., area-default, area-stacked, bar-multiple, pie-donut, radar-default, radial-half, tooltip-default). Also accepts category name or keyword alias.
frameworkNoTarget framework mount generator (vanilla, astro, react, vue, svelte, html). When html or omitted, resolves to vanilla.
componentIdNoAlias for chartId/id.
environmentNoTarget environment (html, astro, react, vue, svelte). Defaults to html.html
themeTokensNoOptional CSS theme token overrides (e.g. { "var(--chart-1)": "var(--color-primary)" }).

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint and non-destructive behavior, so the safety profile is covered. The description adds genuine behavioral value by specifying exactly what comes back (markup, tokens, layout footprint, per-framework mount code) and that theme overrides are optional.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two dense sentences with the stage tag and core payload front-loaded, ending with a next-step pointer. Every clause (tokens, layout, mount code) conveys content, though the enumeration is slightly heavy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description must describe returns, and it does so thoroughly (markup, theme tokens, layout footprint, client options, framework mount code). Combined with 100% schema coverage and clear pipeline positioning, only auth/limits context is absent, which is minor for a read-only tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the schema carries the parameter burden including aliases and enum meanings. The description mentions 'chart blueprint ID or category' and per-framework mount code, which lightly maps to chartId and framework, but adds no syntax beyond the schema. Baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb ('Retrieve') and resource ('complete chart markup, CSS theme tokens, layout footprint, client options, and framework mount code') for a chart blueprint ID or category. The enumerated outputs make it distinguishable from basecoat_list_charts, which only lists blueprints rather than fetching their full markup.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The '[STAGE 3: SYNTAX & STACKS]' tag and 'Next step: Call basecoat_quality_inspector' route the agent through the pipeline and imply this runs after selection. It doesn't explicitly state when-not-to-use or name basecoat_list_charts as the prerequisite, so guidance is clear but not exhaustive.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

basecoat_list_chartsA
Read-onlyIdempotent

[STAGE 3: SYNTAX & STACKS] List and filter 50+ Basecoat ApexCharts and SVG data visualization blueprints by category (area, bar, line, pie, radar, radial, tooltip) or keyword search/query. Next step: Call basecoat_get_chart_blueprint with the selected chart ID.

NameRequiredDescriptionDefault
idNoFilter or match by specific chart ID.
nameNoFilter or match by chart name.
queryNoSearch keyword alias for search.
searchNoSearch keyword for chart variant (e.g., stacked, gradient, sparkline, donut, gauge).
categoryNoFilter charts by category (area, bar, line, pie, radar, radial, tooltip).
componentIdNoAlias for chart ID filter.

TDQS

A3.9/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, non-destructive and closed-world, so the safety profile is fully covered by structured data. The description only adds the catalog size ('50+') and the stage label; it does not disclose return shape, pagination, or match behavior. Adequate but thin on behavioral context.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two front-loaded sentences with a clear action statement followed by the next-step directive; nothing is wasted. The '[STAGE 3: SYNTAX & STACKS]' prefix is moderately useful workflow scaffolding but borders on meta-clutter.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only listing tool with full param coverage and safety annotations, the definition supplies the essential action, filters, and next step. It omits what a returned 'blueprint' record contains, but the routing to get_chart_blueprint largely compensates.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so all six parameters (including the id/componentId aliases and query/search aliases) are already documented in the schema. The description restates the category enum and mentions keyword search but adds no syntax, format, or precedence rules beyond the schema, so baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb pair ('List and filter') and a concrete resource ('50+ Basecoat ApexCharts and SVG data visualization blueprints') with the filter axes named (category, keyword). It is clearly distinguished from the sibling basecoat_get_chart_blueprint, which it explicitly frames as the follow-up step.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives explicit workflow routing: 'Next step: Call basecoat_get_chart_blueprint with the selected chart ID,' so the agent knows what comes after this tool. It does not state when NOT to use it or contrast it with search_components/list_blocks, so no exclusion guidance, but the routing is clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

basecoat_page_architectA
Read-onlyIdempotent

[STAGE 1: ARCHITECT] Search and retrieve complete layout scaffolds (Workspace Dashboard, Auth Split-Screen, Data Table Detail, Workspace Settings, Pricing, etc.) with explicit slot markers, grid structures, and responsive containers. Next step: Call basecoat_rules_enforcer and basecoat_creative_director, then basecoat_compose_stack or basecoat_component_syntax.

NameRequiredDescriptionDefault
idNoAlternative recipe or block identifier alias matching id or recipe.
nameNoAlternative recipe or block identifier alias.
blockNoSpecific block identifier or pattern to retrieve scaffold for (e.g. "sidebar-01".."sidebar-16", "dashboard-01".."dashboard-07", "login-01").
intentNoUser or business intent for page scaffolding (e.g. "workspace-dashboard", "executive-dashboard", "sidebar-07", "data-table-detail", "auth-split-flow").
recipeNoMacro recipe identifier to resolve directly (e.g. "workspace-dashboard", "workspace-detail", "workspace-settings", "auth-split-flow").
densityNoVisual layout density: "comfortable" (standard SaaS spacing, p-6/h-14) or "compact" (dense data tools, p-4/h-12).
componentIdNoAlternative recipe or block identifier alias.
environmentNoTarget framework/environment template (defaults to html).

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false, so the safety profile is covered. The description adds value beyond that by disclosing what is actually returned — scaffolds containing explicit slot markers, grid structures, and responsive containers — which is important behavioral context given there is no output schema. It stops short of describing pagination, size limits, or failure behavior when an id/recipe is not found.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two tight sentences, front-loaded with the stage label and the core action, followed by the downstream call chain. No filler, though the long parenthetical enumeration of scaffold types is slightly list-heavy and the 'Next step' sentence is compressed enough that its conditional logic is implicit rather than ordered.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a zero-required-parameter, eight-parameter retrieval tool with no output schema, the description succeeds at conveying both what comes back (slot-marked scaffolds) and where it sits in the multi-step workflow. The main residual gap is that the alias relationship among id/name/block/intent/recipe/componentId is left entirely to the schema, so an agent has no description-level guidance on precedence when several are supplied.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so all eight parameters are already documented in the schema, including the enums for density and environment. The description supplies concrete example values (workspace-dashboard, auth-split-flow, sidebar-07) that loosely mirror the intent/recipe/block parameters, but adds no meaningful semantics beyond what the schema already states. Baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb pair (search and retrieve) plus the exact resource (complete layout scaffolds) and enumerates concrete artifact types (Workspace Dashboard, Auth Split-Screen, Data Table Detail, etc.). The '[STAGE 1: ARCHITECT]' tag and the emphasis on slot markers/grid structures/responsive containers make it clearly distinguishable from sibling retrieval tools like search_macro_blocks or get_component_html.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly positions itself as the first stage and prescribes the exact follow-up chain: basecoat_rules_enforcer and basecoat_creative_director, then basecoat_compose_stack or basecoat_component_syntax. This is strong sequencing guidance, but it never states when NOT to use it or how it differs from adjacent retrieval siblings such as search_macro_blocks, get_macro_block, or get_page_architect.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

basecoat_quality_inspectorB
Read-onlyIdempotent

[STAGE 4: QUALITY AUDIT] Audit HTML/Astro markup and return a structured quality report with Score (0-100), Syntax Violations, Accessibility/ARIA omissions, and Auto-Fix suggestions. Final quality gate for all generated Basecoat UI code.

NameRequiredDescriptionDefault
idNoAlternative component identifier alias to inspect.
codeNoHTML/component markup string to inspect for syntax violations, a11y omissions, and quality metrics.
htmlNoAlternative parameter alias for the code string to inspect.
nameNoAlternative component identifier alias to inspect.
markupNoAlternative parameter alias for the markup snippet to inspect.
enforceFsmNoWhether to strictly enforce FSM data-state bindings and field-group hierarchies on interactive controls.
componentIdNoAlternative component identifier alias to inspect.
environmentNoTarget environment for inspection (defaults to html).
densityProfileNoDensity profile context: "comfortable" (standard rhythm) or "compact" (dense micro-spacing allowed).
semanticProfileNoSemantic token rhythm profile to validate against (defaults to "default").

TDQS

B3.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false, and openWorldHint=false, so the safety and repeatability profile is clear. The description adds the stage positioning and the report contents, which is useful context beyond the annotations, but it does not mention defaults, limits (e.g., the 262144 maxLength), or how the FSM/density checks behave.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, front-loaded with the stage tag and the verb/resource. It is efficient, though the bracketed stage prefix and the 'Final quality gate' clause are somewhat redundant framing.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 10-parameter, zero-required tool with no output schema, the description explains the report sections but not the return structure, the meaning of a partial/omitted input, or how the many alias parameters (code/html/markup) should be chosen. It is adequate but leaves real gaps for a tool this broad.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so every parameter is already documented in the schema. The description adds no parameter-level meaning beyond what the schema provides, making the baseline 3 the correct score.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

Names a specific verb (Audit) and resource (HTML/Astro markup) and states the output shape (Score 0-100, Syntax Violations, Accessibility/ARIA omissions, Auto-Fix). It positions itself as the 'Final quality gate' but does not distinguish itself from the very close siblings validate_markup and validate_composition.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no when-to-use guidance or routing to alternatives. Given siblings like validate_markup, validate_composition, and validate_design, the agent has no explicit signal for when this Stage 4 gate is the right call versus those validators.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

basecoat_rules_enforcerB
Read-onlyIdempotent

[STAGE 2: RULES & RHYTHM] Retrieve indexed technical implementation constraints covering strict Tailwind CSS v4 syntax, mandatory FSM data-state contracts, semantic CSS variable tokens, and semantic HTML landmarks. Next step: Call basecoat_creative_director or basecoat_component_syntax.

NameRequiredDescriptionDefault
idNoRule ID or component ID to inspect.
codeNoHTML/markup snippet to audit against the indexed technical constraints.
htmlNoAlternative alias for the code parameter to audit against constraints.
nameNoRule or component name alias.
queryNoSearch query to match against rule IDs, titles, forbidden patterns, or required syntax.
categoryNoFilter rules by technical domain: "tailwind-v4", "fsm-contracts", "tokens", "semantic-html", "dashboard-patterns", or "all".
componentIdNoComponent ID alias to filter relevant rules.
environmentNoTarget output environment: "html", "astro", "react", "vue", or "svelte". Defaults to "html".

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false, and openWorldHint=false, so safety and repeatability are covered structurally. The description adds that results are 'indexed technical constraints' spanning four categories, but says nothing about pagination, result volume, or how auditing output is shaped.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences with the stage marker front-loaded and no filler; every clause carries information about scope or next action. The bracketed stage tag is slightly meta but useful for pipeline ordering.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For an 8-parameter, no-output-schema retrieval/audit tool, the description covers what is retrieved and the downstream step, and the schema covers each parameter. It still omits how the two modes (id/query lookup vs code/html auditing) relate and when to supply which, leaving a gap an agent must guess at.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% across all 8 parameters, including enum explanations for category and environment, so the schema does the heavy lifting. The description adds no parameter-level meaning at all, which is the baseline 3 when structured fields are already complete.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource (retrieve indexed technical implementation constraints) and enumerates the four covered domains: Tailwind v4 syntax, FSM data-state contracts, CSS variable tokens, and semantic HTML landmarks. It is clear what it returns, though it does not directly distinguish itself from near-name siblings like get_rhythm_rules, get_design_rules, or enforce_rules.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The [STAGE 2] tag and the trailing 'Next step: Call basecoat_creative_director or basecoat_component_syntax' place the tool in a workflow and route the agent onward. However, there is no guidance on when to choose this over the overlapping rules/rhythm siblings, so usage is implied rather than specified.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

basecoat_setup_configA
Read-onlyIdempotent

[STAGE 1: ARCHITECT] Generate production Tailwind CSS v4 @import statements, OKLCH design tokens, @theme inline blocks, and theme bootstrap scripts for a selected framework (astro, vanilla, nextjs, sveltekit, vite, htmx) and style pack (vega, nova, maia, lyra, mira, luma, sera, rhea). Next step: Call basecoat_compose_stack or basecoat_page_architect.

NameRequiredDescriptionDefault
idNoFramework or style pack identifier alias.
nameNoFramework or style pack identifier alias.
frameworkNoTarget framework or environment for setup instructions and boilerplate (astro, vanilla, nextjs, sveltekit, vite, htmx). Defaults to astro.
stylePackNoAesthetic style pack preset (vega: standard shadcn New York v4, nova: modern SaaS, maia: playful organic, lyra: brutalist technical, mira: compact editorial, luma: soft modern, sera: architectural flat, rhea: curved modern). Defaults to vega.
componentIdNoFramework or style pack identifier alias.
environmentNoTarget environment alias (html, astro, react, vue, svelte).
includeDarkThemeScriptNoWhether to include the synchronous inline <head> dark mode bootstrap script to prevent theme flashing. Defaults to true.

TDQS

A3.9/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false, and openWorldHint=false, so the safety profile is covered. The description adds no behavioral context beyond that: it never says whether generated artifacts are returned as text or written to disk, nor anything about repeat-run behavior or side effects. Adequate, but not additive.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The action and its outputs are front-loaded, followed by the routing sentence. The first sentence is densely packed with long enumerations, but virtually nothing is wasted and the ordering of information is useful.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only generator with no output schema, the description usefully enumerates the artifact types produced so the agent knows what comes back. Minor gaps remain about output shape (single blob vs. multiple files) and whether anything persists, but the core call decision is fully supported.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, and the description merely repeats the framework and style-pack enumerations already in the schema. It adds no meaning about the alias parameters (id, name, componentId) or how environment relates to framework, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific verb and resource set: generating Tailwind v4 @import statements, OKLCH tokens, @theme inline blocks, and bootstrap scripts. It enumerates the exact framework and style-pack domains and labels itself 'STAGE 1: ARCHITECT', which separates it from sibling stages like basecoat_compose_stack and basecoat_page_architect.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The stage label plus an explicit 'Next step: Call basecoat_compose_stack or basecoat_page_architect' gives clear sequencing and routing. It does not state when NOT to use it or what prerequisites exist (existing config, project state), so it stops short of full when/when-not guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

begin_designA
Idempotent

Create a persistent design session under the host project root. Pass designId, profile (alias or ref), operationId, and optional decisions. Pins and hash-verifies the packaged macro registry. Idempotent for the same operationId. Oversized optional receipt fields may be omitted with truncated:true after commit.

NameRequiredDescriptionDefault
profileYesTarget rhythm/scaffold profile or recipe alias (e.g. "workspace-dashboard", "executive-dashboard").
designIdYesUnique identifier for the new design session (slug format, e.g. "workspace-v1").
decisionsNoInitial architectural decisions for the session (e.g. density, stylePack, responsive breakpoints).
operationIdYesIdempotency key for session creation.

TDQS

A3.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover the safety profile (readOnly=false, idempotent=true, destructive=false), and the description adds genuinely new behavior beyond them: it pins and hash-verifies the packaged macro registry, and notes that oversized optional receipt fields may be omitted via truncated:true after commit. These are real operational traits, not restatements of annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The core action is front-loaded in the first sentence and the sentences are dense and mostly earn their place. The trailing truncated:true/receipt-fields sentence is somewhat opaque and references concepts not present in the input schema, slightly diluting clarity.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 4-param creation tool with nested objects and no output schema, the description covers the mutation behavior, idempotency, and persistence well, but never indicates what the call returns (e.g. the created session or registry pin), which an agent would need in the absence of an output schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents all four parameters well. The description lists the parameters and lightly clarifies profile ("alias or ref"), but adds little syntax or semantics beyond the schema's own descriptions. Baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb+resource ("Create a persistent design session") and adds a scope detail ("under the host project root"), clearly separating it from siblings like apply_design_patch or validate_design. It is clear, though it never names a sibling explicitly for disambiguation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied rather than stated: an agent infers this is the entry point that starts a session before patching/validating. "Idempotent for the same operationId" hints at safe re-invocation, but there is no explicit when-to-use/when-not guidance or named alternative.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

compose_stackA
Read-onlyIdempotent

[STAGE 3: SYNTAX & STACKS] Alias of basecoat_compose_stack. Assemble shell architectures and hydrate pre-configured component stacks into slots.

NameRequiredDescriptionDefault
idNoPoka-Yoke alias for shellId.
nameNoPoka-Yoke alias for shellId.
shellNoPoka-Yoke alias for shellId.
titleNoOptional workspace/page title to inject into the shell header.
stacksNoOrdered list or record of component stack IDs to hydrate into the shell slots (e.g., ["kpi-4-col", "area-chart-overview", "data-table-full-crud", "recent-sales-feed", "detail-drawer"]). Also accepts category shorthands: "kpi", "chart", "table", "form", "overlay".
densityNoOptical spacing density mode. Defaults to standard.
shellIdNoShell architecture ID from shell-stacks: sidebar-01..sidebar-16, topbar-shell, inset-shell, or split-shell. Defaults to sidebar-01.
headerIdNoOptional header stack ID from header-stacks: breadcrumb-command-header, tabs-filter-header, or date-range-export-header.
componentIdNoPoka-Yoke alias for shellId.
environmentNoTarget output environment/framework. Defaults to html.

TDQS

A3.7/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover the safety profile (readOnlyHint, idempotentHint, openWorldHint=false, destructiveHint=false). The description adds the alias equivalence, which is useful, but discloses no behavior beyond that – no statement of what is produced, whether anything is persisted, or any constraints. It does not contradict the annotations, so no reduction applies.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences, front-loaded with the stage tag and the alias relationship, with zero filler. Every clause carries information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With 10 parameters, no output schema, and a generate/assemble operation, the description should say what the tool returns (markup, file paths, a composition result). It does not, leaving the agent unable to anticipate output shape, though the schema does cover all inputs.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and the schema itself documents every parameter richly (alias mapping, defaults, enum values, examples). The description contributes no parameter-level meaning beyond what the schema already provides, so the baseline of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a concrete verb pair ("assemble" / "hydrate") and named resources ("shell architectures", "pre-configured component stacks into slots"). Critically, it declares itself an alias of basecoat_compose_stack, so an agent can immediately tell it is a duplicate entry point rather than a distinct capability.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The "[STAGE 3: SYNTAX & STACKS]" tag gives pipeline context, but there is no explicit when-to-use/when-not guidance and no statement of how this alias differs in usage from basecoat_compose_stack. Usage is only implied by the stage label.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

enforce_rulesC
Read-onlyIdempotent

[STAGE 2: RULES & RHYTHM] Alias of basecoat_rules_enforcer. Retrieve indexed technical implementation constraints.

NameRequiredDescriptionDefault
idNoRule ID or component ID to inspect.
codeNoHTML/markup snippet to audit against the indexed technical constraints.
htmlNoAlternative alias for the code parameter to audit against constraints.
nameNoRule or component name alias.
queryNoSearch query to match against rule IDs, titles, forbidden patterns, or required syntax.
categoryNoFilter rules by technical domain: "tailwind-v4", "fsm-contracts", "tokens", "semantic-html", "dashboard-patterns", or "all".
componentIdNoComponent ID alias to filter relevant rules.
environmentNoTarget output environment: "html", "astro", "react", "vue", or "svelte". Defaults to "html".

TDQS

C2.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, openWorldHint=false, destructiveHint=false, so the safety profile is covered. The description adds 'indexed' (implying a pre-built corpus) but does not disclose return behavior, whether it audits the passed code or just returns rules, or how aliases interplay.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single short sentence with a stage prefix — no waste. It is front-loaded, though the stage tag is metadata rather than useful description.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For an 8-parameter tool with no output schema, the description does not explain what is returned, how the code/html audit mode works versus query mode, or how strictness is applied. The annotations cover safety but the description is too thin to guide correct invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so every parameter is documented in the schema itself. The description adds no syntax, format, or precedence detail (e.g., which of id/name/componentId/query win when combined). Baseline 3 when the schema does the work.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose3/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a verb+resource ('retrieve indexed technical implementation constraints'), but the framing as an 'alias of basecoat_rules_enforcer' plus a stage tag does most of the disambiguating work. It doesn't say what these constraints look like or how it differs from sibling get_design_rules/get_rhythm_rules beyond the parent tool name.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No when-to-use guidance, no when-not-to-use, and no mention of alternatives like get_design_rules or get_rhythm_rules. The '[STAGE 2: RULES & RHYTHM]' tag implies it belongs in a pipeline stage but doesn't explain call conditions or prerequisites.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_chart_blueprintB
Read-onlyIdempotent

[STAGE 3: SYNTAX & STACKS] Alias of basecoat_get_chart_blueprint. Retrieve complete chart markup, CSS theme tokens, and client options.

NameRequiredDescriptionDefault
idNoAlias for chartId. Defaults to "area-default" if neither chartId nor id is provided.
nameNoAlias for chartId/name.
engineNoChart rendering engine (svg or apexcharts). Defaults to svg.svg
chartIdNoChart blueprint ID from basecoat_list_charts (e.g., area-default, area-stacked, bar-multiple, pie-donut, radar-default, radial-half, tooltip-default). Also accepts category name or keyword alias.
frameworkNoTarget framework mount generator (vanilla, astro, react, vue, svelte, html). When html or omitted, resolves to vanilla.
componentIdNoAlias for chartId/id.
environmentNoTarget environment (html, astro, react, vue, svelte). Defaults to html.html
themeTokensNoOptional CSS theme token overrides (e.g. { "var(--chart-1)": "var(--color-primary)" }).

TDQS

B3.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover the safety profile (readOnlyHint, idempotentHint, non-destructive, closed-world). The description usefully adds that this is an alias of another tool and enumerates the return payload (markup, CSS theme tokens, client options) — valuable given there is no output schema — but it says nothing about whether the alias is functionally identical to the basecoat tool or about defaults/resolution behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences with no filler, and the action/return value is front-loaded after a compact stage tag. The bracketed stage prefix is opaque internal jargon that consumes space without informing the agent, keeping it just short of a 5.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description does the necessary work of naming the return payload, and the thorough input schema covers all 8 optional parameters. The remaining gap is that it never clarifies the alias's relationship to or difference from basecoat_get_chart_blueprint, which is the main ambiguity an agent would face.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, including detailed alias documentation for id/name/componentId and enum values, so the baseline is 3. The description only obliquely references parameters via 'CSS theme tokens' (themeTokens) and 'client options' and adds no syntax, defaulting, or precedence rules beyond what the schema already states.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource — 'Retrieve complete chart markup, CSS theme tokens, and client options' — and identifies itself as an alias of basecoat_get_chart_blueprint, which tells the agent exactly which underlying capability it maps to. It does not, however, distinguish itself from other chart-adjacent siblings such as list_charts or get_component_html beyond the alias note.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The only usage signal is the '[STAGE 3: SYNTAX & STACKS]' prefix and the alias declaration, which imply placement in a workflow but never state when to call this instead of basecoat_get_chart_blueprint or when a chart must first be listed. No when-to-use, when-not-to-use, or alternative routing is given.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_component_detailsA
Read-onlyIdempotent

Get one minimal component template, dependencies, and composition tips for Astro or HTML. Valid IDs: any of the 57 Basecoat components (button, card, dialog, dropdown-menu, table, tabs, badge, etc.). When called with {}, returns the top-level component catalog index. Next step: Call validate_composition or basecoat_quality_inspector after integrating markup.

NameRequiredDescriptionDefault
idNoBasecoat component ID from search_components (e.g., "button", "dialog", "card", "dropdown-menu", "table", "tabs").
nameNoAlternative component identifier alias.
componentIdNoAlternative component identifier alias.
environmentNoTarget framework/environment template to output (defaults to "html").

TDQS

A3.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly/idempotent/non-destructive/false openWorld, so the safety profile is covered. The description still adds genuine behavioral context: the special empty-argument mode returning a catalog index, and the intended workflow position after integration.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences, front-loaded with purpose, then valid IDs, then the empty-call behavior and next step. Efficient, though the 'Astro or HTML' qualifier adds a slightly misleading constraint that costs a point.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only, no-required-parameter tool with no output schema, the description covers what is returned, the empty-argument edge case, and the follow-on tools. It is close to complete; only the relationship to get_component_html and the framework coverage discrepancy are unaddressed.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the baseline is 3. The description does add the universe of valid ids (57 Basecoat components) and the {} semantics, but it says templates are 'for Astro or HTML' while the environment enum also offers react, vue and svelte — a mild mismatch that could steer the agent away from valid options.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource (get one minimal component template plus dependencies and composition tips), and the word 'one' scopes it against the list-returning search_components. It never names a sibling explicitly, so the agent must infer the boundary from the ID list rather than being told.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives concrete usage context: an empty {} call returns the catalog index, and it prescribes the follow-up step (validate_composition or basecoat_quality_inspector after integrating markup). It does not say when to prefer get_component_html or another sibling over this tool, so the alternatives side is missing.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_component_htmlA
Read-onlyIdempotent

Fetch HTML markup template and dependencies for a Basecoat component. Valid IDs: any of 57 Basecoat components. When called with {}, returns the top-level component catalog index. Next step: Call validate_composition or basecoat_quality_inspector to audit.

NameRequiredDescriptionDefault
idNoBasecoat component ID from search_components (e.g., "button", "dialog", "card", "dropdown-menu", "table", "tabs").
nameNoAlternative component identifier alias.
componentIdNoAlternative component identifier alias.
environmentNoTarget framework/environment template to output (defaults to "html").

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly, idempotent, non-destructive behavior, so the safety profile is covered. The description adds genuinely useful context — the empty-argument catalog fallback and the valid-ID universe — but says nothing about output size, caching, or template resolution behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two tight sentences with the return value front-loaded and the follow-up action last. No filler, though the "Valid IDs" fragment reads slightly like a note rather than prose.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description does the necessary work by naming what comes back (HTML markup plus dependencies, or the catalog index). It is adequate for a zero-required-parameter fetch tool, missing only return-shape specifics.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so id/name/componentId/environment are fully documented in the schema. The description contributes only the no-argument catalog case and the count of valid IDs, which is marginal value over structured fields.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ("Fetch HTML markup template and dependencies for a Basecoat component") and adds scope detail (57 valid IDs, catalog index on empty call). It doesn't explicitly distinguish itself from the sibling get_component_details, so the agent must infer the difference.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives concrete routing guidance: empty-object calls return the top-level catalog index, and it names the follow-up tools (validate_composition, basecoat_quality_inspector). It stops short of stating when NOT to use this versus get_component_details.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_component_syntaxA
Read-onlyIdempotent

[STAGE 3: SYNTAX & STACKS] Alias of basecoat_component_syntax. Retrieve copy-pasteable Basecoat component markup with FSM state variants.

NameRequiredDescriptionDefault
idNoAlternative identifier alias for the component (matches component argument).
iconNoVerified Lucide action icon to inject with canonical data-icon="inline-start|inline-end" positioning.
nameNoAlternative identifier alias for the component.
stateNoTarget interactive state variant to bind to markup: "default", "active", "loading", "disabled", "open", "closed", "invalid", or "open/closed".
variantNoVisual variant token (e.g. "outline", "ghost", "secondary", "destructive", "subcard", "horizontal", "inline", "error").
componentNoComponent name or alias to retrieve canonical FSM-bound syntax for (e.g. "dialog", "tabs", "button", "input", "select", "metric-card", "data-table", "sidebar-shell", "field", "field-group").
componentIdNoAlternative identifier alias for the component.
environmentNoTarget output environment: "html", "astro", "react", "vue", or "svelte". Defaults to "html".
orientationNoSpatial orientation: "vertical" (standard stacked), "horizontal" (grid 2-column for settings), or "inline" (checkbox/switch/radio).

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly, idempotent, non-destructive and closed-world, so the safety profile is covered. The description adds that output is 'copy-pasteable' markup with FSM state variants bound in, which is useful context, but says nothing about permissions, limits, or fallback behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short, front-loaded sentences that waste no words. The bracketed stage tag is slightly noisy but does front-load workflow placement.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only single-resource retrieval tool with no output schema and fully documented parameters, the description covers purpose, source of truth, and output nature. Only the relationship to sibling retrieval tools remains unstated.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and all 9 parameters, including 4 enums, are documented in the schema itself. The description adds no syntax, default, or interaction guidance beyond that, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (Retrieve) and resource (Basecoat component markup) plus the key qualifier that it is an alias of basecoat_component_syntax. It also names the scope ('with FSM state variants'), which distinguishes it from a plain markup lookup, though it never contrasts itself with siblings like get_component_html or get_component_details.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The '[STAGE 3: SYNTAX & STACKS]' prefix implies where this fits in a workflow, and the alias note implies equivalence with basecoat_component_syntax, but there is no explicit when-to-use vs when-to-use-an-alternative guidance against the many sibling retrieval tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_creative_directionC
Read-onlyIdempotent

[STAGE 2: RULES & RHYTHM] Alias of basecoat_creative_director. Surface Kanso minimalism and Basecoat design intelligence.

NameRequiredDescriptionDefault
idNoPrinciple ID or component ID alias.
nameNoComponent name or principle name alias.
topicNoDesign topic to inspect: "typography", "whitespace", "hierarchy", "elevation", "style-packs", "content-strategy", "density", or "all".
densityNoInterface spatial density profile: "compact" (dense table/data tool, p-4/h-12), "standard" (balanced dashboard, p-6/h-14), or "comfortable" (generous whitespace reading, p-8/h-14).
stylePackNoBasecoat curated style pack aesthetic: "vega" (default New York v4), "nova" (SaaS), "maia" (organic pill), "lyra" (high-density brutalist), "mira" (editorial), "luma" (soft), "sera" (architectural), or "rhea" (curved).
visitorJobNoVisitor mental model and primary task: "operate" (fast scanning SaaS), "persuade" (marketing landing), "read" (prose doc), or "experience" (immersive showcase).
componentIdNoComponent ID alias.
environmentNoTarget environment (defaults to "html").

TDQS

C2.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false, and openWorldHint=false, so the safety profile is fully covered. The description adds the stage/aliasing context but discloses nothing about the nature of the output or its relationship to the aliased tool, so it only marginally exceeds the annotation baseline.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences with the stage marker front-loaded and no filler. It is efficiently structured, though the cryptic phrasing sacrifices some clarity for brevity.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For an eight-parameter tool with five enums and no output schema, the description is too thin. It does not characterize what creative direction output looks like or how the many optional selector parameters shape the result, leaving the agent to infer behavior entirely from the schema and the unnamed alias target.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, with five of eight parameters having detailed enum descriptions, so the schema fully carries parameter meaning. The description contributes no additional parameter context, making the baseline 3 appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose3/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names an alias target ('Alias of basecoat_creative_director') and a workflow stage ('[STAGE 2: RULES & RHYTHM]'), which helps orient the agent. However, 'Surface Kanso minimalism and Basecoat design intelligence' is poetic rather than a concrete verb+resource statement, so it is unclear what this tool actually retrieves or returns.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no when-to-use vs when-not guidance. The alias note implies equivalence to basecoat_creative_director, but the description never says whether to prefer this over that sibling, get_design_context, or get_rhythm_rules. The stage tag hints at workflow ordering but does not specify selection conditions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_design_contextA
Read-onlyIdempotent

Read a focused design view: sessions (no designId), overview, decisions, graph, rules, focus, or next. Pin revision on first read; continuations must match. Does not create sessions.

NameRequiredDescriptionDefault
idNoAlternative design session ID alias matching designId.
nameNoAlternative design session ID alias matching designId.
viewNoContext perspective to retrieve: "sessions", "overview", "decisions", "graph", "rules", "focus", or "next". Defaults to "sessions".
cursorNoPagination cursor for paginated context listings.
nodeIdNoTarget node ID within the page (for "node" view).
pageIdNoTarget page ID within the design session (for "page" or "node" view).
designIdNoTarget design session ID (required for all views except "sessions").
revisionNoTarget design session revision to inspect (defaults to latest).
componentIdNoAlternative design session ID alias matching designId.
environmentNoTarget environment.

TDQS

A3.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already establish readOnly, idempotent, and non-destructive, so the bar is lower. The description still adds real value beyond them with the revision-pinning contract ("Pin revision on first read; continuations must match"), a stateful constraint not expressed anywhere in annotations or schema.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two dense sentences with no padding, front-loaded on the enumerated views. It is efficient but slightly cryptic — the second sentence's contract is terse enough to require re-reading, which keeps it just short of ideal.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 10-parameter read tool with no output schema, the definition covers the view set and revision semantics but says nothing about cursor/pagination behavior or how the views differ in payload. The individual schema descriptions carry most of the parameter burden, so it is adequate but leaves notable gaps.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the baseline is 3 and the schema already documents all ten parameters including the view enum and designId requirement. The description nonetheless adds the non-schema revision-continuation rule and notes the designId exemption for the sessions view, giving marginal extra meaning.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb ("Read") plus the resource (a focused design view) and enumerates the seven valid views, so the agent knows exactly what is retrieved. It also carves out scope against a sibling with "Does not create sessions," implicitly separating it from begin_design, though it doesn't name that sibling explicitly.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives conditional guidance ("sessions (no designId)") and a revision-continuation rule, which is more than nothing. However, it never states when to prefer one view over another or names the alternative tool an agent should pick for session creation, so usage is implied rather than spelled out.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_design_rulesA
Read-onlyIdempotent

Retrieve technical implementation constraints covering Tailwind CSS v4 syntax, mandatory FSM data-state contracts, semantic CSS variables, and HTML landmarks. When called with {}, returns the top-level catalog index.

NameRequiredDescriptionDefault
idNoIdentifier or keyword alias.
codeNoMarkup snippet to audit.
htmlNoAlternative markup snippet alias.
nameNoRule or component name alias.
queryNoSearch query matching rule IDs or keywords.
familyNoSemantic rhythm family filter (e.g. "spacing", "layout", "typography").
profileNoRhythm profile filter (e.g. "default", "compact", "comfortable").
categoryNoFilter rules by technical domain.
componentIdNoComponent identifier alias.
environmentNoTarget environment.

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, so the safety profile is covered structurally. The description adds one behavioral detail beyond that - the empty-argument call returns the catalog index - which is helpful but thin; return format, filtering behavior, and result shape are not described.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, front-loaded with the substantive purpose and followed by the empty-call behavior. No filler or redundancy; slightly terse rather than wasteful.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only retrieval tool with fully documented parameters and no output schema, the description is nearly complete, and the empty-call index behavior covers the main discovery path. A brief note on return shape would be the only remaining gap, and it is minor absent an output schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% across all 10 parameters, so the schema already documents each field including the two enums. The description adds no per-parameter meaning (e.g., how query vs name vs id differ, or how aliases resolve) beyond what the schema states, so this is the baseline case.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (Retrieve) and resource (technical implementation constraints), then enumerates the covered domains: Tailwind CSS v4 syntax, FSM data-state contracts, CSS variables, and HTML landmarks. This is clear, though it does not explicitly distinguish itself from overlapping siblings like get_rhythm_rules, get_fsm_recipe, or get_design_context, which appear to cover adjacent ground.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The one usage hint given is genuinely useful: calling with {} returns the top-level catalog index, which implies a discovery workflow. However, it names no alternatives and gives no when-not guidance relative to the numerous sibling rule/context tools, leaving the agent to infer routing.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_fsm_recipeB
Read-onlyIdempotent

Read finite FSM states, events, guards, actions, or transitions. Recipes are structural metadata, not executable runtime code.

NameRequiredDescriptionDefault
idNoAlternative recipe identifier alias.
nameNoAlternative recipe identifier alias.
limitNoMaximum number of FSM entries to return per page (1-32, default 10).
cursorNoPagination cursor for bounded continuation of FSM recipe details.
recipeNoFSM recipe identifier or alias to retrieve (e.g. "dialog", "tabs", "navigation", "collapsible-navigation", "sidebar").
sectionNoSpecific FSM recipe contract section to inspect ("states", "events", "guards", "actions", "transitions").
componentIdNoAlternative recipe identifier alias.
environmentNoTarget environment.

TDQS

B3.3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false and a closed world, so the safety profile is fully covered. The description adds one genuinely non-redundant fact: the result is structural metadata rather than runnable code, which informs interpretation. It says nothing about pagination behavior or result shape, so it exceeds the annotation baseline only modestly.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences, zero filler, with the operation and its scope front-loaded and the metadata caveat immediately after. Nothing could be cut without losing information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only tool with 100% schema coverage and no output schema, the description covers the essential floor. However, with 8 parameters and four separate string fields ('id', 'name', 'recipe', 'componentId') all described as recipe identifier aliases, a sentence clarifying which to supply and how pagination works would meaningfully reduce miscalls.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents all 8 parameters. The description re-lists the section values that the schema enum already defines and adds no format or interaction detail (e.g., how `recipe`, `id`, `name`, and `componentId` alias one another). Baseline 3 is appropriate when the schema does the heavy lifting.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ("Read") and enumerates the exact resource slice ("finite FSM states, events, guards, actions, or transitions"), which maps directly to the `section` enum. It is clear what the tool returns, but it never distinguishes itself from the many sibling read tools (get_component_details, get_macro_block, get_design_rules) by naming when this one applies instead.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no when-to-use guidance, no precondition, and no alternative named. The second sentence ("Recipes are structural metadata, not executable runtime code") is a useful scoping caveat but is not routing guidance. An agent must infer from the name alone that this is the FSM-metadata reader.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_macro_blockA
Read-onlyIdempotent

Retrieve one section of a compiled macro block blueprint (manifest, structure, slots, ports, rules, dependencies, provenance). Follow next cursors until complete. Optional designId pins aliases to that session registry.

NameRequiredDescriptionDefault
idNoAlternative block identifier alias matching idOrRef.
nameNoAlternative block identifier alias matching idOrRef.
cursorNoPagination cursor for large section reads exceeding packet limits.
idOrRefNoCanonical macro block ID or SHA-256 content reference hash.
sectionNoSpecific block section to retrieve: "all", "manifest", "structure", "slots", "ports", "rules", "dependencies", or "provenance". Defaults to "all".
designIdNoActive design session ID to retrieve session-bound block variants.
componentIdNoAlternative block identifier alias matching idOrRef.
environmentNoTarget environment (defaults to html).

TDQS

A3.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly/idempotent/non-destructive/openWorld=false, so the safety profile is covered. The description adds real behavioral context beyond that: pagination requires cursor iteration to completion, and designId pins alias resolution to a session registry. It stops short of describing return shape or the alias-resolution rules without designId.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three tight sentences with zero filler, front-loading the core action and resource before the pagination and session nuances. Nothing is repeated from the schema and every sentence carries distinct information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

There is no output schema, so the description must carry return expectations, and it does by naming the sections and the cursor-following requirement. It does not clarify that id/name/componentId are mutually exclusive aliases of idOrRef, but the schema attests to that, leaving only a minor gap for an 8-param, 0-required tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 100% schema coverage the baseline is 3, but the description adds meaning beyond the schema: it explains that designId pins aliases to that specific session registry, clarifying the interaction between the alias params and the session param, and frames cursor usage as an iterative loop rather than a one-shot field.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (Retrieve) and resource (one section of a compiled macro block blueprint), and enumerates the sections so an agent knows the granularity of the read. It does not explicitly name sibling tools like search_macro_blocks or list_blocks, so it is distinguishable but without direct sibling routing.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides operational guidance for pagination ('Follow next cursors until complete') and notes the optional designId behavior, but never states when to choose this over search_macro_blocks or list_blocks, or when a single read is preferred over a search. Usage is implied rather than scoped.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_page_architectB
Read-onlyIdempotent

[STAGE 1: ARCHITECT] Alias of basecoat_page_architect. Search and retrieve complete layout scaffolds with explicit slot markers.

NameRequiredDescriptionDefault
idNoAlternative recipe or block identifier alias matching id or recipe.
nameNoAlternative recipe or block identifier alias.
blockNoSpecific block identifier or pattern to retrieve scaffold for (e.g. "sidebar-01".."sidebar-16", "dashboard-01".."dashboard-07", "login-01").
intentNoUser or business intent for page scaffolding (e.g. "workspace-dashboard", "executive-dashboard", "sidebar-07", "data-table-detail", "auth-split-flow").
recipeNoMacro recipe identifier to resolve directly (e.g. "workspace-dashboard", "workspace-detail", "workspace-settings", "auth-split-flow").
densityNoVisual layout density: "comfortable" (standard SaaS spacing, p-6/h-14) or "compact" (dense data tools, p-4/h-12).
componentIdNoAlternative recipe or block identifier alias.
environmentNoTarget framework/environment template (defaults to html).

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, non-destructive and closed-world, so the safety profile is covered. The description adds that results are "complete layout scaffolds with explicit slot markers," which is useful output-shape context. It says nothing about how the many alias parameters (id/name/block/recipe/componentId) resolve or which wins, which is the main behavioral ambiguity.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short clauses, front-loaded with the stage tag and the core verb+resource, with almost no waste. The bracketed stage label is slightly cryptic but earns its place by flagging pipeline position.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only retrieval tool with no output schema and 8 optional alias parameters, the description covers the basic contract but omits resolution precedence among aliases and how search matching works. Adequate but with clear gaps.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema documents every parameter including enums for density and environment. The description adds no meaning beyond that, so the baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a concrete verb and resource ("Search and retrieve complete layout scaffolds with explicit slot markers") and openly discloses that it is an alias of basecoat_page_architect, which prevents the agent from treating the two as separate capabilities. It does not, however, draw a clear line against sibling retrievers like get_macro_block or search_macro_blocks.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The "[STAGE 1: ARCHITECT]" prefix implies this is the first step in a pipeline, which is weak but real usage context. There is no explicit when-to-use vs. when-not guidance and no mention of when to prefer this over basecoat_page_architect (its own base tool) or the block-level retrieval siblings.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_rhythm_rulesA
Read-onlyIdempotent

Read the effective semantic rhythm profile by family, including project-local overrides under a contained .basecoat/rhythm.json. Semantic IDs and approved implementation utilities are returned separately. Results are content-addressed and cursor-paginated; changed effective revisions invalidate prior cursors.

NameRequiredDescriptionDefault
idNoAlternative identifier alias for profile or family.
nameNoAlternative identifier alias for profile or family.
limitNoMaximum number of rhythm mappings to return per page (1-32, default 10).
cursorNoPagination cursor for bounded continuation of rhythm rules.
familyNoSemantic rhythm family to filter by (e.g. "spacing", "layout", "typography", "colors", "elevation"). Accepts aliases like "layouts".
profileNoRhythm profile identifier to query (e.g. "default", "compact", "comfortable"). Defaults to "default".
componentIdNoAlternative identifier alias for profile or family.
environmentNoTarget environment.

TDQS

A3.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, so the safety profile is covered. The description adds genuinely useful behavior beyond that: results are content-addressed, cursor-paginated, and changed effective revisions invalidate prior cursors, which tells the agent cursors are not durable across revisions. It also notes that semantic IDs and implementation utilities are returned separately, which is meaningful for a read tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three dense sentences, front-loaded with the core purpose before the override and pagination caveats. Every sentence carries substantive information. Some internal jargon (.basecoat/rhythm.json, content-addressed) costs a little readability but each phrase earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only, no-output-schema tool with annotations covering safety, the description supplies the missing return/behavior context (content-addressing, cursor invalidation, separate ID vs utility returns). What remains thin is guidance on routing between this and the other design-rules tools, which is the only real gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so all eight optional parameters are already documented in the schema, including aliases, the family example list, and the profile defaults. The description only echoes 'by family' and the pagination behavior without adding syntax or format detail beyond the schema. Baseline 3 is appropriate when the schema carries the load.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource: reading the effective semantic rhythm profile by family, with explicit mention of project-local overrides. An agent can tell this is a read of rhythm/design-token data. However, it never differentiates itself from siblings like get_design_rules or basecoat_rules_enforcer, so the boundary between these tools is left to inference.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explains what is returned but gives no when-to-use guidance, no prerequisites, and no distinction from the rhythm-adjacent siblings (get_design_rules, enforce_rules). An agent must guess when this is the right tool versus the other rules-fetching tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

inspect_qualityB
Read-onlyIdempotent

[STAGE 4: QUALITY AUDIT] Alias of basecoat_quality_inspector. Audit HTML/Astro markup and return a structured quality report.

NameRequiredDescriptionDefault
idNoAlternative component identifier alias to inspect.
codeNoHTML/component markup string to inspect for syntax violations, a11y omissions, and quality metrics.
htmlNoAlternative parameter alias for the code string to inspect.
nameNoAlternative component identifier alias to inspect.
markupNoAlternative parameter alias for the markup snippet to inspect.
enforceFsmNoWhether to strictly enforce FSM data-state bindings and field-group hierarchies on interactive controls.
componentIdNoAlternative component identifier alias to inspect.
environmentNoTarget environment for inspection (defaults to html).
densityProfileNoDensity profile context: "comfortable" (standard rhythm) or "compact" (dense micro-spacing allowed).
semanticProfileNoSemantic token rhythm profile to validate against (defaults to "default").

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false, and openWorldHint=false, so safety posture is covered. The description adds that it returns a structured quality report, but discloses nothing about what is checked, limits (e.g., 256KB max code), or how aliases behave, so it is only modestly additive.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two compact sentences, front-loaded with the stage marker and alias note. No wasted text, though it is perhaps under-developed for a 10-parameter tool.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only inspection tool with a fully documented schema and clear annotations, this is adequate but thin: no output schema exists and the description only gestures at 'a structured quality report'. Usage routing and behavioral boundaries are not fully covered.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and each parameter (code, html, markup aliases, environment, densityProfile, semanticProfile, enforceFsm) is documented in the schema. The description adds no parameter meaning, so the baseline of 3 for full coverage applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb ('Audit') and resource ('HTML/Astro markup') plus the return type ('structured quality report'), and flags itself as an alias of basecoat_quality_inspector. It does not, however, distinguish itself from close siblings like validate_markup or validate_composition, leaving the boundaries somewhat implicit.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The '[STAGE 4: QUALITY AUDIT]' prefix implies where this fits in a pipeline, which is useful workflow context. But it gives no explicit when-to-use vs validate_markup/validate_composition guidance, no prerequisites, and no exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_blocksA
Read-onlyIdempotent

Alias of search_macro_blocks. Search or list approved macro layout blocks by query, role, family, or tag. When called with {}, returns the top-level macro block catalog index.

NameRequiredDescriptionDefault
qNoFull-text search query across macro block IDs, descriptions, and tag sets.
idNoAlternative identifier or query alias.
tagNoSpecific functional tag to filter by (e.g. "sidebar", "data-table", "kpi").
nameNoAlternative identifier or query alias.
roleNoMacro role filter (e.g. "navigation", "canvas", "header", "region", "form").
limitNoMaximum number of block manifests to return per page (1-32, default 10).
cursorNoPagination cursor returned from a previous search.
familyNoBlock family filter (e.g. "layout", "workspace", "auth", "detail").
pageIdNoTarget page ID in the design session when scoping to a slot.
slotIdNoTarget parent slot ID to filter compatible blocks by role.
designIdNoActive design session ID to search with session-specific block registry overrides.
componentIdNoAlternative identifier or query alias.
environmentNoTarget environment.
parentNodeIdNoParent node ID hosting the target slot.

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, and non-destructive behavior, so safety is covered. The description adds a small behavioral fact (the empty-args catalog-index behavior) but says nothing about pagination semantics, the cursor/response shape, or auth needs despite a read-heavy search surface.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences, front-loaded with the alias note and ending on the empty-args special case. Every sentence carries information, though the alias framing consumes the prominent first position.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 14-parameter, zero-required search tool with no output schema, the description omits the response/pagination behavior and the design/session parameters (designId, pageId, slotId, componentId). It covers the catalog-index case but leaves the richer session-scoped usage unexplained.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so all 14 parameters are already documented in the schema, including enums and pagination. The description's mention of 'query, role, family, or tag' overlaps with the schema rather than extending it, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Search or list approved macro layout blocks') with filter dimensions. However, it opens by declaring itself an alias of search_macro_blocks, which muddies whether it is a distinct capability or a duplicate—an agent cannot tell from the description alone whether to prefer this tool or the sibling it mirrors.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly documents the edge case 'When called with {}, returns the top-level macro block catalog index,' which is genuinely useful invocation guidance. It does not, however, say when to choose list_blocks over search_macro_blocks or get_macro_block, leaving the alias relationship ambiguous rather than routing the agent.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_chartsB
Read-onlyIdempotent

[STAGE 3: SYNTAX & STACKS] Alias of basecoat_list_charts. List and filter 50+ Basecoat ApexCharts and SVG data visualization blueprints.

NameRequiredDescriptionDefault
idNoFilter or match by specific chart ID.
nameNoFilter or match by chart name.
queryNoSearch keyword alias for search.
searchNoSearch keyword for chart variant (e.g., stacked, gradient, sparkline, donut, gauge).
categoryNoFilter charts by category (area, bar, line, pie, radar, radial, tooltip).
componentIdNoAlias for chart ID filter.

TDQS

B3.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, openWorldHint=false, and destructiveHint=false, so the safety profile is fully covered. The description adds only scope detail ('50+', ApexCharts and SVG) and discloses nothing about pagination, result size limits, or filtering behavior beyond the schema.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two compact segments with no filler, and the identifying alias is front-loaded. The bracketed stage tag is slightly cryptic but does not waste much space.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple read-only list tool with complete parameter documentation and rich annotations, the description is broadly adequate; no output schema exists so return values need not be explained. It stops short of noting result volume or filtering combinations, leaving minor gaps.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and one enum is documented, so the schema already carries the parameter burden. The description adds no syntax, format, or aliasing detail (e.g., the query/search and id/componentId alias relationships) beyond what the schema spells out.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource ('List and filter ... ApexCharts and SVG data visualization blueprints') and identifies itself as an alias of sibling basecoat_list_charts, which helps the agent distinguish it from basecoat_get_chart_blueprint. The odd '[STAGE 3]' prefix is scaffolding rather than purpose, but the core statement is clear.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No explicit when/when-not guidance. 'Alias of basecoat_list_charts' implicitly routes the agent, but there is no indication of when to pick this over get_chart_blueprint, search_components, or basecoat_list_charts, nor any prerequisite or workflow condition.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

search_componentsA
Read-onlyIdempotent

Find up to 8 compact component summaries by intent and/or query (either field may be omitted). Valid component IDs include: button, card, dialog, dropdown-menu, table, tabs, badge, avatar, input, select, etc. Next step: Call get_component_details or basecoat_component_syntax with the selected component id.

NameRequiredDescriptionDefault
idNoAlternative component identifier alias.
nameNoAlternative component identifier alias.
queryNoDirect component ID or name keyword to filter (e.g., "dialog", "button", "table").
intentNoSemantic intent or use case (e.g., "modal dialog", "user menu", "data table", "form field").
componentIdNoAlternative component identifier alias.
environmentNoTarget environment (defaults to html).

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover the safety profile (readOnly, idempotent, non-destructive, closed-world). The description adds real behavioral detail beyond that: results are capped at 8 and are 'compact summaries' rather than full definitions. It doesn't discuss query-matching behavior or empty-result handling, but for an annotated read tool this is solid.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three front-loaded sentences: action+limit first, valid IDs second, next-step routing third. Every sentence carries information, though the ID enumeration is a bit list-heavy for the space it consumes.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description compensates by disclosing the return shape (8 compact summaries) and the follow-up tools, which is what an agent needs to chain calls. Remaining gaps are minor: no guidance on empty results or on choosing among the alias parameters.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% with examples for query and intent, so the baseline is 3. The description adds a broader catalog of valid component IDs (dropdown-menu, tabs, badge, avatar, etc.) that extends beyond the schema's examples and directly helps construct valid queries, pushing it above baseline. The three overlapping identifier aliases (id/name/componentId) are left unexplained in both places.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

Clear verb+resource: 'Find ... compact component summaries by intent and/or query', with the result cap (up to 8) stated. It implicitly distinguishes 'component summaries' from macro-block search. It doesn't explicitly contrast itself with search_macro_blocks, so it stops short of full sibling differentiation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The 'Next step: Call get_component_details or basecoat_component_syntax' line establishes this as the discovery entry point and routes the agent forward. However, it never states when to prefer this over search_macro_blocks or other sibling lookups, so usage is implied rather than explicit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

search_macro_blocksA
Read-onlyIdempotent

Search approved macro layout blocks by query, role, family, or tag. Optional design/page/slot context filters to slot-compatible roles. Returns summaries and immutable refs only; use cursors for more.

NameRequiredDescriptionDefault
qNoFull-text search query across macro block IDs, descriptions, and tag sets.
idNoAlternative identifier or query alias.
tagNoSpecific functional tag to filter by (e.g. "sidebar", "data-table", "kpi").
nameNoAlternative identifier or query alias.
roleNoMacro role filter (e.g. "navigation", "canvas", "header", "region", "form").
limitNoMaximum number of block manifests to return per page (1-32, default 10).
cursorNoPagination cursor returned from a previous search.
familyNoBlock family filter (e.g. "layout", "workspace", "auth", "detail").
pageIdNoTarget page ID in the design session when scoping to a slot.
slotIdNoTarget parent slot ID to filter compatible blocks by role.
designIdNoActive design session ID to search with session-specific block registry overrides.
componentIdNoAlternative identifier or query alias.
environmentNoTarget environment.
parentNodeIdNoParent node ID hosting the target slot.

TDQS

A3.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly, idempotent, non-destructive, closed-world behavior, and the description adds meaningful context beyond them: results are 'summaries and immutable refs only' and pagination is cursor-driven. That return-shape disclosure is genuine added value, though rate limits and cursor lifetime are unstated.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two tight sentences with no filler; the core purpose and the return/pagination caveat are both front-loaded and each clause earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 14-parameter, zero-required search tool with no output schema, the description covers purpose, key filters, slot-scoping context, and return shape. It is nearly complete, missing only guidance on choosing among sibling search/list tools and cursor lifecycle.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so every one of the 14 parameters is already documented in the schema. The description echoes the query/role/family/tag dimensions and the design/page/slot context, adding marginal framing but no syntax or precedence detail beyond the schema. Baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb ('Search') and resource ('approved macro layout blocks') plus the searchable dimensions (query, role, family, tag). An agent can tell it apart from the resource-oriented siblings, though it does not explicitly name search_components or list_blocks as the alternative for a different resource.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage by listing filter dimensions and noting that design/page/slot context narrows to slot-compatible roles, but it never states when to prefer this over search_components, list_blocks, or get_macro_block. No exclusions or alternatives are given.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

setup_configB
Read-onlyIdempotent

[STAGE 1: ARCHITECT] Alias of basecoat_setup_config. Generate production Tailwind CSS v4 setup, OKLCH tokens, and theme scripts.

NameRequiredDescriptionDefault
idNoFramework or style pack identifier alias.
nameNoFramework or style pack identifier alias.
frameworkNoTarget framework or environment for setup instructions and boilerplate (astro, vanilla, nextjs, sveltekit, vite, htmx). Defaults to astro.
stylePackNoAesthetic style pack preset (vega: standard shadcn New York v4, nova: modern SaaS, maia: playful organic, lyra: brutalist technical, mira: compact editorial, luma: soft modern, sera: architectural flat, rhea: curved modern). Defaults to vega.
componentIdNoFramework or style pack identifier alias.
environmentNoTarget environment alias (html, astro, react, vue, svelte).
includeDarkThemeScriptNoWhether to include the synchronous inline <head> dark mode bootstrap script to prevent theme flashing. Defaults to true.

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, openWorldHint=false, and destructiveHint=false, so the safety profile is covered. The description adds the content of what is produced (v4 setup, OKLCH tokens, theme scripts), which is useful context, but says nothing about whether files are written, output format, or how defaults are applied. A 3 is appropriate with annotations carrying the safety burden.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single efficient sentence that front-loads the stage and the aliased tool before the output description. Nothing is wasted, though the bracketed stage label is somewhat meta rather than informational.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With 7 optional parameters fully documented in the schema and annotations covering safety, the description only needs to convey purpose and usage. It conveys purpose and output content but omits when-to-use guidance and any note on how the returned setup should be consumed, leaving a modest gap for a setup/config tool with no output schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, with clear enum explanations (framework, stylePack with aesthetic descriptions, environment) and default notes. The description adds no parameter guidance, so this sits at the baseline 3 where the schema does all the heavy lifting.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific verb ("Generate") and concrete outputs (Tailwind CSS v4 setup, OKLCH tokens, theme scripts), and self-identifies as the "Alias of basecoat_setup_config," which resolves the duplication with that sibling. The "STAGE 1: ARCHITECT" prefix further situates it. It is clear what the tool does, though the alias framing leaves the relationship to basecoat_setup_config slightly ambiguous rather than fully distinguishing the two.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The "STAGE 1: ARCHITECT" label implies this is a first-step setup call, but there is no explicit statement of when to use this tool versus the canonical basecoat_setup_config, nor any prerequisites or exclusions. Usage is only inferred from the stage tag and alias note.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

validate_compositionA
Read-onlyIdempotent

[STAGE 4: QUALITY AUDIT] Statically check HTML/Astro source for Basecoat migration errors, semantic rhythm, FSM bindings, missing scripts, nested cards, spacing and hierarchy issues. Pass code or alias html and optionally a semanticProfile and densityProfile. Does not render or evaluate dynamic code. Next step: Fix any errors/warnings reported in the diagnostic output.

NameRequiredDescriptionDefault
codeNoHTML or Astro source code to validate statically against Basecoat rules and tokens.
htmlNoAlias for code parameter. Pass either code or html.
densityProfileNoOptical spacing density profile ("comfortable" or "compact").
semanticProfileNoSemantic rhythm profile ID (e.g., "default", "dashboard"). Defaults to "default".

TDQS

A3.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare read-only, idempotent, non-destructive, closed-world, so the safety profile is covered. The description adds real behavioral context beyond that: it enumerates what is checked and explicitly states it 'Does not render or evaluate dynamic code,' which is a meaningful scope limit an agent would not otherwise know.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with a bracketed stage tag, then the action, then parameter hints, then constraints and the next step. Dense but each sentence carries information; no padding. Slightly list-heavy, which shaves a point.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

A read-only validation tool with 100% schema coverage and annotations covering the safety profile; the description supplies the check list, the dynamic-code exclusion, and the follow-up step. Only gap is that no output schema exists, and the description references a 'diagnostic output' whose shape is not characterized, but that is minor.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents code, html (as the alias), semanticProfile, and densityProfile with an enum. The description restates the code/html alias and optionality but adds no format or default detail beyond what the schema provides, so baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource: statically check HTML/Astro source for a concrete list of Basecoat issues (migration errors, semantic rhythm, FSM bindings, nested cards, spacing). The scope is precise. However, it never distinguishes itself from the very similar siblings validate_markup, validate_design, and inspect_quality, so an agent cannot tell them apart from the description alone.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The '[STAGE 4: QUALITY AUDIT]' label and 'Next step: Fix any errors/warnings' sentence give useful workflow/workflow-position context (audit stage, then fix). But there is no explicit when-to-use vs alternatives guidance and no mention of the sibling validators, so selection between this and validate_markup/validate_design is left to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

validate_designA
Read-onlyIdempotent

Validate a design session (or one page) in draft or complete mode. Returns totals plus paginated diagnostics. A plan-ready graph is not proof of rendered correctness.

NameRequiredDescriptionDefault
modeNoValidation strictness mode: "draft" allows unbound slots; "complete" enforces zero open slots and full port connectivity.draft
cursorNoPagination cursor if validation diagnostics exceed single response limit.
pageIdNoOptionally scope validation to a single page within the session.
designIdYesIdentifier of the design session to validate.
revisionNoSpecific revision to validate (defaults to latest).

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, so safety is covered. The description adds genuine behavioral context beyond that: it returns 'totals plus paginated diagnostics' and warns that 'a plan-ready graph is not proof of rendered correctness', which tells the agent what validation does not guarantee.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences, front-loaded with the action and scope, then the return shape, then an important caveat. No filler; the only blemish is the stray quotation marks around 'draft or complete mode'.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only validation tool with no output schema, the description covers the action, scoping, mode semantics, and the shape of the return (totals plus paginated diagnostics). It is a bit thin on how diagnostics are grouped, but nothing critical for invocation is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents designId, pageId, cursor, revision, and the draft/complete enum. The description only echoes the mode and page scoping without adding format or interaction detail, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Validate a design session') plus scope options (a single page, draft/complete modes), so the agent knows exactly what is being validated. It does not, however, distinguish itself from the close siblings validate_composition and validate_markup, which an agent would need help telling apart.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The mention of 'draft or complete mode' implies when each strictness level applies. But there is no explicit guidance on when to call validate_design versus validate_composition or validate_markup, nor any stated prerequisites (e.g. an existing session), so usage must be inferred.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

validate_markupA
Read-onlyIdempotent

[STAGE 4: QUALITY AUDIT] Alias of validate_composition. Statically check HTML/Astro source for Basecoat migration errors, semantic rhythm, FSM bindings, missing scripts, nested cards, spacing and hierarchy issues. Next step: Fix any errors/warnings reported in the diagnostic output.

NameRequiredDescriptionDefault
codeNoHTML or Astro source code to validate statically against Basecoat rules and tokens.
htmlNoAlias for code parameter. Pass either code or html.
densityProfileNoOptical spacing density profile ("comfortable" or "compact").
semanticProfileNoSemantic rhythm profile ID (e.g., "default", "dashboard"). Defaults to "default".

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly, idempotent, non-destructive, closed-world behavior, so the safety profile is covered. The description adds meaningful scope beyond that: it is a static (non-executing) check and it names the specific failure classes it detects plus the diagnostic output containing errors/warnings. It stops short of describing result structure, but with no output schema this is a minor gap.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loads the stage tag and alias relationship before the check scope, then closes with the next step. Dense but every clause carries information; the enumerated check list is long but relevant. No redundant filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 4-parameter, zero-required validation tool with no output schema, the description covers purpose, scope of checks, workflow stage, and the follow-up action, and hints at the diagnostic return. What an agent needs to call it correctly is essentially present; only explicit return-shape or required-parameter guidance is absent.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so all four parameters (code, html alias, densityProfile, semanticProfile) are already documented in the schema, including the alias relationship and enum. The description adds no additional parameter-level syntax or format detail, which matches the baseline 3 when the schema does the heavy lifting.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (statically check) and resource (HTML/Astro source), then enumerates exactly what it inspects: Basecoat migration errors, semantic rhythm, FSM bindings, missing scripts, nested cards, spacing and hierarchy. It also declares itself 'Alias of validate_composition' and tags '[STAGE 4: QUALITY AUDIT]', so an agent can place it against siblings without opening schemas.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives pipeline context via the '[STAGE 4: QUALITY AUDIT]' tag and a clear next step ('Fix any errors/warnings reported in the diagnostic output'). It also identifies itself as an alias of validate_composition, implying interchangeability. It does not, however, explicitly state when to prefer this alias over validate_composition or when validation is unnecessary.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 33 tool updatesv1.8.0
    • Changedapply_design_patch4 fields changed
      • addedInput schema / properties / designId / description
        Added value: +"Identifier of the design session to mutate."
      • addedInput schema / properties / expectedRevision / description
        Added value: +"Expected current revision of the session to guarantee optimistic concurrency."
      • addedInput schema / properties / operationId / description
        Added value: +"Idempotency key for this patch transaction."
      • addedInput schema / properties / operations / description
        Added value: +"Ordered array of patch operations (add_node, remove_node, move_node, connect, disconnect, set_decision, set_binding)."
    • Addedbasecoat_component_syntax
    • Addedbasecoat_compose_stack
    • Addedbasecoat_creative_director
    • Addedbasecoat_get_chart_blueprint
    • Addedbasecoat_list_charts
    • Addedbasecoat_page_architect
    • Addedbasecoat_quality_inspector
    • Addedbasecoat_rules_enforcer
    • Addedbasecoat_setup_config
    • Changedbegin_design4 fields changed
      • addedInput schema / properties / decisions / description
        Added value: +"Initial architectural decisions for the session (e.g. density, stylePack, responsive breakpoints)."
      • addedInput schema / properties / designId / description
        Added value: +"Unique identifier for the new design session (slug format, e.g. \"workspace-v1\")."
      • addedInput schema / properties / operationId / description
        Added value: +"Idempotency key for session creation."
      • addedInput schema / properties / profile / description
        Added value: +"Target rhythm/scaffold profile or recipe alias (e.g. \"workspace-dashboard\", \"executive-dashboard\")."
    • Addedcompose_stack
    • Addedenforce_rules
    • Addedget_chart_blueprint
    • Changedget_component_details6 fields changed
      • addedInput schema / properties / componentId
        Added value: +{
        +  "description": "Alternative component identifier alias.",
        +  "maxLength": 80,
        +  "type": "string"
        +}
      • addedInput schema / properties / environment / description
        Added value: +"Target framework/environment template to output (defaults to \"html\")."
      • changedInput schema / properties / environment / enum
        Previous value: -[
        -  "astro",
        -  "html"
        -]New value: +[
        +  "html",
        +  "astro",
        +  "react",
        +  "vue",
        +  "svelte"
        +]
      • addedInput schema / properties / id / description
        Added value: +"Basecoat component ID from search_components (e.g., \"button\", \"dialog\", \"card\", \"dropdown-menu\", \"table\", \"tabs\")."
      • addedInput schema / properties / name
        Added value: +{
        +  "description": "Alternative component identifier alias.",
        +  "maxLength": 80,
        +  "type": "string"
        +}
      • removedInput schema / required
        Removed value: -[
        -  "id",
        -  "environment"
        -]
    • Addedget_component_html
    • Addedget_component_syntax
    • Addedget_creative_direction
    • Changedget_design_context11 fields changed
      • addedInput schema / properties / componentId
        Added value: +{
        +  "description": "Alternative design session ID alias matching designId.",
        +  "maxLength": 64,
        +  "type": "string"
        +}
      • addedInput schema / properties / cursor / description
        Added value: +"Pagination cursor for paginated context listings."
      • addedInput schema / properties / designId / description
        Added value: +"Target design session ID (required for all views except \"sessions\")."
      • addedInput schema / properties / environment
        Added value: +{
        +  "description": "Target environment.",
        +  "enum": [
        +    "html",
        +    "astro",
        +    "react",
        +    "vue",
        +    "svelte"
        +  ],
        +  "type": "string"
        +}
      • addedInput schema / properties / id
        Added value: +{
        +  "description": "Alternative design session ID alias matching designId.",
        +  "maxLength": 64,
        +  "type": "string"
        +}
      • addedInput schema / properties / name
        Added value: +{
        +  "description": "Alternative design session ID alias matching designId.",
        +  "maxLength": 64,
        +  "type": "string"
        +}
      • addedInput schema / properties / nodeId / description
        Added value: +"Target node ID within the page (for \"node\" view)."
      • addedInput schema / properties / pageId / description
        Added value: +"Target page ID within the design session (for \"page\" or \"node\" view)."
      • addedInput schema / properties / revision / description
        Added value: +"Target design session revision to inspect (defaults to latest)."
      • addedInput schema / properties / view / description
        Added value: +"Context perspective to retrieve: \"sessions\", \"overview\", \"decisions\", \"graph\", \"rules\", \"focus\", or \"next\". Defaults to \"sessions\"."
      • removedInput schema / required
        Removed value: -[
        -  "view"
        -]
    • Addedget_design_rules
    • Changedget_fsm_recipe8 fields changed
      • addedInput schema / properties / componentId
        Added value: +{
        +  "description": "Alternative recipe identifier alias.",
        +  "maxLength": 64,
        +  "minLength": 1,
        +  "pattern": "^[a-z][a-z0-9-]*$",
        +  "type": "string"
        +}
      • addedInput schema / properties / cursor / description
        Added value: +"Pagination cursor for bounded continuation of FSM recipe details."
      • addedInput schema / properties / environment
        Added value: +{
        +  "description": "Target environment.",
        +  "enum": [
        +    "html",
        +    "astro",
        +    "react",
        +    "vue",
        +    "svelte"
        +  ],
        +  "type": "string"
        +}
      • addedInput schema / properties / id
        Added value: +{
        +  "description": "Alternative recipe identifier alias.",
        +  "maxLength": 64,
        +  "minLength": 1,
        +  "pattern": "^[a-z][a-z0-9-]*$",
        +  "type": "string"
        +}
      • addedInput schema / properties / limit / description
        Added value: +"Maximum number of FSM entries to return per page (1-32, default 10)."
      • addedInput schema / properties / name
        Added value: +{
        +  "description": "Alternative recipe identifier alias.",
        +  "maxLength": 64,
        +  "minLength": 1,
        +  "pattern": "^[a-z][a-z0-9-]*$",
        +  "type": "string"
        +}
      • addedInput schema / properties / recipe / description
        Added value: +"FSM recipe identifier or alias to retrieve (e.g. \"dialog\", \"tabs\", \"navigation\", \"collapsible-navigation\", \"sidebar\")."
      • addedInput schema / properties / section / description
        Added value: +"Specific FSM recipe contract section to inspect (\"states\", \"events\", \"guards\", \"actions\", \"transitions\")."
    • Changedget_macro_block9 fields changed
      • addedInput schema / properties / componentId
        Added value: +{
        +  "description": "Alternative block identifier alias matching idOrRef.",
        +  "maxLength": 80,
        +  "minLength": 1,
        +  "type": "string"
        +}
      • addedInput schema / properties / cursor / description
        Added value: +"Pagination cursor for large section reads exceeding packet limits."
      • addedInput schema / properties / designId / description
        Added value: +"Active design session ID to retrieve session-bound block variants."
      • addedInput schema / properties / environment
        Added value: +{
        +  "description": "Target environment (defaults to html).",
        +  "enum": [
        +    "html",
        +    "astro",
        +    "react",
        +    "vue",
        +    "svelte"
        +  ],
        +  "type": "string"
        +}
      • addedInput schema / properties / id / description
        Added value: +"Alternative block identifier alias matching idOrRef."
      • addedInput schema / properties / idOrRef / description
        Added value: +"Canonical macro block ID or SHA-256 content reference hash."
      • addedInput schema / properties / name
        Added value: +{
        +  "description": "Alternative block identifier alias matching idOrRef.",
        +  "maxLength": 80,
        +  "minLength": 1,
        +  "type": "string"
        +}
      • addedInput schema / properties / section / description
        Added value: +"Specific block section to retrieve: \"all\", \"manifest\", \"structure\", \"slots\", \"ports\", \"rules\", \"dependencies\", or \"provenance\". Defaults to \"all\"."
      • changedInput schema / properties / section / enum
        Previous value: -[
        -  "manifest",
        -  "structure",
        -  "slots",
        -  "ports",
        -  "rules",
        -  "dependencies",
        -  "provenance"
        -]New value: +[
        +  "all",
        +  "manifest",
        +  "structure",
        +  "slots",
        +  "ports",
        +  "rules",
        +  "dependencies",
        +  "provenance"
        +]
    • Addedget_page_architect
    • Changedget_rhythm_rules8 fields changed
      • addedInput schema / properties / componentId
        Added value: +{
        +  "description": "Alternative identifier alias for profile or family.",
        +  "maxLength": 64,
        +  "minLength": 1,
        +  "pattern": "^[a-z][a-z0-9-]*$",
        +  "type": "string"
        +}
      • addedInput schema / properties / cursor / description
        Added value: +"Pagination cursor for bounded continuation of rhythm rules."
      • addedInput schema / properties / environment
        Added value: +{
        +  "description": "Target environment.",
        +  "enum": [
        +    "html",
        +    "astro",
        +    "react",
        +    "vue",
        +    "svelte"
        +  ],
        +  "type": "string"
        +}
      • addedInput schema / properties / family / description
        Added value: +"Semantic rhythm family to filter by (e.g. \"spacing\", \"layout\", \"typography\", \"colors\", \"elevation\"). Accepts aliases like \"layouts\"."
      • addedInput schema / properties / id
        Added value: +{
        +  "description": "Alternative identifier alias for profile or family.",
        +  "maxLength": 64,
        +  "minLength": 1,
        +  "pattern": "^[a-z][a-z0-9-]*$",
        +  "type": "string"
        +}
      • addedInput schema / properties / limit / description
        Added value: +"Maximum number of rhythm mappings to return per page (1-32, default 10)."
      • addedInput schema / properties / name
        Added value: +{
        +  "description": "Alternative identifier alias for profile or family.",
        +  "maxLength": 64,
        +  "minLength": 1,
        +  "pattern": "^[a-z][a-z0-9-]*$",
        +  "type": "string"
        +}
      • addedInput schema / properties / profile / description
        Added value: +"Rhythm profile identifier to query (e.g. \"default\", \"compact\", \"comfortable\"). Defaults to \"default\"."
    • Addedinspect_quality
    • Addedlist_blocks
    • Addedlist_charts
    • Changedsearch_components6 fields changed
      • addedInput schema / properties / componentId
        Added value: +{
        +  "description": "Alternative component identifier alias.",
        +  "maxLength": 80,
        +  "type": "string"
        +}
      • addedInput schema / properties / environment
        Added value: +{
        +  "description": "Target environment (defaults to html).",
        +  "enum": [
        +    "html",
        +    "astro",
        +    "react",
        +    "vue",
        +    "svelte"
        +  ],
        +  "type": "string"
        +}
      • addedInput schema / properties / id
        Added value: +{
        +  "description": "Alternative component identifier alias.",
        +  "maxLength": 80,
        +  "type": "string"
        +}
      • addedInput schema / properties / intent / description
        Added value: +"Semantic intent or use case (e.g., \"modal dialog\", \"user menu\", \"data table\", \"form field\")."
      • addedInput schema / properties / name
        Added value: +{
        +  "description": "Alternative component identifier alias.",
        +  "maxLength": 80,
        +  "type": "string"
        +}
      • addedInput schema / properties / query / description
        Added value: +"Direct component ID or name keyword to filter (e.g., \"dialog\", \"button\", \"table\")."
    • Changedsearch_macro_blocks14 fields changed
      • addedInput schema / properties / componentId
        Added value: +{
        +  "description": "Alternative identifier or query alias.",
        +  "maxLength": 80,
        +  "type": "string"
        +}
      • addedInput schema / properties / cursor / description
        Added value: +"Pagination cursor returned from a previous search."
      • addedInput schema / properties / designId / description
        Added value: +"Active design session ID to search with session-specific block registry overrides."
      • addedInput schema / properties / environment
        Added value: +{
        +  "description": "Target environment.",
        +  "enum": [
        +    "html",
        +    "astro",
        +    "react",
        +    "vue",
        +    "svelte"
        +  ],
        +  "type": "string"
        +}
      • addedInput schema / properties / family / description
        Added value: +"Block family filter (e.g. \"layout\", \"workspace\", \"auth\", \"detail\")."
      • addedInput schema / properties / id
        Added value: +{
        +  "description": "Alternative identifier or query alias.",
        +  "maxLength": 80,
        +  "type": "string"
        +}
      • addedInput schema / properties / limit / description
        Added value: +"Maximum number of block manifests to return per page (1-32, default 10)."
      • addedInput schema / properties / name
        Added value: +{
        +  "description": "Alternative identifier or query alias.",
        +  "maxLength": 80,
        +  "type": "string"
        +}
      • addedInput schema / properties / pageId / description
        Added value: +"Target page ID in the design session when scoping to a slot."
      • addedInput schema / properties / parentNodeId / description
        Added value: +"Parent node ID hosting the target slot."
      • addedInput schema / properties / q / description
        Added value: +"Full-text search query across macro block IDs, descriptions, and tag sets."
      • addedInput schema / properties / role / description
        Added value: +"Macro role filter (e.g. \"navigation\", \"canvas\", \"header\", \"region\", \"form\")."
      • addedInput schema / properties / slotId / description
        Added value: +"Target parent slot ID to filter compatible blocks by role."
      • addedInput schema / properties / tag / description
        Added value: +"Specific functional tag to filter by (e.g. \"sidebar\", \"data-table\", \"kpi\")."
    • Addedsetup_config
    • Changedvalidate_composition4 fields changed
      • addedInput schema / properties / code / description
        Added value: +"HTML or Astro source code to validate statically against Basecoat rules and tokens."
      • addedInput schema / properties / densityProfile / description
        Added value: +"Optical spacing density profile (\"comfortable\" or \"compact\")."
      • addedInput schema / properties / html / description
        Added value: +"Alias for code parameter. Pass either code or html."
      • addedInput schema / properties / semanticProfile / description
        Added value: +"Semantic rhythm profile ID (e.g., \"default\", \"dashboard\"). Defaults to \"default\"."
    • Changedvalidate_design5 fields changed
      • addedInput schema / properties / cursor / description
        Added value: +"Pagination cursor if validation diagnostics exceed single response limit."
      • addedInput schema / properties / designId / description
        Added value: +"Identifier of the design session to validate."
      • addedInput schema / properties / mode / description
        Added value: +"Validation strictness mode: \"draft\" allows unbound slots; \"complete\" enforces zero open slots and full port connectivity."
      • addedInput schema / properties / pageId / description
        Added value: +"Optionally scope validation to a single page within the session."
      • addedInput schema / properties / revision / description
        Added value: +"Specific revision to validate (defaults to latest)."
    • Addedvalidate_markup
  2. 2 tool updatesv1.6.2
    • Changedapply_design_patch4 fields changed
      • removedInput schema / properties / operations / items / additionalProperties
        Removed value: -{}
      • addedInput schema / properties / operations / items / oneOf
        Added value: +[
        +  {
        +    "additionalProperties": false,
        +    "properties": {
        +      "op": {
        +        "const": "instantiate_recipe",
        +        "type": "string"
        +      },
        +      "pagePrefix": {
        +        "maxLength": 64,
        +        "minLength": 1,
        +        "pattern": "^[a-z][a-z0-9-]*$",
        +        "type": "string"
        +      },
        +      "recipe": {
        +        "maxLength": 64,
        +        "minLength": 1,
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "op",
        +      "recipe",
        +      "pagePrefix"
        +    ],
        +    "type": "object"
        +  },
        +  {
        +    "additionalProperties": false,
        +    "properties": {
        +      "bindings": {
        +        "additionalProperties": {
        +          "maxLength": 64,
        +          "minLength": 1,
        +          "pattern": "^[a-z][a-z0-9-]*$",
        +          "type": "string"
        +        },
        +        "propertyNames": {
        +          "maxLength": 64,
        +          "minLength": 1,
        +          "pattern": "^[a-z][a-z0-9-]*$",
        +          "type": "string"
        +        },
        +        "type": "object"
        +      },
        +      "block": {
        +        "maxLength": 64,
        +        "minLength": 1,
        +        "type": "string"
        +      },
        +      "node": {
        +        "maxLength": 64,
        +        "minLength": 1,
        +        "pattern": "^[a-z][a-z0-9-]*$",
        +        "type": "string"
        +      },
        +      "op": {
        +        "const": "attach_block",
        +        "type": "string"
        +      },
        +      "order": {
        +        "maximum": 10000,
        +        "minimum": 0,
        +        "type": "integer"
        +      },
        +      "page": {
        +        "maxLength": 64,
        +        "minLength": 1,
        +        "pattern": "^[a-z][a-z0-9-]*$",
        +        "type": "string"
        +      },
        +      "parent": {
        +        "maxLength": 64,
        +        "minLength": 1,
        +        "pattern": "^[a-z][a-z0-9-]*$",
        +        "type": "string"
        +      },
        +      "slot": {
        +        "maxLength": 64,
        +        "minLength": 1,
        +        "pattern": "^[a-z][a-z0-9-]*$",
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "op",
        +      "page",
        +      "parent",
        +      "slot",
        +      "node",
        +      "block"
        +    ],
        +    "type": "object"
        +  },
        +  {
        +    "additionalProperties": false,
        +    "properties": {
        +      "block": {
        +        "maxLength": 64,
        +        "minLength": 1,
        +        "type": "string"
        +      },
        +      "node": {
        +        "maxLength": 64,
        +        "minLength": 1,
        +        "pattern": "^[a-z][a-z0-9-]*$",
        +        "type": "string"
        +      },
        +      "op": {
        +        "const": "replace_block",
        +        "type": "string"
        +      },
        +      "page": {
        +        "maxLength": 64,
        +        "minLength": 1,
        +        "pattern": "^[a-z][a-z0-9-]*$",
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "op",
        +      "page",
        +      "node",
        +      "block"
        +    ],
        +    "type": "object"
        +  },
        +  {
        +    "additionalProperties": false,
        +    "properties": {
        +      "node": {
        +        "maxLength": 64,
        +        "minLength": 1,
        +        "pattern": "^[a-z][a-z0-9-]*$",
        +        "type": "string"
        +      },
        +      "op": {
        +        "const": "remove_block",
        +        "type": "string"
        +      },
        +      "page": {
        +        "maxLength": 64,
        +        "minLength": 1,
        +        "pattern": "^[a-z][a-z0-9-]*$",
        +        "type": "string"
        +      },
        +      "removeSubtree": {
        +        "type": "boolean"
        +      }
        +    },
        +    "required": [
        +      "op",
        +      "page",
        +      "node",
        +      "removeSubtree"
        +    ],
        +    "type": "object"
        +  },
        +  {
        +    "additionalProperties": false,
        +    "properties": {
        +      "from": {
        +        "additionalProperties": false,
        +        "properties": {
        +          "node": {
        +            "maxLength": 64,
        +            "minLength": 1,
        +            "pattern": "^[a-z][a-z0-9-]*$",
        +            "type": "string"
        +          },
        +          "port": {
        +            "maxLength": 64,
        +            "minLength": 1,
        +            "pattern": "^[a-z][a-z0-9-]*$",
        +            "type": "string"
        +          }
        +        },
        +        "required": [
        +          "node",
        +          "port"
        +        ],
        +        "type": "object"
        +      },
        +      "id": {
        +        "maxLength": 64,
        +        "minLength": 1,
        +        "pattern": "^[a-z][a-z0-9-]*$",
        +        "type": "string"
        +      },
        +      "op": {
        +        "const": "connect_ports",
        +        "type": "string"
        +      },
        +      "page": {
        +        "maxLength": 64,
        +        "minLength": 1,
        +        "pattern": "^[a-z][a-z0-9-]*$",
        +        "type": "string"
        +      },
        +      "relation": {
        +        "enum": [
        +          "controls",
        +          "data"
        +        ],
        +        "type": "string"
        +      },
        +      "to": {
        +        "additionalProperties": false,
        +        "properties": {
        +          "node": {
        +            "maxLength": 64,
        +            "minLength": 1,
        +            "pattern": "^[a-z][a-z0-9-]*$",
        +            "type": "string"
        +          },
        +          "port": {
        +            "maxLength": 64,
        +            "minLength": 1,
        +            "pattern": "^[a-z][a-z0-9-]*$",
        +            "type": "string"
        +          }
        +        },
        +        "required": [
        +          "node",
        +          "port"
        +        ],
        +        "type": "object"
        +      }
        +    },
        +    "required": [
        +      "op",
        +      "page",
        +      "id",
        +      "relation",
        +      "from",
        +      "to"
        +    ],
        +    "type": "object"
        +  },
        +  {
        +    "additionalProperties": false,
        +    "properties": {
        +      "connection": {
        +        "maxLength": 64,
        +        "minLength": 1,
        +        "pattern": "^[a-z][a-z0-9-]*$",
        +        "type": "string"
        +      },
        +      "op": {
        +        "const": "disconnect_ports",
        +        "type": "string"
        +      },
        +      "page": {
        +        "maxLength": 64,
        +        "minLength": 1,
        +        "pattern": "^[a-z][a-z0-9-]*$",
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "op",
        +      "page",
        +      "connection"
        +    ],
        +    "type": "object"
        +  },
        +  {
        +    "additionalProperties": false,
        +    "properties": {
        +      "key": {
        +        "maxLength": 64,
        +        "minLength": 1,
        +        "type": "string"
        +      },
        +      "op": {
        +        "const": "set_decision",
        +        "type": "string"
        +      },
        +      "page": {
        +        "maxLength": 64,
        +        "minLength": 1,
        +        "pattern": "^[a-z][a-z0-9-]*$",
        +        "type": "string"
        +      },
        +      "scope": {
        +        "enum": [
        +          "project",
        +          "page"
        +        ],
        +        "type": "string"
        +      },
        +      "value": {
        +        "anyOf": [
        +          {
        +            "maxLength": 200,
        +            "type": "string"
        +          },
        +          {
        +            "type": "number"
        +          },
        +          {
        +            "type": "boolean"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ]
        +      }
        +    },
        +    "required": [
        +      "op",
        +      "scope",
        +      "key",
        +      "value"
        +    ],
        +    "type": "object"
        +  },
        +  {
        +    "additionalProperties": false,
        +    "properties": {
        +      "node": {
        +        "maxLength": 64,
        +        "minLength": 1,
        +        "pattern": "^[a-z][a-z0-9-]*$",
        +        "type": "string"
        +      },
        +      "op": {
        +        "const": "record_written",
        +        "type": "string"
        +      },
        +      "page": {
        +        "maxLength": 64,
        +        "minLength": 1,
        +        "pattern": "^[a-z][a-z0-9-]*$",
        +        "type": "string"
        +      },
        +      "planDigest": {
        +        "maxLength": 64,
        +        "minLength": 1,
        +        "type": "string"
        +      },
        +      "sourcePath": {
        +        "maxLength": 260,
        +        "minLength": 1,
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "op",
        +      "page",
        +      "node",
        +      "sourcePath",
        +      "planDigest"
        +    ],
        +    "type": "object"
        +  },
        +  {
        +    "additionalProperties": false,
        +    "properties": {
        +      "op": {
        +        "const": "mark_plan_ready",
        +        "type": "string"
        +      },
        +      "page": {
        +        "maxLength": 64,
        +        "minLength": 1,
        +        "pattern": "^[a-z][a-z0-9-]*$",
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "op",
        +      "page"
        +    ],
        +    "type": "object"
        +  }
        +]
      • removedInput schema / properties / operations / items / propertyNames
        Removed value: -{
        -  "type": "string"
        -}
      • removedInput schema / properties / operations / items / type
        Removed value: -"object"
    • Changedget_macro_block2 fields changed
      • addedInput schema / properties / id
        Added value: +{
        +  "maxLength": 80,
        +  "minLength": 1,
        +  "type": "string"
        +}
      • removedInput schema / required
        Removed value: -[
        -  "idOrRef",
        -  "section"
        -]
  3. 9 tool updatesv1.4.0
    • Addedapply_design_patch
    • Addedbegin_design
    • Addedget_design_context
    • Addedget_fsm_recipe
    • Addedget_macro_block
    • Addedget_rhythm_rules
    • Addedsearch_macro_blocks
    • Changedvalidate_composition4 fields changed
      • changedInput schema / properties / code / maxLength
        Previous value: -65536New value: +262144
      • addedInput schema / properties / densityProfile
        Added value: +{
        +  "enum": [
        +    "comfortable",
        +    "compact"
        +  ],
        +  "type": "string"
        +}
      • changedInput schema / properties / html / maxLength
        Previous value: -65536New value: +262144
      • addedInput schema / properties / semanticProfile
        Added value: +{
        +  "maxLength": 64,
        +  "type": "string"
        +}
    • Addedvalidate_design
  4. 2 tool updatesv1.0.3
    • Changedsearch_components1 field changed
      • removedInput schema / required
        Removed value: -[
        -  "intent",
        -  "query"
        -]
    • Changedvalidate_composition2 fields changed
      • addedInput schema / properties / html
        Added value: +{
        +  "maxLength": 65536,
        +  "type": "string"
        +}
      • removedInput schema / required
        Removed value: -[
        -  "code"
        -]
  5. 3 tool updatesv1.0.1
    • First observedget_component_details
    • First observedsearch_components
    • First observedvalidate_composition

TDQS

B3.1/5.0

Scored across 33 tools

Disambiguation2/5

Several tools are explicit aliases (validate_composition/validate_markup, basecoat_setup_config/setup_config, basecoat_page_architect/get_page_architect), and the component-retrieval cluster (search_components, get_component_details, get_component_html, basecoat_component_syntax, get_component_syntax) has heavily overlapping purposes. An agent must guess which of several near-identical tools to call.

Naming Consistency2/5

Names mix conventions: some are bare snake_case (search_components, validate_markup, begin_design) while others carry a basecoat_ prefix (basecoat_setup_config, basecoat_quality_inspector), and the aliases use entirely different stems for the same operation. Verb styles vary across get/search/fetch/read/apply.

Tool Count2/5

33 tools is heavy for the scope, and roughly half are declared aliases of other tools, which inflates the surface without adding capability. The genuine functional set is closer to 18-20, making this bloated.

Completeness4/5

The workflow surface is fairly complete: setup config, page scaffolds, rules/rhythm, component and chart retrieval, stack composition, design sessions, macro blocks, and a quality audit gate. Minor gaps like no explicit delete/update for design graph artifacts, but the generation lifecycle is well covered.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    B
    maintenance
    Provides programmatic access to 30+ Basecoat CSS (HTML port of ShadCN UI) components with usage documentation, setup scripts, and theme switching code. Enables AI assistants to help developers build accessible HTML interfaces with forms, navigation, feedback, interactive, and layout components.
    7
    501 npm
    14
    MIT
  • A
    license
    A
    quality
    B
    maintenance
    Local-first visual design workspace for AI assistants. Compose wireframes and branded multi-page HTML/CSS documents with live preview, annotations, brand and asset libraries, typed data collections, layout validation, PDF export, and draft-only Gmail handoff.
    16
    71 npm
    20
    MIT
  • A
    license
    Not graded
    quality
    C
    maintenance
    Federates UI component registries, enabling AI agents to fetch exact component code, dependencies, and setup prerequisites directly into the workspace. Includes sandboxed previews, anti-slop layout auditing, and offline-to-cloud telemetry sync.
    3 npm
    1
    MIT
  • A
    license
    Not graded
    quality
    C
    maintenance
    Enables AI coding assistants to inspect frontend projects, search a curated design and motion recipe catalog, prepare and preview structured design plans, apply changes with backups and rollback, capture previews, audit UI accessibility and performance, and monitor activity via a web dashboard.
    13 npm
    MIT