MCP 서버를 사용한 Figma React.js 코드 자동 생성
Source: Dev.to
AI‑지원 디자인‑투‑코드 워크플로우로 UI 파이프라인을 더 빠르게 구축하기
현대 제품 팀은 UI 개발이 디자인 속도만큼 빠르게 진행되길 원합니다. Figma 디자이너와 React 엔지니어 간의 핸드오프는 여전히 큰 병목 현상이며, 수동 변환, 픽셀 맞춤, 스타일링 불일치, 재작업이 발생합니다.
Model Context Protocol (MCP)은 이 격차를 메우는 새로운 방식을 제공합니다: Figma 디자인 메타데이터를 받아 자동으로 깔끔하고 프로덕션에 바로 사용할 수 있는 React 컴포넌트를 생성하는 서버‑구동 AI‑파워 파이프라인입니다.
이번 포스트에서는 다음을 살펴봅니다:
- MCP 서버 아키텍처는 어떻게 구성되는가
- 커스텀 Figma MCP 서버가 디자인 토큰, 프레임, 노드를 어떻게 추출하는가
- React.js 코드가 어떻게 생성되는가 (Tailwind, styled‑components, CSS Modules 포함)
- MCP 클라이언트와 LLM을 활용한 실제 예시
- 왜 이 패턴이 디자인‑엔지니어링 자동화의 미래인가
MCP란 무엇인가?
Model Context Protocol (MCP)은 Anthropic이 만든 오픈 프로토콜로, 도구, 데이터 소스, 애플리케이션이 표준화된 “서버”를 통해 AI 모델에 기능을 노출할 수 있게 합니다.
MCP는 외부 시스템(예: Figma)과 AI 모델 사이의 다리 역할을 하며, 구조화된 컨텍스트 변환—예를 들어 디자인 → 코드—을 가능하게 합니다.
MCP 서버는 다음을 노출할 수 있습니다:
- Resources – 파일, 스키마, 노드, 디자인 토큰
- Tools –
getFrame(id),exportComponent()등과 같은 명령 - Events – 디자인 업데이트, 토큰 변경
이 덕분에 MCP는 디자인‑투‑코드 워크플로우 자동화에 최적입니다.
아키텍처: Figma → MCP Server → LLM → React Code
[Figma File]
↓ (API)
[Figma MCP Server]
↓ structured JSON
[LLM / Code Generator]
↓ React output
[React UI Component Library]
MCP 서버는 정규화 역할을 수행합니다—정확한 Figma 메타데이터를 끌어와 LLM에게 올바른 컨텍스트를 제공해 정확한 JSX를 생성하도록 돕습니다.
Figma MCP 서버 구축하기
최소한의 서버는 다음과 같은 툴을 노출합니다:
{
"tools": [
{ "name": "getNode", "description": "Fetch a Figma node by ID" },
{ "name": "getDesignTokens", "description": "Extract global color/text/spacing tokens" },
{ "name": "exportFrameAsReact", "description": "Convert a frame into a JSX component" }
]
}
예시 MCP 서버 (Node.js)
import { Server } from "@modelcontextprotocol/sdk/server";
import { getFigmaNode, extractTokens, generateReact } from "./figma-utils.js";
const server = new Server();
server.tool("getNode", async ({ id }) => {
return await getFigmaNode(id);
});
server.tool("getDesignTokens", async () => {
return await extractTokens();
});
server.tool("exportFrameAsReact", async ({ frameId }) => {
const frame = await getFigmaNode(frameId);
return generateReact(frame);
});
server.start();
이 서버는 이제 구조화된 Figma 데이터를 MCP‑지원 LLM 클라이언트에 제공합니다.
React 코드 생성 방식
MCP 서버가 디자인 JSON을 반환하면, LLM은 이를 다음과 같이 변환합니다:
- 컴포넌트 구조 – Figma 프레임을 React 함수형 컴포넌트에 매핑
- 스타일 – 선택한 스타일링 방식에 따라:
- Tailwind CSS
- CSS Modules
- Styled Components
- 자동 추출 토큰 – 색상, 폰트, 간격을 재사용 가능한 상수로 변환
입력 → 출력 예시
Figma MCP 서버 출력 (단순화)
{
"type": "FRAME",
"name": "ButtonPrimary",
"width": 120,
"height": 40,
"fills": [{ "color": "#0A66C2" }],
"cornerRadius": 8,
"children": [
{
"type": "TEXT",
"characters": "Sign In",
"fontSize": 16,
"color": "#FFFFFF"
}
]
}
생성된 React 컴포넌트
export default function ButtonPrimary() {
return (
<button className="bg-[#0A66C2] rounded-[8px] text-white text-[16px] w-[120px] h-[40px]">
Sign In
</button>
);
}
카드, 대시보드, 모달 등 더 큰 UI도 동일한 방식으로 작동합니다.
MCP + AI의 장점
- 결정론적 컨텍스트 – MCP 서버는 스크린샷이나 비구조화된 설명이 아닌 구조화된 JSON을 제공합니다.
- 반복 가능한 코드 스타일 – 폴더 구조, 네이밍 규칙, 컴포넌트 템플릿, 스타일링 라이브러리, prop 패턴을 고정할 수 있습니다.
- 자동 업데이트 – 디자이너가 속성을 변경하면(예: 버튼 반경 8 px → 6 px) MCP 이벤트가 LLM을 트리거해 코드를 재생성하고, 필요 시 PR을 자동으로 생성합니다.
- 팀 전체 일관성 – 모든 컴포넌트가 동일한 디자인 토큰과 기본 패턴을 상속합니다.
MCP 클라이언트에서 서버 사용하기
const response = await client.callTool("exportFrameAsReact", {
frameId: "12345"
});
console.log(response.output);
이 호출은 생성된 파일 경로(예: /src/components/ButtonPrimary.jsx)를 반환합니다. 이를 확장해 자동 PR 생성이나 Storybook 동기화도 가능합니다.
디자인‑투‑코드 워크플로우가 바뀌는 이유
| 기존 핸드오프 | MCP‑구동 핸드오프 |
|---|---|
| 수동 슬라이스 | 자동 추출 |
| 모호한 명세 | 구조화된 디자인 메타데이터 |
| 픽셀 불일치 | 토큰 기반 일관성 |
| 시간(시간) → 일수 | 초 |
| 반복 재작업 | 필요 시 재생성 |
이는 UI 엔지니어링을 위한 “팩토리 모델”이며, 예측 가능하고 감사 가능하며 자동화된 방식입니다.
다음 단계는?
Figma MCP 서버에 다음 기능을 추가해 보세요:
- 자동 생성된 Storybook 스토리
- 접근성 검사(ARIA)
- 변형 → React props 매핑
- AutoLayout에서 추출한 반응형 브레이크포인트
- AI‑지원 레이아웃 보정