backend-mcp
Version:
Generador automático de backends con Node.js, Express, Prisma y módulos configurables. Servidor MCP compatible con npx para agentes IA. Soporta PostgreSQL, MySQL, MongoDB y SQLite.
1,375 lines • 40.1 kB
JSON
{
"openapi": "3.0.0",
"info": {
"title": "Backend MCP API",
"version": "1.0.0",
"description": "API completa generada automáticamente por Backend MCP Framework",
"contact": {
"name": "Backend MCP Support",
"email": "support@backend-mcp.com"
},
"license": {
"name": "MIT",
"url": "https://opensource.org/licenses/MIT"
}
},
"servers": [
{
"url": "http://localhost:3000/api/v1",
"description": "Servidor de desarrollo"
},
{
"url": "https://api.example.com/v1",
"description": "Servidor de producción"
}
],
"paths": {
"/{entity}": {
"get": {
"tags": [
"crud"
],
"summary": "Get all entities with pagination",
"description": "Get all entities with pagination",
"operationId": "getEntity",
"parameters": [],
"responses": {
"200": {
"description": "Operación exitosa",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/SuccessResponse"
}
}
}
},
"400": {
"$ref": "#/components/responses/BadRequest"
},
"404": {
"$ref": "#/components/responses/NotFound"
},
"429": {
"$ref": "#/components/responses/TooManyRequests"
},
"500": {
"$ref": "#/components/responses/InternalServerError"
}
},
"security": []
},
"post": {
"tags": [
"crud"
],
"summary": "Create new entity",
"description": "Create new entity",
"operationId": "postEntity",
"parameters": [],
"responses": {
"200": {
"description": "Operación exitosa",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/SuccessResponse"
}
}
}
},
"400": {
"$ref": "#/components/responses/BadRequest"
},
"401": {
"$ref": "#/components/responses/Unauthorized"
},
"403": {
"$ref": "#/components/responses/Forbidden"
},
"404": {
"$ref": "#/components/responses/NotFound"
},
"429": {
"$ref": "#/components/responses/TooManyRequests"
},
"500": {
"$ref": "#/components/responses/InternalServerError"
}
},
"security": [
{
"bearerAuth": []
}
],
"requestBody": {
"required": true,
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {},
"example": {}
}
}
}
}
}
},
"/{entity}/{id}": {
"get": {
"tags": [
"crud"
],
"summary": "Get entity by ID",
"description": "Get entity by ID",
"operationId": "getEntityId",
"parameters": [],
"responses": {
"200": {
"description": "Operación exitosa",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/SuccessResponse"
}
}
}
},
"400": {
"$ref": "#/components/responses/BadRequest"
},
"404": {
"$ref": "#/components/responses/NotFound"
},
"429": {
"$ref": "#/components/responses/TooManyRequests"
},
"500": {
"$ref": "#/components/responses/InternalServerError"
}
},
"security": []
},
"put": {
"tags": [
"crud"
],
"summary": "Update entity",
"description": "Update entity",
"operationId": "putEntityId",
"parameters": [],
"responses": {
"200": {
"description": "Operación exitosa",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/SuccessResponse"
}
}
}
},
"400": {
"$ref": "#/components/responses/BadRequest"
},
"401": {
"$ref": "#/components/responses/Unauthorized"
},
"403": {
"$ref": "#/components/responses/Forbidden"
},
"404": {
"$ref": "#/components/responses/NotFound"
},
"429": {
"$ref": "#/components/responses/TooManyRequests"
},
"500": {
"$ref": "#/components/responses/InternalServerError"
}
},
"security": [
{
"bearerAuth": []
}
],
"requestBody": {
"required": true,
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {},
"example": {}
}
}
}
}
},
"delete": {
"tags": [
"crud"
],
"summary": "Delete entity",
"description": "Delete entity",
"operationId": "deleteEntityId",
"parameters": [],
"responses": {
"200": {
"description": "Operación exitosa",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/SuccessResponse"
}
}
}
},
"400": {
"$ref": "#/components/responses/BadRequest"
},
"401": {
"$ref": "#/components/responses/Unauthorized"
},
"403": {
"$ref": "#/components/responses/Forbidden"
},
"404": {
"$ref": "#/components/responses/NotFound"
},
"429": {
"$ref": "#/components/responses/TooManyRequests"
},
"500": {
"$ref": "#/components/responses/InternalServerError"
}
},
"security": [
{
"bearerAuth": []
}
]
}
},
"/{entity}/bulk": {
"post": {
"tags": [
"crud"
],
"summary": "Bulk operations",
"description": "Bulk operations",
"operationId": "postEntityBulk",
"parameters": [],
"responses": {
"200": {
"description": "Operación exitosa",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/SuccessResponse"
}
}
}
},
"400": {
"$ref": "#/components/responses/BadRequest"
},
"401": {
"$ref": "#/components/responses/Unauthorized"
},
"403": {
"$ref": "#/components/responses/Forbidden"
},
"404": {
"$ref": "#/components/responses/NotFound"
},
"429": {
"$ref": "#/components/responses/TooManyRequests"
},
"500": {
"$ref": "#/components/responses/InternalServerError"
}
},
"security": [
{
"bearerAuth": []
}
],
"requestBody": {
"required": true,
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {},
"example": {}
}
}
}
}
}
},
"/auth/login": {
"post": {
"tags": [
"auth"
],
"summary": "Iniciar sesión",
"description": "Autentica un usuario con email y contraseña, retornando tokens JWT.\n\nEste endpoint valida las credenciales del usuario y genera tokens de acceso\ny actualización si la autenticación es exitosa.\n\n\n**Notas:**\n- Las contraseñas deben cumplir con la política de seguridad\n- Se aplica rate limiting para prevenir ataques de fuerza bruta\n- Los tokens tienen tiempo de expiración configurable\n\n\n**Casos de uso:**\n- Autenticación de usuarios en aplicaciones web\n- Login en aplicaciones móviles\n- Integración con sistemas de terceros\n\n**Límite de velocidad:** 5 solicitudes por 15 minutes",
"operationId": "loginUser",
"parameters": [],
"responses": {
"200": {
"description": "Login exitoso",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"success": {
"type": "boolean",
"example": true
},
"message": {
"type": "string",
"example": "Login exitoso"
},
"data": {
"type": "object",
"properties": {
"user": {
"$ref": "#/components/schemas/User"
},
"tokens": {
"type": "object",
"properties": {
"accessToken": {
"type": "string",
"description": "Token JWT de acceso"
},
"refreshToken": {
"type": "string",
"description": "Token para renovar el acceso"
},
"expiresIn": {
"type": "integer",
"description": "Tiempo de expiración en segundos"
}
}
}
}
}
}
},
"examples": {
"loginSuccess": {
"summary": "Respuesta exitosa de login",
"value": {
"success": true,
"message": "Login exitoso",
"data": {
"user": {
"id": "123e4567-e89b-12d3-a456-426614174000",
"email": "juan.perez@ejemplo.com",
"name": "Juan Pérez",
"role": "employee"
},
"tokens": {
"accessToken": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
"refreshToken": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
"expiresIn": 900
}
}
}
}
}
}
}
},
"400": {
"$ref": "#/components/responses/BadRequest"
},
"404": {
"$ref": "#/components/responses/NotFound"
},
"429": {
"$ref": "#/components/responses/TooManyRequests"
},
"500": {
"$ref": "#/components/responses/InternalServerError"
}
},
"security": [],
"requestBody": {
"required": true,
"description": "Credenciales de usuario",
"content": {
"application/json": {
"schema": {
"type": "object",
"required": [
"email",
"password"
],
"properties": {
"email": {
"type": "string",
"format": "email",
"description": "Email del usuario",
"example": "usuario@ejemplo.com"
},
"password": {
"type": "string",
"minLength": 8,
"description": "Contraseña del usuario",
"example": "MiContraseña123!"
},
"rememberMe": {
"type": "boolean",
"description": "Mantener sesión activa por más tiempo",
"default": false
}
}
},
"examples": {
"loginRequest": {
"summary": "Solicitud de login típica",
"value": {
"email": "juan.perez@ejemplo.com",
"password": "MiContraseña123!",
"rememberMe": true
}
}
}
}
}
}
}
},
"/auth/register": {
"post": {
"tags": [
"auth"
],
"summary": "Registrar nuevo usuario",
"description": "Registra un nuevo usuario en el sistema.\n\nCrea una nueva cuenta de usuario con validación de datos y envío\nde email de verificación si está habilitado.\n\n\n**Límite de velocidad:** 3 solicitudes por 10 minutes",
"operationId": "registerUser",
"parameters": [],
"responses": {
"200": {
"description": "Usuario registrado exitosamente",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"success": {
"type": "boolean"
},
"message": {
"type": "string"
},
"data": {
"type": "object",
"properties": {
"user": {
"$ref": "#/components/schemas/User"
},
"emailVerificationSent": {
"type": "boolean"
}
}
}
}
},
"examples": {}
}
}
},
"400": {
"$ref": "#/components/responses/BadRequest"
},
"404": {
"$ref": "#/components/responses/NotFound"
},
"429": {
"$ref": "#/components/responses/TooManyRequests"
},
"500": {
"$ref": "#/components/responses/InternalServerError"
}
},
"security": [],
"requestBody": {
"required": true,
"description": "Datos del nuevo usuario",
"content": {
"application/json": {
"schema": {
"type": "object",
"required": [
"email",
"password",
"name"
],
"properties": {
"email": {
"type": "string",
"format": "email",
"description": "Email único del usuario"
},
"password": {
"type": "string",
"minLength": 8,
"description": "Contraseña que cumple políticas de seguridad"
},
"name": {
"type": "string",
"minLength": 2,
"maxLength": 100,
"description": "Nombre completo del usuario"
},
"role": {
"type": "string",
"enum": [
"employee",
"manager"
],
"default": "employee",
"description": "Rol inicial del usuario"
}
}
},
"examples": {}
}
}
}
}
},
"/auth/refresh": {
"post": {
"tags": [
"auth"
],
"summary": "Renovar tokens de acceso",
"description": "Renueva el token de acceso usando el refresh token.\n\nPermite mantener la sesión activa sin requerir login nuevamente.\n",
"operationId": "refreshTokens",
"parameters": [],
"responses": {
"200": {
"description": "Tokens renovados exitosamente",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"success": {
"type": "boolean"
},
"data": {
"type": "object",
"properties": {
"accessToken": {
"type": "string"
},
"refreshToken": {
"type": "string"
},
"expiresIn": {
"type": "integer"
}
}
}
}
},
"examples": {}
}
}
},
"400": {
"$ref": "#/components/responses/BadRequest"
},
"401": {
"$ref": "#/components/responses/Unauthorized"
},
"403": {
"$ref": "#/components/responses/Forbidden"
},
"404": {
"$ref": "#/components/responses/NotFound"
},
"429": {
"$ref": "#/components/responses/TooManyRequests"
},
"500": {
"$ref": "#/components/responses/InternalServerError"
}
},
"security": [
{
"bearerAuth": []
}
],
"requestBody": {
"required": true,
"content": {
"application/json": {
"schema": {
"type": "object",
"required": [
"refreshToken"
],
"properties": {
"refreshToken": {
"type": "string",
"description": "Token de actualización válido"
}
}
},
"examples": {}
}
}
}
}
},
"/auth/logout": {
"post": {
"tags": [
"auth"
],
"summary": "Cerrar sesión",
"description": "Invalida los tokens del usuario y cierra la sesión",
"operationId": "logoutUser",
"parameters": [],
"responses": {
"200": {
"description": "Sesión cerrada exitosamente",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/SuccessResponse"
},
"examples": {}
}
}
},
"400": {
"$ref": "#/components/responses/BadRequest"
},
"401": {
"$ref": "#/components/responses/Unauthorized"
},
"403": {
"$ref": "#/components/responses/Forbidden"
},
"404": {
"$ref": "#/components/responses/NotFound"
},
"429": {
"$ref": "#/components/responses/TooManyRequests"
},
"500": {
"$ref": "#/components/responses/InternalServerError"
}
},
"security": [
{
"bearerAuth": []
}
],
"requestBody": {
"required": true,
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {},
"example": {}
}
}
}
}
}
},
"/auth/profile": {
"get": {
"tags": [
"auth"
],
"summary": "Obtener perfil del usuario",
"description": "Retorna la información del perfil del usuario autenticado",
"operationId": "getUserProfile",
"parameters": [],
"responses": {
"200": {
"description": "Perfil del usuario",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"success": {
"type": "boolean"
},
"data": {
"$ref": "#/components/schemas/User"
}
}
},
"examples": {}
}
}
},
"400": {
"$ref": "#/components/responses/BadRequest"
},
"401": {
"$ref": "#/components/responses/Unauthorized"
},
"403": {
"$ref": "#/components/responses/Forbidden"
},
"404": {
"$ref": "#/components/responses/NotFound"
},
"429": {
"$ref": "#/components/responses/TooManyRequests"
},
"500": {
"$ref": "#/components/responses/InternalServerError"
}
},
"security": [
{
"bearerAuth": []
}
]
},
"put": {
"tags": [
"auth"
],
"summary": "Actualizar perfil del usuario",
"description": "Actualiza la información del perfil del usuario autenticado",
"operationId": "updateUserProfile",
"parameters": [],
"responses": {
"200": {
"description": "Perfil actualizado exitosamente",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"success": {
"type": "boolean"
},
"data": {
"$ref": "#/components/schemas/User"
}
}
},
"examples": {}
}
}
},
"400": {
"$ref": "#/components/responses/BadRequest"
},
"401": {
"$ref": "#/components/responses/Unauthorized"
},
"403": {
"$ref": "#/components/responses/Forbidden"
},
"404": {
"$ref": "#/components/responses/NotFound"
},
"429": {
"$ref": "#/components/responses/TooManyRequests"
},
"500": {
"$ref": "#/components/responses/InternalServerError"
}
},
"security": [
{
"bearerAuth": []
}
],
"requestBody": {
"required": true,
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"name": {
"type": "string",
"minLength": 2,
"maxLength": 100
},
"email": {
"type": "string",
"format": "email"
}
}
},
"examples": {}
}
}
}
}
}
},
"components": {
"schemas": {
"Error": {
"type": "object",
"required": [
"error",
"message"
],
"properties": {
"error": {
"type": "string",
"description": "Código de error"
},
"message": {
"type": "string",
"description": "Mensaje descriptivo del error"
},
"details": {
"type": "object",
"description": "Detalles adicionales del error"
},
"timestamp": {
"type": "string",
"format": "date-time",
"description": "Timestamp del error"
},
"path": {
"type": "string",
"description": "Ruta donde ocurrió el error"
}
},
"example": {
"error": "VALIDATION_ERROR",
"message": "Los datos proporcionados no son válidos",
"details": {
"field": "email",
"reason": "Formato de email inválido"
},
"timestamp": "2024-01-15T10:30:00Z",
"path": "/api/v1/users"
}
},
"PaginationMeta": {
"type": "object",
"properties": {
"page": {
"type": "integer",
"minimum": 1,
"description": "Página actual"
},
"limit": {
"type": "integer",
"minimum": 1,
"maximum": 100,
"description": "Elementos por página"
},
"total": {
"type": "integer",
"minimum": 0,
"description": "Total de elementos"
},
"totalPages": {
"type": "integer",
"minimum": 0,
"description": "Total de páginas"
},
"hasNext": {
"type": "boolean",
"description": "Indica si hay página siguiente"
},
"hasPrev": {
"type": "boolean",
"description": "Indica si hay página anterior"
}
},
"example": {
"page": 1,
"limit": 20,
"total": 150,
"totalPages": 8,
"hasNext": true,
"hasPrev": false
}
},
"PaginatedResponse": {
"type": "object",
"properties": {
"data": {
"type": "array",
"items": {},
"description": "Array de elementos"
},
"meta": {
"$ref": "#/components/schemas/PaginationMeta"
}
}
},
"SuccessResponse": {
"type": "object",
"properties": {
"success": {
"type": "boolean",
"example": true
},
"message": {
"type": "string",
"description": "Mensaje de éxito"
},
"data": {
"type": "object",
"description": "Datos de respuesta"
}
}
},
"AuditFields": {
"type": "object",
"properties": {
"createdAt": {
"type": "string",
"format": "date-time",
"description": "Fecha de creación"
},
"updatedAt": {
"type": "string",
"format": "date-time",
"description": "Fecha de última actualización"
},
"createdBy": {
"type": "string",
"description": "ID del usuario que creó el registro"
},
"updatedBy": {
"type": "string",
"description": "ID del usuario que actualizó el registro"
}
}
},
"User": {
"type": "object",
"properties": {
"id": {
"type": "string",
"format": "uuid",
"description": "ID único del usuario"
},
"email": {
"type": "string",
"format": "email",
"description": "Email del usuario"
},
"name": {
"type": "string",
"description": "Nombre completo del usuario"
},
"role": {
"type": "string",
"enum": [
"admin",
"manager",
"employee"
],
"description": "Rol del usuario"
},
"emailVerified": {
"type": "boolean",
"description": "Indica si el email está verificado"
},
"lastLoginAt": {
"type": "string",
"format": "date-time",
"description": "Fecha del último login"
},
"createdAt": {
"type": "string",
"format": "date-time",
"description": "Fecha de creación"
},
"updatedAt": {
"type": "string",
"format": "date-time",
"description": "Fecha de última actualización"
}
},
"required": [
"id",
"email",
"name",
"role"
],
"example": {
"id": "123e4567-e89b-12d3-a456-426614174000",
"email": "juan.perez@ejemplo.com",
"name": "Juan Pérez",
"role": "employee",
"emailVerified": true,
"lastLoginAt": "2024-01-15T10:30:00Z",
"createdAt": "2024-01-10T08:00:00Z",
"updatedAt": "2024-01-15T10:30:00Z"
}
}
},
"responses": {
"BadRequest": {
"description": "Solicitud incorrecta",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/Error"
},
"examples": {
"validationError": {
"summary": "Error de validación",
"value": {
"error": "VALIDATION_ERROR",
"message": "Los datos proporcionados no son válidos",
"details": {
"field": "email",
"reason": "Formato de email inválido"
}
}
}
}
}
}
},
"Unauthorized": {
"description": "No autorizado",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/Error"
},
"example": {
"error": "UNAUTHORIZED",
"message": "Token de acceso requerido"
}
}
}
},
"Forbidden": {
"description": "Acceso prohibido",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/Error"
},
"example": {
"error": "FORBIDDEN",
"message": "No tienes permisos para realizar esta acción"
}
}
}
},
"NotFound": {
"description": "Recurso no encontrado",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/Error"
},
"example": {
"error": "NOT_FOUND",
"message": "El recurso solicitado no existe"
}
}
}
},
"InternalServerError": {
"description": "Error interno del servidor",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/Error"
},
"example": {
"error": "INTERNAL_SERVER_ERROR",
"message": "Ha ocurrido un error interno del servidor"
}
}
}
},
"TooManyRequests": {
"description": "Demasiadas solicitudes",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/Error"
},
"example": {
"error": "RATE_LIMIT_EXCEEDED",
"message": "Has excedido el límite de solicitudes por minuto"
}
}
},
"headers": {
"X-RateLimit-Limit": {
"description": "Límite de solicitudes por ventana de tiempo",
"schema": {
"type": "integer"
}
},
"X-RateLimit-Remaining": {
"description": "Solicitudes restantes en la ventana actual",
"schema": {
"type": "integer"
}
},
"X-RateLimit-Reset": {
"description": "Timestamp cuando se reinicia la ventana",
"schema": {
"type": "integer"
}
}
}
}
},
"parameters": {
"PageParam": {
"name": "page",
"in": "query",
"description": "Número de página (empezando desde 1)",
"required": false,
"schema": {
"type": "integer",
"minimum": 1,
"default": 1
},
"example": 1
},
"LimitParam": {
"name": "limit",
"in": "query",
"description": "Número de elementos por página",
"required": false,
"schema": {
"type": "integer",
"minimum": 1,
"maximum": 100,
"default": 20
},
"example": 20
},
"SortParam": {
"name": "sort",
"in": "query",
"description": "Campo por el cual ordenar (prefijo con - para orden descendente)",
"required": false,
"schema": {
"type": "string"
},
"examples": {
"ascending": {
"summary": "Orden ascendente",
"value": "createdAt"
},
"descending": {
"summary": "Orden descendente",
"value": "-createdAt"
}
}
},
"SearchParam": {
"name": "search",
"in": "query",
"description": "Término de búsqueda",
"required": false,
"schema": {
"type": "string",
"minLength": 1
},
"example": "término de búsqueda"
},
"IdParam": {
"name": "id",
"in": "path",
"description": "ID único del recurso",
"required": true,
"schema": {
"type": "string",
"pattern": "^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$"
},
"example": "123e4567-e89b-12d3-a456-426614174000"
}
},
"examples": {
"UserExample": {
"summary": "Ejemplo de usuario",
"value": {
"id": "123e4567-e89b-12d3-a456-426614174000",
"email": "usuario@ejemplo.com",
"name": "Juan Pérez",
"role": "user",
"createdAt": "2024-01-15T10:30:00Z",
"updatedAt": "2024-01-15T10:30:00Z"
}
},
"PaginatedUsersExample": {
"summary": "Lista paginada de usuarios",
"value": {
"data": [
{
"id": "123e4567-e89b-12d3-a456-426614174000",
"email": "usuario1@ejemplo.com",
"name": "Juan Pérez"
},
{
"id": "456e7890-e89b-12d3-a456-426614174001",
"email": "usuario2@ejemplo.com",
"name": "María García"
}
],
"meta": {
"page": 1,
"limit": 20,
"total": 150,
"totalPages": 8,
"hasNext": true,
"hasPrev": false
}
}
}
},
"requestBodies": {},
"headers": {},
"securitySchemes": {
"bearerAuth": {
"type": "http",
"scheme": "bearer",
"bearerFormat": "JWT",
"description": "Token JWT para autenticación"
},
"apiKey": {
"type": "apiKey",
"in": "header",
"name": "X-API-Key",
"description": "API Key para autenticación de servicios"
}
}
},
"tags": [
{
"name": "database",
"description": "Configuración y gestión de base de datos con Prisma ORM",
"externalDocs": {
"description": "Documentación del módulo database",
"url": "https://docs.backend-mcp.com/modules/database"
}
},
{
"name": "crud",
"description": "Endpoints del módulo crud",
"externalDocs": {
"description": "Documentación del módulo crud",
"url": "https://docs.backend-mcp.com/modules/crud"
}
},
{
"name": "auth",
"description": "Sistema completo de autenticación JWT con roles y permisos",
"externalDocs": {
"description": "Documentación del módulo auth",
"url": "https://docs.backend-mcp.com/modules/auth"
}
},
{
"name": "cache",
"description": "Sistema de caché distribuido con Redis y estrategias avanzadas",
"externalDocs": {
"description": "Documentación del módulo cache",
"url": "https://docs.backend-mcp.com/modules/cache"
}
},
{
"name": "ci",
"description": "Sistema completo de CI/CD con GitHub Actions, GitLab CI y pipelines automatizados",
"externalDocs": {
"description": "Documentación del módulo ci",
"url": "https://docs.backend-mcp.com/modules/ci"
}
},
{
"name": "docker",
"description": "Containerización completa con Docker y Docker Compose para desarrollo y producción",
"externalDocs": {
"description": "Documentación del módulo docker",
"url": "https://docs.backend-mcp.com/modules/docker"
}
},
{
"name": "email",
"description": "Sistema completo de emails con templates, colas y múltiples proveedores",
"externalDocs": {
"description": "Documentación del módulo email",
"url": "https://docs.backend-mcp.com/modules/email"
}
},
{
"name": "logging",
"description": "Sistema completo de logging estructurado con Winston y auditoría",
"externalDocs": {
"description": "Documentación del módulo logging",
"url": "https://docs.backend-mcp.com/modules/logging"
}
},
{
"name": "monitoring",
"description": "Endpoints del módulo monitoring",
"externalDocs": {
"description": "Documentación del módulo monitoring",
"url": "https://docs.backend-mcp.com/modules/monitoring"
}
},
{
"name": "notifications",
"description": "Endpoints del módulo notifications",
"externalDocs": {
"description": "Documentación del módulo notifications",
"url": "https://docs.backend-mcp.com/modules/notifications"
}
},
{
"name": "testing",
"description": "Sistema completo de testing con Jest, Supertest y configuraciones para unit, integration y e2e tests",
"externalDocs": {
"description": "Documentación del módulo testing",
"url": "https://docs.backend-mcp.com/modules/testing"
}
},
{
"name": "validation",
"description": "Sistema completo de validación con class-validator y esquemas personalizados",
"externalDocs": {
"description": "Documentación del módulo validation",
"url": "https://docs.backend-mcp.com/modules/validation"
}
},
{
"name": "websockets",
"description": "Sistema completo de WebSockets para comunicación en tiempo real",
"externalDocs": {
"description": "Documentación del módulo websockets",
"url": "https://docs.backend-mcp.com/modules/websockets"
}
}
],
"externalDocs": {
"description": "Documentación completa del framework",
"url": "https://docs.backend-mcp.com"
}
}