# MCP SQL - Arquitectura Modular
Estructura modular del servidor MCP SQL organizada en componentes independientes.
## 📁 Estructura del Proyecto
```
mcp_sql/
├── __init__.py # Exporta las clases principales del módulo
├── credentials.py # Gestión de credenciales (Credentials, CredentialsManager)
├── connection.py # Gestión de conexiones (ConnectionManager)
├── inspector.py # Inspección de base de datos (DatabaseInspector)
├── executor.py # Ejecución de queries (QueryExecutor)
├── server.py # Orquestador principal (MCPSQLServer)
└── dependencies.py # Instalación automática de dependencias
```
## 🔧 Componentes
### `credentials.py`
**Clases:**
- `Credentials` (dataclass): Estructura de datos para credenciales
- `CredentialsManager`: Gestión de obtención de credenciales desde múltiples fuentes
**Responsabilidad:** Manejo centralizado de credenciales con priorización de fuentes.
### `connection.py`
**Clases:**
- `ConnectionManager`: Creación y caché de engines SQLAlchemy
**Responsabilidad:** Gestión del ciclo de vida de conexiones a bases de datos.
### `inspector.py`
**Clases:**
- `DatabaseInspector`: Operaciones de inspección de metadatos
**Responsabilidad:** Obtención de información de esquemas, tablas y columnas.
### `executor.py`
**Clases:**
- `QueryExecutor`: Ejecución de consultas SQL
**Responsabilidad:** Operaciones de lectura de datos (queries SELECT).
### `server.py`
**Clases:**
- `MCPSQLServer`: Orquestador principal del servidor MCP
**Responsabilidad:** Inicialización y registro de herramientas MCP.
### `dependencies.py`
**Funciones:**
- `ensure_deps_once()`: Auto-instalación de dependencias
**Responsabilidad:** Bootstrapping de dependencias faltantes.
## 🚀 Uso
### Importación básica
```python
from mcp_sql import MCPSQLServer
# Crear e iniciar servidor
server = MCPSQLServer()
server.run(port=3939)
```
### Uso de componentes individuales
```python
from mcp_sql import ConnectionManager, DatabaseInspector, Credentials
# Crear gestor de conexiones
conn_manager = ConnectionManager()
# Crear inspector
inspector = DatabaseInspector(conn_manager)
# Usar credenciales
creds = Credentials(
user="myuser",
password="mypass",
server="localhost",
database="mydb"
)
# Obtener tablas
tables = inspector.get_tables(creds)
```
## 📦 Ventajas de esta Arquitectura
1. **Separación de Responsabilidades**: Cada clase tiene una única responsabilidad
2. **Testabilidad**: Componentes independientes fáciles de probar
3. **Mantenibilidad**: Cambios localizados en archivos específicos
4. **Reutilización**: Clases pueden usarse independientemente
5. **Escalabilidad**: Fácil agregar nuevos componentes
6. **Legibilidad**: Código organizado y fácil de navegar
## 🔄 Flujo de Ejecución
```
mcp_server.py (entry point)
↓
MCPSQLServer (server.py)
↓
├── ConnectionManager (connection.py)
├── CredentialsManager (credentials.py)
├── DatabaseInspector (inspector.py)
└── QueryExecutor (executor.py)
```
## 🧪 Testing
Cada módulo puede ser testeado de forma independiente:
```python
# test_credentials.py
from mcp_sql.credentials import CredentialsManager, Credentials
def test_credentials_validation():
creds = Credentials(user="test", password="test", server="localhost")
assert creds.is_valid() == True
```
## 📝 Extensión
Para agregar nuevas funcionalidades:
1. Crear nuevo archivo en `mcp_sql/` (ej: `analytics.py`)
2. Implementar la clase correspondiente
3. Importar en `__init__.py`
4. Usar en `server.py` si es necesario
Ejemplo:
```python
# mcp_sql/analytics.py
class QueryAnalyzer:
def __init__(self, connection_manager):
self.conn_manager = connection_manager
def analyze_query(self, sql: str):
# Lógica de análisis
pass
```