返回市场
天文_mcp

天文_mcp

作者:SandyYuan2 星标更新:2025-07-09

项目介绍

Astro MCP - 星际数据访问代理

一个模块化的模型上下文协议(MCP)服务器,通过清晰且可扩展的架构提供对多个天文数据集的统一访问。

愿景

此MCP服务器旨在将大数据天文学从一个软件工程问题转变为一种自然语言对话。研究人员无需花费数月时间学习astroquery API,只需询问他们需要什么,就能获得干净、处理过的、可用于分析的数据产品。

一位专家解决了一次复杂的问题;成千上万的科学家将永远受益。现在,即使编程经验很少的学生也能使用自然语言和AI助手执行与专家天文学家相同的多调查分析。

这不仅仅是关于天文学——这是一个使所有科学民主化的模板。每个领域都有杰出的研究人员花费80%的时间在数据整理上,而不是进行发现。通过消除这一瓶颈,我们加速了科学进步的步伐。

结果:能够无缝访问并交叉匹配来自数十个天文调查数据的AI科学家,使得几年前需要几个月设置才能尝试的发现成为可能。

快速设置Cursor & Claude Desktop

1. 克隆并设置环境

# 克隆仓库
git clone https://github.com/SandyYuan/astro_mcp.git
cd astro_mcp

# 创建专用conda环境,Python 3.11+
conda create -n mcp python=3.11
conda activate mcp

# 安装依赖项
pip install -r requirements.txt

# 安装天文库以实现全部功能
pip install sparclclient datalab astropy astroquery

2. 测试服务器

# 测试基本功能
python test_server.py

# 使用简单查询测试(可选)
python -c "
import asyncio
from server import astro_server
async def test():
    result = astro_server.get_global_statistics()
    print('✅ 服务器工作正常:', result['total_files'], '注册表中的文件')
    services = astro_server.list_astroquery_services()
    print(f'✅ Astroquery: 发现 {len(services)} 服务')
asyncio.run(test())
"

3. 配置Cursor

将以下配置添加到你的Cursor MCP设置中:

{
  "mcpServers": {
    "astro-mcp": {
      "command": "/path/to/conda/envs/mcp/bin/python",
      "args": ["/path/to/astro_mcp/server.py"],
      "cwd": "/path/to/astro_mcp",
      "env": {}
    }
  }
}

要找到你的conda Python路径:

conda activate mcp
which python
# 复制此路径用于上述的 "command" 字段

4. 配置Claude Desktop

编辑你的Claude Desktop MCP配置文件:

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. 重启并测试

  1. 重启Cursor/Claude Desktop以加载新的MCP服务器
  2. 使用查询测试,例如:
    • "搜索接近RA=10.68, Dec=41.27的星系"
    • "从SIMBAD获取Betelgeuse的坐标"
    • "查找红移z=0.5附近的10个BOSS星系,并保存为FITS格式"
    • "列出可用的astroquery服务"

6. 故障排除

服务器无法启动:

# 检查Python环境
conda activate mcp
python --version  # 应该是3.11+

# 手动测试服务器
python server.py
# 应该无错误启动

MCP连接问题:

  • 验证配置中的Python路径指向conda环境
  • 确保工作目录(cwd)指向astro_mcp文件夹
  • 检查所有依赖项是否安装在正确的环境中

缺少天文数据:

# 安装全部功能所需的可选依赖项
conda activate mcp
pip install sparclclient datalab astropy astroquery h5py

使用示例与Cursor/Claude Desktop

一旦配置完成,你可以用自然语言询问天文数据:

基本搜索

  • "查找接近RA=150.5, Dec=2.2并在0.1度内的星系"
  • "搜索红移在2到3之间的类星体"
  • "从SIMBAD获取Betelgeuse的确切坐标"
  • "查找红移0.5附近的10个BOSS星系"

多调查访问

  • "查询VizieR在猎户座区域的恒星目录"
  • "搜索SDSS中的星系并保存为FITS格式"
  • "从多个天文数据库获取对象信息"
  • "列出可用于星系研究的所有astroquery服务"

谱数据分析

  • "获取DESI对象ID为1270d3c4-9d36-11ee-94ad-525400ad1336的光谱"
  • "显示我能找到的最亮类星体的详细光谱信息"
  • "查找一个星系光谱并分析其红移"

文件管理和转换

  • "列出所有保存的天文数据文件"
  • "将我的星系目录转换为FITS格式"
  • "预览最新搜索结果的结构"
  • "显示下载数据的存储统计信息"

高级查询

  • "查找高红移星系(z > 1.5)并保存它们的光谱"
  • "搜索COSMOS区域的对象并分析它们的类型"
  • "交叉匹配同一天空区域的DESI和SDSS数据"

服务器将自动:

  • 在多个调查中执行适当的数据库查询
  • 使用描述性文件名和元数据保存结果
  • 处理坐标转换和天文计算
  • 根据需要将数据转换为标准格式(CSV, FITS)

架构

astro_mcp/
├── server.py                    # 主MCP服务器入口点
├── data_sources/               # 模块化数据源实现
│   ├── __init__.py
│   ├── base.py                # 所有数据源的基础类
│   ├── desi.py                # DESI调查数据访问
│   ├── astroquery_universal.py # Universal astroquery包装器
│   └── astroquery_metadata.py  # 服务元数据和功能
├── data_io/                   # 文件处理和转换
│   ├── __init__.py
│   ├── preview.py             # 数据预览和结构分析
│   └── fits_converter.py      # FITS格式转换
├── tests/                     # 测试套件
├── examples/                  # 使用示例
└── requirements.txt           # 项目依赖项

功能

🔭 通用天文数据访问

  • DESI: 通过SPARCL和Data Lab访问暗能量光谱仪器
  • Astroquery: 自动访问40多种天文服务(SIMBAD, VizieR, SDSS, Gaia等)
  • 自动发现: 自动检测并配置可用的astroquery服务
  • 统一接口: 所有数据源的相同API

📁 智能文件管理

  • 自动保存数据并使用描述性文件名
  • 跨来源文件注册和组织
  • 全面跟踪带有来源的元数据
  • 智能文件预览和加载示例
  • 为了天文兼容性而转换为FITS格式

🔍 强大的搜索能力

  • 基于坐标的搜索(点、锥形、框)跨越所有调查
  • 对象类型和红移过滤
  • 带空间索引的SQL查询(Q3C)
  • 自然语言查询解释
  • 跨调查数据相关性

📊 数据分析与转换工具

  • 光谱数据检索和分析
  • 自动将目录、光谱和图像转换为FITS格式
  • 文件结构检查和预览
  • 统计和存储管理
  • 可扩展的工具架构用于自定义分析

🤖 AI优化界面

  • 参数预处理和验证
  • 智能错误处理并提供有用的建议
  • 自动格式检测和转换
  • 所有数据源的一致元数据

安装

快速开始: 对于Cursor & Claude Desktop集成,请参阅上面的快速设置部分。

手动安装

# 克隆仓库
git clone https://github.com/SandyYuan/astro_mcp.git
cd astro_mcp

# 创建并激活环境
conda create -n mcp python=3.11
conda activate mcp

# 安装核心依赖项
pip install -r requirements.txt

# 安装天文库
pip install sparclclient datalab astropy astroquery

# 可选: 安装开发依赖项
pip install pytest coverage

验证安装

# 测试服务器组件
python test_server.py

# 检查可用的astroquery服务
python -c "
import asyncio
from server import astro_server

async def show_services():
    services = astro_server.list_astroquery_services()
    print(f'✅ 发现 {len(services)} 个astroquery服务')
    for service in services[:5]:  # 显示前5个
        print(f'  - {service["full_name"]} ({service["service"]})')

asyncio.run(show_services())
"

快速入门

1. 启动MCP服务器

python server.py

2. 可用工具

服务器提供了这些主要工具:

数据访问:

  • search_objects - 查找天文对象(DESI)
  • astroquery_query - 跨越40多种天文服务的通用查询
  • get_spectrum_by_id - 获取详细的光谱数据(DESI)

服务发现:

  • list_astroquery_services - 显示所有可用的天文数据库
  • get_astroquery_service_details - 详细的服务信息
  • search_astroquery_services - 按条件查找服务

文件管理:

  • preview_data - 检查保存的文件并进行结构分析
  • list_files - 管理跨所有来源的保存数据
  • file_statistics - 存储使用和组织信息
  • convert_to_fits - 将数据转换为FITS格式

3. 示例用法

# 从SIMBAD获取对象坐标
astroquery_query(
    service_name="simbad",
    object_name="Betelgeuse"
)

# 使用SQL搜索SDSS中的星系
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"
)

# 搜索VizieR目录
astroquery_query(
    service_name="vizier",
    ra=10.68,
    dec=41.27,
    radius=0.1
)

# 将结果转换为FITS
convert_to_fits(
    identifier="search_results.csv",
    data_type="catalog"
)

数据源

DESI(暗能量光谱仪器)

状态: ✅ 已完全实现

  • SPARCL访问: 完整的光谱数据检索
  • Data Lab SQL: 快速目录查询(sparcl.main表)
  • 覆盖范围: DESI EDR(约1.8M)和DR1(超过18M光谱)
  • 波长: 360-980 nm,分辨率: R ~ 2000-5500

Astroquery通用访问

状态: ✅ 已完全实现

主要可用服务:

  • SIMBAD: 对象识别和基础数据
  • VizieR: 天文目录和调查
  • SDSS: 斯隆数字天空调查数据和光谱
  • Gaia: 天文测量和光度数据
  • MAST: 哈勃、JWST和其他太空望远镜档案
  • IRSA: 红外和亚毫米档案
  • ESASky: 多任务天文数据
  • 以及更多30种服务...

功能:

  • 自动服务发现和配置
  • 智能查询类型检测
  • 参数预处理和验证
  • 统一的错误处理和帮助生成

所需依赖项

pip install astroquery astropy

扩展架构

添加新数据源

  1. 创建数据源类
# 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")
        # 初始化调查特定客户端
    
    def search_objects(self, **kwargs):
        # 实现调查特定搜索
        pass
  1. 更新主服务器
# server.py
from data_sources import MySurveyDataSource

class AstroMCPServer:
    def __init__(self, base_dir=None):
        # ... 现有代码 ...
        self.my_survey = MySurveyDataSource(base_dir=base_dir)

添加新的Astroquery服务

astroquery集成会自动发现新服务。要添加自定义元数据:

# data_sources/astroquery_metadata.py
ASTROQUERY_SERVICE_INFO = {
    "my_service": {
        "full_name": "我的自定义服务",
        "description": "自定义天文数据库",
        "data_types": ["目录", "图像"],
        "波长覆盖范围": "光学",
        "对象类型": ["恒星", "星系"],
        "需要认证": False,
        "示例查询": [
            {
                "描述": "按对象名称搜索",
                "查询": "astroquery_query(service_name='my_service', object_name='M31')"
            }
        ]
    }
}

文件组织

文件会自动按数据源组织,并附带全面的元数据:

~/astro_mcp_data/
├── file_registry.json           # 全局文件注册表及元数据
├── desi/                        # DESI特定文件
│   ├── desi_search_*.json      # 搜索结果
│   ├── spectrum_*.json         # 光谱数据
│   └── *.fits                  # FITS转换
└── astroquery/                 # Astroquery结果
    ├── astroquery_simbad_*.csv # SIMBAD查询
    ├── astroquery_sdss_*.csv   # SDSS结果
    ├── astroquery_vizier_*.csv # VizieR目录
    └── *.fits                  # FITS转换

开发

项目结构优势

  • 模块化: 容易添加新的调查和分析工具
  • 通用访问: 单一接口访问40多种天文数据库
  • 职责分离: 数据访问、I/O和分析是分开的
  • 可测试性: 每个模块可以独立测试
  • 可扩展性: 清晰的架构支持无限增长

测试

# 运行所有测试
pytest

# 测试特定模块
pytest tests/test_desi.py
pytest tests/test_astroquery.py

# 测试覆盖率
pytest --cov=data_sources tests/

贡献

  1. 分叉仓库
  2. 创建功能分支(git checkout -b feature/new-capability
  3. 按照现有模式添加你的数据源或工具
  4. 为新功能编写测试
  5. 更新文档和示例
  6. 提交拉取请求

依赖项

核心需求

  • mcp>=1.0.0 - 模型上下文协议框架
  • pandas>=2.0.0 - 数据操作
  • numpy>=1.24.0 - 数值计算

天文库

  • astroquery>=0.4.6 - 通用天文数据库访问
  • astropy>=5.0.0 - FITS文件和天文计算
  • sparclclient>=1.0.0 - DESI SPARCL访问
  • datalab>=2.20.0 - NOAO Data Lab查询

可选特性

  • h5py>=3.8.0 - HDF5文件支持
  • pytest>=7.0.0 - 测试框架

许可

[指定您的许可]

引用

如果您在研究中使用了此软件,请引用:

@software{astro_mcp,
  title={Astro MCP: 适用于AI代理的通用天文数据访问},
  author={[您的姓名]},
  year={2024},
  url={[仓库URL]}
}

支持

发展路线图

当前(v0.1.0)

  • ✅ 通过SPARCL和Data Lab访问DESI数据
  • ✅ 通用astroquery集成(40多种服务)
  • ✅ 自动转换所有数据类型的FITS格式
  • ✅ 智能文件管理,带有全面的元数据
  • ✅ 自然语言查询界面

计划(v0.2.0)

  • 🚧 跨调查对象匹配和相关性
  • 🚧 高级天文计算(距离、亮度)
  • 🚧 变量对象的时间序列分析
  • 🚧 视觉工具集成

未来(v0.3.0+)

  • 🔮 对象分类的机器学习集成