StarWhisper 天文可观测性计算器
## For modelscope托管 { "mcpServers": { "StarWhisper-observation": { "command": "python", "args": ["mcp_observability_server.py"], "env": { "PYTHONPATH": "." }, "description": "StarWhisper天文可观测性计算器MCP服务器", "version": "1.0.0" } }, "tools": { "calculate_observability": { "name": "calculate_observability", "description": "计算指定天文目标的可观测性", "inputSchema": { "type": "object", "properties": { "latitude": { "type": "number", "description": "观测站纬度(度)", "minimum": 0, "maximum": 90 }, "longitude": { "type": "number", "description": "观测站经度(度)", "minimum": -180, "maximum": 180 }, "target_name": { "type": "string", "description": "目标名称(如'Vega', 'moon', 'mars'等)" }, "altitude": { "type": "number", "description": "观测站海拔(米)", "default": 0.0 }, "min_altitude": { "type": "number", "description": "最小地平高度(度)", "default": 30.0, "minimum": 0, "maximum": 90 }, "min_moon_separation": { "type": "number", "description": "最小月距(度)", "default": 30.0, "minimum": 0, "maximum": 180 }, "time_range_hours": { "type": "integer", "description": "检查时间范围(小时)", "default": 24, "minimum": 1, "maximum": 168 } }, "required": ["latitude", "longitude", "target_name"] } } }, "examples": [ { "name": "查询Vega可观测性", "description": "在新昌观测站查询Vega的可观测性", "input": { "latitude": 29.501784, "longitude": 120.905740, "target_name": "Vega", "min_altitude": 30.0, "min_moon_separation": 30.0 } }, { "name": "查询月球可观测性", "description": "在新昌观测站查询月球的可观测性", "input": { "latitude": 29.501784, "longitude": 120.905740, "target_name": "moon", "min_altitude": 20.0, "min_moon_separation": 0.0 } }, { "name": "查询火星可观测性", "description": "在新昌观测站查询火星的可观测性", "input": { "latitude": 29.501784, "longitude": 120.905740, "target_name": "M31", "min_altitude": 30.0, "min_moon_separation": 30.0 } } ], "metadata": { "name": "StarWhisper-observation-calculator", "version": "1.0.0", "description": "计算天文目标的可观测性,包括高度曲线和约束条件检查", "author": "Cunshi Wang", "license": "MIT", "repository": "https://github.com/example/StarWhisper-observation-calculator", "keywords": [ "astronomy", "observability", "mcp", "astropy", "simbad" ], "dependencies": [ "astropy>=5.0.0", "astroquery>=0.4.6", "astroplan>=0.8.0", "numpy>=1.20.0" ], "python_version": ">=3.8" } }
MCP 服务配置
复制以下 JSON 到 OPClaw 或其他 MCP 客户端的配置文件中即可使用
{
"mcpServers": {
"StarWhisper-observation": {
"args": [
"mcp_observability_server.py"
],
"command": "python",
"description": "StarWhisper天文可观测性计算器MCP服务器",
"env": {
"PYTHONPATH": "."
},
"version": "1.0.0"
}
}
}
服务介绍
StarWhisper 天文可观测性计算器
一个用于计算天文目标可观测性的Python包,支持恒星、深空天体和太阳系天体。提供MCP(Model Context Protocol)服务接口,可与支持MCP的AI助手集成。
🌟 主要特性
- 🔭 多目标支持: 恒星、深空天体、太阳系天体
- 📍 灵活观测站: 支持自定义观测站位置
- 🌙 月距约束: 考虑月球干扰的可观测性分析
- 📊 高度曲线: 生成24小时高度变化曲线
- 🌐 Web API: 提供RESTful API接口
- 🤖 MCP服务: 标准MCP协议,支持AI助手集成
- 📱 命令行工具: 简单易用的CLI界面
🚀 快速开始
安装
# 基本安装
pip install StarWhisper-observation-calculator
# 安装Web服务支持
pip install StarWhisper-observation-calculator[web]
# 安装MCP支持
pip install StarWhisper-observation-calculator[mcp]
基本使用
from StarWhisper_observation_calculator import ObservabilityCalculator
# 创建计算器(默认兴隆观测站)
calculator = ObservabilityCalculator(
latitude=40.393333,
longitude=117.575278,
altitude=900.0
)
# 计算Vega可观测性
result = calculator.calculate_observability("Vega")
print(result)
命令行使用
# 基本使用
observability-calculator Vega
# 指定观测站
observability-calculator moon --latitude 40.393333 --longitude 117.575278
# 自定义约束条件
observability-calculator M31 --min-altitude 20 --min-moon-separation 45
🤖 MCP服务
本包提供完整的MCP服务,可与支持MCP的AI助手(如Claude Desktop、Cursor等)集成。
启动MCP服务
# 方法1: 使用命令行工具
observability-mcp
# 方法2: 直接运行
python -m mcp_observability_server
MCP配置
创建MCP配置文件 ~/.config/mcp/servers/StarWhisper-observation.json:
{
"command": "observability-mcp",
"args": [],
"env": {}
}
MCP工具
服务提供以下MCP工具:
- calculate_observability: 计算天文目标可观测性
- 参数: latitude, longitude, target_name, altitude, min_altitude, min_moon_separation, time_range_hours
- 返回: 详细的可观测性分析报告
在AI助手中使用
安装并配置MCP服务后,你可以直接与AI助手对话:
用户: 请计算Vega在兴隆观测站的可观测性
AI助手: 我来为您计算Vega在兴隆观测站的可观测性...
[调用MCP工具: calculate_observability]
参数: latitude=40.393333, longitude=117.575278, target_name="Vega"
结果: Vega可观测性分析报告
📍 观测站: 40.393333°, 117.575278°, 900.0m
🌌 坐标: 18:36:56.3363, +38:47:01.280
📊 当前高度: -1.31°
✅ 可观测性: 不可观测
...
🌐 Web服务
启动Web服务
# 启动Web服务
observability-web
# 或指定端口
observability-web --port 8080
API接口
GET /- Web界面GET /docs- API文档POST /observability- 计算可观测性POST /observability/batch- 批量计算GET /targets/supported- 获取支持的目标GET /observatories- 获取预设观测站
使用示例
# 计算Vega可观测性
curl -X POST "http://localhost:8000/observability" \
-H "Content-Type: application/json" \
-d '{
"latitude": 40.393333,
"longitude": 117.575278,
"target_name": "Vega"
}'
📊 支持的目标
太阳系天体
- sun, moon, mercury, venus, mars, jupiter, saturn, uranus, neptune, pluto
📍 预设观测站
- 兴隆观测站: 40.393333°, 117.575278°, 900m
- 新昌观测站: 29.501784°, 120.905740°, 0m
- 帕洛马天文台: 33.3563°, -116.8650°, 1712m
🔧 高级配置
自定义观测站
calculator = ObservabilityCalculator(
latitude=your_latitude,
longitude=your_longitude,
altitude=your_altitude,
timezone="Asia/Shanghai"
)
约束条件
result = calculator.calculate_observability(
target_name="Vega",
min_altitude=20.0, # 最小地平高度
min_moon_separation=45.0, # 最小月距
time_range_hours=48 # 检查时间范围
)
📦 包结构
StarWhisper-observation-calculator/
├── observability_calculator.py # 核心计算模块
├── mcp_observability_server.py # MCP服务器
├── web_server.py # Web服务
├── de440_config.py # DE440星表配置
├── de440.bsp # DE440星表文件
├── finals2000A.all # IERS数据文件
└── mcp_config.json # MCP配置文件
🛠️ 开发
安装开发依赖
pip install StarWhisper-observation-calculator[dev]
运行测试
# 测试核心功能
python -c "from StarWhisper_observation_calculator import ObservabilityCalculator; print('✅ 导入成功')"
# 测试MCP服务
python mcp_observability_server.py
# 测试Web服务
python web_server.py
📄 许可证
本项目采用 MIT 许可证,详见 LICENSE 文件。
🤝 贡献
欢迎提交 Issue 和 Pull Request!
📞 支持
- 📧 邮箱: wangcunshi@nao.cas.cn
- 🐛 Issues: GitHub Issues
- 📖 文档: GitHub README
For modelscope托管
{
"mcpServers": {
"StarWhisper-observation": {
"command": "python",
"args": ["mcp_observability_server.py"],
"env": {
"PYTHONPATH": "."
},
"description": "StarWhisper天文可观测性计算器MCP服务器",
"version": "1.0.0"
}
},
"tools": {
"calculate_observability": {
"name": "calculate_observability",
"description": "计算指定天文目标的可观测性",
"inputSchema": {
"type": "object",
"properties": {
"latitude": {
"type": "number",
"description": "观测站纬度(度)",
"minimum": 0,
"maximum": 90
},
"longitude": {
"type": "number",
"description": "观测站经度(度)",
"minimum": -180,
"maximum": 180
},
"target_name": {
"type": "string",
"description": "目标名称(如'Vega', 'moon', 'mars'等)"
},
"altitude": {
"type": "number",
"description": "观测站海拔(米)",
"default": 0.0
},
"min_altitude": {
"type": "number",
"description": "最小地平高度(度)",
"default": 30.0,
"minimum": 0,
"maximum": 90
},
"min_moon_separation": {
"type": "number",
"description": "最小月距(度)",
"default": 30.0,
"minimum": 0,
"maximum": 180
},
"time_range_hours": {
"type": "integer",
"description": "检查时间范围(小时)",
"default": 24,
"minimum": 1,
"maximum": 168
}
},
"required": ["latitude", "longitude", "target_name"]
}
}
},
"examples": [
{
"name": "查询Vega可观测性",
"description": "在新昌观测站查询Vega的可观测性",
"input": {
"latitude": 29.501784,
"longitude": 120.905740,
"target_name": "Vega",
"min_altitude": 30.0,
"min_moon_separation": 30.0
}
},
{
"name": "查询月球可观测性",
"description": "在新昌观测站查询月球的可观测性",
"input": {
"latitude": 29.501784,
"longitude": 120.905740,
"target_name": "moon",
"min_altitude": 20.0,
"min_moon_separation": 0.0
}
},
{
"name": "查询火星可观测性",
"description": "在新昌观测站查询火星的可观测性",
"input": {
"latitude": 29.501784,
"longitude": 120.905740,
"target_name": "M31",
"min_altitude": 30.0,
"min_moon_separation": 30.0
}
}
],
"metadata": {
"name": "StarWhisper-observation-calculator",
"version": "1.0.0",
"description": "计算天文目标的可观测性,包括高度曲线和约束条件检查",
"author": "Cunshi Wang",
"license": "MIT",
"repository": "https://github.com/example/StarWhisper-observation-calculator",
"keywords": [
"astronomy",
"observability",
"mcp",
"astropy",
"simbad"
],
"dependencies": [
"astropy>=5.0.0",
"astroquery>=0.4.6",
"astroplan>=0.8.0",
"numpy>=1.20.0"
],
"python_version": ">=3.8"
}
}