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:
claude mcp add canvappen --scope user -- \
/Applications/canvappen.app/Contents/MacOS/canvappen --mcpclaude mcp add canvappen --scope user -- ^
"%LOCALAPPDATA%\Programs\canvappen\canvappen.exe" --mcpCómo trabaja
| Situación | Qué pasa |
|---|---|
| El documento está abierto en la app | Los cambios se aplican en vivo, ves el puntero del agente y la app guarda el archivo |
| El documento está cerrado | canvappen escribe el archivo y antes guarda una copia en ~/.canvappen/backups/ (las últimas 20 por archivo) |
| Varias operaciones en una llamada | Forman una transacción: se aplican todas o ninguna |
| Rutas | Solo archivos dentro de tu carpeta de usuario, sin carpetas ocultas. Detalle en Archivos y rutas |
Herramientas
Leer el documento
inspectResumen de un .pen: frames raíz, variables, themes, librerías y componentesget_nodesNodos por id con sus hijos; opcionalmente con instancias, variables y posición calculadassearch_nodesBusca nodos por nombre, texto o tipolist_componentsComponentes del documento y de las librerías importadasget_variablesVariables con su valor resuelto y ejes de themeRevisar
Editar
Imágenes, fuentes y recursos
Referencia
inspect
Resumen del documentoSolo lecturaDevuelve 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ámetro | Tipo | Descripción |
|---|---|---|
pathobligatorio | texto | Ruta del archivo .pen (absoluta, relativa o con ~) |
Ejemplos
Resumen de un diseño
{
"path": "~/proyecto/design.pen"
}RespuestaJSON con path, openInApp, version, nodeCount, roots, themes, variables, imports y components
get_nodes
Leer nodosSolo lecturaDevuelve 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ámetro | Tipo | Descripción |
|---|---|---|
pathobligatorio | texto | Ruta del archivo .pen (absoluta, relativa o con ~) |
ids | lista de textos | Ids de nodos; para descendientes de instancias usa 'instancia/descendiente' |
depth | entero | Profundidad de hijosde 0 a 20 · por defecto 2 |
resolve | sí/no | Expandir instancias y variables y calcular boundspor defecto false |
Ejemplos
Leer un frame con dos niveles
{
"path": "design.pen",
"ids": [
"Lg3Bf"
]
}Con posición calculada
{
"path": "design.pen",
"ids": [
"Lg3Bf"
],
"resolve": true
}RespuestaJSON: lista de nodos
search_nodes
Buscar nodosSolo lecturaBusca nodos por nombre, contenido de texto o tipo. Devuelve id, tipo, nombre, ancestros y un fragmento del texto.
Parámetros
| Parámetro | Tipo | Descripción |
|---|---|---|
pathobligatorio | texto | Ruta del archivo .pen (absoluta, relativa o con ~) |
query | texto | Texto a buscar en name y content, sin distinguir mayúsculas |
type | texto | Filtrar por tipo de nodo (frame, text, ref…) |
reusableOnly | sí/no | Solo componentes (reusable)por defecto false |
limit | entero | Máximo de resultadosde 1 a 500 · por defecto 50 |
Ejemplos
Buscar botones
{
"path": "design.pen",
"query": "botón"
}RespuestaJSON con count y results
list_components
Listar componentesSolo lecturaLista los componentes (reusable) del documento y de las librerías .lib.pen importadas, con el id que debe usarse en 'ref'.
Parámetros
| Parámetro | Tipo | Descripción |
|---|---|---|
pathobligatorio | texto | Ruta del archivo .pen (absoluta, relativa o con ~) |
Ejemplos
Componentes disponibles
{
"path": "design.pen"
}RespuestaJSON con libraries, count y components
get_variables
Variables y themesSolo lecturaDevuelve las variables (definición y valor resuelto) y los ejes de theme. Opcionalmente resuelve con una selección de theme.
Parámetros
| Parámetro | Tipo | Descripción |
|---|---|---|
pathobligatorio | texto | Ruta del archivo .pen (absoluta, relativa o con ~) |
theme | objeto | Selección de theme, por ejemplo {"mode":"dark"} (en la CLI: --theme mode=dark) |
Ejemplos
Variables en modo oscuro
{
"path": "design.pen",
"theme": {
"mode": "dark"
}
}RespuestaJSON con themes, theme y variables
validate
ValidarSolo lecturaValida el documento contra el schema 2.21 y reporta migraciones necesarias, normalizaciones y errores.
Parámetros
| Parámetro | Tipo | Descripción |
|---|---|---|
pathobligatorio | texto | Ruta del archivo .pen (absoluta, relativa o con ~) |
Ejemplos
Validar un diseño
{
"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 MCPRenderiza 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ámetro | Tipo | Descripción |
|---|---|---|
pathobligatorio | texto | Ruta del archivo .pen (absoluta, relativa o con ~) |
ids | lista de textos | Ids de nodos; para descendientes de instancias usa 'instancia/descendiente' |
scale | número | Escalade 0.1 a 4 · por defecto 1 |
strict | sí/no | Fallar 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
{
"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 archivoAplica 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ámetro | Tipo | Descripción |
|---|---|---|
pathobligatorio | texto | Ruta del archivo .pen (absoluta, relativa o con ~) |
operationsobligatorio | JSON | Lista de operaciones (en la CLI: archivo .json, '-' para stdin o JSON en línea) |
dryRun | sí/no | Valida y simula sin guardarpor defecto false |
label | texto | Descripción corta del cambio (se muestra en la app) |
Ejemplos
Cambiar un texto
{
"path": "design.pen",
"operations": [
{
"op": "update",
"id": "t1",
"props": {
"content": "Hola"
}
}
]
}Separar una instancia
{
"path": "design.pen",
"operations": [
{
"op": "detach",
"id": "card1"
}
]
}RespuestaJSON con appliedIn, createdIds, affectedIds, deletedIds y backup
convert_to_library
Convertir en libreríaModifica el archivoRenombra 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ámetro | Tipo | Descripción |
|---|---|---|
pathobligatorio | texto | Ruta del archivo .pen (absoluta, relativa o con ~) |
Ejemplos
Convertir un sistema de diseño
{
"path": "sistema.pen"
}RespuestaJSON con from y to
import_image
Importar imagenCrea archivosCopia 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ámetro | Tipo | Descripción |
|---|---|---|
pathobligatorio | texto | Ruta del archivo .pen (absoluta, relativa o con ~) |
sourceobligatorio | texto | Ruta de la imagen a importar |
insert | sí/no | Insertar un nodo con la imagenpor defecto true |
parent | texto | Id del frame donde insertar; por defecto en la raíz |
x | número | Posición X |
y | número | Posición Y |
name | texto | Nombre del nodo; por defecto el nombre del archivo |
Ejemplos
Usar una foto de Descargas
{
"path": "design.pen",
"source": "~/Downloads/foto.jpg",
"parent": "hero"
}RespuestaJSON con url (relativa al .pen), width, height y nodeId
import_font
Importar fuenteCrea archivosCopia la fuente a la carpeta fonts/ del documento, lee su familia, peso y estilo, y la agrega a 'fonts' del .pen.
Parámetros
| Parámetro | Tipo | Descripción |
|---|---|---|
pathobligatorio | texto | Ruta del archivo .pen (absoluta, relativa o con ~) |
sourceobligatorio | texto | Ruta del archivo .ttf u .otf |
Ejemplos
Agregar una fuente
{
"path": "design.pen",
"source": "~/Downloads/Marca-Bold.otf"
}RespuestaJSON con name, url, weight y style
localize
Hacer autocontenidoCrea archivosDescarga 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ámetro | Tipo | Descripción |
|---|---|---|
pathobligatorio | texto | Ruta del archivo .pen (absoluta, relativa o con ~) |
withLibraries | sí/no | También localizar las librerías .lib.pen importadas (modifica esos archivos)por defecto false |
Ejemplos
Preparar una presentación para el servidor
{
"path": "deck.pen"
}Incluir las librerías
{
"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 archivosExporta 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ámetro | Tipo | Descripción |
|---|---|---|
pathobligatorio | texto | Ruta del archivo .pen (absoluta, relativa o con ~) |
formatobligatorio | pdf svg png jpeg webp html | Formato de salida |
ids | lista de textos | Ids de nodos; para descendientes de instancias usa 'instancia/descendiente' |
scale | número | Escala (no aplica a SVG ni HTML)de 1 a 4 · por defecto 2 |
quality | high medium low | Calidad (no aplica a SVG ni HTML)por defecto "high" |
out | texto | Ruta de salida; por defecto exports/<nombre-del-pen>/ |
overwrite | sí/no | Sobrescribir si out ya existe (dentro de exports/ siempre se sobrescribe)por defecto false |
strict | sí/no | Fallar 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
{
"path": "deck.pen",
"format": "pdf"
}Tres láminas en un orden propio
{
"path": "deck.pen",
"format": "pdf",
"ids": [
"c3",
"a1",
"b2"
]
}Un frame en PNG a 3x
{
"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 lecturaSin 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ámetro | Tipo | Descripción |
|---|---|---|
topic | texto | Funcionalidad o tema (por ejemplo export, pen-format u operations) |
Ejemplos
Vista general
{}Detalle de la exportación
{
"topic": "export"
}Formato .pen
{
"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 (
inspectosearch_nodes) cuando el documento es grande; los cambios salen más precisos. - Para cambios grandes, pide que los simule con
dryRunantes 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,
localizelas guarda junto al .pen para trabajar sin conexión.