X

aerospace-mcp

Information

# Aerospace MCP - Flight Planning API & MCP Server [![Python 3.11+](https://img.shields.io/badge/python-3.11+-blue.svg)](https://www.python.org/downloads/) [![FastAPI](https://img.shields.io/badge/FastAPI-0.104+-green.svg)](https://fastapi.tiangolo.com/) [![OpenAP](https://img.shields.io/badge/OpenAP-Latest-orange.svg)](https://github.com/TUDelft-CNS-ATM/openap) [![MCP Compatible](https://img.shields.io/badge/MCP-Compatible-purple.svg)](https://modelcontextprotocol.io/) [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT) A comprehensive aerospace research and flight planning service providing both HTTP API and Model Context Protocol (MCP) integration. Built with **FastMCP** for streamlined MCP server development. Features intelligent airport resolution, great-circle route calculation, aircraft performance estimation, atmospheric modeling, coordinate frame transformations, aerodynamic analysis, propeller performance modeling, rocket trajectory optimization, orbital mechanics calculations, and spacecraft trajectory planning for aerospace operations. ## ️ SAFETY DISCLAIMER **THIS SOFTWARE IS FOR EDUCATIONAL, RESEARCH, AND DEVELOPMENT PURPOSES ONLY** - **NOT FOR REAL NAVIGATION**: Do not use for actual flight planning or navigation - **NOT CERTIFIED**: This system is not certified by any aviation authority - **ESTIMATES ONLY**: Performance calculations are theoretical estimates - **NO WEATHER DATA**: Does not account for weather, NOTAMs, or airspace restrictions - **NO LIABILITY**: Authors assume no responsibility for any consequences of use For real flight planning, always use certified aviation software and consult official sources including NOTAMs, weather reports, and air traffic control. ## Quick Start ### Option 1: UV (Recommended) \`\`\`bash # Install UV (fast Python package manager) curl -LsSf https://astral.sh/uv/install.sh | sh # Clone and setup git clone https://github.com/username/aerospace-mcp.git cd aerospace-mcp uv venv && source .venv/bin/activate # Windows: .venv\Scripts\activate uv sync # Copy env and configure (optional but recommended) cp .env.example .env # Edit .env as needed (host/port/log level, optional LLM tools) # Run HTTP server (package entrypoint) uv run aerospace-mcp-http # Alternatively (developer style) uvicorn main:app --reload --host 0.0.0.0 --port 8080 # Test the API curl "http://localhost:8080/health" \`\`\` ### Option 2: Docker \`\`\`bash git clone https://github.com/username/aerospace-mcp.git cd aerospace-mcp docker build -t aerospace-mcp . docker run -p 8080:8080 aerospace-mcp # Test the API curl "http://localhost:8080/health" \`\`\` ### Option 3: MCP Client (Claude Desktop) Add to your Claude Desktop configuration: \`\`\`json \{ "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" \} \} \} \} \`\`\` **Note**: The \`env\` section is optional and only needed if you want to enable the AI-powered agent tools for enhanced user experience. ### MCP via CLI \`\`\`bash # Start the MCP server (stdio) uv run aerospace-mcp # Start in SSE mode (optional) uv run aerospace-mcp sse 0.0.0.0 8001 \`\`\` ## Table of Contents - [Features](#features) - [Installation](#installation) - [Usage Examples](#usage-examples) - [Architecture](#architecture) - [FastMCP Migration](#fastmcp-migration) - [Performance](#performance) - [API Documentation](#api-documentation) - [MCP Integration](#mcp-integration) - [Development](#development) - [Contributing](#contributing) - [License](#license) ## Features ### Core Capabilities - **Airport Resolution**: Intelligent city-to-airport mapping with 28,000+ airports worldwide - **Route Planning**: Great-circle distance calculation with geodesic precision - **Performance Estimation**: Aircraft-specific fuel and time calculations via OpenAP - **Atmospheric Modeling**: ISA atmosphere profiles with optional enhanced precision - **Coordinate Transformations**: ECEF, ECI, geodetic frame conversions for aerospace analysis - **Multiple Interfaces**: HTTP REST API and Model Context Protocol (MCP) support - **Real-time Processing**: Sub-second response times for flight planning requests ### Space & Orbital Mechanics Capabilities - ️ **Orbital Elements & State Vectors**: Convert between Keplerian elements and Cartesian state vectors - **Orbit Propagation**: Numerical integration with J2 perturbations using RK4 method - ️ **Ground Track Computation**: Calculate satellite ground tracks for mission planning - **Hohmann Transfers**: Calculate optimal two-impulse orbital transfers - **Orbital Rendezvous**: Plan multi-maneuver rendezvous sequences - **Trajectory Optimization**: Genetic algorithms and particle swarm optimization - **Uncertainty Analysis**: Monte Carlo sampling for trajectory robustness assessment - **Lambert Problem**: Two-body trajectory determination for given time-of-flight ### Supported Operations - Airport search by city name or IATA code - Flight route planning with polyline generation - Aircraft performance estimation (190+ aircraft types) - Fuel consumption and flight time calculations - Great-circle distance calculations - Multi-leg journey planning - Aircraft comparison analysis - Atmospheric profile calculation (ISA standard atmosphere) - Wind profile modeling (logarithmic/power law) - Coordinate frame transformations (ECEF, ECI, geodetic) - Wing aerodynamics analysis (VLM, lifting line theory) - Airfoil polar generation and database access - Aircraft stability derivatives calculation - Propeller performance analysis (BEMT) - UAV energy optimization and endurance estimation - Motor-propeller matching analysis - 3DOF rocket trajectory simulation with atmosphere integration - Rocket sizing estimation for mission planning - Launch angle optimization for maximum performance - Thrust profile optimization using gradient descent - Trajectory sensitivity analysis for design studies - System capability discovery and status reporting - **Orbital mechanics calculations** (Keplerian elements, state vectors, propagation) - **Ground track computation** for satellite tracking and visualization - **Hohmann transfer planning** for orbital maneuvers and mission design - **Orbital rendezvous planning** for spacecraft proximity operations - **Trajectory optimization** using genetic algorithms and particle swarm optimization - **Monte Carlo uncertainty analysis** for trajectory robustness assessment - **Lambert problem solving** for two-body trajectory determination - **Porkchop plot generation** for interplanetary transfer opportunity analysis - **Optional SPICE integration** with fallback to simplified ephemeris models ### Technical Features - **Fast**: In-memory airport database for microsecond lookups - **Flexible**: Pluggable backend system (currently OpenAP) - **Accurate**: Uses WGS84 geodesic calculations - **Standards**: Follows ICAO aircraft codes and IATA airport codes - **Reliable**: Comprehensive error handling and graceful degradation - **Well-documented**: Complete API documentation with examples ## Installation ### System Requirements - **Python**: 3.11+ (3.12+ recommended for best performance) - **Memory**: 512MB RAM minimum (1GB+ recommended) - **Storage**: 200MB free space - **Network**: Internet connection for initial setup ### Method 1: UV Package Manager (Recommended) UV is the fastest Python package manager and provides excellent dependency resolution: \`\`\`bash # Install UV curl -LsSf https://astral.sh/uv/install.sh | sh # Linux/macOS # Or: powershell -c "irm https://astral.sh/uv/install.ps1 | iex" # Windows # Clone repository git clone https://github.com/username/aerospace-mcp.git cd aerospace-mcp # Create virtual environment uv venv source .venv/bin/activate # Linux/macOS # .venv\Scripts\activate # Windows # Install dependencies uv add fastapi uvicorn[standard] airportsdata geographiclib pydantic python-dotenv uv add openap # Optional: for performance estimates uv add mcp # Optional: for MCP server functionality # Install optional aerospace analysis dependencies uv add --optional-dependencies atmosphere # Ambiance for enhanced ISA uv add --optional-dependencies space # Astropy for coordinate frames uv add --optional-dependencies all # All optional dependencies # Install development dependencies (optional) uv add --dev pytest httpx black isort mypy pre-commit # Verify installation python -c "import main; print(' Installation successful')" \`\`\` ### Method 2: Pip (Traditional) \`\`\`bash # Clone repository git clone https://github.com/username/aerospace-mcp.git cd aerospace-mcp # Create virtual environment python -m venv .venv source .venv/bin/activate # Linux/macOS # .venv\Scripts\activate # Windows # Upgrade pip pip install --upgrade pip # Install core dependencies pip install fastapi uvicorn[standard] airportsdata geographiclib pydantic python-dotenv # Install optional dependencies pip install openap # For performance estimates pip install mcp # For MCP server pip install python-dotenv # For loading .env in local/dev # Install from pyproject.toml pip install -e . # Verify installation python -c "import main; print(' Installation successful')" \`\`\` ### Method 3: Docker \`\`\`bash # Clone repository git clone https://github.com/username/aerospace-mcp.git cd aerospace-mcp # Build image docker build -t aerospace-mcp . # Run container docker run -d -p 8080:8080 --name aerospace-mcp aerospace-mcp # Health check curl http://localhost:8080/health # View logs docker logs aerospace-mcp # Stop container docker stop aerospace-mcp \`\`\` ### Method 4: Conda/Mamba \`\`\`bash # Create conda environment conda create -n aerospace-mcp python=3.11 conda activate aerospace-mcp # Clone repository git clone https://github.com/username/aerospace-mcp.git cd aerospace-mcp # Install dependencies conda install fastapi uvicorn pydantic pip install airportsdata geographiclib openap mcp # Verify installation python -c "import main; print(' Installation successful')" \`\`\` ### Troubleshooting Installation #### Common Issues **OpenAP Installation Problems**: \`\`\`bash # Try these alternatives if OpenAP fails to install pip install openap --no-cache-dir pip install openap --force-reinstall # Or install without OpenAP (performance estimates will be unavailable) \`\`\` **GeographicLib Issues**: \`\`\`bash # Install system dependencies (Ubuntu/Debian) sudo apt-get install libproj-dev proj-data proj-bin # Install system dependencies (macOS) brew install proj # Install system dependencies (Windows) # Download from: https://proj.org/download.html \`\`\` **Import Errors**: \`\`\`bash # Verify your Python environment python --version # Should be 3.11+ pip list | grep -E "(fastapi|openap|airportsdata)" # Test individual imports python -c "import fastapi; print('FastAPI OK')" python -c "import airportsdata; print('AirportsData OK')" python -c "import openap; print('OpenAP OK')" || echo "OpenAP not available (optional)" \`\`\` ## Usage Examples ### HTTP API Examples #### Basic Flight Planning \`\`\`bash # Plan a simple flight curl -X POST "http://localhost:8080/plan" \ -H "Content-Type: application/json" \ -d '\{ "depart_city": "San Francisco", "arrive_city": "New York", "ac_type": "A320", "cruise_alt_ft": 37000, "backend": "openap" \}' \`\`\` #### Airport Search \`\`\`bash # Find airports by city curl "http://localhost:8080/airports/by_city?city=Tokyo" # Filter by country curl "http://localhost:8080/airports/by_city?city=London&country=GB" # Multiple results curl "http://localhost:8080/airports/by_city?city=Paris" \`\`\` #### Advanced Flight Planning \`\`\`bash # Specify exact airports and aircraft mass curl -X POST "http://localhost:8080/plan" \ -H "Content-Type: application/json" \ -d '\{ "depart_city": "Los Angeles", "arrive_city": "Tokyo", "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 Client Examples #### Simple Client \`\`\`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): """Plan a flight between two cities.""" 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): """Find airports in a city.""" params = \{"city": city\} if country: params["country"] = country response = requests.get(f"\{self.base_url\}/airports/by_city", params=params) return response.json() # Usage client = AerospaceClient() # Find airports airports = client.find_airports("Sydney", "AU") print(f"Sydney has \{len(airports)\} airports") # Plan flight plan = client.plan_flight("Sydney", "Melbourne", "B737") print(f"Flight distance: \{plan['distance_nm']:.0f\} NM") print(f"Flight time: \{plan['estimates']['block']['time_min']:.0f\} minutes") \`\`\` #### Batch Processing \`\`\`python import asyncio import aiohttp from typing import List, Dict async def plan_multiple_flights(flights: List[Dict]) -> List[Dict]: """Plan multiple flights concurrently.""" 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): """Plan a single flight.""" async with session.post( "http://localhost:8080/plan", json=flight_data ) as response: return await response.json() # Example usage flights_to_plan = [ \{"depart_city": "New York", "arrive_city": "London", "ac_type": "A330"\}, \{"depart_city": "London", "arrive_city": "Dubai", "ac_type": "B777"\}, \{"depart_city": "Dubai", "arrive_city": "Singapore", "ac_type": "A350"\} ] # Run the batch planning results = asyncio.run(plan_multiple_flights(flights_to_plan)) for i, result in enumerate(results): if not isinstance(result, Exception): print(f"Flight \{i+1\}: \{result['distance_nm']:.0f\} NM, \{result['estimates']['block']['time_min']:.0f\} min") \`\`\` ### Orbital Mechanics Examples #### Python Examples \`\`\`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): """Calculate Hohmann transfer between two circular orbits.""" response = requests.post(f"\{self.base_url\}/hohmann_transfer", json=\{ "r1_m": r1_km * 1000, # Convert to meters "r2_m": r2_km * 1000 \}) return response.json() def propagate_satellite_orbit(self, elements, duration_hours): """Propagate satellite orbit with J2 perturbations.""" response = requests.post(f"\{self.base_url\}/propagate_orbit_j2", json=\{ "initial_state": elements, "time_span_s": duration_hours * 3600, "time_step_s": 300 # 5-minute steps \}) return response.json() # Example usage client = OrbitalMechanicsClient() # Plan a GTO to GEO transfer gto_alt = 200 # km (perigee) geo_alt = 35786 # km (GEO altitude) transfer = client.plan_hohmann_transfer( 6378 + gto_alt, # Earth radius + altitude 6378 + geo_alt ) print(f"Transfer Delta-V: \{transfer['delta_v_total_ms']/1000:.2f\} km/s") print(f"Transfer Time: \{transfer['transfer_time_h']:.1f\} hours") # Propagate ISS orbit for one day iss_elements = \{ "semi_major_axis_m": 6793000, # ~415 km altitude "eccentricity": 0.0001, "inclination_deg": 51.6, "raan_deg": 0.0, "arg_periapsis_deg": 0.0, "true_anomaly_deg": 0.0, "epoch_utc": "2024-01-01T12:00:00" \} orbit_states = client.propagate_satellite_orbit(iss_elements, 24) print(f"Propagated \{len(orbit_states)\} orbital states over 24 hours") \`\`\` #### Trajectory Optimization Example \`\`\`python # Optimize a lunar transfer trajectory def optimize_lunar_transfer(): initial_trajectory = [ \{ "time_s": 0, "position_m": [6700000, 0, 0], # LEO "velocity_ms": [0, 7500, 0] \}, \{ "time_s": 86400 * 3, # 3 days "position_m": [384400000, 0, 0], # Moon distance "velocity_ms": [0, 1000, 0] \} ] response = requests.post("http://localhost:8080/genetic_algorithm_optimization", json=\{ "initial_trajectory": initial_trajectory, "objective": "minimize_delta_v", "constraints": \{ "max_thrust_n": 50000, "max_acceleration_ms2": 10 \} \}) result = response.json() print(f"Optimized Delta-V: \{result['total_delta_v_ms']/1000:.2f\} km/s") print(f"Flight Time: \{result['flight_time_s']/86400:.1f\} days") return result optimized_trajectory = optimize_lunar_transfer() # Generate porkchop plot for Mars mission planning def plan_mars_mission(): response = requests.post("http://localhost:8080/porkchop_plot_analysis", json=\{ "departure_body": "Earth", "arrival_body": "Mars", "min_tof_days": 200, "max_tof_days": 300 \}) analysis = response.json() if analysis["summary_statistics"]["feasible_transfers"] > 0: optimal = analysis["optimal_transfer"] print(f"Optimal Mars Transfer:") print(f" Launch: \{optimal['departure_date']\}") print(f" Arrival: \{optimal['arrival_date']\}") print(f" C3: \{optimal['c3_km2_s2']:.2f\} km²/s²") print(f" Flight Time: \{optimal['time_of_flight_days']:.0f\} days") else: print("No feasible transfers found in date range") plan_mars_mission() \`\`\` ### JavaScript/TypeScript Examples \`\`\`typescript interface FlightPlan \{ depart_city: string; arrive_city: string; ac_type: string; cruise_alt_ft?: number; backend: "openap"; \} class AerospaceAPI \{ constructor(private baseUrl: string = "http://localhost:8080") \{\} async planFlight(request: FlightPlan) \{ const response = await fetch(\`$\{this.baseUrl\}/plan\`, \{ method: "POST", headers: \{ "Content-Type": "application/json" \}, body: JSON.stringify(request), \}); if (!response.ok) \{ throw new Error(\`API Error: $\{response.statusText\}\`); \} return await response.json(); \} async findAirports(city: string, country?: string) \{ const params = new URLSearchParams(\{ city \}); if (country) params.append("country", country); const response = await fetch(\`$\{this.baseUrl\}/airports/by_city?$\{params\}\`); return await response.json(); \} \} // Usage const api = new AerospaceAPI(); try \{ const plan = await api.planFlight(\{ depart_city: "Boston", arrive_city: "Seattle", ac_type: "B737", cruise_alt_ft: 36000, backend: "openap" \}); console.log(\`Flight planned: $\{plan.distance_nm\} NM\`); console.log(\`Estimated time: $\{plan.estimates.block.time_min\} minutes\`); \} catch (error) \{ console.error("Flight planning failed:", error); \} \`\`\` ## ️ Architecture ### System Overview \`\`\`mermaid graph TB Users[Users/Clients] --> API[FastAPI REST API] Users --> MCP[MCP Server] API --> Core[Core Services] MCP --> Core subgraph "Core Services" Airport[Airport Resolution] Route[Route Calculation] Perf[Performance Estimation] end subgraph "Data Sources" AirportDB[Airport Database
28,000+ airports] OpenAP[OpenAP Models
190+ aircraft] Geodesic[GeographicLib
WGS84 calculations] end Airport --> AirportDB Route --> Geodesic Perf --> OpenAP \`\`\` ### Key Components 1. **FastAPI Application** (\`main.py\`) - RESTful endpoints for HTTP clients - Auto-generated OpenAPI documentation - Request/response validation with Pydantic 2. **MCP Server** (\`aerospace_mcp/server.py\`) - Model Context Protocol implementation - Tool-based interface for AI assistants - Async request handling 3. **Core Services** - **Airport Resolution**: City → Airport mapping with intelligent selection - **Route Calculation**: Great-circle paths with polyline generation - **Performance Estimation**: OpenAP-based fuel and time calculations 4. **Data Layer** - **In-memory Airport Database**: 28,000+ airports loaded at startup - **OpenAP Integration**: Aircraft performance models - **GeographicLib**: Precise geodesic calculations ### Design Principles - **Performance First**: In-memory data structures for sub-millisecond lookups - **Graceful Degradation**: Works without optional dependencies - **Type Safety**: Full type hints and Pydantic validation - **Extensible**: Plugin architecture for new backends - **Standards Compliant**: ICAO, IATA, and OpenAP standards ## FastMCP Migration This project has been **migrated from the traditional MCP SDK to FastMCP**, providing significant improvements in developer experience and code maintainability. ### What is FastMCP? [FastMCP](https://github.com/jlowin/fastmcp) is a high-level, Pythonic framework for building Model Context Protocol servers. It dramatically reduces boilerplate code while maintaining full MCP compatibility. ### Migration Benefits **70% Less Code**: Tool definitions went from verbose JSON schemas to simple Python decorators **Better Type Safety**: Automatic schema generation from type hints **Cleaner Architecture**: Modular tool organization across logical domains **Improved Maintainability**: Pythonic code that's easier to read and extend **Full Compatibility**: Same MCP protocol, works with all existing clients ### Before vs After **Before (Traditional MCP SDK):** \`\`\`python Tool( name="search_airports", description="Search for airports by IATA code or city name", inputSchema=\{ "type": "object", "properties": \{ "query": \{"type": "string", "description": "IATA code or city name"\}, "country": \{"type": "string", "description": "Optional country filter"\}, "query_type": \{"type": "string", "enum": ["iata", "city", "auto"]\} \}, "required": ["query"] \} ) @server.call_tool() async def handle_call_tool(name: str, arguments: dict): if name == "search_airports": return await _handle_search_airports(arguments) # ... 30+ more tool handlers \`\`\` ## ️ Configuration (.env) Both the HTTP server and MCP servers automatically load environment variables from a local \`.env\` (via \`python-dotenv\`). - \`AEROSPACE_MCP_MODE\`: \`http\` or \`mcp\` (Docker entrypoint switch) - \`AEROSPACE_MCP_HOST\`: Bind host for HTTP (default \`0.0.0.0\`) - \`AEROSPACE_MCP_PORT\`: Port for HTTP (default \`8080\`) - \`AEROSPACE_MCP_LOG_LEVEL\`: \`debug|info|warning|error\` (default \`info\`) - \`AEROSPACE_MCP_ENV\`: \`development|production\` (controls reload) - \`LLM_TOOLS_ENABLED\`: \`true|false\` to enable AI agent tools (default \`false\`) - \`OPENAI_API_KEY\`: Required if LLM tools are enabled Example \`.env\`: \`\`\` AEROSPACE_MCP_MODE=http AEROSPACE_MCP_HOST=0.0.0.0 AEROSPACE_MCP_PORT=8080 AEROSPACE_MCP_LOG_LEVEL=debug LLM_TOOLS_ENABLED=false # OPENAI_API_KEY=sk-... \`\`\` **After (FastMCP):** \`\`\`python @mcp.tool def search_airports( query: str, country: str | None = None, query_type: Literal["iata", "city", "auto"] = "auto" ) -> str: """Search for airports by IATA code or city name.""" # Implementation here \`\`\` ### Architecture Improvements The FastMCP refactoring introduced a **modular architecture** with tools organized by domain: - \`tools/core.py\` - Core flight planning (search, plan, distance, performance) - \`tools/atmosphere.py\` - Atmospheric modeling and wind analysis - \`tools/frames.py\` - Coordinate frame transformations - \`tools/aerodynamics.py\` - Wing analysis and airfoil polars - \`tools/propellers.py\` - Propeller BEMT and UAV energy analysis - \`tools/rockets.py\` - Rocket trajectory and sizing - \`tools/orbits.py\` - Orbital mechanics and propagation - \`tools/optimization.py\` - Trajectory optimization algorithms ### Compatibility Notes - **Entry Point**: Now uses \`aerospace_mcp.fastmcp_server:run\` - **Dependencies**: Includes \`fastmcp>=2.11.3\` instead of raw \`mcp\` - **Server Name**: Still \`aerospace-mcp\` for client compatibility - **All Tools**: All 30+ tools maintain exact same names and parameters ## Performance ### Benchmarks | Operation | Response Time | Throughput | Memory Usage | |-----------|---------------|------------|--------------| | Health Check | < 1ms | 10,000+ req/sec | ~5MB | | Airport Search | 1-5ms | 1,000+ req/sec | ~50MB | | Flight Planning | 200-500ms | 5-10 req/sec | ~100MB | | Distance Calc | 10-50ms | 100+ req/sec | ~50MB | ### Optimization Tips 1. **Route Resolution**: Use larger \`route_step_km\` values for faster processing 2. **Caching**: Implement client-side caching for repeated requests 3. **Batch Processing**: Use async clients for multiple concurrent requests 4. **Memory**: Increase available RAM for better OpenAP performance ### Scaling Considerations - **Horizontal Scaling**: Stateless design allows multiple instances - **Load Balancing**: Standard HTTP load balancers work well - **Database**: Consider external database for airport data at scale - **Caching**: Add Redis for shared cache across instances ## API Documentation ### Interactive Documentation When running the server, comprehensive API documentation is available at: - **Swagger UI**: http://localhost:8080/docs - **ReDoc**: http://localhost:8080/redoc - **OpenAPI Schema**: http://localhost:8080/openapi.json ### Core Endpoints #### GET /health Health check and system status. **Response**: \`\`\`json \{ "status": "ok", "openap": true, "airports_count": 28756 \} \`\`\` #### GET /airports/by_city Search airports by city name. **Parameters**: - \`city\` (required): City name to search - \`country\` (optional): ISO country code filter **Example**: \`GET /airports/by_city?city=London&country=GB\` #### POST /plan Generate complete flight plan. **Request Body**: \`\`\`json \{ "depart_city": "San Francisco", "arrive_city": "New York", "ac_type": "A320", "cruise_alt_ft": 37000, "mass_kg": 65000, "route_step_km": 25.0, "backend": "openap" \} \`\`\` **Response**: Complete flight plan with route polyline and performance estimates. ### Error Handling All endpoints return standard HTTP status codes: - \`200\`: Success - \`400\`: Bad Request (invalid parameters) - \`404\`: Not Found (airport/city not found) - \`501\`: Not Implemented (backend unavailable) Error responses include detailed messages: \`\`\`json \{ "detail": "departure: IATA 'XYZ' not found." \} \`\`\` ## MCP Integration ### Supported MCP Clients - **Claude Desktop**: Native integration - **VS Code Continue**: Plugin support - **Custom Clients**: Standard MCP protocol ### Available Tools | Tool | Description | Parameters | |------|-------------|------------| | \`search_airports\` | Find airports by IATA or city | \`query\`, \`country\`, \`query_type\` | | \`plan_flight\` | Complete flight planning | \`departure\`, \`arrival\`, \`aircraft\`, \`route_options\` | | \`calculate_distance\` | Great-circle distance | \`origin\`, \`destination\`, \`step_km\` | | \`get_aircraft_performance\` | Performance estimates | \`aircraft_type\`, \`distance_km\`, \`cruise_altitude\` | | \`get_atmosphere_profile\` | ISA atmosphere conditions | \`altitudes_m\`, \`model_type\` | | \`wind_model_simple\` | Wind profile calculation | \`altitudes_m\`, \`surface_wind_mps\`, \`model\` | | \`transform_frames\` | Coordinate transformations | \`xyz\`, \`from_frame\`, \`to_frame\`, \`epoch_iso\` | | \`geodetic_to_ecef\` | Lat/lon to ECEF conversion | \`latitude_deg\`, \`longitude_deg\`, \`altitude_m\` | | \`ecef_to_geodetic\` | ECEF to lat/lon conversion | \`x\`, \`y\`, \`z\` | | \`wing_vlm_analysis\` | Wing aerodynamics analysis (VLM) | \`geometry\`, \`alpha_deg_list\`, \`mach\` | | \`airfoil_polar_analysis\` | Airfoil polar generation | \`airfoil_name\`, \`alpha_deg_list\`, \`reynolds\`, \`mach\` | | \`calculate_stability_derivatives\` | Stability derivatives calculation | \`geometry\`, \`alpha_deg\`, \`mach\` | | \`propeller_bemt_analysis\` | Propeller performance (BEMT) | \`geometry\`, \`rpm_list\`, \`velocity_ms\`, \`altitude_m\` | | \`uav_energy_estimate\` | UAV endurance and energy analysis | \`uav_config\`, \`battery_config\`, \`mission_profile\` | | \`get_airfoil_database\` | Available airfoil coefficients | None | | \`get_propeller_database\` | Available propeller data | None | | \`rocket_3dof_trajectory\` | 3DOF rocket trajectory simulation | \`geometry\`, \`dt_s\`, \`max_time_s\`, \`launch_angle_deg\` | | \`estimate_rocket_sizing\` | Rocket sizing for mission requirements | \`target_altitude_m\`, \`payload_mass_kg\`, \`propellant_type\` | | \`optimize_launch_angle\` | Launch angle optimization | \`geometry\`, \`objective\`, \`angle_bounds\` | | \`optimize_thrust_profile\` | Thrust profile optimization | \`geometry\`, \`burn_time_s\`, \`total_impulse_target\`, \`n_segments\`, \`objective\` | | \`trajectory_sensitivity_analysis\` | Parameter sensitivity analysis | \`base_geometry\`, \`parameter_variations\`, \`objective\` | | \`get_system_status\` | System health and capabilities | None | | \`elements_to_state_vector\` | Convert orbital elements to state vector | \`elements\` | | \`state_vector_to_elements\` | Convert state vector to orbital elements | \`state_vector\` | | \`propagate_orbit_j2\` | Propagate orbit with J2 perturbations | \`initial_state\`, \`time_span_s\`, \`time_step_s\` | | \`calculate_ground_track\` | Calculate satellite ground track | \`orbit_states\`, \`time_step_s\` | | \`hohmann_transfer\` | Calculate Hohmann transfer orbit | \`r1_m\`, \`r2_m\` | | \`orbital_rendezvous_planning\` | Plan orbital rendezvous maneuvers | \`chaser_elements\`, \`target_elements\` | | \`genetic_algorithm_optimization\` | Trajectory optimization using GA | \`initial_trajectory\`, \`objective\`, \`constraints\` | | \`particle_swarm_optimization\` | Trajectory optimization using PSO | \`initial_trajectory\`, \`objective\`, \`constraints\` | | \`monte_carlo_uncertainty_analysis\` | Monte Carlo trajectory uncertainty analysis | \`trajectory\`, \`uncertainty_params\`, \`num_samples\` | | \`porkchop_plot_analysis\` | Generate porkchop plot for interplanetary transfers | \`departure_body\`, \`arrival_body\`, \`departure_dates\`, \`arrival_dates\`, \`min_tof_days\`, \`max_tof_days\` | ### Claude Desktop Setup 1. Open Claude Desktop Settings 2. Add server configuration: \`\`\`json \{ "mcpServers": \{ "aerospace-mcp": \{ "command": "python", "args": ["-m", "aerospace_mcp.server"], "cwd": "/path/to/aerospace-mcp", "env": \{ "PYTHONPATH": "/path/to/aerospace-mcp" \} \} \} \} \`\`\` 3. Restart Claude Desktop 4. Test with: "Search for airports in Tokyo" ### VS Code Continue Setup Add to your \`config.json\`: \`\`\`json \{ "mcpServers": [ \{ "name": "aerospace-mcp", "command": "python", "args": ["-m", "aerospace_mcp.server"], "workingDirectory": "/path/to/aerospace-mcp" \} ] \} \`\`\` ## ️ Development ### Development Setup \`\`\`bash # Clone and setup git clone https://github.com/username/aerospace-mcp.git cd aerospace-mcp # Create development environment uv venv source .venv/bin/activate uv add --dev pytest httpx black isort mypy pre-commit # Install pre-commit hooks pre-commit install # Run development server uvicorn main:app --reload --log-level debug \`\`\` ### Testing \`\`\`bash # Run all tests pytest # Run with coverage pytest --cov=. --cov-report=html # Run specific test file pytest tests/test_main.py -v # Performance testing pytest tests/test_performance.py -v \`\`\` ### Code Quality \`\`\`bash # Format code black . && isort . # Type checking mypy main.py aerospace_mcp/ # Linting ruff check . # Pre-commit (runs all checks) pre-commit run --all-files \`\`\` ### Project Structure \`\`\` aerospace-mcp/ ├── main.py # FastAPI application ├── aerospace_mcp/ # MCP server implementation │ ├── __init__.py │ ├── server.py # MCP server │ └── core.py # Shared business logic ├── app/ # Alternative FastAPI structure │ ├── __init__.py │ └── main.py ├── tests/ # Test suite │ ├── conftest.py │ ├── test_main.py │ ├── test_airports.py │ ├── test_plan.py │ └── test_mcp.py ├── docs/ # Documentation │ ├── API.md │ ├── ARCHITECTURE.md │ ├── INTEGRATION.md │ ├── QUICKSTART.md │ ├── DEPLOYMENT.md │ └── MCP_INTEGRATION.md ├── pyproject.toml # Project configuration ├── requirements.txt # Dependencies ├── Dockerfile # Docker configuration ├── docker-compose.yml # Multi-service setup └── README.md # This file \`\`\` ## Contributing We welcome contributions! Please see [CONTRIBUTING.md](docs/CONTRIBUTING.md) for detailed guidelines. ### Quick Contributing Guide 1. **Fork & Clone** \`\`\`bash git clone https://github.com/yourusername/aerospace-mcp.git cd aerospace-mcp \`\`\` 2. **Setup Development Environment** \`\`\`bash uv venv && source .venv/bin/activate uv add --dev pytest httpx black isort mypy \`\`\` 3. **Make Changes** - Add features or fix bugs - Write tests for new functionality - Update documentation as needed 4. **Test & Format** \`\`\`bash pytest black . && isort . mypy main.py \`\`\` 5. **Submit Pull Request** - Clear title and description - Reference any related issues - Ensure CI/CD checks pass ### Areas for Contribution - **New Aircraft Support**: Add more aircraft types to OpenAP - **Weather Integration**: Add weather data sources - **Route Optimization**: Implement waypoint optimization - **UI/Frontend**: Web interface for flight planning - **Database Backend**: PostgreSQL/MongoDB integration - **Performance**: Optimization and caching improvements ## Documentation ### Complete Documentation - [**Quick Start Guide**](docs/QUICKSTART.md) - Get up and running in 5 minutes - [**API Reference**](docs/API.md) - Complete REST API documentation - [**MCP Integration**](docs/MCP_INTEGRATION.md) - Model Context Protocol setup - [**Architecture Guide**](docs/ARCHITECTURE.md) - System design and components - [**Deployment Guide**](docs/DEPLOYMENT.md) - Production deployment strategies - [**Contributing Guide**](docs/CONTRIBUTING.md) - Development and contribution guidelines - [**Integration Guide**](docs/INTEGRATION.md) - Client integration examples ### Examples Repository Check out the [examples repository](https://github.com/username/aerospace-mcp-examples) for: - Complete client implementations - Integration patterns - Performance benchmarks - Real-world use cases ## License This project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details. ### Third-Party Acknowledgments - **OpenAP**: Aircraft performance modeling - [TU Delft](https://github.com/TUDelft-CNS-ATM/openap) - **AirportsData**: Airport database - [mborsetti](https://github.com/mborsetti/airportsdata) - **GeographicLib**: Geodesic calculations - [Charles Karney](https://geographiclib.sourceforge.io/) - **FastAPI**: Modern web framework - [Sebastián Ramírez](https://github.com/tiangolo/fastapi) ## Support & Community ### Getting Help - **GitHub Issues**: Bug reports and feature requests - **GitHub Discussions**: Questions and community support - **Documentation**: Comprehensive guides in \`/docs\` - **Examples**: Code examples and tutorials ### Community - **Discord**: WIP for real-time chat ### Professional Support For enterprise support, consulting, or custom development: - Email: hello@aeroastro.org - Website: https://aeroastro.org --- **⭐ Star this repository if you find it useful!** Built with ️ for the aviation and software development communities.

Prompts

Reviews

Tags

Write Your Review

Detailed Ratings

ALL
Correctness
Helpfulness
Interesting
Upload Pictures and Videos

Name
Size
Type
Download
Last Modified
  • Community

Add Discussion

Upload Pictures and Videos