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:

  1. Navega a tu carpeta AppData de Claude Desktop:

    • Windows: Abre el Explorador de archivos y ve a %APPDATA%\Claude\
    • macOS: ~/Library/Application Support/Claude/
  2. Agrega el 'claude_desktop_config.json' o añade lo siguiente a tu archivo 'config.json'

  3. 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

  1. Sal de Claude Desktop por completo (clic derecho en la bandeja del sistema → Salir)
  2. Revisa el Administrador de tareas - Si Claude aún se está ejecutando en segundo plano, finaliza la tarea
  3. Vuelve a abrir Claude Desktop
  4. 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.py exista 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:

  1. Usar clientes compatibles con MCP: Algunos proyectos de código abierto como MCP CLI soportan conectar servidores MCP a LLMs locales.

  2. 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)
  1. 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)

HerramientaDescripción
search_alma_by_targetBúsqueda por nombre de objeto astronómico (resolución SIMBAD)
search_alma_by_positionBúsqueda de cono por coordenadas RA/Dec
search_alma_by_proposalBúsqueda por nombre de IP o ID de propuesta
search_alma_by_frequencyBúsqueda por rango de frecuencia (GHz)
search_alma_by_resolutionBúsqueda por resolución angular (segundos de arco)
check_alma_line_coverageComprueba la cobertura de líneas espectrales con corrimiento al rojo
get_alma_infoReferencia de bandas, líneas y capacidades de ALMA
run_alma_tap_queryConsultas SQL/ADQL personalizadas contra TAP

Herramientas de consulta extendidas (8 nuevas - de los cuadernos de ALMA)

HerramientaDescripción
search_alma_by_source_nameBúsqueda por nombre de objetivo especificado por IP (exacto o parcial)
search_alma_by_bibliographyBúsqueda por bibcode, revista, autor o año de publicación
search_alma_by_member_ousBúsqueda por identificador de conjunto de datos Member OUS
search_alma_by_data_typeBúsqueda de cubos (espectrales) vs imágenes (continuo)
search_alma_by_science_keywordBúsqueda por palabras clave científicas de ALMA
search_alma_by_abstractBúsqueda de texto completo en resúmenes de propuestas/publicaciones
search_alma_by_sensitivityBúsqueda por sensibilidad de continuo o línea (mJy/haz)
query_alma_multiple_sourcesConsulta 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:

  1. Copia toda la carpeta ALMA_MCP/ a tu ubicación deseada
  2. Actualiza la ruta en config.json
  3. Reinicia Claude Desktop

Contribuciones

  1. Haz un fork del repositorio
  2. Crea una rama de características (git checkout -b feature/vla-support)
  3. Agrega tu fuente de datos siguiendo los patrones existentes
  4. Escribe pruebas para la nueva funcionalidad
  5. 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