Figma — pegar design e assets via MCP
Skill para trabalhar com links do Figma usando o MCP do Figma (server user-Figma). Dois fluxos:
- Flow 1 — Design/specs: obter código de referência, estrutura, tokens/variáveis e screenshot de um nó.
- Flow 2 — Assets (SVG/imagens): exportar/baixar SVG, PNG, JPG e as imagens originais de um nó.
Pré-requisito
- Server MCP
user-Figma com status ready. Se estiver "needsAuth", chamar mcp_auth desse server e autenticar.
- O usuário precisa fornecer um link de nó específico (com
node-id). Sem node-id, pedir o link do nó selecionado.
Passo 0 — Extrair fileKey e nodeId do link (SEMPRE primeiro)
A partir de https://figma.com/design/:fileKey/:fileName?node-id=1-2:
fileKey = segmento após /design/.
nodeId = valor de node-id, trocando - por : (ex.: 21016-6080 → 21016:6080).
Variações:
- Branch:
https://figma.com/design/:fileKey/branch/:branchKey/:fileName → usar branchKey como fileKey.
- Só funciona em URLs
/design/. /board/ (FigJam), /slides/ e /make/ têm outras ferramentas/regras.
- Se a URL não tiver
node-id, pedir ao usuário o link do nó específico (não adivinhar nodeId).
Exemplo (link deste projeto):
.../design/RNLC1stgG6AljmbLflHgO9/...?node-id=21016-6080
→ fileKey = RNLC1stgG6AljmbLflHgO9, nodeId = 21016:6080.
Flow 1 — Design / specs
Objetivo: entender e/ou implementar um nó (tela, componente) do Figma.
1.1 — Contexto principal (get_design_context)
Ferramenta primária para design-to-code. Retorna código de referência + screenshot + metadados e URLs dos assets referenciados.
server: user-Figma
toolName: get_design_context
arguments: {
"fileKey": "<fileKey>",
"nodeId": "<nodeId>",
"clientLanguages": "javascript,css,typescript",
"clientFrameworks": "react" // ou "preact", "vue", "unknown"
}
- O código retornado é referência, não final — adaptar aos padrões do projeto (ex.: VTEX IO → CSS Handles +
vtex-io-component; deco.cx → deco-section/deco-island).
- Por padrão inclui screenshot. Só usar
excludeScreenshot: true para poupar contexto quando o usuário pedir.
1.2 — Estrutura do nó (get_metadata) — opcional
Use para ter um mapa (IDs, tipos, nomes, posições, tamanhos) e então chamar get_design_context em nós filhos específicos. Bom para telas grandes.
server: user-Figma
toolName: get_metadata
arguments: { "fileKey": "<fileKey>", "nodeId": "<nodeId>" }
- Sem
nodeId: lista as páginas de topo do arquivo (útil quando não se sabe onde entrar).
1.3 — Tokens / variáveis (get_variable_defs)
Cores, tipografia, espaçamentos, etc. definidos como variáveis no nó.
server: user-Figma
toolName: get_variable_defs
arguments: { "fileKey": "<fileKey>", "nodeId": "<nodeId>" }
Ex. retorno: { "icon/default/secondary": "#949494", "spacing/md": 16 } — mapear para tokens/tema do projeto.
1.4 — Screenshot de referência (get_screenshot)
Imagem do nó para comparar com a implementação.
server: user-Figma
toolName: get_screenshot
arguments: { "fileKey": "<fileKey>", "nodeId": "<nodeId>", "maxDimension": 1024 }
- Retorna URL curta + instruções
curl (preferível; gasta menos contexto). Aumente maxDimension para inspecionar detalhes.
1.5 — Tipografia e espaçamentos EXATOS (obrigatório)
Nunca "chutar" fontes, tamanhos, margens ou espaçamentos. Extrair os valores reais do Figma e usá-los exatamente.
Fonte de verdade (ordem de prioridade)
get_variable_defs — pega tokens/variáveis do nó (cores, tipografia, espaçamentos). Se o valor estiver como variável (ex.: spacing/md = 16, font/body/size = 14), usar o token, não o número solto.
get_design_context — o código de referência traz os valores computados de CSS (font-family, font-size, font-weight, line-height, letter-spacing, margin, padding, gap). Extrair daqui o que não for variável.
get_metadata — posições e tamanhos (x, y, width, height) de cada nó; útil para conferir espaçamentos/margens entre elementos quando não há auto-layout.
Tipografia — capturar SEMPRE estes campos
| Propriedade |
CSS de destino |
Observações |
| Font family |
font-family |
Nome exato do Figma; garantir que a fonte está carregada no projeto (senão fica fallback errado) |
| Font size |
font-size |
Em px do Figma; converter para rem/token se o projeto usar |
| Font weight |
font-weight |
Mapear estilo do Figma → peso numérico (Regular=400, Medium=500, SemiBold=600, Bold=700) |
| Font style |
font-style |
italic quando aplicável |
| Line height |
line-height |
Figma em px ou %; preservar (usar unitless só se o projeto exigir) |
| Letter spacing |
letter-spacing |
Figma em px ou %; converter % para em quando fizer sentido |
| Text transform / decoration |
text-transform, text-decoration |
uppercase, underline, etc. |
- Estilos de texto (Text styles): se o texto usar um estilo compartilhado do design system, preferir mapear para o token/estilo equivalente do projeto em vez de valores soltos.
- Família de fonte: confirmar que o
font-family existe no projeto (import/@font-face/tema). Se não existir, avisar o usuário antes de implementar.
Espaçamentos / margens — capturar de forma exata
| Propriedade |
Origem no Figma |
gap (entre itens) |
Auto-layout → "item spacing" |
padding (interno) |
Auto-layout → padding (top/right/bottom/left) |
margin (entre blocos) |
Distância entre nós (via get_metadata/coords) ou auto-layout do pai |
| Larguras/alturas fixas |
width/height do nó (get_metadata) |
- Preferir auto-layout do Figma como fonte de
gap/padding (valores intencionais do designer).
- Sem auto-layout, medir pela diferença de coordenadas (
x/y, width/height) entre os nós no get_metadata.
- Respeitar a grid/escala de espaçamento do projeto: se o design usa 4/8px e há tokens (
spacing/*), usar o token correspondente em vez do número cru.
- Não arredondar "no olho": usar o valor do Figma (arredondar só se o projeto tiver regra de escala explícita, e então mapear ao token mais próximo).
Checklist antes de implementar
Flow 2 — Assets (SVG / imagens)
Objetivo: exportar/baixar SVG, PNG/JPG ou as imagens originais de um nó (ícones, logos, fotos).
2.1 — Baixar assets (download_assets)
server: user-Figma
toolName: download_assets
arguments: {
"fileKey": "<fileKey>",
"nodeId": "<nodeId>",
"defaultFormat": "svg" // "svg" | "png" | "jpg" | "pdf" (opcional)
// "defaultScale": 2 // 0.01–4, só p/ png/jpg quando pedir resolução específica
}
Retorna:
- Um render exportado do nó (no formato pedido).
- A lista de imagens originais (JPEG/PNG/GIF/WebP) usadas como fills no subtree (até 20). Cada uma traz o
format real → salvar com a extensão correta.
Regras:
- SVG (ícones/vetores/logos): passar
defaultFormat: "svg".
- Foto/bitmap (banner, foto de produto): usar as imagens originais retornadas, ou
defaultFormat: "png"/"jpg".
- Só definir
defaultFormat/defaultScale quando o usuário pedir formato/resolução específicos; sem isso, respeita as export settings do nó (senão PNG @1x).
- URLs são temporárias — baixar imediatamente.
2.2 — Salvar no projeto
- Baixar cada asset a partir da URL retornada (via
curl/download) para a pasta correta do projeto:
- VTEX IO:
assets/ do app ou onde o time versiona ícones/imagens.
- deco.cx:
static/ (ou pasta de assets do projeto).
- Nomear de forma semântica (ex.:
icon-cart.svg, banner-pdp-mobile.png).
- Confirmar com o usuário antes de criar arquivos (regra geral de permissão).
2.3 — SVG inline (opcional)
Se o objetivo é usar o SVG inline no código (componente React/Preact), abrir o conteúdo do .svg baixado e colar como JSX, ou referenciar o arquivo. Otimizar (remover metadados do Figma) se necessário.
Fluxo recomendado (design-to-code a partir de um link)
- Passo 0: extrair
fileKey + nodeId.
get_design_context para código + screenshot.
get_variable_defs para tokens de tipografia/espaçamento/cor (usar tokens quando existirem).
- Capturar tipografia e espaçamentos exatos (seção 1.5): fontes, tamanhos, pesos, line-height, letter-spacing,
gap/padding/margin.
download_assets (svg/png) para ícones e imagens do nó.
- Salvar assets no projeto (com confirmação) e implementar adaptando aos padrões da stack (
vtex-io-component / vtex-css / deco-section), aplicando os valores exatos capturados.
- Comparar com
get_screenshot para conferir fidelidade (tipografia e espaçamentos incluídos).
Ferramentas MCP (server user-Figma)
| Ferramenta |
Uso |
get_design_context |
Código de referência + screenshot + metadados (principal) |
get_metadata |
Estrutura (IDs/tipos/tamanhos) para navegar nós |
get_variable_defs |
Tokens/variáveis (cor, tipografia, espaçamento) |
get_screenshot |
Imagem do nó para referência/comparação |
download_assets |
Exportar SVG/PNG/JPG/PDF + imagens originais |
mcp_auth |
Autenticar o server Figma quando needsAuth |
Regras
- Sempre extrair
fileKey/nodeId do link antes de chamar qualquer ferramenta; nunca adivinhar nodeId.
- Tipografia e espaçamentos: nunca estimar. Extrair
font-family, font-size, font-weight, font-style, line-height, letter-spacing, gap, padding e margin do Figma (variáveis > design context > metadata) e aplicar os valores exatos. Ver seção 1.5.
- Confirmar que a família de fonte existe no projeto antes de implementar; se faltar, avisar o usuário.
- Código do
get_design_context é referência — adaptar à stack (não colar cru).
- Baixar assets logo após receber as URLs (expiram).
- Pedir confirmação antes de criar/salvar arquivos no projeto.
- Só
/design/ nesta skill; FigJam (/board/), Slides (/slides/) e Make (/make/) não são cobertos aqui.
- Integra com:
vtex-io-component, vtex-css, deco-section, deco-island para implementar o design extraído.
1---2name: figma-assets3description: Extrai design e assets do Figma via MCP a partir de um link — contexto/specs (get_design_context, metadata, variables, screenshot), tipografia exata (font-family, tamanho, peso, estilo, line-height, letter-spacing), espaçamentos/margens/padding, e download de SVG/imagens (download_assets). Use quando o usuário enviar um link do Figma e pedir para pegar o design, specs, tokens, fontes, espaçamentos, exportar SVG, baixar imagens/ícones ou implementar uma tela a partir do Figma.4---56# Figma — pegar design e assets via MCP78Skill para trabalhar com links do Figma usando o **MCP do Figma** (server `user-Figma`). Dois fluxos:910- **Flow 1 — Design/specs:** obter código de referência, estrutura, tokens/variáveis e screenshot de um nó.11- **Flow 2 — Assets (SVG/imagens):** exportar/baixar SVG, PNG, JPG e as imagens originais de um nó.1213## Pré-requisito1415- Server MCP `user-Figma` com status **ready**. Se estiver "needsAuth", chamar `mcp_auth` desse server e autenticar.16- O usuário precisa fornecer um **link de nó específico** (com `node-id`). Sem `node-id`, pedir o link do nó selecionado.1718## Passo 0 — Extrair `fileKey` e `nodeId` do link (SEMPRE primeiro)1920A partir de `https://figma.com/design/:fileKey/:fileName?node-id=1-2`:2122- `fileKey` = segmento após `/design/`.23- `nodeId` = valor de `node-id`, trocando `-` por `:` (ex.: `21016-6080` → `21016:6080`).2425Variações:26- Branch: `https://figma.com/design/:fileKey/branch/:branchKey/:fileName` → usar `branchKey` como `fileKey`.27- Só funciona em URLs `/design/`. `/board/` (FigJam), `/slides/` e `/make/` têm outras ferramentas/regras.28- Se a URL **não** tiver `node-id`, pedir ao usuário o link do nó específico (não adivinhar `nodeId`).2930**Exemplo (link deste projeto):**31`.../design/RNLC1stgG6AljmbLflHgO9/...?node-id=21016-6080`32→ `fileKey = RNLC1stgG6AljmbLflHgO9`, `nodeId = 21016:6080`.3334---3536# Flow 1 — Design / specs3738Objetivo: entender e/ou implementar um nó (tela, componente) do Figma.3940## 1.1 — Contexto principal (`get_design_context`)4142Ferramenta primária para design-to-code. Retorna código de referência + screenshot + metadados e URLs dos assets referenciados.4344```45server: user-Figma46toolName: get_design_context47arguments: {48 "fileKey": "<fileKey>",49 "nodeId": "<nodeId>",50 "clientLanguages": "javascript,css,typescript",51 "clientFrameworks": "react" // ou "preact", "vue", "unknown"52}53```5455- O código retornado é **referência**, não final — adaptar aos padrões do projeto (ex.: VTEX IO → CSS Handles + `vtex-io-component`; deco.cx → `deco-section`/`deco-island`).56- Por padrão inclui screenshot. Só usar `excludeScreenshot: true` para poupar contexto quando o usuário pedir.5758## 1.2 — Estrutura do nó (`get_metadata`) — opcional5960Use para ter um mapa (IDs, tipos, nomes, posições, tamanhos) e então chamar `get_design_context` em nós filhos específicos. Bom para telas grandes.6162```63server: user-Figma64toolName: get_metadata65arguments: { "fileKey": "<fileKey>", "nodeId": "<nodeId>" }66```6768- Sem `nodeId`: lista as páginas de topo do arquivo (útil quando não se sabe onde entrar).6970## 1.3 — Tokens / variáveis (`get_variable_defs`)7172Cores, tipografia, espaçamentos, etc. definidos como variáveis no nó.7374```75server: user-Figma76toolName: get_variable_defs77arguments: { "fileKey": "<fileKey>", "nodeId": "<nodeId>" }78```7980Ex. retorno: `{ "icon/default/secondary": "#949494", "spacing/md": 16 }` — mapear para tokens/tema do projeto.8182## 1.4 — Screenshot de referência (`get_screenshot`)8384Imagem do nó para comparar com a implementação.8586```87server: user-Figma88toolName: get_screenshot89arguments: { "fileKey": "<fileKey>", "nodeId": "<nodeId>", "maxDimension": 1024 }90```9192- Retorna URL curta + instruções `curl` (preferível; gasta menos contexto). Aumente `maxDimension` para inspecionar detalhes.9394## 1.5 — Tipografia e espaçamentos EXATOS (obrigatório)9596Nunca "chutar" fontes, tamanhos, margens ou espaçamentos. Extrair os valores reais do Figma e usá-los exatamente.9798### Fonte de verdade (ordem de prioridade)991001. **`get_variable_defs`** — pega tokens/variáveis do nó (cores, **tipografia**, **espaçamentos**). Se o valor estiver como variável (ex.: `spacing/md = 16`, `font/body/size = 14`), **usar o token**, não o número solto.1012. **`get_design_context`** — o código de referência traz os valores computados de CSS (font-family, font-size, font-weight, line-height, letter-spacing, margin, padding, gap). Extrair daqui o que não for variável.1023. **`get_metadata`** — posições e tamanhos (x, y, width, height) de cada nó; útil para conferir espaçamentos/margens entre elementos quando não há auto-layout.103104### Tipografia — capturar SEMPRE estes campos105106| Propriedade | CSS de destino | Observações |107|---|---|---|108| Font family | `font-family` | Nome exato do Figma; garantir que a fonte está carregada no projeto (senão fica fallback errado) |109| Font size | `font-size` | Em `px` do Figma; converter para `rem`/token se o projeto usar |110| Font weight | `font-weight` | Mapear estilo do Figma → peso numérico (Regular=400, Medium=500, SemiBold=600, Bold=700) |111| Font style | `font-style` | `italic` quando aplicável |112| Line height | `line-height` | Figma em px ou %; preservar (usar `unitless` só se o projeto exigir) |113| Letter spacing | `letter-spacing` | Figma em px ou %; converter % para `em` quando fizer sentido |114| Text transform / decoration | `text-transform`, `text-decoration` | uppercase, underline, etc. |115116- **Estilos de texto (Text styles)**: se o texto usar um estilo compartilhado do design system, preferir mapear para o token/estilo equivalente do projeto em vez de valores soltos.117- **Família de fonte**: confirmar que o `font-family` existe no projeto (import/`@font-face`/tema). Se não existir, avisar o usuário antes de implementar.118119### Espaçamentos / margens — capturar de forma exata120121| Propriedade | Origem no Figma |122|---|---|123| `gap` (entre itens) | Auto-layout → "item spacing" |124| `padding` (interno) | Auto-layout → padding (top/right/bottom/left) |125| `margin` (entre blocos) | Distância entre nós (via `get_metadata`/coords) ou auto-layout do pai |126| Larguras/alturas fixas | `width`/`height` do nó (`get_metadata`) |127128- Preferir **auto-layout** do Figma como fonte de `gap`/`padding` (valores intencionais do designer).129- Sem auto-layout, medir pela diferença de coordenadas (`x`/`y`, `width`/`height`) entre os nós no `get_metadata`.130- Respeitar a **grid/escala de espaçamento** do projeto: se o design usa 4/8px e há tokens (`spacing/*`), usar o token correspondente em vez do número cru.131- Não arredondar "no olho": usar o valor do Figma (arredondar só se o projeto tiver regra de escala explícita, e então mapear ao token mais próximo).132133### Checklist antes de implementar134135- [ ] `font-family`, `font-size`, `font-weight`, `font-style`, `line-height`, `letter-spacing` de cada texto capturados do Figma136- [ ] Fonte(s) disponível(is) no projeto (import/@font-face/tema) — senão, avisar137- [ ] `gap`/`padding`/`margin` vindos de auto-layout ou coords, não estimados138- [ ] Tokens/variáveis usados quando existem (`get_variable_defs`)139- [ ] Conferência visual final com `get_screenshot`140141---142143# Flow 2 — Assets (SVG / imagens)144145Objetivo: exportar/baixar **SVG**, **PNG/JPG** ou as **imagens originais** de um nó (ícones, logos, fotos).146147## 2.1 — Baixar assets (`download_assets`)148149```150server: user-Figma151toolName: download_assets152arguments: {153 "fileKey": "<fileKey>",154 "nodeId": "<nodeId>",155 "defaultFormat": "svg" // "svg" | "png" | "jpg" | "pdf" (opcional)156 // "defaultScale": 2 // 0.01–4, só p/ png/jpg quando pedir resolução específica157}158```159160Retorna:1611. Um **render exportado** do nó (no formato pedido).1622. A lista de **imagens originais** (JPEG/PNG/GIF/WebP) usadas como fills no subtree (até 20). Cada uma traz o `format` real → salvar com a extensão correta.163164Regras:165- **SVG** (ícones/vetores/logos): passar `defaultFormat: "svg"`.166- **Foto/bitmap** (banner, foto de produto): usar as **imagens originais** retornadas, ou `defaultFormat: "png"`/`"jpg"`.167- Só definir `defaultFormat`/`defaultScale` quando o usuário pedir formato/resolução específicos; sem isso, respeita as export settings do nó (senão PNG @1x).168- **URLs são temporárias** — baixar imediatamente.169170## 2.2 — Salvar no projeto1711721. Baixar cada asset a partir da URL retornada (via `curl`/download) para a pasta correta do projeto:173 - VTEX IO: `assets/` do app ou onde o time versiona ícones/imagens.174 - deco.cx: `static/` (ou pasta de assets do projeto).1752. Nomear de forma semântica (ex.: `icon-cart.svg`, `banner-pdp-mobile.png`).1763. Confirmar com o usuário **antes de criar arquivos** (regra geral de permissão).177178## 2.3 — SVG inline (opcional)179180Se o objetivo é usar o SVG **inline** no código (componente React/Preact), abrir o conteúdo do `.svg` baixado e colar como JSX, ou referenciar o arquivo. Otimizar (remover metadados do Figma) se necessário.181182---183184## Fluxo recomendado (design-to-code a partir de um link)1851861. Passo 0: extrair `fileKey` + `nodeId`.1872. `get_design_context` para código + screenshot.1883. `get_variable_defs` para tokens de tipografia/espaçamento/cor (usar tokens quando existirem).1894. **Capturar tipografia e espaçamentos exatos** (seção 1.5): fontes, tamanhos, pesos, line-height, letter-spacing, `gap`/`padding`/`margin`.1905. `download_assets` (`svg`/`png`) para ícones e imagens do nó.1916. Salvar assets no projeto (com confirmação) e implementar adaptando aos padrões da stack (`vtex-io-component` / `vtex-css` / `deco-section`), aplicando os valores exatos capturados.1927. Comparar com `get_screenshot` para conferir fidelidade (tipografia e espaçamentos incluídos).193194## Ferramentas MCP (server `user-Figma`)195196| Ferramenta | Uso |197|---|---|198| `get_design_context` | Código de referência + screenshot + metadados (principal) |199| `get_metadata` | Estrutura (IDs/tipos/tamanhos) para navegar nós |200| `get_variable_defs` | Tokens/variáveis (cor, tipografia, espaçamento) |201| `get_screenshot` | Imagem do nó para referência/comparação |202| `download_assets` | Exportar SVG/PNG/JPG/PDF + imagens originais |203| `mcp_auth` | Autenticar o server Figma quando `needsAuth` |204205## Regras206207- **Sempre** extrair `fileKey`/`nodeId` do link antes de chamar qualquer ferramenta; nunca adivinhar `nodeId`.208- **Tipografia e espaçamentos:** nunca estimar. Extrair `font-family`, `font-size`, `font-weight`, `font-style`, `line-height`, `letter-spacing`, `gap`, `padding` e `margin` do Figma (variáveis > design context > metadata) e aplicar os valores exatos. Ver seção 1.5.209- Confirmar que a **família de fonte** existe no projeto antes de implementar; se faltar, avisar o usuário.210- Código do `get_design_context` é referência — adaptar à stack (não colar cru).211- Baixar assets logo após receber as URLs (expiram).212- Pedir confirmação antes de criar/salvar arquivos no projeto.213- Só `/design/` nesta skill; FigJam (`/board/`), Slides (`/slides/`) e Make (`/make/`) não são cobertos aqui.214- Integra com: `vtex-io-component`, `vtex-css`, `deco-section`, `deco-island` para implementar o design extraído.