alora-mcp 0.2.0 → 0.4.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/package.json +2 -2
- package/src/index.js +35 -3
package/package.json
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "alora-mcp",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.4.0",
|
|
4
4
|
"description": "Servidor MCP de Alora — Claude Code, Codex, Cursor y cualquier cliente MCP",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|
|
7
7
|
"alora-mcp": "src/index.js"
|
|
8
8
|
},
|
|
9
9
|
"dependencies": {
|
|
10
|
-
"alora-sdk": "^0.
|
|
10
|
+
"alora-sdk": "^0.4.0",
|
|
11
11
|
"@modelcontextprotocol/sdk": "^1.12.0",
|
|
12
12
|
"tar": "^7.4.3",
|
|
13
13
|
"zod": "^3.24.0"
|
package/src/index.js
CHANGED
|
@@ -80,12 +80,43 @@ server.registerTool('project_status', {
|
|
|
80
80
|
}, wrap(({ project }) => client().status(project)));
|
|
81
81
|
|
|
82
82
|
server.registerTool('logs', {
|
|
83
|
-
description: '
|
|
83
|
+
description: 'Líneas de log del proyecto (deploys, runtime y salida de la app). Usalo para debuggear tus propios deploys.',
|
|
84
84
|
inputSchema: {
|
|
85
85
|
project: z.string(),
|
|
86
86
|
lines: z.number().optional().describe('Cantidad de líneas, default 100'),
|
|
87
|
+
since: z.string().optional().describe('Solo líneas posteriores a este instante (ISO o ms epoch)'),
|
|
87
88
|
},
|
|
88
|
-
}, wrap(({ project, lines }) => client().logs(project, { lines })));
|
|
89
|
+
}, wrap(({ project, lines, since }) => client().logs(project, { lines, since })));
|
|
90
|
+
|
|
91
|
+
server.registerTool('exec', {
|
|
92
|
+
description: 'Ejecuta un comando dentro de la microVM del proyecto (despierta la máquina si duerme). Devuelve stdout, stderr y exit_code. Para inspeccionar el filesystem, ver archivos en /data, debuggear. Ej: "ls -la /data", "cat /data/bitacora/hoy.log".',
|
|
93
|
+
inputSchema: { project: z.string(), command: z.string() },
|
|
94
|
+
}, wrap(({ project, command }) => client().exec(project, command)));
|
|
95
|
+
|
|
96
|
+
server.registerTool('restart', {
|
|
97
|
+
description: 'Reinicia la app sin redesplegar (útil para aplicar un cambio de estado o salir de un cuelgue).',
|
|
98
|
+
inputSchema: { project: z.string() },
|
|
99
|
+
}, wrap(({ project }) => client().restart(project)));
|
|
100
|
+
|
|
101
|
+
server.registerTool('cron_run', {
|
|
102
|
+
description: 'Dispara un cron AHORA (sin esperar su horario). Devuelve el status y el body de la respuesta de la app — útil para probar y ver el traceback si falla.',
|
|
103
|
+
inputSchema: { project: z.string(), id: z.string() },
|
|
104
|
+
}, wrap(({ project, id }) => client().cronRun(project, id)));
|
|
105
|
+
|
|
106
|
+
server.registerTool('egress_ip', {
|
|
107
|
+
description: 'Muestra la(s) IP(s) de egreso dedicada(s) del proyecto. Sin IP dedicada, la salida usa una IP compartida que PUEDE cambiar al migrar — malo para APIs con whitelist de IP (exchanges, bancos).',
|
|
108
|
+
inputSchema: { project: z.string() },
|
|
109
|
+
}, wrap(({ project }) => client().egressIp(project)));
|
|
110
|
+
|
|
111
|
+
server.registerTool('egress_ip_allocate', {
|
|
112
|
+
description: 'Asigna una IP de egreso ESTÁTICA y dedicada al proyecto (sobrevive migraciones y reinicios) y reinicia la app para tomarla. Para apps que operan APIs con whitelist de IP: exchanges de cripto (Binance exige IP restringida para trading), bancos, brokers, SaaS enterprise. Whitelisteá la IP devuelta.',
|
|
113
|
+
inputSchema: { project: z.string() },
|
|
114
|
+
}, wrap(({ project }) => client().egressIpAllocate(project)));
|
|
115
|
+
|
|
116
|
+
server.registerTool('token_create', {
|
|
117
|
+
description: 'Crea un token de acceso por proyecto que BYPASSEA el login: un script/webhook/backup externo puede pegarle a la URL de la app con Authorization: Bearer <token> sin SSO. Scoped a este proyecto y revocable. La app lo ve con x-alora-user-role: service. El token se muestra una sola vez.',
|
|
118
|
+
inputSchema: { project: z.string(), name: z.string().optional() },
|
|
119
|
+
}, wrap(({ project, name }) => client().tokenCreate(project, name)));
|
|
89
120
|
|
|
90
121
|
server.registerTool('list_versions', {
|
|
91
122
|
description: 'Historial de versiones del proyecto, con autor y mensaje.',
|
|
@@ -180,8 +211,9 @@ server.registerTool('cron_create', {
|
|
|
180
211
|
project: z.string(),
|
|
181
212
|
schedule: z.string().describe('cron UTC: "0 * * * *" cada hora, "*/5 * * * *" cada 5 min, "5 0,12 * * *" 00:05 y 12:05'),
|
|
182
213
|
path: z.string().describe('ruta que tu app maneja, ej: /cron/hourly'),
|
|
214
|
+
once: z.boolean().optional().describe('si true, se borra solo tras correr una vez'),
|
|
183
215
|
},
|
|
184
|
-
}, wrap(({ project, schedule, path }) => client().cronCreate(project, schedule, path)));
|
|
216
|
+
}, wrap(({ project, schedule, path, once }) => client().cronCreate(project, schedule, path, once)));
|
|
185
217
|
|
|
186
218
|
server.registerTool('cron_list', {
|
|
187
219
|
description: 'Lista las tareas programadas de un proyecto con su último disparo y estado.',
|