idmly
Convierte un diseño HTML autocontenido en un archivo editable de Adobe InDesign (.idml): marcos de texto en vivo, estilos de párrafo, imágenes vinculadas. Las primeras 2 páginas son gratis; licencia de por vida de $49 para documentos completos.
Servidor MCP alojado
npx add-mcp 'https://idmly-production.up.railway.app/mcp'Se instala en Claude Code, Codex, Cursor y más
Documentación
idmly-mcp
Convierte un diseño HTML autocontenido en un archivo editable de Adobe InDesign (.idml) desde el agente de IA que ya utilizas. Este es el motor idmly expuesto como servidor del Model Context Protocol, para que Claude Code, Cursor, Codex, Windsurf o Claude Desktop puedan entregar un diseño terminado directamente a InDesign.
Las dos primeras páginas de cualquier diseño se convierten gratis, sin necesidad de clave. Una licencia de por vida de $49 desbloquea conversiones ilimitadas de documentos completos y cubre tanto el sitio web como esta herramienta.
Instalación
Node 20 o superior. El servidor se ejecuta con npx, no hay nada que clonar. Inicia sin clave y la prueba gratuita funciona de inmediato.
Claude Code
claude mcp add idmly -- npx -y idmly-mcp
Cursor, Windsurf, Claude Desktop (mcp.json / claude_desktop_config.json)
{
"mcpServers": {
"idmly": { "command": "npx", "args": ["-y", "idmly-mcp"] }
}
}
Codex CLI (~/.codex/config.toml)
[mcp_servers.idmly]
command = "npx"
args = ["-y", "idmly-mcp"]
Con una licencia, agrega la clave de tu correo de compra como variable de entorno:
claude mcp add idmly -e IDMLY_LICENSE_KEY=<your key> -- npx -y idmly-mcp
"env": { "IDMLY_LICENSE_KEY": "<your key>" }
env = { IDMLY_LICENSE_KEY = "<your key>" }
Herramientas
convert_to_indesign
Proporciónale exactamente uno de los siguientes:
| argumento | qué es |
|---|---|
html | el documento HTML completo como cadena |
path | un archivo .html local (solo se sube este archivo) |
url | un enlace https público a un .html alojado |
Opcional: out_dir (dónde escribir; por defecto, la carpeta del archivo fuente o el directorio actual), name (nombre base de salida), platform (mac o win, que InDesign abrirá el archivo; elige fuentes de respaldo por glifo, por defecto esta máquina).
Escribe <name>.idml y devuelve la ruta, las páginas convertidas, las fuentes que InDesign necesita activas y una verificación de geometría. Un diseño con imágenes regresa como una carpeta que contiene el .idml y un directorio Links/; mantenlos juntos e InDesign encontrará cada imagen. La salida de prueba se llama <name>-trial.idml.
idmly_status
Informa si el motor es accesible y si hay una clave de licencia configurada (solo presencia; la clave se valida en la primera conversión).
Escribir HTML que se convierta bien
- Cada página es un bloque de tamaño fijo con la clase
page(oslide). Un pliego de dos páginas para lectura es la clasespread. Tamaños típicos: 816×1056px Carta, 794×1123px A4, 1920×1080px diapositiva, conoverflow: hidden. Un lienzo de ancho fijo sin marcadores se convierte como una página; una página fluidawidth: 100%no tiene tamaño intrínseco. - Mantén el archivo autocontenido: CSS y JS en línea, fuentes de Google Fonts o incrustadas, imágenes como data URIs o URLs absolutas. Una hoja de estilo o imagen junto al archivo no se sube.
- Dibuja gráficos como SVG en línea o HTML en lugar de imágenes rasterizadas, para que sigan siendo editables.
- Evita scripts que nunca se estabilicen (un MutationObserver o un controlador de redimensionamiento que se re-dispara). El motor renderiza la página una vez, la mide y la reconstruye como marcos de InDesign.
El texto se convierte en marcos de texto editables con estilos de párrafo, las tablas siguen siendo tablas, y el SVG y las formas CSS se convierten en objetos vectoriales.
Texto que un diseñador puede seguir editando
Cómo está marcado el texto decide en cuántos marcos aterriza y qué llevan los estilos de párrafo.
- Los párrafos consecutivos dentro de una caja se convierten en un marco de texto, un párrafo cada uno. Sepáralos con
margin-topomargin-bottom; llega como Espacio Antes o Espacio Después en el párrafo que lleva el margen. Un párrafo espaciador vacío (<p> </p>) también mantiene el marco completo. padding-leftes la sangría izquierda ytext-indentla sangría de primera línea, así quepadding-left: 46pt; text-indent: -46ptes una sangría francesa.- Un carácter de tabulación real (dentro de
white-space: preopre-wrap) obtiene paradas de tabulación en la cuadrícula CSS: establecetab-sizecomo longitud (tab-size: 46pt) para colocar la parada donde quieras. - Una lista de dos columnas (contenidos, precios, créditos) se convierte mejor como
<table>: se convierte en una tabla nativa de InDesign con un estilo de párrafo por celda. - Los estilos de párrafo se nombran a partir de la etiqueta y la primera clase del elemento (
<p class="caption">da "Body · caption"). Para nombrarlo directamente, agregadata-idml-style="Cover Dates". - Las cajas que contienen un texto continuo se pueden enlazar: dales el mismo
data-idml-thread="cv"y se convierten como una historia enhebrada, marco a marco, en orden de documento (odata-idml-thread-order="1","2", ...). Cada marco excepto el último se fija al tamaño de su texto, así que una línea añadida empuja el texto al siguiente marco. Si una caja comienza a mitad de párrafo, agregadata-idml-thread-continuesy su primer párrafo se une al último de la caja anterior. InDesign recomponer una historia enhebrada, así que una línea puede cruzar un límite de marco en comparación con el HTML. - Un elemento
display: inline-blocken línea dentro de un párrafo es una caja propia y se convierte en su propio marco. Usa un<span>simple para un tramo que solo cambia fuente o color.
Cuando falla
| resultado | significado | qué hacer |
|---|---|---|
| 402 sin clave | la prueba gratuita se agotó para este diseño o esta hora | el resultado incluye el precio y el enlace de pago |
| 402 con clave | la clave no fue aceptada | verifica la clave; si funcionó antes, elimina ~/.idmly/instances.json para que la próxima llamada se active de nuevo |
| 413 | supera el límite de tamaño (15 MB prueba, 50 MB con licencia) | reduce la escala o recodifica las imágenes, o alójalas y usa URLs absolutas |
| 422 | nada se renderizó, o un script nunca terminó | incluye los recursos faltantes; elimina el script descontrolado |
| 429 / 503 | límite de velocidad, o el servicio de licencias no está disponible | reintenta después de retry_after_seconds |
Los diseños grandes pueden tardar un par de minutos en renderizarse. Algunos clientes cortan las llamadas de herramientas a los 60 segundos por defecto; aumenta el tiempo de espera por herramienta de tu cliente (por ejemplo, MCP_TOOL_TIMEOUT en Claude Code) para documentos grandes.
Entorno
| variable | predeterminado | propósito |
|---|---|---|
IDMLY_LICENSE_KEY | ninguno (prueba gratuita) | tu clave de licencia de idmly.com |
IDMLY_OUT_DIR | junto a la fuente | directorio de salida predeterminado |
IDMLY_ENGINE_URL | el motor alojado | anulación para un motor autoalojado |
La clave se activa en el primer uso. El id de activación se guarda en ~/.idmly/instances.json bajo un hash de la clave; la clave en sí nunca se escribe en disco por esta herramienta. Cada máquina que ejecuta el servidor usa una activación de la asignación de la licencia.
Endpoint alojado
Si prefieres no ejecutar un proceso local, el motor también habla MCP sobre Streamable HTTP:
https://idmly-production.up.railway.app/mcp
Authorization: Bearer <your key> (omit the header for the free trial)
Como una herramienta remota no puede escribir en tu disco, ese endpoint devuelve un enlace de descarga de un solo uso en lugar de una ruta de archivo: el archivo se elimina tan pronto como se descarga, o después de diez minutos sin descargar. El mismo endpoint funciona con la herramienta mcp de la API de OpenAI Responses y el Agents SDK.
REST simple es POST /convert con un file multipart (o url), más license_key y instance_id. La primera respuesta con licencia lleva un encabezado X-Idmly-Instance; envía ese valor de vuelta como instance_id en cada llamada posterior, o cada llamada activa un nuevo dispositivo contra la licencia. La respuesta es el .idml en sí, o application/zip (que contiene converted.idml y Links/) cuando el diseño tiene imágenes.
Privacidad
Los diseños subidos se eliminan del motor tan pronto como se devuelve el archivo convertido. En el endpoint MCP alojado, el archivo convertido espera detrás de un enlace de un solo uso e imposible de adivinar durante hasta diez minutos para que el agente pueda descargarlo, y luego se elimina. Sin cuentas. El motor mantiene un registro de uso de primera parte (conteos, resultado, país), nunca tu archivo ni tu clave.
Desarrollo
npm install
npm test # type-checks, bundles, then runs the client against a stub engine (no network)
El paquete publicado no tiene dependencias de ejecución: npm run build agrupa el
MCP SDK y zod en dist/index.js, así que los usuarios de npx obtienen exactamente el archivo contra el que se ejecutaron las pruebas. Las actualizaciones de dependencias llegan como una solicitud de extracción semanal de Dependabot; fusionarla publica una nueva versión de parche desde GitHub Actions con procedencia.
Licencia
MIT para este cliente. El motor idmly es un servicio alojado, consulta idmly.com/legal.