Skip to main content
Glama

Aerospace MCP - Flight Planning API & MCP Server

Python 3.11+ FastAPI OpenAP MCP Compatible NumPy GPU Ready 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.

Related MCP server: IATA-Geo-Core

πŸš€ Quick Start

The only prerequisite is uv, which also fetches Python 3.11+ if your system has none. Releases on PyPI ship prebuilt wheels for Linux (x86_64 and arm64, glibc 2.28+ and musl), macOS 11+ (Intel and Apple Silicon) and Windows x64, so no Rust toolchain or compiler is needed.

curl -LsSf https://astral.sh/uv/install.sh | sh   # Linux / macOS

Claude Code: MCP server + skills in one line

claude plugin marketplace add cheesejaguar/aerospace-mcp && claude plugin install aerospace-mcp@aerospace-mcp

Inside a session (Claude Code 2.1.275 or later) the same is /plugin install aerospace-mcp --marketplace cheesejaguar/aerospace-mcp. The plugin starts the MCP server with uvx aerospace-mcp and adds the skills in skills/. For the MCP server alone: claude mcp add aerospace -- uvx aerospace-mcp.

Skills for other agents (Cursor, Codex, OpenCode, ...)

npx skills add cheesejaguar/aerospace-mcp

The skills run tools through uvx --from aerospace-mcp aerospace-mcp-cli, so they need uv too (and Node.js for npx).

Claude Desktop and other MCP clients

{
  "mcpServers": {
    "aerospace": {
      "command": "uvx",
      "args": ["aerospace-mcp"]
    }
  }
}

GUI apps on macOS do not inherit your shell's PATH: if the client cannot find uvx, use the absolute path printed by which uvx (usually ~/.local/bin/uvx). The first launch downloads about 300 MB of dependencies; run uvx --from aerospace-mcp aerospace-mcp-cli list once beforehand so the client's server start-up timeout is not spent on the download.

CLI and HTTP API

uvx --from aerospace-mcp aerospace-mcp-cli run hohmann_transfer --r1_m 6778000 --r2_m 42164000
uvx --from aerospace-mcp aerospace-mcp-http        # http://localhost:8080/docs
uv tool install aerospace-mcp                      # all three commands on PATH

Optional extras work the same way, e.g. uvx --from 'aerospace-mcp[llm]' aerospace-mcp for the LLM agent tools (set LLM_TOOLS_ENABLED=true and OPENAI_API_KEY).

From source (development)

Building from a checkout compiles the native core, so it needs a Rust toolchain:

curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh   # Rust (rustup)
git clone https://github.com/cheesejaguar/aerospace-mcp.git
cd aerospace-mcp
uv sync                               # builds aerospace_mcp._native

cp .env.example .env                  # optional: host/port/log level, LLM tools
uv run aerospace-mcp                  # MCP server (stdio)
uv run aerospace-mcp sse 0.0.0.0 8001 # MCP server (SSE, debugging)
uv run aerospace-mcp-http             # HTTP API
uvicorn main:app --reload --port 8080 # HTTP API with auto-reload

Docker

git clone https://github.com/cheesejaguar/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"

πŸ“‹ Table of Contents

✨ Features

Core Capabilities

  • Airport Resolution: Intelligent city-to-airport mapping with 7,861 IATA 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 (native Rust core)

  • πŸ—ΊοΈ 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 (Izzo's 2015 algorithm, multi-revolution and retrograde; native Rust core)

Supported Operations

  • βœ… Airport search by city name or IATA code

  • βœ… Flight route planning with polyline generation

  • βœ… Aircraft performance estimation (37 aircraft models via OpenAP)

  • βœ… Fuel consumption and flight time calculations

  • βœ… Great-circle distance calculations

  • βœ… Multi-leg journey planning (plan_multi_leg_flight, 2-10 waypoints with aggregated totals)

  • βœ… Wind-aware flight planning (optional headwind-adjusted cruise speed, time, and fuel)

  • βœ… Aircraft database browsing and search (get_aircraft_database)

  • βœ… Unit conversions (length, speed, mass, pressure, temperature, angle)

  • βœ… 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

  • βœ… Density altitude calculation for performance planning

  • βœ… Airspeed conversions (IAS/CAS/EAS/TAS/Mach)

  • βœ… Stall speed calculation for different configurations

  • βœ… Weight and balance calculations with CG limits

  • βœ… Takeoff/landing performance distance and V-speeds

  • βœ… Fuel reserve calculation per FAR/ICAO regulations

  • βœ… Kalman filter state estimation for sensor fusion

  • βœ… LQR controller design for optimal control

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

  • ⚑ Hardware Optimized: NumPy vectorization with CuPy GPU acceleration support

  • πŸ”„ Batch Processing: Vectorized operations for efficient bulk calculations

  • πŸ” Tool Discovery: Dynamic tool search for finding relevant tools from 47 specialized tools plus 2 discovery tools

πŸ’Ύ Installation

System Requirements

  • uv (recommended) or pip with Python 3.11+

  • Prebuilt wheels: Linux x86_64/arm64 (glibc 2.28+ or musl 1.2+), macOS 11+ (Intel and Apple Silicon), Windows x64. Other platforms install from the source distribution, which needs a Rust toolchain.

  • Disk: about 300 MB for the default install (about 500 MB with [llm])

  • Network: for the first install; the airport database and aircraft models ship with the packages and work offline

With uv (no clone)

uvx aerospace-mcp                               # MCP server (stdio), run in place
uvx --from aerospace-mcp aerospace-mcp-cli list # any command, run in place
uv tool install aerospace-mcp                   # install the commands on PATH
uv tool upgrade aerospace-mcp                   # later: upgrade

uvx caches the environment after the first run. To pick up a new release with uvx, run uvx aerospace-mcp@latest once.

With pip

python3 -m venv .venv && source .venv/bin/activate   # Windows: .venv\Scripts\activate
python -m pip install --upgrade pip                  # old pips miss the manylinux_2_28 / musllinux wheels
pip install aerospace-mcp                            # or 'aerospace-mcp[llm]', 'aerospace-mcp[all]'
aerospace-mcp-cli list

Extras: llm (LLM agent tools), atmosphere, aircraft, rockets, space, gnc, all.

From source

See From source (development): uv sync (or pip install -e .) in a checkout, with Rust installed via rustup.

Docker

git clone https://github.com/cheesejaguar/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

The image builds the native core itself (Rust is installed in the build stage only) and includes the llm extra.

Troubleshooting Installation

The MCP client cannot start the server / uvx: command not found: GUI apps (Claude Desktop on macOS in particular) do not see the PATH from your shell profile. Put the absolute path from which uvx in the command field.

The MCP client times out on first launch: the first uvx run downloads the dependencies. Run uvx --from aerospace-mcp aerospace-mcp-cli list once in a terminal, then restart the client.

error: can't find Rust compiler / Failed to build aerospace-mcp: the installer found no wheel for your platform and fell back to the source distribution. Upgrade pip (python -m pip install --upgrade pip); if your platform has no prebuilt wheel (see above), install Rust with curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh and retry.

LLM agent tools report that LiteLLM is not installed: install the llm extra (pip install 'aerospace-mcp[llm]', or uvx --from 'aerospace-mcp[llm]' aerospace-mcp).

Check an installation:

aerospace-mcp-cli run get_system_status   # optional packages and their versions
aerospace-mcp-cli run hohmann_transfer --r1_m 6778000 --r2_m 42164000

🎯 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"
  }'
# 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,
            "propagation_time_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/>7,861 IATA airports]
        OpenAP[OpenAP Models<br/>37 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/fastmcp_server.py)

    • Model Context Protocol implementation via FastMCP

    • 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: 7,861 IATA airports loaded at startup

    • OpenAP Integration: Aircraft performance models

    • GeographicLib: Precise geodesic calculations

  5. Native Core (rust/, imported as aerospace_mcp._native)

    • Rust + PyO3 extension for the numerically heavy code: 3-DOF rocket simulation and performance analysis, the launch-angle and thrust-profile optimizers, Kepler / element conversions, J2 orbit propagation, ground tracks, Hohmann transfers, and Izzo's Lambert solver

    • Optimizers evaluate every candidate trajectory natively (no Python call per evaluation), roughly 190x faster than the former pure-Python loop; the MCP server, tool wrappers and data models remain Python

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

  • Hardware Agnostic: NumPy/CuPy abstraction for CPU/GPU flexibility

πŸš€ 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)
    # ... 40+ more tool handlers

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

Integration modules with NumPy vectorization:

  • integrations/_array_backend.py - NumPy/CuPy abstraction layer for GPU support

  • integrations/atmosphere.py - Vectorized ISA atmosphere calculations

  • integrations/aero.py - Vectorized aerodynamics computations

  • integrations/rockets.py - Vectorized trajectory integration

  • integrations/frames.py - Vectorized coordinate transformations

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 47 tools maintain exact same names and parameters

βš™οΈ 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

HTTP API hardening (the FastAPI app in main.py is a thin layer over aerospace_mcp/core.py):

  • CORS_ORIGINS: Comma-separated list of allowed origins; CORS is disabled when unset

  • RATE_LIMIT_RPM: Per-IP requests per minute (default 120, 0 disables rate limiting)

  • MAX_BODY_BYTES: Maximum accepted request body size (default 1 MiB)

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

⚑ 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

GPU Acceleration (CuPy)

The aerospace calculations are optimized using NumPy's vectorized operations, with a drop-in CuPy backend for GPU acceleration on CUDA-capable hardware.

Enabling GPU Acceleration

# In your code, before using aerospace functions:
from aerospace_mcp.integrations._array_backend import set_backend, get_backend_info

# Check available backends
print(get_backend_info())
# {'current_backend': 'numpy', 'numpy_available': True, 'cupy_available': True, ...}

# Switch to GPU (requires CuPy and CUDA)
set_backend('cupy')

# Switch back to CPU
set_backend('numpy')

Installing CuPy

# For CUDA 11.x
pip install cupy-cuda11x

# For CUDA 12.x
pip install cupy-cuda12x

# Auto-detect CUDA version
pip install cupy

Modules with GPU Support

The following integration modules support GPU acceleration via the array backend:

Module

Operations

Speedup (GPU vs CPU)

atmosphere.py

ISA calculations, wind profiles

10-50x for large batches

aero.py

Wing analysis, airfoil polars

5-20x for alpha sweeps

rockets.py

Trajectory integration, performance analysis

3-10x

frames.py

Coordinate transformations (batch)

20-100x for large datasets

Note: GPU acceleration provides the most benefit for batch operations with 1000+ data points. For single calculations, CPU (NumPy) is typically faster due to GPU transfer overhead.

πŸ“– 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": 7861
}

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

Tool

Description

Parameters

search_airports

Find airports by IATA or city

query, country, query_type

plan_flight

Complete flight planning (optional wind-aware estimates)

departure, arrival, aircraft, route_options, wind

plan_multi_leg_flight

Multi-leg journeys through 2-10 waypoints with aggregated totals

waypoints, aircraft

get_aircraft_database

Browse/search available OpenAP aircraft types

search

convert_units

Length/speed/mass/pressure/temperature/angle conversions

value, from_unit, to_unit

calculate_distance

Great-circle distance

lat1, lon1, lat2, lon2

get_aircraft_performance

Performance estimates

aircraft_type, distance_km, cruise_altitude_ft

get_atmosphere_profile

ISA atmosphere conditions

altitudes_m, model_type

wind_model_simple

Wind profile calculation

altitudes_m, surface_wind_speed_ms, surface_wind_direction_deg, model_type, roughness_length_m

transform_frames

Coordinate transformations

coordinates, from_frame, to_frame, epoch_utc

geodetic_to_ecef

Lat/lon to ECEF conversion

latitude_deg, longitude_deg, altitude_m

ecef_to_geodetic

ECEF to lat/lon conversion

x_m, y_m, z_m

wing_vlm_analysis

Wing aerodynamics analysis (VLM)

wing_config, flight_conditions, analysis_options

airfoil_polar_analysis

Airfoil polar generation

airfoil_name, reynolds_number, mach_number, alpha_range_deg

calculate_stability_derivatives

Stability derivatives calculation

wing_config, flight_conditions

propeller_bemt_analysis

Propeller performance (BEMT)

propeller_geometry, operating_conditions, analysis_options

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

rocket_geometry, launch_conditions, simulation_options

estimate_rocket_sizing

Rocket sizing for mission requirements

target_altitude_m, payload_mass_kg, propellant_type, design_margin

optimize_launch_angle

Launch angle optimization

rocket_geometry, target_range_m, optimize_for, angle_bounds_deg

optimize_thrust_profile

Thrust profile optimization

rocket_geometry, burn_time_s, total_impulse_target, n_segments, objective

trajectory_sensitivity_analysis

Parameter sensitivity analysis

rocket_geometry, parameter_variations, analysis_options

get_system_status

System health and capabilities

None

elements_to_state_vector

Convert orbital elements to state vector

orbital_elements

state_vector_to_elements

Convert state vector to orbital elements

state_vector

propagate_orbit_j2

Propagate orbit with J2 perturbations

initial_state, propagation_time_s, time_step_s, max_points

calculate_ground_track

Calculate satellite ground track

orbital_state, duration_s, time_step_s, max_points

hohmann_transfer

Calculate Hohmann transfer orbit

r1_m, r2_m

orbital_rendezvous_planning

Plan orbital rendezvous maneuvers

chaser_elements, target_elements, rendezvous_options

genetic_algorithm_optimization

Trajectory optimization using GA

optimization_problem, ga_parameters

particle_swarm_optimization

Trajectory optimization using PSO

optimization_problem, pso_parameters

monte_carlo_uncertainty_analysis

Monte Carlo trajectory uncertainty analysis

nominal_trajectory, uncertainty_parameters, n_samples, analysis_options

porkchop_plot_analysis

Generate porkchop plot for interplanetary transfers

departure_body, arrival_body, departure_date_range, arrival_date_range, analysis_options

search_aerospace_tools

Search for tools by name, description, or functionality

query, search_type, max_results, category

list_tool_categories

List all available tool categories with counts

None

lambert_problem_solver

Solve Lambert's problem for orbital transfers

r1_m, r2_m, tof_s, direction, num_revolutions, central_body

density_altitude_calculator

Calculate density altitude from pressure altitude and temperature

pressure_altitude_ft, temperature_c, dewpoint_c

true_airspeed_converter

Convert between IAS/CAS/EAS/TAS/Mach

speed_value, speed_type, altitude_ft, temperature_c, position_error_kts

stall_speed_calculator

Calculate stall speeds for different configurations

weight_kg, wing_area_m2, cl_max_clean, cl_max_takeoff, cl_max_landing, altitude_ft, load_factor

weight_and_balance

Calculate aircraft weight and CG position

basic_empty_weight_kg, basic_empty_arm_m, fuel_kg, fuel_arm_m, payload_items, forward_cg_limit_m, aft_cg_limit_m, max_takeoff_weight_kg, mac_m, lemac_m

takeoff_performance

Calculate takeoff distances and V-speeds

weight_kg, pressure_altitude_ft, temperature_c, wind_kts, runway_slope_pct, runway_condition, thrust_to_weight, cl_max_takeoff, wing_area_m2, cd0, oswald_e, aspect_ratio

landing_performance

Calculate landing distances and approach speeds

weight_kg, pressure_altitude_ft, temperature_c, wind_kts, runway_slope_pct, runway_condition, cl_max_landing, wing_area_m2, vref_factor, approach_angle_deg

fuel_reserve_calculator

Calculate required fuel reserves per regulations

regulation, trip_fuel_kg, cruise_fuel_flow_kg_hr, flight_time_min, alternate_fuel_kg, holding_altitude_ft

kalman_filter_state_estimation

State estimation using Kalman filter

initial_state, initial_covariance, process_noise, measurement_noise, measurements, dynamics_model, dt, initial_time

lqr_controller_design

Design LQR optimal controller

A_matrix, B_matrix, Q_matrix, R_matrix, state_names, input_names

Claude Desktop Setup

  1. Open Claude Desktop Settings

  2. Add server configuration:

{
  "mcpServers": {
    "aerospace": {
      "command": "uvx",
      "args": ["aerospace-mcp"]
    }
  }
}

From a source checkout use "command": "uv" with "args": ["--directory", "/path/to/aerospace-mcp", "run", "aerospace-mcp"]. If Claude Desktop cannot find uvx, give its absolute path (which uvx).

  1. Restart Claude Desktop

  2. Test with: "Search for airports in Tokyo"

Tool Discovery

With 47 specialized aerospace tools available (plus 2 discovery tools), the MCP server includes a tool search tool following Anthropic's guide for dynamic tool discovery:

# Search by natural language
search_aerospace_tools("atmospheric pressure altitude")
# Returns: get_atmosphere_profile, wind_model_simple, ...

# Search by regex pattern
search_aerospace_tools("(?i)orbit", search_type="regex")
# Returns: propagate_orbit_j2, elements_to_state_vector, hohmann_transfer, ...

# Filter by category
search_aerospace_tools("calculate", category="orbits")
# Returns only orbital mechanics tools matching "calculate"

# List all categories
list_tool_categories()
# Returns: core, atmosphere, frames, aerodynamics, propellers, rockets, orbits, gnc, performance, optimization, agents

Available categories:

  • core: Flight planning, airports, distance, aircraft performance

  • atmosphere: ISA profiles, wind modeling

  • frames: Coordinate transformations (ECEF, ECI, geodetic)

  • aerodynamics: Wing analysis, airfoil polars, stability derivatives

  • propellers: BEMT analysis, UAV energy estimation

  • rockets: 3DOF trajectory, sizing, launch optimization

  • orbits: Orbital elements, propagation, transfers, rendezvous, Lambert solver

  • optimization: GA, PSO, Monte Carlo, porkchop plots

  • gnc: Kalman filter state estimation, LQR controller design

  • performance: Density altitude, airspeed conversion, stall speeds, W&B, takeoff/landing

  • agents: LLM-powered tool selection and data formatting

Deferred Tool Loading

For applications with many tools, aerospace-mcp supports deferred tool loading to keep context windows efficient. When using the Anthropic API with MCP, configure your mcp_toolset to defer loading of all tools except the discovery tools:

{
  "tools": [
    {
      "type": "tool_search_tool_regex_20251119",
      "name": "tool_search_tool_regex"
    },
    {
      "type": "mcp_toolset",
      "mcp_server_name": "aerospace-mcp",
      "default_config": {
        "defer_loading": true
      },
      "configs": {
        "search_aerospace_tools": { "defer_loading": false },
        "list_tool_categories": { "defer_loading": false }
      }
    }
  ]
}

This configuration:

  1. Loads discovery tools immediately (search_aerospace_tools, list_tool_categories)

  2. Defers all other tools until Claude searches for them

  3. Automatically expands tool_reference blocks from search results into full definitions

When Claude needs a specific tool, it uses search_aerospace_tools which returns tool_reference blocks:

{
  "tool_references": [
    { "type": "tool_reference", "tool_name": "hohmann_transfer" },
    { "type": "tool_reference", "tool_name": "propagate_orbit_j2" }
  ]
}

The API automatically expands these references into full tool definitions, keeping context efficient while providing access to all 47 tools.

VS Code Continue Setup

Add to your config.json:

{
  "mcpServers": [
    {
      "name": "aerospace-mcp",
      "command": "uv",
      "args": ["run", "aerospace-mcp"],
      "workingDirectory": "/path/to/aerospace-mcp"
    }
  ]
}

πŸ› οΈ Development

Development Setup

# Clone and setup
git clone https://github.com/cheesejaguar/aerospace-mcp.git
cd aerospace-mcp

# Create the development environment (needs Rust, see Quick Start)
uv sync
source .venv/bin/activate

# 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_plan.py -v

# Run tool-specific tests
pytest tests/tools/ -v

# Native core unit tests (no Python needed)
cd rust && cargo test --no-default-features

After editing Rust sources, uv sync (or uv run ...) rebuilds the extension automatically; with a plain pip setup run pip install -e . again.

Code Quality

# Format code
black . && isort .

# Type checking
mypy main.py aerospace_mcp/

# Linting
ruff check .

# Rust formatting and lints
(cd rust && cargo fmt --check && cargo clippy --no-default-features --all-targets -- -D warnings)

# 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
β”‚   β”œβ”€β”€ fastmcp_server.py  # FastMCP server entry point
β”‚   β”œβ”€β”€ core.py            # Shared business logic
β”‚   β”œβ”€β”€ tools/             # MCP tool definitions
β”‚   β”‚   β”œβ”€β”€ core.py        # Flight planning tools
β”‚   β”‚   β”œβ”€β”€ atmosphere.py  # Atmospheric modeling tools
β”‚   β”‚   β”œβ”€β”€ aerodynamics.py # Wing & airfoil analysis
β”‚   β”‚   β”œβ”€β”€ frames.py      # Coordinate transformations
β”‚   β”‚   β”œβ”€β”€ rockets.py     # Rocket trajectory tools
β”‚   β”‚   β”œβ”€β”€ orbits.py      # Orbital mechanics tools
β”‚   β”‚   β”œβ”€β”€ propellers.py  # Propeller analysis tools
β”‚   β”‚   β”œβ”€β”€ optimization.py # Trajectory optimization
β”‚   β”‚   β”œβ”€β”€ gnc.py         # GNC tools (Kalman filter, LQR)
β”‚   β”‚   β”œβ”€β”€ performance.py # Aircraft performance tools
β”‚   β”‚   β”œβ”€β”€ agents.py      # LLM-powered agent tools
β”‚   β”‚   └── tool_search.py # Tool discovery and search
β”‚   └── integrations/      # Backend computation modules
β”‚       β”œβ”€β”€ _array_backend.py # NumPy/CuPy abstraction (GPU support)
β”‚       β”œβ”€β”€ atmosphere.py  # Vectorized ISA calculations
β”‚       β”œβ”€β”€ aero.py        # Vectorized aerodynamics
β”‚       β”œβ”€β”€ frames.py      # Vectorized coordinate transforms
β”‚       β”œβ”€β”€ rockets.py     # Rocket data model (simulation in rust/)
β”‚       β”œβ”€β”€ trajopt.py     # Trajectory optimization (optimizers in rust/)
β”‚       β”œβ”€β”€ orbits.py      # Orbital mechanics (kernels in rust/)
β”‚       └── propellers.py  # Propeller BEMT analysis
β”œβ”€β”€ rust/                  # Native core (Rust + PyO3 -> aerospace_mcp._native)
β”‚   β”œβ”€β”€ Cargo.toml
β”‚   └── src/
β”‚       β”œβ”€β”€ rocket.rs      # 3-DOF ascent simulation & performance metrics
β”‚       β”œβ”€β”€ optimize.rs    # Golden-section, gradient descent, rocket optimizers
β”‚       β”œβ”€β”€ orbit.rs       # Kepler, elements <-> state, J2 RK4, ground track
β”‚       β”œβ”€β”€ lambert.rs     # Izzo Lambert solver
β”‚       └── python.rs      # PyO3 bindings
β”œβ”€β”€ app/                   # Alternative FastAPI structure
β”‚   β”œβ”€β”€ __init__.py
β”‚   └── main.py
β”œβ”€β”€ tests/                 # Test suite
β”‚   β”œβ”€β”€ conftest.py
β”‚   β”œβ”€β”€ test_airports.py
β”‚   β”œβ”€β”€ test_plan.py
β”‚   β”œβ”€β”€ test_fastmcp.py
β”‚   β”œβ”€β”€ test_integrations_*.py  # Integration module tests
β”‚   └── tools/             # Tool-specific tests
β”‚       β”œβ”€β”€ test_tools_performance.py  # Performance tools tests
β”‚       β”œβ”€β”€ test_tools_gnc.py          # GNC tools tests
β”‚       └── test_tools_lambert.py      # Lambert solver tests
β”œβ”€β”€ 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 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 sync && source .venv/bin/activate
  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: Wind-optimal routing beyond the built-in multi-leg planner (plan_multi_leg_flight)

  • UI/Frontend: Web interface for flight planning

  • Database Backend: PostgreSQL/MongoDB integration

  • Performance: Optimization and caching improvements

  • GPU Optimization: Extend CuPy support to additional modules

  • Vectorization: Improve NumPy vectorization coverage

πŸ“š Documentation

Complete Documentation

πŸ“„ License

This project is licensed under the MIT License - see the LICENSE 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.

Available Tools

46 tools
airfoil_polar_analysisA

Generate airfoil polar data (CL, CD, CM vs alpha) using database or advanced methods.

Args: airfoil_name: Airfoil name (e.g., 'NACA2412', 'NACA0012') reynolds_number: Reynolds number mach_number: Mach number alpha_range_deg: Optional angle of attack range, defaults to [-10, 20] deg

Returns: Formatted string with airfoil polar data (CL, CD, CM, L/D vs. alpha).

Raises: No exceptions are raised directly; errors are returned as formatted strings.

Inputs: airfoil_name (required), reynolds_number, mach_number, alpha_range_deg. Returns: result

calculate_distanceA

Calculate great circle distance between two points.

Args: lat1: Latitude of first point in degrees lon1: Longitude of first point in degrees lat2: Latitude of second point in degrees lon2: Longitude of second point in degrees

Returns: JSON string with distance in km and NM, plus initial/final bearings.

Raises: No exceptions are raised directly; errors are returned as formatted strings.

Inputs: lat1 (required), lon1 (required), lat2 (required), lon2 (required). Returns: result

calculate_ground_trackA

Calculate ground track from orbital state vectors.

Args: orbital_state: Orbital state (elements or state vector) duration_s: Duration for ground track calculation in seconds time_step_s: Time step for ground track points in seconds

Returns: JSON string with ground track latitude/longitude coordinates.

Raises: No exceptions are raised directly; errors are returned as formatted strings.

Inputs: orbital_state (required), duration_s (required), time_step_s. Returns: result

calculate_stability_derivativesA

Calculate basic longitudinal stability derivatives for a wing.

Args: wing_config: Wing configuration with keys: - span_m: Wing span in meters - chord_root_m: Root chord in meters - chord_tip_m: Tip chord in meters (optional) - sweep_deg: Quarter-chord sweep (optional, default 0) - dihedral_deg: Dihedral angle (optional, default 0) - twist_deg: Tip twist (optional, default 0) - airfoil_root: Root airfoil name (optional, default 'NACA2412') - airfoil_tip: Tip airfoil name (optional) flight_conditions: Flight conditions with keys: - alpha_deg: Reference angle of attack (optional, default 2.0) - mach: Mach number (optional, default 0.2)

Returns: JSON string with stability derivatives: - CL_alpha: Lift curve slope (dCL/dalpha) [1/rad] -- rate of lift change with angle of attack. Positive for conventional aircraft. - CM_alpha: Pitching moment slope (dCM/dalpha) [1/rad] -- must be negative for static longitudinal stability (nose-down restoring moment). - CL_alpha_dot: Unsteady lift derivative due to rate of alpha change. - CM_alpha_dot: Unsteady pitching moment derivative (pitch damping).

Raises: No exceptions are raised directly; errors are returned as formatted strings.

Inputs: wing_config (required), flight_conditions (required). Returns: result

density_altitude_calculatorA

Calculate density altitude from pressure altitude and temperature.

Density altitude is the altitude in the standard atmosphere at which the air density equals the actual air density at the given conditions. Essential for aircraft performance calculations.

Args: pressure_altitude_ft: Pressure altitude in feet temperature_c: Outside air temperature in Celsius dewpoint_c: Optional dewpoint for humidity correction

Returns: Formatted string with density altitude calculation results including air density, density ratio (sigma), pressure ratio (delta), and ISA deviation.

Raises: No exceptions are raised directly; errors are returned as formatted strings.

Inputs: pressure_altitude_ft (required), temperature_c (required), dewpoint_c. Returns: result

ecef_to_geodeticA

Convert ECEF coordinates to geodetic (lat/lon/alt) coordinates.

Args: x_m: X coordinate in meters y_m: Y coordinate in meters z_m: Z coordinate in meters

Returns: JSON string with geodetic latitude (deg), longitude (deg), and altitude (m).

Raises: No exceptions are raised directly; errors are returned as formatted strings.

Inputs: x_m (required), y_m (required), z_m (required). Returns: result

elements_to_state_vectorA

Convert orbital elements to state vector in J2000 frame.

Args: orbital_elements: Dict with orbital elements (semi_major_axis_m, eccentricity, etc.)

Returns: JSON string with position [x,y,z] in meters and velocity [vx,vy,vz] in m/s in the J2000 inertial frame.

Raises: No exceptions are raised directly; errors are returned as formatted strings.

Inputs: orbital_elements (required). Returns: result

estimate_rocket_sizingA

Estimate rocket sizing requirements for target altitude and payload.

Args: target_altitude_m: Target altitude in meters payload_mass_kg: Payload mass in kg propellant_type: Propellant type ('solid' or 'liquid') design_margin: Design margin factor

Returns: JSON string with sizing estimates including propellant mass, dry mass, total mass, and structural dimensions.

Raises: No exceptions are raised directly; errors are returned as formatted strings.

Note: Sizing uses the Tsiolkovsky rocket equation (ideal rocket equation): delta_V = Isp * g0 * ln(m_initial / m_final) Rearranged to solve for propellant mass: m_prop = m_final * (exp(delta_V / (Isp * g0)) - 1) where Isp is specific impulse and g0 = 9.80665 m/s^2.

Inputs: target_altitude_m (required), payload_mass_kg (required), propellant_type, design_margin. Returns: result

format_data_for_toolA

Help format data in the correct format for a specific aerospace-mcp tool.

Uses GPT-5-Medium to analyze the user's requirements and raw data, then provides the correctly formatted parameters for the specified tool.

Args: tool_name: Name of the aerospace-mcp tool to format data for user_requirements: Description of what the user wants to accomplish raw_data: Any raw data that needs to be formatted (optional)

Returns: Formatted JSON string with the correct parameters for the tool, or a JSON error object if the tool is not found or LLM call fails.

Raises: No exceptions are raised directly; errors are returned as formatted strings or JSON error objects.

Inputs: tool_name (required), user_requirements (required), raw_data. Returns: result

fuel_reserve_calculatorA

Calculate required fuel reserves per aviation regulations.

Args: regulation: Regulatory framework - "FAR_91", "FAR_121", "JAR_OPS", or "ICAO" trip_fuel_kg: Planned trip fuel in kg cruise_fuel_flow_kg_hr: Cruise fuel flow rate in kg/hr flight_time_min: Planned flight time in minutes alternate_fuel_kg: Fuel to fly to alternate airport in kg holding_altitude_ft: Expected holding altitude for reserve calculations

Returns: Formatted string with fuel reserve breakdown per the selected regulation, including contingency, alternate, and final reserve components.

Raises: No exceptions are raised directly; errors are returned as formatted strings.

Inputs: regulation (required), trip_fuel_kg (required), cruise_fuel_flow_kg_hr (required), flight_time_min (required), +2 more. Returns: result

genetic_algorithm_optimizationA

Optimize spacecraft trajectory using genetic algorithm.

Args: optimization_problem: Problem definition (objective, constraints, variables) ga_parameters: Optional GA parameters (population_size, generations, etc.)

Returns: JSON string with optimization results including best solution found, convergence history, and final objective value.

Raises: No exceptions are raised directly; errors are returned as formatted strings.

Note: The GA operates on a population of candidate solutions through: 1. Selection: Tournament or roulette-wheel selection of parents. 2. Crossover: Combining parent chromosomes (e.g., single-point or uniform crossover) to produce offspring that inherit traits from both. 3. Mutation: Random perturbation of offspring genes with probability p_mutation to maintain diversity and avoid premature convergence. Each generation evaluates fitness, selects the best, and breeds the next generation until convergence or max generations reached.

Inputs: optimization_problem (required), ga_parameters. Returns: result

geodetic_to_ecefA

Convert geodetic coordinates (lat/lon/alt) to Earth-centered Earth-fixed (ECEF) coordinates.

Args: latitude_deg: Latitude in degrees (-90 to 90) longitude_deg: Longitude in degrees (-180 to 180) altitude_m: Altitude above WGS84 ellipsoid in meters

Returns: JSON string with ECEF X, Y, Z coordinates in meters.

Raises: No exceptions are raised directly; errors are returned as formatted strings.

Note: The geodetic-to-ECEF conversion uses the WGS84 ellipsoid parameters: a = 6378137.0 m (semi-major axis, equatorial radius) f = 1/298.257223563 (flattening) e^2 = 2f - f^2 (first eccentricity squared)

The conversion equations are:
    N = a / sqrt(1 - e^2 * sin^2(lat))   (radius of curvature in prime vertical)
    X = (N + h) * cos(lat) * cos(lon)
    Y = (N + h) * cos(lat) * sin(lon)
    Z = (N * (1 - e^2) + h) * sin(lat)
where lat, lon are geodetic latitude/longitude and h is altitude above ellipsoid.

Inputs: latitude_deg (required), longitude_deg (required), altitude_m. Returns: result

get_aircraft_performanceA

Get performance estimates for an aircraft type (requires OpenAP).

Args: aircraft_type: ICAO aircraft type code (e.g., 'A320', 'B737') distance_km: Flight distance in kilometers cruise_altitude_ft: Cruise altitude in feet

Returns: JSON string with performance estimates or error message.

Raises: No exceptions are raised directly; errors are returned as formatted strings. Internally catches OpenAPError for unsupported aircraft types.

Inputs: aircraft_type (required), distance_km (required), cruise_altitude_ft. Returns: result

get_airfoil_databaseA

Get available airfoil database with aerodynamic coefficients.

Returns: JSON string with airfoil database containing aerodynamic coefficients.

Raises: No exceptions are raised directly; errors are returned as formatted strings.

Inputs: no named parameters. Returns: result

get_atmosphere_profileB

Get atmospheric properties (pressure, temperature, density) at specified altitudes using ISA model.

Args: altitudes_m: List of altitudes in meters model_type: Atmospheric model type ('ISA' for standard, 'enhanced' for extended)

Returns: Formatted string with atmospheric profile data including pressure, temperature, density, and speed of sound at each altitude.

Raises: No exceptions are raised directly; errors are returned as formatted strings. ImportError is caught when the ambiance package is not installed.

Inputs: altitudes_m (required), model_type. Returns: result

get_propeller_databaseA

Get available propeller database with geometric and performance data.

Returns: JSON string with propeller database containing geometry and performance data.

Raises: No exceptions are raised directly; errors are returned as formatted strings.

Inputs: no named parameters. Returns: result

get_system_statusA

Get system status and capabilities.

Returns: JSON string with system status information

Inputs: no named parameters. Returns: result

hohmann_transferA

Calculate Hohmann transfer orbit parameters between two circular orbits.

Args: r1_m: Initial orbit radius in meters r2_m: Final orbit radius in meters

Returns: JSON string with transfer orbit parameters including delta-V for each burn, transfer orbit semi-major axis, and time of flight.

Raises: No exceptions are raised directly; errors are returned as formatted strings.

Note: The Hohmann transfer is the minimum-energy two-impulse transfer between coplanar circular orbits. Using the vis-viva equation v^2 = mu*(2/r - 1/a): a_transfer = (r1 + r2) / 2 delta_V1 = sqrt(mu/r1) * (sqrt(2r2/(r1+r2)) - 1) (departure burn) delta_V2 = sqrt(mu/r2) * (1 - sqrt(2r1/(r1+r2))) (arrival burn)

Inputs: r1_m (required), r2_m (required). Returns: result

kalman_filter_state_estimationA

Extended Kalman Filter for aircraft/spacecraft state estimation.

Implements a Kalman filter for sensor fusion and state estimation from noisy measurements.

Args: initial_state: Initial state vector estimate initial_covariance: Initial state covariance matrix (P0) process_noise: Process noise covariance matrix (Q) measurement_noise: Measurement noise covariance matrix (R) measurements: Time-series of measurements, each with: - time: Measurement timestamp - z: Measurement vector - H: Optional measurement matrix (uses identity if not provided) dynamics_model: Dynamics model type: - "constant_velocity": 2D position + velocity - "constant_acceleration": 2D position + velocity + acceleration - "orbital": Simplified orbital dynamics dt: Time step for prediction (used if not in measurements)

Returns: Formatted string with filtered state estimates, covariance diagonals, and innovation statistics.

Raises: No exceptions are raised directly; errors are returned as formatted strings.

Inputs: initial_state (required), initial_covariance (required), process_noise (required), measurement_noise (required), +3 more. Returns: result

lambert_problem_solverA

Solve Lambert's orbital boundary value problem.

Given two position vectors and time-of-flight, determine the orbit connecting them. This is foundational for interplanetary mission design and rendezvous trajectory planning.

Args: r1_m: Initial position vector [x, y, z] in meters r2_m: Final position vector [x, y, z] in meters tof_s: Time of flight in seconds direction: Transfer direction - "prograde" or "retrograde" num_revolutions: Number of complete revolutions (default 0 for short path) central_body: Central body name for gravitational parameter

Returns: JSON string with transfer orbit velocities, orbital elements, transfer angle, and timing information.

Raises: No exceptions are raised directly; errors are returned as JSON strings.

Inputs: r1_m (required), r2_m (required), tof_s (required), direction, +2 more. Returns: result

landing_performanceA

Calculate landing distance for given conditions.

Args: weight_kg: Landing weight in kg pressure_altitude_ft: Airport pressure altitude in feet temperature_c: Outside air temperature in Celsius wind_kts: Headwind (+) or tailwind (-) in knots runway_slope_pct: Runway slope in percent (+ uphill) runway_condition: "dry", "wet", or "contaminated" cl_max_landing: Maximum lift coefficient in landing config wing_area_m2: Wing reference area in mΒ² vref_factor: Approach speed factor (typically 1.3) approach_angle_deg: Approach angle in degrees

Returns: Formatted string with landing performance calculations including V-speeds, air distance from 50 ft, ground roll, and factored distances.

Raises: No exceptions are raised directly; errors are returned as formatted strings.

Inputs: weight_kg (required), pressure_altitude_ft (required), temperature_c (required), wind_kts, +6 more. Returns: result

list_tool_categoriesA

List all available tool categories with tool counts.

Returns: JSON string with an array of categories (name and tool_count) and the total number of registered tools.

Inputs: no named parameters. Returns: result

lqr_controller_designA

Design Linear Quadratic Regulator (LQR) optimal controller.

Computes optimal state-feedback gain K that minimizes the cost function: J = integral(x'Qx + u'Ru) dt

Args: A_matrix: State matrix (n x n) - system dynamics B_matrix: Input matrix (n x m) - control influence Q_matrix: State weighting matrix (n x n) - penalizes state deviation R_matrix: Input weighting matrix (m x m) - penalizes control effort state_names: Optional names for states (for display) input_names: Optional names for control inputs (for display)

Returns: Formatted string with optimal gain matrix K, closed-loop eigenvalues, stability analysis, and controllability assessment.

Raises: No exceptions are raised directly; errors are returned as formatted strings or JSON error objects (e.g., when system is not controllable).

Inputs: A_matrix (required), B_matrix (required), Q_matrix (required), R_matrix (required), +2 more. Returns: result

monte_carlo_uncertainty_analysisA

Perform Monte Carlo uncertainty analysis on spacecraft trajectory.

Args: nominal_trajectory: Nominal trajectory parameters uncertainty_parameters: Parameters with uncertainty distributions n_samples: Number of Monte Carlo samples analysis_options: Optional analysis settings

Returns: JSON string with uncertainty analysis results including statistical summaries (mean, std, percentiles) of trajectory metrics.

Raises: No exceptions are raised directly; errors are returned as formatted strings.

Note: Monte Carlo analysis samples uncertain parameters from their specified distributions (e.g., Gaussian, uniform) and runs n_samples trajectory simulations. Statistical analysis of the results provides: - Mean and standard deviation of key performance metrics. - Confidence intervals (e.g., 95th percentile bounds). - Dispersion ellipses for correlated output parameters. Latin Hypercube Sampling (LHS) may be used for efficient coverage of the parameter space with fewer samples than pure random sampling.

Inputs: nominal_trajectory (required), uncertainty_parameters (required), n_samples, analysis_options. Returns: result

optimize_launch_angleA

Optimize rocket launch angle for maximum altitude or range.

Args: rocket_geometry: Rocket geometry parameters target_range_m: Optional target range in meters optimize_for: Optimization objective ('altitude' or 'range') angle_bounds_deg: Launch angle bounds in degrees

Returns: JSON string with optimization results including optimal angle and resulting performance metrics.

Raises: No exceptions are raised directly; errors are returned as formatted strings.

Inputs: rocket_geometry (required), target_range_m, optimize_for, angle_bounds_deg. Returns: result

optimize_thrust_profileC

Optimize rocket thrust profile for better performance using trajectory optimization.

Args: rocket_geometry: Rocket geometry parameters burn_time_s: Burn time in seconds total_impulse_target: Target total impulse in Nβ‹…s n_segments: Number of thrust segments objective: Optimization objective

Returns: JSON string with optimized thrust profile including segment-wise thrust levels and resulting trajectory performance.

Raises: No exceptions are raised directly; errors are returned as formatted strings.

Inputs: rocket_geometry (required), burn_time_s (required), total_impulse_target (required), n_segments, +1 more. Returns: result

orbital_rendezvous_planningB

Plan orbital rendezvous maneuvers between two spacecraft.

Args: chaser_elements: Chaser spacecraft orbital elements target_elements: Target spacecraft orbital elements rendezvous_options: Optional rendezvous planning parameters

Returns: JSON string with rendezvous plan including maneuver sequence and delta-V.

Raises: No exceptions are raised directly; errors are returned as formatted strings.

Inputs: chaser_elements (required), target_elements (required), rendezvous_options. Returns: result

particle_swarm_optimizationA

Optimize spacecraft trajectory using particle swarm optimization.

Args: optimization_problem: Problem definition (objective, constraints, variables) pso_parameters: Optional PSO parameters (n_particles, iterations, etc.)

Returns: JSON string with optimization results including best position found and convergence metrics.

Raises: No exceptions are raised directly; errors are returned as formatted strings.

Note: PSO updates each particle's velocity and position at every iteration: v_i(t+1) = wv_i(t) + c1r1*(p_best_i - x_i) + c2r2(g_best - x_i) x_i(t+1) = x_i(t) + v_i(t+1) where w is the inertia weight (balances exploration vs exploitation), c1/c2 are cognitive/social acceleration coefficients, r1/r2 are random numbers in [0,1], p_best_i is the particle's personal best, and g_best is the global best found by any particle in the swarm.

Inputs: optimization_problem (required), pso_parameters. Returns: result

plan_flightA

Plan a flight route between two airports with performance estimates.

Args: departure: Dict with departure info (city, country, iata) arrival: Dict with arrival info (city, country, iata) aircraft: Optional aircraft config (ac_type, cruise_alt_ft, route_step_km) route_options: Optional route options

Returns: JSON string with flight plan details including departure/arrival airports, route waypoints, distances, and optional performance estimates.

Raises: No exceptions are raised directly; errors are returned as formatted strings. Internally catches AirportResolutionError and OpenAPError.

Inputs: departure (required), arrival (required), aircraft, route_options. Returns: result

porkchop_plot_analysisA

Generate porkchop plot for interplanetary transfer opportunities.

Args: departure_body: Departure celestial body name arrival_body: Arrival celestial body name departure_date_range: Range of departure dates (ISO format) arrival_date_range: Range of arrival dates (ISO format) analysis_options: Optional analysis settings

Returns: JSON string with porkchop plot data (departure date vs arrival date grid with delta-V contours for identifying optimal launch windows).

Raises: No exceptions are raised directly; errors are returned as formatted strings.

Inputs: departure_body (required), arrival_body (required), departure_date_range (required), arrival_date_range (required), +1 mo… Returns: result

propagate_orbit_j2A

Propagate orbit with J2 perturbations using numerical integration.

Args: initial_state: Initial orbital state (elements or state vector) propagation_time_s: Propagation time in seconds time_step_s: Integration time step in seconds

Returns: JSON string with propagated state vectors at each time step.

Raises: No exceptions are raised directly; errors are returned as formatted strings.

Inputs: initial_state (required), propagation_time_s (required), time_step_s. Returns: result

propeller_bemt_analysisA

Analyze propeller performance using Blade Element Momentum Theory.

Args: propeller_geometry: Propeller geometry (diameter_m, pitch_m, num_blades, etc.) operating_conditions: Operating conditions (rpm_list, velocity_ms, altitude_m) analysis_options: Optional analysis settings

Returns: Formatted string with propeller performance analysis including thrust, torque, power, efficiency, and advance ratio at each RPM.

Raises: No exceptions are raised directly; errors are returned as formatted strings. ImportError is caught when propulsion packages are not installed.

Note: BEMT iteratively solves for the inflow angle (phi) at each blade element by balancing: 1. Blade Element Theory: Local lift and drag from 2D airfoil data at the effective angle of attack (alpha = phi - pitch_angle). 2. Momentum Theory: Axial and tangential momentum changes through an annular ring of the rotor disk. Convergence is achieved when the induced velocity factors (a, a') satisfy both theories simultaneously. The advance ratio J = V / (n*D) characterizes the operating condition.

Inputs: propeller_geometry (required), operating_conditions (required), analysis_options. Returns: result

rocket_3dof_trajectoryA

Calculate 3DOF rocket trajectory using numerical integration.

Args: rocket_geometry: Rocket geometry parameters launch_conditions: Launch conditions (launch_angle_deg, launch_site, etc.) simulation_options: Optional simulation settings

Returns: Formatted string with trajectory analysis results including max altitude, max velocity, Mach number, apogee time, burnout time, max-Q, total impulse, and specific impulse.

Raises: No exceptions are raised directly; errors are returned as formatted strings. ImportError is caught when rocketry packages are not installed.

Note: The 3DOF equations of motion integrate: dv/dt = (T - D) / m - g * sin(gamma) (along velocity) dgamma/dt = -(g / v) * cos(gamma) (flight path angle) dx/dt = v * cos(gamma) (downrange) dh/dt = v * sin(gamma) (altitude) where T is thrust, D = 0.5 * rho(h) * v^2 * Cd * A_ref is aerodynamic drag with altitude-dependent density, m is instantaneous mass (decreasing during burn), and gamma is the flight path angle. Integration uses a 4th-order Runge-Kutta (RK4) scheme for numerical stability.

Inputs: rocket_geometry (required), launch_conditions (required), simulation_options. Returns: result

search_aerospace_toolsA

Search for aerospace-mcp tools by name, description, or functionality.

This tool enables dynamic tool discovery, allowing Claude to find relevant tools from the 34+ available aerospace tools without loading all definitions upfront. Returns tool references matching the search query.

Args: query: Search query - regex pattern (for regex mode) or natural language (for text mode) search_type: Search mode - 'regex' for pattern matching, 'text' for natural language, 'auto' to detect based on query characteristics max_results: Maximum number of tools to return (default 5, max 10) category: Optional category filter (core, atmosphere, frames, aerodynamics, propellers, rockets, orbits, optimization, agents)

Returns: JSON string with tool references matching the query, including both machine-readable tool_reference blocks and human-readable details.

Raises: No exceptions are raised directly; errors are returned in JSON format.

Inputs: query (required), search_type, max_results, category. Returns: result

search_airportsA

Search for airports by IATA code or city name.

Args: query: IATA code (e.g., 'SJC') or city name (e.g., 'San Jose') country: Optional ISO country code to filter by (e.g., 'US', 'JP') query_type: Type of query - 'iata' for IATA codes, 'city' for city names, 'auto' to detect

Returns: Formatted string with airport information

Raises: No exceptions are raised directly; errors are returned as formatted strings.

Inputs: query (required), country, query_type. Returns: result

select_aerospace_toolA

Help select the most appropriate aerospace-mcp tool for a given task.

Uses GPT-5-Medium to analyze the user's task and recommend the best tool(s) along with guidance on how to use them.

Args: user_task: Description of what the user wants to accomplish user_context: Additional context about the user's situation (optional)

Returns: Recommendation with tool name(s) and usage guidance, including primary tool, secondary tools, workflow steps, and considerations.

Raises: No exceptions are raised directly; errors are returned as formatted strings.

Inputs: user_task (required), user_context. Returns: result

stall_speed_calculatorA

Calculate stall speeds for different aircraft configurations.

Args: weight_kg: Aircraft weight in kg wing_area_m2: Wing reference area in mΒ² cl_max_clean: Maximum lift coefficient in clean configuration cl_max_takeoff: Max CL with takeoff flaps (optional) cl_max_landing: Max CL with landing flaps (optional) altitude_ft: Pressure altitude in feet load_factor: Load factor (default 1.0 for level flight)

Returns: Formatted string with stall speed calculations for each configuration, plus reference speeds (VREF, V2_min) and altitude correction.

Raises: No exceptions are raised directly; errors are returned as formatted strings.

Inputs: weight_kg (required), wing_area_m2 (required), cl_max_clean (required), cl_max_takeoff, +3 more. Returns: result

state_vector_to_elementsA

Convert state vector to classical orbital elements.

Args: state_vector: Dict with position_m and velocity_ms arrays

Returns: JSON string with classical orbital elements (a, e, i, RAAN, omega, nu).

Raises: No exceptions are raised directly; errors are returned as formatted strings.

Inputs: state_vector (required). Returns: result

takeoff_performanceA

Calculate takeoff field length and V-speeds.

Uses simplified performance equations for educational purposes.

Args: weight_kg: Takeoff weight in kg pressure_altitude_ft: Airport pressure altitude in feet temperature_c: Outside air temperature in Celsius wind_kts: Headwind (+) or tailwind (-) in knots runway_slope_pct: Runway slope in percent (+ uphill) runway_condition: "dry", "wet", or "contaminated" thrust_to_weight: Thrust-to-weight ratio cl_max_takeoff: Maximum lift coefficient in takeoff config wing_area_m2: Wing reference area in mΒ² cd0: Zero-lift drag coefficient oswald_e: Oswald efficiency factor aspect_ratio: Wing aspect ratio

Returns: Formatted string with takeoff performance calculations including V-speeds, ground roll, air distance to 35 ft, and factored distances.

Raises: No exceptions are raised directly; errors are returned as formatted strings.

Inputs: weight_kg (required), pressure_altitude_ft (required), temperature_c (required), wind_kts, +8 more. Returns: result

trajectory_sensitivity_analysisA

Perform sensitivity analysis on rocket trajectory parameters.

Args: rocket_geometry: Baseline rocket geometry parameter_variations: Parameters to vary and their ranges analysis_options: Optional analysis settings

Returns: JSON string with sensitivity analysis results showing how each parameter variation affects the trajectory outcome.

Raises: No exceptions are raised directly; errors are returned as formatted strings.

Inputs: rocket_geometry (required), parameter_variations (required), analysis_options. Returns: result

transform_framesA

Transform coordinates between reference frames (ECEF, ECI, ITRF, GCRS, GEODETIC).

Args: coordinates: Dict with coordinate data (format depends on frame) from_frame: Source reference frame to_frame: Target reference frame epoch_utc: Optional epoch for time-dependent transformations (ISO format)

Returns: JSON string with transformed coordinates in the target frame.

Raises: No exceptions are raised directly; errors are returned as formatted strings. ImportError is caught when required frame transformation packages are missing.

Inputs: coordinates (required), from_frame (required), to_frame (required), epoch_utc. Returns: result

true_airspeed_converterA

Convert between IAS, CAS, EAS, TAS, and Mach number.

Args: speed_value: Input speed value (knots for airspeeds, dimensionless for Mach) speed_type: Input type - "IAS", "CAS", "EAS", "TAS", or "MACH" altitude_ft: Pressure altitude in feet temperature_c: Outside air temperature in Celsius (uses ISA if not provided) position_error_kts: Position error correction in knots (IAS to CAS)

Returns: Formatted string with all equivalent airspeeds (IAS, CAS, EAS, TAS, Mach), dynamic pressure, and atmospheric conditions.

Raises: No exceptions are raised directly; errors are returned as formatted strings.

Inputs: speed_value (required), speed_type (required), altitude_ft (required), temperature_c, +1 more. Returns: result

uav_energy_estimateA

Estimate UAV flight time and energy consumption for mission planning.

Args: uav_config: UAV configuration parameters battery_config: Battery configuration parameters mission_profile: Optional mission profile parameters

Returns: Formatted string with energy analysis results including flight time, range, hover time, power required, and efficiency metrics.

Raises: No exceptions are raised directly; errors are returned as formatted strings.

Inputs: uav_config (required), battery_config (required), mission_profile. Returns: result

weight_and_balanceA

Calculate aircraft center of gravity and verify within limits.

Args: basic_empty_weight_kg: Basic empty weight in kg basic_empty_arm_m: Basic empty weight CG arm (from datum) in meters fuel_kg: Fuel load in kg fuel_arm_m: Fuel tank CG arm in meters payload_items: List of payload items, each with keys: - weight_kg: Weight in kg - arm_m: CG arm in meters - name: Item name (optional) forward_cg_limit_m: Forward CG limit (optional) aft_cg_limit_m: Aft CG limit (optional) max_takeoff_weight_kg: Maximum takeoff weight (optional) mac_m: Mean aerodynamic chord length (optional, for %MAC calculation) lemac_m: Leading edge of MAC position (optional, for %MAC calculation)

Returns: Formatted string with weight and balance calculation results.

Raises: No exceptions are raised directly; errors are returned as formatted strings.

Inputs: basic_empty_weight_kg (required), basic_empty_arm_m (required), fuel_kg (required), fuel_arm_m (required), +6 more. Returns: result

wind_model_simpleA

Calculate wind speeds at different altitudes using logarithmic or power law models.

Args: altitudes_m: List of altitudes in meters surface_wind_speed_ms: Wind speed at 10m reference height in m/s surface_wind_direction_deg: Wind direction at surface in degrees (0=North, 90=East) model_type: Wind model type ('logarithmic' or 'power_law') roughness_length_m: Surface roughness length in meters

Returns: Formatted string with wind profile data at each requested altitude.

Raises: No exceptions are raised directly; errors are returned as formatted strings.

Note: The logarithmic wind profile (Ref: Stull, "Meteorology for Scientists and Engineers", 2000) models wind speed as: U(z) = (u* / kappa) * ln(z / z0) where u* is friction velocity, kappa ~0.4 is the von Karman constant, and z0 is the aerodynamic roughness length.

The **power-law wind profile** (empirical approximation) models wind as:
    U(z) = U_ref * (z / z_ref) ^ alpha
where alpha (Hellmann exponent) depends on terrain roughness, typically
~0.14 for open terrain and ~0.40 for urban areas.

Inputs: altitudes_m (required), surface_wind_speed_ms, surface_wind_direction_deg, model_type, +1 more. Returns: result

wing_vlm_analysisA

Analyze wing aerodynamics using Vortex Lattice Method or simplified lifting line theory.

Args: wing_config: Wing configuration with keys: - span_m: Wing span in meters - chord_root_m: Root chord in meters - chord_tip_m: Tip chord in meters (optional, defaults to chord_root_m) - sweep_deg: Quarter-chord sweep in degrees (optional, default 0) - dihedral_deg: Dihedral angle in degrees (optional, default 0) - twist_deg: Tip twist in degrees (optional, default 0) - airfoil_root: Root airfoil name (optional, default 'NACA2412') - airfoil_tip: Tip airfoil name (optional, default matches root) flight_conditions: Flight conditions with keys: - alpha_deg_list: List of angles of attack to analyze (required) - mach: Mach number (optional, default 0.2) - reynolds: Reynolds number (optional) analysis_options: Optional analysis settings (currently unused)

Returns: Formatted string with aerodynamic analysis results including CL, CD, CM, and L/D ratio at each angle of attack.

Raises: No exceptions are raised directly; errors are returned as formatted strings. ImportError is caught when aerodynamics packages are not installed.

Note: The Vortex Lattice Method (VLM) discretizes the wing planform into panels, each modeled with a horseshoe vortex. Each horseshoe vortex consists of a bound vortex along the panel quarter-chord line and two trailing (semi-infinite) vortices extending downstream. The induced velocity at each panel's 3/4-chord control point is computed via the Biot-Savart law, and the no-penetration boundary condition is enforced to solve for the vortex strengths (circulation distribution).

Inputs: wing_config (required), flight_conditions (required), analysis_options. Returns: result

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

Loading tool schema changelog…

    TDQS

    B3.4/5.0

    Scored across 46 tools

    Disambiguation4/5

    Tools are generally distinct with clear descriptions, but there are several overlapping categories (e.g., multiple optimization methods, multiple orbital mechanics tools) that could cause confusion if descriptions are not read carefully.

    Naming Consistency2/5

    Tool names follow inconsistent patterns: some start with verbs (calculate_, get_, search_), others with nouns (airfoil_polar_analysis, hohmann_transfer). Underscores are used but no uniform verb_noun structure, making it harder to predict tool names.

    Tool Count3/5

    46 tools is high for a single server, covering a very broad domain. Includes several meta-tools (format_data_for_tool, select_aerospace_tool) that inflate the count. Could be streamlined, but many tools are necessary for the wide scope.

    Completeness4/5

    Covers most key aerospace domains: airfoil, wing, propeller, aircraft performance, rocket trajectory, orbital mechanics, coordinate transforms, atmospheric models, etc. Missing some niche areas but overall very comprehensive.

    Maintenance

    ActivityMaintained
    ResponsivenessOutdated data

    Related MCP Connectors

    Related MCP Servers

    • F
      license
      Not graded
      quality
      D
      maintenance
      Enables AI agents to query airport information and calculate Great Circle distances between global airports using IATA codes, following the FFP industry standard in statute miles.
      -
    • A
      license
      A
      quality
      D
      maintenance
      Provides AI assistants with access to real-time flight data, airport schedules, delays, and aviation reference databases through natural language queries.
      12
      191 npm
      MIT
    • A
      license
      A
      quality
      D
      maintenance
      Enables pilots to assemble a preflight briefing per 14 CFR Β§91.103 by fetching weather, airport info, aircraft performance, fuel estimates, alternates, and NOTAMs.
      6
      32 npm
      1
      AGPL 3.0