Documentação · Servidor MCP

MCP do cliente VIU

Como conectar o Claude ao catálogo VIU e usar as 12 ferramentas e os 3 roteiros de trabalho: componentes de UI, estilos web, ícones e fontes.

Baixar PDF Conectar versão 1.0.0 · atualizado em 14/10/2026

Visão geral

O MCP do cliente VIU (servidor viu-catalogo, versão 1.0.0) dá ao Claude acesso ao catálogo VIU em quatro acervos: componentes de UI, estilos web, ícones e fontes. Ele oferece 12 ferramentas e 3 roteiros de trabalho (prompts), e está disponível para contas do plano Pro.

AcervoO que o Claude recebeFerramentas
Componentes de UINome, descrição, tags, prévia, dependências e o prompt completo com código e exemplos de uso; versão Kotlin / Compose Multiplatform quando existecatalog_status, search_components, get_component, list_tags
Estilos webDesign systems de sites reais: paleta, tipografia, espaçamento e componentes, em DESIGN.md, Tailwind v4, variáveis CSS ou tokens DTCGsearch_styles, get_style, list_style_filters
ÍconesSVG pronto (currentColor, 1em), licença, autor e componente Reactsearch_icons, get_icon, list_icon_collections
FontesPesos, eixos, licença, import CSS, download, pares usados em sites reaissearch_fonts, get_font

O catálogo é atualizado continuamente. Por isso o Claude deve sempre buscar de novo em cada conversa, em vez de reaproveitar ids ou código que lembra.

Conexão e autenticação

O endereço do servidor é https://api.virtues.now/vui/mcp, com transporte Streamable HTTP e respostas JSON. O servidor só aceita POST e não abre stream SSE nem guarda sessão.

Forma de entrarComo funcionaQuando usar
OAuth (login do VIU)O cliente recebe 401 com resource_metadata, abre o login do VIU e obtém um token de acesso (viuo_…, vale 1 hora) e um de renovação (viur_…, vale 30 dias). Escopo: mcpConectores do claude.ai e outros clientes com OAuth
Chave no cabeçalhoAuthorization: Bearer viu_… ou X-API-Key: viu_…. A chave é gerada no perfil do siteClaude Code, Claude Desktop e clientes que mandam cabeçalho
Chave na URLhttps://api.virtues.now/vui/k/<chave>/mcpClientes que não conseguem mandar cabeçalho

Exemplo no Claude Code:

claude mcp add --transport http viu https://api.virtues.now/vui/mcp \
  --header "Authorization: Bearer viu_SUA_CHAVE"

Regras do protocolo:

  • Uma mensagem JSON-RPC por requisição. Lotes (arrays) são recusados com erro -32600.
  • Corpo de no máximo 1 MB.
  • Métodos suportados: initialize, ping, tools/list, tools/call, prompts/list, prompts/get e notificações.
  • A resposta de initialize traz as instruções de uso do servidor, que o Claude recebe automaticamente.
  • A conta precisa estar no plano Pro. Outras contas recebem 403.

Regras de uso para o Claude

A regra central: buscar é grátis e abrir um componente gasta cota. O Claude escolhe pela busca e abre só o que vai usar.

  1. Comece com catalog_status para ver o tamanho do catálogo e a cota restante.
  2. Busque sempre nesta conversa. Não reaproveite ids, nomes ou código de conversas anteriores ou da memória: o catálogo muda o tempo todo.
  3. Busque em inglês, pelo papel da peça (hero, navbar, pricing, testimonial, footer, cta, feature, form) e pelo estilo (glass, dark, gradient, 3d, minimal). Termos comuns em português são traduzidos automaticamente (rodapé → footer, preços → pricing, depoimentos → testimonial).
  4. Prefira resultados com code: true. Use has_code: true na busca para filtrar.
  5. Compare candidatos pela descrição, pelas tags e pela prévia (preview). Só então chame get_component.
  6. Use o código de get_component como base e adapte ao projeto. Não reescreva de memória nem troque a peça por uma "parecida" inventada.
  7. Instale as dependências listadas (npm e shadcn/ui) antes de usar o componente.
  8. Para "no estilo de X": search_styles, depois get_style, e siga o DESIGN.md em tudo (cores, tipografia, espaçamento, componentes).
  9. Para tela de app Android ou iOS: search_components com mobile: true e get_component com platform: "kotlin".
  10. Ícones: uma coleção só por página. Por padrão a busca exclui licenças não comerciais.
  11. Fontes: todas as retornadas por padrão têm os acentos do português.

Roteiros de trabalho

Para montar uma página ou seção inteira, o Claude pode seguir os roteiros do servidor (prompts MCP).

RoteiroArgumentosO que faz
montar_paginapedido (obrigatório), estilo (opcional, ex.: Linear, Stripe)Briefing → escolha das peças → montagem com o tema do projeto → revisão com nota em 1440, 768 e 390 px, até 3 rodadas
montar_secaosecao (obrigatório), contexto (opcional)Uma seção (hero, planos, depoimentos…) num projeto existente, no tema dele
revisar_paginaonde (opcional)Revisão exigente com nota de 0 a 10 por critério e troca de peças pelo catálogo

No Claude Code os roteiros viram comandos, por exemplo /mcp__viu__montar_pagina. No claude.ai aparecem como prompts do conector.

Referência das ferramentas

Todas as ferramentas devolvem JSON como texto. Listas paginadas trazem total_matches, offset e next_offset (null na última página).

Componentes de UI

catalog_status

Tamanho do catálogo e cota do plano. Sem parâmetros. Não gasta cota de componentes.

Retorno: plan, components (total, with_code, with_mobile_version), styles, icons, fonts e quota (components com limiteDia, limiteMes, usadosDia, usadosMes, restamDia, restamMes; calls, window_seconds, calls_in_window).

search_components

Busca componentes por palavras-chave e filtros. Não gasta cota.

ParâmetroTipoPadrãoDescrição
querytexto—Palavras-chave em inglês, ex.: pricing table dark
tagslista de textos—Tags obrigatórias (todas precisam bater). Veja list_tags
has_codebooleanofalseSó componentes com código
mobilebooleanofalseSó componentes com versão Kotlin / Compose Multiplatform
exclude_idslista de textos—Ids para deixar de fora
limitinteiro10 (máx. 50)Resultados por página
offsetinteiro0Início da página

Cada resultado: id (código público de 8 caracteres), name, description (até 160 caracteres), tags (até 8), code, mobile e preview (URL da prévia). O retorno também traz query_terms, os termos usados depois da tradução.

Ordenação: nome exato pesa mais, depois nome que começa com o termo, tag e descrição. Componentes com código e com prévia sobem.

{"query": "pricing dark", "has_code": true, "limit": 5}

get_component

O componente pronto para usar. Cada componente diferente aberto no dia conta uma vez na cota; abrir o mesmo de novo no mesmo dia não conta. Componente sem código não gasta cota.

ParâmetroTipoPadrãoDescrição
idtexto (obrigatório)—Id vindo de search_components
platformweb ou kotlinwebkotlin inclui a versão Kotlin / Compose Multiplatform, quando existe

Retorno: os campos da busca com a descrição completa, mais dependencies (npm e shadcn/ui), prompt (código e exemplos de uso, até 100.000 caracteres), quota atualizada e, quando houver, video e mobile_hint. Se o id não existir, volta error com até 5 componentes parecidos em similar.

{"id": "c1a1c9d4", "platform": "web"}

list_tags

Todas as tags com a contagem de componentes (components) e de componentes com código (with_code). Sem parâmetros.

Estilos web

search_styles

Busca design systems de sites reais. Sem query, lista todos, paginado.

ParâmetroTipoDescrição
querytextoPalavras-chave em inglês, ex.: dark minimal fintech
industrytextoex.: saas, agency, ecommerce, ai, design
themetextoclaro, escuro ou misto (aceita light, dark, mixed)
familytextoFamília de cor, ex.: neutro, azul
collectiontextoex.: monocromatico, gradiente
densitytextoex.: compact, comfortable
fonttextoParte do nome da fonte, ex.: inter, serif
limit / offsetinteiro10 (máx. 50) / 0

Cada resultado: slug, name, site, theme, industry, north_star, fonts, colors (até 6 hex), accent, family, collections, density.

get_style

Um estilo completo.

ParâmetroTipoPadrãoDescrição
slugtexto (obrigatório)—Slug de search_styles ou o nome do estilo
formatdesign_md, tailwind, css, tokens, all, metadesign_mdArquivo devolvido. meta não traz arquivo

Retorno: o resumo do estilo, description, palette (hex, nome, papel e grupo de cada cor), o arquivo pedido, formats_available e media (URLs de miniatura, tela, capa, vídeo e ícone). Se o slug não existir, volta did_you_mean.

list_style_filters

Valores válidos para os filtros de search_styles, com contagem: industries, themes, families, densities, collections e fonts_top (as 40 fontes mais usadas). Sem parâmetros.

Ícones

search_icons

Busca ícones em coleções open source (Lucide, Tabler, Phosphor, Material, Heroicons, marcas). Aceita português ou inglês.

ParâmetroTipoPadrãoDescrição
querytexto—ex.: shopping cart, seta esquerda, github
collectiontexto—Prefixo da coleção, ex.: lucide, tabler, ph, mdi, simple-icons
include_noncommercialbooleanofalseInclui licenças não comerciais
with_svgbooleanotrueTraz o SVG em cada resultado
limit / offsetinteiro20 (máx. 100) / 0Paginação

Cada resultado: id (prefixo:nome), name, collection, license e svg. O SVG usa currentColor e 1em, então herda a cor e o tamanho do texto.

get_icon

Um ícone pelo id.

ParâmetroTipoPadrãoDescrição
idtexto (obrigatório)—prefixo:nome, ex.: lucide:camera
formatsvg, jsx, allsvgjsx ou all incluem um componente React pronto

Retorno: svg, license, license_title, license_url, author, author_url e, quando a licença pede cuidado, warning: não comercial, GPL ou atribuição obrigatória (CC-BY).

list_icon_collections

As coleções com prefix, name, icons (quantidade), license e category. Parâmetros: query (filtra por prefixo, nome ou categoria) e limit (padrão 60, máx. 300).

Fontes

search_fonts

Busca fontes do Google Fonts, Fontsource e Fontshare.

ParâmetroTipoPadrãoDescrição
querytexto—Nome ou descrição, ex.: serifada elegante, mono, inter
categorysans-serif, serif, display, handwriting, monospace—Categoria
sourcegoogle, fontsource, fontshare—Origem da fonte
variable_onlybooleanofalseSó fontes variáveis
ordertextopopularpopular, nome ou recente
include_without_pt_accentsbooleanofalseInclui fontes sem os acentos do português
limit / offsetinteiro12 (máx. 60) / 0Paginação

Cada resultado: id, family, source, category, weights, italic, variable, license, can_host_files, css_import e sample (imagem de amostra). Se nada bater, volta as mais populares da categoria com uma note.

get_font

Uma fonte completa. Parâmetros: id (de search_fonts) ou family (o nome).

Retorno: o resumo da busca, mais designers, axes, description, tags, license_url, page, pt_accents, css (import e font-family prontos), download (zip quando a licença permite hospedar), pairs_in_real_sites (fontes que aparecem junto em sites reais) e seen_on_styles (estilos web do catálogo que a usam).

Fluxos de exemplo

Landing page "no estilo de" um site

Pedido: "Monte a landing de uma fintech no estilo do Stripe."

  1. catalog_status — confere a cota.
  2. search_styles com {"query": "stripe"} e get_style no melhor resultado. O DESIGN.md define paleta, tipografia e espaçamento.
  3. search_fonts / get_font para o par de fontes indicado no DESIGN.md.
  4. Para cada seção, duas buscas: search_components com {"query": "hero", "has_code": true} e outra com as palavras do briefing ("fintech gradient hero").
  5. Monta uma tabela: seção, id, nome, motivo. Só então chama get_component em cada id escolhido.
  6. search_icons com {"collection": "lucide"} para manter uma coleção só.
  7. Adapta cada peça ao tema, instala as dependências, roda build e lint, e revisa em 1440, 768 e 390 px.

Uma seção num projeto existente

Pedido: "Adicione uma seção de preços."

  1. Lê o tema do projeto (cores, fontes, raios).
  2. search_components com {"query": "preços", "has_code": true, "limit": 5}. "preços" vira pricing.
  3. Compara 3 a 5 candidatos pela descrição e pela prévia e abre só o escolhido com get_component.
  4. Adapta ao tema e confere em 1440 e 390 px.

Tela de app mobile

Pedido: "Preciso de uma tela de login para o app Android."

  1. search_components com {"query": "login", "mobile": true}.
  2. get_component com {"id": "<id>", "platform": "kotlin"}. O prompt traz a versão web e a seção "Mobile — Kotlin" com o código Compose Multiplatform.
  3. Adapta o pacote e o tema ao app.

Limites do plano Pro

LimiteValorComo conta
Chamadas600 a cada 4 horasQualquer ferramenta, janela deslizante
Componentes por dia150Componentes diferentes abertos com get_component; repetir o mesmo no dia não conta
Componentes por mês1.500Mesma regra, somada no mês

Buscas, listas, estilos, ícones e fontes gastam só chamadas, nunca a cota de componentes.

Identificadores

AcervoFormato do idExemplo
ComponenteCódigo público de 8 caracteresc1a1c9d4
Estilo webSlugo slug devolvido por search_styles
Íconeprefixo:nomelucide:camera
FonteId em minúsculas com hífens, ou o nome da famíliao id devolvido por search_fonts

O id de componente só vale se veio de search_components. Ids em outro formato devolvem "id não encontrado" com sugestões parecidas. Prévias ficam em https://api.virtues.now/vui/previews/p/<id>.

Erros

SituaçãoRespostaO que fazer
Sem credencialHTTP 401 com desafio OAuthEntrar pelo login do VIU ou mandar a chave
Token OAuth vencidoHTTP 401 invalid_tokenO cliente renova com o token de renovação
Chave inválida ou revogadaHTTP 401Gerar nova chave no perfil do site
Conta fora do plano ProHTTP 403Assinar o Pro
Limite de chamadasHTTP 429 com Retry-After em segundosEsperar o tempo indicado
Cota de componentesErro da ferramenta (isError): "Limite de 150 componentes por dia atingido. Volte amanhã."Continuar só com buscas ou esperar o dia seguinte
Lote JSON-RPCHTTP 400, código -32600Mandar uma mensagem por requisição
JSON malformadoHTTP 400, código -32700Corrigir o corpo
Método desconhecidoCódigo -32601Usar um dos métodos suportados
GET ou DELETEHTTP 405Usar POST
Componente sem códigocode: false e noteEscolher outro; não gasta cota

Erros dentro de uma ferramenta voltam ao Claude como resultado com isError: true e a mensagem, sem derrubar a conexão.