Icon Composer MCP

Ferramentas MCP locais para documentos editáveis do Apple Icon Composer e visualizações nativas de aparência.

Documentação

Icon Composer MCP

Icon Composer MCP (icon-composer-kit) é um servidor MCP local para criar, inspecionar, revisar e renderizar documentos editáveis do Apple Icon Composer .icon. Ele mantém o espaço de trabalho explícito e local, valida o material gráfico antes de gravá-lo e delega visualizações ao renderizador assinado do Icon Composer da Apple quando disponível.

Ele é intencionalmente um compositor de ícones. Aceita arte estática em SVG ou PNG e organiza essa arte em grupos editáveis, camadas, materiais, preenchimentos, posições e especializações de aparência. Não gera arte, não vetoriza imagens raster, não baixa ativos nem chama um serviço de rede.

Galeria de visualizações

Estas visualizações foram produzidas a partir das receitas incluídas com o renderizador nativo do Apple Icon Composer. Cada exemplo tem um pacote editável correspondente em examples/.

OrbitBloomPrism
OrbitBloomPrism

Cada receita pode ser renderizada em todas as seis aparências suportadas:

ExemploPadrãoEscuroTinted LightTinted DarkClear LightClear Dark
Orbit512512512512512512
Bloom512512512512512512
Prism512512512512512512
PadrãoEscuroTinted LightTinted DarkClear LightClear Dark
DefaultDarkTinted LightTinted DarkClear LightClear Dark

As visualizações pequenas mostram a verificação de 32 px usada pelo fluxo de trabalho dos exemplos: Orbit, Bloom e Prism.

Requisitos

  • Node.js 24 ou mais recente.
  • npm e o package-lock.json incluído.
  • Um diretório absoluto dedicado e gravável para ICON_WORKSPACE.
  • macOS com Apple Icon Composer para composer_status reportar disponibilidade e para render_icon produzir visualizações nativas. As operações de documento suportam sistemas de arquivos locais macOS e Linux. O Windows não é suportado pelas verificações de propriedade. A ferramenta nativa verificada atualmente reporta a versão 1.6 no ambiente de desenvolvimento; a disponibilidade é verificada em tempo de execução.

O servidor verifica o requisito de assinatura da Apple e o identificador com.apple.IconComposerTool esperado antes de invocar ictool. ICON_COMPOSER_APP pode apontar para um pacote .app absoluto quando o renderizador estiver instalado fora de seu local padrão; valores malformados desabilitam a renderização nativa.

Instalar e executar localmente

Clone o repositório e depois compile o pacote local:

git clone https://github.com/TheNaubit/icon-composer-mcp.git icon-composer-kit
cd icon-composer-kit
npm ci
npm run build
mkdir -p /absolute/path/icon-workspace
ICON_WORKSPACE=/absolute/path/icon-workspace node "$PWD/dist/server.js"

O servidor fala MCP via stdio. Mantenha ICON_WORKSPACE dedicado a ícones criados por este servidor. A raiz do espaço de trabalho é uma configuração do operador, não um argumento de ferramenta, e deve ser um diretório real absoluto abaixo da raiz do sistema de arquivos.

Instalar no seu host MCP

Compile uma vez com npm ci e npm run build, depois escolha seu host abaixo. Estas são instalações locais: execute o host no Mac que tem o Icon Composer para renderizar visualizações. O Linux suporta apenas operações de documento. Sessões de codificação somente em navegador e remotas não podem iniciar o renderizador no seu Mac por meio desta configuração stdio.

Substitua /absolute/path/icon-composer-kit pelo seu checkout e /absolute/path/icon-workspace por um diretório de saída dedicado. Para aplicativos de desktop, substitua /absolute/path/node pelo resultado de command -v node (Node 24+). Caminhos JSON e TOML são literais: não coloque ~ ou $PWD neles. Mescle entradas na configuração existente em vez de substituir outros servidores.

HostConfiguraçãoVerificação
Codex CLIcodex mcp add ou TOMLcodex mcp get e /mcp
Codex appTOML local compartilhado do CodexReinicie o app, inicie uma nova tarefa local
Claude Codeclaude mcp addclaude mcp get e /mcp
Claude Desktop — ChatConfiguração JSON do desktopReinicie o app, inicie um novo Chat
Claude CoworkWrapper de plugin local manualHabilite o plugin e verifique suas ferramentas
Cursormcp.json de usuário ou projetoHabilite o servidor nas configurações de MCP
VS Code.vscode/mcp.jsonInicie o servidor, selecione ferramentas de chat

Nenhum pacote npm publicado ou extensão de um clique é assumido por estas instruções. Mantenha configurações específicas da máquina e qualquer ZIP de plugin que você personalizar fora deste repositório público.

Codex CLI

Registre para seu usuário:

codex mcp add icon-composer-kit \
  --env ICON_WORKSPACE=/absolute/path/icon-workspace \
  -- /absolute/path/node /absolute/path/icon-composer-kit/dist/server.js
codex mcp get icon-composer-kit

Inicie uma nova sessão codex e use /mcp para verificar a conexão. Para remover o registro, execute codex mcp remove icon-composer-kit; os arquivos de ícone permanecem no disco.

Alternativamente, mescle isto em ~/.codex/config.toml. Para um projeto confiável apenas, use o .codex/config.toml desse projeto:

[mcp_servers.icon-composer-kit]
command = "/absolute/path/node"
args = ["/absolute/path/icon-composer-kit/dist/server.js"]

[mcp_servers.icon-composer-kit.env]
ICON_WORKSPACE = "/absolute/path/icon-workspace"

Documentação oficial do MCP do Codex.

Codex app

O app e a CLI compartilham a configuração de MCP no mesmo host local do Codex. Use o registro da CLI acima, ou adicione o mesmo bloco TOML a ~/.codex/config.toml se você não usa a CLI. Reinicie o app e abra uma nova tarefa local. Peça para chamar composer_status, depois list_icons.

Use a configuração no Mac que executa a tarefa, não um host remoto separado. Para desinstalar, remova o bloco TOML do servidor e sua subtabela de ambiente, depois reinicie o app. Orientação oficial de configuração compartilhada.

Claude Code

Use o escopo de usuário para acesso em seus projetos:

claude mcp add --transport stdio --scope user \
  --env ICON_WORKSPACE=/absolute/path/icon-workspace \
  icon-composer-kit -- /absolute/path/node /absolute/path/icon-composer-kit/dist/server.js
claude mcp get icon-composer-kit

Inicie uma nova sessão do Claude Code e execute /mcp. Todas as seis ferramentas devem estar disponíveis. Para restringir a instalação ao seu projeto atual sem compartilhar seus caminhos, substitua --scope user por --scope local. --scope project grava configuração .mcp.json compartilhada; evite confirmar caminhos absolutos pessoais lá.

Remova com claude mcp remove --scope user icon-composer-kit, usando o mesmo escopo em que instalou. Guia oficial do MCP do Claude Code.

Claude Desktop — Chat

No macOS, abra Configurações → Desenvolvedor → Editar Configuração do Claude Desktop, ou edite ~/Library/Application Support/Claude/claude_desktop_config.json. Mescle esta entrada:

{
  "mcpServers": {
    "icon-composer-kit": {
      "command": "/absolute/path/node",
      "args": ["/absolute/path/icon-composer-kit/dist/server.js"],
      "env": { "ICON_WORKSPACE": "/absolute/path/icon-workspace" }
    }
  }
}

Saia completamente e reabra o Claude Desktop. Em um novo Chat, verifique as ferramentas disponíveis e solicite composer_status. Remova a entrada e reinicie para desinstalar. Esta é uma configuração manual de stdio, não uma instalação de extensão de desktop .mcpb. Configuração oficial de servidor local.

Claude Cowork

Instalação manual de plugin local. O Claude documenta servidores MCP locais em plugins de desktop, mas diz explicitamente que servidores legados claude_desktop_config.json não estão disponíveis no Cowork. Use o mecanismo de plugin em vez de assumir que a configuração do Chat é transferida. A execução de plugin local requer o aplicativo de desktop e pode ser desabilitada pela política da organização. Veja arquitetura do Cowork e a limitação de configuração legada.

Para preparar um wrapper local da máquina, crie esta pasta fora do checkout:

icon-composer-local/
├── .claude-plugin/
│   └── plugin.json
└── .mcp.json

Coloque isto em .claude-plugin/plugin.json:

{
  "name": "icon-composer-local",
  "version": "1.0.1",
  "description": "Local Apple Icon Composer tools"
}

Coloque o JSON da seção Claude Desktop — Chat em .mcp.json, com seus caminhos absolutos reais. O wrapper referencia seu checkout compilado existente e dependências; ele não os agrupa nem baixa. Este layout segue a referência oficial de plugin MCP.

Do diretório do wrapper, inclua ambas as entradas ocultas no arquivo:

zip -r ../icon-composer-local.zip .claude-plugin .mcp.json

No Claude Desktop, abra Cowork → Personalizar → Plugins e use a opção de upload de plugin personalizado para instalar o ZIP. Habilite-o e inicie uma nova tarefa. Peça por composer_status e list_icons; os nomes das ferramentas do plugin podem ter um prefixo de namespace. Guia oficial de instalação de plugins.

Se uploads personalizados/execução local de MCP não estiverem disponíveis, use Claude Code ou Claude Desktop Chat. Não insira um caminho de sistema de arquivos no campo de URL do conector remoto. Para desinstalar, remova o wrapper de Plugins; retenha ou arquive o espaço de trabalho de ícones separado conforme desejado. O ZIP personalizado contém caminhos locais, então mantenha-o privado.

Cursor

Para seu usuário, mescle o seguinte em ~/.cursor/mcp.json. Para um projeto, use .cursor/mcp.json nesse projeto:

{
  "mcpServers": {
    "icon-composer-kit": {
      "type": "stdio",
      "command": "/absolute/path/node",
      "args": ["/absolute/path/icon-composer-kit/dist/server.js"],
      "env": { "ICON_WORKSPACE": "/absolute/path/icon-workspace" }
    }
  }
}

Abra os controles de MCP do Cursor em Configurações / Personalizar, habilite o servidor e recarregue a janela se ele não conectou. No chat do Agent, peça para chamar composer_status. Remova a entrada JSON para desinstalar. Guia oficial de configuração do Cursor.

VS Code

O VS Code usa um objeto servers em vez de mcpServers. Mescle isto em .vscode/mcp.json, ou execute MCP: Abrir Configuração do Usuário para uma instalação ampla do usuário:

{
  "servers": {
    "icon-composer-kit": {
      "type": "stdio",
      "command": "/absolute/path/node",
      "args": ["/absolute/path/icon-composer-kit/dist/server.js"],
      "env": { "ICON_WORKSPACE": "/absolute/path/icon-workspace" }
    }
  }
}

Use a ação Iniciar do editor para o servidor e aceite seu prompt de confiança. Selecione suas ferramentas no chat do agente e solicite composer_status. Para desinstalar, pare o servidor e remova sua entrada. Em uma janela remota do VS Code, garanta que o servidor esteja configurado para executar no seu Mac local se você precisar de renderização nativa. Guia oficial do MCP do VS Code.

Verificar qualquer instalação

Pergunte ao host: “Use Icon Composer Kit para chamar composer_status e list_icons.” Uma resposta de ferramenta bem-sucedida confirma a conexão. composer_status retornando available: false significa que o MCP está conectado, mas o renderizador da Apple não pôde ser verificado; a criação de documentos ainda pode funcionar.

Se nenhuma ferramenta aparecer, execute o cliente incluído independentemente:

ICON_WORKSPACE=/absolute/path/icon-workspace \
  /absolute/path/node /absolute/path/icon-composer-kit/dist/client.js tools

Isto deve listar seis ferramentas. Depois verifique os logs do seu host, caminhos absolutos literais, versão do Node e propriedade do espaço de trabalho. Se o Icon Composer estiver instalado separadamente do Xcode, adicione ICON_COMPOSER_APP à mesma configuração de ambiente do servidor com o caminho absoluto .app.

Estas receitas foram verificadas contra a documentação oficial em 5 de setembro de 2026 e a ajuda da CLI instalada. Use a documentação do host vinculada se os rótulos de menu mudarem.

Cliente MCP de linha de comando

O cliente compilado é um pequeno chamador de diagnóstico. Ele inicia um servidor filho com o ICON_WORKSPACE atual, lista as ferramentas registradas ou chama uma ferramenta usando um arquivo JSON.

export ICON_WORKSPACE=/absolute/path/icon-workspace
node dist/client.js tools
node dist/client.js call list_icons

Chamadas sem argumentos podem omitir o arquivo JSON:

node dist/client.js call composer_status

O cliente aceita entrada JSON de até 2 MiB e imprime o resultado do MCP como JSON. Falhas de ferramenta retornam um status de saída diferente de zero. ICON_WORKSPACE é obrigatório mesmo para tools porque o cliente sempre inicia o servidor local.

Um primeiro ícone

O examples/orbit.json incluído é uma solicitação completa de create_icon. Ele usa um fundo de duas paradas, dois grupos, camadas SVG estáticas, material de vidro e uma especialização de fundo escuro.

export ICON_WORKSPACE=/absolute/path/icon-workspace
node dist/client.js call create_icon examples/orbit.json

Para uma prévia escura, salve isto como render.json no checkout (ou qualquer arquivo local passado explicitamente ao cliente):

{ "name": "orbit", "rendition": "Dark", "size": 512, "inline": false }
node dist/client.js call render_icon render.json

O caminho do PNG no resultado é relativo a ICON_WORKSPACE. Abra orbit.icon no Icon Composer da Apple para inspecionar suas camadas interativamente. Salve experimentos manuais do editor como uma cópia separada; eles não são importados para a especificação gerenciada.

A resposta contém o caminho lógico do pacote (orbit.icon) e uma revisão SHA-256. A criação nunca sobrescreve um nome de ícone existente. Para revisar um ícone, chame read_icon, copie seu spec e revision completos, então chame update_icon com um novo outputName. O pacote original permanece inalterado.

Superfície do MCP

O servidor registra seis ferramentas e um prompt. As respostas das ferramentas são texto JSON, exceto render_icon, que também pode incluir uma imagem PNG quando inline for verdadeiro.

FerramentaPropósitoGrava no workspace?
composer_statusVerifica se o renderizador verificado da Apple está disponível; pode retornar sua versão curta numérica.Não
list_iconsLista nomes válidos de pacotes de ícones no workspace configurado.Não
create_iconValida uma especificação completa e cria um novo pacote .icon editável.Sim
read_iconLê a especificação gerenciada e sua revisão.Não
update_iconVerifica uma revisão esperada e cria uma especificação revisada sob um novo nome.Sim
render_iconRenderiza uma aparência PNG nativa, salva-a com um nome de arquivo único e, opcionalmente, a retorna inline.Sim

O prompt compose-icon fornece uma lista de verificação de composição: uma tela de 1024 por 1024, grupos e camadas de frente para trás, formas de vidro separadas, arte escura quando útil, seis renderizações de aparência e inspeção de 32 px/1024 px. O texto do prompt é orientação; os esquemas das ferramentas permanecem autoritativos.

Referência da especificação

create_icon aceita {name, spec}. update_icon requer {name, outputName, expectedRevision, spec}. expectedRevision é a revisão hexadecimal de 64 caracteres retornada por read_icon. Ambos aceitam objetos JSON estritos. Campos desconhecidos são rejeitados. A especificação gerenciada atual é armazenada como source.json dentro de cada pacote e é a autoridade usada por read_icon e atualizações posteriores.

Campos do ícone

CampoTipoRestrições e padrão
backgroundstring ou {top,bottom}Obrigatório. Cores são #RRGGBB de seis dígitos; um objeto é um gradiente vertical.
darkBackgroundIgual a backgroundPreenchimento opcional para aparência escura.
platform"iOS" | "macOS"Padrão é "iOS".
groupsArrayObrigatório; 1–4 grupos.

Campos do grupo

CampoTipoRestrições e padrão
namestringObrigatório, 1–80 caracteres; sem caracteres de controle.
layersArrayObrigatório; 1–32 camadas. Grupos e camadas são de frente para trás.
specularbooleanPadrão é false.
blurnumber0–1, padrão é 0.
translucencynumber0–1, padrão é 0.
shadow"none" | "neutral" | "chromatic"Padrão é "none".
shadowOpacitynumber0–1, padrão é 0.
lighting"combined" | "individual"Padrão é "combined".

Campos da camada

CampoTipoRestrições e padrão
namestringObrigatório, 1–80 caracteres; sem caracteres de controle.
svgstringExatamente uma fonte primária é obrigatória: SVG estático de até 256 KiB.
pngBase64stringFonte primária alternativa: PNG não entrelaçado em base64, no máximo 1 MiB e 1024 px por lado. Os pixels são re-codificados sem metadados.
darkSvgstringEspecialização opcional de arte escura, com as mesmas regras de SVG.
darkPngBase64stringEspecialização opcional de PNG escuro, com as mesmas regras de PNG.
glassbooleanPadrão é false.
opacitynumber0–1, padrão é 1.
scalenumber0.01–4, padrão é 1.
x, ynumber−1024–1024 pontos, cada um com padrão 0.

O JSON completo do ícone deve ter no máximo 2 MiB e conter no máximo 64 ativos de arte, incluindo especializações escuras. O SVG aceita uma linguagem estática deliberadamente pequena de geometria, gradientes locais, máscaras e caminhos de recorte, com entrada bruta limitada a 256 KiB, 4096 elementos e profundidade 32. URLs externas, URLs de dados, scripts, atributos de evento, estilos, declarações e elementos não suportados são rejeitados. A entrada PNG deve ser um PNG válido, não animado, não entrelaçado, com CRCs intactos; metadados acessórios são removidos. O transporte MCP reserva até 3 MiB por quadro.

As cores de fundo e SVG sem etiqueta são emitidas como valores Display P3 no documento nativo. Os pixels PNG não são convertidos de cor e os perfis incorporados são removidos; exporte a arte PNG como sRGB antes de importá-la.

Renderização

render_icon recebe name, rendition, size, inline, tintColor opcional, tintStrength opcional e opaqueBackground opcional.

CampoTipoRestrições e padrão
renditionDefault, Dark, TintedLight, TintedDark, ClearLight, ClearDarkPadrão é Default.
sizeinteiro16–1024 px, padrão é 512.
inlinebooleanoPadrão é true; inclui o PNG como uma imagem MCP quando verdadeiro.
tintColornúmeroOpcional, 0–1. Passado ao renderizador da Apple.
tintStrengthnúmeroOpcional, 0–1. Passado ao renderizador da Apple.
opaqueBackground#RRGGBBOpcional. Compõe o alfa renderizado sobre um PNG RGB opaco. Esta é uma prévia achatada, não um ícone de origem da App Store.

Após verificar se os arquivos nativos ainda correspondem à especificação gerenciada, o renderizador cria um pacote temporário a partir de source.json, então invoca o ictool da Apple com a plataforma configurada do ícone. A saída é verificada quanto à assinatura PNG e às dimensões solicitadas antes de ser salva sob um nome de arquivo gerado no workspace. A renderização nativa não tem aproximação ou fallback de rede.

Dados, revisões e limites de segurança

  • Nomes são identificadores minúsculos: uma letra seguida de até 63 letras minúsculas, dígitos ou hífens.
  • Criação e renderização gravam com modos de arquivo restritivos e nunca sobrescrevem um ícone existente ou nome de arquivo de prévia.
  • update_icon é copy-on-write: requer a revisão SHA-256 atual e um novo nome de saída. Uma incompatibilidade interrompe a atualização.
  • Caminhos do workspace são controlados pelo ambiente do processo. Chamadas de ferramenta não podem selecionar caminhos de arquivo arbitrários.
  • O servidor serializa operações, exclui gravadores concorrentes do workspace, limita novas gravações a um workspace com menos de 100 entradas de nível superior e limita operações válidas de ferramenta a 120 por minuto por processo. Erros retornados via MCP são deliberadamente genéricos e não divulgam caminhos locais ou detalhes do processo nativo.
  • O servidor não importa edições feitas na GUI nativa do Icon Composer. Se icon.json ou um ativo esperado for editado fora desta ferramenta, a próxima leitura/atualização rejeita o pacote em vez de revertê-lo silenciosamente. Não há importação arbitrária de .icon existente.

Veja SECURITY.md para a política de relatórios do projeto.

Exemplos e verificação

O gerador de galeria lê as três receitas JSON, cria documentos editáveis por meio do MCP, renderiza todas as seis aparências mais uma prévia de 32 px e atualiza os ativos verificados. Ele requer macOS e uma instalação verificada do Apple Icon Composer:

npm run examples

As verificações regulares não exigem renderização nativa:

npm run format:check
npm run typecheck
npm run coverage
npm run build

A integração contínua executa essas verificações independentes do host no Ubuntu. A galeria nativa é uma verificação manual no macOS porque o Apple Icon Composer não está disponível nesse ambiente de CI. Execute npm run test:native no macOS para uma verificação real separada do MCP de camadas PNG, preenchimentos sólidos, sombras cromáticas, ambas as plataformas, todas as aparências e exportações opacas.

Dicas de design

  • Comece com uma silhueta simples que permaneça legível a 32 px.
  • Mantenha formas de vidro desconectadas em camadas separadas para que os efeitos de material possam ser controlados de forma independente.
  • Use no máximo quatro grupos e mantenha a ordem das camadas explícita.
  • Dê ao modo escuro seu próprio fundo e arte quando uma marca clara perder contraste.
  • Use grupos planos com specular: false, blur: 0, translucency: 0, shadow: "none" e glass: false quando a arte deve permanecer visualmente estável.
  • Inspecione tanto a menor prévia quanto uma renderização nativa grande antes de distribuir um ícone.

Solução de problemas

SintomaResolução
O servidor sai antes que as ferramentas apareçamDefina um ICON_WORKSPACE absoluto; use Node 24+ e execute npm ci e depois npm run build. O diretório e os arquivos gerenciados devem ser de sua propriedade e não graváveis por grupo/outros.
composer_status relata indisponívelInstale o Apple Icon Composer. O padrão é a cópia dentro de /Applications/Xcode.app. Para uma cópia independente, defina ICON_COMPOSER_APP=/Applications/Icon\ Composer.app no seu shell, ou o valor literal equivalente no objeto env do host. Restrições de sandbox/confiança do sistema operacional também podem impedir a verificação.
O nome do ícone já existeEscolha um novo nome; use read_icon e update_icon para preservar o histórico de revisões.
Documento nativo foi modificado / arquivos inesperadosPreserve a cópia manual. Crie um novo ícone gerenciado usando sua especificação desejada. Não remova source.json nem armazene arquivos não relacionados dentro de um pacote gerenciado.
Workspace ocupado após uma falhaPare todos os processos que usam esse workspace. Inspecione e remova apenas o diretório .operation-lock obsoleto; arquive os diretórios temporários .render-* restantes antes de reiniciar. Não remova o bloqueio de um gravador ativo.
Limite do workspace atingidoArquive ícones/prévias mais antigos fora do workspace ativo, ou configure um novo workspace dedicado. Não há ferramenta de exclusão.
SVG rejeitadoExporte caminhos/formas simples com atributos de apresentação inline. Converta texto em caminhos no seu editor de arte; remova CSS, imagens incorporadas, referências externas e filtros.
PNG rejeitadoExporte um PNG sRGB estático, não entrelaçado, de até 1024 px por lado e 1 MiB.
A exportação opaca falha em uma renderização detalhadaO achatamento atualmente aceita PNGs nativos de até 1 MiB; o caminho de prévia comum permite 6 MiB. Tente uma prévia menor.
O vidro parece unido ou inesperadoColoque formas desconectadas em camadas separadas e compare todas as seis versões nativas.

O formato de documento nativo não é uma API pública versionada da Apple. A compatibilidade é verificada contra o renderizador instalado; uma futura atualização da Apple pode exigir uma mudança de mapeamento. O pacote não automatiza a integração de projetos Xcode, não compila catálogos de ativos nem exporta um ícone de origem da App Store sem máscara. opaqueBackground achata a prévia renderizada, incluindo sua silhueta arredondada.

Arquitetura

MCP host or included CLI client
  → stdio transport and strict schemas
  → workspace ownership, revision and file checks
  → validated SVG/PNG assets + editable native .icon
  → verified Apple ictool → bounded PNG response

O build verifica tipos com TypeScript e empacota o servidor e a CLI com esbuild em dist/server.js e dist/client.js. As importações de origem usam o alias @/ sem extensão para src/; o build resolve essas importações. As dependências de tempo de execução permanecem instaladas via npm.

O tempo de execução usa os pacotes oficiais de servidor/cliente MCP, Zod, Saxes e PNGJS. Não há construtor de comandos de shell, servidor HTTP, banco de dados, serviço em segundo plano ou binário Apple empacotado. Módulos de origem, testes e exemplos reproduzíveis estão incluídos neste repositório; AGENTS.md mapeia suas responsabilidades.

Contribuindo

Leia CONTRIBUTING.md antes de abrir uma alteração. O repositório é licenciado sob a Licença MIT.