Figma Context MCP
Give your coding agent access to your Figma data. Implement designs in any framework in one-shot.
คำอธิบายจากผู้ทำ (ภาษาอังกฤษตามต้นฉบับ)
Let Claude create and edit fully editable vector nodes on the Figma canvas.
สามเรื่องนี้ไม่รวมเป็นคะแนนเดียว เพราะความเห็น การวัด และความนิยม เป็นคนละเรื่องกัน
ตัวนี้ยังไม่ได้เรียบเรียงเป็นภาษาไทย ด้านล่างคือข้อเท็จจริงที่เราอ่านจาก registry
เลือกโปรแกรม AI ที่คุณใช้ แล้วคัดลอกค่าตั้งไปวาง
FVMCP_CHANNEL, FVMCP_PORTต้องเตรียมก่อน
คุณใช้แอปไหน
เลือกแอปด้านบน เราจำไว้ให้ ครั้งหน้าปุ่มจะขึ้นว่า “ติดตั้งลง …”
เปิด Claude Desktop → Settings → Developer → Edit Config แล้ววางค่านี้ในไฟล์ claude_desktop_config.json
{
"mcpServers": {
"figma-vector": {
"command": "npx",
"args": [
"-y",
"figma-vector-mcp"
],
"env": {
"FVMCP_CHANNEL": "ใส่ค่าของคุณ",
"FVMCP_PORT": "ใส่ค่าของคุณ"
}
}
}
}พิมพ์คำสั่งนี้ใน Terminal
claude mcp add figma-vector --env FVMCP_CHANNEL='ใส่ค่าของคุณ' --env FVMCP_PORT='ใส่ค่าของคุณ' -- npx -y figma-vector-mcpเติมค่าที่เว้นว่างไว้ก่อนรัน
วางในไฟล์ .cursor/mcp.json ของโปรเจกต์ หรือ ~/.cursor/mcp.json
{
"mcpServers": {
"figma-vector": {
"command": "npx",
"args": [
"-y",
"figma-vector-mcp"
],
"env": {
"FVMCP_CHANNEL": "ใส่ค่าของคุณ",
"FVMCP_PORT": "ใส่ค่าของคุณ"
}
}
}
}เบราว์เซอร์จะถามก่อนเปิดแอป จากนั้นแอปแสดงค่าตั้งให้ตรวจแล้วกดยืนยัน ช่อง key เว้นว่างไว้ให้คุณใส่เอง
วางในไฟล์ .vscode/mcp.json ของโปรเจกต์
{
"servers": {
"figma-vector": {
"type": "stdio",
"command": "npx",
"args": [
"-y",
"figma-vector-mcp"
],
"env": {
"FVMCP_CHANNEL": "ใส่ค่าของคุณ",
"FVMCP_PORT": "ใส่ค่าของคุณ"
}
}
}
}เบราว์เซอร์จะถามก่อนเปิดแอป จากนั้นแอปแสดงค่าตั้งให้ตรวจแล้วกดยืนยัน ช่อง key เว้นว่างไว้ให้คุณใส่เอง
ตัวนี้รันในเครื่องคุณ แต่ ChatGPT ต่อได้เฉพาะ server บนอินเทอร์เน็ต ลองเลือกแอปอื่น
ตัวเลือกเก็บในคุกกี้บนเครื่องนี้ ไม่ต้องมีบัญชี
FVMCP_CHANNEL envFVMCP_PORT envค่าตั้งนี้สร้างจากข้อมูลใน registry ของผู้ทำ ถ้าไม่ตรงกับ README ให้เชื่อ README
รันในเครื่องคุณ รายการเครื่องมือจะขึ้นในแอป AI หลังติดตั้ง
เราตรวจจากข้อมูลที่ใครก็เปิดดูได้ ยังไม่ได้อ่านโค้ด ข้อที่ไม่เกี่ยวกับตัวนี้ไม่นับในตัวหาร · ตรวจเมื่อ 6 พ.ย. 2569
ชื่อใน registry ยืนยันด้วยบัญชี GitHub workingmodel ซึ่งเป็นเจ้าของ repo
ยังไม่ได้อ่านข้อมูล repo จาก GitHub
ยังไม่ได้อ่านข้อมูล repo จาก GitHub
ตัวนี้รันบนเครื่องคุณ ไม่มี endpoint บนอินเทอร์เน็ต
ตัวนี้รันบนเครื่อง ใช้ค่าที่ตั้งในเครื่องแทน
รันในเครื่องคุณ เราอ่านรายการเครื่องมือได้เฉพาะตัวที่มี endpoint บนอินเทอร์เน็ต
เทียบกับทุก server ที่ยังใช้งานในหมวดนี้ทั้งทะเบียน ดาวนับเฉพาะเมื่อผู้ลงทะเบียนเป็นเจ้าของ repo
จากการตรวจเบื้องต้นของเรา ผ่าน 1 จาก 1 ข้อที่ตรวจได้ เรายังไม่ได้อ่านโค้ด ก่อนใส่กุญแจหรือ token ให้ดูว่า server ขอสิทธิ์อะไร และเลือกกุญแจที่ทำได้เท่าที่จำเป็น
registry ไม่ได้ระบุว่าต้องใช้กุญแจ แต่บางตัวจะขอให้ล็อกอินตอนใช้ครั้งแรก
รันบนเครื่องของคุณ โปรแกรม AI จะเปิด server ขึ้นมาเองเมื่อใช้ ข้อมูลไม่ต้องผ่านเซิร์ฟเวอร์ของผู้ทำ (ยกเว้นตัวที่ไปเรียกบริการออนไลน์ต่อ)
repo บน GitHub มีการแก้โค้ดล่าสุด – และส่งรุ่นล่าสุด (0.3.3) เข้า registry 14 วันที่ผ่านมา
โปรแกรมที่รองรับ MCP เช่น Claude Desktop, Claude Code, Cursor และ VS Code ตัวนี้ต้องมี Node.js ในเครื่องด้วย
ในหมวดเดียวกันมี Figma Context MCP, Claude Real Video, Figma MCP Server
server หมวดเดียวกันจากผู้ทำคนอื่น เรียงตามดาว
อ่านการ์ด:★ ดาว GitHubiสามเสา: รีวิว · ผลตรวจ · การใช้งานiอัปเดต = วันที่ส่งรุ่นล่าสุดเข้า registryi
Give your coding agent access to your Figma data. Implement designs in any framework in one-shot.
Let any LLM watch a video locally — and search everything it has ever watched.
server ทางการของ Figma ส่งข้อมูลงานออกแบบให้ AI อ่าน เพื่อเปลี่ยนแบบเป็นโค้ดหรืออธิบายแบบได้ตรงขึ้น ต่อผ่านคลาวด์ของ Figma
ส่วนนี้คัดจาก repo ของผู้ทำตามต้นฉบับ PopNx MCP ไม่ได้ตรวจหรือรับรองเนื้อหา ตัด HTML รูปภาพ และสคริปต์ออกแล้ว ลิงก์จะพาออกนอกเว็บ
A Figma plugin + MCP server that lets Claude (or any MCP client) create and manipulate fully-editable vector nodes on the Figma canvas — paths, shapes, gradients, text, effects, image fills, and more — via a local WebSocket relay.
Developed by [Working Model Inc](https://workingmodel.co)
Version 0.3.3 — 58 tools across creation, styling, layout, components, effects, pages, and export.
cursor-talk-to-figma-mcp is great for reading Figma state and creating basic primitives, but it has no vector path creation, gradient, effects, or compositing tools. This plugin fills that gap:
| Capability | cursor-talk-to-figma-mcp | figma-vector-mcp |
|---|---|---|
| Create rectangle / ellipse / frame / text | ✅ | ✅ |
| Create from SVG string | ❌ | ✅ |
Create from path d string | ❌ | ✅ |
| Create polyline / polygon | ❌ | ✅ |
| Gradient fills (linear, radial, angular, diamond) | ❌ | ✅ |
| Image fills (base64 → canvas) | ❌ | ✅ |
| Effects (shadow, blur) | ❌ | ✅ |
| Blend modes | ❌ | ✅ |
| Boolean operations (union, subtract, etc.) | ❌ | ✅ |
| Auto-layout | ❌ | ✅ |
| Components + instances | ❌ | ✅ |
| Font discovery | ❌ | ✅ |
| Node search | ❌ | ✅ |
| Multi-page management | ❌ | ✅ |
| Named node registry | ❌ | ✅ |
| Batch commands (single round-trip) | ❌ | ✅ |
| Auto-reconnect + command queue | ❌ | ✅ |
| Export SVG + PNG | ❌ | ✅ |
Claude (MCP client)
↕ stdio (MCP protocol) server.ts (MCP server) ↕ WebSocket (ws://localhost:3055) socket.ts (relay — channel-based routing) ↕ WebSocket Figma plugin (ui.html ↔ code.js) ↕ postMessage Figma Plugin API → canvas
The socket relay runs locally. The Figma plugin connects and joins a named channel. The MCP server joins the same channel and sends commands. Results flow back the same path.
For AI agents (Claude Code, Cursor, etc.) — the recommended call sequence to start any session:
1. health_check → confirm plugin is connected
Color convention: All RGB values are 0–1 throughout (matching Figma's internal format). r: 1, g: 0, b: 0 = red. Never use 0–255.
Gradient workflow:
1. create_frame({ width, height }) → get frameId
Image fill workflow (with generative AI):
1. Generate image via Replicate/fal.ai → get base64 PNG
Batch compositions — use $prev.id to chain commands without extra round-trips:
{ "commands": [
{ "command": "create_frame", "params": { "width": 400, "height": 300, "name": "Card" } }, { "command": "set_gradient_fill", "params": { "nodeId": "$prev.id", "type": "LINEAR", "stops": [{"color":{"r":0.1,"g":0.1,"b":0.9},"position":0}, {"color":{"r":0.8,"g":0.2,"b":0.5},"position":1}] } }, { "command": "create_text", "params": { "parentId": "$results.0.id", "text": "Hello", "fontSize": 32, "x": 24, "y": 24 } } ]}
Known SVG limits: figma.createNodeFromSvg() strips , gradients, filters, masks, and animations. Use set_gradient_fill for gradients instead of SVG .
Reconnection: If the plugin disconnects, it auto-reconnects with exponential backoff (1s→30s max) and replays queued commands (up to 30s old). No manual intervention needed for short interruptions.
src/figma-plugin/manifest.jsonnpm install -g figma-vector-mcp
bun run socket
Listens on ws://localhost:3055. Auto-start on login (macOS):
./scripts/setup.sh --launchd
# Auto-detect Claude Code / Cursor and write config:
./scripts/setup.sh
./scripts/setup.sh --local
./scripts/setup.sh --hooks
Manual config (~/.claude/settings.json or ~/.cursor/mcp.json):
{
"mcpServers": { "FigmaVectorMCP": { "command": "bunx", "args": ["figma-vector-mcp@latest"], "env": { "FVMCP_CHANNEL": "figma-vector-mcp" } } } }
ws://localhost:3055) → Connectfigma-vector-mcp) → JoinThe plugin saves your last URL and channel — pre-filled on next open. Keep the plugin panel open during your session — closing it terminates the WebSocket connection.
health_check → { "status": "ok", "version": "0.3.3", "currentPage": { ... } }
| Variable | Default | Description |
|---|---|---|
FVMCP_PORT | 3055 | Socket relay port |
FVMCP_CHANNEL | figma-vector-mcp | Channel name — must match the plugin |
FVMCP_TIMEOUT_MS | 10000 | Default command timeout (ms) |
Per-tool timeout overrides: health_check → 3s, export_node_as_png → 30s, export_node_as_svg → 15s, create_batch → 60s.
| Tool | Description | Key Params |
|---|---|---|
health_check | Ping plugin; confirm connectivity | — |
join_channel | Join a named channel | channel |
| Tool | Description | Key Params |
|---|---|---|
create_vector_from_svg | Place editable vector from SVG string | svg, x, y, name, parentId |
create_path | Vector from SVG d path string | d, x, y, fillColor, strokeColor, strokeWeight |
create_polyline | Vector from x,y point pairs | points, closed, strokeColor, strokeWeight |
| Tool | Description | Key Params |
|---|---|---|
create_frame | Container frame | width, height, x, y, fillColor |
create_rectangle | Rectangle | width, height, x, y, fillColor |
create_ellipse | Ellipse / circle | width, height, x, y, fillColor |
create_text | Text node with optional fixed-width column | text, fontSize, fontFamily, fontStyle, fillColor, width, height, textAutoResize |
| Tool | Description | Key Params |
|---|---|---|
set_fill_color | Solid RGBA fill (0–1) | nodeId, r, g, b, a |
set_gradient_fill | Gradient fill — LINEAR, RADIAL, ANGULAR, DIAMOND | nodeId, type, stops, angle, center, gradientTransform |
set_image_fill | Base64 image as fill | nodeId, base64, scaleMode, opacity |
| Tool | Description | Key Params |
|---|---|---|
set_stroke | Full stroke control | nodeId, color, weight, position, dashPattern, lineCap, lineJoin |
set_stroke_color | Quick stroke colour + weight | nodeId, r, g, b, a, weight |
| Tool | Description | Key Params | |
|---|---|---|---|
set_effect | Drop shadow, inner shadow, blur, background blur | nodeId, effects[] (type, color, offset, blur, spread), mode (REPLACE \ | APPEND) |
set_blend_mode | Layer blend mode | nodeId, mode (NORMAL, MULTIPLY, SCREEN, OVERLAY…) |
| Tool | Description | Key Params |
|---|---|---|
set_corner_radius | Corner radius — uniform or per-corner | nodeId, radius or topLeft, topRight, bottomLeft, bottomRight |
set_opacity | Opacity 0–1 | nodeId, opacity |
set_text_style | Modify text properties + text box size | nodeId, fontSize, fontFamily, fontStyle, letterSpacing, lineHeight, textAlign, fillColor, width, height, textAutoResize |
rename_node | Rename a node | nodeId, name |
set_visibility | Show or hide a node | nodeId, visible |
reorder_node | Change Z-order within parent | nodeId, action (BRING_TO_FRONT / SEND_TO_BACK / BRING_FORWARD / SEND_BACKWARD) or index |
move_node | Reposition | nodeId, x, y |
resize_node | Resize | nodeId, width, height |
delete_node | Remove from canvas | nodeId |
clone_node | Duplicate, optionally reposition | nodeId, x, y, parentId |
group_nodes | Group nodes | nodeIds[], name, parentId |
ungroup_nodes | Ungroup | nodeId |
boolean_operation | Union, subtract, intersect, exclude | nodeIds[], operation, name |
create_mask | Clip mask — maskNode clips targetNode | maskNodeId, targetNodeId, name |
| Tool | Description | Key Params |
|---|---|---|
set_auto_layout | Enable / configure auto-layout | nodeId, direction, spacing, padding, primaryAxisAlign, counterAxisAlign, primaryAxisSizingMode, counterAxisSizingMode, wrap |
set_layout_grid | Column / row / grid guides on a frame | nodeId, grids[] (pattern, count, gutterSize, sectionSize, alignment, color) |
batch_set_properties | Bulk update fill/stroke/opacity/position/size | operations[] (nodeId + any subset of properties) |
| Tool | Description | Key Params |
|---|---|---|
create_component | Convert frame/group to component | nodeId, name |
create_instance | Place component instance | componentId, x, y, parentId |
get_components | List all local components | — |
get_library_components | Search local components by name | query |
| Tool | Description | Key Params |
|---|---|---|
get_document_info | Document name, pages, current page children | — |
get_selection | Currently selected nodes | — |
get_node_info | Full node detail: fills, strokes, layout, text, constraints | nodeId |
set_focus | Scroll viewport to node and select it | nodeId |
find_nodes | Search by name and/or type | query, type, pageId, recursive |
get_page_list | All pages | — |
switch_page | Activate a page | pageId or pageName |
create_page | Create a new page | name |
duplicate_frame_to_page | Copy node to another page | nodeId, targetPageId, x, y |
| Tool | Description | Key Params |
|---|---|---|
register_node | Save named alias for a node ID (persists in document) | alias, nodeId |
resolve_node | Look up node ID by alias | alias |
| Tool | Description | Key Params |
|---|---|---|
register_color | Save a named color to the document palette (0–1) | alias, r, g, b, a |
resolve_color | Look up a color by alias | alias |
list_colors | List all registered colors in the document | — |
| Tool | Description | Key Params |
|---|---|---|
get_styles | All local paint and text styles | — |
apply_style | Apply document style to node | nodeId, styleId, styleType |
get_available_fonts | List loadable fonts; filter by name | query |
| Tool | Description | Key Params |
|---|---|---|
export_node_as_svg | Export node as SVG string | nodeId |
| export_node_as_png | Export as base64 PNG | nodeId, scale (default 2)
ตัดมาแค่ช่วงต้น อ่านต่อใน repo