Skip to main content
Glama
gefernandez32

GeneXus18MCP-mini

README.md
# GeneXus18MCP-mini

Skeleton mínimo de un servidor MCP para GeneXus 18: un solo proceso, sin
IPC, para arrancar rápido y entender el patrón antes de (si hace falta)
separarlo en dos procesos como el proyecto de referencia (`../Genexus18MCP`,
ver `STACK.md` ahí para el porqué de esa separación).

## Qué hace

3 tools reales contra el SDK (`Artech.Architecture.Common` /
`Artech.Udm.Framework`), sin mocks:

- `gx_open_kb(path)` — abre una KB (`KnowledgeBase.Open`).
- `gx_list_objects(filter?, limit?)` — lista objetos de la KB abierta.
- `gx_read_source(name)` — lee la parte `Source` de un objeto por nombre.

Habla MCP por **stdio**, JSON-RPC 2.0, un mensaje por línea (sin framing
Content-Length). Todo el proceso corre en un thread **STA** porque el SDK
tiene partes COM-flavoured.

## Instalar vía npm

```powershell
npx -y genexus18mcp-gabo
```

Requiere Windows + GeneXus 18 instalado localmente (el paquete trae el
`.exe` pre-compilado, pero igual necesita las DLLs `Artech.*` del SDK en
tiempo de ejecución). El wrapper (`cli/run.js`) autodetecta la carpeta de
instalación buscando `GeneXus18*` bajo `Program Files (x86)\GeneXus`; si tu
instalación vive en otro lado, seteá `GX_PATH` manualmente.

En la config MCP del cliente:

```json
{
  "mcpServers": {
    "genexus18mcp-mini": {
      "command": "npx",
      "args": ["-y", "genexus18mcp-gabo"]
    }
  }
}
```

## Build desde fuente

```powershell
dotnet build GeneXus18MCP-mini.csproj -p:GX_PATH="C:\Program Files (x86)\GeneXus\GeneXus18u10_WWP15.4.6"
```

Ajustá `GX_PATH` a tu instalación real de GeneXus 18 (el nombre de carpeta
varía según el update — no siempre es literalmente `...\GeneXus18`).

## Probar a mano (sin cliente MCP)

```powershell
$body = @'
{"jsonrpc":"2.0","id":1,"method":"initialize","params":{}}
{"jsonrpc":"2.0","method":"notifications/initialized"}
{"jsonrpc":"2.0","id":2,"method":"tools/call","params":{"name":"gx_open_kb","arguments":{"path":"C:\\ruta\\a\\tu\\KB"}}}
{"jsonrpc":"2.0","id":3,"method":"tools/call","params":{"name":"gx_list_objects","arguments":{"limit":10}}}
'@
$body | .\bin\Debug\GeneXus18MCP-mini.exe
```

## Conectarlo a Claude Code / Claude Desktop (build desde fuente)

Si compilaste desde fuente en vez de usar `npx`, agregá el server a la
config MCP del cliente apuntando directo al `.exe`:

```json
{
  "mcpServers": {
    "genexus18mcp-mini": {
      "command": "C:\\MisClientes\\GeneXus\\GeneXus18MCP-mini\\bin\\Debug\\GeneXus18MCP-mini.exe"
    }
  }
}
```

## Próximos pasos naturales (no implementados, a propósito)

- Escribir (no solo leer) — `part.Source = nuevoTexto` + `obj.Save()`.
- Manejo de errores más fino por tool (hoy todo excepción cae en un
  `isError:true` genérico).
- Si necesitás abrir varias KBs a la vez o exponer HTTP además de stdio,
  ahí es cuando conviene separar protocolo (proceso moderno) de SDK
  (proceso net48/STA) — ver `STACK.md` del proyecto de referencia.