返回市场
航空航天-MCP

航空航天-MCP

作者:cheesejaguar2 星标更新:2025-09-02

项目介绍

航空航天MCP - 飞行计划API及MCP服务器

Python 3.11+ FastAPI OpenAP MCP兼容 MIT许可证

一个全面的航空航天研究和飞行计划服务,提供HTTP API和模型上下文协议(MCP)集成。使用FastMCP构建,以简化MCP服务器开发。功能包括智能机场解析、大圆航线计算、飞机性能估算、大气建模、坐标系转换、空气动力学分析、螺旋桨性能建模、火箭轨迹优化、轨道力学计算以及航天器轨迹规划,用于航空航天操作。

⚠️ 安全免责声明

本软件仅用于教育、研究和开发目的

  • 不用于实际导航:不得用于实际飞行计划或导航
  • 未经认证:此系统未获得任何航空当局的认证
  • 仅为估算:性能计算是理论估算
  • 不考虑天气数据:不考虑天气、NOTAM或空域限制
  • 无责任:作者不对使用后果承担任何责任

对于实际飞行计划,请始终使用经过认证的航空软件,并参考官方来源,包括NOTAM、气象报告和空中交通管制。

🚀 快速开始

方案1:UV(推荐)

# 安装UV(快速Python包管理器)
curl -LsSf https://astral.sh/uv/install.sh | sh

# 克隆并设置
git clone https://github.com/username/aerospace-mcp.git
cd aerospace-mcp
uv venv && source .venv/bin/activate  # Windows: .venv\Scripts\activate
uv sync

# 复制环境变量并配置(可选但推荐)
cp .env.example .env
# 根据需要编辑.env(主机/端口/日志级别,可选LLM工具)

# 运行HTTP服务器(包入口点)
uv run aerospace-mcp-http

# 或者(开发者风格)
uvicorn main:app --reload --host 0.0.0.0 --port 8080

# 测试API
curl "http://localhost:8080/health"

方案2:Docker

git clone https://github.com/username/aerospace-mcp.git
cd aerospace-mcp
docker build -t aerospace-mcp .
docker run -p 8080:8080 aerospace-mcp

# 测试API
curl "http://localhost:8080/health"

方案3:MCP客户端(Claude桌面)

添加到您的Claude桌面配置中:

{
  "mcpServers": {
    "aerospace-mcp": {
      "command": "uv",
      "args": ["run", "aerospace-mcp"],
      "cwd": "/path/to/aerospace-mcp",
      "env": {
        "LLM_TOOLS_ENABLED": "true",
        "OPENAI_API_KEY": "your-openai-api-key-here"
      }
    }
  }
}

注意env部分是可选的,仅在您希望启用AI驱动代理工具以增强用户体验时才需要。

通过CLI启动MCP

# 启动MCP服务器(标准输入输出)
uv run aerospace-mcp

# 启动SSE模式(可选)
uv run aerospace-mcp sse 0.0.0.0 8001

📋 目录

✨ 功能

核心能力

  • 机场解析:全球28,000多个机场的城市到机场智能映射
  • 路线规划:具有大地测量精度的大圆距离计算
  • 性能估算:通过OpenAP进行特定飞机的燃油和时间计算
  • 大气建模:ISA大气剖面,可选增强精度
  • 坐标变换:ECEF、ECI、大地坐标系转换,用于航空航天分析
  • 多种接口:支持HTTP REST API和模型上下文协议(MCP)
  • 实时处理:飞行计划请求亚秒响应时间

空间与轨道力学能力

  • 🛰️ 轨道元素与状态向量:在开普勒元素和笛卡尔状态向量之间转换
  • 🌍 轨道传播:使用RK4方法进行J2摄动数值积分
  • 🗺️ 地面轨迹计算:计算卫星地面轨迹用于任务规划
  • 🔄 霍曼转移:计算最优两脉冲轨道转移
  • 🤝 轨道会合:规划多机动会合序列
  • 🎯 轨迹优化:遗传算法和粒子群优化
  • 📊 不确定性分析:蒙特卡洛抽样用于轨迹鲁棒性评估
  • 🚀 拉格朗日问题:给定飞行时间的二体轨迹确定

支持的操作

  • ✅ 通过城市名称或IATA代码搜索机场
  • ✅ 飞行路线规划,生成折线图
  • ✅ 飞机性能估算(190多种飞机类型)
  • ✅ 燃油消耗和飞行时间计算
  • ✅ 大圆距离计算
  • ✅ 多段旅程规划
  • ✅ 飞机比较分析
  • ✅ 大气剖面计算(ISA标准大气)
  • ✅ 风廓线建模(对数/幂律)
  • ✅ 坐标系变换(ECEF、ECI、大地坐标)
  • ✅ 机翼空气动力学分析(VLM、升力线理论)
  • ✅ 机翼极生成和数据库访问
  • ✅ 飞机稳定性导数计算
  • ✅ 螺旋桨性能分析(BEMT)
  • ✅ 无人机能量优化和耐久性估算
  • ✅ 发动机-螺旋桨匹配分析
  • ✅ 3自由度火箭轨迹模拟,结合大气层
  • ✅ 任务规划中的火箭尺寸估算
  • ✅ 最佳性能发射角度优化
  • ✅ 使用梯度下降进行推力曲线优化
  • ✅ 设计研究中的轨迹敏感性分析
  • ✅ 系统能力发现和状态报告
  • 轨道力学计算(开普勒元素、状态向量、传播)
  • 地面轨迹计算用于卫星跟踪和可视化
  • 霍曼转移规划用于轨道机动和任务设计
  • 轨道会合规划用于航天器接近操作
  • 轨迹优化使用遗传算法和粒子群优化
  • 蒙特卡洛不确定性分析用于轨迹鲁棒性评估
  • 拉格朗日问题求解用于二体轨迹确定
  • 猪排图生成用于行星际转移机会分析
  • 可选SPICE集成,回退至简化的星历模型

技术特性

  • 🚀 快速:内存中的机场数据库实现微秒级查找
  • 🔧 灵活:插件式后端系统(目前为OpenAP)
  • 📊 准确:使用WGS84大地测量计算
  • 🌐 标准:遵循ICAO飞机代码和IATA机场代码
  • 🔒 可靠:全面的错误处理和优雅降级
  • 📚 详尽文档:带有示例的完整API文档

💾 安装

系统需求

  • Python:3.11+(推荐3.12+以获得最佳性能)
  • 内存:最小512MB RAM(推荐1GB+)
  • 存储:200MB可用空间
  • 网络:初始设置所需的互联网连接

方法1:UV包管理器(推荐)

UV是最快速的Python包管理器,并提供了出色的依赖项解析:

# 安装UV
curl -LsSf https://astral.sh/uv/install.sh | sh  # Linux/macOS
# 或:powershell -c "irm https://astral.sh/uv/install.ps1 | iex"  # Windows

# 克隆仓库
git clone https://github.com/username/aerospace-mcp.git
cd aerospace-mcp

# 创建虚拟环境
uv venv
source .venv/bin/activate  # Linux/macOS
# .venv\Scripts\activate     # Windows

# 安装依赖项
uv add fastapi uvicorn[standard] airportsdata geographiclib pydantic python-dotenv
uv add openap  # 可选:用于性能估算
uv add mcp     # 可选:用于MCP服务器功能

# 安装可选的航空航天分析依赖项
uv add --optional-dependencies atmosphere  # Ambiance用于增强ISA
uv add --optional-dependencies space      # Astropy用于坐标系
uv add --optional-dependencies all        # 所有可选依赖项

# 安装开发依赖项(可选)
uv add --dev pytest httpx black isort mypy pre-commit

# 验证安装
python -c "import main; print('✅ 安装成功')"

方法2:Pip(传统)

# 克隆仓库
git clone https://github.com/username/aerospace-mcp.git
cd aerospace-mcp

# 创建虚拟环境
python -m venv .venv
source .venv/bin/activate  # Linux/macOS
# .venv\Scripts\activate     # Windows

# 升级pip
pip install --upgrade pip

# 安装核心依赖项
pip install fastapi uvicorn[standard] airportsdata geographiclib pydantic python-dotenv

# 安装可选依赖项
pip install openap  # 用于性能估算
pip install mcp     # 用于MCP服务器
pip install python-dotenv  # 用于加载本地/开发中的.env

# 从pyproject.toml安装
pip install -e .

# 验证安装
python -c "import main; print('✅ 安装成功')"

方法3:Docker

# 克隆仓库
git clone https://github.com/username/aerospace-mcp.git
cd aerospace-mcp

# 构建镜像
docker build -t aerospace-mcp .

# 运行容器
docker run -d -p 8080:8080 --name aerospace-mcp aerospace-mcp

# 健康检查
curl http://localhost:8080/health

# 查看日志
docker logs aerospace-mcp

# 停止容器
docker stop aerospace-mcp

方法4:Conda/Mamba

# 创建conda环境
conda create -n aerospace-mcp python=3.11
conda activate aerospace-mcp

# 克隆仓库
git clone https://github.com/username/aerospace-mcp.git
cd aerospace-mcp

# 安装依赖项
conda install fastapi uvicorn pydantic
pip install airportsdata geographiclib openap mcp

# 验证安装
python -c "import main; print('✅ 安装成功')"

安装故障排除

常见问题

OpenAP安装问题

# 如果OpenAP无法安装,尝试以下替代方案
pip install openap --no-cache-dir
pip install openap --force-reinstall
# 或者不安装OpenAP(性能估算不可用)

GeographicLib问题

# 安装系统依赖项(Ubuntu/Debian)
sudo apt-get install libproj-dev proj-data proj-bin

# 安装系统依赖项(macOS)
brew install proj

# 安装系统依赖项(Windows)
# 下载自:https://proj.org/download.html

导入错误

# 验证您的Python环境
python --version  # 应该是3.11+
pip list | grep -E "(fastapi|openap|airportsdata)"

# 测试单独导入
python -c "import fastapi; print('FastAPI OK')"
python -c "import airportsdata; print('AirportsData OK')"
python -c "import openap; print('OpenAP OK')" || echo "OpenAP不可用(可选)"

🎯 使用示例

HTTP API示例

基本飞行计划

# 规划简单飞行
curl -X POST "http://localhost:8080/plan" \
  -H "Content-Type: application/json" \
  -d '{
    "depart_city": "旧金山",
    "arrive_city": "纽约",
    "ac_type": "A320",
    "cruise_alt_ft": 37000,
    "backend": "openap"
  }'

机场搜索

# 按城市查找机场
curl "http://localhost:8080/airports/by_city?city=东京"

# 按国家过滤
curl "http://localhost:8080/airports/by_city?city=伦敦&country=GB"

# 多个结果
curl "http://localhost:8080/airports/by_city?city=巴黎"

高级飞行计划

# 指定确切的机场和飞机质量
curl -X POST "http://localhost:8080/plan" \
  -H "Content-Type: application/json" \
  -d '{
    "depart_city": "洛杉矶",
    "arrive_city": "东京",
    "prefer_depart_iata": "LAX",
    "prefer_arrive_iata": "NRT",
    "ac_type": "B777",
    "cruise_alt_ft": 39000,
    "mass_kg": 220000,
    "route_step_km": 100.0,
    "backend": "openap"
  }'

Python客户端示例

简单客户端

import requests
import json

class AerospaceClient:
    def __init__(self, base_url="http://localhost:8080"):
        self.base_url = base_url

    def plan_flight(self, departure, arrival, aircraft="A320", altitude=35000):
        """在两个城市之间规划航班。"""
        response = requests.post(f"{self.base_url}/plan", json={
            "depart_city": departure,
            "arrive_city": arrival,
            "ac_type": aircraft,
            "cruise_alt_ft": altitude,
            "backend": "openap"
        })
        return response.json()

    def find_airports(self, city, country=None):
        """在一个城市中查找机场。"""
        params = {"city": city}
        if country:
            params["country"] = country
        response = requests.get(f"{self.base_url}/airports/by_city", params=params)
        return response.json()

# 使用
client = AerospaceClient()

# 查找机场
airports = client.find_airports("悉尼", "AU")
print(f"悉尼有 {len(airports)} 个机场")

# 规划航班
plan = client.plan_flight("悉尼", "墨尔本", "B737")
print(f"飞行距离:{plan['distance_nm']:.0f} NM")
print(f"预计飞行时间:{plan['estimates']['block']['time_min']:.0f} 分钟")

批量处理

import asyncio
import aiohttp
from typing import List, Dict

async def plan_multiple_flights(flights: List[Dict]) -> List[Dict]:
    """并发地规划多个航班。"""
    async with aiohttp.ClientSession() as session:
        tasks = []
        for flight in flights:
            task = plan_single_flight(session, flight)
            tasks.append(task)

        results = await asyncio.gather(*tasks, return_exceptions=True)
        return results

async def plan_single_flight(session, flight_data):
    """规划单个航班。"""
    async with session.post(
        "http://localhost:8080/plan",
        json=flight_data
    ) as response:
        return await response.json()

# 示例使用
flights_to_plan = [
    {"depart_city": "纽约", "arrive_city": "伦敦", "ac_type": "A330"},
    {"depart_city": "伦敦", "arrive_city": "迪拜", "ac_type": "B777"},
    {"depart_city": "迪拜", "arrive_city": "新加坡", "ac_type": "A350"}
]

# 运行批量规划
results = asyncio.run(plan_multiple_flights(flights_to_plan))
for i, result in enumerate(results):
    if not isinstance(result, Exception):
        print(f"航班{i+1}:{result['distance_nm']:.0f} NM,{result['estimates']['block']['time_min']:.0f} 分钟")

轨道力学示例

Python示例

import requests

class OrbitalMechanicsClient:
    def __init__(self, base_url="http://localhost:8080"):
        self.base_url = base_url

    def plan_hohmann_transfer(self, r1_km, r2_km):
        """在两个圆形轨道之间计算霍曼转移。"""
        response = requests.post(f"{self.base_url}/hohmann_transfer", json={