Skip to main content
Glama
README.md
# MCP-QA: Analizador de Contratos Swagger/OpenAPI

MCP Server para análisis completo de contratos Swagger/OpenAPI con exportación a JSON y generación automática de documentación.

## 🎯 Características

- ✅ Soporta Swagger 2.0 y OpenAPI 3.x
- ✅ Análisis completo de endpoints (paths, métodos HTTP)
- ✅ Extracción de parámetros (path, query, header, cookie)
- ✅ Análisis de request bodies con schemas
- ✅ Análisis de responses (códigos HTTP, schemas, headers)
- ✅ Extracción de schemas con propiedades, tipos y formatos
- ✅ Validaciones (obligatoriedad, tipos, formatos UUID/fecha/etc)
- ✅ Información de servidores y seguridad
- ✅ Tags y documentación
- ✅ **Exportación a JSON** con toda la información estructurada
- ✅ **Generación de README** con documentación estilo Swagger UI

## 🏗️ Arquitectura

El proyecto sigue **arquitectura limpia** y **principios SOLID** con estructura modular donde cada herramienta es completamente autónoma:

```
mcp-qa/
├── tools/                           # Herramientas de QA (una por subdirectorio)
│   └── swagger_analyzer/            # Analizador de contratos Swagger/OpenAPI
│       ├── src/                     # Código fuente de la herramienta
│       │   ├── domain/              # Capa de dominio
│       │   │   ├── models.py        # Entidades del dominio
│       │   │   ├── interfaces.py    # Abstracciones (Fetcher, Parser, Analyzer)
│       │   │   └── exporters.py     # Interfaces de exportación
│       │   ├── application/         # Capa de aplicación (casos de uso)
│       │   │   ├── swagger_analyzer.py            # Analizador de contratos
│       │   │   ├── complete_analysis_use_case.py  # Orquestador principal
│       │   │   └── export_use_cases.py            # Casos de uso de exportación
│       │   └── infrastructure/      # Capa de infraestructura
│       │       ├── http_fetcher.py           # Obtención HTTP
│       │       ├── contract_parser.py        # Parser YAML/JSON
│       │       ├── json_exporter.py          # Exportador JSON
│       │       └── markdown_generator.py     # Generador de Markdown
│       ├── __init__.py
│       ├── config.py                # Configuración de la herramienta
│       └── tool.py                  # Facade de la herramienta
├── output/                          # Salidas generadas (por herramienta)
│   └── swagger_analyzer/            # Salidas del analizador Swagger
│       ├── swagger-analysis.json
│       └── API-README.md
└── main.py                          # Punto de entrada MCP
```

### Principios SOLID aplicados:

- **S (Single Responsibility)**: Cada clase tiene una única responsabilidad bien definida
- **O (Open/Closed)**: Fácil agregar nuevas herramientas sin modificar las existentes
- **L (Liskov Substitution)**: Las implementaciones son intercambiables vía interfaces
- **I (Interface Segregation)**: Interfaces específicas y focalizadas
- **D (Dependency Inversion)**: Dependencias de abstracciones mediante inyección

### Estructura modular y escalable:

- **Cada herramienta es autónoma**: Tiene su propio `src/` con arquitectura limpia completa
- **Alta cohesión, bajo acoplamiento**: No hay dependencias entre herramientas
- **Estructura homóloga**: Todas las herramientas siguen el mismo patrón arquitectónico
- **Salidas organizadas**: Por herramienta en `output/`
- **Fácil de mantener**: Cambios en una herramienta NO afectan a otras
- **Fácil de escalar**: Agregar nuevas herramientas es simplemente duplicar la estructura

## 📦 Instalación

```bash
# Instalar dependencias
pip install -e .
```

## 🚀 Uso principal:

#### Análisis completo de contrato Swagger (una herramienta, todo incluido)

```python
# Análisis completo: texto + JSON + README
analizar_contrato_swagger("http://localhost:8080/v3/api-docs")

# Con URL de Swagger UI para incluir en README
analizar_contrato_swagger(
    "http://localhost:8080/v3/api-docs",
    swagger_ui_url="http://localhost:8080/swagger-ui/index.html"
)

# Solo texto, sin generar archivos
analizar_contrato_swagger(
    "https://petstore.swagger.io/v2/swagger.json",
    generar_json=False,
    generar_readme=False
)

# Solo JSON
analizar_contrato_swagger(
    "http://localhost:8080/v3/api-docs",
    generar_readme=False
)
```

### Salidas generadas:

Todos los archivos se guardan automáticamente en `output/swagger_analyzer/`:
- **swagger-analysis.json**: Análisis completo en JSON estructurado
- **API-README.md**: Documentación estilo Swagger UI
Esto genera un README.md profesional con:
- Tabla de contenidos
- Resumen y estadísticas
- Links a Swagger UI
- Documentación completa de endpoints
- Tablas de schemas y propiedades
- Códigos de estado HTTP

## 🔍 Información extraída

El analizador extrae:

- **Información general**: título, versión, descripción
- **Servidores**: URLs y configuraciones
- **Endpoints**: 
  - Path y método HTTP
  - Parámetros (ubicación, tipo, obligatoriedad)
  - Request body (content types, schemas)
  - Responses (códigos, schemas, headers)
- **Schemas**:
  - Propiedades con tipos y formatos
  - Validaciones (min/max length, pattern, enum)
  - Obligatoriedad de campos
  - Formatos especiales (UUID, date, email, etc)
- **Seguridad**: esquemas de autenticación
- **Estadísticas**: resumen de métodos, códigos HTTP, content types

## 📄 Licencia

MIT