Files
agenticSystem/mcp-server
Jordan Diaz f7e950694e feat: tools get_hook_entryparams / set_hook_entryparams
Completan la feature del endpoint /api/creator/hook-entryparams, que ya
estaba desplegado en el server (commit fe81765 del repo de Forge) pero sin
tools que lo usaran desde el agente.

Los entryParams son los parametros de entrada declarados de un hook global
({variable, value?, valueType?}), que se le pasan al invocarlo.
2026-08-12 11:32:17 +00:00
..
2026-04-01 23:16:45 +01:00
2026-04-01 23:16:45 +01:00
2026-04-17 20:03:02 +00:00
2026-04-01 23:16:45 +01:00
2026-04-01 23:16:45 +01:00
2026-04-01 23:16:45 +01:00
2026-04-01 23:16:45 +01:00
2026-04-01 23:16:45 +01:00
2026-04-01 23:16:45 +01:00
2026-04-01 23:16:45 +01:00
2026-04-01 23:16:45 +01:00
2026-04-01 23:16:45 +01:00
2026-04-01 23:16:45 +01:00
2026-04-01 23:16:45 +01:00
2026-04-01 23:16:45 +01:00
2026-04-20 11:10:51 +00:00
2026-04-01 23:16:45 +01:00
2026-04-01 23:16:45 +01:00
2026-04-01 23:16:45 +01:00
2026-04-08 23:52:54 +00:00

Acai Code MCP Server

Servidor MCP (Model Context Protocol) para Acai que permite a Claude y otros agentes IA acceder y manipular el código, módulos, tablas y registros de proyectos Acai.

📋 Contenido


🚀 Instalación Local

Requisitos

  • Node.js >= 16
  • npm o yarn

Pasos

  1. Instalar dependencias
cd server
npm install
  1. Iniciar el servidor en modo desarrollo
npm start

El servidor estará disponible en http://localhost:3000/sse

  1. Iniciar con watch mode (recarga automática)
npm run dev
  1. Verificar que funciona
curl http://localhost:3000/health

Deberías ver:

{
  "status": "ok",
  "activeSessions": 0,
  "mode": "sse"
}

🐳 Docker (Producción)

Requisitos

  • Docker instalado
  • Docker Compose (opcional pero recomendado)

Construcción de la imagen

# Desde la carpeta server/
docker build -t acai-mcp-server .

Ejecución

Opción 1: Docker Compose (Recomendado)

docker-compose up -d

Esto inicia:

  • Servidor MCP en puerto 3000
  • Monitor UI en puerto 4545 (opcional)
  • Auto-restart habilitado

Detener:

docker-compose down

Opción 2: Docker directo

docker run -d \
  --name acai-mcp-server \
  --restart unless-stopped \
  -p 3000:3000 \
  acai-mcp-server

Ver logs

docker logs acai-mcp-server -f

Parar/Reiniciar

docker stop acai-mcp-server
docker start acai-mcp-server
docker restart acai-mcp-server

🔧 Configuración de Clientes

Claude Code (Recomendado)

Crea el archivo .mcp.json en la raíz de tu proyecto:

Opción A: Con X-User-Token (Simple)

{
  "mcpServers": {
    "acai-code": {
      "command": "npx",
      "args": [
        "mcp-remote",
        "http://localhost:3000/sse",
        "--header",
        "X-User-Token: {TU_TOKEN_AQUI}"
      ]
    }
  }
}

Opción B: Con X-Acai-Token (Completo)

{
  "mcpServers": {
    "acai-code": {
      "command": "npx",
      "args": [
        "mcp-remote",
        "http://localhost:3000/sse",
        "--header",
        "X-Acai-Token: {TU_TOKEN_AQUI}",
        "--header",
        "X-Acai-Token-Hash: {TU_TOKEN_HASH_AQUI}",
        "--header",
        "X-Acai-Website: {TU_DOMINIO_AQUI}"
      ]
    }
  }
}

Obtener credenciales

  1. Abre https://cms.acaisuite.com/admin.php?debug=1
  2. Busca en la consola o en los Network headers:
    • X-User-Token: Token único (contiene el dominio automáticamente)
    • X-Acai-Token: Token de sesión
    • X-Acai-Token-Hash: Hash de validación
    • X-Acai-Website: Tu dominio

Servidor remoto

Si el Docker está en otra máquina:

{
  "mcpServers": {
    "acai-code": {
      "command": "npx",
      "args": [
        "mcp-remote",
        "http://192.168.1.100:3000/sse",
        "--header",
        "X-User-Token: {TU_TOKEN_AQUI}"
      ]
    }
  }
}

👨‍💻 Desarrollo

Estructura

server/
├── tools/
│   ├── modules/        # Herramientas para módulos
│   ├── tables/         # Herramientas para tablas
│   ├── records/        # Herramientas para registros
│   ├── files/          # Herramientas para archivos
│   ├── media/          # Herramientas para media
│   ├── auth/           # Herramientas de autenticación
│   └── helpers/        # Utilidades compartidas
├── auth/
│   ├── apiClient.js    # Cliente HTTP con auto-login
│   ├── credentials.js  # Gestión de credenciales
│   └── index.js        # Exportaciones
├── utils/
│   ├── moduleParser.js # Parser de componentes Acai
│   └── remoteParser.js # Parser remoto (appParser)
├── resources/          # Guías y documentación
├── server.js           # Punto de entrada principal
├── httpServer.js       # Servidor HTTP/SSE
└── package.json

Agregar una nueva herramienta

  1. Crear archivo tools/category/toolname.js:
import { z } from "zod";
import { withAuth, getSessionCredentials, getApiClient } from "../../auth/index.js";
import { handleToolError, validateRequired, handleApiResponse } from "../helpers/errorHandler.js";

export function registerMyToolTool(server) {
    server.tool(
        "my_tool",
        "Descripción de la herramienta",
        {
            param1: z.string().describe("Descripción del parámetro"),
        },
        withAuth(async ({ param1 }, extra) => {
            try {
                const credentials = getSessionCredentials(extra.sessionId);
                const client = await getApiClient(extra.sessionId);

                // Tu lógica aquí
                const response = await client.post("/endpoint", {
                    action_ws: "mi_accion",
                });

                return {
                    content: [{ type: "text", text: JSON.stringify(response.data, null, 2) }],
                };
            } catch (error) {
                return handleToolError(error, 'my_tool', { param1 });
            }
        })
    );
}
  1. Registrar en tools/category/index.js:
import { registerMyToolTool } from './toolname.js';

export function registerCategoryTools(server) {
    // ... otras herramientas
    registerMyToolTool(server);
}
  1. Probar
npm run dev

Scripts disponibles

npm start          # Iniciar servidor
npm run dev        # Desarrollo con watch
npm test          # Ejecutar tests
npm run lint      # Verificar linting

📚 Herramientas Disponibles

Módulos (6)

  • list_modules - Listar módulos
  • get_module - Obtener contenido
  • save_module - Crear/actualizar
  • check_module - Validar sintaxis
  • check_module_usage - Ver dónde se usa
  • delete_module - Eliminar

Tablas (6)

  • list_tables - Listar tablas
  • get_table_schema - Ver estructura
  • create_table - Crear tabla
  • edit_table_field - Editar campo
  • delete_table_field - Eliminar campo
  • get_table_templates - Obtener templates

Registros (5)

  • list_records - Listar registros
  • get_record - Obtener uno
  • create_record - Crear
  • update_record - Actualizar
  • delete_record - Eliminar

Archivos (4)

  • list_files - Listar archivos
  • read_file - Leer contenido
  • write_file - Crear/actualizar
  • delete_file - Eliminar

Media (3)

  • list_media - Listar media
  • upload_media - Subir archivo
  • delete_media - Eliminar

Auth (1)

  • get_session_info - Info de sesión

🔐 Autenticación

X-User-Token (Recomendado)

  • Token único por usuario
  • Incluye automáticamente el dominio
  • Simplifica la configuración
  • Trigger auto-login en primera petición

X-Acai-Token + X-Acai-Token-Hash + X-Acai-Website

  • Más flexible
  • Permite cambiar dominio
  • Requiere 3 headers
  • Más control

Auto-login

Si solo envías X-User-Token:

  1. Se detecta en la conexión SSE
  2. En la primera petición a una herramienta, se hace login
  3. Las credenciales se cachean en la sesión
  4. Las peticiones posteriores usan el token cacheado

🐛 Troubleshooting

Puerto 3000 en uso

# Encontrar proceso en puerto 3000
lsof -i :3000

# Matar proceso
kill -9 <PID>

# O cambiar puerto
MCP_PORT=3001 npm start

Error: "Token no válido" (403)

  • Verifica que el token no ha expirado
  • Obtén uno nuevo desde https://cms.acaisuite.com/admin.php?debug=1
  • Revisa los logs: docker logs acai-mcp-server -f

Error: "window is not defined"

  • Asegúrate de pasar listTables a parseComponents()
  • Revisa que remoteParser.js tiene las variables seteadas correctamente

Conexión rechazada

# Verifica que está corriendo
curl http://localhost:3000/health

# Ver logs
npm run dev
# o
docker logs acai-mcp-server -f

Tools no disponibles

  • Verifica headers en .mcp.json
  • Comprueba que el token es válido
  • Revisa los logs del servidor

📝 Variables de entorno

MCP_PORT=3000              # Puerto del servidor MCP
MCP_MONITOR_PORT=4545      # Puerto del Monitor UI
MCP_MONITOR_DISABLED=0     # Desactivar Monitor UI
ACAI_TOKEN=...             # Token por defecto (no recomendado)
ACAI_WEBSITE=...           # Dominio por defecto
ACAI_TOKEN_HASH=...        # Hash por defecto

🔄 Actualizar

Versión local

git pull origin main
npm install
npm start

Docker

# Reconstruir imagen
docker build -t acai-mcp-server .

# Reiniciar contenedor
docker restart acai-mcp-server

📖 Recursos

  • Guía Acai: resources/guia-programacion-acai.md
  • Atributos: resources/guia-atributos-acai.md
  • Twig Filters: resources/guia-twig-filters.md
  • Builder Vars: resources/guia-builder-vars.md
  • PHP Hooks: resources/guia-php-hooks.md

🤝 Contribuir

  1. Fork el proyecto
  2. Crea una rama: git checkout -b feature/nueva-herramienta
  3. Haz commit: git commit -am 'Agregar nueva herramienta'
  4. Push: git push origin feature/nueva-herramienta
  5. Abre un Pull Request

📞 Soporte

Para problemas o preguntas:

  1. Revisa los logs: docker logs acai-mcp-server -f
  2. Verifica la configuración en .mcp.json
  3. Abre un issue en el repositorio

📄 Licencia

Igual que el proyecto principal de Acai.


Última actualización: Diciembre 2025