Skip to main content
Glama
SERV-DRV

MCP---FastApi

by SERV-DRV
README.md
# API de Inventario con MCP y Chat con IA

Sistema completo de gestión de inventario integrado con inteligencia artificial y el protocolo MCP (Model Context Protocol), ejecutándose en contenedores Docker.

## 📋 Descripción

API REST para gestión de inventario con capacidades de IA mediante Ollama y soporte MCP para integración con clientes como Claude Desktop y VS Code. El sistema permite gestionar empresas y productos, con persistencia en PostgreSQL, y ofrece un chat interactivo con IA que puede usar las herramientas del inventario.

## 🏗️ Estructura de Carpetas

```
Prueba_fastAPI/
├── app/
│   ├── __init__.py
│   ├── main.py                 # Aplicación principal FastAPI
│   ├── database.py             # Configuración de base de datos
│   ├── models.py               # Modelos SQLAlchemy
│   ├── crud.py                 # Operaciones CRUD
│   ├── api/
│   │   ├── __init__.py
│   │   ├── rutas_usuarios.py   # Endpoints de usuarios
│   │   ├── rutas_inventario.py # Endpoints de inventario
│   │   ├── rutas_generals.py   # Endpoints generales
│   │   └── rutas_chat.py       # Endpoint de chat con IA
│   └── schemas/
│       ├── usuario.py          # Schemas de usuarios
│       └── inventario.py       # Schemas de inventario
├── Dockerfile                  # Imagen Docker para FastAPI
├── Dockerfile.mcp-inspector    # Imagen Docker para MCP Inspector
├── docker-compose.yml          # Orquestación de contenedores
├── nginx.conf                  # Configuración de Nginx
├── requirements.txt            # Dependencias Python
└── chat_ia.py                  # Script original de chat (legacy)
```

## 🛠️ Tecnologías

### Backend
- **FastAPI**: Framework web moderno para Python
- **SQLAlchemy**: ORM para base de datos
- **Pydantic**: Validación de datos
- **Uvicorn**: Servidor ASGI

### Base de Datos
- **PostgreSQL 15**: Base de datos relacional
- **psycopg2-binary**: Driver PostgreSQL para Python

### Inteligencia Artificial
- **Ollama**: Plataforma para ejecutar modelos LLM
- **llama3.2:3b**: Modelo de lenguaje local
- **fastapi-mcp**: Integración MCP con FastAPI

### Infraestructura
- **Docker & Docker Compose**: Contenedores
- **Nginx**: Proxy reverso y balanceador
- **Node.js 22**: Para MCP Inspector

## 🐳 Contenedores Docker

El proyecto utiliza 5 contenedores:

1. **web-api**: Aplicación FastAPI principal
2. **ollama**: Modelo de IA llama3.2:3b
3. **postgres**: Base de datos PostgreSQL
4. **nginx**: Proxy reverso con soporte SSE
5. **mcp-inspector**: Herramienta de desarrollo para MCP (opcional)

## 🚀 Instalación y Uso

### Requisitos Previos
- Docker instalado
- Docker Compose instalado

### Clonar el Proyecto

```bash
git clone <url-del-repositorio>
cd Prueba_fastAPI
```

### Iniciar el Sistema

```bash
# Iniciar todos los contenedores
docker-compose up -d

# Ver logs de todos los servicios
docker-compose logs -f

# Detener todos los servicios
docker-compose down
```

## 📡 Endpoints Disponibles

### API REST
- `POST /usuarios/` - Crear usuario
- `GET /usuarios/` - Listar usuarios
- `PUT /usuarios/{id}` - Actualizar usuario
- `DELETE /usuarios/{id}` - Eliminar usuario
- `POST /inventario/empresas` - Crear empresa
- `GET /inventario/empresas` - Listar empresas
- `POST /inventario/productos` - Crear producto
- `GET /inventario/productos` - Listar productos

### Chat con IA
- `POST /chat/chat` - Chat interactivo con Ollama

### MCP
- `GET /sse` - Endpoint Server-Sent Events para MCP

### Documentación
- `GET /docs` - Documentación interactiva Swagger UI
- `GET /redoc` - Documentación ReDoc

## 🔍 Ver Funcionalidad

### 1. Documentación API
Abre en tu navegador:
```
http://localhost:8000/docs
```

### 2. Chat con IA
Usa el endpoint `/chat/chat` en la documentación Swagger:
```json
{
  "mensaje": "Crea una empresa llamada TestEmpresa"
}
```

### 3. Ver Datos en Base de Datos
```bash
docker exec -it postgres_container psql -U postgres -d inventario -c "SELECT * FROM empresas;"
```

### 4. MCP Inspector (Opcional)
Si el servicio mcp-inspector está activo, verifica los logs para obtener el token de acceso:
```bash
docker logs mcp_inspector_container
```

## 🔧 Configuración

### Variables de Entorno
Las variables de entorno se configuran en `docker-compose.yml`:
- `OLLAMA_HOST`: URL del servicio Ollama
- `DATABASE_URL`: URL de conexión PostgreSQL
- `API_URL`: URL interna de la API

### Puertos
- `8000`: Nginx (API principal)
- `11434`: Ollama
- `5432`: PostgreSQL
- `6274-6275`: MCP Inspector (si está activo)

## 📝 Notas Importantes

- El modelo `llama3.2:3b` tarda ~1 minuto en responder por ejecutarse en CPU
- MCP Inspector es opcional y puede eliminarse del docker-compose
- Los datos persisten en volúmenes Docker incluso al reiniciar contenedores
- Nginx está configurado para soportar Server-Sent Events (SSE) para MCP
- Si se desea probar desde docker en MCP inspector se coloca Nginx como ruta ya que maneja e trafico y la comunicacion ([/nignx/sse](http://nginx/sse))

## 🤝 Contribución

Este proyecto es un sistema de demostración para integrar MCP con FastAPI y Ollama.