Skip to main content
Glama
README.md
# Agency Skills — Backend API

Plataforma de gestión de agencias de agentes con sistema multi-agente, recursos personalizados (skills, rules, agentes, workflows) y protocolo MCP (Model Context Protocol) para integración con herramientas CLI.

---

## Stack

- **Runtime**: Node.js + TypeScript
- **Framework**: NestJS 11 (Arquitectura Hexagonal + CQRS)
- **Base de datos**: PostgreSQL (TypeORM 0.3)
- **Cache/Sesiones**: Redis (ioredis)
- **Auth**: Google OAuth 2.0 + JWT (access + refresh tokens)
- **API Docs**: Swagger UI (`/api`)
- **MCP**: `@modelcontextprotocol/sdk` (stdio + SSE)

---

## Quick Start

```bash
# Instalar dependencias
pnpm install

# Configurar variables de entorno
cp .env.example .env
# Editar .env con tus credenciales (DB, JWT secrets, Google OAuth)

# Docker (PostgreSQL + Redis)
pnpm run docker:up

# Ejecutar migraciones
pnpm run db:migrate

# Desarrollo
pnpm run start:dev
```

El servidor arranca en `http://localhost:8004`.

---

## Estructura

```
src/
├── core/                           # Domain + Ports (Clean Architecture)
│   ├── agents/                     # 17 agentes especializados
│   ├── domain/                     # Interfaces, entidades, tokens
│   ├── infrastructure/             # DB, adapters, MCP controller
│   ├── presentation/               # Controllers REST (health, rules, mcp, agents, sessions)
│   └── skills/                     # Sistema de skills Hermes
├── modules/
│   ├── auth/                       # Google OAuth + JWT (access/refresh)
│   ├── agencies/                   # CRUD de agencias
│   ├── agency-resources/           # Skills, rules, agents, workflows por agencia
│   ├── users/                      # Usuarios (lookup por IP)
│   ├── sessions/                   # Sesiones MCP
│   ├── issues/                     # Gestión de issues
│   ├── projects/                   # Detección de proyectos
│   ├── contexts/                   # Contextos de proyecto
│   ├── plans/                      # Planes de trabajo
│   ├── memory/                     # Sistema de memoria
│   └── agency-agents/              # Catálogo de agentes
├── agents/                         # Implementaciones de agentes
├── rules/                          # Reglas de código (archivos .rule.ts)
├── shared/                         # Middleware, utils, constantes
├── mcp-server.ts                   # Servidor MCP stdio
├── mcp-http-server.ts              # Servidor MCP HTTP
└── main.ts                         # Bootstrap NestJS
```

---

## Variables de entorno

```env
# Server
PORT=8004
CORS_ORIGIN=http://localhost:4200

# Database
DB_URL=postgres://user:password@localhost:5432/agent_skills?sslmode=disable
DB_SYNCHRONIZE=false

# Redis
REDIS_URL=redis://localhost:6379/0

# JWT
JWT_ACCESS_SECRET=your-secret-here
JWT_REFRESH_SECRET=your-other-secret-here
JWT_ACCESS_EXPIRES_IN=15m
JWT_REFRESH_EXPIRES_IN=7d

# Google OAuth
GOOGLE_CLIENT_ID=
GOOGLE_CLIENT_SECRET=
```

Ver `.env.example` para todas las variables disponibles (Exa AI, Context7, ChromaDB, etc.).

---

## Scripts

```bash
# Desarrollo
pnpm run start:dev              # Hot-reload
pnpm run start:debug            # Debug mode

# Producción
pnpm run build                  # Build completo
pnpm run start:prod             # Ejecutar dist/main

# Base de datos
pnpm run db:migrate             # Ejecutar migraciones pendientes
pnpm run db:migrate:revert      # Revertir última migración
pnpm run db:generate            # Generar migración desde cambios en entidades

# MCP
pnpm run start:mcp              # MCP stdio server
pnpm run start:mcp-http         # MCP HTTP server
pnpm run build:mcp              # Build MCP stdio
pnpm run build:mcp-http         # Build MCP HTTP

# Tests
pnpm run test                   # Unit tests
pnpm run test:e2e               # E2E tests
pnpm run test:cov               # Coverage

# Docker
pnpm run docker:up              # Levantar servicios
pnpm run docker:down            # Parar servicios
pnpm run docker:logs            # Ver logs

# Lint
pnpm run lint                   # ESLint + auto-fix
pnpm run typecheck              # Type-check sin emitir

# Agentes CLI
pnpm run agent:setup-gemini     # Configurar Gemini MCP
pnpm run mcp:update-claude      # Actualizar config Claude Code
```

---

## Endpoints principales

| Método | Ruta | Descripción |
|--------|------|-------------|
| `GET` | `/health` | Health check |
| `GET` | `/api` | Swagger UI |
| `GET` | `/mcp/sse` | MCP SSE endpoint |
| `POST` | `/mcp/message` | MCP message endpoint |

### Auth
| Método | Ruta | Descripción |
|--------|------|-------------|
| `GET` | `/api/auth/login/google` | Login con Google |
| `GET` | `/api/auth/refresh` | Renovar access token |
| `POST` | `/api/auth/logout` | Cerrar sesión |

### Agencies
| Método | Ruta | Descripción |
|--------|------|-------------|
| `POST` | `/v1/agency` | Crear agencia |
| `GET` | `/v1/agency/by-user/:userId` | Obtener agencia del usuario |
| `GET` | `/v1/agency/:id` | Obtener agencia por ID |
| `PATCH` | `/v1/agency/:id` | Actualizar agencia |
| `DELETE` | `/v1/agency/:id` | Eliminar agencia |

### Agency Resources
| Método | Ruta | Descripción |
|--------|------|-------------|
| `POST` | `/v1/agency/:agencyId/skills` | Crear skill |
| `GET` | `/v1/agency/:agencyId/skills` | Listar skills |
| `GET` | `/v1/agency/:agencyId/skills/:id` | Obtener skill |
| `PUT` | `/v1/agency/:agencyId/skills/:id` | Actualizar skill |
| `DELETE` | `/v1/agency/:agencyId/skills/:id` | Eliminar skill |
| | | *(ídem para `/rules`, `/agents`, `/workflows`)* |

### Agency Members
| Método | Ruta | Descripción |
|--------|------|-------------|
| `GET` | `/v1/agency/:id/members` | Listar miembros |
| `POST` | `/v1/agency/:id/members` | Agregar miembro |
| `DELETE` | `/v1/agency/:id/members/:userId` | Remover miembro |

### Users
| Método | Ruta | Descripción |
|--------|------|-------------|
| `GET` | `/v1/users/search?q=` | Buscar usuarios por email/nombre |
| `GET` | `/v1/users/:id` | Obtener usuario por ID |

---

## Agentes (17)

| Agente | Responsabilidad |
|--------|----------------|
| **RouterAgent** | Orquestador principal, detecta intención y delega |
| **SearchAgent** | Búsqueda BM25 de reglas |
| **IdentityAgent** | Identidad MCP y prefijos |
| **RulesAgent** | Listado y gestión de reglas |
| **CodeAgent** | Generación de código |
| **ArchitectureAgent** | Validación arquitectónica |
| **AnalysisAgent** | Análisis de código |
| **MetricsAgent** | Métricas y tracking |
| **PMAgent** | Gestión de proyecto |
| **IssueWorkflowAgent** | Workflow de issues |
| **GitHubAgent** | Integración GitHub |
| **FrontendArchitectureAgent** | Arquitectura frontend |
| **WebSearchAgent** | Búsqueda web (Exa AI) |
| **Context7Agent** | Documentación de librerías |
| **ContextAgent** | Contexto de proyecto |
| **ProjectHistoryAgent** | Historial de proyecto |
| **GraphifyAgent** | Visualización de código |
| **ObsidianAgent** | Integración Obsidian |

---

## MCP (Model Context Protocol)

El servidor MCP expone herramientas a través de dos transportes:

- **stdio** (`pnpm run start:mcp`): para integración con CLI locales (Claude Code, Gemini, OpenCode)
- **SSE** (`/mcp/sse` + `/mcp/message`): para integración web y remota

### Herramientas MCP

| Tool | Descripción |
|------|-------------|
| `session_init_auto` | Inicializa sesión MCP con contexto del proyecto |
| `list_agency_skills` | Lista skills de la agencia activa |
| `get_skill_detail` | Detalle de un skill específico |
| `invoke_skill` | Ejecuta un skill |

---

## Arquitectura

- **Hexagonal (Ports & Adapters)**: lógica de negocio aislada de infraestructura
- **CQRS**: comandos y queries separados con `@nestjs/cqrs`
- **Repository Pattern**: interfaces en domain, implementaciones en infrastructure
- **JWT dual**: access tokens (15min) en localStorage, refresh tokens (7d) en httpOnly cookie
- **IP-based auth**: para conexiones SSE/MCP donde no hay cookie disponible

---

## Documentación adicional

- `doc/ARCHITECTURE.md` — Arquitectura completa del sistema
- `doc/MCP-CONFIG.md` — Configuración MCP por herramienta
- `doc/IMPLEMENTATION_STATUS.md` — Estado de implementación