boosterarena-mcp 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/LEEME.md ADDED
@@ -0,0 +1,109 @@
1
+ # El MCP de Booster
2
+
3
+ Tu agente de código trabajando **dentro** de [boosterarena.com](https://boosterarena.com): abre
4
+ tus proyectos, arma los slides, pone boosters y Boost Arenas, sube tus imágenes y tus audios, y
5
+ lo guarda en tu cuenta. Lo que salga queda en tu galería como si lo hubieras hecho a mano.
6
+
7
+ Es **gratis** y va con la cuenta gratuita. Lo único que pide plan Pro son ciertos *elementos*
8
+ premium, y cuando eso pasa el servidor te lo dice con todas las letras para que tu agente pueda
9
+ explicártelo, en vez de fallar sin motivo.
10
+
11
+ ---
12
+
13
+ ## Ponerlo a andar
14
+
15
+ Hace falta **Node 20 o más nuevo**.
16
+
17
+ **1. Entra con tu cuenta** (una sola vez, en tu terminal):
18
+
19
+ ```
20
+ npx boosterarena-mcp entrar
21
+ ```
22
+
23
+ Se abre el navegador, entras con Google y listo. Si prefieres un enlace por correo:
24
+ `npx boosterarena-mcp entrar --correo tu@correo.com`.
25
+
26
+ La credencial se guarda en `~/.booster/credenciales.json`, solo en tu equipo. Para comprobar a
27
+ nombre de quién estás: `npx boosterarena-mcp quien`. Para borrarla: `npx boosterarena-mcp salir`.
28
+
29
+ **2. Conecta tu agente.** En Claude Code:
30
+
31
+ ```
32
+ claude mcp add booster -- npx -y boosterarena-mcp servidor
33
+ ```
34
+
35
+ O a mano, en el `mcp.json` de tu cliente:
36
+
37
+ ```json
38
+ {
39
+ "mcpServers": {
40
+ "booster": { "command": "npx", "args": ["-y", "boosterarena-mcp", "servidor"] }
41
+ }
42
+ }
43
+ ```
44
+
45
+ Eso es todo. No hay servidor que hospedar ni llave de API que pedir: esto corre en tu máquina y
46
+ habla con Booster con **tu** sesión.
47
+
48
+ ---
49
+
50
+ ## Qué puede hacer
51
+
52
+ **Proyectos** — `listar_proyectos`, `abrir_proyecto`, `crear_proyecto`, `guardar_proyecto`,
53
+ `ver_slide`. Nada se sube hasta que se llama a `guardar_proyecto`: el agente trabaja sobre un
54
+ borrador y tú decides cuándo se publica.
55
+
56
+ **Contenido** — poner texto, imágenes, figuras y dibujos de la biblioteca (más de 3.000
57
+ ilustraciones y 280 fondos, que se buscan por nombre en español o inglés).
58
+
59
+ **Boosters y Boost Arenas** — colocarlos y configurarlos por nombre. `describir` te dice qué
60
+ acepta cada uno antes de intentarlo, así que el agente no tiene que adivinar los campos.
61
+
62
+ **Archivos tuyos** — `subir_imagen` y `subir_audio` meten un archivo de tu disco en tu
63
+ almacenamiento y te devuelven la URL, lista para usar en un slide. Es la puerta para una fábrica
64
+ que genera fuera (imágenes con tu propia gráfica, voz con el TTS que quieras): Booster no genera
65
+ ninguna de las dos cosas, pero se las traga sin distinguirlas de las que subiste a mano.
66
+
67
+ > El nombre del archivo en la nube es el **hash de su contenido**: subir dos veces lo mismo
68
+ > devuelve la misma URL y ocupa una sola vez. Para quien repite la misma ilustración en cientos
69
+ > de clases, eso no es un detalle.
70
+
71
+ **Encargos** — quitar el fondo de una imagen, el Sombrero Mágico y el Transformador se resuelven
72
+ sin abrir el navegador.
73
+
74
+ La lista exacta la da el propio servidor con `tools/list`, y crece con el catálogo.
75
+
76
+ ---
77
+
78
+ ## Si algo no arranca
79
+
80
+ - **«La sesión ya no vale»** — corre `npx boosterarena-mcp entrar` otra vez.
81
+ - **El comando se queda mudo** — sin argumentos y sin terminal, arranca el servidor MCP y espera
82
+ por la entrada estándar. Es lo correcto: lo arranca tu cliente, no tú. Para ver la ayuda,
83
+ escríbelo en una terminal a secas.
84
+ - **El cliente se desconecta sin decir nada** — mira el registro del servidor; todo lo que cuenta
85
+ va por la salida de error, porque la salida estándar es del protocolo.
86
+
87
+ ---
88
+
89
+ ## Para quien trabaje en el código
90
+
91
+ Desde el repo, el servidor compila el núcleo al vuelo y usa siempre el código vivo:
92
+
93
+ ```
94
+ node mcp/cli.mjs entrar
95
+ node mcp/cli.mjs servidor
96
+ ```
97
+
98
+ `npm run mcp:construir` deja `mcp/dist/nucleo.mjs`, que es lo que se publica. Ese script aborta
99
+ si el núcleo arrastra React o CSS, y si algún `.mjs` usa un módulo que el `package.json` del
100
+ paquete no declara — los dos fallos se ven igual desde dentro del repo (todo funciona) y rompen
101
+ el paquete en casa ajena.
102
+
103
+ Para probar el paquete de verdad hay que **instalarlo fuera del repo**, no correrlo desde aquí:
104
+
105
+ ```
106
+ cd mcp && npm pack
107
+ cd /una/carpeta/limpia && npm i /ruta/al/boosterarena-mcp-X.Y.Z.tgz
108
+ ./node_modules/.bin/boosterarena-mcp quien
109
+ ```
package/cli.mjs ADDED
@@ -0,0 +1,63 @@
1
+ #!/usr/bin/env node
2
+ // ─────────────────────────────────────────────────────────────────────────────
3
+ // UN SOLO COMANDO PARA TODO: `boosterarena-mcp`.
4
+ //
5
+ // Antes eran dos rutas de archivo que había que escribir a mano (`node mcp/sesion.mjs entrar`,
6
+ // `node mcp/servidor.mjs`) y solo funcionaban desde la carpeta del proyecto. Fuera del repo eso
7
+ // no vale: quien lo instale no tiene ni carpeta ni rutas. Así que hay un comando y despacha:
8
+ //
9
+ // boosterarena-mcp entrar ← el maestro, una vez, en su terminal
10
+ // boosterarena-mcp quien
11
+ // boosterarena-mcp salir
12
+ // boosterarena-mcp servidor ← esto lo arranca el CLIENTE, no una persona
13
+ //
14
+ // ⚠️ SIN ARGUMENTOS HACE DOS COSAS DISTINTAS, Y ES A PROPÓSITO. Un cliente MCP arranca el
15
+ // comando a secas y habla por la entrada estándar; una persona lo escribe a secas y espera que
16
+ // le explique algo. Se distinguen por si la entrada es una terminal (`isTTY`): si lo es, ayuda;
17
+ // si no, servidor. Sin esto, o el cliente se queda sin servidor o la persona se queda mirando
18
+ // un comando mudo que parece colgado — que es como se pierde la primera media hora.
19
+ // ─────────────────────────────────────────────────────────────────────────────
20
+ const [, , orden] = process.argv;
21
+ const resto = process.argv.slice(3);
22
+ const correo = resto.includes('--correo') ? resto[resto.indexOf('--correo') + 1] : null;
23
+
24
+ function ayuda() {
25
+ console.log(`
26
+ El MCP de Booster — tu agente trabajando dentro de boosterarena.com
27
+
28
+ boosterarena-mcp entrar entrar con Google (recomendado)
29
+ boosterarena-mcp entrar --correo tu@correo entrar con un enlace por correo
30
+ boosterarena-mcp quien a nombre de quién estoy
31
+ boosterarena-mcp salir borrar la credencial de este equipo
32
+
33
+ Después de "entrar", el servidor lo arranca tu agente. En Claude Code:
34
+
35
+ claude mcp add booster -- npx -y boosterarena-mcp servidor
36
+
37
+ O a mano, en el mcp.json de tu cliente:
38
+
39
+ { "mcpServers": { "booster": {
40
+ "command": "npx", "args": ["-y", "boosterarena-mcp", "servidor"] } } }
41
+ `);
42
+ }
43
+
44
+ try {
45
+ if (orden === 'servidor') {
46
+ await import('./servidor.mjs');
47
+ } else if (orden === 'entrar' || orden === 'quien' || orden === 'salir') {
48
+ const puerta = await import('./sesion.mjs');
49
+ if (orden === 'entrar') await puerta.entrar(correo);
50
+ else if (orden === 'quien') await puerta.quien();
51
+ else puerta.salir();
52
+ } else if (!orden && !process.stdin.isTTY) {
53
+ await import('./servidor.mjs'); // lo arrancó un cliente MCP
54
+ } else {
55
+ ayuda();
56
+ // Un argumento que no existe es un error, no una consulta: quien escribió `entar` merece un
57
+ // código de salida que su script pueda notar.
58
+ if (orden) { console.error(` ✕ No conozco la orden "${orden}".\n`); process.exit(1); }
59
+ }
60
+ } catch (e) {
61
+ console.error(`\n ✕ ${e.message}\n`);
62
+ process.exit(1);
63
+ }