free-design-registry
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@free-design-registryfind a minimal shadcn pricing card and generate a build prompt"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
free-design-registry
A standalone, fully-local MCP design registry of 21st-style shadcn components. It scrapes the
public 21st.dev registry into a local SQLite database (FTS5 full-text search) and serves the
components over MCP on stdio — no third-party MCP paywall, no API keys, no rate limits.
What it does
Crawler (
src/crawler.ts) discovers public component URLs from21st.dev's sitemap, hydrates each viahttps://21st.dev/r/{author}/{slug}, and stores the payload in SQLite. Idempotent (INSERT OR REPLACEby id) — re-running refreshes existing rows.Database (
src/db.ts,src/schema.sql) — acomponentstable plus an FTS5 non-external virtual table kept in sync by plain-SQL triggers, with a final rebuild after each crawl.MCP server (
src/server.ts) exposes five tools over stdio:search_designs(query, limit?)— full-text search ranked by relevance.inspect_component(id)— full record for oneauthor/slugcomponent.get_build_prompt(id | query)— a detailed, reusable build-prompt scaffold for a component.install_component(id)— the component's file list + install steps.get_theme(identifier, mode?)— design tokens (CSS variables and/or Tailwind config) for an aesthetic keyword ("neon","minimal","sunset") or a component id. Curated/inferred: the registry stores metadata only, not raw theme tokens, so output is clearly labeled.
Component ids are "author/slug".
Related MCP server: shadcn MCP Server
Requirements
Node.js >= 20 (tested on 22). npm.
No API keys. The crawler talks to the public
21st.devendpoints directly.
Setup
npm install # installs better-sqlite3 (prebuilt binary) + deps
npm run build # esbuild CJS bundle -> dist/server/index.cjs, dist/crawler/index.cjs
# (+ copies schema.sql and the base catalog assets/registry.db -> dist/data/)That's it — the base catalog (7,126 components) ships in the repo as assets/registry.db, so a fresh
clone is ready to serve with no crawl. Run npm run crawl only if you want to refresh the data
(~15 min; idempotent). Flags below.
Crawl flags
--limit <n> (default: all), --concurrency <n> (default 5), --delay <ms> (default 50, jittered),
--dry-run. Useful smoke test: npm run crawl -- --limit 25.
Note on the catalog:
21st.dev's detail endpoint is 403-gated for anonymous hydration, so records are partial (name / author / description; no raw CSS tokens or file contents). That's by design — the value is the searchable metadata + build prompts + curated theme scaffolds, not the source files.get_themeoutput is therefore clearly labeled as curated/inferred.
Run the MCP server
node dist/server/index.cjs # or: npm start / npm run mcp
npm run dev # dev mode (runs src/server.ts directly, no build needed)The server speaks MCP over stdio; it logs to stderr, stdout is reserved for the protocol.
MCP client config
Point any MCP client (Claude Code, Cursor, Windsurf, OpenCode, etc.) at it:
{
"mcpServers": {
"free-designs": {
"command": "node",
"args": ["<ABS_PATH_TO_THIS_DIR>/dist/server/index.cjs"]
}
}
}Verify
# row count (expect ~7,000)
node -e "const db=require('better-sqlite3')('dist/data/registry.db');console.log(db.prepare('SELECT COUNT(*) c FROM components').get().c)"
# FTS search
node -e "const db=require('better-sqlite3')('dist/data/registry.db',{readonly:true});console.log(db.prepare(\"SELECT id,name FROM components_fts WHERE components_fts MATCH 'bento' LIMIT 5\").all())"The database lives at dist/data/registry.db (WAL mode). The base catalog ships in the repo as
assets/registry.db and the build copies it into dist/data/; dist/data/ itself is git-ignored.
Run npm run crawl to refresh the data.
Agent workflow skills
.cursorrules contains the agent-facing workflow skills (discovery → build prompt → theme → audit).
Drop it into any agent's project rules to teach registry usage.
Project layout
free-design-registry/
├── package.json
├── tsconfig.json
├── .gitignore
├── README.md
├── .cursorrules # agent workflow skills
├── assets/registry.db # base catalog (7,126 components) — committed; copied to dist/data/ on build
├── test-mcp.mjs # MCP stdio integration test (all tools)
├── test-theme.mjs # get_theme integration test
└── src/
├── schema.sql # components table + FTS5 virtual table + triggers
├── db.ts # SQLite access layer (better-sqlite3) + theme engine
├── crawler.ts # discovery + hydration
├── server.ts # MCP stdio server (5 tools)
└── build.ts # esbuild CJS bundlerPublishing / rebuilding elsewhere
This is a self-contained repo. To reproduce on any machine or agent:
git clone <this-repo>npm install && npm run buildAdd the MCP client config above.
No secrets, no external services. The base catalog ships in the repo as assets/registry.db
(~10 MB), so a fresh clone serves immediately with no crawl. The only network dependency is
the public 21st.dev endpoints, and only if you run npm run crawl to refresh the data.
This server cannot be deployed
Maintenance
Related MCP Connectors
Find UI components and themes, retrieve code, and generate with hosted 21st AI when enabled.
Access and maintain design system docs, tokens, components, skills, and contexts across any project.
Search and install interactive React components with unusual motion, via the shadcn CLI.
Search and pull 500+ production-ready React + Tailwind sections and elements
Related MCP Servers
- AlicenseAqualityDmaintenanceHelps AI assistants access shadcn/ui component documentation and examples through a TypeScript-based MCP server that provides reference information for component details, usage examples, and search capabilities.4609 npm60MIT
- FlicenseAqualityDmaintenanceProvides AI assistants with direct access to shadcn/ui components and blocks, enabling real-time fetching of component source code, documentation, and implementation examples.417 npm4-
- AlicenseNot gradedqualityBmaintenanceProvides AI-optimized offline access to the Gravity UI design system, enabling natural language search and retrieval of components, hooks, utilities, and recipes.2MIT
- AlicenseAqualityCmaintenanceProvides coding agents live access to shadcn-style component registries, enabling them to search, compare, and fetch real component source code for UI composition.565 npm5MIT