Astro MCP
Un servidor modular que proporciona acceso unificado a múltiples conjuntos de datos astronómicos, incluyendo servicios de astroquery y fuentes de datos de DESI.
Documentación
Astro MCP - Acceso Agéntico a Datos Astronómicos
Un servidor modular de Protocolo de Contexto de Modelos (MCP) que proporciona acceso unificado a múltiples conjuntos de datos astronómicos mediante una arquitectura limpia y extensible.
Visión
Este servidor MCP tiene como objetivo transformar la astronomía de grandes datos de un problema de ingeniería de software a una conversación en lenguaje natural. En lugar de pasar meses aprendiendo las APIs de astroquery, los investigadores simplemente piden lo que necesitan y obtienen productos de datos limpios y procesados listos para análisis.
Un experto resuelve la complejidad una vez; miles de científicos se benefician para siempre. Un estudiante con poca experiencia en programación ahora puede realizar el mismo análisis multi-encuesta que un astrónomo experto usando únicamente lenguaje natural y un asistente de IA.
Esto no se trata solo de astronomía—es una plantilla para democratizar toda la ciencia. Cada campo tiene investigadores brillantes que pasan el 80% de su tiempo en la manipulación de datos en lugar del descubrimiento. Al eliminar ese cuello de botella, aceleramos el ritmo del progreso científico en sí mismo.
El resultado: científicos de IA que pueden acceder y cruzar datos de docenas de encuestas astronómicas sin problemas, permitiendo descubrimientos que habrían requerido meses de preparación hace solo unos años.
Configuración Rápida para Cursor y Claude Desktop
1. Clonar y Configurar el Entorno
# Clone the repository
git clone https://github.com/SandyYuan/astro_mcp.git
cd astro_mcp
# Create a dedicated conda environment with Python 3.11+
conda create -n mcp python=3.11
conda activate mcp
# Install dependencies
pip install -r requirements.txt
# Install astronomical libraries for full functionality
pip install sparclclient datalab astropy astroquery
2. Probar el Servidor
# Test basic functionality
python test_server.py
# Test with a simple query (optional)
python -c "
import asyncio
from server import astro_server
async def test():
result = astro_server.get_global_statistics()
print('✅ Server working:', result['total_files'], 'files in registry')
services = astro_server.list_astroquery_services()
print(f'✅ Astroquery: {len(services)} services discovered')
asyncio.run(test())
"
3. Configurar para Cursor
Agrega esta configuración a los ajustes de MCP de tu Cursor:
{
"mcpServers": {
"astro-mcp": {
"command": "/path/to/conda/envs/mcp/bin/python",
"args": ["/path/to/astro_mcp/server.py"],
"cwd": "/path/to/astro_mcp",
"env": {}
}
}
}
Para encontrar tu ruta de Python de conda:
conda activate mcp
which python
# Copy this path for the "command" field above
4. Configurar para Claude Desktop
Edita tu archivo de configuración MCP de Claude Desktop:
macOS: ~/Library/Application Support/Claude/claude_desktop_config.json
Windows: %APPDATA%\Claude\claude_desktop_config.json
{
"mcpServers": {
"astro-mcp": {
"command": "/path/to/conda/envs/mcp/bin/python",
"args": ["/path/to/astro_mcp/server.py"],
"cwd": "/path/to/astro_mcp",
"env": {}
}
}
}
5. Reiniciar y Probar
- Reinicia Cursor/Claude Desktop para cargar el nuevo servidor MCP
- Prueba con una consulta como:
- "Busca galaxias cerca de RA=10.68, Dec=41.27"
- "Obtén las coordenadas de Betelgeuse desde SIMBAD"
- "Encuentra 10 galaxias BOSS alrededor de z=0.5 y guárdalas como FITS"
- "Lista los servicios de astroquery disponibles"
6. Solución de Problemas
El servidor no inicia:
# Check Python environment
conda activate mcp
python --version # Should be 3.11+
# Test server manually
python server.py
# Should start without errors
Problemas de conexión MCP:
- Verifica que la ruta de Python en tu configuración apunte al entorno de conda
- Asegúrate de que el directorio de trabajo (
cwd) apunte a la carpeta astro_mcp - Comprueba que todas las dependencias estén instaladas en el entorno correcto
Datos astronómicos faltantes:
# Install optional dependencies for full functionality
conda activate mcp
pip install sparclclient datalab astropy astroquery h5py
Ejemplos de Uso con Cursor/Claude Desktop
Una vez configurado, puedes hacer preguntas en lenguaje natural sobre datos astronómicos:
Búsquedas Básicas
- "Encuentra galaxias cerca de RA=150.5, Dec=2.2 dentro de 0.1 grados"
- "Busca cuásares con corrimiento al rojo entre 2 y 3"
- "Obtén las coordenadas exactas de Betelgeuse desde SIMBAD"
- "Encuentra 10 galaxias BOSS alrededor del corrimiento al rojo 0.5"
Acceso Multi-Encuesta
- "Consulta VizieR para catálogos estelares en la región de Orión"
- "Busca galaxias en SDSS y guárdalas en formato FITS"
- "Obtén información de objetos de múltiples bases de datos astronómicas"
- "Lista todos los servicios de astroquery disponibles para estudios de galaxias"
Análisis de Datos Espectrales
- "Obtén el espectro del objeto DESI con ID 1270d3c4-9d36-11ee-94ad-525400ad1336"
- "Muéstrame información espectral detallada del cuásar más brillante que puedas encontrar"
- "Encuentra un espectro de galaxia y analiza su corrimiento al rojo"
Gestión de Archivos y Conversión
- "Lista todos los archivos de datos astronómicos guardados"
- "Convierte mi catálogo de galaxias a formato FITS"
- "Vista previa de la estructura de los últimos resultados de búsqueda"
- "Muéstrame estadísticas de almacenamiento de los datos descargados"
Consultas Avanzadas
- "Encuentra galaxias de alto corrimiento al rojo (z > 1.5) y guarda sus espectros"
- "Busca objetos en el campo COSMOS y analiza sus tipos"
- "Cruza datos de DESI y SDSS para la misma región del cielo"
El servidor automáticamente:
- Ejecutará consultas apropiadas a la base de datos en múltiples encuestas
- Guardará resultados con nombres de archivo descriptivos y metadatos
- Manejará conversiones de coordenadas y cálculos astronómicos
- Convertirá datos a formatos estándar (CSV, FITS) según sea necesario
Arquitectura
astro_mcp/
├── server.py # Main MCP server entry point
├── data_sources/ # Modular data source implementations
│ ├── __init__.py
│ ├── base.py # Base class for all data sources
│ ├── desi.py # DESI survey data access
│ ├── astroquery_universal.py # Universal astroquery wrapper
│ └── astroquery_metadata.py # Service metadata and capabilities
├── data_io/ # File handling and conversion
│ ├── __init__.py
│ ├── preview.py # Data preview and structure analysis
│ └── fits_converter.py # FITS format conversion
├── tests/ # Test suite
├── examples/ # Usage examples
└── requirements.txt # Project dependencies
Características
🔭 Acceso Universal a Datos Astronómicos
- DESI: Instrumento Espectroscópico de Energía Oscura vía SPARCL y Data Lab
- Astroquery: Acceso automático a más de 40 servicios astronómicos (SIMBAD, VizieR, SDSS, Gaia, etc.)
- Auto-descubrimiento: Detecta y configura automáticamente los servicios de astroquery disponibles
- Interfaz unificada: Misma API para todas las fuentes de datos
📁 Gestión Inteligente de Archivos
- Guardado automático de datos con nombres de archivo descriptivos
- Registro y organización de archivos entre fuentes
- Seguimiento integral de metadatos con procedencia
- Vista previa inteligente de archivos con ejemplos de carga
- Conversión a formato FITS para compatibilidad astronómica
🔍 Capacidades de Búsqueda Potentes
- Búsquedas basadas en coordenadas (punto, cono, caja) en todas las encuestas
- Filtrado por tipo de objeto y corrimiento al rojo
- Consultas SQL con indexación espacial (Q3C)
- Interpretación de consultas en lenguaje natural
- Correlación de datos entre encuestas
📊 Herramientas de Análisis y Conversión de Datos
- Recuperación y análisis de datos espectrales
- Conversión automática a FITS para catálogos, espectros e imágenes
- Inspección y vista previa de estructura de archivos
- Estadísticas y gestión de almacenamiento
- Arquitectura de herramientas extensible para análisis personalizados
🤖 Interfaz Optimizada para IA
- Preprocesamiento y validación de parámetros
- Manejo inteligente de errores con sugerencias útiles
- Detección y conversión automática de formatos
- Metadatos consistentes en todas las fuentes de datos
Instalación
Inicio Rápido: Para integración con Cursor y Claude Desktop, consulta la sección Configuración Rápida arriba.
Instalación Manual
# Clone the repository
git clone https://github.com/SandyYuan/astro_mcp.git
cd astro_mcp
# Create and activate environment
conda create -n mcp python=3.11
conda activate mcp
# Install core dependencies
pip install -r requirements.txt
# Install astronomical libraries
pip install sparclclient datalab astropy astroquery
# Optional: Install development dependencies
pip install pytest coverage
Verificar Instalación
# Test the server components
python test_server.py
# Check available astroquery services
python -c "
import asyncio
from server import astro_server
async def show_services():
services = astro_server.list_astroquery_services()
print(f'✅ Discovered {len(services)} astroquery services')
for service in services[:5]: # Show first 5
print(f' - {service["full_name"]} ({service["service"]})')
asyncio.run(show_services())
"
Inicio Rápido
1. Iniciar el Servidor MCP
python server.py
2. Herramientas Disponibles
El servidor proporciona estas herramientas principales:
Acceso a Datos:
search_objects- Encuentra objetos astronómicos (DESI)astroquery_query- Consultas universales en más de 40 servicios astronómicosget_spectrum_by_id- Recupera datos espectrales detallados (DESI)
Descubrimiento de Servicios:
list_astroquery_services- Muestra todas las bases de datos astronómicas disponiblesget_astroquery_service_details- Información detallada de serviciossearch_astroquery_services- Encuentra servicios por criterios
Gestión de Archivos:
preview_data- Inspecciona archivos guardados con análisis de estructuralist_files- Gestiona datos guardados de todas las fuentesfile_statistics- Información de uso de almacenamiento y organizaciónconvert_to_fits- Convierte datos a formato FITS
3. Ejemplo de Uso
# Get object coordinates from SIMBAD
astroquery_query(
service_name="simbad",
object_name="Betelgeuse"
)
# Search SDSS for galaxies with SQL
astroquery_query(
service_name="sdss",
query_type="query_sql",
sql="SELECT TOP 10 ra, dec, z FROM SpecObj WHERE class='GALAXY' AND z BETWEEN 0.1 AND 0.3"
)
# Search VizieR catalogs
astroquery_query(
service_name="vizier",
ra=10.68,
dec=41.27,
radius=0.1
)
# Convert results to FITS
convert_to_fits(
identifier="search_results.csv",
data_type="catalog"
)
Fuentes de Datos
DESI (Instrumento Espectroscópico de Energía Oscura)
Estado: ✅ Totalmente Implementado
- Acceso SPARCL: Recuperación completa de datos espectrales
- SQL de Data Lab: Consultas rápidas de catálogo (tabla sparcl.main)
- Cobertura: DESI EDR (~1.8M) y DR1 (~18M+ espectros)
- Longitud de onda: 360-980 nm, Resolución: R ~ 2000-5500
Acceso Universal Astroquery
Estado: ✅ Totalmente Implementado
Principales Servicios Disponibles:
- SIMBAD: Identificación de objetos y datos básicos
- VizieR: Catálogos astronómicos y encuestas
- SDSS: Datos y espectros del Sloan Digital Sky Survey
- Gaia: Datos astrométricos y fotométricos
- MAST: Archivos de Hubble, JWST y otros telescopios espaciales
- IRSA: Archivos infrarrojos y submilimétricos
- ESASky: Datos astronómicos multi-misión
- Y más de 30 servicios adicionales...
Capacidades:
- Descubrimiento y configuración automática de servicios
- Detección inteligente de tipos de consulta
- Preprocesamiento y validación de parámetros
- Manejo unificado de errores y generación de ayuda
Dependencias Requeridas:
pip install astroquery astropy
Extendiendo la Arquitectura
Agregar una Nueva Fuente de Datos
- Crea la clase de fuente de datos:
# data_sources/my_survey.py
from .base import BaseDataSource
class MySurveyDataSource(BaseDataSource):
def __init__(self, base_dir=None):
super().__init__(base_dir=base_dir, source_name="my_survey")
# Initialize survey-specific clients
def search_objects(self, **kwargs):
# Implement survey-specific search
pass
- Actualiza el servidor principal:
# server.py
from data_sources import MySurveyDataSource
class AstroMCPServer:
def __init__(self, base_dir=None):
# ... existing code ...
self.my_survey = MySurveyDataSource(base_dir=base_dir)
Agregar Nuevos Servicios de Astroquery
La integración de astroquery descubre automáticamente nuevos servicios. Para agregar metadatos personalizados:
# data_sources/astroquery_metadata.py
ASTROQUERY_SERVICE_INFO = {
"my_service": {
"full_name": "My Custom Service",
"description": "Custom astronomical database",
"data_types": ["catalogs", "images"],
"wavelength_coverage": "optical",
"object_types": ["stars", "galaxies"],
"requires_auth": False,
"example_queries": [
{
"description": "Search by object name",
"query": "astroquery_query(service_name='my_service', object_name='M31')"
}
]
}
}
Organización de Archivos
Los archivos se organizan automáticamente por fuente de datos con metadatos completos:
~/astro_mcp_data/
├── file_registry.json # Global file registry with metadata
├── desi/ # DESI-specific files
│ ├── desi_search_*.json # Search results
│ ├── spectrum_*.json # Spectral data
│ └── *.fits # FITS conversions
└── astroquery/ # Astroquery results
├── astroquery_simbad_*.csv # SIMBAD queries
├── astroquery_sdss_*.csv # SDSS results
├── astroquery_vizier_*.csv # VizieR catalogs
└── *.fits # FITS conversions
Desarrollo
Beneficios de la Estructura del Proyecto
- Modularidad: Fácil agregar nuevas encuestas y herramientas de análisis
- Acceso Universal: Interfaz única para más de 40 bases de datos astronómicas
- Separación de Preocupaciones: Acceso a datos, E/S y análisis están separados
- Capacidad de Pruebas: Cada módulo puede probarse de forma independiente
- Escalabilidad: Arquitectura limpia que soporta crecimiento ilimitado
Pruebas
# Run all tests
pytest
# Test specific modules
pytest tests/test_desi.py
pytest tests/test_astroquery.py
# Test with coverage
pytest --cov=data_sources tests/
Contribuciones
- Haz un fork del repositorio
- Crea una rama de características (
git checkout -b feature/new-capability) - Agrega tu fuente de datos o herramienta siguiendo los patrones existentes
- Escribe pruebas para la nueva funcionalidad
- Actualiza la documentación y los ejemplos
- Envía una solicitud de extracción (pull request)
Dependencias
Requisitos Principales
mcp>=1.0.0- Marco de Protocolo de Contexto de Modelospandas>=2.0.0- Manipulación de datosnumpy>=1.24.0- Computación numérica
Bibliotecas Astronómicas
astroquery>=0.4.6- Acceso universal a bases de datos astronómicasastropy>=5.0.0- Archivos FITS y cálculos astronómicossparclclient>=1.0.0- Acceso a DESI SPARCLdatalab>=2.20.0- Consultas a NOAO Data Lab
Características Opcionales
h5py>=3.8.0- Soporte para archivos HDF5pytest>=7.0.0- Marco de pruebas
Licencia
[Especifica tu licencia aquí]
Citación
Si usas este software en tu investigación, por favor cita:
@software{astro_mcp,
title={Astro MCP: Universal Astronomical Data Access for AI Agents},
author={[Your Name]},
year={2024},
url={[Repository URL]}
}
Soporte
- Problemas: Problemas de GitHub
- Documentación: Documentación Completa
- Discusiones: Discusiones de GitHub
Hoja de Ruta
Actual (v0.1.0)
- ✅ Acceso a datos DESI vía SPARCL y Data Lab
- ✅ Integración universal de astroquery (más de 40 servicios)
- ✅ Conversión automática a FITS para todos los tipos de datos
- ✅ Gestión inteligente de archivos con metadatos completos
- ✅ Interfaz de consulta en lenguaje natural
Planificado (v0.2.0)
- 🚧 Coincidencia y correlación de objetos entre encuestas
- 🚧 Cálculos astronómicos avanzados (distancias, magnitudes)
- 🚧 Análisis de series temporales para objetos variables
- 🚧 Integración de herramientas de visualización
Futuro (v0.3.0+)
- 🔮 Integración de aprendizaje automático para clasificación de objetos
- 🔮 Transmisión de datos en tiempo real desde encuestas
- 🔮 Creación de pipelines de análisis personalizados
- 🔮 Herramientas de correlación de datos multi-longitud de onda