Skip to main content
Glama
hh186011

mcp-estacion-meteorologica-iot

by hh186011
README.md
# 🌦️ MCP Estación Meteorológica IoT — BIU

Servidor **Model Context Protocol (MCP)** basado en **FastMCP** que expone los datos
de la estación meteorológica IoT (ESP32-S3 + BME280 → AWS → Supabase) como herramientas
consultables en lenguaje natural desde cualquier cliente MCP compatible (Claude Desktop,
Claude.ai, Cursor, etc.).

Proyecto del caso de estudio **Estación Meteorológica IoT**, Maestría en Estructuras
Computacionales, asignatura CSE611 — Broward International University.

## Arquitectura completa del proyecto

```
ESP32-S3 + BME280 → WiFi → AWS API Gateway → AWS Lambda → Supabase PostgreSQL
                                                                    ↓
                                                    [Este servidor MCP en FastMCP Cloud]
                                                                    ↓
                                              Cualquier cliente MCP (Claude, Cursor, etc.)
```

## Base de datos

Tabla `sensor_readings` en Supabase:

| Campo | Tipo | Descripción |
|---|---|---|
| id | UUID | Clave primaria |
| device_id | VARCHAR | Identificador del sensor (ESP32S3_SENSOR_01) |
| temperature | NUMERIC | Temperatura en °C |
| humidity | NUMERIC | Humedad relativa en % |
| pressure | NUMERIC | Presión atmosférica en hPa |
| created_at | TIMESTAMPTZ | Marca de tiempo UTC |

## Instalación local

```bash
pip install -r requirements.txt
cp .env.example .env
# Editar .env con tus credenciales reales de Supabase
python server.py
```

## Variables de entorno

| Variable | Descripción |
|---|---|
| `SUPABASE_URL` | URL del proyecto Supabase |
| `SUPABASE_KEY` | API Key de Supabase (anon o service_role) |
| `DEVICE_ID` | ID del dispositivo a consultar (default: ESP32S3_SENSOR_01) |

## Herramientas (Tools) disponibles

1. **obtener_ultima_lectura()** — Lectura más reciente del sensor
2. **obtener_ultimas_lecturas(limite)** — Historial de lecturas recientes
3. **obtener_datos_grafico(limite)** — Serie temporal para visualización
4. **obtener_resumen_estacion(limite)** — Estadísticas (promedio, máx, mín)
5. **detectar_alertas()** — Alertas según umbrales climáticos de Santiago
6. **datos_para_dashboard(limite)** — Toda la información agregada

## Recursos (Resources) disponibles

- `clima://config/bme280` — Especificaciones técnicas del sensor
- `clima://config/umbrales` — Umbrales de alerta configurados

## Prompts disponibles

1. **prompt_dashboard_tendencias(fecha_inicio, fecha_fin)** — Genera HTML con análisis de tendencias entre fechas
2. **prompt_dashboard_personalizado(tipo_dashboard, limite)** — Genera HTML de dashboard ejecutivo o técnico

## Umbrales de alerta (ajustados para Santiago, Chile)

| Condición | Umbral |
|---|---|
| Temperatura alta | ≥ 30°C |
| Temperatura baja / helada | ≤ 5°C |
| Humedad elevada | ≥ 85% |
| Presión baja (posible lluvia) | < 1000 hPa |

## Despliegue en FastMCP Cloud

1. Subir este repositorio a GitHub
2. Conectar en [gofastmcp.com](https://gofastmcp.com) con tu cuenta de GitHub
3. Configurar las variables de entorno (`SUPABASE_URL`, `SUPABASE_KEY`, `DEVICE_ID`)
4. FastMCP Cloud genera una URL pública tipo `https://tu-proyecto.fastmcp.app/mcp`

## Conexión desde Claude Desktop

```json
{
  "mcpServers": {
    "estacion-meteorologica": {
      "url": "https://tu-proyecto.fastmcp.app/mcp"
    }
  }
}
```

---

**Última actualización:** Junio 2026