# noback noback publica apps hechas por IA (un HTML o un .zip) y le da a la persona un link para usarlas y compartirlas. Los datos se guardan y sincronizan solos. ## Cómo publicar 1. Con MCP, SIN token ni cuenta: conectá https://apps.noback.page/mcp (Streamable HTTP) sin Authorization. Flujo: get_sdk → validate_app {html} → create_app {html,name?}. 2. Sin MCP: la persona abre https://noback.app y pega o suelta el HTML o el .zip. 3. Sin cliente MCP, con curl: ver «Sin cliente MCP (curl)» en https://apps.noback.page/sdk.md. ## Qué devolverle a la persona create_app devuelve openUrl, claimUrl y editKey. Dale SIEMPRE los dos links: - openUrl: «abrí y compartí tu app». Quien lo abre ve y edita LOS MISMOS datos. - claimUrl: «guardala en tu cuenta antes de que venza (7 días)». Es privado y lleva adentro la clave de edición: va solo a la persona, nunca a otros. Guardá appId y editKey para cambios. Nunca pongas editKey ni claimUrl en el HTML, en los datos ni en el link público. Para una versión nueva usá update_app {appId,html,editKey}, no otra create_app. ## Contrato y herramientas - https://apps.noback.page/sdk.md: contrato completo para generar HTML (leelo antes de escribir). get_sdk devuelve {"markdown": ...} con el mismo contenido. También está en https://noback.app/sdk.md, y https://noback.app/docs lo muestra para personas. - https://apps.noback.page/mcp: MCP Streamable HTTP, SDK oficial, sin estado (no hay Mcp-Session-Id). Expone get_sdk, validate_app, create_app y update_app con editKey. Apps anónimas a-xxxxxx: vencen en 7 días, límites por IP y sin app.net. - Para paquetes, reemplazá html por zipBase64 en validate_app/create_app/update_app. Corregí errors con su fix. Los warnings son avisos. - Opcional: Authorization: Bearer habilita gestión de cuenta. Creá el token en Mi cuenta → Tokens para la terminal. Nunca lo pongas en el HTML. Un token inválido se rechaza; las cookies no autentican MCP. OAuth queda pendiente. Con token, visibility es opcional y openUrl crea una copia al abrirse; compartila desde el menú de noback. update_app {appId,html} actualiza una app propia sin clave de edición. - list_apps, get_app, rollback_app, fork_app, list_instances, revoke_link, renew_link y delete_app (confirm:true): gestión solo con token. Aplican permisos y planes de la cuenta. Ninguna herramienta devuelve contenido de documentos, solo métricas. fork_app withData clona una copia propia; instanceId elige entre varias. Solo el dueño de una copia puede renovar su link; el dueño de la app puede revocarlo. ## Cómo corre la app (detalles técnicos) Un HTML o un .zip con index.html en la raíz, recursos propios y noback.toml opcional (nombre, descripcion, red). La app corre en el navegador, en un iframe sandbox de origen opaco, con CSP y Connection-Allowlist sin red. La plataforma inyecta window.app: esperá app.ready y guardá estado en app.db. Automerge sincroniza los datos; el relay almacena y reenvía, sin interpretarlos. El puente admite 120 operaciones por segundo: en juegos y clickers juntá los cambios en memoria y guardá cada 1–2 s, no en cada clic. No uses recursos externos, fetch externo/XMLHttpRequest/WebSocket ni storage del iframe. WASM de un hilo está permitido; fetch("ruta.wasm"), app.asset y app.assetURL leen recursos del paquete por el puente, sin red propia. Sin workers. HTML: 512 KiB anónimo, 2 MiB Hobby, 5 MiB Pro. Paquetes: 5 MiB anónimo, 25 MiB Hobby, 100 MiB Pro, comprimido y descomprimido. red limita dominios exactos: los no declarados fallan sin preguntar. Para red con permiso usá app.net.fetch; el modo anónimo no tiene red.