UNPKG

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.

985 lines (963 loc) 29.3 kB
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. Este endpoint valida las credenciales del usuario y genera tokens de acceso y actualización si la autenticación es exitosa. **Notas:** - Las contraseñas deben cumplir con la política de seguridad - Se aplica rate limiting para prevenir ataques de fuerza bruta - Los tokens tienen tiempo de expiración configurable **Casos de uso:** - Autenticación de usuarios en aplicaciones web - Login en aplicaciones móviles - Integración con sistemas de terceros **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. Crea una nueva cuenta de usuario con validación de datos y envío de email de verificación si está habilitado. **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. Permite mantener la sesión activa sin requerir login nuevamente. 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