Saltar al contenido principal

Live apps por MCP

live_apps es el área más grande de la conexión: dieciséis acciones que llevan una app desde "¿qué datos tengo siquiera?" hasta un tablero publicado que se actualiza solo. Esta página es el contrato — las fases, las acciones de cada una, y los controles que hay entre ellas.

Para saber qué es una live app y cómo se usa en el día a día, empieza por Live Apps.


Tu asistente la construye. Nirvai la inspecciona.

Hay dos formas de tener una live app. Dentro de Nirvai, el constructor integrado hace el trabajo por ti. A través de la conexión, tu asistente es el constructor — escribe la interfaz, los componentes, los scripts de datos y el manifiesto que los une, y sube el resultado terminado.

Piénsalo como un contratista y un inspector de obra. El contratista hace el trabajo real; el inspector nunca toma una herramienta, pero somete ese trabajo exactamente a la misma norma que a la cuadrilla de la casa, y nada se aprueba si no pasa. Aquí no hay una acción de "construir", porque no hay nada que delegar.

Por qué las fases van en orden

Datos antes que estilo, estilo antes que construcción, validación antes que puesta en escena — así el look se elige para datos que ya se vieron, y tú apruebas una app que ya se renderizó. El orden se exige, no se sugiere: test_app se niega con una app cuyas secciones no tienen datos, y stage se niega con una cuya última validación falló.


Las dieciséis acciones, en orden de construcción

FaseAcciónAlcanceQué hace
Descubrirlive_apps.list_custom_tools(search)readTus herramientas conectadas, cada una con el id que un script usa para alcanzarla. Siempre con búsqueda — una cuenta real tiene cientos.
live_apps.list_nirvai_tools()readTodo lo que ya vive dentro de Nirvai: tus bases de datos, tus memorias y los propios datos de la plataforma.
live_apps.get_database_info(database_uuids)readLas columnas y tipos reales de las bases de datos que leerá la app, y cómo filtrarlas.
live_apps.get_memory_info(memory_uuids)readQué contiene una memoria, y las formas de solo lectura en que un script puede consultarla.
live_apps.propose(name, sources, …)runAbre una página de revisión con exactamente qué fuentes leerá la app. Tú aceptas, o devuelves cambios.
Datoslive_apps.test_script(code, sources, app, name)runCorre el script de una sección contra tus fuentes reales y guarda el resultado como su primera foto. Una llamada por sección.
live_apps.get_snapshot(app, script?)readLee esas fotos de vuelta como formas — cuántas filas, qué campos, cuándo se corrió.
Estilolive_apps.list_brand_logos(query?)readLogos reales de los servicios que cubre la app, para que quede con marca y no dibujada a mano.
live_apps.theme_propose(directions, …)runAbre un tablero de looks con una a tres propuestas completas. Tú eliges una.
Validarlive_apps.test_app(app)runLa batería de controles: estructura, y luego un render real con datos, sin datos y con error, en escritorio y móvil. Se repite hasta que pasa.
Prepararlive_apps.stage(app)runConvierte la app validada en una vista previa funcional con un botón Guardar. Se niega si el último test_app no salió bien.
Guardarlive_apps.publish(title, app, …)writeLa deja como app permanente. Con el id de una app existente, la edita en su lugar.
Cuando sealive_apps.list(filter?)readTus apps, como tarjetas breves.
live_apps.get(app)readEl contrato completo de una app — estado, tema, sus secciones y las fuentes que declara cada una.
live_apps.load(uuid, app?)readCopia una app publicada de vuelta a la sesión de trabajo para editarla y volver a publicarla.
live_apps.list_data_sources(query?)readObsoleta. Reemplazada por las cuatro acciones de descubrimiento de arriba; sigue solo para que el trabajo antiguo no se rompa.

Todo desde propose en adelante pertenece a una sola sesión, hilada de punta a punta, para que la app se acumule en un solo lugar.

Dónde lo terminas tú

Dos de esas acciones te devuelven una página, y no son el mismo tipo de página. Las dos viven dentro de Nirvai, necesitan que estés conectado, y nadie más puede verlas.

Elegir el look. live_apps.theme_propose abre /external/live-app-theme/… — un tablero con una a tres direcciones de diseño completas. Es de solo lectura: elegir no crea nada, solo le dice a tu asistente hacia dónde construir.

Guardar la app. Cuando live_apps.test_app pasa, live_apps.stage abre /external/live-app/… — la funcional. Es la app real y funcionando, con un botón Guardar siempre a la vista, más un modo Tweak para dejar comentarios fijados en elementos concretos. Guardar es publicar.

  • Nada te llega antes de renderizar. stage se niega con una app cuyo último test_app falló.
  • Para cambiar algo, copia el bloque que te da la página y pégalo en tu chat — ninguna de las dos puede escribirle a tu asistente. Mira la referencia MCP.
  • live_apps.publish es la alternativa directa, para cuando ya le dijiste a tu asistente que la termine — sin página de por medio.

Los cuatro tipos de datos

Una app puede construirse sobre cualquier mezcla de estos, cada uno declarado por sección:

FuenteSe declara comoQué le da a la app
Tus herramientas conectadastool_idsTodo lo que hayas conectado — una tienda, una cuenta de anuncios, un CRM.
Tus bases de datos de Nirvaidatabase_uuidsTus propias tablas, direccionadas por id.
Tus memoriasmemory_uuidsLos hechos de largo plazo que guardan tus agentes — solo lectura.
Los datos propios de Nirvainirvai_toolsTus agentes, automatizaciones, consumo de créditos y actividad. Nada que conectar.

Esa declaración es la lista exacta que la sección puede tocar al ejecutarse; intentar cualquier otra cosa falla de forma ruidosa, nombrando lo que tenía permitido.

Una live app solo puede mirar

A través de la conexión, los scripts de live apps son forzados a solo lectura: una sección puede leer tus registros, nunca cambiarlos. Una live app es una lente, no un panel de control — mira qué pueden leer tus apps para ver dónde está esa línea.


Ejemplos

Descubrir qué existe y proponer el conjunto de fuentes.

nirvai_execute(
alias = "live_apps.list_nirvai_tools",
args = { },
description = "Ver qué bases de datos y memorias podría leer esta app"
)

nirvai_execute(
alias = "live_apps.propose",
args = { name: "Sales cockpit", app_code: "sales",
description: "Pipeline totals plus the follow-up list.",
tool_ids: [1697], database_uuids: ["8e0438a3-…"],
nirvai_tools: ["track_agents"], session: "sales-app" },
description = "Proponer los datos que leerá esta app de ventas"
)

Probar una sección con datos reales. Nada es simulado — el script corre contra tus fuentes en vivo, y lo que vuelve queda como la foto de esa sección.

nirvai_execute(
alias = "live_apps.test_script",
args = { app: "sales", name: "open_deals",
code: "def main(params):\n from tools import database_ai_execute_select\n …",
database_uuids: ["8e0438a3-…"], session: "sales-app" },
description = "Comprobar que la sección de negocios abiertos devuelve filas reales"
)

Validar y devolvértela.

nirvai_execute(alias = "live_apps.test_app",
args = { app: "sales", session: "sales-app" },
description = "Correr la batería de controles sobre la app terminada")

nirvai_execute(alias = "live_apps.stage",
args = { app: "sales", session: "sales-app" },
description = "Abrir la vista previa funcional para que la guarde")

stage devuelve un enlace a la app real y funcionando, con un botón Guardar. Nada existe en tu cuenta hasta que lo aprietas.


Límites y garantías

  • Solo lectura, siempre. Ninguna sección de una live app puede modificar un registro, en ninguna fuente, por ninguna vía.
  • Las secciones están aisladas. Un script de datos no tiene acceso a archivos, ni a red, ni importaciones — solo las fuentes que declaró y los datos que devuelve. (El entorno sin restricciones es otra área: mira Automatizaciones y skills.)
  • Los secretos nunca viajan. Las propuestas llevan ids, nombres y formas de las fuentes. Las credenciales detrás de ellas se resuelven del lado de Nirvai, en el momento en que corre el script.
  • Tú la guardas. stage abre una vista previa. La app existe cuando aprietas Guardar — o cuando ya la aprobaste y tu asistente llama a publish.
  • Editar es en el mismo lugar. load → cambiar → publish conserva la misma app, el mismo id y el mismo historial.
  • Solo las tuyas, por id. Las apps se direccionan por id y solo se resuelven las tuyas; cualquier otra vuelve como no encontrada. Borrar una app por la conexión es imposible.
  • Los resultados van acotados. Cada acción devuelve una vista previa más un enlace. El resultado completo de un script vuelve como un archivo descargable, nunca pegado en un chat.
  • Instantáneo y después en vivo. Una app publicada se pinta al toque con su última foto guardada, y después vuelve a correr contra las fuentes en vivo cuando se lo pides.

Siguiente paso