Skip to main content
Glama
dajarony

mcp-universal-gentes

by dajarony
README.md
# Universal MCP Lab

Prueba de concepto mínima para validar **adquisición dinámica de capacidades** detrás de una superficie MCP estable.

## Hipótesis
Un agente empieza con seis herramientas estables. Conecta un servicio OpenAPI, descubre capacidades internas nuevas, las inspecciona y las invoca sin modificar el catálogo MCP publicado.

Superficie estable prevista:
- `services.connect`
- `services.disconnect`
- `services.list`
- `capabilities.list`
- `capabilities.describe`
- `capabilities.invoke`

La PoC no da acceso bruto al equipo, no expone shell arbitrario y no guarda credenciales.

## Ejecutar la prueba local

```bash
python -m unittest discover -s tests -v
python scripts/demo.py
```

## MCP real por stdio

La fase 3 incorpora un servidor MCP real con las seis herramientas estables. Instala la dependencia declarada y deja que un host MCP inicie el proceso:

```bash
pip install -e .
python -m entradas.mcp.server
```

El proceso no muestra una interfaz ni debe escribir en stdout: espera mensajes MCP por `stdin`. La prueba `tests/test_mcp_protocol.py` actúa como un cliente MCP real, verifica `tools/list`, conecta el OpenAPI sintético y confirma que el catálogo público no cambia.

Este transporte local es deliberadamente limitado: no publica HTTP, no incluye OAuth, no conecta el PC y no habilita aprobaciones de escritura.

Para habilitar una lectura HTTP en el laboratorio, configura antes del arranque una allowlist local. El documento OpenAPI enviado por MCP no puede modificar ese destino:

```powershell
$env:UNIVERSAL_MCP_READ_BASE_URLS = '{"customers":"https://api.example.test"}'
python -m entradas.mcp.server
```

Solo se ejecutan `GET` hacia servicios configurados; hay timeout, límite de tamaño, JSON obligatorio, sin redirecciones ni reintentos. La suite no usa Internet: levanta un endpoint temporal local para verificar este flujo.

## Nodo local del propietario

El nodo de PC es un proceso MCP local separado, no una función de control remoto. Solo el propietario del equipo puede iniciarlo y fijar una carpeta explícita:

```powershell
$env:UNIVERSAL_MCP_OWNER_ALLOWED_ROOT = 'C:\carpeta-autorizada'
python -m entradas.pc_node.server
```

Su única herramienta es `pc.read_text(relative_path)`. No incluye shell, escritura, exploración del disco, navegador, procesos ni listeners de red. El túnel y la autenticación entre el gateway y este nodo pertenecen a una fase posterior.

## Action Boundary para escrituras

Una escritura no acepta `approved=true`. La primera solicitud devuelve una referencia de confirmación; una interfaz humana de confianza debe aprobar esa acción exacta fuera de MCP. La autorización resultante es de una sola vez, está ligada a los mismos argumentos y se consume antes del executor. Esto no habilita todavía escrituras en el nodo de PC.

## Estado
Arquitectura + núcleo de laboratorio + ECA profundo preparados. Ver `STATUS.md` y `docs/PLAYBOOK.md`.