Aviation MCP Server
Allows a Discord bot to query real-time aircraft data from ADS-B Exchange using the Aviation MCP server.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Aviation MCP Server track flight UAL123"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Aviation MCP Server
A FastMCP server that provides real-time aircraft data from ADS-B Exchange (adsb.lol API) via Streamable HTTP transport.
Features
🚀 Streamable HTTP Transport - Modern HTTP with JSON-RPC protocol
🔐 API Key Authentication - Secure access control
⚡ FastMCP Framework - High-performance MCP server
🛫 Real-time Aircraft Data - Live ADS-B data from adsb.lol
📡 Multiple Query Types - 8 different ways to query aircraft data
🐳 Production Ready - Can run standalone or in containers
Related MCP server: adsb-mcp-server
Quick Start
Installation
cd aviation-mcp-server
uv syncRunning the Server
Development:
uv run aviation-mcp-server-httpWith Custom Configuration:
export MCP_HOST="0.0.0.0"
export MCP_PORT="8000"
export MCP_API_KEY="your-secret-key"
uv run aviation-mcp-server-httpThe server will start on http://0.0.0.0:8000/mcp
Configuration
Environment variables:
MCP_HOST=0.0.0.0 # Server bind address (default: 0.0.0.0)
MCP_PORT=8000 # Server port (default: 8000)
MCP_API_KEY=your-secret-key # API key for authentication (default: dev key)API Documentation
Endpoint
URL:
http://localhost:8000/mcpMethod: POST
Content-Type:
application/jsonAccept:
application/json, text/event-stream
Authentication
Include API key in one of these headers:
X-API-Key: your-secret-keyAuthorization: Bearer your-secret-key
Available Tool: query_aircraft
Query real-time aircraft data from ADS-B Exchange.
Parameters
query_type (required): Type of query
"callsign": Search by flight callsign (e.g., "UAL123")"registration": Search by aircraft registration (e.g., "N12345")"aircraft_type": Search by aircraft type (e.g., "B738", "A320")"icao_hex": Search by ICAO hex code"squawk": Search by transponder squawk code (e.g., "7700")"location": Search within radius of coordinates"military": Get all military aircraft"privacy": Get aircraft with privacy ICAO addresses
value (optional): Search value for most query types
latitude (optional): Latitude for location queries (-90 to 90)
longitude (optional): Longitude for location queries (-180 to 180)
radius (optional): Search radius in nautical miles for location queries
Example Requests
List Available Tools:
curl -X POST http://localhost:8000/mcp \
-H "Content-Type: application/json" \
-H "Accept: application/json, text/event-stream" \
-H "X-API-Key: adsb-mcp-secret-key-change-in-production" \
-d '{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/list",
"params": {}
}'Query Military Aircraft:
curl -X POST http://localhost:8000/mcp \
-H "Content-Type: application/json" \
-H "Accept: application/json, text/event-stream" \
-H "X-API-Key: adsb-mcp-secret-key-change-in-production" \
-d '{
"jsonrpc": "2.0",
"id": 2,
"method": "tools/call",
"params": {
"name": "query_aircraft",
"arguments": {
"query_type": "military"
}
}
}'Query by Callsign:
curl -X POST http://localhost:8000/mcp \
-H "Content-Type: application/json" \
-H "Accept: application/json, text/event-stream" \
-H "X-API-Key: adsb-mcp-secret-key-change-in-production" \
-d '{
"jsonrpc": "2.0",
"id": 3,
"method": "tools/call",
"params": {
"name": "query_aircraft",
"arguments": {
"query_type": "callsign",
"value": "UAL123"
}
}
}'Query by Location:
curl -X POST http://localhost:8000/mcp \
-H "Content-Type: application/json" \
-H "Accept: application/json, text/event-stream" \
-H "X-API-Key: adsb-mcp-secret-key-change-in-production" \
-d '{
"jsonrpc": "2.0",
"id": 4,
"method": "tools/call",
"params": {
"name": "query_aircraft",
"arguments": {
"query_type": "location",
"latitude": 40.7128,
"longitude": -74.0060,
"radius": 50
}
}
}'Testing
Test Server Connectivity
uv run python test_server.pyThis will:
Test military aircraft query
Test callsign query
Verify API connectivity
Manual Health Check
curl -I http://localhost:8000/mcpExpected: 405 Method Not Allowed (GET not supported, use POST)
Integration
Discord Bot
The aviation-discord-bot project can connect to this server:
MCP_TRANSPORT=http
MCP_SERVER_URL=http://localhost:8000/mcp
MCP_API_KEY=your-secret-keyClaude Desktop
Add to ~/Library/Application Support/Claude/claude_desktop_config.json:
{
"mcpServers": {
"adsb-aircraft-data": {
"command": "bash",
"args": ["-c", "cd /path/to/aviation-mcp-server && uv run aviation-mcp-server-http"],
"env": {
"MCP_API_KEY": "your-secret-key"
}
}
}
}Other MCP Clients
Any MCP client supporting HTTP transport can connect using:
Transport: HTTP
URL:
http://localhost:8000/mcpProtocol: JSON-RPC 2.0
Authentication: API key via
X-API-Keyheader
Architecture
┌────────────────┐
│ MCP Client │
│ (Bot/Claude) │
└────────┬───────┘
│
│ HTTP POST + JSON-RPC
│ + X-API-Key header
│
▼
┌────────────────┐
│ FastMCP │
│ + uvicorn │
│ + Auth │
└────────┬───────┘
│
│ HTTPS
│
▼
┌────────────────┐
│ adsb.lol API │
│ (ADS-B Data) │
└────────────────┘Deployment
Docker
FROM python:3.12-slim
WORKDIR /app
COPY . .
RUN pip install uv && uv sync
ENV MCP_API_KEY=${MCP_API_KEY}
ENV MCP_HOST=0.0.0.0
ENV MCP_PORT=8000
EXPOSE 8000
CMD ["uv", "run", "aviation-mcp-server-http"]Build and run:
docker build -t aviation-mcp-server .
docker run -p 8000:8000 -e MCP_API_KEY=your-secret-key aviation-mcp-serverKubernetes
apiVersion: apps/v1
kind: Deployment
metadata:
name: aviation-mcp-server
spec:
replicas: 2
selector:
matchLabels:
app: aviation-mcp-server
template:
metadata:
labels:
app: aviation-mcp-server
spec:
containers:
- name: server
image: aviation-mcp-server:latest
ports:
- containerPort: 8000
env:
- name: MCP_API_KEY
valueFrom:
secretKeyRef:
name: mcp-secrets
key: api-key
---
apiVersion: v1
kind: Service
metadata:
name: aviation-mcp-server
spec:
selector:
app: aviation-mcp-server
ports:
- port: 80
targetPort: 8000
type: LoadBalancersystemd Service
Create /etc/systemd/system/aviation-mcp-server.service:
[Unit]
Description=Aviation MCP Server
After=network.target
[Service]
Type=simple
User=adsb
WorkingDirectory=/opt/aviation-mcp-server
Environment="MCP_API_KEY=your-secret-key"
Environment="MCP_HOST=0.0.0.0"
Environment="MCP_PORT=8000"
ExecStart=/usr/local/bin/uv run aviation-mcp-server-http
Restart=always
RestartSec=10
[Install]
WantedBy=multi-user.targetEnable and start:
sudo systemctl enable aviation-mcp-server
sudo systemctl start aviation-mcp-server
sudo systemctl status aviation-mcp-serverSecurity
Production Recommendations
Use HTTPS: Deploy behind reverse proxy (nginx, Caddy) with TLS
Secure API Keys: Use secrets management (AWS Secrets Manager, HashiCorp Vault)
Rate Limiting: Implement rate limiting to prevent abuse
Monitoring: Add logging and metrics (Prometheus, Grafana)
IP Filtering: Restrict access to known client IPs
Regular Updates: Keep dependencies updated
Example nginx Configuration
upstream adsb_mcp {
server 127.0.0.1:8000;
}
server {
listen 443 ssl http2;
server_name mcp.example.com;
ssl_certificate /etc/ssl/certs/mcp.crt;
ssl_certificate_key /etc/ssl/private/mcp.key;
location /mcp {
proxy_pass http://adsb_mcp;
proxy_http_version 1.1;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
# Rate limiting
limit_req zone=mcp_limit burst=10 nodelay;
}
}Troubleshooting
Server won't start
Check if port 8000 is already in use:
lsof -i :8000Verify dependencies:
uv syncCheck Python version:
python --version(requires 3.10+)
Authentication errors
Verify API key in request headers
Check server logs for authentication failures
Ensure API key matches
MCP_API_KEYenvironment variable
API errors
Verify internet connectivity to adsb.lol
Check adsb.lol API status
Review server logs for error details
Performance issues
Monitor server resources (CPU, memory)
Check network latency to adsb.lol API
Consider implementing caching
Development
Project Structure
aviation-mcp-server/
├── src/
│ └── aviation_mcp_server/
│ ├── __init__.py
│ └── server.py # Main server implementation
├── pyproject.toml # Dependencies
├── .python-version # Python version (3.12)
├── README.md # This file
└── test_server.py # Connectivity testsAdding New Tools
To add a new MCP tool, edit server.py:
@mcp.tool()
async def your_new_tool(param1: str, param2: int) -> str:
"""
Description of your tool.
Args:
param1: Description
param2: Description
Returns:
Result description
"""
# Implementation
return "result"Running Tests
# Test server connectivity
uv run python test_server.py
# Manual API test
curl -X POST http://localhost:8000/mcp \
-H "Content-Type: application/json" \
-H "Accept: application/json, text/event-stream" \
-H "X-API-Key: adsb-mcp-secret-key-change-in-production" \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/list","params":{}}'API Data Source
This server uses the adsb.lol API, which provides:
Real-time aircraft positions
Flight information (callsign, altitude, speed)
Aircraft details (type, registration)
Military aircraft tracking
Worldwide coverage
License
MIT
Contributing
Contributions welcome! Please:
Fork the repository
Create a feature branch
Make your changes
Add tests if applicable
Submit a pull request
Support
For issues or questions:
Check the troubleshooting section
Review server logs
Test with manual curl requests
Verify environment variables
Acknowledgments
ADS-B data: Provided by adsb.lol
MCP Framework: FastMCP
MCP Specification: Model Context Protocol
Version: 0.1.0 Status: Production Ready Last Updated: 2025-10-12
Available Tools
2 toolsquery_aircraftA
Query real-time aircraft data from ADS-B Exchange.
You can search for aircraft by various criteria including callsign, registration, aircraft type, location, squawk code, ICAO hex, or get special categories like military aircraft or aircraft with privacy addresses.
Inputs: query_type (required), value, radius, latitude, +1 more. Returns: result
query_registrationA
Query FAA aircraft registration database.
Search the FAA aircraft registration database for detailed information about registered aircraft, including owner information, aircraft specifications, and registration status.
Inputs: value (required), query_type (required). Returns: result
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 2 tools
The two tools have clearly distinct purposes: one queries real-time aircraft data from ADS-B Exchange, the other queries the FAA registration database. There is no overlap in functionality.
Both tools follow a consistent verb_noun pattern ('query_aircraft', 'query_registration'), making them predictable and easy to understand.
With only two tools, the server is minimal but covers two primary aviation data sources. It feels slightly thin but is reasonable for a focused purpose.
The server covers real-time tracking and registration lookup, which are core aviation queries. Minor gaps exist (e.g., historical data, airport info), but the main workflows are supported.
Maintenance
Related MCP Connectors
OpenSky MCP — live aircraft, served from keyless community ADS-B feeds.
FlightAware MCP — wraps FlightAware AeroAPI v4 (aeroapi.flightaware.com)
Aircraft registry search, flight history, and analytics powered by ADS-B Exchange data.
Flights MCP — live aircraft tracking + aircraft/route registry
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceProvides AI assistants with real-time aircraft tracking, FAA registration, and OpenSky flight data through the Model Context Protocol.1MIT
- AlicenseAqualityDmaintenanceExposes real-time ADS-B aircraft data from a feeder, enabling natural language queries for aircraft positions, receiver statistics, and flight searches.69GPL 3.0
- AlicenseNot gradedqualityDmaintenanceProvides comprehensive flight tracking capabilities using the OpenSky Network API, enabling real-time flight data, geographic searches, historical data, and airport operations through MCP tools.MIT
- AlicenseAqualityAmaintenanceMCP server for FlightAware AeroAPI that enables live flight tracking, airport boards, operator and aircraft lookup, schedule retrieval, and flight alert management via natural language.34641 npm1MIT