Assembly

Open source · MIT · Self-hostable

Ground your coding agent in your design system.

Assembly turns any design-system corpus into queryable knowledge — manifest-driven ingest, hybrid vector + full-text retrieval, served over MCP and HTTP. Your agent answers from your components, tokens, and patterns instead of guessing.

ships with shadcn/ui @ 4.13.0 — or point the manifest at your own corpus

claude — ~/app

$ claude "Add a notifications toggle to settings — use our Switch"

assembly-knowledge · search_design_system("switch toggle form")

└ 4 hits · switch.mdx · form.mdx · switch.tsx · switch.stories.tsx

assembly-knowledge · get_component_docs("switch")

└ props · anatomy · accessibility notes · 3 usage examples

SettingsToggle.tsx — on-system props, zero invented APIs

22.8% 100%

mean required-API coverage, bare model vs. retrieval-informed

0/12 12/12

tasks matching every required component API

8 0

tasks that shipped hallucinated APIs

Measured on 12 React + TypeScript tasks against @halcyon/ui — a fictional design system invented so no model can have memorized it. Same model, same tasks; the only variable is retrieval. Methodology & limitations →

From intent to merged PR

The flagship demo drives the whole loop: generation grounded in corpus docs, a six-check quality gate — including axe-core accessibility, an LLM judge, and visual baselines rendered by a real browser farm — then auto-merge. Humans only ever approve visual baselines.

Intent Generate Pull request Quality gate Auto-merge

Usage telemetry flows back into retrieval ranking — the knowledge engine gets better the more agents use it.

What's in the box

Six services across Go, Python, and TypeScript — one shared Postgres, real queues, honest measurement.

Manifest-driven ingest

A manifest maps corpus paths to doc types — component docs, source, stories, tokens. A new design system is a new manifest, not a code change.

Hybrid retrieval

Vector search over Postgres + pgvector fused with full-text search via reciprocal-rank fusion. HNSW-indexed, cosine similarity.

MCP and HTTP

Three MCP tools your agent calls natively, plus a plain HTTP API for scripts, CI, and everything else.

Evals with an honest baseline

Retrieval quality is scored against a deterministic baseline, and the proof-of-value benchmark — limitations included — ships in the repo.

Usage-aware ranking

Query telemetry feeds back into retrieval as a usage-weighted boost: hit@5 0.790 → 0.807 in evals, tunable by env var.

Intent to merged PR

A flagship pipeline generates on-system UI, runs a six-check quality gate with real-browser visual baselines, and auto-merges.

Three tools, zero glue code

Register the stdio server with any MCP client — Claude Code, Cursor, anything that speaks MCP — and the corpus is queryable.

search_design_system(query, limit)

Hybrid search across the whole corpus. Ranked chunks with source path, component, doc type, and RRF score.

get_component_docs(component)

Everything about one component, ordered docs → source → stories. Near-name suggestions when a lookup misses.

get_design_tokens()

The full design-token set, ordered and cached. Ask once, theme correctly.

Full MCP reference →

Running in one command

The quickstart stack ships a deterministic fake embedder and the pinned shadcn/ui corpus — no API keys required. Swap in Voyage embeddings with a single env var when you're ready.

git clone https://github.com/abdalkadir/assembly.git
cd assembly
make quickstart

→ knowledge API on 127.0.0.1:8100 · shadcn/ui corpus ingested · no keys