FireStoreAPI es un servidor Model Context Protocol (MCP) desarrollado en Go que proporciona herramientas para la gestión completa de inventario de productos tecnológicos utilizando Google Firestore como base de datos. Este proyecto está diseñado específicamente para startups de comercio electrónico que necesitan un sistema robusto y escalable para administrar su catálogo de productos.
El proyecto tiene como objetivo principal proporcionar una API RESTful a través del protocolo MCP que permita:
- Gestión completa de productos: Crear, leer, actualizar y eliminar productos del inventario
- Control de stock: Modificar cantidades de inventario con operaciones de suma y resta
- Carga masiva de datos: Importar catálogos completos desde archivos CSV
- Consultas paginadas: Obtener listados de productos con paginación eficiente
- Integración con IA: Exponer funcionalidades a través de herramientas MCP para uso con modelos de IA
El proyecto implementa una arquitectura hexagonal (Clean Architecture) con separación clara de responsabilidades:
┌─────────────────────────────────────────────────────────────┐
│ PRESENTATION LAYER │
│ ┌─────────────────┐ ┌─────────────────┐ ┌──────────────┐ │
│ │ MCP Tools │ │ HTTP Server │ │ Handlers │ │
│ │ (create_*) │ │ (Streamable) │ │ │ │
│ └─────────────────┘ └─────────────────┘ └──────────────┘ │
└─────────────────────────────────────────────────────────────┘
│
┌─────────────────────────────────────────────────────────────┐
│ APPLICATION LAYER │
│ ┌─────────────────┐ ┌─────────────────┐ ┌──────────────┐ │
│ │ Use Cases │ │ DTOs │ │ Services │ │
│ │ (Inventory) │ │ (Requests) │ │ │ │
│ └─────────────────┘ └─────────────────┘ └──────────────┘ │
└─────────────────────────────────────────────────────────────┘
│
┌─────────────────────────────────────────────────────────────┐
│ DOMAIN LAYER │
│ ┌─────────────────┐ ┌─────────────────┐ ┌──────────────┐ │
│ │ Entities │ │ Repositories │ │ Business │ │
│ │ (Product) │ │ (Interfaces) │ │ Logic │ │
│ └─────────────────┘ └─────────────────┘ └──────────────┘ │
└─────────────────────────────────────────────────────────────┘
│
┌─────────────────────────────────────────────────────────────┐
│ INFRASTRUCTURE LAYER │
│ ┌─────────────────┐ ┌─────────────────┐ ┌──────────────┐ │
│ │ Firestore │ │ Configuration │ │ External │ │
│ │ Repository │ │ (YAML) │ │ Services │ │
│ └─────────────────┘ └─────────────────┘ └──────────────┘ │
└─────────────────────────────────────────────────────────────┘
- MCP Tools: Herramientas expuestas a través del protocolo MCP
- HTTP Server: Servidor HTTP con soporte para streamable-http
- Handlers: Manejo de solicitudes y respuestas
- Use Cases: Lógica de negocio para gestión de inventario
- DTOs: Objetos de transferencia de datos para requests/responses
- Services: Servicios de aplicación
- Entities: Modelos de dominio (Product)
- Repository Interfaces: Contratos para acceso a datos
- Business Logic: Reglas de negocio puras
- Firestore Repository: Implementación concreta del repositorio
- Configuration: Gestión de configuración con YAML
- External Services: Integraciones con servicios externos
- Go 1.24.0: Lenguaje de programación principal
- MCP-Go: Framework para implementar servidores MCP
- Google Firestore: Base de datos NoSQL en la nube
- Firebase SDK: SDK oficial de Google para Firebase
- YAML: Configuración de la aplicación
- Structured Logging: Logging estructurado con slog
- Dependency Injection: Inyección de dependencias manual
- Graceful Shutdown: Manejo elegante de cierre de servidor
- Context Management: Gestión de contexto para operaciones asíncronas
- Model Context Protocol (MCP): Protocolo para integración con IA
- HTTP/REST: API RESTful para comunicación
- JSON: Formato de intercambio de datos
- CSV: Importación masiva de datos
- ✅ Crear producto: Registro de nuevos productos en el inventario
- ✅ Consultar producto: Búsqueda por SKU único
- ✅ Actualizar producto: Modificación de datos del producto
- ✅ Eliminar producto: Remoción del inventario
- ✅ Listar productos: Consulta paginada del catálogo
- ✅ Modificar stock: Operaciones de suma y resta de inventario
- ✅ Validación de stock: Control de cantidades negativas
- ✅ Trazabilidad: Registro de fechas de creación y actualización
- ✅ Importación CSV: Carga masiva desde archivos CSV
- ✅ Catálogo inicial: 100 smartphones comerciales pre-configurados
- ✅ Validación de datos: Verificación de integridad durante la importación
- ✅ Herramientas MCP: Exposición de funcionalidades para IA
- ✅ Esquemas de entrada: Validación automática de datos
- ✅ Respuestas estructuradas: Formato JSON consistente
FireStoreAPI/
├── cmd/
│ └── main.go # Punto de entrada de la aplicación
├── configs/
│ ├── config.yaml # Configuración de la aplicación
│ └── smartphones_catalog.csv # Catálogo inicial de productos
├── internal/
│ ├── application/
│ │ ├── dto/ # Data Transfer Objects
│ │ └── inventory/ # Casos de uso de inventario
│ ├── domain/
│ │ ├── entities/ # Entidades de dominio
│ │ └── repository/ # Interfaces de repositorio
│ ├── infrastructure/
│ │ ├── config/ # Gestión de configuración
│ │ └── repository/ # Implementaciones de repositorio
│ └── interfaces/
│ ├── mcp/ # Herramientas y handlers MCP
│ └── middleware/ # Middleware de la aplicación
├── pkg/
│ └── utils/ # Utilidades compartidas
├── go.mod # Dependencias de Go
├── go.sum # Checksums de dependencias
├── Dockerfile # Configuración de Docker
└── README.md # Documentación del proyecto
server:
host: "localhost"
port: 8080
database:
project_id: "technology-cloud-75d1f"# Firebase/Firestore
GOOGLE_APPLICATION_CREDENTIALS="path/to/service-account.json"
FIREBASE_PROJECT_ID="your-project-id"
# Servidor
SERVER_HOST="localhost"
SERVER_PORT="8080"- Go 1.24.0+ instalado
- Cuenta de Google Cloud con Firestore habilitado
- Archivo de credenciales de servicio de Firebase
- Clonar el repositorio:
git clone <repository-url>
cd FireStoreAPI- Instalar dependencias:
go mod download- Configurar Firebase:
# Descargar credenciales de Firebase Console
export GOOGLE_APPLICATION_CREDENTIALS="path/to/service-account.json"- Ejecutar la aplicación:
go run cmd/main.go# Construir imagen
docker build -t firestore-api .
# Ejecutar contenedor
docker run -p 8080:8080 \
-e GOOGLE_APPLICATION_CREDENTIALS=/app/credentials.json \
-v /path/to/credentials.json:/app/credentials.json \
firestore-apiCrea un nuevo producto en el inventario.
Parámetros:
{
"sku": "TEL-APP-I15P-256",
"active": true,
"category": "Celulares",
"image_url": "https://example.com/image.jpg",
"name": "iPhone 15 Pro 256GB",
"name_provider": "Apple",
"price": 4500000
}Modifica el stock de un producto existente.
Parámetros:
{
"sku": "TEL-APP-I15P-256",
"stock": 10,
"type": "Sum" // o "Rest"
}Actualiza información de un producto existente.
Parámetros:
{
"sku": "TEL-APP-I15P-256",
"name": "iPhone 15 Pro 256GB - Actualizado",
"price": 4600000,
"active": true,
"image_url": "https://example.com/new-image.jpg"
}Elimina un producto del inventario.
Parámetros:
{
"sku": "TEL-APP-I15P-256"
}Consulta un producto específico por su SKU.
Parámetros:
{
"sku": "TEL-APP-I15P-256"
}Obtiene una lista paginada de productos.
Parámetros:
{
"limit": 10,
"offset": 0
}Carga datos iniciales desde un archivo CSV.
Parámetros:
{
"path": "configs/smartphones_catalog.csv" // opcional
}type Product struct {
Sku string `firestore:"sku"`
Active bool `firestore:"activo"`
Category string `firestore:"categoria"`
UpdatedAt time.Time `firestore:"fechaActualizacion"`
CreatedAt time.Time `firestore:"fechaCreacion"`
ImageUrl string `firestore:"imagenUrl"`
Name string `firestore:"nombre"`
NameProvider string `firestore:"nombreProveedor"`
Price float64 `firestore:"precio"`
Stock int `firestore:"stock"`
}- Autenticación: Integración con Firebase Auth
- Autorización: Control de acceso basado en roles
- Validación: Validación de entrada en todos los endpoints
- Logging: Registro de todas las operaciones críticas
- Structured Logging: Logs estructurados con contexto
- Métricas: Monitoreo de operaciones de base de datos
- Trazabilidad: Seguimiento de requests y responses
- Health Checks: Endpoints de salud del servicio
- Fork el proyecto
- Crea una rama para tu feature (
git checkout -b feature/AmazingFeature) - Commit tus cambios (
git commit -m 'Add some AmazingFeature') - Push a la rama (
git push origin feature/AmazingFeature) - Abre un Pull Request
Este proyecto está bajo la Licencia MIT. Ver el archivo LICENSE para más detalles.
- Desarrollador Principal: [Tu Nombre]
- Arquitecto de Software: [Tu Nombre]
Para soporte técnico o consultas sobre el proyecto:
- Email: [tu-email@ejemplo.com]
- Issues: GitHub Issues
- Documentación: Wiki del Proyecto
FireStoreAPI - Potenciando el comercio electrónico con tecnología de vanguardia 🚀