MCP server: One MCP server.

Designer Skill

@pymodelRun by its publisher: served from their own domain, namespace checked by the registry.MCP server · External

UI design MCP: design references, intent routing, anti-slop static detector and gate. No API key.

UI designv0.22.0MITJavaScript
Freeno charge per call

Runs on your machine from its package; the steps are below.

designer-skill-mcp
From the README · 1 of 3

What it does

  1. Reads
  2. Writes
  3. High impact

At most: only reads or looks up information.

What it costs

Free

Odel charges nothing per call. The publisher may charge for its own service.

Runs locally over stdio

This server isn't hosted — your MCP client launches it from a package registry. Use one of the commands below, or drop the config into your client (e.g. Claude Desktop).

npm@pymodel/designer-skill-mcpv0.22.0

Run

npx -y @pymodel/designer-skill-mcp

MCP client config

{
  "mcpServers": {
    "designer-skill": {
      "command": "npx",
      "args": [
        "-y",
        "@pymodel/designer-skill-mcp"
      ]
    }
  }
}
README9 min read
designer-skill-mcp

Plug-and-play MCP. UI superpowers for your agent.

release downloads tests license skills.sh
tools references detector node api key

Setup · How it works · References · Tools · Development

Setup

setup

Paste into your agent (Claude Code, Codex, Cursor, any MCP client). It installs the skill, wires the MCP and verifies the tools:

text
Add designer-skill alongside Niblet Designer UI. The designer core is keyless: it routes requests, loads guidance and runs supplemental static checks. Niblet optionally supplies real screens and licensed materials; the host owns implementation and rendered verification.

1. Install or refresh the skill into the user skill directory (not this project):
npx skills add PyModel/designer-skill --skill designer-skill -g -y

2. Add the local MCP using this client's native MCP configuration, in the user-level (not project-level) config:
Name: designer-skill
Transport: stdio
Command: npx
Args: -y @pymodel/designer-skill-mcp@latest

No API key is needed. Do not add one.

3. Verify: list the designer-skill server's tools and confirm get_preflight_brief, dispatch_intent, review_and_gate are present. Do not run a sample check.

When setup is complete, confirm the skill is installed and the three named tools are exposed. On UI work: call get_preflight_brief, use dispatch_intent and load only relevant guidance. If an unresolved visual question warrants retrieval, use the separately configured niblet server's discovered tools. Prefer its image content for inspection; designer-skill's catalogue wrappers return metadata or routing guidance only. Run review_and_gate as supplemental static evidence, then perform the required rendered, functional and accessibility checks in the host. Never treat static success as UI PASS. Preserve audit/plan scope. Continue an active authorized task; otherwise report designer-skill ready, and report Niblet paired only if its tools were actually observed.

No Niblet? Continue from local product evidence; catalogue retrieval is optional.

Or pick one:

Install
🟣 Claude Code plugin (skill + MCP)/plugin marketplace add PyModel/designer-skill then /plugin install designer-skill@pymodel
🟢 Codex plugincodex plugin marketplace add PyModel/designer-skill, then install designer-skill from pymodel in /plugins
⚫ Cursor pluginInstall from the marketplace; ships mcp.json, skills, /designer-setup · /designer-status
🔵 MCP only, any clientclaude mcp add designer-skill -- npx -y @pymodel/designer-skill-mcp (same args for codex mcp add, pythinker mcp add --transport stdio)
🟠 Skill onlynpx skills add PyModel/designer-skill --skill designer-skill or copy skills/designer-skill/ into ~/.claude/skills/ / ~/.codex/skills/

Canonical MCP config (mcp.json):

json
{ "mcpServers": { "designer-skill": { "command": "npx", "args": ["-y", "@pymodel/designer-skill-mcp@latest"] } } }

@latest tracks npm; teams pin @pymodel/designer-skill-mcp@0.22.0. Plugin skill content updates separately (/plugin update …). MCP registry name: io.github.PyModel/designer-skill-mcp. Requires Node 22+.

Per-client config (VS Code, Codex TOML, Kilo, Open Code, Claude Desktop, Pythinker, Pi)

VS Code .vscode/mcp.json (1.99+):

json
{ "servers": { "designer-skill": { "type": "stdio", "command": "npx", "args": ["-y", "@pymodel/designer-skill-mcp"] } } }

Codex CLI ~/.codex/config.toml:

toml
[mcp_servers.designer-skill]
command = "npx"
args = ["-y", "@pymodel/designer-skill-mcp"]

Open Code opencode.json:

json
{ "mcp": { "designer-skill": { "type": "local", "command": ["npx", "-y", "@pymodel/designer-skill-mcp"] } } }

Claude Desktop, Cursor (.cursor/mcp.json), Kilo Code (mcp_settings.json), Pythinker (~/.pythinker/mcp.json): the canonical mcpServers JSON above. Pythinker verify: pythinker mcp test designer-skill (guide).

Pi: the same JSON, or register the skill natively: { "skills": [{ "path": "/path/to/skills/designer-skill/SKILL.md" }] }

Local checkout: replace npx with "command": "node", "args": ["/abs/path/to/designer-skill-mcp/dist/index.js"].

How it works

how

mermaid
flowchart LR
  A[Prompt] --> B[get_preflight_brief]
  B --> C[dispatch_intent]
  C --> D[get_reference]
  D --> E[Build / polish UI]
  E --> F[review_and_gate]
  F -->|FAIL: fix| E
  F -->|static checks pass| G[Rendered checks<br/>by the host]
  classDef start fill:#f8fafc,stroke:#94a3b8,color:#18181b
  classDef route fill:#eff6ff,stroke:#3b82f6,color:#1e3a8a
  classDef know fill:#faf5ff,stroke:#7c3aed,color:#4c1d95
  classDef work fill:#fff7ed,stroke:#e87a3d,color:#7c2d12
  classDef gate fill:#ecfdf5,stroke:#10b981,color:#065f46
  classDef host fill:#fff1f2,stroke:#e11d48,color:#881337
  class A start
  class B,C route
  class D know
  class E work
  class F gate
  class G host
🔵 Route🟣 Know🟢 Check
dispatch_intent maps "make it pop" or "it feels off" to design verbs and at most four references.24 designer references (type, color, motion, a11y, anti-slop, redesign, worst-case data, dependency selection…) plus 26 ux/* references (forms, collaboration, canvas, AI, i18n…).A 44-rule deterministic detector backs review_and_gate, which reports each required rule as ran, unsupported, unresolved or waived.

The gate is static only: overall status is FAIL or NOT_VERIFIED, never a rendered-readiness pass. Rendered, accessibility and performance checks stay NOT_RUN until the host supplies evidence.

Niblet ecosystem

OwnerResponsibility
designer-skillOne entry point for scope, routing, craft/UX guidance and verification reporting
Niblet platformReal-screen catalogue, recorded design references and license-recorded materials
Niblet MCPReference images and material retrieval; hosted get_ui_component provides React source
Agent hostAuthorized file/dependency changes, browser/native interaction, rendered inspection and evidence

Discover tools per server: the same find_ui_references name on designer-skill is a text-only REST wrapper, not Niblet's image-delivering tool. Prefer Niblet MCP for reference inspection and materials. Do not call both providers for the same question or infer connectivity from installation. Consult niblet-catalogue for deployment differences, bounds and licensing.

Use one product-grounded design contract. Niblet's surface modes (Persuade, Operate, Read, Experience) describe the user's job; designer-skill's execution modes (audit, plan, refine, implement, system) describe permitted work. They are independent: an Operate surface can receive a read-only audit or an authorized refinement. Existing product tokens, components and real content win over reference aesthetics. Component retrieval does not authorize dependency installation or source writes, and neither MCP certifies rendered quality.

Example: "Use designer-skill to redesign this pricing page without breaking functionality." → get_preflight_brief → dispatch_intent → get_reference → edit → review_and_gate.

Built with it: pythinker.com

pythinker.com — built with designer-skill

References

refs

FileUse whenTier
design-principlesTypography, spacing, color, layout, hierarchy🔵 core
differentiation-playbookBeing distinctive: inverse test, layout menu, named references🔵 core
aesthetic-systemsPicking a look: 5 systems with palettes, fonts, shadows🔵 core
motion-and-interactionTiming, springs, scroll, reduced motion🔵 core
engineering-and-performanceTokens, a11y, responsive, Core Web Vitals🔵 core
avoid-ai-slopBan list, category-reflex checks, completeness contract🔵 core
refactor-and-redesignAudit → diagnose → redesign without breaking behavior🔵 core
command-playbookIntent → verb dispatch🔵 core
verification-and-recoveryEvidence rules, gate statuses, failure triage🔵 core
interaction-designFitts/Hick/Miller, forms, navigation, errors, loading🔴 extended
visual-critiqueSeven-dimension critique🔴 extended
design-systemsToken architecture, component specs, theming🔴 extended
project-initDiscovery interview, PRODUCT.md, DESIGN.md🔴 extended
craft-flowScope-adaptive implementation and evidence workflow🔴 extended
live-modeAuthorized source variants using host-discovered preview tools🔴 extended
css-techniquesModern CSS: container queries, :has(), clamp(), logical props🔴 extended
motion-vocabularyMap a feel word ("the bouncy thing") to the standard motion term🔴 extended
fluid-input-principlesGesture-first fluid-interface principles translated for web🔴 extended
native-webPlatform-correct mobile web: tap, viewport, safe areas, zoom🔴 extended
worst-case-dataDesign and verify against extreme real data, not demo values🔴 extended
variant-prototypingTime-boxed side-by-side variants for genuinely open decisions🔴 extended
dependency-selectionMethod for choosing or adding a UI dependency, not a picks list🔴 extended
niblet-catalogueOptional real-screen references and materials via Niblet; advisory, unconfigured-safe🔴 extended
craft-provenanceHistorical capability mapping and attribution; load only when needed🔴 extended

Plus 26 ux/* references, authored in skills/ux-designer/ and vendored at skills/designer-skill/reference/ux/ (generated by node scripts/sync-ux.mjs, checked by test), so a designer-skill-only install is self-contained. Each SKILL.md is a short router with a one-line description; references load only when a task needs them.

PhraseVerbsReads
"make it pop"amplify · coloraesthetic-systems, design-principles
"it feels off"check · layoutrefactor-and-redesign, avoid-ai-slop
"production-ready"ship · checkengineering-and-performance
"add some motion"motionmotion-and-interaction
"it looks AI-made"review · brandavoid-ai-slop, aesthetic-systems
"redesign this"check · refreshrefactor-and-redesign, command-playbook

Tools

tools

ToolPurpose
get_preflight_briefScope and verification contract (call first)
load_project_contextRead PRODUCT.md / DESIGN.md from the project (absolute cwd)
get_design_systemSKILL.md router and reference map
get_referenceLoad one reference by name (designer or ux/*)
anti_slop_checklistAdvisory style and truthful-content review guidance
list_commandsAll design verbs with descriptions
get_commandHelp and reference names for one verb
dispatch_intentMap a request → verb(s) + at most four references to read
commit_design_directionValidate a context-grounded direction record
get_palette_seedOKLCH brand seed for authorized new palette work
detect_antipatternsDeterministic static scan (44 rules): coverage, file hashes, gaps
review_and_gateStatic gate per required rule; never claims rendered readiness
find_ui_referencesOptional text-only Niblet real-screen search or selected-screen metadata (NIBLET_TOKEN)
get_design_referenceOptional niblet structured reference for a web screen (NIBLET_TOKEN)
find_ui_materialsNiblet materials routing guidance; retrieval runs on the Niblet MCP package or hosted MCP (kind: pack refused)

Resources: designer://skill · designer://reference/{+name} · Prompt: design (task, optional aesthetic)

Development

dev

bash
cd designer-skill-mcp
npm ci
npm run build   # syncs skills/ → assets/ (generated, gitignored), compiles TypeScript
npm run typecheck && npm test   # tsc over src + test, then vitest; `npm run smoke` drives the packed tarball

Skill robustness checks

Edit UX guidance only in skills/ux-designer/references/; npm run sync-skill regenerates the standalone mirror before bundling. Run node scripts/sync-ux.mjs from the repository root for filesystem-only distribution.

Run reports now use v2, plus a host-owned verification plan. Validate both bundled JSON schemas, then run the dependency-free skills/designer-skill/scripts/validate-report.mjs REPORT PLAN AUTHORIZED_ROOT for evidence hashes, confinement, revision/plan matching and rendered-readiness semantics. Its own PASS means report validation, not UI certification. Legacy v1 reports fail closed and must be regenerated from real evidence; update host readers/writers together.

Behavioral action-plan cases and a deterministic grader live in evals/designer-skill/. Synthetic grader tests do not count as model evaluations, and model proposals do not prove actual tool-use compliance or rendered quality. Keep model, host, skill hash and repetitions with evaluation results.

HTTP mode (Streamable HTTP at /mcp):

bash
node dist/index.js --http --port 3017 --root /abs/project                     # 127.0.0.1
DESIGNER_SKILL_HTTP_TOKEN=… node dist/index.js --http --host 0.0.0.0 --root /abs/project

Every HTTP bind requires at least one --root. Loopback binds validate the Host header; a non-loopback bind also requires DESIGNER_SKILL_HTTP_TOKEN (Authorization: Bearer …).

Release: ./scripts/release.sh "notes" bumps and syncs every version, verifies, tags and pushes; publish.yml publishes npm (with provenance), the MCP registry entry and the GitHub release. Contract details: docs/HARDENING.md.

MIT package skill

Similar modules

Browse UI design