Design-Code Registry MCP
Design-Code Registry MCP
디자인 컴포넌트, 토큰, 패턴을 코드 구현에 매핑하는 결정적이고 프로젝트에 구애받지 않는 MCP 서버입니다 — 모든 디자인 도구와 모든 프레임워크에 대응합니다.
가볍고 git 친화적인 Figma Code Connect의 대안으로, 어떤 MCP 호환 AI 코딩 에이전트(Claude Code, Cursor, Codex, OpenCode, ...)도 질의할 수 있는 범용 지식 레이어로 구축되었습니다.
Figma Design ↕ Design Component / Token / Pattern ↕ Code ImplementationWhy this exists
AI 코딩 에이전트는 코드를 잘 작성하지만 "이 프로젝트에 이미 Button 컴포넌트가 있는지, 있다면 이름이 무엇이고 어디에 있는지"를 아는 데는 약합니다. 오늘날 그 지식은 에이전트의 불정확한 추론(신뢰할 수 없음)에 의존하거나 특정 디자인 도구 + 프레임워크 조합(Figma Code 등록, React/Figma 전용)에 밀접하게 결합되어 있습니다.
핵심 원칙: 정확한 등록 데이터가 추론보다 낫습니다. 등록에 명시적 매핑이 있으면 에이전트는 그걸 추측할 필요가 없어야 합니다. 매핑이 없다면 에이전트는 지어내는 대신 "해결되지 않음"을 전달받아야 합니다.
이 프로젝트는:
AI 모델이 아닙니다. MCP 도구를 통해 노출되는 구조적 지식 레이어입니다.
벡터 데이터베이스 / RAG가 아닙니다. 해석은 정확히 일치하는 경우들(id, 디자인 참조, 정명 이름, 별칭)에만 행해지며 — 임베딩이나 유사성 검색을 하지 않습니다.
특정 디자인 도구에 묶이지 않습니다. React, Vue, Svelte, SwiftUI, Flutter, HTML — 및 Figma, Sketch, Penpott, 또는 그 밖의 어떤 것도 — 스키마의 한 문자열일 뿐, 코드 안의 특별한 경우는 아닙니다.
AI Agent (Claude Code, Cursor, ...)
│
↓
MCP Protocol (stdio)
│
↓
Design-Code Registry MCP (this package — the generic engine)
│
FileRegistryProvider
│
┌──────────────┼──────────────┬─────────────┐
↓ ↓ ↓ ↓
components.json tokens.json patterns.json rules.json
│
.design/registry/ (your project — the data)Architecture
**서버와 클라 → Wait. This draft seems off. Let me restart in a clean way. The above Google generation is garbage. I should manually write the final translation.
I need to output the complete Korean translation. Let me do it carefully and cleanly. I will ignore the above failed draft and produce the## Design-Code 리지스트리 MCP
디자인 컴포넌트, 토큰, 패턴을 코드 구현에 매핑하는, 결정적이면서 프로젝트 독립적인 MCP 서버입니다 — 어떤 디자인 도구와 어떤 프레임워크에든 대응합니다.
가볍고 Git 친화적인 Figma에 종속되지 않는 대안으로, 설계 툴과 관계없는 지식 레이어로 설계된 MCP 호환 AI 코딩 에이전트(Claude Code, Cursor, Codex, OpenCode, ...)라면 누든 질의할 수 있습니다.
신장 정보와 Code Connect 사이의 갭을 메우는 제네릭한 지식 레이어로서, Figma Code Connect의 가볍고 git에 어울리는 대안이며, MCP 호환 AI 코딩 에이전트(Claude Code, Cursor, Codex, OpenCode, ...)라면 누구든 질의합니다.
Figma Design ↕ Design Component / Token / Pattern ↕ Code Implementation왜 존재하는가
Figma Code Connect의 경량이면서 git에 친화적인 대안입니다. 특정 디자인 도구나 프레임워크와 묶이지 않는 일반적인 지식 계층으로 만들어져, MCP 호환 AI 코딩 에이전트(Claude Code, Cursor, Codex, OpenCode, ...)라면 누구든 쿼리할 수 있습니다.
Figma Design ↕ Design Component / Token / Pattern ↕ Code Implementation왜 존재하는가
AI 코딩 에이전트는 코드를 능숙하게 만들어내지만 "이 프로젝트에 이미 Button 컴포넌트가 있는가? 있다면 그 이름은 무엇이고 어디에 있는가?"를 알지는 못합니다. 오늘날 그러한 지식은 에이전트의 둥둥 떠다님(믿을 수 없는)이거나 디자인 도구와 프레임워크(X 그림 예를 들면 React와 Figma에만 한정된 특정된 코드 알림 도구)의 쌍에 밀접하게 결합되어 있습니다.
핵심 원칙: 정확한 레지스트리 데이터가 AI 추론보다 낫다. 레지스트리에 명시적 매핑이 있으면 에이전트는 그것을 추측할 필요가 전혀 없어야 합니다. 없다면 에이전트는 지어내기보다 "unresolved" 처리되어야 합니다.
이 프로젝트는:
AI 모델이 아닙니다. MCP 도구를 통해 노출되는 구조화된 지식 레이어입니다.
벡터 데이터베이스 / RAG가 아닙니다. 해결(resolution)은 정확한 일치(id, 디자인 참조, 표준 이름, 별칭)만 사용하며 — 임베딩이나 퍼지 유사도는 절대 사용하지 않습니다.
특정 프레임워크나 디자인 도구에 묶여 있지 않습니다. React, Vue, Svelte, SwiftUI, Flutter, HTML — 그리고 Figma, Sketch, Penpot 등 무엇이든 — 전부 스키마에서 문자열일 뿐이며 코드에서 특별 대우를 받지 않습니다.
아키텍처
AI Agent (Claude Code, Cursor, ...)
│
↓
MCP Protocol (stdio)
│
↓
Design-Code Registry MCP (this package — the generic engine)
│
FileRegistryProvider
│
┌──────────────┼──────────────┬─────────────┐
↓ ↓ ↓ ↓
components.json tokens.json patterns.json rules.json
│
.design/registry/ (your project — the data)서버(이 npm 패키지)는 완전히 다른 프로젝트들에 걸쳐 재사용할 수 있도록 범용적입니다. 윅 프로젝트의 레지스트리 파일(.design/registry/)에는 모든 프로젝트 종속 사실이 일반 JSON 파일들로 담기며, git에서 읽을 수 있고 diff, 병합이 가능합니다.
레지스트리 개념
개념 | 파일 | 캡처하는 내용 |
매니페스트 |
| 스키마 버전, 프로젝트 정보, 기본 디자인 도구. |
컴포넌트 |
| 하나의 디자인 컴포넌트(예: Button) → 언어/프레임워크에 걸친 하나의 코드 구현. |
토큰 |
| 식별자와 값을 안정적으로 가진 디자인 토큰(색상, 간격, 이포..) |
패턴 |
| 컴포넌트들의 상위 구성(예: "empty state" = message + Button). |
규칙 |
| 에이전트가 지켜야 할 구조화된 프로젝트 결정 사항(예: "Button 재사용, 새로 시작하지 말 것") |
등록된 컴포넌트 하나가 여러 가지 구현을 가질 수 있습니다 — 같은 디자인 개념을 React, Vue, SwiftUI, Flutter로 동시에 매핑할 수 있고, 프로젝트가 필요로 한다면 그렇게 하면 됩니다.
{
"id": "button",
"name": "Button",
"implementations": [
{ "language": "typescript", "framework": "react", "component": "Button", "sourcePath": "src/components/Button.tsx" },
{ "language": "dart", "framework": "flutter", "component": "AppButton", "sourcePath": "lib/widgets/app_button.dart" }
]
}디자인 참조도 마찬가지로 일반적입니다 —tool은 열거형이 아닌 열린 문자열이라, 권한 새로운 디자인 도구를 지원하기 위해 스키마 마이그레이션을 할 일이 없습니다.
{ "tool": "figma", "fileId": "abc123", "nodeId": "12:340", "url": "https://figma.com/file/abc123?node-id=12-340" }전체 주석이 달린 스키마(Zod)는 src/schema/에서, 완성된 예제는 examples/fictional-project/에서 볼 수 있습니다.
결정적 해석
registry_find_by_design_reference와 그 밑에 있는 해석기는 절대 추측하지 않습니다. 아래에 정한 고정된 순서대로 시도하고, 일치가 생기는 첫 번째 전략에서 동작을 멈춥니다.
정확한 디자인 참조 (도구 + 노드/파일/URL/이름)
정확한 레지스트리 id
정확한 표준 이름
명시적 별칭
그 외:
unresolved
전략이 둘 이상의 컴포넌트에 일치하면 해석은 그 자리에서 멈추고 모든 후보와 함께 ambiguous를 보고합니다. 결코 하나를 조용히 골라버리지 않습니다.
// unresolved
{ "status": "unresolved" }
// ambiguous
{ "status": "ambiguous", "strategy": "alias", "candidates": [ /* ... */ ] }
// resolved
{ "status": "resolved", "strategy": "design-reference", "component": { "id": "button", /* ... */ } }MCP 도구
읽기
도구 | 용도 |
| 레지스트리 메타데이터를 가져옵니다(스키마 버전, 프로젝트, 디자핏 도구). |
| 컴포넌트 목록을 가져옵니다(선택적으로 상태/태그로 필터). |
| 정확한 id로 컴포넌트 하나를 가져옵니다. |
| id/이름/별칭/태그를 대상으로 결정적인 부분 문자열 검색을 합니다. |
| 디자인 도구 참조를 컴포넌트로 해석합니다(위 참고). |
| 토큰 목록을 나열합니다. 선택적으로 카테고리 필터. |
| 정확한 id로 토큰 하나를 가져옵니다. |
| UI 패턴 목록을 가져옵니다. |
| 정확한 id로 패턴 하나를 가져옵니다. |
| 전체 구조화된 규칙 문서를 가져옵니다. |
| 전체 레지스트리의 검증을 실행합니다(아래 참고). |
쓰기
도구 | 용도 |
| 새 스타터 레지스트리를 만듭니다. 이미 있으면 실패합니다(단, |
| 컴포넌트를 만듭니다. 같은 ip가 있으면 실패합니다. |
| 기존 컴포넌트를 패치합니다. id가 없다면 실패합니다. |
| 컴포넌트를 커피세이트로 표시합니다(파괴적 삭제는 없음). |
| 토큰에 대한 동일한 생성/업데이트 계약입니다. |
| 패턴에 대한 동일한 생성/업데이트 계약입니다. |
| 규칙 문서 전체를 교체합니다(전체 목록을 보내세요). |
변경 안전성: 이미 존재하는 id 생성은 오류입니다(대신 update 사용). 존재하지 않는 id의 update는 오류입니다(대신 create 사용). 컴포넌트에는 파괴적 삭제가 없습니다 — registry_deprecate_component를 사용해 git 내역을 보존하세요.
검증
registry_validate(EP측 CLI에서의design-code-registry validate`)는 전체 레지스트리에대해 다음 항목을 검사합니다:
컴포넌트/토큰/패턴/규칙의 중복되는 id
중복된 디자인 참조(같은 Figma 노드를 두 컴포넌트가 차지함)
잘못된 참조(존재하지 않는 컴포넌트를 가리키는 패턴, 아무 것도 가리키지 않는 deprecate
replacedBy, 아무 것도 가리키지 않는 규칙의appliesTo.id)순환 패턴 참조(패턴 A → 관련 패턴 B → 관련 패턴 A)
승인된 컴포넌트의 구현 누락(경고이지 오류는 아님)
{
"valid": false,
"errorCount": 1,
"warningCount": 0,
"issues": [
{ "severity": "error", "code": "BROKEN_REFERENCE", "message": "Pattern \"empty-state\" references component \"buton\", which does not exist.", "location": "pattern:empty-state" }
]
}CLI
MCP 도구에서 사용하는 동일한 RegistryService를 사람에게 제공하는 인터페이스라, 두 사이의 동작이 만나는(엇나가는) 일은 없습니다.
npx design-code-registry-mcp init --name "My Project" --design-tool figma
design-code-registry validate
design-code-registry list components --status approved
design-code-registry list tokens --category color
design-code-registry list patterns
design-code-registry add component --id button --name Button
design-code-registry add token --id color-primary --name "Primary" --category color --value "#3B5BFF"
design-code-registry add pattern --id empty-state --name "Empty State" --components button모든 명령은 특정 레지스트리를 지정하는 -p, --path <path>를 받거나 DESIGN_REGISTRY_PATH 환경 변수를 읽습니다.
설치
npm install -g design-code-registry-mcp
# or, without installing:
npx design-code-registry-mcp initClaude Code 설정
서버를 Claude Code MCP 하에 추가하세요(프로젝트 루트의 .mcp.json 또는 claude mcp add 사용):
{
"mcpServers": {
"design-code-registry": {
"command": "npx",
"args": ["-y", "design-code-registry-mcp"]
}
}
}또는 명시적 레지스트리 경로를 지정합니다(모노레포에서 유용):
{
"mcpServers": {
"design-code-registry": {
"command": "npx",
"args": ["-y", "design-code-registry-mcp", "--registry-path=./packages/design-system/.design/registry"]
}
}
}서버는 stdio를 통해 MCP 호환 클라이언트와 함께 사용할 수 있습니다 — Claude Code는 여러 클라이언트 중 하나일 뿐이며, 서버에 종속되지 않습니다.
Figma MCP 연동
이 서버는 Figma API와 이야기하지도 않고 Figma 파일을 검사하지도 않습니다. 그 역할은 Figma의 자체 MCP 서버에 있습니다. 두 서버는 상보적으로 설계되었습니다:
Figma MCP → design context (fileKey, nodeId, ...) → Design-Code Registry MCP → explicit mapping → AI agent → code전형적인 에이전트 작업 흐름:
에이전트가 Figma MCP에 선택한 노드의
fileKey/nodeId를 요청합니다.에이전트는 해당 식별자로 이 서버의
registry_find_by_design_reference를 호출합니다.resolved이면 에이전트가 반환된 구현을 그대로 재사용합니다.unresolved이면 에이전트는(프로젝트 규칙에 따라) 새 컴포넌트를 제안하고registry_create_component로 등록할 수 있습니다.
다중 프레임워크 예시
하나의 레지스트리가 완전히 다른 코드베이스들의 구현들을 동시에 정의할 수 있습니다:
Button (design concept)
├── React → src/components/Button.tsx
├── Vue → src/components/Button.vue
├── SwiftUI → Sources/Button.swift
└── Flutter → lib/widgets/app_button.dart프로젝트가 다음 중 어떤것을 쓰든 서버의 동작이 바뀌는 일은 없습니다 — 스키마는 language와 framework를 열린 문자열로 취급합니다.
예제 프로젝트
examples/fictional-project/ 에는 가상의 "Aurora Design System"을 위한 완전하고 검증된 예제 레지스트리(Button Input, Card, Card Modali, 두 개의 패턴, 일곱 개의 토큰, 다섯 개의 규칙)가 들어 있습니다. 시작점으로 그곳에 있는 .design/registry/를 복사하거나, 다음을 실행하세요:
cp -r examples/fictional-project/.design .AI 에이전트 사용 계약
이 서버에 연결된 에이전트는 다음을 지켜야 합니다:
재사용할 수 있는 UI 컴포넌트를 만들기 전에 레지스트리를 조회하세요.
매핑이 존재할 수 있는 경우는 먼저 정확한 매핑을 찾고, 절대 추측하지 마세요.
중복 생성 대신 기존 등록 구현을 재사용하세요.
스타일/레이아웃을 생성하기 전에 관련 토큰과 패턴을 읽으세요.
매핑을 지어내기보다
unresolved를 정직하게 보고하세요.registry_find_component/registry_find_by_design_reference에 동등한 것이 이미 존재하면 새 표준 컴포넌트를 만들지 마세요.적절한 기존 컴포넌트가 없을 때만 새 컴포넌트 를 제안하세요.
모든 레지스트리 변경은 뜻하지 않은 부작용이 아닌 명시적이그 의도적인 작업으로 처리하세요.
프로젝트 특정의 Design↔ Code 사실에 대한 실측적으로 레지스트리를 참여하세요.
동시에, 레지스트리는 완벽한 엔지니링 판단을 모두 갖지는 않습니다. 레지스트리가 불완전하거나 더 유지보수 좋은 접근이 확실히 가능할 때, 에이전트는 불완전한 레지스트리를 기계적으로 따르기보다 검증된 레지스트리 사실(verified registry facts)과 추론된 정보 및 권고사항을 구분해 그쪽을 분명히 말해야 합니다.
개발
npm install
npm run build # compile TypeScript → dist/
npm test # build + run the full vitest suite (56 tests, including a real stdio subprocess e2e test)
npm run lint
npm run typecheckPR을 열기 전에 CONTRIBUTING.md에서 이 슬라의 설계 원칙을 확인하세요.
한계 및 향후 개선 예측
오늘날 제공되는 것은 파일 기반 로컬 레지스트리 프로바이더뿐입니다.
RegistryService레이어는 이 프로바이더와 다르게 설계되었기 때문에 MCP 도구 로직을 만지지 않고도 원격/API 기반 프로바이더를 만들 수 있습니다 — 단, 아직 구현되지는 않았습니다.아직 선택적인 HTTP/SSE 전송은 없습니다(stdio만). "첫 버전을 오버엔지니어링하지 않는다"는 원칙에 따른 것입니다.
registry_find_component는 결정적 부분 문자열 검색이며, 순위/퍼지 검색이 아닙니다 — 의도적 설계이지만, 인간이 근사 결과를 기대할 자리에서 너무 느슨한 질의가 결과를 내지 않을 수 있습니다.Figma API 클라이언트 / Sketch / Penpot 클라이언트가 내장되어 있지 않습니다. 이 서버는 Figma MCP와 같은 도구의 일을 중복하지 않도록 의도적으로 그 아래에 자리합니다.
라이선스
This server cannot be installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
Connect AI coding agents to Anima Playground, Figma, and your design system.
Give your AI agent a persistent map of your project's structure, dependencies, and bugs.
UI design from prompts, screenshots, and URLs for AI coding agents and theme tokens.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/mrasadi/design-code-registry-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server