Usar con agentes

MCP para Claude Code

El servidor MCP de canvappen le da a Claude Code 14 herramientas para leer, editar, revisar y exportar diseños .pen. En Claude Code aparecen como mcp__canvappen__<nombre>.

Configurar

La app instalada se ofrece a configurarse sola la primera vez que la abres, y también desde Ayuda → Configurar MCP en Claude Code. Solo agrega el servidor canvappen en tu configuración de usuario de Claude Code; no cambia permisos ni otros servidores.

Para registrarlo a mano, usa el comando de tu sistema y reinicia Claude Code:

macOS
claude mcp add canvappen --scope user -- \
  /Applications/canvappen.app/Contents/MacOS/canvappen --mcp
Windows
claude mcp add canvappen --scope user -- ^
  "%LOCALAPPDATA%\Programs\canvappen\canvappen.exe" --mcp

Cómo trabaja

SituaciónQué pasa
El documento está abierto en la appLos cambios se aplican en vivo, ves el puntero del agente y la app guarda el archivo
El documento está cerradocanvappen escribe el archivo y antes guarda una copia en ~/.canvappen/backups/ (las últimas 20 por archivo)
Varias operaciones en una llamadaForman una transacción: se aplican todas o ninguna
RutasSolo archivos dentro de tu carpeta de usuario, sin carpetas ocultas. Detalle en Archivos y rutas

Herramientas

Referencia

inspect

Resumen del documentoSolo lectura

Devuelve la versión, la cantidad de nodos, los frames raíz con posición y tamaño, las variables, los themes, las librerías importadas y los componentes locales. Indica si el documento está abierto en la app canvappen.

Parámetros

ParámetroTipoDescripción
pathobligatoriotextoRuta del archivo .pen (absoluta, relativa o con ~)

Ejemplos

Resumen de un diseño

mcp__canvappen__inspect
{
  "path": "~/proyecto/design.pen"
}

RespuestaJSON con path, openInApp, version, nodeCount, roots, themes, variables, imports y components

get_nodes

Leer nodosSolo lectura

Devuelve nodos por id con sus hijos hasta 'depth'. Con resolve expande instancias (ref) y variables y agrega 'bounds' calculados (posición absoluta y tamaño). Sin ids devuelve los nodos raíz.

Parámetros

ParámetroTipoDescripción
pathobligatoriotextoRuta del archivo .pen (absoluta, relativa o con ~)
idslista de textosIds de nodos; para descendientes de instancias usa 'instancia/descendiente'
depthenteroProfundidad de hijosde 0 a 20 · por defecto 2
resolvesí/noExpandir instancias y variables y calcular boundspor defecto false

Ejemplos

Leer un frame con dos niveles

mcp__canvappen__get_nodes
{
  "path": "design.pen",
  "ids": [
    "Lg3Bf"
  ]
}

Con posición calculada

mcp__canvappen__get_nodes
{
  "path": "design.pen",
  "ids": [
    "Lg3Bf"
  ],
  "resolve": true
}

RespuestaJSON: lista de nodos

search_nodes

Buscar nodosSolo lectura

Busca nodos por nombre, contenido de texto o tipo. Devuelve id, tipo, nombre, ancestros y un fragmento del texto.

Parámetros

ParámetroTipoDescripción
pathobligatoriotextoRuta del archivo .pen (absoluta, relativa o con ~)
querytextoTexto a buscar en name y content, sin distinguir mayúsculas
typetextoFiltrar por tipo de nodo (frame, text, ref…)
reusableOnlysí/noSolo componentes (reusable)por defecto false
limitenteroMáximo de resultadosde 1 a 500 · por defecto 50

Ejemplos

Buscar botones

mcp__canvappen__search_nodes
{
  "path": "design.pen",
  "query": "botón"
}

RespuestaJSON con count y results

list_components

Listar componentesSolo lectura

Lista los componentes (reusable) del documento y de las librerías .lib.pen importadas, con el id que debe usarse en 'ref'.

Parámetros

ParámetroTipoDescripción
pathobligatoriotextoRuta del archivo .pen (absoluta, relativa o con ~)

Ejemplos

Componentes disponibles

mcp__canvappen__list_components
{
  "path": "design.pen"
}

RespuestaJSON con libraries, count y components

get_variables

Variables y themesSolo lectura

Devuelve las variables (definición y valor resuelto) y los ejes de theme. Opcionalmente resuelve con una selección de theme.

Parámetros

ParámetroTipoDescripción
pathobligatoriotextoRuta del archivo .pen (absoluta, relativa o con ~)
themeobjetoSelección de theme, por ejemplo {"mode":"dark"} (en la CLI: --theme mode=dark)

Ejemplos

Variables en modo oscuro

mcp__canvappen__get_variables
{
  "path": "design.pen",
  "theme": {
    "mode": "dark"
  }
}

RespuestaJSON con themes, theme y variables

validate

ValidarSolo lectura

Valida el documento contra el schema 2.21 y reporta migraciones necesarias, normalizaciones y errores.

Parámetros

ParámetroTipoDescripción
pathobligatoriotextoRuta del archivo .pen (absoluta, relativa o con ~)

Ejemplos

Validar un diseño

mcp__canvappen__validate
{
  "path": "design.pen"
}

RespuestaJSON con valid, migratedFrom, warnings e issues. En la CLI el código de salida es 1 si algún archivo tiene errores

preview

Vista previaSolo lecturaSolo MCP

Renderiza nodos (o todos los frames raíz) y devuelve la imagen al agente para revisión visual. Limitada a 2048 px. Para guardar archivos usa export.

Parámetros

ParámetroTipoDescripción
pathobligatoriotextoRuta del archivo .pen (absoluta, relativa o con ~)
idslista de textosIds de nodos; para descendientes de instancias usa 'instancia/descendiente'
scalenúmeroEscalade 0.1 a 4 · por defecto 1
strictsí/noFallar si falta alguna fuente, imagen, icono, componente de librería o hay errores de scripts (por defecto, según la configuración: "strict" en config.json o CANVAPPEN_STRICT)

Ejemplos

Revisar un frame

mcp__canvappen__preview
{
  "path": "design.pen",
  "ids": [
    "Lg3Bf"
  ]
}

RespuestaImagen PNG y un JSON con tamaño, missingFonts, missingImages, missingIcons, brokenLibraries y scriptErrors. Con strict y algún faltante, la imagen se devuelve igual pero la respuesta se marca como error

apply_operations

Aplicar operacionesModifica el archivo

Aplica operaciones de edición en una transacción: insert, update, delete, move, replace, copy, detach, set_variables, set_themes, set_imports y set_fonts (ver el tema operations). Si la app canvappen tiene el documento abierto, el cambio se ve en vivo con el puntero del agente; si no, se escribe el archivo con respaldo. Si el archivo no existe, se crea.

Parámetros

ParámetroTipoDescripción
pathobligatoriotextoRuta del archivo .pen (absoluta, relativa o con ~)
operationsobligatorioJSONLista de operaciones (en la CLI: archivo .json, '-' para stdin o JSON en línea)
dryRunsí/noValida y simula sin guardarpor defecto false
labeltextoDescripción corta del cambio (se muestra en la app)

Ejemplos

Cambiar un texto

mcp__canvappen__apply_operations
{
  "path": "design.pen",
  "operations": [
    {
      "op": "update",
      "id": "t1",
      "props": {
        "content": "Hola"
      }
    }
  ]
}

Separar una instancia

mcp__canvappen__apply_operations
{
  "path": "design.pen",
  "operations": [
    {
      "op": "detach",
      "id": "card1"
    }
  ]
}

RespuestaJSON con appliedIn, createdIds, affectedIds, deletedIds y backup

convert_to_library

Convertir en libreríaModifica el archivo

Renombra el archivo a .lib.pen para usarlo como librería de componentes. Solo es posible si el documento no tiene librerías adjuntas. Si el documento está abierto en la app, ciérralo antes.

Parámetros

ParámetroTipoDescripción
pathobligatoriotextoRuta del archivo .pen (absoluta, relativa o con ~)

Ejemplos

Convertir un sistema de diseño

mcp__canvappen__convert_to_library
{
  "path": "sistema.pen"
}

RespuestaJSON con from y to

import_image

Importar imagenCrea archivos

Copia una imagen local (.png, .jpg, .jpeg, .webp o .gif) a la carpeta images/ del documento (sin duplicar si el contenido es igual) y, si insert es verdadero, inserta un rectángulo con la imagen a su tamaño real (máximo 1200 px).

Parámetros

ParámetroTipoDescripción
pathobligatoriotextoRuta del archivo .pen (absoluta, relativa o con ~)
sourceobligatoriotextoRuta de la imagen a importar
insertsí/noInsertar un nodo con la imagenpor defecto true
parenttextoId del frame donde insertar; por defecto en la raíz
xnúmeroPosición X
ynúmeroPosición Y
nametextoNombre del nodo; por defecto el nombre del archivo

Ejemplos

Usar una foto de Descargas

mcp__canvappen__import_image
{
  "path": "design.pen",
  "source": "~/Downloads/foto.jpg",
  "parent": "hero"
}

RespuestaJSON con url (relativa al .pen), width, height y nodeId

import_font

Importar fuenteCrea archivos

Copia la fuente a la carpeta fonts/ del documento, lee su familia, peso y estilo, y la agrega a 'fonts' del .pen.

Parámetros

ParámetroTipoDescripción
pathobligatoriotextoRuta del archivo .pen (absoluta, relativa o con ~)
sourceobligatoriotextoRuta del archivo .ttf u .otf

Ejemplos

Agregar una fuente

mcp__canvappen__import_font
{
  "path": "design.pen",
  "source": "~/Downloads/Marca-Bold.otf"
}

RespuestaJSON con name, url, weight y style

localize

Hacer autocontenidoCrea archivos

Descarga a la carpeta del documento las fuentes que hoy vienen de Google Fonts (solo los pesos y estilos que se usan, incluidos los de componentes de librerías) y las imágenes por http(s), y cambia las referencias del .pen a esos archivos. Después el documento se renderiza y exporta sin internet. Solo descarga de dominios permitidos: allowedHosts de la configuración o los permitidos por una persona para ese documento. Las fuentes del sistema que no están en Google Fonts se informan para importarlas con import_font.

Parámetros

ParámetroTipoDescripción
pathobligatoriotextoRuta del archivo .pen (absoluta, relativa o con ~)
withLibrariessí/noTambién localizar las librerías .lib.pen importadas (modifica esos archivos)por defecto false

Ejemplos

Preparar una presentación para el servidor

mcp__canvappen__localize
{
  "path": "deck.pen"
}

Incluir las librerías

mcp__canvappen__localize
{
  "path": "deck.pen",
  "withLibraries": true
}

RespuestaJSON con files (por archivo: fuentes, imágenes y recursos omitidos con el motivo) y complete. En la CLI el código de salida es 1 si quedó algún recurso sin localizar

export

ExportarCrea archivos

Exporta nodos o el documento completo. Con ids se respeta su orden; sin ids se exporta todo en orden de lectura del canvas. Por defecto guarda en <carpeta del .pen>/exports/<nombre-del-pen>/ (ver el tema export).

Parámetros

ParámetroTipoDescripción
pathobligatoriotextoRuta del archivo .pen (absoluta, relativa o con ~)
formatobligatoriopdf svg png jpeg webp htmlFormato de salida
idslista de textosIds de nodos; para descendientes de instancias usa 'instancia/descendiente'
scalenúmeroEscala (no aplica a SVG ni HTML)de 1 a 4 · por defecto 2
qualityhigh medium lowCalidad (no aplica a SVG ni HTML)por defecto "high"
outtextoRuta de salida; por defecto exports/<nombre-del-pen>/
overwritesí/noSobrescribir si out ya existe (dentro de exports/ siempre se sobrescribe)por defecto false
strictsí/noFallar si falta alguna fuente, imagen, icono, componente de librería o hay errores de scripts (por defecto, según la configuración: "strict" en config.json o CANVAPPEN_STRICT)

Ejemplos

Presentación completa en PDF

mcp__canvappen__export
{
  "path": "deck.pen",
  "format": "pdf"
}

Tres láminas en un orden propio

mcp__canvappen__export
{
  "path": "deck.pen",
  "format": "pdf",
  "ids": [
    "c3",
    "a1",
    "b2"
  ]
}

Un frame en PNG a 3x

mcp__canvappen__export
{
  "path": "design.pen",
  "format": "png",
  "ids": [
    "Lg3Bf"
  ],
  "scale": 3
}

RespuestaJSON con file, kind, count, order, bytes y siempre missingFonts, missingImages, missingIcons, brokenLibraries y scriptErrors (aunque estén vacíos). Con strict y algún faltante no se escribe el archivo y la respuesta es un error (código 1 en la CLI)

help

AyudaSolo lectura

Sin topic devuelve la vista general: qué es canvappen, el catálogo de funcionalidades y la lista de temas. Con topic devuelve el detalle de una funcionalidad (parámetros, respuesta y ejemplos) o de un tema: pen-format, operations, export o files.

Parámetros

ParámetroTipoDescripción
topictextoFuncionalidad o tema (por ejemplo export, pen-format u operations)

Ejemplos

Vista general

mcp__canvappen__help
{}

Detalle de la exportación

mcp__canvappen__help
{
  "topic": "export"
}

Formato .pen

mcp__canvappen__help
{
  "topic": "pen-format"
}

RespuestaTexto en Markdown

Cómo pedirle cambios a Claude

  • Indica la ruta del archivo: «en ~/proyecto/design.pen…». Claude no adivina qué documento quieres.
  • Pide primero una lectura (inspect o search_nodes) cuando el documento es grande; los cambios salen más precisos.
  • Para cambios grandes, pide que los simule con dryRun antes de aplicarlos.
  • Pide una vista previa (preview) para que Claude revise el resultado visual antes de seguir.
  • Si el diseño usa fuentes o imágenes de internet, localize las guarda junto al .pen para trabajar sin conexión.