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.
Files changed (2) hide show
  1. package/package.json +2 -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.2.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.2.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: 'Últimas líneas de log del proyecto (deploys, runtime y salida de la app). Usalo para debuggear tus propios deploys.',
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.',