Search

์ƒ˜ํ”Œ

03. ์ƒ˜ํ”Œ โ€” Framelink MCP

์ƒ˜ํ”Œ 1: URL ๊ธฐ๋ฐ˜ ์ปดํฌ๋„ŒํŠธ ๋ณ€ํ™˜

ํ”„๋กฌํ”„ํŠธ

๋‹ค์Œ Figma ๋””์ž์ธ์„ React + Tailwind ์ปดํฌ๋„ŒํŠธ๋กœ ๋งŒ๋“ค์–ด์ค˜. ํŒŒ์ผ์€ src/components/PricingCard.tsx๋กœ ์ €์žฅ. <https://www.figma.com/design/abcXYZ/Design-System?node-id=42-128>
Plain Text
๋ณต์‚ฌ

MCP ํ˜ธ์ถœ

get_figma_data( fileKey="abcXYZ", nodeId="42:128", depth=4 )
Plain Text
๋ณต์‚ฌ

๋ฐ˜ํ™˜ ์˜ˆ์‹œ (์š”์•ฝ)

{ "name": "PricingCard", "type": "FRAME", "layout": { "direction": "column", "padding": 24, "gap": 16 }, "fills": [{ "color": "#FFFFFF" }], "cornerRadius": 12, "children": [ { "type": "TEXT", "text": "Pro", "fontSize": 18, "fontWeight": 700 }, { "type": "TEXT", "text": "$29/mo", "fontSize": 32, "fontWeight": 800 }, ... ] }
JSON
๋ณต์‚ฌ

๊ฒฐ๊ณผ ์ฝ”๋“œ

type PricingCardProps = { plan: string price: string features: string[] } export function PricingCard({ plan, price, features }: PricingCardProps) { return ( <div className="flex flex-col gap-4 rounded-xl bg-white p-6 shadow-md"> <p className="text-lg font-bold text-gray-900">{plan}</p> <p className="text-3xl font-extrabold text-gray-900">{price}</p> <ul className="flex flex-col gap-2"> {features.map(f => <li key={f} className="text-sm text-gray-600">{f}</li>)} </ul> </div> ) }
TypeScript
๋ณต์‚ฌ

์ƒ˜ํ”Œ 2: ์ด๋ฏธ์ง€/์•„์ด์ฝ˜ ๋‹ค์šด๋กœ๋“œ

ํ”„๋กฌํ”„ํŠธ

๋‹ค์Œ Figma ๋…ธ๋“œ์˜ ์•„์ด์ฝ˜๋“ค์„ SVG๋กœ src/assets/icons์— ์ €์žฅํ•ด์ค˜. <https://www.figma.com/design/abcXYZ/Icons?node-id=10-1>
Plain Text
๋ณต์‚ฌ

MCP ํ˜ธ์ถœ

download_figma_images( fileKey="abcXYZ", nodes=[ { nodeId: "10:1", fileName: "search.svg" }, { nodeId: "10:2", fileName: "user.svg" }, ... ], localPath: "src/assets/icons" )
Plain Text
๋ณต์‚ฌ

๊ฒฐ๊ณผ

โ€ข
src/assets/icons/search.svg
โ€ข
src/assets/icons/user.svg
โ€ข
...

์ƒ˜ํ”Œ 3: ํŽ˜์ด์ง€ ๋ ˆ์ด์•„์›ƒ ๋ถ„์„

ํ”„๋กฌํ”„ํŠธ

์ด Figma ํŽ˜์ด์ง€์˜ ๋ ˆ์ด์•„์›ƒ ๊ตฌ์กฐ๋ฅผ ๋ถ„์„ํ•˜๊ณ , Next.js App Router ํด๋” ๊ตฌ์กฐ๋ฅผ ์ œ์•ˆํ•ด์ค˜. ์ฝ”๋“œ๋Š” ๋งŒ๋“ค์ง€ ๋ง๊ณ  ๊ตฌ์กฐ๋งŒ. <https://www.figma.com/design/abcXYZ/Web?node-id=1-2>
Plain Text
๋ณต์‚ฌ

๊ฒฐ๊ณผ (์˜ˆ)

app/ โ”œโ”€โ”€ layout.tsx # Header + Sidebar (๋ชจ๋“  ํŽ˜์ด์ง€ ๊ณตํ†ต) โ”œโ”€โ”€ page.tsx # ๋žœ๋”ฉ โ”œโ”€โ”€ dashboard/ โ”‚ โ”œโ”€โ”€ page.tsx # ๋ฉ”์ธ ๋Œ€์‹œ๋ณด๋“œ โ”‚ โ””โ”€โ”€ [id]/page.tsx # ์ƒ์„ธ โ””โ”€โ”€ settings/ โ””โ”€โ”€ page.tsx
Plain Text
๋ณต์‚ฌ

์ƒ˜ํ”Œ 4: ๋””์ž์ธ ์‹œ์Šคํ…œ ํ† ํฐ ์ถ”์ถœ

ํ”„๋กฌํ”„ํŠธ

๋‹ค์Œ Figma ํŒŒ์ผ์˜ ์ƒ‰์ƒ/ํƒ€์ดํฌ ์‹œ์Šคํ…œ์„ ๋ถ„์„ํ•ด์„œ Tailwind config์˜ theme.extend ํ˜•ํƒœ๋กœ ๋งŒ๋“ค์–ด์ค˜. <https://www.figma.com/design/abcXYZ/Tokens>
Plain Text
๋ณต์‚ฌ

๊ฒฐ๊ณผ

export default { theme: { extend: { colors: { brand: { 50: '#EFF6FF', 500: '#2563EB', 900: '#1E3A8A', }, }, fontSize: { h1: ['32px', { lineHeight: '40px', fontWeight: '700' }], body: ['14px', { lineHeight: '20px' }], }, }, }, }
JavaScript
๋ณต์‚ฌ

์ƒ˜ํ”Œ 5: ๋””์ž์ธ ๊ฒ€ํ†  ์š”์ฒญ

ํ”„๋กฌํ”„ํŠธ

์ด Figma ๋””์ž์ธ์ด ์ ‘๊ทผ์„ฑ(WCAG AA) ๊ด€์ ์—์„œ ๋ฌธ์ œ๊ฐ€ ๋  ๋งŒํ•œ ๋ถ€๋ถ„์„ ์ฐพ์•„์ค˜. ๋Œ€๋น„, ํฐํŠธ ํฌ๊ธฐ, ํ„ฐ์น˜ ํƒ€๊ฒŸ ํฌ๊ธฐ ์œ„์ฃผ๋กœ. <https://www.figma.com/design/abcXYZ/Mobile?node-id=5-10>
Plain Text
๋ณต์‚ฌ

ํ™œ์šฉ

โ€ข
MCP๊ฐ€ ๋…ธ๋“œ ํŠธ๋ฆฌ์—์„œ ์ƒ‰์ƒ/ํฐํŠธ ํฌ๊ธฐ/๋…ธ๋“œ ํฌ๊ธฐ ์ถ”์ถœ
โ€ข
LLM์ด WCAG ๊ธฐ์ค€์— ๋น„์ถ”์–ด ์œ„๋ฐ˜ ํ•ญ๋ชฉ ๋ณด๊ณ 

์ง€๊ธˆ๊ณผ์ผ

์ƒ์„ฑ

#figma-developer-mcp https://www.figma.com/design/hdNt0fB7dYvAZEAwLbW2GG/%EC%A0%9C%EB%AA%A9-%EC%97%86%EC%9D%8C?node-id=1-2&t=TeMJyK8XD9niZx91-11 E:\ALOHA-CLASS\FIGMA-MCP\02.Figma MCP\02.Framelink MCP\Sample\์ง€๊ธˆ๊ณผ์ผ ์ด ๊ฒฝ๋กœ์— index.html css/style.css js/script.js ์ƒ์„ฑํ•ด์„œ ์ฝ”๋“œ ์ƒ์„ฑํ•ด์ค˜
Markdown
๋ณต์‚ฌ

๋ณด์ •

<!-- ์ขŒ์ธก: ๋กœ๊ทธ์ธ + ํšŒ์›๊ฐ€์ž… ์„น์…˜ --> <!-- ์šฐ์ธก: ๋น ๋ฅธ ๋ฉ”๋‰ด --> ์ขŒ์ธก ์šฐ์ธก์ด ์•„๋‹ˆ๋ผ ์ƒ๋‹จ ํ•˜๋‹จ์œผ๋กœ ์ˆ˜์ •ํ•ด์ฃผ๊ณ  ์ƒ๋‹จ์—๋Š” ์™ผ์ชฝ ๋กœ๊ทธ์ธ ์˜ค๋ฅธ์ชฝ ํšŒ์›๊ฐ€์ž… ์„น์…˜์ด์•ผ
Markdown
๋ณต์‚ฌ