trackmcp
Back to directory
Bellaposa

airplanes-live-mcp

View on GitHub

Airplane.Live MCP Server

9 stars PythonOthers Updated Apr 12, 2026

Documentation

โœˆ๏ธ Airplane Tracker MCP Server

Python
MCP
License
API
Airplane Tracker Banner

๐ŸŽฏ Overview

This MCP server integrates with the airplanes.live API to provide real-time aircraft tracking capabilities to Claude Desktop. Track flights, find aircraft by callsign, registration, or position - all directly from Claude!

โš ๏ธ Important Notice - Terms of Use

> ๐Ÿ“– Educational and Non-Commercial Use Only

>

> This project uses the airplanes.live API which is provided for educational and non-commercial purposes only. Please respect their terms of service.

>

> ### ๐Ÿ“‹ Usage Guidelines:

> - โœ… Educational projects - Learning and research

> - โœ… Personal use - Non-commercial tracking

> - โœ… Open source contributions - Community development

> - โŒ Commercial applications - Business/profit purposes

> - โŒ High-volume requests - Respect rate limits

>

> ### ๐Ÿ›ก๏ธ Disclaimer:

> The author of this MCP server does not assume any responsibility for the use of this software. This is a community contribution intended for educational purposes and to demonstrate MCP server development. Users are responsible for complying with airplanes.live API terms and any applicable regulations.

>

> ### ๐ŸŒ Respect for Existing Services:

> **This project does NOT intend to replace or compete with the official airplanes.live globe viewer.** The official globe is the primary and recommended way to visualize flight data. This MCP server is designed as a complementary educational tool for Claude Desktop integration and MCP development learning.

>

> ๐Ÿ“– Full API Terms: https://airplanes.live/api-guide/

> ๐ŸŒ Official Globe Viewer: https://globe.airplanes.live

๐Ÿ“ธ Screenshots

๐Ÿš€ Features

  • ๐Ÿ” Search by Callsign - Find specific flights (e.g., UAL123)
  • ๐Ÿ“‹ Registration Lookup - Track by tail number (e.g., N12345)
  • ๐ŸŽฏ Position-based Search - Aircraft near coordinates
  • ๐Ÿท๏ธ Hex ID Search - Mode S transponder codes
  • ๐Ÿ›ก๏ธ Military Aircraft - Tracked military flights
  • ๐Ÿš LADD Aircraft - Law enforcement tracking
  • โญ PIA Aircraft - Private/Interesting aircraft
  • ๐Ÿ“ก Squawk Codes - Emergency and special codes

*Various API search examples*

๐Ÿ—๏ธ Architecture

๐Ÿ”ง Components

  • ๐Ÿ Python MCP Server - Async server implementation
  • ๐ŸŒ MCP Framework - Modern server architecture
  • โšก httpx Client - High-performance HTTP requests
  • ๐Ÿ“Š Data Formatter - Clean, readable aircraft information
  • ๐Ÿ”Œ Claude Integration - Direct MCP protocol support

๐Ÿ“Š Data Flow

mermaid
graph TD
    A[Claude Desktop] --> B[MCP Protocol]
    B --> C[airplane_server.py]
    C --> D[API Functions]
    D --> E[airplanes.live API]
    E --> F[Aircraft Data]
    F --> G[Formatted Response]
    G --> A

*System architecture and data flow*

๐Ÿš€ Quick Start

๐Ÿ“‹ Prerequisites

  • ๐Ÿ Python 3.8+
  • ๐Ÿ’ป Claude Desktop
  • ๐ŸŒ Internet connection

โšก Installation

bash
# 1. Clone the repository
git clone https://github.com/Bellaposa/airplanes-live-mcp.git
cd airplanes-live-mcp

# 2. Create virtual environment (REQUIRED!)
python -m venv .venv

# 3. Activate virtual environment
# macOS/Linux:
source .venv/bin/activate
# Windows:
.venv\Scripts\activate

# 4. Install dependencies
pip install -r requirements.txt

# 5. Test the server
python airplane_server.py

โš ๏ธ Common Issues & Solutions

๐Ÿ”ฅ Virtual Environment is MANDATORY!

  • If you skip step 2-3, you'll get `ModuleNotFoundError: No module named 'httpx'`
  • Claude Desktop needs the full path to the venv Python, not system Python
  • Without venv, dependencies aren't isolated and things break

๐ŸชŸ Windows Users:

  • Virtual env creates `.venv\Scripts\` folder (not `.venv\bin\`)
  • Use `Scripts\python.exe` in Claude config, not `bin/python`
  • Always use double backslashes `\\` in JSON paths

๐Ÿ Python Path Issues:

  • Make sure Python 3.8+ is installed: `python --version`
  • If `python` doesn't work, try `python3` or `py`
  • Virtual environment MUST exist before configuring Claude Desktop

๐Ÿณ Docker Installation (Alternative)

Skip Python setup headaches - use Docker instead!

๐Ÿ“‹ Prerequisites

  • ๐Ÿณ Docker Desktop installed and running
  • ๐Ÿ’ป Claude Desktop

โšก Docker Setup

bash
# 1. Clone the repository
git clone https://github.com/Bellaposa/airplanes-live-mcp.git
cd airplanes-live-mcp

# 2. Build Docker image
docker build -t airplane-mcp-server .

# 3. Test the container
docker run --rm -it airplane-mcp-server python airplane_server.py

โš™๏ธ Claude Desktop Configuration for Docker

๐ŸŽ macOS/Linux with Docker

Add to `~/Library/Application Support/Claude/claude_desktop_config.json`:

json
{
  "mcpServers": {
    "airplanes-live": {
      "command": "docker",
      "args": [
        "run", "--rm", "-i", 
        "airplane-mcp-server", 
        "python", "airplane_server.py"
      ]
    }
  }
}

๐ŸชŸ Windows with Docker

Add to `%APPDATA%\Claude\claude_desktop_config.json`:

json
{
  "mcpServers": {
    "airplanes-live": {
      "command": "docker",
      "args": [
        "run", "--rm", "-i", 
        "airplane-mcp-server", 
        "python", "airplane_server.py"
      ]
    }
  }
}

๐Ÿ”„ Docker Commands Reference

bash
# Build the image
docker build -t airplane-mcp-server .

# Run interactively for testing
docker run --rm -it airplane-mcp-server bash

# Check if image exists
docker images | grep airplane-mcp-server

# Remove image if needed
docker rmi airplane-mcp-server

# View container logs (if running detached)
docker logs

โœ… Docker Advantages

  • ๐Ÿš€ No Python setup required - Everything pre-configured
  • ๐Ÿ”’ Isolated environment - No dependency conflicts
  • ๐ŸŒ Works everywhere - Same setup on Windows/Mac/Linux
  • ๐Ÿ“ฆ Easy updates - Just rebuild the image
  • ๐Ÿ›ก๏ธ Consistent behavior - Eliminates "works on my machine"

โš ๏ธ Docker Troubleshooting

Problem: "docker: command not found"

bash
# Install Docker Desktop first
# macOS: https://docs.docker.com/desktop/install/mac-install/
# Windows: https://docs.docker.com/desktop/install/windows-install/
# Linux: https://docs.docker.com/desktop/install/linux-install/

Problem: "Cannot connect to Docker daemon"

bash
# Start Docker Desktop application
# Wait for Docker to fully start (green icon)

Problem: "Permission denied" (Linux)

bash
# Add user to docker group
sudo usermod -aG docker $USER
# Log out and back in, or:
newgrp docker

Problem: Image build fails

bash
# Clean Docker cache
docker system prune -a
# Try building again
docker build --no-cache -t airplane-mcp-server .

๐ŸŽฏ Even Easier: Docker Compose

For the simplest setup, use Docker Compose:

bash
# 1. Clone and enter directory
git clone https://github.com/Bellaposa/airplanes-live-mcp.git
cd airplanes-live-mcp

# 2. Build and run with one command
docker-compose up --build

# 3. In another terminal, test the server
docker-compose exec airplane-mcp-server python airplane_server.py

Docker Compose Claude Configuration:

json
{
  "mcpServers": {
    "airplanes-live": {
      "command": "docker-compose", 
      "args": [
        "-f", "/path/to/airplanes-live-mcp/docker-compose.yml",
        "exec", "-T", "airplane-mcp-server", 
        "python", "airplane_server.py"
      ],
      "cwd": "/path/to/airplanes-live-mcp"
    }
  }
}

๐Ÿณ How to Use with Claude Desktop

Method 1: Simple Docker Run

Configuration for all platforms:

json
{
  "mcpServers": {
    "airplanes-live": {
      "command": "docker",
      "args": [
        "run", "--rm", "-i", 
        "airplane-mcp-server", 
        "python", "airplane_server.py"
      ]
    }
  }
}

Method 2: Docker Compose (Advanced)

Configuration with full paths:

json
{
  "mcpServers": {
    "airplanes-live": {
      "command": "docker-compose",
      "args": [
        "-f", "/full/path/to/your/airplanes-live-mcp/docker-compose.yml",
        "exec", "-T", "airplane-mcp-server", 
        "python", "airplane_server.py"
      ],
      "cwd": "/full/path/to/your/airplanes-live-mcp"
    }
  }
}

Complete Docker Setup Steps:

bash
# 1. Clone and build
git clone https://github.com/Bellaposa/airplanes-live-mcp.git
cd airplanes-live-mcp
docker build -t airplane-mcp-server .

# 2. Configure Claude Desktop with Method 1 (above)

# 3. Restart Claude Desktop completely

# 4. Test with: "Show me aircraft near New York"

๐ŸŽฏ Docker vs Python Comparison:

MethodProsConsBest For
Dockerโœ… No Python setupโœ… Works everywhereโœ… IsolatedโŒ Requires DockerโŒ Slight overheadBeginners, Windows users
Pythonโœ… Direct executionโœ… Easy debuggingโœ… No Docker neededโŒ Manual Python setupโŒ OS-specific issuesDevelopers, experienced users

Docker Compose Commands:

bash
# Start services in background
docker-compose up -d

# View logs
docker-compose logs airplane-mcp-server

# Stop services
docker-compose down

# Rebuild and restart
docker-compose up --build
code
### โš™๏ธ Claude Desktop Configuration

#### ๐ŸŽ **macOS/Linux Configuration**

Add to `~/Library/Application Support/Claude/claude_desktop_config.json` (macOS) or `~/.config/claude-desktop/config.json` (Linux):

{

"mcpServers": {

"airplanes-live": {

"command": "/path/to/airplanes-live-mcp/.venv/bin/python",

"args": ["/path/to/airplanes-live-mcp/airplane_server.py"],

"env": {

"PYTHONPATH": "/path/to/airplanes-live-mcp"

}

}

}

}

code
#### ๐ŸชŸ **Windows Configuration**

Add to `%APPDATA%\Claude\claude_desktop_config.json`:

{

"mcpServers": {

"airplanes-live": {

"command": "C:\\Users\\YourUsername\\airplanes-live-mcp\\.venv\\Scripts\\python.exe",

"args": ["C:\\Users\\YourUsername\\airplanes-live-mcp\\airplane_server.py"],

"env": {

"PYTHONPATH": "C:\\Users\\YourUsername\\airplanes-live-mcp"

}

}

}

}

code
**โš ๏ธ Important Windows Notes:**
- Use `Scripts\\python.exe` (not `bin/python`)
- Replace `YourUsername` with your actual Windows username
- Use double backslashes `\\` in paths
- Make sure the virtual environment is created with `python -m venv .venv`

*Claude Desktop configuration*

## ๐ŸŽฎ Usage Examples

### Search by Callsign

๐Ÿ” Find flight UAL123

code
### Near Position Search

๐Ÿ“ Show aircraft near 40.7128, -74.0060 within 50nm

code
### Military Aircraft

๐Ÿ›ก๏ธ Show all military aircraft

code
## ๐Ÿ”ง Key Design Decisions

### 1. Async Implementation

All tools use `async` to handle multiple requests efficiently:

@mcp.tool()

async def aircraft_near_position(latitude: str = "", longitude: str = "", radius: str = "250") -> str:

code
This allows the server to handle concurrent requests without blocking.

### 2. String-Based Parameters

All parameters are strings because MCP protocols work best with simple types:

Correct

def tool(param: str = "") -> str:

Avoid

def tool(param: Optional[int] = None) -> str:

code
### 3. Error Handling

Every tool includes comprehensive error handling:

try:

# Main logic

except ValueError:

return f"โŒ Error: Invalid input"

except Exception as e:

return f"โŒ Error: {str(e)}"

code
### 4. Data Formatting

The `format_aircraft_data()` function provides consistent, readable output:

def format_aircraft_data(aircraft_data):

# Handles both single aircraft and lists

# Formats all available fields with emoji indicators

# Returns human-readable strings

code
### 5. API Wrapper

The `make_api_request()` function centralizes HTTP logic:

async def make_api_request(endpoint):

async with httpx.AsyncClient(timeout=15) as client:

url = f"{API_BASE_URL}{endpoint}"

response = await client.get(url)

response.raise_for_status()

return response.json()

code
This approach:
- Centralizes error handling
- Manages timeouts
- Logs all requests
- Makes it easy to add authentication later

## Tool Reference

### aircraft_by_hex(hex_id: str = "")

**Purpose**: Search for aircraft by Mode S hex identifier

**Input**: Comma-separated hex IDs (e.g., "45211e,45212f")

**Returns**: List of matching aircraft with full details

**Example**:

User: "Show me aircraft with hex 45211e"

Tool: "๐Ÿ” Found 1 aircraft: โœˆ๏ธ Callsign: RYR123 ..."

code
### aircraft_by_callsign(callsign: str = "")

**Purpose**: Search for aircraft by flight callsign

**Input**: Comma-separated callsigns (e.g., "BA387,AA123")

**Returns**: Aircraft matching the callsign

**Example**:

User: "Find flight BA387"

Tool: "๐Ÿ” Found 1 aircraft: โœˆ๏ธ Callsign: BA387 ..."

code
### aircraft_by_registration(reg: str = "")

**Purpose**: Search for aircraft by tail number/registration

**Input**: Comma-separated registrations (e.g., "N123AB,G-EUPA")

**Returns**: Aircraft matching the registration

**Example**:

User: "Show aircraft with tail N123AB"

Tool: "๐Ÿ” Found 1 aircraft: ๐Ÿ“‹ Registration: N123AB ..."

code
### aircraft_by_type(icao_type: str = "")

**Purpose**: Search for aircraft by ICAO type code

**Input**: Type codes (A321, B738, C172, E190, etc.)

**Returns**: All aircraft of that type currently flying

**Example**:

User: "Show all Boeing 737s"

Tool: "๐Ÿ” Found 247 aircraft of type B738: ..."

code
### aircraft_by_squawk(squawk_code: str = "")

**Purpose**: Search for aircraft by squawk code

**Input**: 4-digit squawk code (e.g., "7500", "7600", "7700")

**Returns**: Aircraft squawking that code

**Note**: 7700 = Emergency, 7600 = Communications failure, 7500 = Hijacking

**Example**:

User: "Find aircraft squawking 7700"

Tool: "๐Ÿ” Found aircraft in emergency: ..."

code
### aircraft_near_position(latitude: str = "", longitude: str = "", radius: str = "250")

**Purpose**: Find all aircraft within a radius of coordinates

**Input**: 
- latitude (decimal degrees, -90 to 90)
- longitude (decimal degrees, -180 to 180)
- radius (nautical miles, max 250)

**Returns**: All aircraft within the radius

**Example**:

User: "Show aircraft within 50 nm of Madrid (40.4168, -3.7038)"

Tool: "๐Ÿ“ Found 23 aircraft within 50 nm of 40.4168, -3.7038: ..."

code
### military_aircraft()

**Purpose**: List all military aircraft

**Input**: None

**Returns**: All aircraft tagged as military

**Example**:

User: "What military aircraft are flying?"

Tool: "๐ŸŽ–๏ธ Found 12 military aircraft: ..."

code
### ladd_aircraft()

**Purpose**: List law enforcement and security aircraft

**Input**: None

**Returns**: All LADD (Law Enforcement/Security) aircraft

**Example**:

User: "Show law enforcement aircraft"

Tool: "๐Ÿš Found 8 LADD aircraft: ..."

code
### pia_aircraft()

**Purpose**: List interesting/special aircraft

**Input**: None

**Returns**: All PIA (special interest) aircraft

**Example**:

User: "Show special/private aircraft"

Tool: "๐Ÿ›ก๏ธ Found 156 PIA aircraft: ..."

code
## Output Format

All tools return formatted strings with emoji indicators:

โœˆ๏ธ Callsign: BA387

๐Ÿ“‹ Registration: G-EUPA

๐Ÿ›ฉ๏ธ Type: A350

๐Ÿ“ Position: 51.4769, -0.4589

๐Ÿ“ Altitude: 35000 ft

โšก Ground Speed: 485 knots

๐Ÿงญ Track: 089ยฐ

๐Ÿ”– Mode S Hex: 406ee9

๐Ÿ‘๏ธ Last Seen: 3 seconds ago

code
This provides:
- Visual clarity with emojis
- Easy scanning of information
- Consistent formatting
- Professional appearance

## Adding New Tools

To add a new tool to this server:

### Step 1: Create the Tool Function

@mcp.tool()

async def new_tool(param1: str = "", param2: str = "") -> str:

"""Single-line description of what this tool does."""

if not param1.strip():

return "โŒ Error: param1 is required"

try:

# Your implementation

result = await make_api_request("/endpoint")

formatted = format_aircraft_data(result.get('ac', []))

return f"โœ… Success:\n\n{formatted}"

except Exception as e:

return f"โŒ Error: {str(e)}"

code
### Step 2: Add to Catalog

Update the `tools:` section in custom.yaml:

tools:

    code
    ### Step 3: Rebuild Docker Image

    docker build -t airplane-mcp-server .

    code
    ### Step 4: Restart Claude Desktop
    
    The new tool will automatically appear.
    
    ## Testing
    
    ### Unit Test Pattern

    import asyncio

    async def test_aircraft_by_callsign():

    result = await aircraft_by_callsign("BA387")

    assert "โœˆ๏ธ" in result

    assert "Found" in result

    print(result)

    Run with: asyncio.run(test_aircraft_by_callsign())

    code
    ### Integration Test

    Start server

    python airplane_server.py

    In another terminal, test via stdin:

    echo '{"jsonrpc":"2.0","method":"tools/list","id":1}' | python airplane_server.py

    code
    ## Performance Considerations
    
    ### API Response Times
    
    - Typical: 500ms - 1s
    - Complex queries: 1s - 2s
    - Timeout: 15 seconds
    
    ### Data Limits
    
    - Max 1000 aircraft per query (API limit)
    - Radius search: max 250 nautical miles
    - Callsign/registration: comma-separated up to 8000 chars
    
    ### Optimization Tips
    
    1. **Use specific searches** - Narrow searches are faster
    2. **Avoid hammering the API** - Reasonable request frequency
    3. **Cache results locally** - Consider storing recent queries
    4. **Monitor timeouts** - API may be slow during peak traffic
    
    ## Troubleshooting Guide
    
    ### Problem: Tools Don't Appear
    
    **Solution**:
    1. Verify image built: `docker images | grep airplane`
    2. Check catalog: `cat ~/.docker/mcp/catalogs/custom.yaml`
    3. Verify registry: `cat ~/.docker/mcp/registry.yaml`
    4. Restart Claude: Quit completely, then reopen
    
    ### Problem: "No Aircraft Found"
    
    **Causes**:
    - Wrong coordinates (verify lat/lon format)
    - Radius too small
    - No traffic in that area
    - Wrong type code (try uppercase)
    
    **Solution**: Try a broader search or different parameters
    
    ### Problem: API Timeout
    
    **Cause**: API is slow or rate-limited
    
    **Solution**:
    - Wait 30 seconds
    - Try a simpler query
    - Check internet connection
    
    ### Problem: Docker Permission Denied
    
    **Solution**:

    Add user to docker group

    sudo usermod -aG docker $USER

    Log out and back in

    newgrp docker

    code
    ## ๐Ÿ—บ๏ธ Future Enhancements
    
    > **โš ๏ธ Important Note**: This planned dashboard is intended as an **educational complement** to the excellent official [airplanes.live globe viewer](https://globe.airplanes.live), not a replacement. The goal is to demonstrate web development integration with MCP servers for learning purposes.
    
    - [ ] **Caching System** - Redis cache to reduce API calls
    - [ ] **Rate Limiting** - Smart request throttling
    - [ ] **Export Features** - Save results as JSON/CSV/KML
    - [ ] **Enhanced Formatting** - Better data visualization in Claude
    - [ ] **Flight Alerts** - Notify when specific aircraft appear
    - [ ] **Historical Tracking** - Store and track aircraft movements
    - [ ] **Statistics Dashboard** - Aggregate data and analytics
    - [ ] **API Extensions** - Additional airplanes.live endpoints
    
    #### ๐Ÿค– **AI-Powered Features**
    - ๐Ÿง  **Flight Prediction** - ML-based flight path estimation
    - ๐Ÿ“ˆ **Pattern Analysis** - Identify unusual flight patterns  
    - ๐Ÿšจ **Anomaly Detection** - Automated alerts for interesting events
    - ๐Ÿ“Š **Trend Analysis** - Historical data insights
    
    ## Security
    
    ### Current Approach
    
    - No authentication required (public API data)
    - Consider applying for an API key for production use
    - No sensitive credentials stored
    - Runs as non-root user
    - Input validation on all parameters
    
    ### Future Considerations
    
    - Add rate limiting if needed
    - Implement query logging for monitoring
    - Consider caching to reduce API calls
    - Add input sanitization for custom endpoints
    
    ## ๐Ÿ“š Resources
    
    - **API Documentation**: https://airplanes.live/
    - **API Terms of Use**: https://airplanes.live/api-guide/
    - **MCP Specification**: https://docs.anthropic.com/mcp
    - **FastMCP Documentation**: https://github.com/jlowin/fastmcp
    - **httpx Documentation**: https://www.python-httpx.org/
    
    ## ๐Ÿค Contributing
    
    This is an open-source educational project! Contributions are welcome:
    
    - ๐Ÿ› **Bug Reports** - Open an issue
    - ๐Ÿ’ก **Feature Requests** - Suggest improvements  
    - ๐Ÿ”ง **Pull Requests** - Submit code changes
    - ๐Ÿ“– **Documentation** - Improve guides and examples
    
    ## ๐Ÿ“„ License & Disclaimer
    
    **MIT License** - Feel free to use, modify, and distribute for educational purposes.
    
    ### โš–๏ธ Legal Notice:
    - This software is provided "AS IS" without warranty
    - Author assumes no responsibility for usage or compliance
    - Users must respect airplanes.live API terms
    - Educational and non-commercial use only
    - Not affiliated with airplanes.live
    
    ### ๐ŸŽฏ Project Intent:
    This project is a **community contribution** for educational purposes, demonstrating MCP server development and API integration. The goal is to help developers learn and contribute to the MCP ecosystem, not for commercial gain.
    
    ---
    
    **Made with โค๏ธ for the MCP community** โœˆ๏ธ
    
    *Remember: Always respect API terms and use responsibly!*

    Frequently asked questions

    What is airplanes-live-mcp?

    airplanes-live-mcp is Airplane.Live MCP Server

    How do I install airplanes-live-mcp?

    Open the GitHub repository and follow its README. Most MCP servers are added to your client's MCP config, then called by your agent.

    Is airplanes-live-mcp open source?

    Yes โ€” it is hosted on GitHub at https://github.com/Bellaposa/airplanes-live-mcp and has 9 stars.

    Related MCP tools

    Run your own MCP server? See who uses it and what to fix.

    Measure it with TrackMCP