内容
# ALMA MCP 服务器 - 通过自然语言访问天文数据
一个模型上下文协议(MCP)服务器,通过干净、可扩展的架构提供对ALMA(阿塔卡马大型毫米/亚毫米阵列)档案的全面访问。
## 愿景
该MCP服务器将ALMA档案查询从软件工程问题转化为**自然语言对话**。研究人员可以直接询问所需的内容,而不是学习TAP/ADQL语法和档案API,即可获得干净的、适合分析的结果。
**结果**:可以无缝搜索ALMA数据的AI助手,支持按目标、位置、频率、分辨率或自定义条件搜索
## 快速设置 Claude Desktop
### 1. 克隆/复制和设置环境
> **重要:根据您的安装位置更改以下路径!**
```bash
# 克隆仓库(或复制 ALMA_MCP 文件夹)
git clone https://github.com/adamzacharia/ALMA_MCP.git
cd ALMA_MCP
# 创建一个专用的 conda 环境,Python 3.11+
conda create -n alma_mcp python=3.11
conda activate alma_mcp
# 安装依赖项
pip install -r requirements.txt
# 安装天文学库以实现完整功能
pip install fastmcp alminer pyvo astroquery astropy pandas
```
**替代方案:使用 venv 代替 conda:**
```bash
# 导航到 ALMA_MCP 文件夹
cd path/to/ALMA_MCP
# 创建一个专用的 venv 环境
python -m venv venv
venv\Scripts\activate # Windows
# source venv/bin/activate # Mac/Linux
# 安装依赖项
pip install -r requirements.txt
```
### 2. 测试服务器
```bash
# 测试基本功能
python test_server.py
# 快速测试(可选)
python -c "
from server import get_alma_info, ALMINER_AVAILABLE, PYVO_AVAILABLE
print(' 服务器加载成功')
print(f' alminer 可用:{ALMINER_AVAILABLE}')
print(f' pyvo 可用:{PYVO_AVAILABLE}')
"
```
### 3. 配置 Claude Desktop
查找并编辑Claude Desktop MCP配置文件:
1. 导航到您的Claude Desktop AppData文件夹:
- **Windows**:打开文件资源管理器并转到 `%APPDATA%\Claude\`
- **macOS**:`~/Library/Application Support/Claude/`
2. 添加 'claude_desktop_config.json' 或将以下内容添加到您的 'config.json' 文件中
3. 将以下配置添加到文件中:
> **重要:根据您的安装位置更改以下路径!**
```json
{
"mcpServers": {
"alma": {
"command": "python",
"args": ["c:/Users/Asus/Desktop/Quasar-main/ALMA_MCP/server.py"]
}
}
}
```
> **注意**:在路径中使用正斜杠 `/`,即使在 Windows 上。
#### 使用自定义环境(Conda 或 venv)
如果您在**conda 环境**或**venv**中安装了依赖项,则**必须**指定该环境中 Python 可执行文件的完整路径。否则,系统将无法找到已安装的包!
**对于 Conda 环境:**
```json
{
"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": {}
}
}
}
```
要找到您的conda环境的Python路径,请运行:
```bash
conda activate alma_mcp
where python # Windows
which python # Mac/Linux
```
**对于 venv:**
```json
{
"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. 重启并测试
1. **完全退出 Claude Desktop** (右键系统托盘 → 退出)
2. **检查任务管理器** - 如果 Claude 仍在后台运行,请结束任务
3. **重新打开 Claude Desktop**
4. **使用查询测试**,例如:
- "搜索 M87 的 ALMA 观测数据"
- "查找分辨率低于 0.5 角秒的高分辨率 ALMA 数据"
- "ALMA 的频率带是什么?"
### 5. 故障排除
**服务器无法启动:**
```bash
# 检查 Python 环境
python --version # 应为 3.10+
# 手动测试服务器
python server.py
# 应无错误启动
```
**MCP 连接问题:**
- 验证配置文件中的 Python 路径是否正确
- 确保所有依赖项都已安装
- 检查 `server.py` 是否位于指定路径
**缺少依赖项:**
```bash
pip install fastmcp alminer pyvo astroquery astropy pandas
```
---
## 使用示例
配置完成后,您可以询问有关 ALMA 数据的自然语言问题:
### 基本搜索
- "查找猎户座 KL 的观测数据"
- "在 1 角分钟内搜索 ALMA 的 M87 数据"
- "NGC 1234 有什么 ALMA 数据?"
### 基于位置的搜索
- "在 RA=83.6, Dec=-5.4 处搜索 ALMA 数据"
- "查找银河中心附近的观测数据"
- "以 150.5, 2.2 坐标为中心,半径 5 角分钟进行锥形搜索"
### 频率搜索
- "查找 230 至 250 GHz 之间的 ALMA 数据"
- "搜索 Band 6 观测数据"
- "哪些观测数据涵盖 230.5 GHz 处的 CO(2-1) 线?"
### 分辨率搜索
- "查找分辨率低于 0.1 角秒的高分辨率数据"
- "搜索 ALMA 观测数据,分辨率优于 0.5 角秒"
### 提案/PI 搜索
- "查找 Adele Plunkett 的 ALMA 提案"
- "获取提案 2023.1.00001.S 的数据"
- "搜索星系演化提案"
### 光谱线覆盖
- "哪些 M87 观测数据涵盖 CO(2-1) 线?"
- "检查猎户座数据是否涵盖 HCN(1-0) 线,频率为 88.6 GHz"
- "查找涵盖 115 GHz 的观测数据,源 redshift=0.5"
### 自定义 SQL 查询
- "运行此 SQL:SELECT target_name, band_list FROM ivoa.obscore WHERE target_name LIKE '%M87%'"
- "查询 ALMA 所有 Band 7 观测数据,时间范围为 2023"
### ALMA 信息
- "ALMA 的频率带是什么?"
- "列出毫米范围内常见的光谱线"
- "ALMA 支持哪些科学类别?"
---
### 参考文献和出版物搜索
- "查找在 Nature 上发表的 ALMA 观测数据"
- "搜索 Smith 发表于 2023 年的论文中使用的数据"
- "哪些 ALMA 数据具有 bibcode 2017ApJ...834..140R"
### 科学关键词搜索
- "查找所有标记为 'Quasars' 的 ALMA 观测数据"
- "搜索亚毫米星系(SMG)观测数据"
- "哪些观测数据归类为 '活动星系核'?"
### 数据类型搜索
- "查找 M87 的所有光谱立方体"
- "搜索标记为系外行星的连续图像"
- "显示 Band 6 中的光谱线观测数据"
### 摘要搜索
- "查找摘要中提及黑洞的提案"
- "搜索关于恒星形成的提案的观测数据"
- "哪些提案提到了宇宙微波背景?"
### 灵敏度搜索
- "查找连续灵敏度优于 0.1 mJy/beam 的观测数据"
- "搜索深度低于 0.05 mJy 灵敏度的 ALMA 观测数据"
### 批量多源查询
- "检查 ALMA 是否观测过 M31、M51、M82 和 NGC 1068"
- "查询 ALMA 以下源的数据: Cen A、M83 和 NGC 1234"
---
## 与其他 LLM 和框架集成
### LangChain 集成
您可以使用 `langchain-mcp-adapters` 包将此 MCP 服务器与 LangChain 集成:
```bash
pip install langchain-mcp-adapters
```
```python
from langchain_mcp_adapters.client import MCPClient
from langchain_openai import ChatOpenAI
# 连接到 MCP 服务器
client = MCPClient(
command="python",
args=["path/to/ALMA_MCP/server.py"]
)
# 从 MCP 服务器获取工具
tools = client.get_tools()
# 与任何 LangChain 兼容的 LLM 一起使用
llm = ChatOpenAI(model="gpt-4")
llm_with_tools = llm.bind_tools(tools)
```
### 开源 LLM
对于开源 LLM(Ollama、LMStudio 等),您可以:
1. **使用 MCP 兼容的客户端**:一些开源项目(如 [MCP CLI](https://github.com/modelcontextprotocol/cli))支持将 MCP 服务器连接到本地 LLM。
2. **直接调用函数**:直接在 Python 代码中导入服务器函数:
```python
from server import search_alma_by_target, search_alma_by_position, get_alma_info
# 直接使用工具
result = search_alma_by_target("M87", search_radius_arcmin=5.0)
print(result)
# 获取 ALMA 参考信息
info = get_alma_info()
print(info)
```
3. **构建 REST API**:将 MCP 工具封装在 FastAPI/Flask 服务器中,以支持通过 HTTP 进行函数调用。
---
## 架构
```
ALMA_MCP/
├── server.py # 主要的 MCP 服务器,包含 16 个工具
├── requirements.txt # Python 依赖项
├── test_server.py # 测试套件
└── README.md # 本文件
```
---
## 功能
### ALMA 档案访问
- **目标搜索**:通过 SIMBAD 解析对象名称并搜索 ALMA
- **位置搜索**:按 RA/Dec 坐标进行锥形搜索
- **提案搜索**:按 PI 名称、提案 ID 或科学类别查找
- **频率搜索**:按频率范围(GHz)查询
- **分辨率搜索**:按角分辨率(角秒)筛选
- **自定义 SQL**:对 ALMA TAP 执行任意 ADQL 查询
### 核心查询工具(8 个原始工具)
| 工具 | 描述 |
|------|-------------|
| `search_alma_by_target` | 按天文学对象名称搜索(SIMBAD 分辨率) |
| `search_alma_by_position` | 按 RA/Dec 坐标进行锥形搜索 |
| `search_alma_by_proposal` | 按 PI 名称或提案 ID 搜索 |
| `search_alma_by_frequency` | 按频率范围(GHz)搜索 |
| `search_alma_by_resolution` | 按角分辨率(角秒)搜索 |
| `check_alma_line_coverage` | 检查光谱线覆盖与红移 |
| `get_alma_info` | ALMA 波段、线路和功能参考 |
| `run_alma_tap_query` | 对 TAP 执行自定义 SQL/ADQL 查询 |
### 扩展查询工具(8 个新工具 - 来自 ALMA 笔记本)
| 工具 | 描述 |
|------|-------------|
| `search_alma_by_source_name` | 按 PI 指定的目标名称搜索(精确或部分) |
| `search_alma_by_bibliography` | 按 bibcode、期刊、作者或出版年份搜索 |
| `search_alma_by_member_ous` | 按 Member OUS 数据集标识符搜索 |
| `search_alma_by_data_type` | 搜索立方体(光谱)或图像(连续) |
| `search_alma_by_science_keyword` | 按 ALMA 科学关键词搜索 |
| `search_alma_by_abstract` | 提案/出版物摘要全文搜索 |
| `search_alma_by_sensitivity` | 按连续或线路灵敏度(mJy/beam)搜索 |
| `query_alma_multiple_sources` | 批量查询多个源 |
### 多后端支持
- **alminer**:高级 ALMA 查询,带有光谱线工具
- **pyvo**:直接 TAP/ADQL 访问 ALMA 档案
- **astroquery**:SIMBAD 名称解析
---
## 依赖项
### 核心要求
```
fastmcp>=2.0.0 # MCP 框架
pandas>=1.5.0 # 数据处理
```
### 天文学库
```
alminer>=0.2.0 # 高级 ALMA 查询
pyvo>=1.4.0 # TAP/ADQL 访问
astroquery>=0.4.0 # SIMBAD, VizieR 等
astropy>=5.0.0 # 天文学实用工具
```
---
## 路线图
### 当前(v1.0)✅
- [x] ALMA 目标名称搜索,SIMBAD 分辨率
- [x] 基于位置的锥形搜索
- [x] 频率范围搜索
- [x] 角分辨率过滤
- [x] 提案/PI 搜索
- [x] 光谱线覆盖检查
- [x] 自定义 SQL/TAP 查询
- [x] ALMA 信息和波段参考
- [x] 源名称搜索(PI 指定名称,精确/部分)
- [x] 参考文献/出版物搜索(bibcode, 期刊, 作者, 年份)
- [x] Member OUS ID 搜索(数据集标识符)
- [x] 数据类型过滤(立方体 vs 图像)
- [x] 科学关键词搜索,带有过滤器
- [x] 摘要全文搜索(提案和出版物)
- [x] 灵敏度搜索(连续或线路)
- [x] 批量多源查询
### 计划(v2.0)
- [ ] VLA 档案集成
- [ ] GBT 档案集成
- [ ] 结果缓存以加快查询速度
- [ ] FITS 文件下载支持
- [ ] 跨档案对象匹配(ALMA + VLA + 光学)
- [ ] 可视化工具(天空图谱,谱线图)
- [ ] 数据下载工作流
---
## 移动到独立位置
此文件夹设计为可移植。要移动它:
1. 复制整个 `ALMA_MCP/` 文件夹到所需位置
2. 更新 `config.json` 中的路径
3. 重启 Claude Desktop
---
## 贡献
1. 分叉仓库
2. 创建功能分支(`git checkout -b feature/vla-support`)
3. 添加数据源,遵循现有模式
4. 编写新功能测试
5. 提交拉取请求
## 作者
- **Adam Zacharia Anil** - 主要开发者
- **Adele Plunkett** - 科学顾问
---
## 致谢
特别感谢:
- **Adele Plunkett** - 在整个项目中提供宝贵的指导和建议
- **NRAO(国家射电天文台)** - 支持天文学研究和数据访问
- **Brian Mason** - 提供技术专业知识和支持
- **Cosmic AI / Stella Offner** - 激发将 AI 应用于天文学研究的灵感
---
## 许可证
MIT 许可证 - 详情请参阅 [LICENSE](LICENSE) 获取详细信息。
---
## 引用
如果您在研究中使用此软件,请引用:
```bibtex
@software{alma_mcp,
title={ALMA MCP 服务器:AI 代理的天文学数据访问},
author={Adam Zacharia Anil 和 Adele Plunkett},
year={2025},
url={https://github.com/adamzacharia/ALMA_MCP}
}
```
---
## 支持
- **问题**:[GitHub Issues](https://github.com/adamzacharia/ALMA_MCP/issues)
- **文档**:此 README 和内联代码注释
- **讨论**:[GitHub Discussions](https://github.com/adamzacharia/ALMA_MCP/discussions)