Better Design
NPM · BETTER-DESIGN · 2 COMPONENTS · SCANNED SEP 30
A design harness for AI coding agents: design systems, design principles, icons and UI review.
Available components
How this component scores in each security and reliability category. Every signal is checked automatically from public evidence about the published package, including repeated runs of it in an isolated sandbox, and we only credit what we can confirm. How we score → Why this is hard to score →
Supply Chain Security98
- No malware found by supply-chain analysis.Pass
- No known CVEs affecting this package version or its production dependencies.Pass
- No install/post-install scripts declared.Pass
- 31 of 98 dependencies flagged as unhealthy. View diagnostics → Partial
Provenance & Transparency45
- Source repository is publicly reachable at the declared URL. View diagnostics → Pass
- Provenance check failed: no build-provenance attestation is published. See how to fix → View diagnostics → Fail
- Clear OSI-approved license (MIT).Pass
- Actively maintained (last published 0 days ago).Pass
- Disclosure check failed: no security disclosure policy was found in the source repository. See how to fix → Fail
Schema Quality & AI Usability37
- 0% of prompts and resources have a non-trivial description (not blank, and not just the item's name).Fail
- AI-judged instruction clarity (excellent).Pass
- Context-footprint check failed: tool/resource definitions use about 17849 tokens (~469/item across 38 items; 36 tools + 2 resources), over budget; trim descriptions and params. See how to fix → Fail
- Usage-examples check failed: none of the tools include examples. See how to fix → Fail
Stability & Change Management0
- Stability not yet verified: not enough scan history yet (needs a 30-day window).Unverified
Tool Coverage99
- 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
- 98% of tool parameters carry a description.Partial
- Structured output schemas are declared (17% of tools); any adoption earns full credit.Pass
Tool Safety75
- No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.Pass
- 0 of 1 tool(s) whose name or description implies an irreversible operation declare an MCP destructiveHint annotation; "get-inspiration" implies "send" and declares readOnlyHint instead, contradicting what its own name says it does. See how to fix → Fail
- An AI judge read all 38 captured unit(s) of tool text and found none that tries to manipulate the model reading it.Pass
Capabilities100
- Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.Pass
- Supports UI / widget rendering.Pass
Unverified: 1 category
A category scored 0 because we could not verify it: a data source with nothing on this package, evidence we could not reach, or a check we could not run. We only credit what we can confirm.
How do I install the Better Design MCP server?
Better Design runs locally as an npm package, launched with npx -y better-design. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.
npm · better-design
claude mcp add marvkr-better-design -- npx -y better-design
{
"mcpServers": {
"marvkr-better-design": {
"command": "npx",
"args": [
"-y",
"better-design"
]
}
}
} {
"servers": {
"marvkr-better-design": {
"command": "npx",
"args": [
"-y",
"better-design"
]
}
}
} codex mcp add marvkr-better-design -- npx -y better-design
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"marvkr-better-design": {
"type": "local",
"command": [
"npx",
"-y",
"better-design"
],
"enabled": true
}
}
} openclaw mcp add marvkr-better-design --command npx --arg -y --arg better-design
mcp_servers:
marvkr-better-design:
command: "npx"
args: ["-y", "better-design"] {
"McpServers": {
"marvkr-better-design": {
"Transport": "stdio",
"Command": "npx",
"Arguments": [
"-y",
"better-design"
]
}
}
} assistant mcp add marvkr-better-design -t stdio -c npx -a -y better-design
{
"mcpServers": {
"marvkr-better-design": {
"command": "npx",
"args": [
"-y",
"better-design"
]
}
}
} Every change we have recorded for this component, newest first. Security-relevant changes are always shown. ▲ marks a change for the better, ▼ a change for the worse; unmarked changes are neutral.
- 30 Sept 26 +15
- Malware scan: unverified → pass ▲ security
- 29 Sept 26 46
First indexed and scored.
Diagnostic detail from the automated scan of this channel: what the scanner observed at each step, so you can see exactly where a check passed or failed. It is informational only and never changes the trust score.
Captured 30 Sept 2026 · Analysed npm/better-design@0.33.0
Provenance No attestation
The registry publishes no build provenance for this version, so there is nothing to verify.
| Result | No attestation |
|---|---|
| Ecosystem | npm |
Background: How many MCP packages publish verified provenance →
Dependencies 98 packages
| Packages resolved | 98 |
|---|---|
| Stale | 31 |
| Tree resolution | Complete |
Background: SBOMs and build attestations, explained →
The tools this component advertises to a client, with an estimated token cost for each. Expand a tool to see its parameters and schema. The per-tool counts are indicative and are not scored directly; the schema's total context footprint is one signal in Schema Quality & AI Usability. A tool's description is untrusted text the model reads on every call, which is what makes this list a security surface and not just an inventory: how tool poisoning works →
build-feature-map Build a Feature Map ~333
Draft a map of the product's features and flows from the repository's file list. Use the map whenever a request names a user flow or a product area ("the cancel account flow", "checkout", "onboarding"). Read .better-design/feature-map.json and pass it to read-feature-map before you plan the change, so you edit every screen, component and route the flow touches and nothing else. If the file does not exist, call build-feature-map first. Run `git ls-files` in the repository and pass every path as `files`. Routes become screens (Next.js app and pages routers, Remix and React Router flat routes, SvelteKit, Nuxt), each chain of nested routes becomes a flow (/settings/billing/cancel is Settings → Billing → Cancel), and components, API routes, hooks and server actions join the step whose name they share. The result is a first draft. Write it to .better-design/feature-map.json, show the user the flows, and ask which steps are missing: a dialog, an email or a background job has no route, so add those with update-feature-map (op "set-flow").
| Name | Type | Req | Description |
|---|---|---|---|
| context | string | – | Optional. One sentence on WHY you are calling this and what the user asked for (e.g. 'adding nav icons for the fintech dashboard'). Used only for usage analytics; does not change the result. |
| files | array | yes | Every file path in the repository, relative to its root, as printed by `git ls-files`. |
| product | string | – | The product's name, stored at the top of the map. |
No output schema declared.
No examples provided.
check-comprehension Check Comprehension ~477
Run the comprehension check on an interface you just built. Call this after get-review-rules, before you present the screen to the user. Review rules catch what is broken. This catches what is unclear: copy that makes sense to the people who built the product and to nobody else. Three tests, run on the screen's own words: 1. Mom test. Would a person outside the team understand this? Flags insider vocabulary, unexplained acronyms and sentences too long to follow. 2. 15 second test. If the screen takes longer than 15 seconds to explain, it is too complex. Flags word count, stacked concepts and competing actions. 3. Screenshot test. With zero context, can someone say what the screen does? Flags a missing title, actions that hide the outcome ("Continue", "Got it") and icon-only controls. Pass either the copy or the markup: - check-comprehension({ screen: "Lesson end card", headline: "Lesson complete", body: ["Claim the June badge by collecting more quest points from your daily, friend and weekend quests."], actions: ["Continue"] }) - check-comprehension({ screen: "Billing page", code: "<section>…the JSX you wrote…</section>" }) Use knownTerms for words your audience genuinely knows, so the check stops flagging them. Fix every critical and serious finding, then call this again on the rewritten copy.
| Name | Type | Req | Description |
|---|---|---|---|
| actions | array | – | Visible button and link labels, e.g. ['Claim badge', 'Not now']. |
| body | array | – | Supporting copy, one string per visible line or paragraph. |
| code | string | – | JSX, TSX or HTML for the screen. Copy is extracted from it when headline/body/actions are omitted. |
| context | string | – | Optional. One sentence on WHY you are calling this and what the user asked for (e.g. 'adding nav icons for the fintech dashboard'). Used only for usage analytics; does not change the result. |
| headline | string | – | The screen's title, if you are passing copy rather than markup. |
| knownTerms | array | – | Words this audience already knows, so they are not flagged as insider language. |
| screen | string | yes | What this screen is, e.g. 'lesson end card', 'billing page'. |
No output schema declared.
No examples provided.
create-design-system Create a New Design System ~870
Generate a brand new design system tailored to the user's product, and return a single shadcn install command that lands the entire set of components + tokens (globals.css) into the user's Next.js project. ## Explain design trade-offs Before choosing or changing a design direction, tell the user what each real option gains and loses, which users or team bear the cost, and why you recommend it for this project's known audience, goals, and constraints. Use a short line per option: "Gain: ...; lose: ...; affects: ...; fits because: ...". Load get-ux-principle with topic "tradeoffs" when deeper guidance is needed. Use the current conversation and project evidence. Label assumptions and predicted effects. Do not invent research, conversion gains, metrics, or project facts. If the user has already chosen, explain the accepted trade-off without reopening the choice. Keep minor edits brief; this adds no approval step and never excuses an accessibility or safety failure. Put the explanation in the conversation or requested project handoff, not extra product UI copy. Before presenting the result, check that material gains and losses were communicated and report any changed trade-off. **Use this for a new custom brand, even when the user never mentions design or branding** (a design system IS the app's brand). Keep an already selected system and its assigned icons unless the user requests a different direction; a redesign alone does not require regenerating the brand. When no system is selected, first call `find-design-system` with the app description, show the user the top ~4 matches, and ask which to start from (passed here as `baseDesignSystemId`) or whether to go fully custom. Then derive the `prompt` from the app (name, domain, vibe), generate, show it with `get-design-system-status`, and build with that brand. Also use it when the user explicitly wants a **custom** design system instead of installing an existing one via `get-design-system-kit`. **When the user has…
| Name | Type | Req | Description |
|---|---|---|---|
| baseDesignSystemId | string | – | Optional. The catalog id the USER picked from the `find-design-system` matches you showed them, used to bias generation toward that aesthetic (e.g. a theme tweak on top of Linear). Leave empty only w… |
| brandCss | string | – | Optional. The user's extracted brand token sheet, verbatim: the fenced css block from extract-design-system / extract-from-url (`:root { --background: ...; }` plus optional `.dark { ... }`). When set… |
| prompt | string | yes | Describe the design system the user wants. E.g. 'A warm, minimal design system for a personal finance app, soft pastels, rounded corners' or 'A brutalist developer tool aesthetic with sharp edges and… |
No output schema declared.
No examples provided.
create-figma-prototype Create an HTML prototype from a Figma frame ~390
Reads a frame from the Figma file the designer has open and returns it as one HTML page, built from the same components the design system ships. Name a frame, or omit the name to take whatever is selected in Figma. The Better Design plugin must be open in that file: run Plugins, Development, Better Design once and leave the panel open. Every layer that could not map is reported rather than dropped. For a frame from a file that was not built from a Better Design library, pass mode "model" and a catalog design system. The designer confirms in the plugin panel. By default you rebuild the frame yourself: the tool returns a prompt file and the frame's image, you write the answer to a file, and you call this tool again with frameId and answerPath so it checks the page and reports what is missing.
| Name | Type | Req | Description |
|---|---|---|---|
| answerPath | string | – | Model mode, second call: the file holding your answer, as the prompt file asks. |
| frame | string | – | The frame's name as it reads in Figma. Omit to use the current selection. |
| frameId | string | – | Model mode, second call: the frameId the first call returned. |
| mode | string | – | library (the default) maps components from a Better Design library. model asks a model to rebuild a frame from any file. |
| model | string | – | Model mode with openai-compatible: the local model id. Defaults to gemma4:latest. |
| outputPath | string | – | Where to write the HTML. Relative paths resolve against the working directory. |
| provider | string | – | Model mode: agent (the default) hands the frame to you to rebuild; openai-compatible calls a local server, Ollama by default. |
| system | string | – | Model mode: the catalog design system to build with, as find-design-system names it. |
| Name | Type | Req | Description |
|---|---|---|---|
| components | number | – | – |
| frameId | string | – | – |
| imagePath | string | – | – |
| message | string | yes | – |
| model | string | – | – |
| path | string | – | – |
| promptPath | string | – | – |
| report | array | – | – |
| status | string | yes | – |
No examples provided.
detect-icon-library Detect Existing Icon Library ~230
Check if the user's project already has an icon library installed via Better Design. Reads <targetDir>/.library.json (default targetDir: "components/icons") if it exists and returns the locked library + installed icon list. Call this BEFORE find-icon-library / install-icons. If a library is already locked, use it for any new icon work. Do NOT switch libraries mid-project. Returns either: - The locked library info + installed icon list, with a hint to call install-icons using that libraryId, OR - A "no library detected" response, prompting the agent to call find-icon-library normally.
| Name | Type | Req | Description |
|---|---|---|---|
| context | string | – | Optional. One sentence on WHY you are calling this and what the user asked for (e.g. 'adding nav icons for the fintech dashboard'). Used only for usage analytics; does not change the result. |
| manifestContent | string | – | Contents of the project's components/icons/.library.json file, if it exists. The agent should attempt to read this file from disk and pass it here. If the file doesn't exist or can't be read, omit th… |
No output schema declared.
No examples provided.
extract-design-system Extract Design System From Existing Code ~711
Distill the design tokens out of a project's EXISTING CSS so new components match the app the user already built. Use this when the user says "match our existing style", "use our design system", "style this like the rest of the app", or you are adding UI to a codebase that already has its own look. This is the inverse of find-design-system / create-design-system: instead of giving the user one of our systems, it reads theirs. How to use it: read the project's `globals.css` (or wherever the design tokens / CSS custom properties live, e.g. a Tailwind v4 `@theme` block) and pass its full contents as `css`. The MCP server cannot read your filesystem, so you must paste the text. Returns: the semantic palette (primary, background, foreground, accent, border, ring, etc.), radius, fonts, and shadow scale, plus a pasteable token sheet with every color normalized to `oklch()`. Handles hex, rgb()/rgba(), hsl()/hsla(), named colors, bare Shopify "r,g,b" triplets, and existing oklch values, across `:root`, `.dark`, and `@theme` blocks. Beyond pasted CSS, `sources` accepts any mix of inputs and merges them (later sources win): - kind "css": any stylesheet text, same as the `css` param. - kind "computed": a JSON sample of rendered styles read off the LIVE site, which beats variable-name guessing because it records what elements actually look like. Gather it by running this in the site's browser console and passing the printed JSON: ```js JSON.stringify((() => { const pick = (el, props) => { if (!el) return null; const cs = getComputedStyle(el); return Object.fromEntries(props.map((p) => [p, cs[p]])); }; return { body: pick(document.querySelector("body"), ["backgroundColor","color","fontFamily"]), heading: pick(document.querySelector("h1,h2"), ["fontFamily"]), link: pick(document.querySelector("a[href]"), ["color"]), button: pick(document.querySelector("button,[role=button],.btn,input[type=submit]"), ["backgroundColor","color","borderRadius"])…
| Name | Type | Req | Description |
|---|---|---|---|
| css | string | – | Full contents of the project's globals.css (or any CSS holding the design tokens / CSS custom properties). Optional when `sources` is given. |
| maxTokens | number | – | Maximum tokens to return. Truncates the token sheet to fit. |
| name | string | – | Optional label for the extracted system, e.g. the app or repo name. |
| sources | array | – | Any mix of brand sources, merged in order (later sources win). See the tool description for how to gather each kind. |
No output schema declared.
No examples provided.
extract-from-url Extract Design System From a Live Site ~229
Point Better Design at a URL and get the site's brand back as an oklch token sheet, without pasting anything. Use this when the user names their site ("match uclips.eu", "use our website's style") or hands you any public URL whose look should be reused. Server side, Better Design fetches the page's stylesheets AND renders the page in a headless browser to sample what role elements actually look like (body, heading, link, button, input, card), then merges both, rendered truth last. That reads the brand even when the site's variable names are unrecognizable. Slow by nature (a real browser loads the page): expect 10 to 45 seconds. For CSS the user already has locally, prefer extract-design-system, which is instant.
| Name | Type | Req | Description |
|---|---|---|---|
| maxTokens | number | – | Maximum tokens to return. Truncates the token sheet to fit. |
| name | string | – | Optional label for the extracted system. Defaults to the site's hostname. |
| url | string | yes | Public http(s) URL of the page to read, usually the homepage. |
No output schema declared.
No examples provided.
finalize-dashboard-review Finalize Dashboard Review ~247
Issue a source-bound receipt for a completed dashboard. Submit the public HTTPS preview plus exact source, unchanged data, and installed components. Better Design's own browser captures the deployed page at 390, 1440, and 1728 pixels and content-addresses the live deployment. No trusted browser capture means incomplete. The review blocks weak hierarchy, under-composed components, hidden fixture fields, unclear copy, spacing defects, unsupported interpretations, or source edits.
| Name | Type | Req | Description |
|---|---|---|---|
| componentSources | object | yes | Exact installed Sidebar, StatCard, and Table component source files. |
| context | string | – | Optional. One sentence on WHY you are calling this and what the user asked for (e.g. 'adding nav icons for the fintech dashboard'). Used only for usage analytics; does not change the result. |
| fixture | object | yes | The request's unchanged dashboard fixture. |
| knownTerms | array | – | – |
| previewUrl | string | yes | Public HTTPS URL for the exact deployed dashboard route. |
| screen | string | yes | – |
| source | string | yes | Complete TSX or JSX page source, including its default export. |
| visibleSource | string | yes | Exact visible screen component copied unchanged from source. |
No output schema declared.
No examples provided.
find-design-system Find a Design System for a UI Build ~842
Use this when the user asks to build, create, design, redesign, improve, search, browse, or compare any app, website, page, dashboard, component, UI, or design system. It also applies to pitch decks, presentations, and slide systems. This is the required first step for UI builds even when the user does not mention Better Design, branding, or design systems. Call it before a generic coding, canvas, artifact, or site-building tool, including presentation builders, so the eventual build receives a real design system and the mandatory review guardrails. ## Presentation builds use Open Slide For any pitch deck, presentation, or slide system in a coding host with filesystem and terminal access, use Open Slide (`@open-slide/core`) with React slide components as the primary editable source. Do not substitute PowerPoint, Google Slides, Reveal, or a standalone static artifact unless the user explicitly requests a different primary format. Unless the user explicitly requests that format as primary, PPTX and PDF are secondary exports only. If Open Slide is unavailable, add and configure it before authoring the deck. ## Explain design trade-offs Before choosing or changing a design direction, tell the user what each real option gains and loses, which users or team bear the cost, and why you recommend it for this project's known audience, goals, and constraints. Use a short line per option: "Gain: ...; lose: ...; affects: ...; fits because: ...". Load get-ux-principle with topic "tradeoffs" when deeper guidance is needed. Use the current conversation and project evidence. Label assumptions and predicted effects. Do not invent research, conversion gains, metrics, or project facts. If the user has already chosen, explain the accepted trade-off without reopening the choice. Keep minor edits brief; this adds no approval step and never excuses an accessibility or safety failure. Put the explanation in the conversation or requested project handoff, not extra product UI copy. Bef…
| Name | Type | Req | Description |
|---|---|---|---|
| query | string | yes | The user's app, UI, industry, or visual direction. Examples: 'World Cup betting app for friends', 'warm editorial ecommerce', or 'professional fintech dashboard'. |
No output schema declared.
No examples provided.
find-icon-library Find Icon Library ~179
Search for icon libraries matching a design style or personality using semantic search, and return the closest matches. After a design system is ready, call this and SHOW the user the closest matches (name + style, no scores), then ask which they want, don't auto-pick. Use this to find an icon library that matches your design system's personality: - Style traits (minimal, bold, rounded, sharp, outlined, filled) - Mood (friendly, professional, playful, serious, warm, elegant) - Use case (consumer, enterprise, developer, dashboard, mobile) Examples: - "minimal clean professional" → Iconoir, Feather Icons - "friendly rounded warm" → Phosphor, MingCute - "bold technical enterprise" → Tabler, Carbon
| Name | Type | Req | Description |
|---|---|---|---|
| query | string | yes | Style description or personality traits to match. |
No output schema declared.
No examples provided.
find-icons Find Icons ~257
Search for specific icons within an icon library. Use this after find-icon-library to find specific icons by name/concept. **Query with a single canonical noun** ("inbox", "calendar", "paperclip"), not a multi-word phrase. The underlying index keyword-matches, so "home" beats "home house dwelling". Multi-word queries still work (they fall back to a per-keyword union) but a single noun gives the best ranking. Search once per concept; you don't need to retry with synonyms. Examples: - find-icons({ query: "home", libraryId: "phosphor" }) - find-icons({ query: "settings", libraryId: "tabler" }) Every name returned exists in the library, so pass them to `install-icons` verbatim. A `variant` only re-orders the results, putting the names that carry that variant first; it never rewrites a name.
| Name | Type | Req | Description |
|---|---|---|---|
| libraryId | string | yes | The icon library ID from find-icon-library |
| query | string | yes | What icon you need (e.g., 'home', 'settings', 'user') |
| variant | string | – | Optional variant style (e.g., 'bold', 'outline', 'duotone'). |
No output schema declared.
No examples provided.
get-design-config Get a Project's Tuned Design Config ~133
Read the user-tuned design config (exact color tokens, radius, fonts, icon library) of a generated project. Call this BEFORE building or restyling UI for the project, and again after the user tunes values on the project page, so you apply their exact numbers instead of guessing from adjectives.
| Name | Type | Req | Description |
|---|---|---|---|
| context | string | – | Optional. One sentence on WHY you are calling this and what the user asked for (e.g. 'adding nav icons for the fintech dashboard'). Used only for usage analytics; does not change the result. |
| projectId | string | yes | The project id returned by create-design-system. |
No output schema declared.
No examples provided.
get-design-system-kit Get a Design System Build Kit ~3,172
Return the correct build kit for a design system through one capability-based entry point. Use `target: "react"` whenever the host can write files and run a terminal. It returns the shadcn install command and real React components. Use `target: "html"` only for pure inline canvases or artifacts where npm and a build step are unavailable; it returns the framework-free token and component CSS kit. Use `target: "react-native"` for a React Native or Expo app and `target: "swiftui"` for an iOS app, never the react target: each returns this system's stored mobile kit, its own material on native primitives, plus the handoff to the matching guide. Use `target: "shopify"` when the user is styling a Shopify store or theme; it returns ready-to-write Liquid theme files (a CSS asset with this system's real tokens, snippets, and theme editor sections) plus the mandatory handoff to Better Design's `get-shopify-guide` MCP tool for documentation and validation. For `target: "html"`, the returned class contract is mandatory, including inside a host-provided visualization workflow: paste the kit CSS verbatim, keep `class="ds"` on the artifact root, and keep `ds-*` component classes on interactive controls. App-specific classes may sit alongside them for layout only; never rename or replace the `ds-*` classes. Before presenting, inspect the artifact source and revise it if either `class="ds"` or `ds-` is absent. Put hover-only CSS inside `@media (hover: hover) and (pointer: fine)` and never let hover move a control or override its selected/pressed styling. Inline canvases also inject their own semantic-element colors. Replace `APP_ROOT` in `hostIsolationCssTemplate` with the artifact's real root selector and paste it after host/base CSS. Inspect rendered text against its computed background and fix anything below 4.5:1 contrast before presenting. Do not stretch cards to fill the canvas or turn every group into a card or pill. Reuse the selected design system ID or generated `proje…
| Name | Type | Req | Description |
|---|---|---|---|
| component | – | – | React target only. Pass only when the user asks to inspect specific component source code. Omit to scaffold the entire design system. |
| context | string | – | Optional. One sentence on WHY you are calling this and what the user asked for (e.g. 'adding nav icons for the fintech dashboard'). Used only for usage analytics; does not change the result. |
| designSystemId | string | – | Catalog design system ID from find-design-system. Required for target react; for every other target pass this or projectId. |
| library | string | – | React target only, default "base-ui". Pass "radix" when the project already uses Radix primitives. |
| projectId | string | – | Generated project ID from create-design-system / get-design-system-status. Supported with every target but react. |
| target | string | yes | Required build target. Use "react" for any host with filesystem + terminal; use "html" only for inline chat canvases/artifacts. Use "shopify" for Shopify stores and themes. Use "dtcg" to hand the tok… |
| Name | Type | Req | Description |
|---|---|---|---|
| buildInstructions | string | – | Required design-choice guidance and any target-specific build/review steps for clients that read only structuredContent. |
| componentCss | string | – | HTML target only. Paste this token-driven ds-* component stylesheet verbatim. |
| componentExampleHtml | string | – | HTML target only. Starter markup that demonstrates the required .ds wrapper and ds-* component classes. |
| componentMaterialCss | string | – | HTML target only. Paste this design-system-specific material override after componentCss. |
| compositionPolicy | string | – | HTML target only. Mandatory layout-density and container-restraint policy. |
| customCssScope | string | – | HTML and Shopify targets. Custom classes may arrange layout but must not replace kit component styling. |
| hierarchyPolicy | string | – | HTML target only. Mandatory first-view hierarchy, progressive-disclosure, and information-budget contract. |
| hostIsolationCssTemplate | string | – | HTML target only. Replace APP_ROOT with the artifact root selector and paste after host/base CSS so semantic text cannot inherit the host's light/dark colors. |
| hoverPolicy | string | – | HTML and Shopify targets. Mandatory pointer-safe hover contract to verify before presenting. |
| iconInstructions | string | – | Instructions for exact selected-icon lookup, or an explicit missing-selection warning. |
| iconLibrary | object | – | The design system's existing icon family and variant. Reuse it; do not select another pack. |
| iconMaterialStatus | string | – | Shopify stored glyph metadata is current, or legacy and unverified. This is not rendered review evidence. |
| iconSelectionStatus | string | – | Selected means identity is known, not that rendered icon use was reviewed. |
| installCommand | string | – | shadcn install command, when complete. |
| installLibrary | string | – | Actual component library flavor installed by installCommand. |
| installNote | string | – | Important install flavor or fallback note for clients that read only structuredContent. |
| minimumTextContrast | string | – | HTML and Shopify targets. Minimum contrast for normal visible text against its computed background. |
| name | string | yes | Display name of the design system or project. |
| nativeFiles | array | – | React Native and SwiftUI targets only. Write each file verbatim at its path: this system's stored theme and material, and the primitives that read it. |
| previewUrl | string | – | Public, cookieless showcase URL used to generate preview assets. Falls back to viewUrl. |
| requiredComponentClassPrefix | string | – | HTML and Shopify targets. Interactive components must retain classes with this prefix; never rename it. |
| requiredWrapperClass | string | – | HTML and Shopify targets. The artifact or snippet root must retain this class exactly. |
| screenshotFiles | array | – | Store screenshots target only. Write each file verbatim at its path, then follow buildInstructions to capture screens, write the slides and render the PNG files. |
| shotUrl | string | – | Real screenshot of the showcase page for the self-contained preview widget. |
| status | string | yes | completed | error | pending | generating | selected |
| step | string | – | Current generation step, while generating. |
| supportedInstallationScope | string | – | Shopify full kit is not page-scoped. Withhold installation for a page-only task until isolated files and styles exist. |
| textColorPolicy | string | – | HTML and Shopify targets. Mandatory semantic foreground-token contract; surface tokens and opacity must not be used to mute text. |
| themeFiles | array | – | Shopify target only. Theme files to write verbatim at each path: the per-system CSS asset, the Liquid snippets, and the theme editor sections. |
| tokensCss | string | yes | CSS custom-property stylesheet for the system's tokens. |
| tokensJson | string | – | DTCG target only. The design tokens as a W3C Design Tokens (DTCG) document. Write it to tokens.json; every token tool reads this format, including Style Dictionary, Tokens Studio, Terrazzo, and the F… |
| unsupportedTokens | array | – | React Native and SwiftUI targets only. Tokens that need a browser to resolve, a calc(), a var(), or a relative oklch(), so they carry no native value. Set them by hand if the screen needs them. A tok… |
| viewUrl | string | – | Owner-facing Better Design page (the human 'Open' link). May require login. |
No examples provided.
get-design-system-status Get Design System Generation Status ~151
Check on a design system generation started with 'create-design-system'. Returns progress while generating, and the live preview URL + the `npx shadcn add` install command once complete. Generation typically takes 1-3 minutes; poll every ~30 seconds until it reports ready. Once ready, ask the user what's next (icon library, install, or build) instead of stopping.
| Name | Type | Req | Description |
|---|---|---|---|
| context | string | – | Optional. One sentence on WHY you are calling this and what the user asked for (e.g. 'adding nav icons for the fintech dashboard'). Used only for usage analytics; does not change the result. |
| projectId | string | yes | The project id returned by create-design-system. |
| Name | Type | Req | Description |
|---|---|---|---|
| buildInstructions | string | – | Required design-choice guidance and any target-specific build/review steps for clients that read only structuredContent. |
| installCommand | string | – | shadcn install command, when complete. |
| installLibrary | string | – | Actual component library flavor installed by installCommand. |
| installNote | string | – | Important install flavor or fallback note for clients that read only structuredContent. |
| name | string | yes | Display name of the design system or project. |
| previewUrl | string | – | Public, cookieless showcase URL used to generate preview assets. Falls back to viewUrl. |
| shotUrl | string | – | Real screenshot of the showcase page for the self-contained preview widget. |
| status | string | yes | completed | error | pending | generating | selected |
| step | string | – | Current generation step, while generating. |
| tokensCss | string | yes | CSS custom-property stylesheet for the system's tokens. |
| viewUrl | string | – | Owner-facing Better Design page (the human 'Open' link). May require login. |
No examples provided.
get-inspiration Get Inspiration ~251
Send real reference designs from Better Design's library as images, so you can study how shipped products solved the same design problem before you design the user's own. Use it before designing App Store or Google Play screenshots: pass `type: "app-store-screenshots"`, and a `category` such as "Health & Fitness" when the user's app has one. Each set arrives as its title and category, followed by its first screenshots. Then propose two or three directions drawn from what the sets do (headline style, slide order, device framing, color), and let the user choose before you build anything.
| Name | Type | Req | Description |
|---|---|---|---|
| category | string | – | Optional App Store category, for example "Productivity" or "Health & Fitness". Ignores case. |
| context | string | – | Optional. One sentence on WHY you are calling this and what the user asked for (e.g. 'adding nav icons for the fintech dashboard'). Used only for usage analytics; does not change the result. |
| limit | integer | – | How many sets to send, 1 to 6. Defaults to 3. |
| type | string | yes | The kind of reference to send. Today: "app-store-screenshots". |
No output schema declared.
No examples provided.
get-jig-guide Get a Jig for Parameter Work ~368
Return the setup for a "jig", the tool you build to make the real thing precisely. Two kinds, both here. Use kind "tune-in-place" (default) when you are about to hard-code taste-based values in UI you are building: animation duration/easing/springs/stagger, particles, canvas physics, blur/glow/grain, gradient stops, shadow recipes, parallax speeds. It returns a control panel to wire to those parameters so the USER tunes by eye and you hard-code what they copy back. Use kind "standalone-tool" when the user wants a reusable custom tool instead: a generator, an image effect, a shader playground, an asset maker. That returns the Toolcraft starter kit (MIT), which ships a canvas and an export flow, with optional layers and a timeline. Tuning setups: React recommends DialKit (MIT, no re-render lag) with a dependency-free fallback; "vanilla" and "react-native" get dependency-free scaffolds.
| Name | Type | Req | Description |
|---|---|---|---|
| context | string | – | Optional. One sentence on WHY you are calling this and what the user asked for (e.g. 'adding nav icons for the fintech dashboard'). Used only for usage analytics; does not change the result. |
| framework | string | – | Which tune-in-place setup to return. 'react' (default) for React/Next web projects; 'vanilla' for plain DOM or canvas work; 'react-native' for RN/Expo apps. Ignored when kind is 'standalone-tool'. |
| kind | string | – | What the user needs. 'tune-in-place' (default): a control panel for parameters in the UI you are building. 'standalone-tool': a separate reusable design tool, scaffolded with Toolcraft. |
No output schema declared.
No examples provided.
get-motion-guide Get Motion Guide ~795
Load Better Design's video design-system guidance for building a product demo or promo video in code. Use this before writing a Remotion composition, and while debugging one. It covers the product-demo brief, brand and motion tokens, responsive format profiles, product interactions, captions and accessibility, story and rhythm, layout traps, rendering, and visual review. Start with scaffold: true. It returns a complete brand-aware Remotion project with landscape and vertical compositions, typed Studio props, a shared timeline, product-interaction scene, sourced proof, captions and an optional generated music bed. Then pick the product shots from the video components: AI answer streams, prompt and search typing, terminal sessions, phone and laptop frames, title reveals, captions, logo stings and social proof. get-motion-guide({}) lists them by group; get-motion-guide({ component: "phone-frame" }) returns that component's source, prop defaults, natural length and install command. They are vendored from snapcn (MIT) and served from the Better Design registry, so the shadcn CLI installs them with their dependencies. Install and follow the twelve official Remotion skills from https://www.remotion.dev/docs/ai/skills for current APIs. Better Design owns brand, hierarchy, story, pacing and review. RemotionUI, remocn and Remotion Bits are optional, source-labelled pattern libraries; ask before installing community code and adapt it to the active video tokens. This tool does not render. Rendering needs Remotion and a large headless-browser download in the user's own project. Write the files into their repo and let them run it. This complements the design tools: use get-ui-principle for visual decisions and get-ux-principle for product behavior. For in-app animation whose timing the user should tune by eye (durations, springs, stagger), call get-jig-guide and mount its tuning panel instead of guessing values. You can either: 1. Get the starter project: get-motion-guide…
| Name | Type | Req | Description |
|---|---|---|---|
| component | string | – | A video component name, e.g. answer-stream, prompt-zoom, terminal-simulator, phone-frame, laptop-frame, text-reveal, word-captions, logo-assemble, follower-rush. Returns its source files, prop defaul… |
| context | string | – | Optional. One sentence on WHY you are calling this and what the user asked for (e.g. 'adding nav icons for the fintech dashboard'). Used only for usage analytics; does not change the result. |
| maxTokens | number | – | Maximum tokens to return for guidance and the index. Truncates content to fit. Recommended: 5000-10000. Ignored by scaffold and component, which always return whole files. |
| query | string | – | Natural language description of the video or animation task or problem. |
| scaffold | boolean | – | Return a complete brand-aware Remotion product-demo project, as files to write. Start here when building a video. |
| topic | string | – | Specific motion topic or alias, e.g. video-design-system, product-demo-brief, formats-and-safe-areas, product-interactions, captions-and-accessibility, remotion-resources, video-components, verifying… |
No output schema declared.
No examples provided.
get-react-native-guide Get React Native Guide ~558
Load implementation guidance for React Native and Expo projects. Use this while planning, building, debugging, testing, or releasing a React Native app. It covers project setup, components and styling, Expo Router, data and authentication, native UI, animations and gestures, notifications, development builds, EAS workflows, testing, native modules, monetization, and store submission. It also includes copyable TypeScript and TSX recipes for secure sessions, validated API routes, purchases and usage credits, media sharing, realtime audio, durable generation, platform adapters, typed data clients, animation, chat interfaces, and social feeds. Preserve the examples when adapting them so the surrounding invariants remain visible to the coding agent. The official Expo skills are included as a pinned, MIT-licensed source layer. They cover current Expo UI and Router APIs, project structure, networking, DOM components, web-to-native migration, native modules, brownfield apps, development clients, examples, App Clips, SDK upgrades, app-store delivery, EAS Hosting, Workflows, Observe, Update Insights, and remote simulators. Topics use the `official-` prefix, for example `official-expo-native-ui` and `official-eas-app-stores`. Paid EAS guides describe costs and plan limits; do not run a paid or state-changing command without the user's approval. This complements the design tools: use get-ui-principle for visual decisions and get-ux-principle for product behavior. You can either: 1. Request a known topic: get-react-native-guide({ topic: "auth-session-recipes" }) 2. Use an alias: get-react-native-guide({ topic: "official expo native ui" }) 3. Search for the current task or code example: get-react-native-guide({ query: "code example for a notification action while the app is terminated" }) 4. Get the full topic index: get-react-native-guide({}) Prefer query search when you do not know the topic name. Use maxTokens to keep responses focused (recommended: 5000–10000).
| Name | Type | Req | Description |
|---|---|---|---|
| context | string | – | Optional. One sentence on WHY you are calling this and what the user asked for (e.g. 'adding nav icons for the fintech dashboard'). Used only for usage analytics; does not change the result. |
| maxTokens | number | – | Maximum tokens to return. Truncates content to fit. Recommended: 5000-10000. |
| query | string | – | Natural language description of the React Native task or problem. |
| topic | string | – | Specific React Native topic or alias, e.g. auth-session-recipes, chat-component-recipes, development-builds, official-expo-native-ui, official-eas-app-stores. |
No output schema declared.
No examples provided.
get-review-rules Get Code Review Rules ~1,397
Retrieves accessibility (WCAG 2.1), visual design, animation, content, comprehension, and AI feature review rules for analyzing code. You MUST call this after writing UI code to self-review your output, then fix every critical and serious issue BEFORE presenting the result. ## Match the requested change Classify the request as repair, polish, or redesign: restore behavior, refine layout, or rebuild layout and components. Follow the user's scope, not analytics-only tool context. Do not downgrade redesign to polish, expand repair, or turn token export/source inspection into a redesign. Keep the selected design system and assigned icon family/variant unless the user requests a change. Use exact returned icon names/source, never substitute packs, emoji, or invented SVGs. Inventory sections, components, states and responsive layouts; map requested patterns to real system components and record missing primitives. Plan structural changes and component adoption before redesigning. Rebuild the requested hierarchy, layout and interactions; token swaps and unused imports do not count. Preserve unrelated behavior, accessibility and production/control boundaries. Preserve all supplied paragraphs, reviews, offer details, links and disclosures, including collapsed answers and inactive tabs, unless the user requests cuts or rewrites. Require a source-to-render content comparison; investigate every omission, not just section counts. A shortened fixture is not a completed page. Label partial prototypes and never treat their checks as full-page evidence. Compare before/after renders of the same content and states at the same desktop and mobile widths. Show which planned structural changes and component adoption are visible; verify the selected icons, spacing, hierarchy, and working interactions. Copy and accessibility fixes alone do not complete a redesign. Tool calls, generated files, or a source-only review are not visual evidence. If a baseline or rendered check is unavaila…
| Name | Type | Req | Description |
|---|---|---|---|
| category | string | – | Filter rules by category (defaults to 'all') |
| context | string | – | Optional. One sentence on WHY you are calling this and what the user asked for (e.g. 'adding nav icons for the fintech dashboard'). Used only for usage analytics; does not change the result. |
| maxTokens | number | – | Maximum tokens of rule content. Required workflow guidance is returned in full outside this budget. Recommended: 5000–10000. |
No output schema declared.
No examples provided.
get-sales-principle Get Sales Principle ~297
Load practical sales guidance before a live conversation or before writing a sales asset. Use this to handle objections, prepare a champion, map features to value, or decide when honesty means recommending a different approach. For objections, load the sales-principles topic and follow ACERS in order: Acknowledge, Clarify, Empathize, Reframe, Sell. You can either: 1. Request a specific topic or alias: get-sales-principle({ topic: "ACERS" }) 2. Search for the situation: get-sales-principle({ query: "help a champion answer an implementation objection" }) 3. Get the index of all sales principles: get-sales-principle({}) Use maxTokens to keep responses focused (recommended: 5000–10000).
| Name | Type | Req | Description |
|---|---|---|---|
| context | string | – | Optional. One sentence on WHY you are calling this and what the user asked for (e.g. 'adding nav icons for the fintech dashboard'). Used only for usage analytics; does not change the result. |
| maxTokens | number | – | Maximum tokens to return. Truncates content to fit. Recommended: 5000-10000. |
| query | string | – | Natural language description of the sales conversation, objection, or asset. |
| topic | string | – | Specific sales topic or alias, e.g. sales-principles, ACERS, objection handling, champion enablement, or feature value. |
No output schema declared.
No examples provided.
get-shopify-guide Get Shopify Theme Guide ~397
Load Better Design's Shopify Liquid and Online Store 2.0 implementation guidance directly from the MCP. No separate agent skill is required. Use this before creating or changing Liquid, JSON templates, sections, blocks, snippets, locale files, theme assets, product forms, cart behavior, or Shopify CLI workflows. The guides cover theme architecture, Liquid objects/tags/filters, merchant-editable schema, LiquidDoc, localization, accessibility, performance, validation with Shopify Theme Check, and building a sales page, advertorial, or product landing page on a store's own brand. They link to Shopify's primary documentation for version-sensitive API details. You can either: 1. Request a known topic: get-shopify-guide({ topic: "shopify-theme-architecture" }) 2. Use an alias: get-shopify-guide({ topic: "liquiddoc" }) 3. Search for the current task or error: get-shopify-guide({ query: "product form variant selector and money formatting" }) 4. Get the full topic index: get-shopify-guide({}) Prefer query search when you do not know the topic name. Run Shopify Theme Check after writing files. Use maxTokens to keep responses focused (recommended: 5000-10000).
| Name | Type | Req | Description |
|---|---|---|---|
| context | string | – | Optional. One sentence on WHY you are calling this and what the user asked for (e.g. 'adding nav icons for the fintech dashboard'). Used only for usage analytics; does not change the result. |
| maxTokens | number | – | Maximum tokens to return. Truncates content to fit. Recommended: 5000-10000. |
| query | string | – | Natural language description of the Shopify theme task, API, or validation error. |
| topic | string | – | Specific Shopify topic or alias, e.g. shopify-theme-architecture, shopify-liquid-language, shopify-sales-page, section-schema, localization, or theme-check. |
No output schema declared.
No examples provided.
get-swiftui-guide Get SwiftUI Guide ~344
Load implementation guidance for SwiftUI and native Apple platform work. Use this while planning, building, or debugging a SwiftUI interface. It covers native layout and view composition, animation and gestures, Metal shader effects, and the platform APIs those depend on, with copyable Swift examples. This complements the design tools: use get-ui-principle for visual decisions, get-ux-principle for product behavior, and get-react-native-guide when the target is React Native or Expo rather than native Swift. You can either: 1. Request a known topic: get-swiftui-guide({ topic: "swiftui-ripple-refraction" }) 2. Use an alias: get-swiftui-guide({ topic: "water ripple" }) 3. Search for the current task: get-swiftui-guide({ query: "bend an image where the user touches it" }) 4. Get the full topic index: get-swiftui-guide({}) Prefer query search when you do not know the topic name. Use maxTokens to keep responses focused (recommended: 5000-10000).
| Name | Type | Req | Description |
|---|---|---|---|
| context | string | – | Optional. One sentence on WHY you are calling this and what the user asked for (e.g. 'adding nav icons for the fintech dashboard'). Used only for usage analytics; does not change the result. |
| maxTokens | number | – | Maximum tokens to return. Truncates content to fit. Recommended: 5000-10000. |
| query | string | – | Natural language description of the SwiftUI task or problem. |
| topic | string | – | Specific SwiftUI topic or alias, e.g. swiftui-ripple-refraction. |
No output schema declared.
No examples provided.
get-team-rules Get Team Rules ~120
Read the rules this account's team wrote for how agents should build and review their product. Call it at the start of a task, then follow the rules in everything you build. get-review-rules already checks work against them. Returns the team's own Markdown document, or a note that the team has none yet.
| Name | Type | Req | Description |
|---|---|---|---|
| context | string | – | Optional. One sentence on WHY you are calling this and what the user asked for (e.g. 'adding nav icons for the fintech dashboard'). Used only for usage analytics; does not change the result. |
No output schema declared.
No examples provided.
get-three-js-guide Get Three.js Guide ~449
Load implementation guidance for Three.js and React Three Fiber projects. Use this while planning, building, debugging, or optimizing 3D web scenes. It covers Three.js fundamentals, geometries, materials, textures, lights and shadows, models and 3D text, particles, physics with Rapier, performance, postprocessing, React Three Fiber and its drei helper catalog, WebGPU and TSL node materials, shader fundamentals, and copyable shader effect recipes. It also covers auditing existing scenes: establish a repeatable baseline, trace resource ownership and repeated work, decide when demand rendering fits, and validate changes in the running scene. Preserve the examples when adapting them so the surrounding invariants remain visible to the coding agent. This complements the design tools: use get-ui-principle for visual decisions and get-ux-principle for product behavior. You can either: 1. Request a known topic: get-three-js-guide({ topic: "fundamentals" }) 2. Use an alias: get-three-js-guide({ topic: "webgpu and tsl" }) 3. Search for the current task or code example: get-three-js-guide({ query: "code example for a dissolve shader effect" }) 4. Audit an existing scene: get-three-js-guide({ topic: "auditing-and-fixing-a-scene" }) 5. Get the full topic index: get-three-js-guide({}) Prefer query search when you do not know the topic name. Use maxTokens to keep responses focused (recommended: 5000-10000).
| Name | Type | Req | Description |
|---|---|---|---|
| context | string | – | Optional. One sentence on WHY you are calling this and what the user asked for (e.g. 'adding nav icons for the fintech dashboard'). Used only for usage analytics; does not change the result. |
| maxTokens | number | – | Maximum tokens to return. Truncates content to fit. Recommended: 5000-10000. |
| query | string | – | Natural language description of the Three.js or React Three Fiber task or problem. |
| topic | string | – | Specific Three.js topic or alias, e.g. fundamentals, shader-effects-recipes, drei-catalog, webgpu-and-tsl. |
No output schema declared.
No examples provided.
get-ui-principle Get UI Design Principle ~367
Load visual UI design principles into context on-demand. Use this for visual surface decisions: hierarchy and emphasis, spacing/layout and grouping, typography, color, depth, images, accessibility, polish, and animation. Building a shop, product page, or product imagery: load product-pages and product-imagery. Building a landing or marketing page: load marketing, then also load positioning from get-ux-principle before writing the headline, because what the page says is decided before how it looks. For behavior, flows, forms, navigation, notifications, errors, search, onboarding, microcopy, positioning, rewards, behavior change, design process, or psychology/cognitive laws, use get-ux-principle instead. You can either: 1. Request a specific topic or alias: get-ui-principle({ topic: "spacing" }) 2. Semantic search: get-ui-principle({ query: "group this dense screen with clearer proximity" }) 3. Get index of all principles: get-ui-principle({}) Use maxTokens to keep responses focused (recommended: 5000–10000).
| Name | Type | Req | Description |
|---|---|---|---|
| context | string | – | Optional. One sentence on WHY you are calling this and what the user asked for (e.g. 'adding nav icons for the fintech dashboard'). Used only for usage analytics; does not change the result. |
| maxTokens | number | – | Maximum tokens to return. Truncates content to fit. Recommended: 5000-10000. |
| query | string | – | Natural language search query to find relevant principles. |
| topic | string | – | Specific UI topic or alias to load, e.g. spacing, gestalt, hierarchy, blur test, accessibility, color, depth, animation, product-pages, product-imagery. |
No output schema declared.
No examples provided.
get-ux-principle Get UX Design Principle ~460
Load UX behavior and product-flow principles into context on-demand. Use this before implementing flows or interactive behavior: forms, navigation, notifications, errors, dialogs, search, onboarding, responsive behavior, microcopy, positioning, value proposition, rewards and behavior change, design process and clarity audits, motion briefs, interaction patterns, mobile patterns, sound, anti-patterns, understanding users, and cognitive laws / psychology / behavioral science. Writing a landing page headline, value proposition, or any copy that has to say why a product is worth attention: load positioning first, and ask the user for the answers rather than inventing them. Building a catalog, collection page, or product listing: load commerce-catalog. Building a cart, checkout, or payment step: load commerce-checkout. Building a chat, agent, or near-empty prompt-and-response product, or deciding where brand lives once the chrome is gone: load brand-in-sparse-interfaces. You can either: 1. Request a specific topic: get-ux-principle({ topic: "behavior-change" }) 2. Use an alias: get-ux-principle({ topic: "reward design" }) 3. Semantic search: get-ux-principle({ query: "confirm progress with control, competence, or recognition" }) 4. Get index of all UX principles: get-ux-principle({}) Use maxTokens to keep responses focused (recommended: 5000–10000).
| Name | Type | Req | Description |
|---|---|---|---|
| context | string | – | Optional. One sentence on WHY you are calling this and what the user asked for (e.g. 'adding nav icons for the fintech dashboard'). Used only for usage analytics; does not change the result. |
| maxTokens | number | – | Maximum tokens to return. Truncates content to fit. Recommended: 5000-10000. |
| query | string | – | Natural language search query to find relevant UX principles. |
| topic | string | – | Specific UX topic or alias to load, e.g. forms, navigation, microcopy, positioning, value proposition, reward design, behavior-change, clarity audit, motion brief, design-process, cognitive-laws, psy… |
No output schema declared.
No examples provided.
get-widget-guide Get Better Widget Guide ~405
Plan and build a Better Widget for an article, guide, or landing page. Call this whenever the user asks for a calculator, estimator, converter, generator, quiz, checklist, SEO widget, or interactive article tool. Pass every known intake field. If the response lists missing items, ask only for those items and call the tool again before implementation. The completed response combines a scoped build brief with Better Design's stable rules for calculation trust, form and result behavior, search visibility, performance, analytics, privacy, and review. It routes shared visual and interaction decisions through get-ui-principle and get-ux-principle, then requires get-review-rules and check-comprehension after the widget exists. It never promises search rankings.
| Name | Type | Req | Description |
|---|---|---|---|
| context | string | – | Optional. One sentence on WHY you are calling this and what the user asked for (e.g. 'adding nav icons for the fintech dashboard'). Used only for usage analytics; does not change the result. |
| hostFramework | string | – | The host framework and the page or component that will contain the widget. |
| inputs | string | – | Required inputs, including units, allowed ranges, and defaults. |
| interaction | string | – | How readers tune inputs and see feedback, including presets, custom controls, direct manipulation, and exact-value entry. |
| maxTokens | number | – | Maximum tokens to return. Truncates content to fit. Recommended: 5000-10000. |
| result | string | – | What the result shows, explains, and lets the user do next. |
| transformation | string | – | Formula, scoring rule, conversion, or transformation that produces the result. |
| userGoal | string | – | Who will use the widget and the decision or task it helps them complete. |
| visualContext | string | – | Existing design tokens, components, or brand reference the widget must match. |
| widgetType | string | – | Widget kind: calculator, estimator, converter, generator, quiz, or checklist. |
No output schema declared.
No examples provided.
inspect-spacing Inspect Rendered Spacing ~547
Measure spacing in a rendered interface. Returns an inline report with a clear problem and correction, plus a short text summary. Full measurements remain available in the report and structuredContent. Use after UI changes when a browser or DOM evaluator is available. This is the runtime counterpart to get-review-rules. It automatically loads the live visual-design rubric, but it does not guess pixel values from a screenshot. Exact claims come from DOM geometry. Workflow: 1. Call with no states to receive a read-only browser capture script in structuredContent.captureScript. Use detail: "full" if your client reads only text; it includes the script in text. That call measures nothing. 2. Evaluate that script in each rendered state you need to review: at minimum 1440, 1728 and 390 wide. Also capture named hover, focus, selected, and open states when they change a control's surface or layout. 3. Call again with the captured states and the project's spacing scale when known. The layout counts as measured only when this second call returns status `completed`; reading the snapshot yourself is not a measurement. The report and summary start with the highest-priority correction. Read structuredContent.findings or use detail: "full" for every returned finding, measurement, and fix. Structured evidence retains captured geometry and optional screenshots for report renderers. The capture reads visible layout geometry, computed spacing, corner radii, surface styles, the number of line boxes each text block rendered, and short accessible labels for interactive controls. It does not collect source code, cookies, form values, or network data. Add data-bd-inspect-label, data-bd-symmetry, data-bd-group, data-bd-compare-size, data-bd-align-group, and data-bd-align-edge attributes when the intended relationship cannot be inferred safely.
| Name | Type | Req | Description |
|---|---|---|---|
| context | string | – | Optional. One sentence on WHY you are calling this and what the user asked for (e.g. 'adding nav icons for the fintech dashboard'). Used only for usage analytics; does not change the result. |
| detail | string | – | Defaults to a short summary alongside the inline report. Use full for the capture script or all findings and measurements in text-only clients. |
| spacingScale | array | – | Project spacing tokens in CSS pixels. Defaults to 4, 8, 12, 16, 24, 32, 48, 64, 96, 128. |
| states | array | – | Rendered layout states from the capture script. Omit on the first call to receive the script. |
| tolerance | number | – | Pixel tolerance for grouping measurements. Defaults to 1px. |
| Name | Type | Req | Description |
|---|---|---|---|
| captureScript | string | – | – |
| capturedWidths | array | – | – |
| findings | array | – | – |
| missingWidths | array | – | – |
| rubric | array | – | – |
| rubricStatus | string | – | – |
| score | number | – | – |
| states | array | – | – |
| status | string | yes | – |
| summary | object | – | – |
No examples provided.
install-icons Prepare Icon Component Files ~371
Fetch SVG icons and return component file contents for the agent to save. This tool does not write files or modify the user's repository. Call this after `find-icons` to materialise the chosen icons as owned, SSR-clean component files, with no runtime CDN fetch from `api.iconify.design` and no first-paint flash. The tool fetches each SVG from the public Iconify API, inlines its viewBox + body into a small `<Name>Icon` React component, and returns a list of `<file path="...">`-tagged blocks for the agent to write to disk. A barrel `index.ts` is also returned. Usage after writing the files: ```tsx import { HomeIcon } from "@/components/icons"; <HomeIcon className="size-4" /> ``` If `components/icons/index.ts` already exists in the project, MERGE the new exports into it rather than overwriting.
| Name | Type | Req | Description |
|---|---|---|---|
| context | string | – | Optional. One sentence on WHY you are calling this and what the user asked for (e.g. 'adding nav icons for the fintech dashboard'). Used only for usage analytics; does not change the result. |
| format | string | – | Output format. 'tsx' (default) generates React components; 'svg' generates raw .svg files. |
| libraryId | string | yes | Icon library ID from find-icon-library (e.g. 'tabler', 'phosphor'). |
| names | array | yes | Icon names to install. May be bare (e.g. 'home') or prefixed (e.g. 'tabler:home'). |
| targetDir | string | – | Directory inside the project to write into. Defaults to 'components/icons'. |
| variant | string | – | Optional library variant (e.g. 'outline', 'filled'). |
No output schema declared.
No examples provided.
preview-design-system Preview a Design System ~151
Show the user a visual preview of a design system from the catalog (use the id from 'find-design-system'). Returns a token-true HTML preview: palette, typography, buttons, card, input, badge, plus a link to the full live showcase. Use this when the user wants to SEE a design system before installing it.
| Name | Type | Req | Description |
|---|---|---|---|
| context | string | – | Optional. One sentence on WHY you are calling this and what the user asked for (e.g. 'adding nav icons for the fintech dashboard'). Used only for usage analytics; does not change the result. |
| designSystemId | string | yes | Design system id from find-design-system, e.g. 'linear', 'editorial-warm'. |
| Name | Type | Req | Description |
|---|---|---|---|
| installCommand | string | – | shadcn install command, when complete. |
| installLibrary | string | – | Actual component library flavor installed by installCommand. |
| installNote | string | – | Important install flavor or fallback note for clients that read only structuredContent. |
| name | string | yes | Display name of the design system or project. |
| previewUrl | string | – | Public, cookieless showcase URL used to generate preview assets. Falls back to viewUrl. |
| shotUrl | string | – | Real screenshot of the showcase page for the self-contained preview widget. |
| status | string | yes | completed | error | pending | generating | selected |
| step | string | – | Current generation step, while generating. |
| tokensCss | string | yes | CSS custom-property stylesheet for the system's tokens. |
| viewUrl | string | – | Owner-facing Better Design page (the human 'Open' link). May require login. |
No examples provided.
read-feature-map Read the Feature Map ~260
Find the flows a change touches, with the screen, route, components and data files of every step. Use the map whenever a request names a user flow or a product area ("the cancel account flow", "checkout", "onboarding"). Read .better-design/feature-map.json and pass it to read-feature-map before you plan the change, so you edit every screen, component and route the flow touches and nothing else. If the file does not exist, call build-feature-map first. Pass `flow` ("cancel account"), `feature` ("billing") or `file` (a path you are about to edit) to narrow it. With no query it lists every flow.
| Name | Type | Req | Description |
|---|---|---|---|
| context | string | – | Optional. One sentence on WHY you are calling this and what the user asked for (e.g. 'adding nav icons for the fintech dashboard'). Used only for usage analytics; does not change the result. |
| feature | string | – | A feature id or part of its name. |
| file | string | – | A file path or route; returns every flow that uses it. |
| flow | string | – | A flow id or part of its name. |
| map | string | yes | The exact contents of .better-design/feature-map.json. |
No output schema declared.
No examples provided.
review-dashboard-structure Review Dashboard Structure ~347
Deterministically review the source of a dashboard or overview before presenting it. For every dashboard, call this after get-review-rules and before check-comprehension. A prose self-review is not a substitute. Pass the complete page module source, the unchanged fixture, the factual interpretation, and the installed Sidebar, StatCard, and Table source files. Never summarize, reconstruct, or submit only the overview component. The tool derives the overview contract from the fixture. It fails incomplete source, rewritten copy, unsupported claims, weak hierarchy, missing or under-composed installed components, raw aside/table markup, the wrong scan order, action color on every rate, and stepper rails on short flows. FAIL is blocking and returns an MCP tool error. Fix every finding and call the tool again until PASS. Then run check-comprehension and inspect-spacing, and call finalize-dashboard-review. Only its VALID source-bound receipt permits presentation.
| Name | Type | Req | Description |
|---|---|---|---|
| componentSources | object | – | Installed Sidebar, StatCard, and Table source files for compound-composition review. |
| context | string | – | Optional. One sentence on WHY you are calling this and what the user asked for (e.g. 'adding nav icons for the fintech dashboard'). Used only for usage analytics; does not change the result. |
| fixture | object | yes | The request's unchanged fixture object. The first step is the overview; remaining steps are dependent task screens. |
| interpretation | string | yes | Exact supplied or factually derived takeaway that must appear after records. |
| screen | string | yes | What this dashboard is, e.g. 'funnel report overview'. |
| source | string | yes | Complete TSX or JSX source for the dashboard page. |
No output schema declared.
No examples provided.
review-illustration Review an Illustration ~343
Look at an SVG illustration you drew and get back what is visibly wrong with it. You write SVG blind. This renders it in a real browser and judges it against this project's illustration principles, so you find out that a shape does not close, a part floats unattached, the light comes from two directions, or contents sit outside the container meant to hold them. Use it whenever you have drawn an illustration, before you hand it to anyone. Drawing something worth shipping usually takes 2 or 3 rounds. How to call it: 1. Get the rules first with `get-ui-principle({ topic: "svg-illustration" })` and draw against them. 2. `review-illustration({ svg, intent: "an open inbox tray with letters" })`. Say what the drawing is meant to be, in your own words. 3. Fix what `faults` names, then call again passing `reviewToken` back. Reviewing the same drawing again costs nothing while that token is valid. 4. Stop when `faults` is empty. Markup carrying script, event handlers, remote references, or styles that reach outside the drawing is refused rather than cleaned, so the drawing you fix is the drawing you sent.
| Name | Type | Req | Description |
|---|---|---|---|
| animated | boolean | – | Set when the drawing was meant to move, so the motion checks apply. |
| intent | string | yes | What it is meant to be, in plain words. For example "an open inbox tray with letters". |
| reviewToken | string | – | The token from a previous review of this drawing. Reviews it again free. |
| svg | string | yes | The complete svg element you drew. |
| Name | Type | Req | Description |
|---|---|---|---|
| faults | array | yes | – |
| layers | array | yes | – |
| message | string | yes | – |
| reviewToken | string | yes | – |
| reviewed | boolean | yes | – |
| unseen | boolean | yes | – |
No examples provided.
review-ui-code Review UI Code ~422
Deterministic UI and UX review of React component source and its CSS. Run it on every UI file you write or change, including globals.css, before you present the result. When CSS references a framework font variable, include the layout or font-loader .ts/.tsx/.js/.jsx module in the same call. get-review-rules gives you the judgment rules to apply yourself. This tool is the mechanical half: it parses the code and returns exact findings with line numbers and fixes, the same input always producing the same findings. It catches: - Native elements the installed design system already ships: raw <button>, <input>, <select>, <textarea>, <table>. - Raw <aside> app shells and repeated record rows that bypass installed Sidebar and Table compositions. - Undefined font variables that leave the rendered app on an unintended fallback family. - Hardcoded colors and Tailwind arbitrary color values that bypass semantic tokens, raw palette classes (bg-white, text-gray-500), and dark: forks. - Generated-UI tells: letter-spaced capital labels, left-border callout boxes, gradient text, eyebrow labels above titles, em dashes in copy. - WCAG basics: images without alt, icon-only buttons without an accessible name, removed focus outlines. This source reviewer cannot judge rendered hierarchy or semantic color roles. After it passes, inspect the rendered dashboard and confirm title → metrics → records → interpretation, distinct action and status colors, and that a stepper begins only after a task starts. Fix every critical and serious finding, then call it again on the fixed source. Findings feed the same loop as a human code review: read, fix, re-check.
| Name | Type | Req | Description |
|---|---|---|---|
| context | string | – | Optional. One sentence on WHY you are calling this and what the user asked for (e.g. 'adding nav icons for the fintech dashboard'). Used only for usage analytics; does not change the result. |
| files | array | yes | The .tsx, .jsx, .ts, .js, and .css files to review, as written. |
No output schema declared.
No examples provided.
set-design-config Set a Project's Design Config ~259
Write exact design-token values (colors, radius, fonts, icon library) onto a generated project. Use this when the user states concrete values ("make primary oklch(0.62 0.11 45)", "radius 12px"). It merges over the current config and persists, so the change survives restarts and every later get-design-config returns it. Saved config is publicly readable by anyone with the fragment config URL. For vague direction ("warmer", "more playful"), iterate with the user toward concrete values first; do not invent numbers on their behalf.
| Name | Type | Req | Description |
|---|---|---|---|
| config | object | yes | Partial design config to merge over the current one. Only pass the fields the user changed. Colors are oklch() strings (e.g. 'oklch(0.62 0.11 45)'); radius is a CSS length (e.g. '0.75rem'); fonts are… |
| context | string | – | Optional. One sentence on WHY you are calling this and what the user asked for (e.g. 'adding nav icons for the fintech dashboard'). Used only for usage analytics; does not change the result. |
| projectId | string | yes | The project id returned by create-design-system. |
No output schema declared.
No examples provided.
update-feature-map Update the Feature Map ~269
Apply one change to the feature map and get the new file back. Call it after you add, rename or remove a feature or a flow, or change a flow's steps, so the map stays in step with the code. Changes, one per call: - { op: "add-feature", name, description?, flows? } - { op: "rename-feature", feature, name } - { op: "remove-feature", feature } - { op: "set-flow", feature, flow: { name, description?, steps: [{ name, route?, screen?, action?, components?, data? }] } } adds the flow, or replaces the one with that name - { op: "rename-flow", feature, flow, name } - { op: "remove-flow", feature, flow } `feature` and `flow` take an id or an exact name. Write the returned file to .better-design/feature-map.json.
| Name | Type | Req | Description |
|---|---|---|---|
| change | – | yes | – |
| context | string | – | Optional. One sentence on WHY you are calling this and what the user asked for (e.g. 'adding nav icons for the fintech dashboard'). Used only for usage analytics; does not change the result. |
| map | string | yes | The exact contents of .better-design/feature-map.json. |
No output schema declared.
No examples provided.
What is the Better Design MCP server?
Better Design is an MCP server listed in the public MCP registry as io.github.marvkr/better-design. A design harness for AI coding agents: design systems, design principles, icons and UI review. This page covers its npm package (better-design).
Is the Better Design MCP server safe to use?
Better Design scores 61 out of 100 on VerifyMCP. We found no known CVEs affecting it as of 30 September 2026. It declares no install or post-install scripts. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.
What tools does the Better Design MCP server expose?
Better Design exposes 36 tools: get-ui-principle, get-ux-principle, get-sales-principle, get-react-native-guide, get-three-js-guide, and 31 more. Their descriptions and schemas cost roughly 17,398 tokens of context every time the server is loaded.
Is the Better Design MCP server still maintained?
Better Design is still listed as active in the MCP registry. We last reached this channel on 30 September 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.
What licence is the Better Design MCP server under?
Better Design declares the MIT licence, which is OSI-approved. That covers the source only, and says nothing about the cost of any service it calls.