ALMA_MCP
Un servidor del Protocolo de Contexto de Modelo (MCP) que proporciona acceso completo al archivo de ALMA (Atacama Large Millimeter/submillimeter Array) a través de una arquitectura limpia y extensible.
Documentación
Servidor MCP de ALMA - Acceso a Datos Astronómicos mediante Lenguaje Natural
Un servidor de Model Context Protocol (MCP) que proporciona acceso integral al archivo de ALMA (Atacama Large Millimeter/submillimeter Array) mediante una arquitectura limpia y extensible.
Visión
Este servidor MCP transforma las consultas al archivo de ALMA de un problema de ingeniería de software a una conversación en lenguaje natural. En lugar de aprender la sintaxis de TAP/ADQL y las APIs del archivo, los investigadores simplemente piden lo que necesitan y obtienen resultados limpios y listos para analizar.
El resultado: asistentes de IA que pueden buscar datos de ALMA sin problemas por objetivo, posición, frecuencia, resolución o cualquier criterio personalizado.
Configuración rápida para Claude Desktop
1. Clonar/Copiar y configurar el entorno
IMPORTANTE: ¡Cambia las rutas a continuación según tu ubicación de instalación!
# Clone the repository (or copy the ALMA_MCP folder)
git clone https://github.com/adamzacharia/ALMA_MCP.git
cd ALMA_MCP
# Create a dedicated conda environment with Python 3.11+
conda create -n alma_mcp python=3.11
conda activate alma_mcp
# Install dependencies
pip install -r requirements.txt
# Install astronomical libraries for full functionality
pip install fastmcp alminer pyvo astroquery astropy pandas
Alternativa: Usar venv en lugar de conda:
# Navigate to the ALMA_MCP folder
cd path/to/ALMA_MCP
# Create a dedicated venv environment
python -m venv venv
venv\Scripts\activate # Windows
# source venv/bin/activate # Mac/Linux
# Install dependencies
pip install -r requirements.txt
2. Probar el servidor
# Test basic functionality
python test_server.py
# Quick test (optional)
python -c "
from server import get_alma_info, ALMINER_AVAILABLE, PYVO_AVAILABLE
print(' Server loads successfully')
print(f' alminer available: {ALMINER_AVAILABLE}')
print(f' pyvo available: {PYVO_AVAILABLE}')
"
3. Configurar Claude Desktop
Busca y edita el archivo de configuración MCP de Claude Desktop:
-
Navega a tu carpeta AppData de Claude Desktop:
- Windows: Abre el Explorador de archivos y ve a
%APPDATA%\Claude\ - macOS:
~/Library/Application Support/Claude/
- Windows: Abre el Explorador de archivos y ve a
-
Agrega el 'claude_desktop_config.json' o añade lo siguiente a tu archivo 'config.json'
-
Agrega la siguiente configuración al archivo:
IMPORTANTE: ¡Cambia la ruta a continuación según tu ubicación de instalación!
{
"mcpServers": {
"alma": {
"command": "python",
"args": ["c:/Users/Asus/Desktop/Quasar-main/ALMA_MCP/server.py"]
}
}
}
Nota: Usa barras diagonales
/en las rutas incluso en Windows.
Usando un entorno personalizado (Conda o venv)
Si instalaste las dependencias en un entorno conda o venv, DEBES especificar la ruta completa al ejecutable de Python de ese entorno. ¡De lo contrario, el sistema no encontrará los paquetes instalados!
Para entorno Conda:
{
"mcpServers": {
"alma": {
"command": "C:/Users/YourName/anaconda3/envs/alma_mcp/python.exe",
"args": ["c:/path/to/ALMA_MCP/server.py"],
"cwd": "c:/path/to/ALMA_MCP",
"env": {}
}
}
}
Para encontrar la ruta de Python de tu entorno conda, ejecuta:
conda activate alma_mcp
where python # Windows
which python # Mac/Linux
Para venv:
{
"mcpServers": {
"alma": {
"command": "c:/path/to/ALMA_MCP/venv/Scripts/python.exe",
"args": ["c:/path/to/ALMA_MCP/server.py"],
"cwd": "c:/path/to/ALMA_MCP",
"env": {}
}
}
}
4. Reiniciar y probar
- Sal de Claude Desktop por completo (clic derecho en la bandeja del sistema → Salir)
- Revisa el Administrador de tareas - Si Claude aún se está ejecutando en segundo plano, finaliza la tarea
- Vuelve a abrir Claude Desktop
- Prueba con una consulta como:
- "Busca en ALMA observaciones de M87"
- "Encuentra datos de ALMA de alta resolución con resolución inferior a 0.5 segundos de arco"
- "¿Cuáles son las bandas de frecuencia de ALMA?"
5. Solución de problemas
El servidor no se inicia:
# Check Python environment
python --version # Should be 3.10+
# 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 sea correcta
- Asegúrate de que todas las dependencias estén instaladas
- Comprueba que
server.pyexista en la ruta especificada
Dependencias faltantes:
pip install fastmcp alminer pyvo astroquery astropy pandas
Ejemplos de uso
Una vez configurado, puedes hacer preguntas en lenguaje natural sobre datos de ALMA:
Búsquedas básicas
- "Encuentra observaciones de Orión KL"
- "Busca en ALMA M87 dentro de 1 minuto de arco"
- "¿Qué datos de ALMA existen para NGC 1234?"
Búsquedas basadas en posición
- "Busca en ALMA en RA=83.6, Dec=-5.4"
- "Encuentra observaciones cerca del Centro Galáctico"
- "Búsqueda de cono en coordenadas 150.5, 2.2 con radio de 5 minutos de arco"
Búsquedas de frecuencia
- "Encuentra datos de ALMA entre 230 y 250 GHz"
- "Busca observaciones de Banda 6"
- "¿Qué observaciones cubren la línea CO(2-1) a 230.5 GHz?"
Búsquedas de resolución
- "Encuentra datos de alta resolución con resolución inferior a 0.1 segundos de arco"
- "Busca observaciones de ALMA mejores que 0.5 segundos de arco de resolución"
Búsquedas de propuesta/IP
- "Encuentra propuestas de ALMA de Adele Plunket"
- "Obtén datos para la propuesta 2023.1.00001.S"
- "Busca propuestas de evolución de galaxias"
Cobertura de líneas espectrales
- "¿Alguna observación de M87 cubre la línea CO(2-1)?"
- "Comprueba si los datos de Orión cubren HCN(1-0) a 88.6 GHz"
- "Encuentra observaciones que cubran 115 GHz para una fuente en z=0.5"
Consultas SQL personalizadas
- "Ejecuta este SQL: SELECT target_name, band_list FROM ivoa.obscore WHERE target_name LIKE '%M87%'"
- "Consulta ALMA para todas las observaciones de Banda 7 de 2023"
Información de ALMA
- "¿Cuáles son las bandas de frecuencia de ALMA?"
- "Enumera líneas espectrales comunes en el rango de mm"
- "¿Qué categorías científicas soporta ALMA?"
Búsquedas bibliográficas y de publicaciones
- "Encuentra observaciones de ALMA publicadas en Nature"
- "Busca datos utilizados en artículos de Smith publicados en 2023"
- "¿Qué datos de ALMA tienen el bibcode 2017ApJ...834..140R?"
Búsquedas de palabras clave científicas
- "Encuentra todas las observaciones de ALMA etiquetadas con 'Quásares'"
- "Busca observaciones de Galaxias Sub-mm (SMG)"
- "¿Qué observaciones están categorizadas bajo 'Núcleos Galácticos Activos'?"
Búsquedas por tipo de datos
- "Encuentra todos los cubos espectrales de M87"
- "Busca imágenes de continuo etiquetadas con Exoplanetas"
- "Muéstrame observaciones de líneas espectrales en Banda 6"
Búsquedas de resúmenes
- "Encuentra propuestas que mencionen agujeros negros en su resumen"
- "Busca observaciones de propuestas sobre formación estelar"
- "¿Qué propuestas mencionan el fondo cósmico de microondas?"
Búsquedas de sensibilidad
- "Encuentra observaciones con sensibilidad de continuo mejor que 0.1 mJy/haz"
- "Busca observaciones profundas de ALMA con sensibilidad inferior a 0.05 mJy"
Consultas por lotes de múltiples fuentes
- "Comprueba si ALMA ha observado M31, M51, M82 y NGC 1068"
- "Consulta ALMA para estas fuentes: Cen A, M83 y NGC 1234"
Uso con otros LLMs y frameworks
Integración con LangChain
Puedes usar este servidor MCP con LangChain usando el paquete langchain-mcp-adapters:
pip install langchain-mcp-adapters
from langchain_mcp_adapters.client import MCPClient
from langchain_openai import ChatOpenAI
# Connect to the MCP server
client = MCPClient(
command="python",
args=["path/to/ALMA_MCP/server.py"]
)
# Get tools from MCP server
tools = client.get_tools()
# Use with any LangChain-compatible LLM
llm = ChatOpenAI(model="gpt-4")
llm_with_tools = llm.bind_tools(tools)
LLMs de código abierto
Para LLMs de código abierto (Ollama, LMStudio, etc.), puedes:
-
Usar clientes compatibles con MCP: Algunos proyectos de código abierto como MCP CLI soportan conectar servidores MCP a LLMs locales.
-
Llamada directa de funciones: Importa las funciones del servidor directamente en tu código Python:
from server import search_alma_by_target, search_alma_by_position, get_alma_info
# Use tools directly
result = search_alma_by_target("M87", search_radius_arcmin=5.0)
print(result)
# Get ALMA reference info
info = get_alma_info()
print(info)
- Construir una API REST: Envuelve las herramientas MCP en un servidor FastAPI/Flask para cualquier LLM que soporte llamadas de funciones mediante HTTP.
Arquitectura
ALMA_MCP/
├── server.py # Main MCP server with 16 tools
├── requirements.txt # Python dependencies
├── test_server.py # Test suite
└── README.md # This file
Características
Acceso al archivo de ALMA
- Búsqueda por objetivo: Resuelve nombres de objetos mediante SIMBAD y busca en ALMA
- Búsqueda por posición: Búsqueda de cono por coordenadas RA/Dec
- Búsqueda de propuestas: Encuentra por nombre de IP, ID de propuesta o categoría científica
- Búsqueda de frecuencia: Consulta por rango de frecuencia (GHz)
- Búsqueda de resolución: Filtra por resolución angular (segundos de arco)
- SQL personalizado: Ejecuta cualquier consulta ADQL contra ALMA TAP
Herramientas de consulta principales (8 originales)
| Herramienta | Descripción |
|---|---|
search_alma_by_target | Búsqueda por nombre de objeto astronómico (resolución SIMBAD) |
search_alma_by_position | Búsqueda de cono por coordenadas RA/Dec |
search_alma_by_proposal | Búsqueda por nombre de IP o ID de propuesta |
search_alma_by_frequency | Búsqueda por rango de frecuencia (GHz) |
search_alma_by_resolution | Búsqueda por resolución angular (segundos de arco) |
check_alma_line_coverage | Comprueba la cobertura de líneas espectrales con corrimiento al rojo |
get_alma_info | Referencia de bandas, líneas y capacidades de ALMA |
run_alma_tap_query | Consultas SQL/ADQL personalizadas contra TAP |
Herramientas de consulta extendidas (8 nuevas - de los cuadernos de ALMA)
| Herramienta | Descripción |
|---|---|
search_alma_by_source_name | Búsqueda por nombre de objetivo especificado por IP (exacto o parcial) |
search_alma_by_bibliography | Búsqueda por bibcode, revista, autor o año de publicación |
search_alma_by_member_ous | Búsqueda por identificador de conjunto de datos Member OUS |
search_alma_by_data_type | Búsqueda de cubos (espectrales) vs imágenes (continuo) |
search_alma_by_science_keyword | Búsqueda por palabras clave científicas de ALMA |
search_alma_by_abstract | Búsqueda de texto completo en resúmenes de propuestas/publicaciones |
search_alma_by_sensitivity | Búsqueda por sensibilidad de continuo o línea (mJy/haz) |
query_alma_multiple_sources | Consulta por lotes para múltiples fuentes a la vez |
Soporte multi-backend
- alminer: Consultas avanzadas de ALMA con herramientas de líneas espectrales
- pyvo: Acceso directo TAP/ADQL al archivo de ALMA
- astroquery: Resolución de nombres SIMBAD
Dependencias
Requisitos principales
fastmcp>=2.0.0 # MCP framework
pandas>=1.5.0 # Data manipulation
Bibliotecas astronómicas
alminer>=0.2.0 # Advanced ALMA queries
pyvo>=1.4.0 # TAP/ADQL access
astroquery>=0.4.0 # SIMBAD, VizieR, etc.
astropy>=5.0.0 # Astronomical utilities
Hoja de ruta
Actual (v1.0) ✅
- Búsqueda de nombre de objetivo ALMA con resolución SIMBAD
- Búsqueda de cono basada en posición
- Búsqueda por rango de frecuencia
- Filtrado por resolución angular
- Búsqueda de propuesta/IP
- Comprobación de cobertura de líneas espectrales
- Consultas SQL/TAP personalizadas
- Información de ALMA y referencia de bandas
- Búsqueda de nombre de fuente (nombres especificados por IP, exacto/parcial)
- Búsqueda bibliográfica/publicación (bibcode, revista, autor, año)
- Búsqueda por ID de Member OUS (identificador de conjunto de datos)
- Filtrado por tipo de datos (cubos vs imágenes)
- Búsqueda de palabras clave científicas con filtros
- Búsqueda de texto completo en resúmenes (propuesta y publicación)
- Búsqueda basada en sensibilidad (continuo o línea)
- Consultas por lotes de múltiples fuentes
Planificado (v2.0)
- Integración del archivo VLA
- Integración del archivo GBT
- Caché de resultados para consultas más rápidas
- Soporte de descarga de archivos FITS
- Coincidencia de objetos entre archivos (ALMA + VLA + óptico)
- Herramientas de visualización (gráficos de cielo, espectros)
- Flujo de trabajo de descarga de datos
Traslado a ubicación independiente
Esta carpeta está diseñada para ser portátil. Para moverla:
- Copia toda la carpeta
ALMA_MCP/a tu ubicación deseada - Actualiza la ruta en
config.json - Reinicia Claude Desktop
Contribuciones
- Haz un fork del repositorio
- Crea una rama de características (
git checkout -b feature/vla-support) - Agrega tu fuente de datos siguiendo los patrones existentes
- Escribe pruebas para la nueva funcionalidad
- Envía una solicitud de extracción
Autores
- Adam Zacharia Anil - Desarrollador principal
- Adele Plunkett - Asesora científica
Agradecimientos
Agradecimientos especiales a:
- Adele Plunkett - Por su valiosa orientación y consejos a lo largo de este proyecto
- NRAO (Observatorio Nacional de Radioastronomía) - Por apoyar la investigación astronómica y el acceso a datos
- Brian Mason - Por su experiencia técnica y apoyo
- Cosmic AI / Stella Offner - Por inspirar la aplicación de IA a la investigación astronómica
Licencia
Licencia MIT - Consulta LICENSE para más detalles.
Cita
Si usas este software en tu investigación, por favor cita:
@software{alma_mcp,
title={ALMA MCP Server: Astronomical Data Access for AI Agents},
author={Adam Zacharia Anil and Adele Plunkett},
year={2025},
url={https://github.com/adamzacharia/ALMA_MCP}
}
Soporte
- Problemas: GitHub Issues
- Documentación: Este README y comentarios de código en línea
- Discusiones: GitHub Discussions