使用说明
空间跟踪MCP服务器
包装MCP服务器 Space-Track.org REST API。建于 FastMCP 和 流式HTTP 运输。提供通用查询工具、谓词发现(modeldef)、GP/TLE、SATCAT和CDM公共的便利工具,具有内置身份验证、会话处理和根据空间跟踪指南的速率限制。
需求
- Python 3.10+
- 空间跟踪帐户(请求 space-track.org)
安装
pip install -e .
或与 紫外线:
uv pip install -e .
配置(环境)
| 变量 | 必填 | 默认 | 描述 |
|---|---|---|---|
SPACE_TRACK_IDENTITY |
是* | -- | 空间跟踪用户名 |
SPACE_TRACK_PASSWORD |
是* | -- | 空间跟踪密码 |
SPACETRACK_USER |
是* | -- | 标识别名(PRD) |
SPACETRACK_PASS |
是* | -- | 密码别名(PRD) |
*使用其中之一 SPACE_TRACK_IDENTITY/SPACE_TRACK_PASSWORD 或 SPACETRACK_USER/SPACETRACK_PASS.
| SPACE_TRACK_BASE_URL |没有| https://www.space-track.org/ |API基本URL|
| SPACE_TRACK_TIMEOUT_SECONDS |没有| 60 |请求超时|
| SPACE_TRACK_USER_AGENT |没有| space-track-mcp/1.0 |用户代理标头|
| SPACE_TRACK_ENABLE_CLASS_GUARDRAILS |没有| true |gp历史的软护栏等。 |
| SPACE_TRACK_MAX_BYTES_PER_RESPONSE |没有| 26214400 (25MB)|流媒体阈值|
| SPACE_TRACK_CACHE_TTL_SECONDS |没有| 21600 (6小时) | Modeldef TTL 缓存 |
| SPACE_TRACK_MAX_SATS |没有| 50 |每次传播呼叫的最大卫星数|
| SPACE_TRACK_MAX_TIMESTEPS_PER_CALL |没有| 200000 |最大时间步长(例如24小时1秒=86400)|
| SPACE_TRACK_MAX_MC_SAMPLES |没有| 2000 |最大蒙特卡洛样本数|
| SPACE_TRACK_MAX_MC_TOTAL_STEPS |没有| 10000000 |最大样本数×时间步长×卫星数|
| SPACE_TRACK_MAX_TLE_HORIZON_DAYS_WARN |没有| 7 |当TLE传播超过这么多天时发出警告|
| MCP_HOST |没有| 127.0.0.1 |绑定主机|
| MCP_PORT |没有| 8000 |绑定端口|
| MCP_PATH |没有| /mcp |可流式传输的HTTP路径|
凭据和Cookie永远不会被记录。
跑
export SPACE_TRACK_IDENTITY=your_username
export SPACE_TRACK_PASSWORD=your_password
space-track-mcp
或者:
python -m space_track_mcp.server
服务器侦听 http://127.0.0.1:8000/mcp (流式HTTP)。使用支持Streamable HTTP的MCP客户端进行连接。
速率限制
- 硬限制: 每分钟30个请求、每小时300个请求(令牌桶式)。
- 课堂指导: GP~1/小时;SATCAT/SATAT_DEBUT~1/UTC 1700后的一天;gphistory需要窄过滤器或显式过滤器
ack_heavy_query=true.
超过限制时,服务器返回一个明确的错误 retry_after_seconds.使用 spacetrack_rate_limit_status 检查当前状态。
工具
| 工具 | 说明 |
|---|---|
spacetrack_query |
通用查询:任何控制器/类、谓词字典、格式(json/tle/csv/…)、可选的limit/orderby/stream。 |
spacetrack_get_predicates |
类的Modeldef:谓词列表(名称、类型、可空、默认值);缓存。 |
spacetrack_gp_latest |
NORAD ID的最新GP元素;格式为tle/json/csv/kvn/xml。更喜欢传统的TLE类。 |
spacetrack_positions_over_time |
获取给定NORAD ID的TLE,使用SGP4传播,返回随时间变化的位置(和速度)的JSON。 输入: norad_cat_ids,可选 num_points (默认值3), step_minutes (默认值为60)。输出: satellites[] 随着 object_name, norad_cat_id, positions[] 每个 {time, position_km, velocity_km_s} (ECI,公里)。 |
spacetrack_satcat_daily |
SATCAT快照(最佳做法:~1/天)。 |
spacetrack_satcat_debut_since |
SATCAT_DEBUT自N天以来发生了变化(例如,DEBUT/>now-1/)。 |
spacetrack_cdm_public_recent |
公共CDM(例如,自过去8小时以来)。 |
spacetrack_rate_limit_status |
电流限制器状态(令牌剩余,下一次重置)。 |
| 轨道投影 | |
orbit_propagate |
TLE或状态的确定性传播。输入:卫星[]、结束时间或持续时间秒、步长秒、帧输出(ECI/ECEF/LLA)、传播器(sgp4/数值)、数值模型(重力、阻力)。 |
orbit_propagate_monte_carlo |
具有state_sigma或state_covariance的N个样本;返回每个时间步长的平均值+p50/p90/p95/p99半径包络。输入:带有TLE或状态的卫星[]。 |
orbit_propagate_monte_carlo_by_norad |
更简单: 通过 norad_cat_ids (例如[255443013]);获取TLE,运行MC。选项与orbit_prospace_monte_carlo相同。 |
orbit_propagate_monte_carlo_proximity |
MC用于多颗卫星+成对距离统计。输入:norad_cat_ids(≥2)。集 include_satellite_ephemeris=true 用于完整星历表(默认:仅成对,输出较小)。 |
spacetrack_project_positions |
一个调用:获取NORAD ID的GP/TLE,然后传播(如果启用了monte_carlo,则运行MC)。 |
orbit_fit_state_from_points |
从3+个状态向量中,估计状态和可选的6×6协方差(第2阶段)。 |
eph_read |
解析.eph(特殊扰动)星历文件;标头+状态向量。 |
eph_to_orbit_state |
从.eph中提取一个状态 orbit_propagate. |
satellite_analyze |
北美防空司令部任务和活动推断: 获取TLE历史,推导轨道状态、机动、SSO/GEO行为、重访、可选接近、任务评分和基础总结。 |
| TLE分析 | |
tle_history |
NORAD ID的标准化历史TLE数据 |
tle_quality |
目录质量:纪元间隙、拟合稳定性、元素噪声、更新节奏。 |
tle_residuals |
元素变化残差;将机动与目录噪声区分开来。 |
tle_credibility |
PRD v2: TLE可信度(跟踪_质量,解释_可靠性)。 |
| 机动 | |
maneuver_detect |
从轨道要素变化中检测候选机动。 |
maneuver_classify |
根据Δn、Δa、Δi、Δe对机动类型进行分类。 |
| RPO/接近度 | |
rpo_scan |
在类似的轨道状态下搜索附近的物体。 |
rpo_timeline |
两个物体随时间的成对距离。 |
rpo_assessment |
近距离接近的假设(重合、星座、检查、交会)。 |
| 轨道行为 | |
orbit_regime |
分类制度:VLEO/LEO/MEO/GEO/HEO+SSO。 |
orbit_revisit |
重复周期、覆盖频带、ROI通过频率。 |
orbit_geo_behavior |
GEO经度、漂移率、定位框。 |
| 地理的 | |
geo_groundtrack |
地面轨道路径(随时间变化的纬度/经度)。 |
geo_overflight |
经过一个地理区域。 |
geo_localtime |
SSO的当地太阳时(LTAN)。 |
| 目录/关系 | |
catalog_neighbors |
具有相似轨道参数的物体。 |
catalog_cluster_tool |
将卫星组合成飞机。 |
catalog_family_tool |
可能的家庭分裂。 |
constellation_detect |
瑞安的DBSCAN;检测星座成员资格。 |
| 事件调查 | |
event_breakup_suspect_tool |
检测可能的碎片事件。 |
event_decay_analysis_tool |
大气阻力衰减,再入趋势。 |
event_track_gap_tool |
解释追踪失踪。 |
| 事件管理 | |
case_create |
创建调查案例。 |
case_list |
列出所有案例。 |
case_add_object |
将卫星添加到机箱中。 |
case_add_note |
添加分析师/代理人备注。 |
case_hypothesis |
添加假设和预期可观测值。 |
case_timeline |
合并时间线(TLE、机动、笔记)。 |
case_export |
导出报告(markdown或JSON)。 |
示例(GP TLE用于ISS)
相当于:
/basicspacedata/query/class/gp/norad_cat_id/25544/format/tle
使用工具:
- spacettrack_query:
class_name="gp",predicates={"norad_cat_id": 25544},format="tle". - spacettrack_gp_lextress:
norad_cat_id=25544,format="tle".
获取两颗卫星随时间的坐标
太空轨道返回 轨道要素 (TLE/GP),而不是预先计算的位置。得到 坐标随时间变化 你:
-
获取两颗卫星
- 选择两个NORAD ID(例如ISS=
25544,另一个=48274),或 - 使用 空间轨迹查询:
class_name="satcat",format="json",limit=2获取两个目录条目并阅读它们NORAD_CAT_ID.
- 选择两个NORAD ID(例如ISS=
-
获取他们的元素
- spacettrack_gp_lextress:
norad_cat_id=[25544, 48274],format="tle" - 或 空间轨迹查询:
class_name="gp",predicates={"norad_cat_id": [25544, 48274], "decay_date": "null-val", "epoch": ">now-10"},format="tle".
- spacettrack_gp_lextress:
-
将元素转换为坐标
将TLE传播到你关心的时代 SGP4 (例如Pythonsgp4).MCP不运行传播;您可以在本地或脚本中执行该操作。
示例脚本 (使用与MCP相同的凭据,不需要MCP客户端):
pip install sgp4
python examples/two_satellites_coordinates.py
# Or with two NORAD IDs:
python examples/two_satellites_coordinates.py 25544 48274
该脚本从Space Track获取TLE,并打印当前+1小时、+2小时的ECI位置(公里)。对于lat/lon/alt,您需要转换ECI→ ECEF → 大地测量(例如 sgp4.conveniences 或 pymap3d).
仅使用MCP(例如在光标中):
让AI打电话 spacettrack_gp_lextress 具有两个NORAD ID和 format="tle"。你会得到TLE文本。要在特定时间获取坐标,请将本地SGP4步骤(或上面的脚本)与TLE一起使用。
轨道传播、框架和蒙特卡洛不确定性
框架和惯例
- TLE/SGP4帧:所有SGP4传播都在 主题 帧(真赤道、均点)。你看到的任何地方:
mean_position_km/position_km_ECI和mean_velocity_km_s/velocity_km_s_ECI,这些是 ECI团队 矢量单位为km和km/s。
- ECEF:
position_km_ECEF/mean_position_km_ECEF使用a进行转换 基于GMST的地球自转:earth_rotation_model = "GMST (IAU 1982-style)"ecef_frame = "ITRF-like"(近似地球固定框架)。
- LLA:
lat_deg,lon_deg,alt_km大地坐标是否在 世界大地测量系统84 (lla_datum = "WGS84").
这些惯例在 metadata 对于确定性(orbit_propagate)蒙特卡洛(orbit_propagate_monte_carlo)输出。
spacetrack_project_positions:默认值和蒙特卡洛
spacetrack_project_positions 是一种一键式工具,用于:
- 从Space Track获取给定的最新GP/TLE
norad_cat_ids - 使用SGP4+本地帧转换向前传播。
- 返回:
- A. 蒙特卡洛总结 (默认),或
- A. 确定性轨迹 (如有要求)。
默认值(当您仅通过时 norad_cat_id):
- 传播时间:6小时(~19个点,20分钟步长)。
- 框架:
frames_out = ["ECI", "ECEF", "LLA"](在LLA要求时添加了ECEF)。 - 默认情况下启用蒙特卡洛:
samples = 200uncertainty = { state_sigma: { pos_km: [0.2, 0.2, 0.2], vel_km_s: [0.0002, 0.0002, 0.0002] } }
到 关闭蒙特卡洛 并得到一条确定性路径,pass:
{
"norad_cat_id": 25544,
"monte_carlo": { "enabled": false }
}
蒙特卡罗不确定性是如何表示的
对于每个卫星和每个时间步长, orbit_propagate_monte_carlo 产生a 总结 进入:
- 平均状态:
mean_position_km(TEME ECI,公里)mean_velocity_km_s(TEME ECI,公里/秒)- 可选的
mean_position_km_ECEF和lat_deg,lon_deg,alt_km.
- 标量不确定性(与平均值的距离):
p50_radius_km:50%的样本位于平均值的半径范围内。p90_radius_km:90%的样本位于该半径范围内。p95_radius_km95%的样本位于该半径范围内。p99_radius_km99%的样本位于该半径范围内。
这些半径给你一个 概率包络 围绕平均轨迹:较小的半径=较高的置信度;半径越大=色散越大。
RTN(径向/沿轨道/交叉轨道)分解
为了使误差条在视觉上有意义,蒙特卡洛引擎还分解了 快速组织坏死 每次帧:
p95_radial_km:- 绝对值的第95百分位数 径向的 偏差(沿地球中心半径的进出)。
p95_along_track_km:- 绝对值的第95百分位数 沿轨 偏离(沿轨道前进/后退)。
p95_cross_track_km:- 绝对值的第95百分位数 跨轨 偏离(轨道平面外)。
pos_cov_rtn_km2:- RTN位置偏移的3×3协方差矩阵,单位为km²。
例子
| 示例 | 说明 |
|---|---|
examples/satellite-classification-viz.html |
SDA仪表板:NORAD下拉菜单、分析、蒙特卡洛投影。跑 python examples/serve_classification.py,打开http://127.0.0.1:8765 |
examples/tri-sat-distances-heatmap.html |
多卫星蒙特卡罗邻近距离时间序列图。从以下位置加载JSON orbit_propagate_monte_carlo_proximity. |
examples/readme_eph.md |
.eph文件格式和MCP工具 eph_read, eph_to_orbit_state. |
examples/generate_eph.py |
生成用于测试的合成.eph文件。 |
许可证
请参阅存储库许可证。