WookcomDocsIr a Wookcom ↗

Referencia de herramientas MCP

Hay 31 herramientas registradas. ? indica campo opcional; los demás son obligatorios. ID es una cadena de 1–180 caracteres de [A-Za-z0-9_-]; R es entero no negativo. P = {projectId:ID}; M = P + {expectedRevision:R,idempotencyKey:ID}. Los objetos de entrada son estrictos salvo la extensión createInput de estudio; no envíes campos inventados. Los esquemas exactos y validaciones semánticas están enlazados debajo.

Cada éxito usa {content:[{type:"text",text:JSON.stringify(resultado)}],structuredContent:resultado}. No hay un outputSchema registrado: las formas de salida siguientes proceden de los servicios y no son un esquema JSON publicado. Las propiedades opcionales indefinidas no aparecen en el texto JSON. Los errores de herramienta usan isError:true y {error,message} en el texto; el transporte también puede rechazar antes de ejecutar.

E representa {project,revision,editorUrl,publishedUrl}; project es la instantánea completa, no solo document; publishedUrl depende de la publicación. L representa {items,nextCursor}. S representa {sessionId,version,status,question,summary?,nextAction,projectId?}: estado collecting|ready|created, pregunta {field,text,choices?} o null; resumen con type,businessName,businessDescription,audience,offer,contact,brandColor,products,missingPhotos.

Catálogo (sin autenticación)

Herramienta Entrada Resultado
builder_get_capabilities {} schemaVersion:3, limits, esquema JSON operations, desktopSafeArea, arrangement, responsiveReset, elementShadows, editorSettings, siteLanguage, componentDesign, sharedNavigation, blog, projectStore, publication, forms, commerce, studioMode, vercelExport, interactiveForms, academy
builder_list_components {query?:string≤300,category?:string≤80,cursor?:ID,limit?:1..50} L; cada entrada: id,name,description,category,type,width,height?,properties,source (autor y URL/SHA cuando existen); límite por defecto 25
builder_get_component {componentId:ID} Componente original: id,name,description,type,data,category y section?; conserva atribución original

Fuente: registro y catálogo.

Proyectos

Herramienta Alcance Entrada Resultado
builder_list_projects projects:read {cursor?:ID,limit?:1..50} L; entradas {id,name,revision,editorUrl,publishedUrl}; límite por defecto 25
builder_get_project projects:read P E
builder_create_project projects:write {name:string(1..300),document?:Documento,expectedRevision:0,idempotencyKey:ID} E; borrador sin publicación automática; requiere allowCreate
builder_apply_operations projects:write M + {operations:Operación[1..100]} E; lote atómico
builder_duplicate_project projects:write M + {name:string(1..300)} E; copia independiente sin publicar; requiere creación autorizada
builder_get_changes projects:read P + {cursor?:ID} L; hasta 50 entradas {id,revision,operation,at,source}
builder_restore_revision projects:write M + {revision:R} E; restaura como nueva revisión y conserva la sustituida
builder_get_links projects:read P {projectId,revision,editorUrl,publishedUrl}
builder_publish_project sites:publish M E; publicación explícita, puede exigir acceso comercial

Fuente: esquemas y materialización, servicio, instantánea y repositorio. Un conflicto de revisión devuelve revision_conflict; vuelve a leer antes de preparar otra operación.

Las 17 operaciones

T={scope:"header"|"page",pageId?:ID,sectionId:ID}: página exige pageId; cabecera lo omite. TE=T+{elementId:ID}.

op Campos adicionales
arrange_elements `target:T,elementIds:ID[1..1000],mode:row
create_page page:Página
update_page pageId:ID,page:parche de página sin id ni sections
delete_page pageId:ID
reorder_pages pageIds:ID[0..200]
upsert_section target:T,section:SecciónEntrada
delete_section target:T
reorder_sections `scope:header
move_section `target:T,to:{scope:header
upsert_element target:TE,element:ElementoEntrada
delete_element target:TE
reset_element_layout `target:TE,breakpoint:mobile
reorder_elements target:T,elementIds:ID[0..1000]
update_theme theme:parche de tema
update_metadata metadata:parche de metadatos
update_editor_settings settings:parche; automaticPublication solo false
update_store store:instantánea completa de tienda

Documento={pages,headerSections,theme,metadata,editorSettings,funnels?,store?}. Requiere 1–200 páginas, exactamente una de inicio, identificadores y slugs únicos, hasta 100 secciones de cabecera y destinos internos válidos. Página={id,name,pageKind?,popupSettings?,slug,isHome,seoTitle,seoDescription,sections}; pageKind=article|blog-index|popup, hasta 200 secciones. Una sección tiene id,name,category,height,styles,elements,columns?,columnGap?,locked?,hidden?,hiddenOn?; hasta 1000 elementos. SecciónEntrada admite campos parciales, exige id y acepta catalogComponentId. Un elemento tiene id,type,name,x,y,width,height,styles,content,zIndex?,locked?,hidden?,hiddenOn?,mobileLayout?,tabletLayout?; ElementoEntrada exige solo id, admite campos parciales y catalogComponentId. El servicio materializa los valores del catálogo o valida una definición completa. styles y content son objetos de propiedades permitidas, no CSS/HTML arbitrario. La escritura de elementos nuevos usa contenido nativo; el markup histórico tiene su propia validación de lectura/restauración.

El contrato completo de cada propiedad y límite (incluidos tema, diseño de componentes, popups, media, formularios clásicos, código y funnels) está en el esquema canónico, espacio de código, funnels y tienda. Usa también builder_get_capabilities.operations para obtener el esquema JSON real en tiempo de ejecución. Las validaciones refinadas (seguridad de URL/CSS, IDs, estructura e integridad de enlaces) se ejecutan además del esquema JSON.

Modo estudio (projects:write)

Herramienta Entrada Resultado
builder_studio_start {idempotencyKey:ID} S
builder_studio_get {sessionId} S
builder_studio_answer {sessionId,expectedVersion:R,value?:string≤3000,product?:Producto} S
builder_studio_create {sessionId,expectedVersion:R} E; solo resumen listo y confirmado por el usuario
builder_studio_revise `{sessionId,expectedVersion:R,field:businessName businessDescription

sessionId cumple ^studio-[a-f0-9]{32}$. Producto={name,description,price,stock,category,imageUrl}: nombre recortado 1–200; descripción 1–3000; precio finito 0–1000000; existencias enteras 0–100000; categoría 1–100; imagen string hasta 120000 y validación adicional HTTPS o data URI PNG/JPEG/WebP hasta 80000 bytes, o vacío. Haz una pregunta por turno y conserva los datos reales. Las elecciones iniciales son ecommerce|ventas|aterrizaje|funnel. No crear sin confirmación ni publicar por haber creado.

Fuente: esquemas, flujo y salida visible, pruebas.

Exportación (projects:read)

Herramienta Entrada Resultado
builder_export_vercel_manifest P + {expectedRevision:R} {projectId,revision,target:"preview",suggestedName,files:[{file,sha,size}],instructions,limitations}
builder_export_vercel_file P + {expectedRevision:R,path:string(1..180)} {file,sha,size,xVercelDigest,contentLength,requestBody,encoding:"base64"}

SHA1 y longitud corresponden a los bytes UTF-8; requestBody es base64. Lee cada ruta del manifiesto con la misma revisión. No se requiere ni acepta clave de idempotencia. No muestra ni transfiere credenciales Vercel. Componentes incompatibles pueden impedir exportar; cursos y formularios consultan Firebase, requieren reglas desplegadas y dominios autorizados para Google Sign-In. Fuente: exportación, pruebas.

Formularios

Herramienta Alcance Entrada Resultado
builder_list_forms projects:read P {items:[{id,...datosGuardados}],limit:100}
builder_save_form projects:write P + {form:Formulario} {formId,updated:true,published}
builder_delete_form projects:write P + {formId:ID} {formId,deleted:true}; elimina también envíos privados
builder_list_form_responses projects:read P + {formId:ID} {items:[{id,...datosGuardados}],limit:100}; sin cursor

Formulario={id:ID,title:string≤120,description:string≤600,presentation?:conversational|standard,published:boolean,welcomeTitle:string≤120,welcomeText:string≤500,endingTitle:string≤120,endingText:string≤500,completionUrl:string≤1000,questions:Pregunta[0..80]}. La validación semántica exige título no vacío y al menos una pregunta.

Pregunta={id:ID,title:string≤180,description:string≤500,type,required:boolean,placeholder:string≤100,options:string≤120[0..40],branches:Rama[0..30]}. Tipos: short|long|email|phone|number|single|multiple|yesno|date|rating|statement. Rama={id:ID,condition:equals|notEquals|contains|greaterThan|lessThan,value:string≤120,target:string≤1000}. Opciones obligatorias semánticamente en selección simple/múltiple; título de pregunta y condición no vacíos; IDs de pregunta únicos. El destino es una pregunta posterior, end o url:HTTPS. Se evalúa la primera coincidencia. Sin presentation, el renderizado conserva modo conversacional. Añade un elemento form-widget con content.formId; guardar la definición no coloca el widget ni publica el sitio. published sí controla la disponibilidad pública de la definición para respuestas.

Fuente: servicio y esquemas, validación semántica, pruebas. Las filas de respuesta son registros almacenados; no se declara un esquema de salida cerrado en el servidor MCP.

Academia

Herramienta Alcance Entrada Resultado
builder_list_courses projects:read P {academyName,academyLogo,courses,invites,members,requests,limit:50}
builder_rename_academy projects:write P + {name:string(1..80),logoUrl?:string} {name,updated:true}
builder_list_course_lessons projects:read P + {courseId:ID} {items:[{id,...datosGuardados}],limit:50}
builder_save_course projects:write P + {courseId:ID,title:string(1..120),summary:string≤600,published:boolean,order:entero(0..100000)} {courseId,updated:true}
builder_delete_course projects:write P + {courseId:ID} {courseId,deleted:true}; elimina lecciones y referencias de invitaciones/miembros
builder_save_course_lesson projects:write P + {courseId:ID,lessonId:ID,title:string(1..120),body:string≤30000,videoUrl:string,materials?:Material[0..30],order:entero(0..100000)} {lessonId,updated:true}
builder_set_course_invite projects:write P + {email:correo,courseIds:ID[1..100],active:boolean,duration?:Duración} {email,active}
builder_review_course_request projects:write P + {uid:ID,courseIds:ID[0..100],approve:boolean,duration?:Duración} {uid,approved}; elimina solicitud pendiente

Material={id:ID,name:string(1..120),url:HTTPS}. El vídeo admite vacío o URL HTTPS; el logo vacío o data URI PNG/JPEG/WebP hasta 90000 caracteres. Los títulos y el nombre se recortan. Duración={unit:days|months|years|unlimited,amount:entero(1..3650)}: incluso unlimited exige amount, aunque el plazo no lo use. El email se normaliza a minúsculas. Aprobar exige al menos un curso; cursos referenciados deben existir. Omitir duración en invitación conserva vencimiento previo; al aprobar una solicitud, omitirla concede sin vencimiento. Omitir materiales conserva los anteriores.

Los listados son hasta 50 filas por colección sin cursor; cursos y lecciones añaden id, invitaciones email, miembros/solicitudes uid a los datos almacenados. No hay esquema de salida cerrado para esos registros. Los contenidos privados viven fuera del documento público; vídeos externos enlazados no adquieren privacidad. Añade course-widget al proyecto para presentar la academia. Invitar, activar y eliminar requieren petición explícita del usuario.

Fuente: servicio y esquemas, pruebas.