basecoat-ui
This MCP server is an offline, read-only-plus-session design registry that lets an AI agent discover Basecoat/shadcn-style components, compose macro dashboard layouts, and statically validate generated markup without any network access.
Search and retrieve components —
search_componentsreturns up to 8 compact summaries (id, name, intent) from 62 curated components;get_component_detailsreturns one minimal Astro or HTML template with dependencies and composition tips.Statically validate markup —
validate_compositionchecks up to 256 KiB of HTML/Astro for Basecoat migration errors, rhythm, FSM bindings, missing scripts, nested cards, spacing, and hierarchy (no rendering or code execution).Discover macro layout blocks —
search_macro_blocksfinds blueprints by query, role, family, tag, or design/page/slot context across 84 blocks and aliases, with cursor pagination.Read macro block sections —
get_macro_blockpulls manifest, structure, slots, ports, rules, dependencies, or provenance sections, optionally pinned to a design session.Run persistent design sessions —
begin_designcreates a hash-verified session under.basecoat/designer/, pinning the macro registry revision;get_design_contextreads sessions, overview, decisions, graph, rules, focus, or next views.Mutate design graphs atomically —
apply_design_patchapplies operations such asinstantiate_recipe,attach_block,replace_block,remove_block,connect_ports,set_decision,record_written, andmark_plan_ready, guarded byexpectedRevisionand idempotentoperationId.Validate designs —
validate_designchecks a draft or complete design graph (or one page) and returns paginated diagnostics.Read rhythm and token rules —
get_rhythm_rulesreturns effective semantic spacing/typography/surface profiles by family, including project-local.basecoat/rhythm.jsonoverrides, with semantic IDs kept separate from approved Tailwind utilities.Read FSM recipes —
get_fsm_recipereturns states, events, guards, actions, and transitions for interactive primitives like dialog, navigation, auth-flow, and tabs (structural metadata only, not runtime code).Stay deterministic and bounded — every result is a bounded MCP packet (≤1,999 UTF-8 bytes) with cursor pagination, zero runtime network requests, and no writing of host application source files.
Enables composing Basecoat UI components in Astro projects, with setup guidance for Vite, Tailwind CSS 4, selective JavaScript imports, and native dialog wiring.
Provides Tailwind CSS 4 integration for Basecoat UI components, including CSS ordering and stylesheet setup for Astro or static HTML projects.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@basecoat-uiSearch for a card component template"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
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-mcpAdd 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.mdis read from that directory bybasecoat://project/context.Persistent macro sessions are stored under
<project-root>/.basecoat/designer/..basecoat/rhythm.jsonis an optional strict override. It must live under a real.basecoatdirectory 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 |
| Setup & Config | Generates framework boilerplates, Tailwind CSS 4 imports, OKLCH variables, and no-flash dark mode scripts | Read-only |
| Intent Fast Path | Plans complete layout scaffolds with container grid contracts and explicit slot topology | Read-only |
| Intent Fast Path | Assembles composable component stacks into canonical shells (sidebar-01..16, topbar, inset, split) with slot hydration | Read-only |
| Intent Fast Path | Enforces technical constraints across Tailwind v4, FSM state contracts, semantic tokens, and dashboard rules | Read-only |
| Intent Fast Path | Surfaces Kanso minimalism, 4px/8px optical rhythm, density profiles, typography ladders, and contrast pairings | Read-only |
| Intent Fast Path | Delivers copy-pasteable HTML/Astro component markup with pre-configured FSM state variants and inline SVG icons | Read-only |
| Charts & Data Viz | Lists and filters 56 theme-aware chart blueprints across 7 categories with keyword search | Read-only |
| Charts & Data Viz | Retrieves chart HTML using semantic CSS tokens (--chart-1..5) and mount scripts for 5 frameworks | Read-only |
| Quality & Audit | Audits HTML/Astro markup with Score (0-100), letter grade, syntax violations, a11y omissions, and auto-fix suggestions | Read-only |
| Components | Searches up to 8 compact component summaries by intent and/or query across 62 curated components | Read-only |
| Components | Retrieves minimal component template, dependencies, and composition guidance for Astro or HTML | Read-only |
| Components | Retrieves HTML markup template and dependencies for any curated component | Read-only |
| Static Analysis | Statically checks up to 256 KiB of markup for migration errors, rhythm, FSM bindings, and accessibility | Read-only |
| Static Analysis | Validates HTML/Astro markup syntax, structure, landmark ordering, and semantic constraints | Read-only |
| Macro Graph | Searches approved macro layout blocks by query, role, family, or tag across 84 blocks and aliases | Read-only |
| Macro Graph | Retrieves a section of a compiled macro block blueprint (manifest, structure, slots, ports, rules, etc.) | Read-only |
| Macro Graph | Creates a persistent, hash-verified design session under .basecoat/designer/ pinning profile and registry revision | Mutation (idempotent) |
| Macro Graph | Reads focused design session views (sessions, overview, decisions, graph, rules, focus, next) | Read-only |
| Macro Graph | Applies atomic graph mutations with expectedRevision and idempotent operationId | Mutation (idempotent) |
| Macro Graph | Validates draft or complete design graphs, returning diagnostic totals and paginated issues | Read-only |
| Semantics & Tokens | Reads effective semantic rhythm profiles and approved utilities by family, supporting project-local overrides | Read-only |
| Semantics & State | Reads finite state machine interaction states, events, transitions, guards, and actions | Read-only |
Intent-Driven Design Layer (Fast Path)
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 inlineblocks, and synchronous<head>inline dark mode scripts.basecoat_page_architect- Query recipes (src/macros/authoring/recipes/*.json) and macro blocks (src/macros/authoring/blocks/*.json) byintent,recipe, orblock. Delivers full layout scaffolds with explicitdata-slotmarkers, 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 (compactfor high-density enterprise tools,comfortablefor standard interfaces).
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.basecoat_rules_enforcer- Enforces strict technical constraints acrosstailwind-v4,fsm-contracts,tokens,semantic-html, anddashboard-patterns:MET-01: KPI numerals requiretext-2xl/text-3xlwithtabular-numsand 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 compacth-12orh-14(forbidding oversizedh-16).TW4-01: Rejects deprecated Tailwind v3 utilities (bg-opacity-*,flex-shrink-*,@tailwinddirectives).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).
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), andcomfortable(p-6 md:p-8, header h-14).Mathematical 4px/8px optical rhythm grid and typography ladders (
tabular-numson all metrics and numeric table cells).Subtle 1px card ring elevation without conflicting
borderutilities.WCAG 2.1 AA (contrast >= 4.5:1) and APCA ($L_c \ge 60$) token pairings.
basecoat_component_syntax- Delivers copy-pasteable HTML or Astro component markup fromsrc/registry/components.jsonwith 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 inoverflow-x-autowith right-aligned numeric cells.sidebar-shell(sidebar-dashboard-shell) - Desktop sticky navigation with responsive flyout belowmd.
basecoat_quality_inspector- Audits HTML/Astro compositions against dashboard audit rules:table-overflow-wrapper,kpi-metric-tabular-nums,table-numeric-alignment,a11y-focus-ring(flaggingoutline-nonewithout focus visible ring), arbitrary color/dimension violations, and WCAG/APCA contrast pairings. Returnsscore(0-100), lettergrade(A-F), structured issues, and actionableautoFixSuggestions.
Theme-Aware Charts and Data Visualization
basecoat_list_charts- Discovers and filters 56 theme-aware chart blueprints across 7 categories (area,bar,line,pie,radar,radial,tooltip) with keywordsearch/query, layout footprint (layoutFootprint),requiredTokens, and variant summaries.basecoat_get_chart_blueprint- Retrieves chart container HTML (chart-container,role="img", accessible<table class="sr-only">fallback, and glassmorphic tooltip markup withbg-background/95 backdrop-blur-sm), CSS tokens (var(--chart-1)throughvar(--chart-5),var(--color-border),var(--color-muted-foreground)), clientoptions,layoutFootprint, and framework mount code for 5 frameworks (vanilla,astro,react,vue,svelte) with optionalthemeTokensoverrides. AcceptschartIdor aliasid(defaults toarea-default). Integrated directly intodashboard-01andsvg-area-chart(data-chart-id="area-interactive"). Generated deterministically vianode scripts/ingest-shadcn-charts.mjs.
Component tools
search_componentsreturns up to 8 compact{id, name, intent}summaries across the 62 curated components and never returns markup.intentandqueryare optional; an empty search returns an empty list.get_component_detailsreturns one Astro or HTML template with dependencies and composition guidance. Oversized entries fail closed.theme-toggleresolves totheme-switcher.get_component_htmlreturns the HTML markup template and dependencies for any curated component (environmentdefaults tohtml).validate_compositionstatically 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, andaria-controlsbindings). Passcodeorhtml, and optionalsemanticProfileordensityProfile(comfortable|compact). It does not render, execute, resolve application modules, or certify runtime browser accessibility.validate_markupstatically 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.
search_macro_blocks- find compatible blueprint blocks by query, role, family, or tag across 84 blocks and aliases.get_macro_block- read a block section such asmanifest,structure,slots,ports,rules,dependencies, orprovenance.begin_design- create a persistent design session and pin its profile and registry revision. Pinned registries are hash-verified on load.get_design_context- read session lists or focused views such asoverview,graph,rules,focus, andnext.apply_design_patch- apply atomic graph changes withexpectedRevisionand an idempotentoperationId. A committed mutation always returns a success acknowledgement; oversized optional payload may be omitted withtruncated: true.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-01throughsidebar-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-01throughdashboard-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-01throughlogin-05,signup-01throughsignup-05,otp-01throughotp-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:
get_rhythm_rules- access approved spacing, typography, surfaces, borders, and layout patterns by profile and family filters.get_fsm_recipe- read interaction states, events, transitions, guards, and actions fordialog,navigation(collapsible-navigation),auth-flow, andtabs.
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.darkclass strategy (dark tokens leak into light mode).theme-storage-key- a theme script persists under a key other than Basecoat'sthemeMode, creating a second resolver that drifts fromwindow.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-runThis 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 |
| Skill Vault | Core Basecoat UI design philosophy, Kanso minimalism, and foundational component usage |
|
| Skill Vault | Comprehensive dashboard architecture, layout patterns, page types, sidebar configurations, and audit checklists |
|
| Skill Vault | Theme-aware chart blueprints, CSS token mapping (--chart-1..5), ApexCharts configuration, and multi-framework integration |
|
| Skill Vault | Dynamic file access resource to read individual documentation and reference markdown files across the 96-file Skill Vault |
|
| Design System | Content hierarchy, 4px/8px optical spacing rhythm, typography ladders, density profiles, and structural composition rules |
|
| Theming & Dark Mode | Basecoat OKLCH token contract, 8 official style packs (Vega..Rhea), class-based dark mode (themeMode resolver), and no-flash bootstrap |
|
| Integration Guide | Production integration guide covering Astro, Next.js, Express, Vite, Tailwind CSS 4 setup, and framework-agnostic HTML |
|
| Project Context | Live on-demand read of the host project's DESIGN.md (bounded to 6,000 UTF-8 bytes) |
|
basecoat://skills/coreprovides foundational guidelines for building clean, minimal interfaces using Basecoat CSS, including design philosophy, atomic styling principles, and component construction.basecoat://skills/dashboardprovides enterprise dashboard architecture, navigation patterns, data display conventions, form layouts, and accessibility checklists.basecoat://skills/chartsprovides complete guidance on theme-aware ApexCharts and SVG data visualization using pure Basecoat CSS color tokens (var(--chart-1)throughvar(--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/rhythmprovides content hierarchy, spacing, typography, component-family, and structural composition rules.basecoat://design/themingprovides the Basecoat token contract, all 8 official style packs (Vega, Nova, Maia, Lyra, Mira, Luma, Sera, Rhea), class-based dark mode viawindow.basecoat.theme(themeModekey), no-flash bootstrap, and form-control/autofill pitfalls. Read it before restyling or auditing an existing UI.basecoat://integration/frameworksprovides 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/contextreads the configured host project'sDESIGN.mdon 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:
Read the rhythm and project-context resources.
Decide content hierarchy and layout.
Search summaries, then request details only for selected components.
Read the integration resource when connecting production assets.
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_compositiontool 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_blocksto find ashell(layout wrapper), anddashboard-mainordashboard-workspaceto populate themaincontainer, 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/uinew-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, andsettings.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)throughvar(--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), andskills/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=devnpm 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.jsonThe 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> --checkThe 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
Create a focused branch from the default branch.
Keep component templates, macro contracts, and documentation aligned with checked-in source.
Run
npm run typecheck,npm run compile:semantics:check,npm run compile:blocks:check, andnpm run test.Run
npm pack --dry-runwhen package contents or metadata change.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-rootorBASECOAT_PROJECT_ROOT. The fallback is the process launch directory.DESIGN.mdis 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 buildbeforenpm 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 uniqueoperationId.
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 toolsapply_design_patchAIdempotent
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.
| Name | Required | Description | Default |
|---|---|---|---|
| designId | Yes | Identifier of the design session to mutate. | |
| operations | Yes | Ordered array of patch operations (add_node, remove_node, move_node, connect, disconnect, set_decision, set_binding). | |
| operationId | Yes | Idempotency key for this patch transaction. | |
| expectedRevision | Yes | Expected current revision of the session to guarantee optimistic concurrency. |
TDQS
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.
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.
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.
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.
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.
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_syntaxARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | Alternative identifier alias for the component (matches component argument). | |
| icon | No | Verified Lucide action icon to inject with canonical data-icon="inline-start|inline-end" positioning. | |
| name | No | Alternative identifier alias for the component. | |
| state | No | Target interactive state variant to bind to markup: "default", "active", "loading", "disabled", "open", "closed", "invalid", or "open/closed". | |
| variant | No | Visual variant token (e.g. "outline", "ghost", "secondary", "destructive", "subcard", "horizontal", "inline", "error"). | |
| component | No | Component 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"). | |
| componentId | No | Alternative identifier alias for the component. | |
| environment | No | Target output environment: "html", "astro", "react", "vue", or "svelte". Defaults to "html". | |
| orientation | No | Spatial orientation: "vertical" (standard stacked), "horizontal" (grid 2-column for settings), or "inline" (checkbox/switch/radio). |
TDQS
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.
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.
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.
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.
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.
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_stackARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | Poka-Yoke alias for shellId. | |
| name | No | Poka-Yoke alias for shellId. | |
| shell | No | Poka-Yoke alias for shellId. | |
| title | No | Optional workspace/page title to inject into the shell header. | |
| stacks | No | Ordered 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". | |
| density | No | Optical spacing density mode. Defaults to standard. | |
| shellId | No | Shell architecture ID from shell-stacks: sidebar-01..sidebar-16, topbar-shell, inset-shell, or split-shell. Defaults to sidebar-01. | |
| headerId | No | Optional header stack ID from header-stacks: breadcrumb-command-header, tabs-filter-header, or date-range-export-header. | |
| componentId | No | Poka-Yoke alias for shellId. | |
| environment | No | Target output environment/framework. Defaults to html. |
TDQS
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.
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.
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.
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.
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.
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_directorBRead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | Principle ID or component ID alias. | |
| name | No | Component name or principle name alias. | |
| topic | No | Design topic to inspect: "typography", "whitespace", "hierarchy", "elevation", "style-packs", "content-strategy", "density", or "all". | |
| density | No | Interface 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). | |
| stylePack | No | Basecoat 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). | |
| visitorJob | No | Visitor mental model and primary task: "operate" (fast scanning SaaS), "persuade" (marketing landing), "read" (prose doc), or "experience" (immersive showcase). | |
| componentId | No | Component ID alias. | |
| environment | No | Target environment (defaults to "html"). |
TDQS
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.
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.
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.
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.
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.
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_blueprintARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | Alias for chartId. Defaults to "area-default" if neither chartId nor id is provided. | |
| name | No | Alias for chartId/name. | |
| engine | No | Chart rendering engine (svg or apexcharts). Defaults to svg. | svg |
| chartId | No | Chart 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. | |
| framework | No | Target framework mount generator (vanilla, astro, react, vue, svelte, html). When html or omitted, resolves to vanilla. | |
| componentId | No | Alias for chartId/id. | |
| environment | No | Target environment (html, astro, react, vue, svelte). Defaults to html. | html |
| themeTokens | No | Optional CSS theme token overrides (e.g. { "var(--chart-1)": "var(--color-primary)" }). |
TDQS
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.
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.
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.
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.
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.
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_chartsARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | Filter or match by specific chart ID. | |
| name | No | Filter or match by chart name. | |
| query | No | Search keyword alias for search. | |
| search | No | Search keyword for chart variant (e.g., stacked, gradient, sparkline, donut, gauge). | |
| category | No | Filter charts by category (area, bar, line, pie, radar, radial, tooltip). | |
| componentId | No | Alias for chart ID filter. |
TDQS
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.
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.
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.
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.
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.
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_architectARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | Alternative recipe or block identifier alias matching id or recipe. | |
| name | No | Alternative recipe or block identifier alias. | |
| block | No | Specific block identifier or pattern to retrieve scaffold for (e.g. "sidebar-01".."sidebar-16", "dashboard-01".."dashboard-07", "login-01"). | |
| intent | No | User or business intent for page scaffolding (e.g. "workspace-dashboard", "executive-dashboard", "sidebar-07", "data-table-detail", "auth-split-flow"). | |
| recipe | No | Macro recipe identifier to resolve directly (e.g. "workspace-dashboard", "workspace-detail", "workspace-settings", "auth-split-flow"). | |
| density | No | Visual layout density: "comfortable" (standard SaaS spacing, p-6/h-14) or "compact" (dense data tools, p-4/h-12). | |
| componentId | No | Alternative recipe or block identifier alias. | |
| environment | No | Target framework/environment template (defaults to html). |
TDQS
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.
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.
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.
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.
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.
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_inspectorBRead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | Alternative component identifier alias to inspect. | |
| code | No | HTML/component markup string to inspect for syntax violations, a11y omissions, and quality metrics. | |
| html | No | Alternative parameter alias for the code string to inspect. | |
| name | No | Alternative component identifier alias to inspect. | |
| markup | No | Alternative parameter alias for the markup snippet to inspect. | |
| enforceFsm | No | Whether to strictly enforce FSM data-state bindings and field-group hierarchies on interactive controls. | |
| componentId | No | Alternative component identifier alias to inspect. | |
| environment | No | Target environment for inspection (defaults to html). | |
| densityProfile | No | Density profile context: "comfortable" (standard rhythm) or "compact" (dense micro-spacing allowed). | |
| semanticProfile | No | Semantic token rhythm profile to validate against (defaults to "default"). |
TDQS
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.
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.
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.
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.
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.
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_enforcerBRead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | Rule ID or component ID to inspect. | |
| code | No | HTML/markup snippet to audit against the indexed technical constraints. | |
| html | No | Alternative alias for the code parameter to audit against constraints. | |
| name | No | Rule or component name alias. | |
| query | No | Search query to match against rule IDs, titles, forbidden patterns, or required syntax. | |
| category | No | Filter rules by technical domain: "tailwind-v4", "fsm-contracts", "tokens", "semantic-html", "dashboard-patterns", or "all". | |
| componentId | No | Component ID alias to filter relevant rules. | |
| environment | No | Target output environment: "html", "astro", "react", "vue", or "svelte". Defaults to "html". |
TDQS
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.
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.
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.
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.
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.
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_configARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | Framework or style pack identifier alias. | |
| name | No | Framework or style pack identifier alias. | |
| framework | No | Target framework or environment for setup instructions and boilerplate (astro, vanilla, nextjs, sveltekit, vite, htmx). Defaults to astro. | |
| stylePack | No | Aesthetic 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. | |
| componentId | No | Framework or style pack identifier alias. | |
| environment | No | Target environment alias (html, astro, react, vue, svelte). | |
| includeDarkThemeScript | No | Whether to include the synchronous inline <head> dark mode bootstrap script to prevent theme flashing. Defaults to true. |
TDQS
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.
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.
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.
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.
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.
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_designAIdempotent
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.
| Name | Required | Description | Default |
|---|---|---|---|
| profile | Yes | Target rhythm/scaffold profile or recipe alias (e.g. "workspace-dashboard", "executive-dashboard"). | |
| designId | Yes | Unique identifier for the new design session (slug format, e.g. "workspace-v1"). | |
| decisions | No | Initial architectural decisions for the session (e.g. density, stylePack, responsive breakpoints). | |
| operationId | Yes | Idempotency key for session creation. |
TDQS
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.
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.
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.
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.
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.
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_stackARead-onlyIdempotent
[STAGE 3: SYNTAX & STACKS] Alias of basecoat_compose_stack. Assemble shell architectures and hydrate pre-configured component stacks into slots.
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | Poka-Yoke alias for shellId. | |
| name | No | Poka-Yoke alias for shellId. | |
| shell | No | Poka-Yoke alias for shellId. | |
| title | No | Optional workspace/page title to inject into the shell header. | |
| stacks | No | Ordered 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". | |
| density | No | Optical spacing density mode. Defaults to standard. | |
| shellId | No | Shell architecture ID from shell-stacks: sidebar-01..sidebar-16, topbar-shell, inset-shell, or split-shell. Defaults to sidebar-01. | |
| headerId | No | Optional header stack ID from header-stacks: breadcrumb-command-header, tabs-filter-header, or date-range-export-header. | |
| componentId | No | Poka-Yoke alias for shellId. | |
| environment | No | Target output environment/framework. Defaults to html. |
TDQS
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.
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.
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.
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.
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.
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_rulesCRead-onlyIdempotent
[STAGE 2: RULES & RHYTHM] Alias of basecoat_rules_enforcer. Retrieve indexed technical implementation constraints.
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | Rule ID or component ID to inspect. | |
| code | No | HTML/markup snippet to audit against the indexed technical constraints. | |
| html | No | Alternative alias for the code parameter to audit against constraints. | |
| name | No | Rule or component name alias. | |
| query | No | Search query to match against rule IDs, titles, forbidden patterns, or required syntax. | |
| category | No | Filter rules by technical domain: "tailwind-v4", "fsm-contracts", "tokens", "semantic-html", "dashboard-patterns", or "all". | |
| componentId | No | Component ID alias to filter relevant rules. | |
| environment | No | Target output environment: "html", "astro", "react", "vue", or "svelte". Defaults to "html". |
TDQS
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.
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.
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.
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.
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.
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_blueprintBRead-onlyIdempotent
[STAGE 3: SYNTAX & STACKS] Alias of basecoat_get_chart_blueprint. Retrieve complete chart markup, CSS theme tokens, and client options.
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | Alias for chartId. Defaults to "area-default" if neither chartId nor id is provided. | |
| name | No | Alias for chartId/name. | |
| engine | No | Chart rendering engine (svg or apexcharts). Defaults to svg. | svg |
| chartId | No | Chart 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. | |
| framework | No | Target framework mount generator (vanilla, astro, react, vue, svelte, html). When html or omitted, resolves to vanilla. | |
| componentId | No | Alias for chartId/id. | |
| environment | No | Target environment (html, astro, react, vue, svelte). Defaults to html. | html |
| themeTokens | No | Optional CSS theme token overrides (e.g. { "var(--chart-1)": "var(--color-primary)" }). |
TDQS
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.
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.
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.
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.
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.
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_detailsARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | Basecoat component ID from search_components (e.g., "button", "dialog", "card", "dropdown-menu", "table", "tabs"). | |
| name | No | Alternative component identifier alias. | |
| componentId | No | Alternative component identifier alias. | |
| environment | No | Target framework/environment template to output (defaults to "html"). |
TDQS
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.
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.
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.
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.
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.
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_htmlARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | Basecoat component ID from search_components (e.g., "button", "dialog", "card", "dropdown-menu", "table", "tabs"). | |
| name | No | Alternative component identifier alias. | |
| componentId | No | Alternative component identifier alias. | |
| environment | No | Target framework/environment template to output (defaults to "html"). |
TDQS
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.
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.
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.
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.
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.
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_syntaxARead-onlyIdempotent
[STAGE 3: SYNTAX & STACKS] Alias of basecoat_component_syntax. Retrieve copy-pasteable Basecoat component markup with FSM state variants.
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | Alternative identifier alias for the component (matches component argument). | |
| icon | No | Verified Lucide action icon to inject with canonical data-icon="inline-start|inline-end" positioning. | |
| name | No | Alternative identifier alias for the component. | |
| state | No | Target interactive state variant to bind to markup: "default", "active", "loading", "disabled", "open", "closed", "invalid", or "open/closed". | |
| variant | No | Visual variant token (e.g. "outline", "ghost", "secondary", "destructive", "subcard", "horizontal", "inline", "error"). | |
| component | No | Component 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"). | |
| componentId | No | Alternative identifier alias for the component. | |
| environment | No | Target output environment: "html", "astro", "react", "vue", or "svelte". Defaults to "html". | |
| orientation | No | Spatial orientation: "vertical" (standard stacked), "horizontal" (grid 2-column for settings), or "inline" (checkbox/switch/radio). |
TDQS
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.
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.
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.
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.
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.
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_directionCRead-onlyIdempotent
[STAGE 2: RULES & RHYTHM] Alias of basecoat_creative_director. Surface Kanso minimalism and Basecoat design intelligence.
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | Principle ID or component ID alias. | |
| name | No | Component name or principle name alias. | |
| topic | No | Design topic to inspect: "typography", "whitespace", "hierarchy", "elevation", "style-packs", "content-strategy", "density", or "all". | |
| density | No | Interface 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). | |
| stylePack | No | Basecoat 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). | |
| visitorJob | No | Visitor mental model and primary task: "operate" (fast scanning SaaS), "persuade" (marketing landing), "read" (prose doc), or "experience" (immersive showcase). | |
| componentId | No | Component ID alias. | |
| environment | No | Target environment (defaults to "html"). |
TDQS
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.
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.
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.
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.
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.
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_contextARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | Alternative design session ID alias matching designId. | |
| name | No | Alternative design session ID alias matching designId. | |
| view | No | Context perspective to retrieve: "sessions", "overview", "decisions", "graph", "rules", "focus", or "next". Defaults to "sessions". | |
| cursor | No | Pagination cursor for paginated context listings. | |
| nodeId | No | Target node ID within the page (for "node" view). | |
| pageId | No | Target page ID within the design session (for "page" or "node" view). | |
| designId | No | Target design session ID (required for all views except "sessions"). | |
| revision | No | Target design session revision to inspect (defaults to latest). | |
| componentId | No | Alternative design session ID alias matching designId. | |
| environment | No | Target environment. |
TDQS
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.
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.
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.
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.
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.
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_rulesARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | Identifier or keyword alias. | |
| code | No | Markup snippet to audit. | |
| html | No | Alternative markup snippet alias. | |
| name | No | Rule or component name alias. | |
| query | No | Search query matching rule IDs or keywords. | |
| family | No | Semantic rhythm family filter (e.g. "spacing", "layout", "typography"). | |
| profile | No | Rhythm profile filter (e.g. "default", "compact", "comfortable"). | |
| category | No | Filter rules by technical domain. | |
| componentId | No | Component identifier alias. | |
| environment | No | Target environment. |
TDQS
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.
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.
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.
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.
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.
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_recipeBRead-onlyIdempotent
Read finite FSM states, events, guards, actions, or transitions. Recipes are structural metadata, not executable runtime code.
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | Alternative recipe identifier alias. | |
| name | No | Alternative recipe identifier alias. | |
| limit | No | Maximum number of FSM entries to return per page (1-32, default 10). | |
| cursor | No | Pagination cursor for bounded continuation of FSM recipe details. | |
| recipe | No | FSM recipe identifier or alias to retrieve (e.g. "dialog", "tabs", "navigation", "collapsible-navigation", "sidebar"). | |
| section | No | Specific FSM recipe contract section to inspect ("states", "events", "guards", "actions", "transitions"). | |
| componentId | No | Alternative recipe identifier alias. | |
| environment | No | Target environment. |
TDQS
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.
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.
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.
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.
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.
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_blockARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | Alternative block identifier alias matching idOrRef. | |
| name | No | Alternative block identifier alias matching idOrRef. | |
| cursor | No | Pagination cursor for large section reads exceeding packet limits. | |
| idOrRef | No | Canonical macro block ID or SHA-256 content reference hash. | |
| section | No | Specific block section to retrieve: "all", "manifest", "structure", "slots", "ports", "rules", "dependencies", or "provenance". Defaults to "all". | |
| designId | No | Active design session ID to retrieve session-bound block variants. | |
| componentId | No | Alternative block identifier alias matching idOrRef. | |
| environment | No | Target environment (defaults to html). |
TDQS
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.
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.
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.
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.
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.
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_architectBRead-onlyIdempotent
[STAGE 1: ARCHITECT] Alias of basecoat_page_architect. Search and retrieve complete layout scaffolds with explicit slot markers.
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | Alternative recipe or block identifier alias matching id or recipe. | |
| name | No | Alternative recipe or block identifier alias. | |
| block | No | Specific block identifier or pattern to retrieve scaffold for (e.g. "sidebar-01".."sidebar-16", "dashboard-01".."dashboard-07", "login-01"). | |
| intent | No | User or business intent for page scaffolding (e.g. "workspace-dashboard", "executive-dashboard", "sidebar-07", "data-table-detail", "auth-split-flow"). | |
| recipe | No | Macro recipe identifier to resolve directly (e.g. "workspace-dashboard", "workspace-detail", "workspace-settings", "auth-split-flow"). | |
| density | No | Visual layout density: "comfortable" (standard SaaS spacing, p-6/h-14) or "compact" (dense data tools, p-4/h-12). | |
| componentId | No | Alternative recipe or block identifier alias. | |
| environment | No | Target framework/environment template (defaults to html). |
TDQS
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.
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.
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.
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.
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.
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_rulesARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | Alternative identifier alias for profile or family. | |
| name | No | Alternative identifier alias for profile or family. | |
| limit | No | Maximum number of rhythm mappings to return per page (1-32, default 10). | |
| cursor | No | Pagination cursor for bounded continuation of rhythm rules. | |
| family | No | Semantic rhythm family to filter by (e.g. "spacing", "layout", "typography", "colors", "elevation"). Accepts aliases like "layouts". | |
| profile | No | Rhythm profile identifier to query (e.g. "default", "compact", "comfortable"). Defaults to "default". | |
| componentId | No | Alternative identifier alias for profile or family. | |
| environment | No | Target environment. |
TDQS
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.
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.
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.
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.
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.
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_qualityBRead-onlyIdempotent
[STAGE 4: QUALITY AUDIT] Alias of basecoat_quality_inspector. Audit HTML/Astro markup and return a structured quality report.
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | Alternative component identifier alias to inspect. | |
| code | No | HTML/component markup string to inspect for syntax violations, a11y omissions, and quality metrics. | |
| html | No | Alternative parameter alias for the code string to inspect. | |
| name | No | Alternative component identifier alias to inspect. | |
| markup | No | Alternative parameter alias for the markup snippet to inspect. | |
| enforceFsm | No | Whether to strictly enforce FSM data-state bindings and field-group hierarchies on interactive controls. | |
| componentId | No | Alternative component identifier alias to inspect. | |
| environment | No | Target environment for inspection (defaults to html). | |
| densityProfile | No | Density profile context: "comfortable" (standard rhythm) or "compact" (dense micro-spacing allowed). | |
| semanticProfile | No | Semantic token rhythm profile to validate against (defaults to "default"). |
TDQS
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.
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.
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.
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.
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.
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_blocksARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| q | No | Full-text search query across macro block IDs, descriptions, and tag sets. | |
| id | No | Alternative identifier or query alias. | |
| tag | No | Specific functional tag to filter by (e.g. "sidebar", "data-table", "kpi"). | |
| name | No | Alternative identifier or query alias. | |
| role | No | Macro role filter (e.g. "navigation", "canvas", "header", "region", "form"). | |
| limit | No | Maximum number of block manifests to return per page (1-32, default 10). | |
| cursor | No | Pagination cursor returned from a previous search. | |
| family | No | Block family filter (e.g. "layout", "workspace", "auth", "detail"). | |
| pageId | No | Target page ID in the design session when scoping to a slot. | |
| slotId | No | Target parent slot ID to filter compatible blocks by role. | |
| designId | No | Active design session ID to search with session-specific block registry overrides. | |
| componentId | No | Alternative identifier or query alias. | |
| environment | No | Target environment. | |
| parentNodeId | No | Parent node ID hosting the target slot. |
TDQS
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.
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.
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.
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.
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.
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_chartsBRead-onlyIdempotent
[STAGE 3: SYNTAX & STACKS] Alias of basecoat_list_charts. List and filter 50+ Basecoat ApexCharts and SVG data visualization blueprints.
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | Filter or match by specific chart ID. | |
| name | No | Filter or match by chart name. | |
| query | No | Search keyword alias for search. | |
| search | No | Search keyword for chart variant (e.g., stacked, gradient, sparkline, donut, gauge). | |
| category | No | Filter charts by category (area, bar, line, pie, radar, radial, tooltip). | |
| componentId | No | Alias for chart ID filter. |
TDQS
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.
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.
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.
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.
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.
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_componentsARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | Alternative component identifier alias. | |
| name | No | Alternative component identifier alias. | |
| query | No | Direct component ID or name keyword to filter (e.g., "dialog", "button", "table"). | |
| intent | No | Semantic intent or use case (e.g., "modal dialog", "user menu", "data table", "form field"). | |
| componentId | No | Alternative component identifier alias. | |
| environment | No | Target environment (defaults to html). |
TDQS
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.
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.
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.
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.
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.
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_blocksARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| q | No | Full-text search query across macro block IDs, descriptions, and tag sets. | |
| id | No | Alternative identifier or query alias. | |
| tag | No | Specific functional tag to filter by (e.g. "sidebar", "data-table", "kpi"). | |
| name | No | Alternative identifier or query alias. | |
| role | No | Macro role filter (e.g. "navigation", "canvas", "header", "region", "form"). | |
| limit | No | Maximum number of block manifests to return per page (1-32, default 10). | |
| cursor | No | Pagination cursor returned from a previous search. | |
| family | No | Block family filter (e.g. "layout", "workspace", "auth", "detail"). | |
| pageId | No | Target page ID in the design session when scoping to a slot. | |
| slotId | No | Target parent slot ID to filter compatible blocks by role. | |
| designId | No | Active design session ID to search with session-specific block registry overrides. | |
| componentId | No | Alternative identifier or query alias. | |
| environment | No | Target environment. | |
| parentNodeId | No | Parent node ID hosting the target slot. |
TDQS
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.
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.
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.
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.
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.
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_configBRead-onlyIdempotent
[STAGE 1: ARCHITECT] Alias of basecoat_setup_config. Generate production Tailwind CSS v4 setup, OKLCH tokens, and theme scripts.
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | Framework or style pack identifier alias. | |
| name | No | Framework or style pack identifier alias. | |
| framework | No | Target framework or environment for setup instructions and boilerplate (astro, vanilla, nextjs, sveltekit, vite, htmx). Defaults to astro. | |
| stylePack | No | Aesthetic 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. | |
| componentId | No | Framework or style pack identifier alias. | |
| environment | No | Target environment alias (html, astro, react, vue, svelte). | |
| includeDarkThemeScript | No | Whether to include the synchronous inline <head> dark mode bootstrap script to prevent theme flashing. Defaults to true. |
TDQS
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.
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.
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.
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.
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.
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_compositionARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| code | No | HTML or Astro source code to validate statically against Basecoat rules and tokens. | |
| html | No | Alias for code parameter. Pass either code or html. | |
| densityProfile | No | Optical spacing density profile ("comfortable" or "compact"). | |
| semanticProfile | No | Semantic rhythm profile ID (e.g., "default", "dashboard"). Defaults to "default". |
TDQS
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.
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.
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.
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.
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.
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_designARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| mode | No | Validation strictness mode: "draft" allows unbound slots; "complete" enforces zero open slots and full port connectivity. | draft |
| cursor | No | Pagination cursor if validation diagnostics exceed single response limit. | |
| pageId | No | Optionally scope validation to a single page within the session. | |
| designId | Yes | Identifier of the design session to validate. | |
| revision | No | Specific revision to validate (defaults to latest). |
TDQS
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.
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.
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.
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.
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.
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_markupARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| code | No | HTML or Astro source code to validate statically against Basecoat rules and tokens. | |
| html | No | Alias for code parameter. Pass either code or html. | |
| densityProfile | No | Optical spacing density profile ("comfortable" or "compact"). | |
| semanticProfile | No | Semantic rhythm profile ID (e.g., "default", "dashboard"). Defaults to "default". |
TDQS
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.
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.
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.
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.
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.
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.
33 tool updates
v1.8.0- Changed
apply_design_patch4 fields changed- added
Input schema / properties / designId / descriptionAdded value: +"Identifier of the design session to mutate." - added
Input schema / properties / expectedRevision / descriptionAdded value: +"Expected current revision of the session to guarantee optimistic concurrency." - added
Input schema / properties / operationId / descriptionAdded value: +"Idempotency key for this patch transaction." - added
Input schema / properties / operations / descriptionAdded value: +"Ordered array of patch operations (add_node, remove_node, move_node, connect, disconnect, set_decision, set_binding)."
- Added
basecoat_component_syntax - Added
basecoat_compose_stack - Added
basecoat_creative_director - Added
basecoat_get_chart_blueprint - Added
basecoat_list_charts - Added
basecoat_page_architect - Added
basecoat_quality_inspector - Added
basecoat_rules_enforcer - Added
basecoat_setup_config - Changed
begin_design4 fields changed- added
Input schema / properties / decisions / descriptionAdded value: +"Initial architectural decisions for the session (e.g. density, stylePack, responsive breakpoints)." - added
Input schema / properties / designId / descriptionAdded value: +"Unique identifier for the new design session (slug format, e.g. \"workspace-v1\")." - added
Input schema / properties / operationId / descriptionAdded value: +"Idempotency key for session creation." - added
Input schema / properties / profile / descriptionAdded value: +"Target rhythm/scaffold profile or recipe alias (e.g. \"workspace-dashboard\", \"executive-dashboard\")."
- Added
compose_stack - Added
enforce_rules - Added
get_chart_blueprint - Changed
get_component_details6 fields changed- added
Input schema / properties / componentIdAdded value: +{ + "description": "Alternative component identifier alias.", + "maxLength": 80, + "type": "string" +} - added
Input schema / properties / environment / descriptionAdded value: +"Target framework/environment template to output (defaults to \"html\")." - changed
Input schema / properties / environment / enumPrevious value: -[ - "astro", - "html" -]New value: +[ + "html", + "astro", + "react", + "vue", + "svelte" +] - added
Input schema / properties / id / descriptionAdded value: +"Basecoat component ID from search_components (e.g., \"button\", \"dialog\", \"card\", \"dropdown-menu\", \"table\", \"tabs\")." - added
Input schema / properties / nameAdded value: +{ + "description": "Alternative component identifier alias.", + "maxLength": 80, + "type": "string" +} - removed
Input schema / requiredRemoved value: -[ - "id", - "environment" -]
- Added
get_component_html - Added
get_component_syntax - Added
get_creative_direction - Changed
get_design_context11 fields changed- added
Input schema / properties / componentIdAdded value: +{ + "description": "Alternative design session ID alias matching designId.", + "maxLength": 64, + "type": "string" +} - added
Input schema / properties / cursor / descriptionAdded value: +"Pagination cursor for paginated context listings." - added
Input schema / properties / designId / descriptionAdded value: +"Target design session ID (required for all views except \"sessions\")." - added
Input schema / properties / environmentAdded value: +{ + "description": "Target environment.", + "enum": [ + "html", + "astro", + "react", + "vue", + "svelte" + ], + "type": "string" +} - added
Input schema / properties / idAdded value: +{ + "description": "Alternative design session ID alias matching designId.", + "maxLength": 64, + "type": "string" +} - added
Input schema / properties / nameAdded value: +{ + "description": "Alternative design session ID alias matching designId.", + "maxLength": 64, + "type": "string" +} - added
Input schema / properties / nodeId / descriptionAdded value: +"Target node ID within the page (for \"node\" view)." - added
Input schema / properties / pageId / descriptionAdded value: +"Target page ID within the design session (for \"page\" or \"node\" view)." - added
Input schema / properties / revision / descriptionAdded value: +"Target design session revision to inspect (defaults to latest)." - added
Input schema / properties / view / descriptionAdded value: +"Context perspective to retrieve: \"sessions\", \"overview\", \"decisions\", \"graph\", \"rules\", \"focus\", or \"next\". Defaults to \"sessions\"." - removed
Input schema / requiredRemoved value: -[ - "view" -]
- Added
get_design_rules - Changed
get_fsm_recipe8 fields changed- added
Input schema / properties / componentIdAdded value: +{ + "description": "Alternative recipe identifier alias.", + "maxLength": 64, + "minLength": 1, + "pattern": "^[a-z][a-z0-9-]*$", + "type": "string" +} - added
Input schema / properties / cursor / descriptionAdded value: +"Pagination cursor for bounded continuation of FSM recipe details." - added
Input schema / properties / environmentAdded value: +{ + "description": "Target environment.", + "enum": [ + "html", + "astro", + "react", + "vue", + "svelte" + ], + "type": "string" +} - added
Input schema / properties / idAdded value: +{ + "description": "Alternative recipe identifier alias.", + "maxLength": 64, + "minLength": 1, + "pattern": "^[a-z][a-z0-9-]*$", + "type": "string" +} - added
Input schema / properties / limit / descriptionAdded value: +"Maximum number of FSM entries to return per page (1-32, default 10)." - added
Input schema / properties / nameAdded value: +{ + "description": "Alternative recipe identifier alias.", + "maxLength": 64, + "minLength": 1, + "pattern": "^[a-z][a-z0-9-]*$", + "type": "string" +} - added
Input schema / properties / recipe / descriptionAdded value: +"FSM recipe identifier or alias to retrieve (e.g. \"dialog\", \"tabs\", \"navigation\", \"collapsible-navigation\", \"sidebar\")." - added
Input schema / properties / section / descriptionAdded value: +"Specific FSM recipe contract section to inspect (\"states\", \"events\", \"guards\", \"actions\", \"transitions\")."
- Changed
get_macro_block9 fields changed- added
Input schema / properties / componentIdAdded value: +{ + "description": "Alternative block identifier alias matching idOrRef.", + "maxLength": 80, + "minLength": 1, + "type": "string" +} - added
Input schema / properties / cursor / descriptionAdded value: +"Pagination cursor for large section reads exceeding packet limits." - added
Input schema / properties / designId / descriptionAdded value: +"Active design session ID to retrieve session-bound block variants." - added
Input schema / properties / environmentAdded value: +{ + "description": "Target environment (defaults to html).", + "enum": [ + "html", + "astro", + "react", + "vue", + "svelte" + ], + "type": "string" +} - added
Input schema / properties / id / descriptionAdded value: +"Alternative block identifier alias matching idOrRef." - added
Input schema / properties / idOrRef / descriptionAdded value: +"Canonical macro block ID or SHA-256 content reference hash." - added
Input schema / properties / nameAdded value: +{ + "description": "Alternative block identifier alias matching idOrRef.", + "maxLength": 80, + "minLength": 1, + "type": "string" +} - added
Input schema / properties / section / descriptionAdded value: +"Specific block section to retrieve: \"all\", \"manifest\", \"structure\", \"slots\", \"ports\", \"rules\", \"dependencies\", or \"provenance\". Defaults to \"all\"." - changed
Input schema / properties / section / enumPrevious value: -[ - "manifest", - "structure", - "slots", - "ports", - "rules", - "dependencies", - "provenance" -]New value: +[ + "all", + "manifest", + "structure", + "slots", + "ports", + "rules", + "dependencies", + "provenance" +]
- Added
get_page_architect - Changed
get_rhythm_rules8 fields changed- added
Input schema / properties / componentIdAdded value: +{ + "description": "Alternative identifier alias for profile or family.", + "maxLength": 64, + "minLength": 1, + "pattern": "^[a-z][a-z0-9-]*$", + "type": "string" +} - added
Input schema / properties / cursor / descriptionAdded value: +"Pagination cursor for bounded continuation of rhythm rules." - added
Input schema / properties / environmentAdded value: +{ + "description": "Target environment.", + "enum": [ + "html", + "astro", + "react", + "vue", + "svelte" + ], + "type": "string" +} - added
Input schema / properties / family / descriptionAdded value: +"Semantic rhythm family to filter by (e.g. \"spacing\", \"layout\", \"typography\", \"colors\", \"elevation\"). Accepts aliases like \"layouts\"." - added
Input schema / properties / idAdded value: +{ + "description": "Alternative identifier alias for profile or family.", + "maxLength": 64, + "minLength": 1, + "pattern": "^[a-z][a-z0-9-]*$", + "type": "string" +} - added
Input schema / properties / limit / descriptionAdded value: +"Maximum number of rhythm mappings to return per page (1-32, default 10)." - added
Input schema / properties / nameAdded value: +{ + "description": "Alternative identifier alias for profile or family.", + "maxLength": 64, + "minLength": 1, + "pattern": "^[a-z][a-z0-9-]*$", + "type": "string" +} - added
Input schema / properties / profile / descriptionAdded value: +"Rhythm profile identifier to query (e.g. \"default\", \"compact\", \"comfortable\"). Defaults to \"default\"."
- Added
inspect_quality - Added
list_blocks - Added
list_charts - Changed
search_components6 fields changed- added
Input schema / properties / componentIdAdded value: +{ + "description": "Alternative component identifier alias.", + "maxLength": 80, + "type": "string" +} - added
Input schema / properties / environmentAdded value: +{ + "description": "Target environment (defaults to html).", + "enum": [ + "html", + "astro", + "react", + "vue", + "svelte" + ], + "type": "string" +} - added
Input schema / properties / idAdded value: +{ + "description": "Alternative component identifier alias.", + "maxLength": 80, + "type": "string" +} - added
Input schema / properties / intent / descriptionAdded value: +"Semantic intent or use case (e.g., \"modal dialog\", \"user menu\", \"data table\", \"form field\")." - added
Input schema / properties / nameAdded value: +{ + "description": "Alternative component identifier alias.", + "maxLength": 80, + "type": "string" +} - added
Input schema / properties / query / descriptionAdded value: +"Direct component ID or name keyword to filter (e.g., \"dialog\", \"button\", \"table\")."
- Changed
search_macro_blocks14 fields changed- added
Input schema / properties / componentIdAdded value: +{ + "description": "Alternative identifier or query alias.", + "maxLength": 80, + "type": "string" +} - added
Input schema / properties / cursor / descriptionAdded value: +"Pagination cursor returned from a previous search." - added
Input schema / properties / designId / descriptionAdded value: +"Active design session ID to search with session-specific block registry overrides." - added
Input schema / properties / environmentAdded value: +{ + "description": "Target environment.", + "enum": [ + "html", + "astro", + "react", + "vue", + "svelte" + ], + "type": "string" +} - added
Input schema / properties / family / descriptionAdded value: +"Block family filter (e.g. \"layout\", \"workspace\", \"auth\", \"detail\")." - added
Input schema / properties / idAdded value: +{ + "description": "Alternative identifier or query alias.", + "maxLength": 80, + "type": "string" +} - added
Input schema / properties / limit / descriptionAdded value: +"Maximum number of block manifests to return per page (1-32, default 10)." - added
Input schema / properties / nameAdded value: +{ + "description": "Alternative identifier or query alias.", + "maxLength": 80, + "type": "string" +} - added
Input schema / properties / pageId / descriptionAdded value: +"Target page ID in the design session when scoping to a slot." - added
Input schema / properties / parentNodeId / descriptionAdded value: +"Parent node ID hosting the target slot." - added
Input schema / properties / q / descriptionAdded value: +"Full-text search query across macro block IDs, descriptions, and tag sets." - added
Input schema / properties / role / descriptionAdded value: +"Macro role filter (e.g. \"navigation\", \"canvas\", \"header\", \"region\", \"form\")." - added
Input schema / properties / slotId / descriptionAdded value: +"Target parent slot ID to filter compatible blocks by role." - added
Input schema / properties / tag / descriptionAdded value: +"Specific functional tag to filter by (e.g. \"sidebar\", \"data-table\", \"kpi\")."
- Added
setup_config - Changed
validate_composition4 fields changed- added
Input schema / properties / code / descriptionAdded value: +"HTML or Astro source code to validate statically against Basecoat rules and tokens." - added
Input schema / properties / densityProfile / descriptionAdded value: +"Optical spacing density profile (\"comfortable\" or \"compact\")." - added
Input schema / properties / html / descriptionAdded value: +"Alias for code parameter. Pass either code or html." - added
Input schema / properties / semanticProfile / descriptionAdded value: +"Semantic rhythm profile ID (e.g., \"default\", \"dashboard\"). Defaults to \"default\"."
- Changed
validate_design5 fields changed- added
Input schema / properties / cursor / descriptionAdded value: +"Pagination cursor if validation diagnostics exceed single response limit." - added
Input schema / properties / designId / descriptionAdded value: +"Identifier of the design session to validate." - added
Input schema / properties / mode / descriptionAdded value: +"Validation strictness mode: \"draft\" allows unbound slots; \"complete\" enforces zero open slots and full port connectivity." - added
Input schema / properties / pageId / descriptionAdded value: +"Optionally scope validation to a single page within the session." - added
Input schema / properties / revision / descriptionAdded value: +"Specific revision to validate (defaults to latest)."
- Added
validate_markup
2 tool updates
v1.6.2- Changed
apply_design_patch4 fields changed- removed
Input schema / properties / operations / items / additionalPropertiesRemoved value: -{} - added
Input schema / properties / operations / items / oneOfAdded 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" + } +] - removed
Input schema / properties / operations / items / propertyNamesRemoved value: -{ - "type": "string" -} - removed
Input schema / properties / operations / items / typeRemoved value: -"object"
- Changed
get_macro_block2 fields changed- added
Input schema / properties / idAdded value: +{ + "maxLength": 80, + "minLength": 1, + "type": "string" +} - removed
Input schema / requiredRemoved value: -[ - "idOrRef", - "section" -]
9 tool updates
v1.4.0- Added
apply_design_patch - Added
begin_design - Added
get_design_context - Added
get_fsm_recipe - Added
get_macro_block - Added
get_rhythm_rules - Added
search_macro_blocks - Changed
validate_composition4 fields changed- changed
Input schema / properties / code / maxLengthPrevious value: -65536New value: +262144 - added
Input schema / properties / densityProfileAdded value: +{ + "enum": [ + "comfortable", + "compact" + ], + "type": "string" +} - changed
Input schema / properties / html / maxLengthPrevious value: -65536New value: +262144 - added
Input schema / properties / semanticProfileAdded value: +{ + "maxLength": 64, + "type": "string" +}
- Added
validate_design
2 tool updates
v1.0.3- Changed
search_components1 field changed- removed
Input schema / requiredRemoved value: -[ - "intent", - "query" -]
- Changed
validate_composition2 fields changed- added
Input schema / properties / htmlAdded value: +{ + "maxLength": 65536, + "type": "string" +} - removed
Input schema / requiredRemoved value: -[ - "code" -]
3 tool updates
v1.0.1- First observed
get_component_details - First observed
search_components - First observed
validate_composition
TDQS
Scored across 33 tools
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.
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.
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.
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
Related MCP Connectors
Live React design-system APIs, patterns, and code validation so AI agents build real UI, not slop.
Access and maintain design system docs, tokens, components, skills, and contexts across any project.
AI-native Git-based CMS for Astro. Create and publish content in the browser, without learning git.
Provides style context & tokens to design or restyle web UIs in any framework
Related MCP Servers
- AlicenseAqualityBmaintenanceProvides 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.7501 npm14MIT
- AlicenseAqualityBmaintenanceLocal-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.1671 npm20MIT
- AlicenseNot gradedqualityCmaintenanceFederates 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 npm1MIT
- AlicenseNot gradedqualityCmaintenanceEnables 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 npmMIT