MCP Design System Extractor
Extrai informações de componentes, incluindo HTML, estilos e metadados, de sistemas de design do Storybook.
Documentação
MCP Design System Extractor
Um servidor Model Context Protocol (MCP) que extrai informações de componentes de design systems Storybook. Conecta-se a instâncias do Storybook e extrai HTML, estilos e metadados de componentes.

Instalação
Usando Claude CLI (Recomendado)
claude mcp add design-system npx mcp-design-system-extractor@latest \
--env STORYBOOK_URL=http://localhost:6006
Com certificado autoassinado:
claude mcp add design-system npx mcp-design-system-extractor@latest \
--env STORYBOOK_URL=https://my-storybook.example.com \
--env NODE_TLS_REJECT_UNAUTHORIZED=0
Usando npm
npm install -g mcp-design-system-extractor
Em seguida, configure no seu cliente MCP (veja Variáveis de Ambiente).
A partir do código-fonte
git clone https://github.com/freema/mcp-design-system-extractor.git
cd mcp-design-system-extractor
npm install && npm run build
npm run setup # Interactive setup for Claude Desktop
Dependências principais
- Puppeteer: Usa Chrome headless para renderização dinâmica de componentes JavaScript
- Chrome/Chromium: Necessário para o Puppeteer (gerenciado automaticamente no Docker)
- Funciona com distribuições Storybook compiladas
Recursos
- Listar Componentes: Obtenha todos os componentes disponíveis do seu Storybook com modo compacto
- Extrair HTML: Obtenha o HTML renderizado de qualquer componente (modo assíncrono ou síncrono)
- Buscar Componentes: Encontre componentes por nome, título, categoria ou finalidade
- Dependências de Componentes: Analise quais componentes são usados internamente em outros componentes
- Informações de Tema: Extraia o tema do design system (cores, espaçamento, tipografia)
- Análise de CSS Externo: Busque e analise arquivos CSS para extrair design tokens
- Fila de Trabalhos Assíncronos: Operações de longa duração são executadas em segundo plano com rastreamento de trabalhos
Variáveis de Ambiente
| Variável | Descrição | Padrão |
|---|---|---|
STORYBOOK_URL | URL da sua instância do Storybook | http://localhost:6006 |
NODE_TLS_REJECT_UNAUTHORIZED | Defina como 0 para ignorar a verificação de certificado SSL (para certificados autoassinados) | 1 |
Exemplo com certificado autoassinado:
{
"mcpServers": {
"design-system": {
"command": "node",
"args": ["/path/to/dist/index.js"],
"env": {
"STORYBOOK_URL": "https://my-storybook.example.com",
"NODE_TLS_REJECT_UNAUTHORIZED": "0"
}
}
}
}
Uso
Consulte DEVELOPMENT.md para instruções detalhadas de configuração.
Ferramentas Disponíveis (9 no total)
Ferramentas Principais
-
list_components
- Lista todos os componentes disponíveis da instância do Storybook
- Use
compact: truepara saída mínima (reduz o tamanho da resposta) - Filtre pelo parâmetro
category - Suporta paginação com
pageepageSize(padrão: 20)
-
get_component_html
- Extrai HTML de uma story específica de componente
- Assíncrono por padrão: Retorna
job_id, usejob_statuspara consultar os resultados - Defina
async: falsepara modo síncrono (usa o parâmetrotimeout) - Use
variantsOnly: truepara obter a lista de variantes disponíveis (síncrono, rápido) includeStyles: trueopcional para extração de CSS (CSS do Storybook é filtrado)- Formato do ID da story:
"component-name--story-name"ou apenas"component-name"(resolve automaticamente para a variante padrão)
-
search_components
- Busca componentes por nome, título, categoria ou finalidade
query: Termo de busca (use"*"para todos)purpose: Encontre por função ("inputs de formulário", "navegação", "feedback", "botões", etc.)searchIn: "name", "title", "category" ou "all" (padrão)- Suporta paginação com
pageepageSize
Ferramentas de Análise de Componentes
- get_component_dependencies
- Analisa o HTML renderizado para encontrar quais outros componentes são usados internamente
- Detecta componentes React, web components e padrões de classes CSS
- Requer formato de ID de story:
"component-name--story-name"
Ferramentas de Design System
-
get_theme_info
- Extrai o tema do design system (cores, espaçamento, tipografia, breakpoints)
- Obtém propriedades/variáveis customizadas de CSS
- Use
includeAll: truepara todas as variáveis CSS
-
get_external_css
- PADRÃO: Retorna apenas design tokens + estatísticas do arquivo (evita limites de tokens)
- Extrai e categoriza tokens: cores, espaçamento, tipografia, sombras
- Use
includeFullCSS: truesomente quando precisar do conteúdo CSS completo - Protegido por segurança: aceita apenas URLs do mesmo domínio do Storybook
Ferramentas de Gerenciamento de Trabalhos
-
job_status
- Verifica o status de um trabalho assíncrono
- Retorna:
status,result(quando concluído),error(quando falhou) - Consulte após chamar
get_component_htmlno modo assíncrono
-
job_cancel
- Cancela um trabalho na fila ou em execução
- Retorna se o cancelamento foi bem-sucedido
-
job_list
- Lista todos os trabalhos com seus status
- Filtre por
status: "all" (padrão), "active" (na fila/em execução), "completed" - Retorna lista de trabalhos + estatísticas da fila
Exemplo de Uso
// List all components (compact mode recommended)
await list_components({ compact: true });
// Search for components
await search_components({ query: "button", searchIn: "name" });
// Find components by purpose
await search_components({ purpose: "form inputs" });
// Get variants for a component
await get_component_html({
componentId: "button",
variantsOnly: true
});
// Returns: { variants: ["primary", "secondary", "disabled"] }
// Get HTML (async mode - default)
await get_component_html({ componentId: "button--primary" });
// Returns: { job_id: "job_xxx", status: "queued" }
// Poll for result
await job_status({ job_id: "job_xxx" });
// Returns: { status: "completed", result: { html: "...", classes: [...] } }
// Get HTML (sync mode)
await get_component_html({
componentId: "button--primary",
async: false,
timeout: 30000
});
// Returns: { html: "...", classes: [...] }
// Get HTML with styles
await get_component_html({
componentId: "button--primary",
async: false,
includeStyles: true
});
// Check all running jobs
await job_list({ status: "active" });
// Extract theme info
await get_theme_info({ includeAll: false });
// Get design tokens from CSS
await get_external_css({
cssUrl: "https://my-storybook.com/assets/main.css"
});
Dicas de Uso para Assistentes de IA
- Comece pela descoberta: Use
list_componentscomcompact: true - Obtenha as variantes primeiro: Use
get_component_htmlcomvariantsOnly: true - Use assíncrono para HTML: O modo assíncrono padrão evita timeouts em componentes grandes
- Consulte job_status: Verifique a conclusão do trabalho antes de ler os resultados
- Busque por finalidade: Use
search_componentscom o parâmetropurpose
Exemplos de Prompts
Após a conexão, você pode usar prompts em linguagem natural com o Claude:

Descoberta de Componentes:
Show me all available button components in the design system
Construindo Novos Recursos:
I need to create a user profile card. Find relevant components
from the design system and show me their HTML structure.
Análise do Design System:
Extract the color palette and typography tokens from the design system.
I want to ensure my new component matches the existing styles.
Migração de Componentes:
Get the HTML and styles for the "alert" component. I need to
recreate it in a different framework while keeping the same look.
Fluxo de Trabalho com Múltiplas Ferramentas:
First list all form-related components, then get the HTML for
the input and select components. I'm building a registration form.
Como Funciona
Conecta-se ao Storybook via endpoints /index.json e /iframe.html. Usa Puppeteer com Chrome headless para renderização dinâmica de JavaScript. Operações de longa duração usam uma fila de trabalhos em memória com no máximo 2 trabalhos simultâneos e TTL de 1 hora para trabalhos concluídos.
Solução de Problemas
- Certifique-se de que o Storybook está em execução e que
STORYBOOK_URLestá correto - Use
list_componentsprimeiro para ver os componentes disponíveis - Para componentes grandes, use o modo assíncrono (padrão) e consulte
job_status - Verifique o endpoint
/index.jsondiretamente no navegador - Erros de certificado SSL: Defina
NODE_TLS_REJECT_UNAUTHORIZED=0para certificados autoassinados - Consulte DEVELOPMENT.md para solução de problemas detalhada
Requisitos
- Node.js 20+
- Chrome/Chromium (para Puppeteer)
- Instância do Storybook em execução (veja abaixo as versões suportadas)
Versões suportadas do Storybook
Storybook 7, 8, 9 e 10. O servidor lê o índice de stories de
/index.json, com fallback para /stories.json, e renderiza as stories através de
/iframe.html?id=<storyId> — endpoints que permaneceram estáveis nas quatro
versões principais.
Storybook 6 e versões anteriores não são suportados: eles são anteriores ao /index.json e usam
um esquema de ID de story diferente.
Tanto um servidor de desenvolvimento (npm run storybook) quanto um Storybook estático compilado servido
via HTTP funcionarão.
Desenvolvimento
Consulte DEVELOPMENT.md para instruções detalhadas de desenvolvimento.
Autor
Criado por Tomáš Grasl
Licença
MIT