Icon Composer MCP

Herramientas MCP locales para documentos editables de Apple Icon Composer y vistas previas nativas de apariencia.

Documentación

Icon Composer MCP

Icon Composer MCP (icon-composer-kit) es un servidor MCP local para crear, inspeccionar, revisar y renderizar documentos editables de Apple Icon Composer .icon. Mantiene el espacio de trabajo explícito y local, valida el arte antes de escribirlo y delega las vistas previas al renderizador firmado de Apple Icon Composer cuando está disponible.

Es intencionalmente un compositor de iconos. Acepta arte SVG o PNG estático y organiza ese arte en grupos editables, capas, materiales, rellenos, posiciones y especializaciones de apariencia. No genera arte, vectoriza imágenes rasterizadas, descarga recursos ni llama a un servicio de red.

Galería de vistas previas

Estas vistas previas se produjeron a partir de las recetas incluidas con el renderizador nativo de Apple Icon Composer. Cada ejemplo tiene un paquete editable correspondiente en examples/.

OrbitBloomPrism
OrbitBloomPrism

Cada receta se puede renderizar en las seis apariencias compatibles:

EjemploPredeterminadoOscuroTinte ClaroTinte OscuroClaro ClaroClaro Oscuro
Orbit512512512512512512
Bloom512512512512512512
Prism512512512512512512
PredeterminadoOscuroTinte ClaroTinte OscuroClaro ClaroClaro Oscuro
DefaultDarkTinted LightTinted DarkClear LightClear Dark

Las vistas previas pequeñas muestran la verificación de 32 px utilizada por el flujo de trabajo de ejemplos: Orbit, Bloom y Prism.

Requisitos

  • Node.js 24 o más reciente.
  • npm y el package-lock.json incluido.
  • Un directorio absoluto dedicado y escribible para ICON_WORKSPACE.
  • macOS con Apple Icon Composer para que composer_status informe disponible y para que render_icon produzca vistas previas nativas. Las operaciones de documentos admiten sistemas de archivos locales de macOS y Linux. Windows no es compatible con las verificaciones de propiedad. La herramienta nativa verificada actualmente informa la versión 1.6 en el entorno de desarrollo; la disponibilidad se verifica en tiempo de ejecución.

El servidor verifica el requisito de firma de Apple y el identificador com.apple.IconComposerTool esperado antes de invocar ictool. ICON_COMPOSER_APP puede apuntar a un paquete .app absoluto cuando el renderizador está instalado fuera de su ubicación predeterminada; los valores malformados deshabilitan el renderizado nativo.

Instalar y ejecutar localmente

Clona el repositorio y luego compila el paquete 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"

El servidor habla MCP a través de stdio. Mantén ICON_WORKSPACE dedicado a los iconos creados por este servidor. La raíz del espacio de trabajo es una configuración del operador, no un argumento de herramienta, y debe ser un directorio real absoluto debajo de la raíz del sistema de archivos.

Instalar en tu host MCP

Compila una vez con npm ci y npm run build, luego elige tu host a continuación. Estas son instalaciones locales: ejecuta el host en la Mac que tiene Icon Composer para renderizar vistas previas. Linux solo admite operaciones de documentos. Las sesiones de codificación solo de navegador y remotas no pueden iniciar el renderizador en tu Mac a través de esta configuración de stdio.

Reemplaza /absolute/path/icon-composer-kit con tu checkout y /absolute/path/icon-workspace con un directorio de salida dedicado. Para aplicaciones de escritorio, reemplaza /absolute/path/node con el resultado de command -v node (Node 24+). Las rutas JSON y TOML son literales: no pongas ~ ni $PWD en ellas. Fusiona las entradas en la configuración existente en lugar de reemplazar otros servidores.

HostConfiguraciónVerificación
Codex CLIcodex mcp add o TOMLcodex mcp get y /mcp
Codex appTOML local compartido de CodexReinicia la app, inicia una nueva tarea local
Claude Codeclaude mcp addclaude mcp get y /mcp
Claude Desktop — ChatConfiguración JSON de escritorioReinicia la app, inicia un nuevo Chat
Claude CoworkEnvoltorio de plugin local manualHabilita el plugin y verifica sus herramientas
Cursormcp.json de usuario o proyectoHabilita el servidor en la configuración de MCP
VS Code.vscode/mcp.jsonInicia el servidor, selecciona las herramientas de chat

Ningún paquete npm publicado ni extensión de un clic se asume en estas instrucciones. Mantén la configuración específica de la máquina y cualquier ZIP de plugin que personalices fuera de este repositorio público.

Codex CLI

Regístrate para tu usuario:

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

Inicia una nueva sesión de codex y usa /mcp para verificar la conexión. Para eliminar el registro, ejecuta codex mcp remove icon-composer-kit; los archivos de iconos permanecen en el disco.

Alternativamente, fusiona esto en ~/.codex/config.toml. Solo para un proyecto de confianza, usa el .codex/config.toml de ese proyecto en su lugar:

[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"

Documentación oficial de MCP de Codex.

Codex app

La app y la CLI comparten la configuración de MCP en el mismo host local de Codex. Usa el registro de CLI anterior, o agrega el mismo bloque TOML a ~/.codex/config.toml si no usas la CLI. Reinicia la app y abre una nueva tarea local. Pídele que llame a composer_status, luego list_icons.

Usa la configuración en la Mac que ejecuta la tarea, no un host remoto separado. Para desinstalar, elimina el bloque de servidor TOML y su subtabla de entorno, luego reinicia la app. Guía oficial de configuración compartida.

Claude Code

Usa el ámbito de usuario para acceso en todos tus proyectos:

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

Inicia una nueva sesión de Claude Code y ejecuta /mcp. Las seis herramientas deberían estar disponibles. Para restringir la instalación a tu proyecto actual sin compartir sus rutas, reemplaza --scope user con --scope local. --scope project escribe configuración compartida de .mcp.json; evita confirmar rutas absolutas personales allí.

Elimínalo con claude mcp remove --scope user icon-composer-kit, usando el mismo ámbito en el que lo instalaste. Guía oficial de MCP de Claude Code.

Claude Desktop — Chat

En macOS, abre Configuración → Desarrollador → Editar configuración de Claude Desktop, o edita ~/Library/Application Support/Claude/claude_desktop_config.json. Fusiona 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" }
    }
  }
}

Sal por completo y vuelve a abrir Claude Desktop. En un nuevo Chat, verifica las herramientas disponibles y solicita composer_status. Elimina la entrada y reinicia para desinstalar. Esta es una configuración manual de stdio, no una instalación de extensión de escritorio .mcpb. Configuración oficial de servidor local.

Claude Cowork

Instalación manual de plugin local. Claude documenta servidores MCP locales en plugins de escritorio, pero dice explícitamente que los servidores claude_desktop_config.json heredados no están disponibles en Cowork. Usa el mecanismo de plugin en lugar de asumir que la configuración de Chat se transfiere. La ejecución de plugins locales requiere la app de escritorio y puede ser deshabilitada por la política de la organización. Consulta Arquitectura de Cowork y la limitación de configuración heredada.

Para preparar un envoltorio local de máquina, crea esta carpeta fuera del checkout:

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

Pon esto en .claude-plugin/plugin.json:

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

Pon el JSON de la sección Claude Desktop — Chat en .mcp.json, con tus rutas absolutas reales. El envoltorio hace referencia a tu checkout compilado existente y dependencias; no los agrupa ni descarga. Este diseño sigue la referencia oficial de plugin MCP.

Desde el directorio del envoltorio, incluye ambas entradas ocultas en el archivo:

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

En Claude Desktop, abre Cowork → Personalizar → Plugins y usa la opción de carga de plugin personalizado para instalar el ZIP. Habilítalo e inicia una nueva tarea. Solicita composer_status y list_icons; los nombres de herramientas de plugin pueden tener un prefijo de espacio de nombres. Guía oficial de instalación de plugins.

Si las cargas personalizadas/ejecución local de MCP no están disponibles, usa Claude Code o Claude Desktop Chat en su lugar. No ingreses una ruta de sistema de archivos en el campo de URL del conector remoto. Para desinstalar, elimina el envoltorio de Plugins; conserva o archiva el espacio de trabajo de iconos separado como desees. El ZIP personalizado contiene rutas locales, así que mantenlo privado.

Cursor

Para tu usuario, fusiona lo siguiente en ~/.cursor/mcp.json. Para un proyecto, usa .cursor/mcp.json en ese proyecto en su lugar:

{
  "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" }
    }
  }
}

Abre los controles de MCP de Cursor en Configuración / Personalizar, habilita el servidor y recarga la ventana si no se ha conectado. En el chat de Agent, pídele que llame a composer_status. Elimina la entrada JSON para desinstalar. Guía oficial de configuración de Cursor.

VS Code

VS Code usa un objeto servers en lugar de mcpServers. Fusiona esto en .vscode/mcp.json, o ejecuta MCP: Abrir configuración de usuario para una instalación a nivel de usuario:

{
  "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" }
    }
  }
}

Usa la acción Iniciar del editor para el servidor y acepta su solicitud de confianza. Selecciona sus herramientas en el chat de agente y solicita composer_status. Para desinstalar, detén el servidor y elimina su entrada. En una ventana remota de VS Code, asegúrate de que el servidor esté configurado para ejecutarse en tu Mac local si necesitas renderizado nativo. Guía oficial de MCP de VS Code.

Verificar cualquier instalación

Pregunta al host: "Usa Icon Composer Kit para llamar a composer_status y list_icons". Una respuesta exitosa de la herramienta confirma la conexión. composer_status devolviendo available: false significa que MCP está conectado pero el renderizador de Apple no pudo verificarse; la creación de documentos aún puede funcionar.

Si no aparecen herramientas, ejecuta el cliente incluido de forma independiente:

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

Esto debería listar seis herramientas. Luego verifica los registros de tu host, las rutas absolutas literales, la versión de Node y la propiedad del espacio de trabajo. Si Icon Composer está instalado por separado de Xcode, agrega ICON_COMPOSER_APP a la misma configuración de entorno del servidor con la ruta absoluta de .app.

Estas recetas se verificaron contra la documentación oficial el 5 de septiembre de 2026 y la ayuda del CLI instalado. Usa la documentación del host vinculada si las etiquetas de menú cambian.

Cliente MCP de línea de comandos

El cliente compilado es un pequeño llamador de diagnóstico. Inicia un servidor hijo con el ICON_WORKSPACE actual, lista las herramientas registradas o llama a una herramienta usando un archivo JSON.

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

Las llamadas sin argumentos pueden omitir el archivo JSON:

node dist/client.js call composer_status

El cliente acepta entrada JSON de hasta 2 MiB e imprime el resultado de MCP como JSON. Los fallos de herramientas devuelven un estado de salida distinto de cero. ICON_WORKSPACE es obligatorio incluso para tools porque el cliente siempre inicia el servidor local.

Un primer icono

El examples/orbit.json incluido es una solicitud completa de create_icon. Utiliza un fondo de dos paradas, dos grupos, capas SVG estáticas, material de vidrio y una especialización de fondo oscuro.

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

Para una vista previa oscura, guarda esto como render.json en el checkout (o cualquier archivo local pasado explícitamente al cliente):

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

La ruta PNG en el resultado es relativa a ICON_WORKSPACE. Abre orbit.icon en el Icon Composer de Apple para inspeccionar sus capas de forma interactiva. Guarda los experimentos manuales del editor como una copia separada; no se importan en la especificación gestionada.

La respuesta contiene la ruta lógica del bundle (orbit.icon) y una revisión SHA-256. La creación nunca sobrescribe un nombre de icono existente. Para revisar un icono, llama a read_icon, copia su spec y revision completos, y luego llama a update_icon con un nuevo outputName. El bundle original permanece sin cambios.

Superficie MCP

El servidor registra seis herramientas y un prompt. Las respuestas de las herramientas son texto JSON, excepto render_icon, que también puede incluir una imagen PNG cuando inline es verdadero.

HerramientaPropósito¿Escribe en el workspace?
composer_statusComprueba si el renderizador verificado de Apple está disponible; puede devolver su versión corta numérica.No
list_iconsLista los nombres de bundles de iconos válidos en el workspace configurado.No
create_iconValida una especificación completa y crea un nuevo bundle .icon editable.Sí
read_iconLee la especificación gestionada y su revisión.No
update_iconVerifica una revisión esperada y crea una especificación revisada bajo un nuevo nombre.Sí
render_iconRenderiza una apariencia PNG nativa, la guarda con un nombre de archivo único y opcionalmente la devuelve en línea.Sí

El prompt compose-icon proporciona una lista de verificación de composición: un lienzo de 1024 por 1024, grupos y capas de adelante hacia atrás, formas de vidrio separadas, arte oscuro cuando sea útil, seis renderizados de apariencia y una inspección de 32 px/1024 px. El texto del prompt es orientación; los esquemas de las herramientas siguen siendo autoritativos.

Referencia de especificación

create_icon acepta {name, spec}. update_icon requiere {name, outputName, expectedRevision, spec}. expectedRevision es la revisión hexadecimal de 64 caracteres devuelta por read_icon. Ambos aceptan objetos JSON estrictos. Los campos desconocidos se rechazan. La especificación gestionada actual se almacena como source.json dentro de cada bundle y es la autoridad utilizada por read_icon y las actualizaciones posteriores.

Campos de icono

CampoTipoRestricciones y valor predeterminado
backgroundstring o {top,bottom}Obligatorio. Los colores son #RRGGBB de seis dígitos; un objeto es un gradiente vertical.
darkBackgroundIgual que backgroundRelleno opcional de apariencia oscura.
platform"iOS" | "macOS"El valor predeterminado es "iOS".
groupsArrayObligatorio; 1–4 grupos.

Campos de grupo

CampoTipoRestricciones y valor predeterminado
namestringObligatorio, 1–80 caracteres; sin caracteres de control.
layersArrayObligatorio; 1–32 capas. Los grupos y capas están de adelante hacia atrás.
specularbooleanEl valor predeterminado es false.
blurnumber0–1, el valor predeterminado es 0.
translucencynumber0–1, el valor predeterminado es 0.
shadow"none" | "neutral" | "chromatic"El valor predeterminado es "none".
shadowOpacitynumber0–1, el valor predeterminado es 0.
lighting"combined" | "individual"El valor predeterminado es "combined".

Campos de capa

CampoTipoRestricciones y valor predeterminado
namestringObligatorio, 1–80 caracteres; sin caracteres de control.
svgstringSe requiere exactamente una fuente primaria: SVG estático de hasta 256 KiB.
pngBase64stringFuente primaria alternativa: PNG base64 no entrelazado, de como máximo 1 MiB y 1024 px por lado. Los píxeles se recodifican sin metadatos.
darkSvgstringEspecialización opcional de arte oscuro, con las mismas reglas SVG.
darkPngBase64stringEspecialización opcional de PNG oscuro, con las mismas reglas PNG.
glassbooleanEl valor predeterminado es false.
opacitynumber0–1, el valor predeterminado es 1.
scalenumber0.01–4, el valor predeterminado es 1.
x, ynumber−1024–1024 puntos, cada uno con valor predeterminado de 0.

El JSON completo del icono debe tener como máximo 2 MiB y contener como máximo 64 activos de arte, incluidas las especializaciones oscuras. SVG acepta un lenguaje estático deliberadamente pequeño de geometría, gradientes locales, máscaras y rutas de recorte, con entrada bruta limitada a 256 KiB, 4096 elementos y profundidad 32. URLs externas, URLs de datos, scripts, atributos de eventos, estilos, declaraciones y elementos no admitidos se rechazan. La entrada PNG debe ser un PNG válido, no animado, no entrelazado, con CRC intactos; los metadatos auxiliares se eliminan. El transporte MCP reserva hasta 3 MiB por fotograma.

Los colores de fondo y SVG sin etiquetar se emiten como valores Display P3 en el documento nativo. Los píxeles PNG no se convierten de color y los perfiles incrustados se eliminan; exporta arte PNG como sRGB antes de importarlo.

Renderizado

render_icon toma name, rendition, size, inline, tintColor opcional, tintStrength opcional y opaqueBackground opcional.

CampoTipoRestricciones y valor predeterminado
renditionDefault, Dark, TintedLight, TintedDark, ClearLight, ClearDarkEl valor predeterminado es Default.
sizeinteger16–1024 px, el valor predeterminado es 512.
inlinebooleanEl valor predeterminado es true; incluye el PNG como imagen MCP cuando es verdadero.
tintColornumberOpcional, 0–1. Se pasa al renderizador de Apple.
tintStrengthnumberOpcional, 0–1. Se pasa al renderizador de Apple.
opaqueBackground#RRGGBBOpcional. Compone el alfa renderizado sobre un PNG RGB opaco. Esta es una vista previa aplanada, no un icono fuente de App Store.

Después de verificar que los archivos nativos aún coinciden con la especificación gestionada, el renderizador crea un bundle temporal a partir de source.json, y luego invoca Apple ictool con la plataforma configurada del icono. La salida se verifica para la firma PNG y las dimensiones solicitadas antes de guardarse bajo un nombre de archivo generado en el workspace. El renderizado nativo no tiene aproximación ni respaldo de red.

Datos, revisiones y límites de seguridad

  • Los nombres son identificadores en minúsculas: una letra seguida de hasta 63 letras minúsculas, dígitos o guiones.
  • La creación y el renderizado escriben con modos de archivo restrictivos y nunca sobrescriben un icono existente o un nombre de vista previa.
  • update_icon es de copia en escritura: requiere la revisión SHA-256 actual y un nuevo nombre de salida. Una discrepancia detiene la actualización.
  • Las rutas del workspace están controladas por el entorno del proceso. Las llamadas a herramientas no pueden seleccionar rutas de archivos arbitrarias.
  • El servidor serializa las operaciones, excluye escritores concurrentes del workspace, limita las nuevas escrituras a un workspace con menos de 100 entradas de nivel superior y limita las operaciones de herramientas válidas a 120 por minuto por proceso. Los errores devueltos a través de MCP son deliberadamente genéricos y no revelan rutas locales ni detalles del proceso nativo.
  • El servidor no importa ediciones realizadas en la GUI nativa de Icon Composer. Si icon.json o un activo esperado se edita fuera de esta herramienta, la siguiente lectura/actualización rechaza el bundle en lugar de revertirlo silenciosamente. No hay importación arbitraria de .icon existente.

Consulta SECURITY.md para la política de informes del proyecto.

Ejemplos y verificación

El generador de galería lee las tres recetas JSON, crea documentos editables a través de MCP, renderiza las seis apariencias más una vista previa de 32 px, y actualiza los activos verificados. Requiere macOS y una instalación verificada de Apple Icon Composer:

npm run examples

Las comprobaciones regulares no requieren renderizado nativo:

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

La integración continua ejecuta esas comprobaciones independientes del host en Ubuntu. La galería nativa es una verificación manual en macOS porque Apple Icon Composer no está disponible en ese entorno de CI. Ejecuta npm run test:native en macOS para una verificación MCP real separada de capas PNG, rellenos sólidos, sombras cromáticas, ambas plataformas, todas las apariencias y exportaciones opacas.

Consejos de diseño

  • Comienza con una silueta simple que siga siendo legible a 32 px.
  • Mantén las formas de vidrio desconectadas en capas separadas para que los efectos de material puedan controlarse de forma independiente.
  • Usa como máximo cuatro grupos y mantén el orden de capas explícito.
  • Dale al modo oscuro su propio fondo y obra de arte cuando una marca clara pierde contraste.
  • Usa grupos planos con specular: false, blur: 0, translucency: 0, shadow: "none" y glass: false cuando la obra de arte deba permanecer visualmente estable.
  • Inspecciona tanto la vista previa más pequeña como un render nativo grande antes de distribuir un icono.

Solución de problemas

SíntomaResolución
El servidor sale antes de que aparezcan las herramientasEstablece un ICON_WORKSPACE absoluto; usa Node 24+ y ejecuta npm ci y luego npm run build. El directorio y los archivos gestionados deben ser propiedad de tu cuenta y no ser escribibles por grupo/mundo.
composer_status informa no disponibleInstala Apple Icon Composer. El valor predeterminado es la copia dentro de /Applications/Xcode.app. Para una copia independiente, establece ICON_COMPOSER_APP=/Applications/Icon\ Composer.app en tu shell, o el valor literal equivalente en el objeto env del host. Las restricciones de sandbox/confianza del sistema operativo también pueden impedir la verificación.
El nombre del icono ya existeElige un nombre nuevo; usa read_icon y update_icon para conservar el historial de revisiones.
El documento nativo fue modificado / archivos inesperadosConserva la copia manual. Crea un nuevo icono gestionado usando tu especificación deseada. No elimines source.json ni almacenes archivos no relacionados dentro de un paquete gestionado.
Espacio de trabajo ocupado después de un bloqueoDetén todos los procesos que usen ese espacio de trabajo. Inspecciona y elimina solo su directorio .operation-lock obsoleto; archiva los directorios temporales .render-* sobrantes antes de reiniciar. No elimines el bloqueo de un escritor activo.
Límite del espacio de trabajo alcanzadoArchiva iconos/vistas previas más antiguos fuera del espacio de trabajo activo, o configura un nuevo espacio de trabajo dedicado. No existe una herramienta de eliminación.
SVG rechazadoExporta trazados/formas simples con atributos de presentación en línea. Convierte el texto a trazados en tu editor de arte; elimina CSS, imágenes incrustadas, referencias externas y filtros.
PNG rechazadoExporta un PNG sRGB estático, no entrelazado, de hasta 1024 px por lado y 1 MiB.
La exportación opaca falla en un render detalladoEl aplanado actualmente acepta PNG nativos de hasta 1 MiB; la ruta de vista previa ordinaria permite 6 MiB. Prueba con una vista previa más pequeña.
El vidrio se ve unido o inesperadoColoca formas desconectadas en capas separadas y compara las seis representaciones nativas.

El formato de documento nativo no es una API pública de Apple versionada. La compatibilidad se verifica contra el renderizador instalado; una futura actualización de Apple puede requerir un cambio de mapeo. El paquete no automatiza la integración del proyecto Xcode, no compila catálogos de activos ni exporta un icono fuente de App Store sin máscara. opaqueBackground aplana la vista previa renderizada, incluida su silueta redondeada.

Arquitectura

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

La compilación verifica tipos con TypeScript y agrupa el servidor y la CLI con esbuild en dist/server.js y dist/client.js. Las importaciones de origen usan el alias @/ sin extensión para src/; la compilación resuelve estas importaciones. Las dependencias de tiempo de ejecución permanecen instaladas a través de npm.

El tiempo de ejecución usa los paquetes oficiales de servidor/cliente MCP, Zod, Saxes y PNGJS. No hay un constructor de comandos de shell, servidor HTTP, base de datos, servicio en segundo plano ni binario de Apple incluido. Los módulos de origen, las pruebas y los ejemplos reproducibles están incluidos en este repositorio; AGENTS.md mapea sus responsabilidades.

Contribuciones

Lee CONTRIBUTING.md antes de abrir un cambio. El repositorio está licenciado bajo la Licencia MIT.