aerospace-mcp

cheesejaguar/aerospace-mcp

3.3

If you are the rightful owner of aerospace-mcp and would like to certify it and/or have it hosted online, please leave a comment on the right or send an email to henry@mcphub.com.

Aerospace MCP - Flight Planning API & MCP Server provides a comprehensive aerospace research and flight planning service with both HTTP API and Model Context Protocol (MCP) integration.

Tools
5
Resources
0
Prompts
0

Aerospace MCP - Flight Planning API & MCP Server

Python 3.11+ FastAPI OpenAP MCP Compatible License: 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)

# 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

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:

{
  "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

# 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

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:

# 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)

# 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

# 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

# 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:

# 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:

# 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:

# 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
# 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
# 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
# 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
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
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
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
# 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

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

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<br/>28,000+ airports]
        OpenAP[OpenAP Models<br/>190+ aircraft]
        Geodesic[GeographicLib<br/>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 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):

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):

@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

OperationResponse TimeThroughputMemory Usage
Health Check< 1ms10,000+ req/sec~5MB
Airport Search1-5ms1,000+ req/sec~50MB
Flight Planning200-500ms5-10 req/sec~100MB
Distance Calc10-50ms100+ 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:

Core Endpoints

GET /health

Health check and system status.

Response:

{
  "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:

{
  "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:

{
  "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

ToolDescriptionParameters
search_airportsFind airports by IATA or cityquery, country, query_type
plan_flightComplete flight planningdeparture, arrival, aircraft, route_options
calculate_distanceGreat-circle distanceorigin, destination, step_km
get_aircraft_performancePerformance estimatesaircraft_type, distance_km, cruise_altitude
get_atmosphere_profileISA atmosphere conditionsaltitudes_m, model_type
wind_model_simpleWind profile calculationaltitudes_m, surface_wind_mps, model
transform_framesCoordinate transformationsxyz, from_frame, to_frame, epoch_iso
geodetic_to_ecefLat/lon to ECEF conversionlatitude_deg, longitude_deg, altitude_m
ecef_to_geodeticECEF to lat/lon conversionx, y, z
wing_vlm_analysisWing aerodynamics analysis (VLM)geometry, alpha_deg_list, mach
airfoil_polar_analysisAirfoil polar generationairfoil_name, alpha_deg_list, reynolds, mach
calculate_stability_derivativesStability derivatives calculationgeometry, alpha_deg, mach
propeller_bemt_analysisPropeller performance (BEMT)geometry, rpm_list, velocity_ms, altitude_m
uav_energy_estimateUAV endurance and energy analysisuav_config, battery_config, mission_profile
get_airfoil_databaseAvailable airfoil coefficientsNone
get_propeller_databaseAvailable propeller dataNone
rocket_3dof_trajectory3DOF rocket trajectory simulationgeometry, dt_s, max_time_s, launch_angle_deg
estimate_rocket_sizingRocket sizing for mission requirementstarget_altitude_m, payload_mass_kg, propellant_type
optimize_launch_angleLaunch angle optimizationgeometry, objective, angle_bounds
optimize_thrust_profileThrust profile optimizationgeometry, burn_time_s, total_impulse_target, n_segments, objective
trajectory_sensitivity_analysisParameter sensitivity analysisbase_geometry, parameter_variations, objective
get_system_statusSystem health and capabilitiesNone
elements_to_state_vectorConvert orbital elements to state vectorelements
state_vector_to_elementsConvert state vector to orbital elementsstate_vector
propagate_orbit_j2Propagate orbit with J2 perturbationsinitial_state, time_span_s, time_step_s
calculate_ground_trackCalculate satellite ground trackorbit_states, time_step_s
hohmann_transferCalculate Hohmann transfer orbitr1_m, r2_m
orbital_rendezvous_planningPlan orbital rendezvous maneuverschaser_elements, target_elements
genetic_algorithm_optimizationTrajectory optimization using GAinitial_trajectory, objective, constraints
particle_swarm_optimizationTrajectory optimization using PSOinitial_trajectory, objective, constraints
monte_carlo_uncertainty_analysisMonte Carlo trajectory uncertainty analysistrajectory, uncertainty_params, num_samples
porkchop_plot_analysisGenerate porkchop plot for interplanetary transfersdeparture_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:
{
  "mcpServers": {
    "aerospace-mcp": {
      "command": "python",
      "args": ["-m", "aerospace_mcp.server"],
      "cwd": "/path/to/aerospace-mcp",
      "env": {
        "PYTHONPATH": "/path/to/aerospace-mcp"
      }
    }
  }
}
  1. Restart Claude Desktop
  2. Test with: "Search for airports in Tokyo"

VS Code Continue Setup

Add to your config.json:

{
  "mcpServers": [
    {
      "name": "aerospace-mcp",
      "command": "python",
      "args": ["-m", "aerospace_mcp.server"],
      "workingDirectory": "/path/to/aerospace-mcp"
    }
  ]
}

πŸ› οΈ Development

Development Setup

# 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

# 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

# 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 for detailed guidelines.

Quick Contributing Guide

  1. Fork & Clone

    git clone https://github.com/yourusername/aerospace-mcp.git
    cd aerospace-mcp
    
  2. Setup Development Environment

    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

    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

  • - Get up and running in 5 minutes
  • - Complete REST API documentation
  • - Model Context Protocol setup
  • - System design and components
  • - Production deployment strategies
  • - Development and contribution guidelines
  • - Client integration examples

Examples Repository

Check out the examples repository for:

  • Complete client implementations
  • Integration patterns
  • Performance benchmarks
  • Real-world use cases

πŸ“„ License

This project is licensed under the MIT License - see the file for details.

Third-Party Acknowledgments

πŸ†˜ 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:


⭐ Star this repository if you find it useful!

Built with ❀️ for the aviation and software development communities.