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 +109 -0
- package/cli.mjs +63 -0
- package/dist/nucleo.mjs +2688 -0
- package/encargos.mjs +117 -0
- package/package.json +37 -0
- package/proyectos.mjs +140 -0
- package/servidor.mjs +364 -0
- package/sesion.mjs +245 -0
- package/subidas.mjs +84 -0
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
|
+
}
|