IA MCP VPS
README.md
# IA MCP VPS
Servidor MCP para mantenimiento controlado del VPS y orquestación segura de trabajos de código con Antigravity (Agy).
## Objetivo
Permitir diagnóstico, acciones operativas acotadas y trabajos de código aislados sin exponer una terminal root libre ni permitir escrituras directas a `main`.
## Capacidades
- Diagnóstico read-only del VPS.
- Estado, inspección, logs y reinicio allowlisted de Docker.
- Lectura y búsqueda de archivos en rutas permitidas.
- Validación YAML/JSON.
- Trabajos Agy asíncronos de auditoría (`task_type=audit`).
- Trabajos Agy de implementación en clones desechables (`task_type=implement`).
- Validación independiente de rutas, tamaño, secretos, diff y sintaxis.
- Promoción por rama y Pull Request mediante el GitHub MCP, fuera del contenedor Agy.
## Principios
1. Sin shell libre por defecto.
2. Sin root directo.
3. Allowlist de rutas, repositorios, servicios y contenedores.
4. Denylist de secretos y rutas sensibles.
5. Agy no recibe credenciales de GitHub ni socket Docker.
6. Ningún trabajo escribe directamente en `main`.
7. Merge y despliegue requieren revisión, SHA esperado y aprobación explícita.
8. Auditoría y resultados estructurados antes de promover cambios.
## Flujo de código
```text
Notion IA
→ coding_job_create
→ clon temporal del main actual
→ propuesta estructurada de Agy
→ aplicación y validación en el clon
→ NOTION_REVIEW
→ rama/PR mediante GitHub MCP
→ aprobación del usuario
→ merge con SHA esperado
→ despliegue controlado
```
Consulta [`docs/coding-jobs.md`](docs/coding-jobs.md) para contratos, estados, límites y procedimiento de promoción.
## Configuración de Jules (Milestone 1)
El orquestador incluye soporte parcial asíncrono para delegar tareas al agente Jules sin esperar su finalización. Esto requiere las siguientes variables de entorno:
- `JULES_API_KEY`: Tu clave de API para la plataforma Jules.
- `JULES_API_URL`: Opcional, por defecto `https://jules.googleapis.com/v1alpha`.
- `JULES_DB_PATH`: Opcional, por defecto `/var/lib/coding-jobs/jules_jobs.db`.
- `N8N_WEBHOOK_URL`: URL del webhook HTTP creado en n8n para recibir eventos (ej: `https://n8n.julidcardenas.site/webhook/jules-notifications`).
- `N8N_WEBHOOK_KEY`: Clave secreta (X-Jules-Webhook-Key) para autenticar las peticiones contra n8n.
**Configuración segura en el VPS:**
1. Crear o editar el archivo `.env` en la raíz del proyecto (`~/IA-mcp-vps/.env`).
2. Añadir las claves de forma segura sin comillas:
```env
JULES_API_KEY=tu_clave_real_aqui
N8N_WEBHOOK_URL=https://n8n.julidcardenas.site/webhook/jules-notifications
N8N_WEBHOOK_KEY=tu_secreto_n8n_aqui
```
3. Reiniciar el contenedor: `docker compose up -d ia-mcp-vps`
Las herramientas disponibles son `jules_request_coding_task` y `jules_check_task_status`.
## Categorías de Herramientas MCP (Tags)
El servidor organiza sus herramientas en cuatro grupos principales para facilitar su descubrimiento y uso:
- **vps**: Diagnóstico, puertos, Docker, Compose, logs, comprobaciones HTTP.
- *Herramientas:* `system_status`, `check_ports`, `docker_ps`, `container_inspect`, `docker_logs`, `docker_logs_filtered`, `docker_restart`, `docker_compose_config`, `docker_compose_ps`, `docker_compose_logs`, `http_probe`.
- **repositorios_archivos**: Operaciones con el sistema de archivos local, validación de formatos y estado Git de solo lectura.
- *Herramientas:* `list_files`, `file_info`, `read_file`, `read_file_range`, `tail_file`, `search_text`, `validate_yaml`, `validate_json`, `git_status`.
- **agy**: Ciclo de vida completo de los trabajos de código aislados (Antigravity).
- *Herramientas:* `coding_repository_list`, `coding_job_create`, `coding_job_status`, `coding_job_wait`, `coding_job_result`, `coding_job_changes`, `coding_job_artifact`, `coding_job_request_revision`, `coding_job_validate_only`, `coding_job_apply_mechanical_operation`, `coding_job_approve_changes`, `coding_job_publish_branch`, `coding_job_create_pull_request`, `coding_job_cancel`, `coding_job_cleanup`, `coding_private_job_create`.
- **jules**: Integración con el orquestador Jules.
- *Herramientas:* `jules_request_coding_task`, `jules_reply_to_task`, `jules_check_task_status`.
### Inventario de Lectura/Escritura (`readOnlyHint`)
Todas las herramientas exponen metadatos en `annotations.readOnlyHint` indicando si la herramienta es únicamente de lectura (True) o si tiene capacidad de modificar estado (False). Los clientes MCP utilizan este campo para distinguir visualmente (e.g. colores o confirmaciones).
| Herramienta | Tag | readOnlyHint |
| :--- | :--- | :--- |
| `system_status` | vps | True |
| `check_ports` | vps | True |
| `docker_ps` | vps | True |
| `container_inspect` | vps | True |
| `docker_logs` | vps | True |
| `docker_logs_filtered` | vps | True |
| `docker_restart` | vps | False |
| `docker_compose_config` | vps | True |
| `docker_compose_ps` | vps | True |
| `docker_compose_logs` | vps | True |
| `http_probe` | vps | True |
| `list_files` | repositorios_archivos | True |
| `file_info` | repositorios_archivos | True |
| `read_file` | repositorios_archivos | True |
| `read_file_range` | repositorios_archivos | True |
| `tail_file` | repositorios_archivos | True |
| `search_text` | repositorios_archivos | True |
| `validate_yaml` | repositorios_archivos | True |
| `validate_json` | repositorios_archivos | True |
| `git_status` | repositorios_archivos | True |
| `coding_repository_list` | agy | False |
| `coding_job_create` | agy | False |
| `coding_job_status` | agy | False |
| `coding_job_wait` | agy | False |
| `coding_job_result` | agy | False |
| `coding_job_changes` | agy | False |
| `coding_job_artifact` | agy | False |
| `coding_job_request_revision` | agy | False |
| `coding_job_validate_only` | agy | False |
| `coding_job_apply_mechanical_operation` | agy | False |
| `coding_job_approve_changes` | agy | False |
| `coding_job_publish_branch` | agy | False |
| `coding_job_create_pull_request` | agy | False |
| `coding_job_cancel` | agy | False |
| `coding_job_cleanup` | agy | False |
| `coding_private_job_create` | agy | False |
| `jules_request_coding_task` | jules | False |
| `jules_reply_to_task` | jules | False |
| `jules_check_task_status` | jules | False |
**Notas sobre casos mixtos:**
- `http_probe`: Funcionalmente utilizado para diagnosticar que un endpoint responda con HTTP 200 (estado de salud). Se marca como `readOnlyHint=True` conservadoramente para uso libre del agente en sus diagnósticos, a pesar de que la petición HTTP (a menudo GET) pueda, teóricamente, incidir en contadores o log del servidor expuesto.
- Consultas Agy/Jules (ej. `coding_job_wait`, `jules_check_task_status`): Se consideran `False` (modifican estado) porque su implementación real inicializa bases de datos SQLite o crea directorios en disco al instanciar gestores perezosos, aunque funcionalmente sirvan para lectura.
## Transporte remoto
FastMCP corre por HTTP en el puerto interno `8787`. Docker publica únicamente:
```txt
127.0.0.1:8787:8787
```
Caddy expone:
```txt
https://mcp.julidcardenas.site/mcp
```
con Bearer token en el reverse proxy. Ver [`docs/caddy.md`](docs/caddy.md).
## Uso por IA
Ver [`docs/ai-usage.md`](docs/ai-usage.md) para defaults operativos y herramientas disponibles.
## Despliegue
```bash
cd ~/IA-mcp-vps
git pull --ff-only
docker compose build ia-mcp-vps
docker compose up -d --force-recreate ia-mcp-vps
docker compose -f docker-compose.agy-worker.yml build agy-worker
docker compose -f docker-compose.agy-worker.yml up -d --force-recreate agy-worker
```
Más detalle en [`docs/deployment.md`](docs/deployment.md).
## Estado
La auditoría asíncrona está operativa. La implementación aislada permanece en validación hasta completar prueba de promoción rama → PR → aprobación → merge → despliegue.
This server cannot be deployed
Maintenance
ActivityMaintained
ResponsivenessNo issues