Skip to main content
Glama
m0siq
by m0siq
README.md
# 🚀 NASA Space Explorer — Cliente MCP

Asistente de astronomía en tiempo real con datos de la NASA. Inspirado en Carl Sagan: **preciso y apasionante**.

---

## Arquitectura

```
nasa_client.py              nasa_server.py
──────────────              ──────────────
  Menú + display  ──MCP──►  5 herramientas NASA
  Lenguaje natural ◄──────  APIs: APOD · NeoWs · Mars · EONET · DONKI
```

El cliente lanza `nasa_server.py` como subproceso y se comunican por `stdio` usando el protocolo MCP. **No necesitas Docker ni API key** para empezar.

---

## Requisitos previos

| Herramienta | Versión | Comprobación |
|-------------|---------|--------------|
| Python | 3.10+ | `python --version` |
| Conexión a internet | — | Para llamar a las APIs de la NASA |

---

## 1 — Instalación

```powershell
# Desde la carpeta del proyecto
cd C:\Users\Alumno_AI\Documents\mcp-espacial

# Crear entorno virtual
python -m venv .venv
.venv\Scripts\Activate.ps1

# Instalar dependencias
pip install "mcp[cli]" httpx
```

---

## 2 — Ejecutar

```powershell
python nasa_client.py
```

Verás:

```
╭─────────────────────────────────────╮
│  🚀  NASA Space Explorer            │
│  Sistema MCP de datos espaciales    │
╰─────────────────────────────────────╯

Puedes escribir preguntas en lenguaje natural o usar el menú:
  1) Imagen astronómica del día (APOD)
  2) Asteroides cercanos a la Tierra esta semana
  3) Fotos del rover en Marte
  4) Eventos naturales activos en la Tierra
  5) Clima espacial (llamaradas, CMEs, tormentas)
  0) Salir

🚀 NASA Explorer >
```

---

## 3 — Herramientas MCP disponibles

| # | Tool MCP | Datos | API |
|---|----------|-------|-----|
| 1 | `get_astronomy_picture_of_the_day` | Imagen + explicación científica | NASA APOD |
| 2 | `search_near_earth_objects` | Asteroides, distancia, velocidad, peligrosidad | NASA NeoWs |
| 3 | `get_mars_rover_photos` | Fotos con URL, cámara, fecha marciana | NASA Mars Rover Photos |
| 4 | `track_earth_natural_events` | Incendios, volcanes, tormentas activas | NASA EONET |
| 5 | `get_space_weather` | Llamaradas solares, CMEs, índice Kp | NASA DONKI |

---

## 4 — Uso con lenguaje natural

El cliente detecta automáticamente la herramienta correcta:

| Lo que escribes | Herramienta que se llama |
|----------------|--------------------------|
| `¿Cuál es la imagen del día?` | `get_astronomy_picture_of_the_day` |
| `¿Hay asteroides peligrosos esta semana?` | `search_near_earth_objects` |
| `fotos de Perseverance sol 500` | `get_mars_rover_photos(rover=perseverance, sol=500)` |
| `¿Hay incendios activos?` | `track_earth_natural_events(category=wildfires)` |
| `llamaradas solares esta semana` | `get_space_weather(event_type=flares)` |
| `clima espacial` | `get_space_weather(event_type=all)` |
| `volcanes activos` | `track_earth_natural_events(category=volcanoes)` |

---

## 5 — Ejemplos de salida

### Asteroides (opción 2)
```
☄️  Objetos Cercanos a la Tierra — 2026-06-17 → 2026-06-24

Total detectados: 23 objetos
✓  Ninguno clasificado como potencialmente peligroso

┌────────────────────┬──────────────┬─────────────┬───────────────┬────────────┐
│ Nombre             │ Ø km         │ Distancia km│ Dist. lunar   │ Vel. km/h  │
├────────────────────┼──────────────┼─────────────┼───────────────┼────────────┤
│ (2024 AB1)         │ 0.014–0.031  │ 1,234,567   │ 3.21 ☽        │ 42,300     │
└────────────────────┴──────────────┴─────────────┴───────────────┴────────────┘
```

### Clima espacial (opción 5)
```
☀️  Clima Espacial — 2026-06-10 → 2026-06-17

🔥 Llamaradas solares: 3
  • 2026-06-15 08:23  Clase: M2.1  Región: 13842
  • 2026-06-16 14:05  Clase: C7.4  Región: 13845

💨 Eyecciones de masa coronal (CME): 1
  • 2026-06-15 10:00  Velocidad: 847 km/s  Tipo: O

🌩  Tormentas geomagnéticas: 0
  ✓  Sin tormentas geomagnéticas registradas.
```

---

## 6 — Configuración del `.env`

Copia el archivo de ejemplo y rellena tus credenciales:

```powershell
Copy-Item .env.example .env
```

Edita `.env`:

```env
# ── Azure OpenAI (para activar la IA conversacional) ──
AZURE_OPENAI_ENDPOINT=https://TU-RECURSO.openai.azure.com/
AZURE_OPENAI_KEY=TU_CLAVE_AQUI
AZURE_OPENAI_DEPLOYMENT=gpt-4o
AZURE_OPENAI_API_VERSION=2024-12-01-preview

# ── NASA API (opcional, DEMO_KEY funciona sin registrarse) ──
NASA_API_KEY=DEMO_KEY
```

> [!IMPORTANT]
> Sin Azure OpenAI el cliente funciona en **modo local** (muestra JSON de la API sin interpretación LLM).
> Con Azure OpenAI activado, GPT-4o interpreta los datos y responde en lenguaje natural estilo Carl Sagan.

### Instalar dependencia extra para Azure

```powershell
pip install openai python-dotenv
```

### Dónde encontrar las credenciales Azure

| Variable | Dónde encontrarla |
|----------|--------------------|
| `AZURE_OPENAI_ENDPOINT` | Azure Portal → tu recurso OpenAI → Keys and Endpoint |
| `AZURE_OPENAI_KEY` | Azure Portal → tu recurso OpenAI → Keys and Endpoint |
| `AZURE_OPENAI_DEPLOYMENT` | Azure AI Foundry → Deployments → nombre del modelo |
| `AZURE_OPENAI_API_VERSION` | Usar `2024-12-01-preview` (compatible con tool calling) |

### NASA API Key (opcional)

NASA ofrece claves gratuitas sin límites estrictos:
1. Regístrate en **https://api.nasa.gov/**
2. Pon tu clave en `.env` como `NASA_API_KEY=tu_clave`

---

## 7 — Rovers de Marte disponibles

| Rover | Estado | Sols activos aprox. | Cámaras principales |
|-------|--------|---------------------|---------------------|
| Curiosity | ✅ Activo | 1 – 4300+ | NAVCAM, MAST, FHAZ, RHAZ, CHEMCAM |
| Perseverance | ✅ Activo | 1 – 1500+ | NAVCAM_LEFT, NAVCAM_RIGHT, MCZ_LEFT, MCZ_RIGHT |
| Opportunity | ❌ Inactivo (2019) | 1 – 5111 | PANCAM, NAVCAM, FHAZ, RHAZ |
| Spirit | ❌ Inactivo (2010) | 1 – 2208 | PANCAM, NAVCAM, FHAZ, RHAZ |

> [!TIP]
> Si no hay fotos para un sol concreto, prueba con un número distinto. No todos los soles tienen fotos de todas las cámaras.

---

## 8 — Clasificación de llamaradas solares

| Clase | Intensidad | Efecto en Tierra |
|-------|-----------|-----------------|
| A, B | Mínima/Débil | Sin efecto apreciable |
| C | Moderada | Perturbaciones radio en zonas polares |
| M | Intensa | Apagones radio, auroras débiles |
| **X** | **Extrema** | **Apagones radio, tormentas geomagnéticas** |

El índice **Kp** mide la perturbación del campo magnético terrestre (0=calma, 9=extrema). Kp ≥ 5 = tormenta geomagnética; pueden verse auroras boreales en latitudes medias.

---

## 9 — Estructura del proyecto

```
mcp-espacial/
├── nasa_client.py   ← Ejecutar este
├── nasa_server.py   ← Servidor MCP (lanzado automáticamente)
└── README.md        ← Esta guía
```

---

## 10 — Referencias

- [NASA APIs](https://api.nasa.gov/)
- [APOD](https://apod.nasa.gov/apod/)
- [NeoWs — Near Earth Objects](https://api.nasa.gov/#NeoWS)
- [Mars Rover Photos](https://api.nasa.gov/#Mars-Rover-Photos)
- [NASA EONET](https://eonet.gsfc.nasa.gov/)
- [NASA DONKI — Space Weather](https://kauai.ccmc.gsfc.nasa.gov/DONKI/)
- [MCP SDK Python](https://github.com/modelcontextprotocol/python-sdk)

---

> *"Somewhere, something incredible is waiting to be known."* — Carl Sagan