Skip to main content
Glama

Figma to Flutter MCP Server

by mhmzdev
README.ko.mdโ€ข13 kB
<div align="center"> <img src="docs/images/figma-flutter-mcp.png" alt="ํ…Œ๋งˆ ์„ค์ • ์˜ˆ์‹œ" style="max-width: 100%; height: auto;"> <br> <h1>Figma to Flutter MCP ์„œ๋ฒ„</h1> <h3>Figma์˜ ํ’๋ถ€ํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ”๋”ฉ ์—์ด์ „ํŠธ์—์„œ ํ™œ์šฉํ•˜์„ธ์š”.<br/>Flutter ๋ฐฉ์‹์œผ๋กœ ๋””์ž์ธ์„ ๊ตฌํ˜„ํ•˜์„ธ์š”!</h3> <a href="https://npmcharts.com/compare/figma-flutter-mcp?interval=30"> <img alt="์ฃผ๊ฐ„ ๋‹ค์šด๋กœ๋“œ" src="https://img.shields.io/npm/dm/figma-flutter-mcp.svg"> </a> <a href="https://github.com/mhmzdev/figma-flutter-mcp/blob/main/LICENSE"> <img alt="MIT ๋ผ์ด์„ ์Šค" src="https://img.shields.io/github/license/mhmzdev/figma-flutter-mcp" /> </a> <a href="https://twitter.com/mhmzdev"> <img alt="Twitter" src="https://img.shields.io/twitter/url?url=https%3A%2F%2Fx.com%2Fmhmzdev&label=%40mhmzdev" /> </a> </div> <br> Cursor(์ปค์„œ) ๋˜๋Š” ๊ธฐํƒ€ AI ๊ธฐ๋ฐ˜ ๋„๊ตฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ [MCP ์„œ๋ฒ„](https://modelcontextprotocol.io/)๋ฅผ ํ†ตํ•ด Figma์˜ ํ’๋ถ€ํ•œ ํŒŒ์ผ, ๋ฐ์ดํ„ฐ, ์ปดํฌ๋„ŒํŠธ ๋“ฑ์„ ํ™œ์šฉํ•˜์„ธ์š”. ## ๐Ÿ“‹ ๋ชฉ์ฐจ - [๐Ÿฆ‹ Observable Flutter #70](#-observable-flutter-70) - [๐ŸŽฅ ์งง์€ ๋น„๋””์˜ค ๋ฐ๋ชจ](#-์งง์€-๋น„๋””์˜ค-๋ฐ๋ชจ) - [๐Ÿ“ ์‹œ์ž‘ํ•˜๊ธฐ](#-์‹œ์ž‘ํ•˜๊ธฐ) - [๐Ÿ“š ์ž‘๋™ ๋ฐฉ์‹](#-์ž‘๋™-๋ฐฉ์‹--์ž์„ธํžˆ-๋ณด๊ธฐ) - [๐Ÿ› ๏ธ ์‚ฌ์šฉ๋ฒ•](#-์‚ฌ์šฉ๋ฒ•) - [๐Ÿ”‘ Figma API ํ‚ค](#-figma-api-ํ‚ค) - [๐Ÿน Cursor์—์„œ MCP ์„ค์ •](#-cursor์—์„œ-mcp-์„ค์ •) - [๐Ÿš€ ๋กœ์ปฌ ํ…Œ์ŠคํŠธ ๋น ๋ฅธ ์‹œ์ž‘](#-๋กœ์ปฌ-ํ…Œ์ŠคํŠธ-๋น ๋ฅธ-์‹œ์ž‘) - [๐Ÿงฑ ๊ธฐ๋ณธ ์›Œํฌํ”Œ๋กœ์šฐ](#-๊ธฐ๋ณธ-์›Œํฌํ”Œ๋กœ์šฐ) - [๐Ÿค– AI ์ฝ”๋”ฉ ์—์ด์ „ํŠธ ๋„์›€๋ง](#-ai-์ฝ”๋”ฉ-์—์ด์ „ํŠธ-๋„์›€๋ง) - [โš ๏ธ SVG ์—์…‹์ด ํ™”๋ฉด ์ƒ์„ฑ์—์„œ ์ž‘๋™ํ•˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ](#-svg-์—์…‹์ด-ํ™”๋ฉด-์ƒ์„ฑ์—์„œ-์ž‘๋™ํ•˜์ง€-์•Š๋Š”-๊ฒฝ์šฐ) - [๐Ÿงฐ MCP ๋„๊ตฌ](#-mcp-๋„๊ตฌ) - [โš ๏ธ ๊ณ ์ง€์‚ฌํ•ญ](#-๊ณ ์ง€์‚ฌํ•ญ) - [๐Ÿ™Œ๐Ÿผ ๊ฐ์‚ฌ์˜ ๋ง](#-๊ฐ์‚ฌ์˜-๋ง) - [๐Ÿงฑ ๊ธฐํƒ€ ํ”„๋ ˆ์ž„์›Œํฌ](#-๊ธฐํƒ€-ํ”„๋ ˆ์ž„์›Œํฌ) - [๐Ÿ”‘ ๋ผ์ด์„ ์Šค](#-๋ผ์ด์„ ์Šค) - [๐Ÿ™‹โ€โ™‚๏ธ ์ž‘์„ฑ์ž](#-์ž‘์„ฑ์ž) - [Muhammad Hamza](#muhammad-hamza) ## ๐Ÿฆ‹ Observable Flutter #70 ํ–ฅ์ƒ๋œ ์„ค๋ช…๊ณผ ๋ฐ๋ชจ์™€ ํ•จ๊ป˜ Observable Flutter์— ์†Œ๊ฐœ๋˜์—ˆ์Šต๋‹ˆ๋‹ค: <a href="https://www.youtube.com/live/d7qrvytOxSA?si=ESY8hPJpQm_OY4Ye"> <img src="https://i.ytimg.com/vi/d7qrvytOxSA/hq720.jpg?sqp=-oaymwEnCNAFEJQDSFryq4qpAxkIARUAAIhCGAHYAQHiAQoIGBACGAY4AUAB&rs=AOn4CLAtjlrlbNDcV_MQ-_MHJN3KAgwpKw" alt="Observable Flutter Figma to Flutter MCP" style="max-width: 100%; height: 300px;"> </a> ## ๐ŸŽฅ ์งง์€ ๋น„๋””์˜ค ๋ฐ๋ชจ Figma Flutter MCP์˜ ๊ฑฐ์˜ ๋ชจ๋“  ๊ธฐ๋Šฅ์„ ์‹ค์ œ Figma ๋””์ž์ธ์œผ๋กœ ์‹œ์—ฐํ–ˆ์Šต๋‹ˆ๋‹ค. - ์˜์–ด: https://youtu.be/lJlfOfpl2sI - ์šฐ๋ฅด๋‘/ํžŒ๋””: https://youtu.be/mepPWpIZ61M ## ๐Ÿ“ [์‹œ์ž‘ํ•˜๊ธฐ](docs/getting-started.md) ์ž์„ธํ•œ ์‹œ์ž‘ ๊ฐ€์ด๋“œ๋Š” [getting started](docs/getting-started.md) ๋ฌธ์„œ๋ฅผ ์ฐธ๊ณ ํ•˜๊ฑฐ๋‚˜, ๋น ๋ฅด๊ฒŒ ํ™•์ธํ•˜๋ ค๋ฉด [๋ฐ๋ชจ ์˜์ƒ](https://youtu.be/lJlfOfpl2sI)์„ ๋ณด์„ธ์š”. ์ฒซ ๋ฆด๋ฆฌ์Šค์ด๋ฏ€๋กœ ๊ฐœ์„ ์˜ ์—ฌ์ง€๊ฐ€ ๋งŽ์Šต๋‹ˆ๋‹ค. ๋ฌด์—‡์„ ๊ฐœ์„ ํ•˜๊ฑฐ๋‚˜ ์ž‘์—…ํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ๋ณด๋ ค๋ฉด [issues](https://github.com/mhmzdev/figma-flutter-mcp/issues)๋ฅผ ํ™•์ธํ•ด ์ฃผ์„ธ์š”. ## ๐Ÿ“š ์ž‘๋™ ๋ฐฉ์‹ | [์ž์„ธํžˆ ๋ณด๊ธฐ](docs/figma-flutter-mcp.md) 1. [์ปดํฌ๋„ŒํŠธ/์œ„์ ฏ](src/extractors/components/) - โœ… Figma ๋…ธ๋“œ ๋ฐ์ดํ„ฐ ์ถ”์ถœ: ๋ ˆ์ด์•„์›ƒ, ์Šคํƒ€์ผ, ํฌ๊ธฐ, ์ƒ‰์ƒ, ํ…์ŠคํŠธ ์ฝ˜ํ…์ธ  ๋“ฑ - โœ… ๊ตฌ์กฐ ๋ถ„์„: ์ž์‹ ์š”์†Œ, ์ค‘์ฒฉ ์ปดํฌ๋„ŒํŠธ, ์‹œ๊ฐ์  ์ค‘์š”๋„ - โœ… ๊ฐ€์ด๋“œ ์ œ๊ณต: Flutter ์œ„์ ฏ ๋ฐ ๊ตฌํ˜„ ํŒจํ„ด ์ œ์•ˆ - โŒ ์‹ค์ œ Flutter ์ฝ”๋“œ ํŒŒ์ผ์€ ์ƒ์„ฑํ•˜์ง€ ์•Š์Œ 2. [์Šคํฌ๋ฆฐ](src/extractors/screens/) - โœ… ์Šคํฌ๋ฆฐ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ์ถ”์ถœ: ๊ธฐ๊ธฐ ์œ ํ˜•, ๋ฐฉํ–ฅ, ํฌ๊ธฐ - โœ… ์„น์…˜ ์‹๋ณ„: ํ—ค๋”, ํ‘ธํ„ฐ, ๋‚ด๋น„๊ฒŒ์ด์…˜, ์ฝ˜ํ…์ธ  ์˜์—ญ - โœ… ๋‚ด๋น„๊ฒŒ์ด์…˜ ๋ถ„์„: ํƒญ ๋ฐ”, ์•ฑ ๋ฐ”, ๋“œ๋กœ์–ด, ๋‚ด๋น„๊ฒŒ์ด์…˜ ์š”์†Œ - โœ… Scaffold ๊ตฌ์„ฑ ๊ฐ€์ด๋“œ: Flutter ์Šคํฌ๋ฆฐ ๊ตฌ์กฐ ์ œ์•ˆ - โŒ ์‹ค์ œ Flutter ์Šคํฌ๋ฆฐ์€ ์ƒ์„ฑํ•˜์ง€ ์•Š์Œ ์ด ๋„๊ตฌ๋Š” AI๊ฐ€ Flutter ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๋„๋ก ๋•๋Š” ์—ญํ• ์ž…๋‹ˆ๋‹ค. ์ฆ‰, ํ”„๋กฌํ”„ํŠธ๋ฅผ ๋” ์ž˜ ์ž‘์„ฑํ• ์ˆ˜๋ก ๋” ์ข‹์€ ๊ฒฐ๊ณผ๋ฅผ ์–ป์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ## ๐Ÿ› ๏ธ ์‚ฌ์šฉ๋ฒ• ๋‹ค์Œ ๋‹จ๊ณ„๋Š” ์ตœ์†Œํ•œ์˜ ์‚ฌ์šฉ ๋ฐ ์„ค์ • ๋ฐฉ๋ฒ•์„ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค: ### ๐Ÿ”‘ Figma API ํ‚ค ์ด ์„œ๋ฒ„๋ฅผ ์‚ฌ์šฉํ•˜๋ ค๋ฉด Figma ์•ก์„ธ์Šค ํ† ํฐ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. Figma API ์•ก์„ธ์Šค ํ† ํฐ ์ƒ์„ฑ ๋ฐฉ๋ฒ•์€ [์—ฌ๊ธฐ](https://help.figma.com/hc/en-us/articles/8085703771159-Manage-personal-access-tokens)์—์„œ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ### ๐Ÿน Cursor์—์„œ MCP ์„ค์ • FIGMA API KEY๊ฐ€ ์ค€๋น„๋˜๋ฉด, Cursor์—์„œ MCP๋ฅผ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค: 1. CMD + Shift + P (Windows๋Š” Ctrl) 2. "Open MCP Settings" ์ž…๋ ฅ 3. "Add new MCP" ํด๋ฆญ 4. ์•„๋ž˜ JSON ๊ฐ์ฒด๋ฅผ ๋ถ™์—ฌ๋„ฃ๊ธฐ #### MacOS/Linux ``` { "mcpServers": { "Figma Flutter MCP": { "command": "npx", "args": ["-y", "figma-flutter-mcp", "--figma-api-key=YOUR-API-KEY", "--stdio"] } } } ``` #### Windows ``` { "mcpServers": { "Figma Flutter MCP": { "command": "cmd", "args": ["/c", "npx", "-y", "figma-flutter-mcp", "--figma-api-key=YOUR-API-KEY", "--stdio"] } } } ``` > ์ฐธ๊ณ : ์ด MCP๋ฅผ `npm` ํŒจํ‚ค์ง€๋กœ ์„ค์น˜ํ–ˆ๋‹ค๋ฉด ์ตœ์‹  ๋ฒ„์ „์„ ์œ ์ง€ํ•˜์„ธ์š”. ๋•Œ๋•Œ๋กœ ์ด์ „ ๋ฒ„์ „์ด ์บ์‹œ๋˜์–ด "๋„๊ตฌ ํ˜ธ์ถœ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์Œ" ๋˜๋Š” "Figma API ํ‚ค ์„ค์ •์ด ์ž‘๋™ํ•˜์ง€ ์•Š์Œ" ๊ฐ™์€ ์˜ค๋ฅ˜๊ฐ€ ๊ณ„์† ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ### ๐Ÿš€ ๋กœ์ปฌ ํ…Œ์ŠคํŠธ ๋น ๋ฅธ ์‹œ์ž‘ ๋กœ์ปฌ ์„ค์ • ์‹œ, ์—ฌ๋Ÿฌ๋ถ„์˜ ๋กœ์ปฌ ์„œ๋ฒ„์™€ ๋ฒ„์ „์ด ๋™๊ธฐํ™”๋˜์–ด ์žˆ๋Š”์ง€ ํ™•์ธํ•˜์„ธ์š”. ๊ฐ€๋” `npm i`๊ฐ€ ์ „์—ญ์œผ๋กœ ์„œ๋ฒ„๋ฅผ ์„ค์น˜ํ•˜์—ฌ ๋กœ์ปฌ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ๋ฎ์–ด์จ ์—…๋ฐ์ดํŠธ๊ฐ€ ๋ฐ˜์˜๋˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. #### 0. ์„ ํ–‰ ์กฐ๊ฑด(Prerequisites) - Node.js 18+ - Figma API ํ‚ค(์•ก์„ธ์Šค ํ† ํฐ) - MCP๋ฅผ ์ง€์›ํ•˜๋Š” Cursor AI IDE - Flutter SDK #### 1. ๋ ˆํฌ์ง€ํ† ๋ฆฌ ํด๋ก  ``` # ํ”„๋กœ์ ํŠธ ํด๋ก  ๋˜๋Š” ๋‹ค์šด๋กœ๋“œ git clone <your-repo-url> figma-flutter-mcp cd figma-flutter-mcp # ์˜์กด์„ฑ ์„ค์น˜ npm install ``` #### 2. ์„ค์ • `.env`๋ฅผ ์‚ฌ์šฉํ•ด ๋‹ค์–‘ํ•œ ๊ฐ’์„ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. [.env.example](.env.example)๋ฅผ ์ฐธ๊ณ ํ•˜์„ธ์š”. #### MacOS/Linux ``` { "mcpServers": { "figma-flutter-mcp": { "command": "node", "args": [ "/Path/to/figma-flutter-mcp/dist/server.mjs", "--figma-api-key=YOUR_API_KEY", "--stdio" ] } } } ``` #### Windows ``` { "mcpServers": { "figma-flutter-mcp": { "command": "node", "args": [ "/Path/to/figma-flutter-mcp/dist/server.mjs", "--figma-api-key=YOUR_API_KEY", "--stdio" ] } } } ``` > ์ฐธ๊ณ : ์œ„ JSON์„ ํ˜„์žฌ ํ”„๋กœ์ ํŠธ์—์„œ๋งŒ ์‚ฌ์šฉํ•˜๋ ค๋ฉด `.cursor-mcp/config.json`์— ์„ค์ •ํ•˜์„ธ์š”. ๋‹จ, API_KEY๊ฐ€ ํฌํ•จ๋˜๋ฏ€๋กœ ๋ฐ˜๋“œ์‹œ `.gitignore`์— ์ถ”๊ฐ€ํ•˜์—ฌ ๋ฒ„์ „์— ํฌํ•จ๋˜์ง€ ์•Š๋„๋ก ํ•˜์„ธ์š”. #### 3. ๋นŒ๋“œ & ์‹คํ–‰ ``` # ๊ฐœ๋ฐœ ๋ชจ๋“œ(์ž๋™ ์žฌ์‹œ์ž‘) npm run dev # ํ”„๋กœ๋•์…˜ ๋ชจ๋“œ npm run build ``` ์ด์ œ MCP ์„ค์ •์—์„œ ์„œ๋ฒ„๊ฐ€ ์‹คํ–‰ ์ค‘์ธ์ง€, ๋„๊ตฌ๊ฐ€ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ์ง€ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ## ๐Ÿงฑ ๊ธฐ๋ณธ ์›Œํฌํ”Œ๋กœ์šฐ ### ๐Ÿค– AI ์ฝ”๋”ฉ ์—์ด์ „ํŠธ ๋„์›€๋ง ๋” ๋‚˜์€ ๊ฒฐ๊ณผ๋ฅผ ์œ„ํ•ด ์‚ฌ์šฉ ์ค‘์ธ AI ์ฝ”๋”ฉ ์—์ด์ „ํŠธ์— ๋งž์ถฐ ๋‹ค์Œ ํŒŒ์ผ์— ๋ช‡ ๊ฐ€์ง€ ์ง€์นจ์„ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค: - Cursor: `.cursor/rules/fluttering.mdc` - Claude: `CLAUDE.md` - Gemini CLI: `GEMINI.md` ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด AI ์—์ด์ „ํŠธ๊ฐ€ MCP ์ถœ๋ ฅ๋ฌผ์„ ํ™œ์šฉํ•ด Flutter ์ฝ”๋“œ๊ฐ€ ํ”„๋กœ์ ํŠธ ์š”๊ตฌ ์‚ฌํ•ญ๊ณผ ๊ตฌ์กฐ์— ๋งž๋„๋ก ๋ณด์žฅํ•ฉ๋‹ˆ๋‹ค. ์ œ๊ฐ€ ํ…Œ์ŠคํŠธ์— ์‚ฌ์šฉํ•œ [Cursor ๊ทœ์น™ ์˜ˆ์‹œ](docs/cursor_rules_example.md)๋„ ์ฐธ๊ณ ํ•ด ๋ณด์„ธ์š”. 1. **ํ…Œ๋งˆ & ํƒ€์ดํฌ๊ทธ๋ž˜ํ”ผ ์„ค์ •**: ๊ฐ€์žฅ ํšจ์œจ์ ์ธ ๋ฐฉ๋ฒ•์€ Figma์— ํ…Œ๋งˆ ์ƒ‰์ƒ๊ณผ ํƒ€์ดํฌ๊ทธ๋ž˜ํ”ผ ์ƒ˜ํ”Œ์ด ์žˆ๋Š” ๋‘ ๊ฐœ์˜ ํ”„๋ ˆ์ž„์„ ๋‘๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์˜ˆ์‹œ: ![ํ…Œ๋งˆ ์„ค์ • ์˜ˆ์‹œ](docs/images/theme-frame.png) ![ํƒ€์ดํฌ๊ทธ๋ž˜ํ”ผ ์„ค์ • ์˜ˆ์‹œ](docs/images/text-style-frame.png) - Figma ๋ฐ์Šคํฌํ†ฑ: ํ”„๋ ˆ์ž„ ์„ ํƒ ํ›„ CMD + L - Figma ์›น: ํ”„๋ ˆ์ž„ ์„ ํƒ ํ›„ URL ๋ณต์‚ฌ > ๐Ÿ’ก ํžŒํŠธ: ์œ ํšจํ•œ URL์—๋Š” FILE ID์™€ NODE ID ํŒŒ๋ผ๋ฏธํ„ฐ๊ฐ€ ํฌํ•จ๋ฉ๋‹ˆ๋‹ค. ``` "<figma_link>์—์„œ Flutter ํ…Œ๋งˆ๋ฅผ ์„ค์ •ํ•˜์„ธ์š”. Colors์™€ Typography๋ฅผ ํฌํ•จํ•ฉ๋‹ˆ๋‹ค." ``` 2. **์œ„์ ฏ ์ƒ์„ฑ**: ๊ฐ€์žฅ ํšจ์œจ์ ์ธ ๋ฐฉ๋ฒ•์€ Figma์˜ COMPONENTS๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์˜ˆ์‹œ: ![๋ฒ„ํŠผ](docs/images/button.png) ์ด ์˜ˆ์‹œ๋Š” 8๊ฐœ์˜ ๋ณ€ํ˜•(variants)์„ ๊ฐ€์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๋ณ€ํ˜•์„ ์‚ฌ์šฉํ• ์ง€ ์—ฌ๋ถ€๋ฅผ ํ”„๋กฌํ”„ํŠธ๋กœ ์ง€์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ``` "์ด ์œ„์ ฏ์„ Flutter๋กœ ์ƒ์„ฑํ•˜์„ธ์š” <figma_link>. ์ง€๊ธˆ์€ 2๊ฐœ์˜ ๋ณ€ํ˜•๋งŒ ์„ค์ •ํ•˜๊ณ , ์ฝ”๋“œ ๊ฐ€๋…์„ฑ์„ ์œ„ํ•ด ํŒŒ์ผ์„ ๋” ์ž‘์€ ๋‹จ์œ„๋กœ ๋‚˜๋ˆ ์ฃผ์„ธ์š”." ``` ๋งŒ์•ฝ Figma์— COMPONENTS๊ฐ€ ์—†๋‹ค๋ฉด, FRAME์„ ์‚ฌ์šฉํ•ด๋„ ๋ฉ๋‹ˆ๋‹ค. ์ด ํ”„๋ ˆ์ž„์„ ์œ„์ ฏ์œผ๋กœ ๋งŒ๋“ค๊ณ  ์‹ถ๋‹ค๊ณ  ์•Œ๋ ค์ฃผ๋ฉด ๋‚˜๋จธ์ง€๋Š” ๋„๊ตฌ๊ฐ€ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค. 3. **์ „์ฒด ์Šคํฌ๋ฆฐ ์ƒ์„ฑ**: IMAGE ASSETS๊ฐ€ ์žˆ์œผ๋ฉด `assets/`์— ๋‚ด๋ณด๋‚ด๊ณ  `pubspec.yaml`์— ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค. ``` "์ด Figma ๋งํฌ๋กœ ์ „์ฒด ์Šคํฌ๋ฆฐ์„ ์ƒ์„ฑํ•˜์„ธ์š” <figma_link>. ์ฝ”๋“œ ๊ฐ€๋…์„ฑ์„ ์œ„ํ•ด ํŒŒ์ผ์„ ๋” ์ž‘์€ ๋‹จ์œ„๋กœ ๋‚˜๋ˆ ์ฃผ์„ธ์š”." ``` 4. **์—์…‹ ๋‚ด๋ณด๋‚ด๊ธฐ**: - ์ด๋ฏธ์ง€ ์—์…‹: ์Šคํฌ๋ฆฐ ์ƒ์„ฑ ์‹œ ์ž๋™์œผ๋กœ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. ``` "Figma์—์„œ ์ด ์ด๋ฏธ์ง€ ์—์…‹์„ ๋‚ด๋ณด๋‚ด์„ธ์š” <figma_link>" ``` - SVG ์—์…‹: ์ž๋™์œผ๋กœ ์ž‘๋™ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์•„๋ž˜ ๋‚ด์šฉ์„ ์ฐธ๊ณ ํ•˜์„ธ์š”. ``` "Figma์—์„œ ์ด๊ฒƒ์„ SVG ์—์…‹์œผ๋กœ ๋‚ด๋ณด๋‚ด์„ธ์š”: <figma_link>" ``` #### โš ๏ธ SVG ์—์…‹์ด ํ™”๋ฉด ์ƒ์„ฑ์—์„œ ์ž‘๋™ํ•˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ Figma์—์„œ ๋ฒกํ„ฐ์—๋Š” ์•„์ด์ฝ˜๊ณผ ํŽœ ๋„๊ตฌ๋กœ ๋งŒ๋“  ๋„ํ˜•์ด ํฌํ•จ๋˜์–ด ์žˆ์–ด ๋Œ€๋Ÿ‰ ๋‚ด๋ณด๋‚ด๊ธฐ ์‹œ ์˜๋„ํ•˜์ง€ ์•Š์€ ๋…ธ๋“œ๋ฅผ ํ•จ๊ป˜ ๋‚ด๋ณด๋‚ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. SVG๋Š” ๋ณ„๋„๋กœ ๋‚ด๋ณด๋‚ด๋Š” ๊ฒƒ์„ ๊ถŒ์žฅํ•ฉ๋‹ˆ๋‹ค. ์ด ๊ณผ์ •์€ ์—ฌ์ „ํžˆ `assets/svg/` ๋””๋ ‰ํ† ๋ฆฌ์— ์—์…‹์„ ์ €์žฅํ•˜๊ณ  `pubspec.yaml`์„ ์—…๋ฐ์ดํŠธํ•ด ์ฃผ๊ธฐ ๋•Œ๋ฌธ์— ๋งŽ์€ ์‹œ๊ฐ„์„ ์ ˆ์•ฝํ•ด ์ค๋‹ˆ๋‹ค. ## ๐Ÿงฐ MCP ๋„๊ตฌ ์—์…‹ ๊ด€๋ จ: - `export_flutter_assets`: ์Šคํฌ๋ฆฐ ์ƒ์„ฑ๊ณผ ํ•จ๊ป˜ ์‚ฌ์šฉํ•˜๋Š” ๊ฐœ๋ณ„ ์ด๋ฏธ์ง€ ์—์…‹ ๋„๊ตฌ - `export_svg_flutter_assets`: SVG ์—์…‹ ๋‚ด๋ณด๋‚ด๊ธฐ ์ „์šฉ ๋„๊ตฌ ์œ„์ ฏ ๊ด€๋ จ: - `analyze_figma_component`: Figma์˜ type=COMPONENT ๋˜๋Š” ์‚ฌ์šฉ์ž ์ง€์ • FRAME ๋ถ„์„ - `list_component_variants`: Figma์˜ type=COMPONENT_SET(์œ„์ ฏ ๋ณ€ํ˜•) ๋ชฉ๋ก - `inspect_component_structure`: ์ค‘์ฒฉ๋œ COMPONENTS ๋˜๋Š” FRAMES ๊ตฌ์กฐ ๋ณด๊ธฐ ์Šคํฌ๋ฆฐ ๊ด€๋ จ: - `analyze_full_screen`: type=FRAME ์ „์ฒด ์Šคํฌ๋ฆฐ ๋ถ„์„ ๋ฐ ์—์…‹(์ด๋ฏธ์ง€) ๋‚ด๋ณด๋‚ด๊ธฐ - `inspect_screen_structure`: ๋ ˆ์ด์•„์›ƒ ๋ฐ ํ™”๋ฉด ๊ตฌํ˜„์— ํ•„์š”ํ•œ ์ •๋ณด ํ™•์ธ ## โš ๏ธ ๊ณ ์ง€์‚ฌํ•ญ - **Figma ๋””์ž์ธ**: Figma API๋กœ ๋…ธ๋“œ์™€ ์ƒ์„ธ ์ •๋ณด๋ฅผ ๊ฐ€์ ธ์˜ค๊ธฐ ๋•Œ๋ฌธ์—, ์ž๋™ ๋ ˆ์ด์•„์›ƒ, ํ”„๋ ˆ์ž„ ์‚ฌ์šฉ(๊ทธ๋ฃน๋ณด๋‹ค), ์ „๋ฐ˜์˜ ์ผ๊ด€๋œ ์ •๋ ฌ ๋“ฑ ๋””์ž์ธ ํ’ˆ์งˆ์ด ์ข‹์„์ˆ˜๋ก ๊ฒฐ๊ณผ๊ฐ€ ์ข‹์•„์ง‘๋‹ˆ๋‹ค. - **์‚ฌ์šฉ ์‚ฌ๋ก€**: ํ˜„์žฌ ๋‹จ๊ณ„์—์„œ๋Š” ํ™•์žฅ ๊ฐ€๋Šฅํ•œ ์•ฑ ๊ฐœ๋ฐœ๋ณด๋‹ค๋Š” MVP, ์†Œ๊ทœ๋ชจ ์‹คํ—˜, ์„ค๋ช…์šฉ ์ž‘์—…์— ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์„ ๊ถŒ์žฅํ•ฉ๋‹ˆ๋‹ค. - **๋ ˆ์ดํŠธ ๋ฆฌ๋ฐ‹**: ๊ณผ๋„ํ•œ ์‚ฌ์šฉ์€ Figma ๋ ˆ์ดํŠธ ๋ฆฌ๋ฐ‹(์˜ˆ: HTTP 429)์„ ์œ ๋ฐœํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์„œ๋ฒ„์—๋Š” ๋ฐฑ์˜คํ”„๊ฐ€ ํฌํ•จ๋œ ์žฌ์‹œ๋„๊ฐ€ ์žˆ์ง€๋งŒ, Figma ์ œํ•œ์„ ์šฐํšŒํ•˜์ง€๋Š” ์•Š์Šต๋‹ˆ๋‹ค. ๋ ˆ์ดํŠธ ๋ฆฌ๋ฐ‹์„ ๋งŒ๋‚˜๋ฉด ๋ช‡ ๋ถ„ ๊ธฐ๋‹ค๋ฆฐ ๋’ค ์š”์ฒญ ๋นˆ๋„๋ฅผ ์ค„์ด์„ธ์š”. ## ๐Ÿ™Œ๐Ÿผ ๊ฐ์‚ฌ์˜ ๋ง [Graham Lipsman](https://x.com/glipsman)์˜ [Figma Context MCP](https://github.com/GLips/Figma-Context-MCP)์—์„œ ์˜๊ฐ์„ ๋ฐ›์•„ ๋‹ค์Œ ๊ธฐ๋Šฅ์„ ๋ช…ํ™•ํžˆ ์ œ๊ณตํ•˜๋Š” Figma to Flutter MCP๋ฅผ ๊ฐœ๋ฐœํ•˜๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค: - ์—์…‹ ๋‚ด๋ณด๋‚ด๊ธฐ - ์ƒ‰์ƒ ๋ฐ ํ…Œ๋งˆ ์„ค์ • - ์œ„์ ฏ ํŠธ๋ฆฌ ๋ฐ ์ „์ฒด ํ™”๋ฉด ๋นŒ๋”ฉ ๋” ๋งŽ์€ ๊ธฐ๋Šฅ์ด ๊ณง ์ถ”๊ฐ€๋  ์˜ˆ์ •์ž…๋‹ˆ๋‹ค... ## ๐Ÿงฑ ๊ธฐํƒ€ ํ”„๋ ˆ์ž„์›Œํฌ React, Angular, React Native, Vue ๋˜๋Š” ๊ธฐํƒ€ ํ”„๋ ˆ์ž„์›Œํฌ์šฉ์œผ๋กœ ๊ฐœ๋ฐœํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด, ์ž์„ธํ•œ ๋ฌธ์„œ์ธ [Figma Framework MCP](docs/figma-framework-mcp.md)๋ฅผ ์ฐธ๊ณ ํ•ด ์‹œ์ž‘ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ•ด๋‹น ํ”„๋ ˆ์ž„์›Œํฌ๋ณ„ Figma MCP ์„œ๋ฒ„๋ฅผ ์ง„ํ–‰ ์ค‘์ธ ๋ถ„๋“ค์„ ์—ฌ๊ธฐ์— ์ •๋ฆฌํ•ด ๋‘˜ ์˜ˆ์ •์ž…๋‹ˆ๋‹ค. - ... - ... ## ๐Ÿ”‘ ๋ผ์ด์„ ์Šค ์ด ํ”„๋กœ์ ํŠธ๋Š” MIT ๋ผ์ด์„ ์Šค๋ฅผ ๋”ฐ๋ฆ…๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ [LICENSE](LICENSE.md) ํŒŒ์ผ์„ ํ™•์ธํ•˜์„ธ์š”. ## ๐Ÿ™‹โ€โ™‚๏ธ ์ž‘์„ฑ์ž #### Muhammad Hamza [![LinkedIn Link](https://img.shields.io/badge/Connect-Hamza-blue.svg?logo=linkedin&longCache=true&style=social&label=Connect )](https://www.linkedin.com/in/mhmzdev) ์ œ GitHub ํ”„๋กœํ•„์„ ํŒ”๋กœ์šฐํ•˜์—ฌ ์ตœ์‹  ํ”„๋กœ์ ํŠธ ์—…๋ฐ์ดํŠธ๋ฅผ ๋ฐ›์•„๋ณด์„ธ์š”: [![GitHub Follow](https://img.shields.io/badge/Connect-Hamza-blue.svg?logo=Github&longCache=true&style=social&label=Follow)](https://github.com/mhmzdev) ๋ ˆํฌ๊ฐ€ ๋งˆ์Œ์— ๋“œ์…จ๋‹ค๋ฉด โญ๋กœ ์‘์› ๋ถ€ํƒ๋“œ๋ฆฝ๋‹ˆ๋‹ค! Copyright (c) 2025 MUHAMMAD HAMZA --- ๋””์ž์ธ๊ณผ ์ฝ”๋“œ๋ฅผ ์ž‡๋Š” ๋ชจ๋“  ๋””์ž์ด๋„ˆ์™€ ๊ฐœ๋ฐœ์ž๋ฅผ ์œ„ํ•ด โค๏ธ๋กœ ๋งŒ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค.

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/mhmzdev/figma-flutter-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server