Skip to main content

Self-hosted MCP server and tactical web app for real-time air, sea, and space tracking with AI-powered queries and an immersive 3D globe.

Project description

๐Ÿš€ VoyageIntel

Unified real-time air, sea, and space tracking with AI-powered queries and an immersive 3D globe.

License Python

Demo


Features

  • ๐ŸŒ 3D Globe โ€” CesiumJS-powered immersive dark globe with real-time flight, vessel, and satellite rendering
  • โœˆ๏ธ Flight Tracking โ€” Live commercial, private, and military aircraft via ADSB.lol global feed
  • ๐Ÿšข Vessel Tracking โ€” Real-time AIS vessel monitoring worldwide via aisstream.io WebSocket โ€” cargo, tanker, passenger, military, fishing, recreational
  • โš”๏ธ Military Monitoring โ€” Unfiltered military aircraft feed + naval vessel detection โ€” unlike commercial trackers that hide these (FOR EDUCATIONAL PURPOSES ONLY, these are public data)
  • ๐Ÿ›ฐ Satellite Tracking โ€” 6 categories (Space Stations, Military, Weather, Nav, Science, Starlink) via Celestrak + SGP4
  • ๐Ÿš€ ISS Tracking โ€” Real-time position, crew info, pass predictions, and one-click Track ISS
  • โš“ Port Database โ€” ~400 ports worldwide from the World Port Index with spatial queries
  • ๐ŸŒค Weather โ€” Aviation weather via Open-Meteo + marine weather (waves, swell, sea temp) via Marine API
  • ๐ŸŒ Geocoding โ€” Google Maps geocoding with SQLite cache for AI-powered location resolution
  • ๐Ÿค– MCP Server โ€” 25+ tools via FastMCP, streamable HTTP + stdio for Claude Desktop / VS Code / Cursor
  • ๐Ÿ’ฌ BYOK AI Chat โ€” Bring your own API key (Claude, OpenAI, Gemini) โ€” keys stored in browser only
  • โšก SSE Streaming โ€” Server-Sent Events for real-time chat responses with incremental token rendering
  • ๐Ÿ›ก๏ธ Guardrails โ€” Layered chat safety via system prompt hardening + optional LLM Guard scanners
  • ๐Ÿ“Š Playground Dashboard โ€” /playground โ€” single pane of glass for system health, guardrail monitoring, and LangFuse analytics
  • ๐Ÿ–ฅ CLI โ€” Full command suite including voyageintel ask, voyageintel vessels, voyageintel ports
  • ๐Ÿ“ˆ LangFuse Observability โ€” Optional LLM tracing, token tracking, and latency monitoring with dashboard integration

Quick Start

Install

# Recommended for MCP client integration (Claude Desktop, VS Code, etc.)
pipx install voyageintel

# Or install in a virtual environment
pip install voyageintel

โš ๏ธ pipx vs pip: pipx install puts the voyageintel command on your global PATH โ€” required for MCP clients like Claude Desktop that spawn the process directly. pip install inside a virtual environment only makes the command available when the venv is activated. If you use pip, MCP clients will need the full path to the binary (e.g. /path/to/venv/bin/voyageintel).

To upgrade an existing installation:

pipx upgrade voyageintel
# or
pip install --upgrade voyageintel

Verify

voyageintel --version      # Check installed version
voyageintel --help         # View all commands
voyageintel status         # Check configuration and system status

Run

voyageintel serve

Open http://localhost:9097 for the 3D globe and http://localhost:9097/playground for the observability dashboard.

Configuration

VoyageIntel works out of the box with zero configuration for flight and satellite tracking. API keys enable additional domains:

Feature Required Keys Notes
3D Globe + flights + satellites None Works immediately
Vessel tracking (AIS) VI_AISSTREAM_API_KEY Free from aisstream.io (GitHub login)
Terrain layer VI_CESIUM_ION_TOKEN Free from cesium.com
Geocoding VI_GOOGLE_MAPS_API_KEY Google Cloud Console โ€” Geocoding API
Web AI Chat None (BYOK in browser) Set your key in โš™ Settings in the web UI
CLI voyageintel ask VI_LLM_PROVIDER, VI_LLM_API_KEY, VI_LLM_MODEL Stored in .env file
LangFuse observability VI_LANGFUSE_PUBLIC_KEY, VI_LANGFUSE_SECRET_KEY Free tier at langfuse.com

Create a .env file if needed:

# Server
VI_HOST=0.0.0.0
VI_PORT=9097

# AIS Data (required for maritime vessel tracking)
VI_AISSTREAM_API_KEY=your_key

# AIS Performance
VI_AIS_BATCH_FLUSH_INTERVAL=1.0
VI_AIS_RECONNECT_DELAY=5
VI_VESSEL_PRUNE_HOURS=6

# Cesium Ion (optional โ€” enables terrain layer)
VI_CESIUM_ION_TOKEN=your_token

# Google Maps (optional โ€” enables geocoding)
VI_GOOGLE_MAPS_API_KEY=your_key

# LLM โ€” for CLI 'ask' command (optional, web chat uses browser localStorage)
VI_LLM_PROVIDER=anthropic          # anthropic / openai / google
VI_LLM_API_KEY=sk-ant-...
VI_LLM_MODEL=claude-sonnet-4-20250514

# LangFuse (optional โ€” LLM observability + playground analytics)
VI_LANGFUSE_PUBLIC_KEY=pk-lf-...
VI_LANGFUSE_SECRET_KEY=sk-lf-...
VI_LANGFUSE_HOST=https://cloud.langfuse.com
VI_LANGFUSE_OTEL_HOST=https://cloud.langfuse.com

# Playground (opt-in observability dashboard)
VI_PLAYGROUND_ENABLED=true         # default: true

# Poll intervals
VI_FLIGHT_POLL_INTERVAL=60
VI_SATELLITE_POLL_INTERVAL=3600

Graceful Degradation

VoyageIntel starts with whatever API keys are available. Missing keys disable the corresponding domain โ€” no crashes, no error screens.

Keys Provided Domains Available Notes
None Air + Space Zero-config, flights + satellites
VI_AISSTREAM_API_KEY Air + Sea + Space Full maritime tracking enabled
VI_GOOGLE_MAPS_API_KEY + Geocoding AI queries resolve place names automatically
VI_CESIUM_ION_TOKEN + 3D terrain Globe gets terrain tiles
All keys Full experience All domains + geocoding + terrain

Deployment Branches

VoyageIntel ships three branches optimised for different environments:

voyageintel railway railway-guardrails
Use case Development + maritime features Cloud demo (Railway, Render, Fly.io) Cloud demo + enhanced chat safety
Flight data ADSB.lol global feed ADSB.lol global feed ADSB.lol global feed
Vessel data aisstream.io WebSocket aisstream.io WebSocket aisstream.io WebSocket
Poll strategy ADSB.lol global + /v2/mil ADSB.lol global + /v2/mil ADSB.lol global + /v2/mil
Guardrails System prompt only System prompt only System prompt + LLM Guard
Extra memory โ€” โ€” ~500MB for guardrail models
MCP Tools 25+ (air + sea + space) 15 (air + space) 15 (air + space)

ADSB.lol Coverage

ADSB.lol is a crowdsourced network of volunteer ADS-B feeders. Coverage is excellent in North America, Europe, and parts of Asia, but sparse in regions with fewer feeders (e.g. central China, much of Africa, central Russia). This is a data availability limitation of the volunteer feeder network, not something that can be resolved in code.


Architecture Overview

graph TB
    subgraph External["โ˜๏ธ External Data Sources"]
        ADSB[ADSB.lol<br/>Flights ยท Military ยท Search]
        AIS[aisstream.io<br/>WebSocket ยท AIS Vessels]
        CT[Celestrak<br/>TLE Satellite Data]
        HEX[hexdb.io<br/>Aircraft Meta ยท Routes]
        WPI[World Port Index<br/>Static Dataset]
        OM[Open-Meteo<br/>Land + Marine Weather]
        ON[Open Notify<br/>ISS Crew]
        GM[Google Maps<br/>Geocoding API]
        LF[LangFuse Cloud<br/>OTEL Traces ยท Analytics]
    end

    subgraph Backend["โš™๏ธ Backend ยท Python ยท Starlette"]
        direction TB
        subgraph Pollers["Background Pollers + Streams"]
            FP[Flight Poller<br/>60s ยท ADSB.lol HTTP]
            WS[AIS WebSocket Client<br/>Persistent ยท aisstream.io<br/>Batched writes 1-2s]
            SP[Satellite Poller<br/>1hr ยท Celestrak TLEs]
        end
        subgraph Processing["Data Processing"]
            FC[Flight Classifier]
            VC[Vessel Classifier + AIS Parser]
            PROP[SGP4 Propagator ยท Skyfield]
            GEO[Geocoder + Resolver<br/>Google Maps ยท Cached]
        end
        SVC[Unified Service Layer<br/>service.py]
        API[REST API<br/>/api/*]
        MCP[MCP Server<br/>FastMCP ยท /mcp ยท 25+ tools]
        GW[LLM Gateway<br/>LiteLLM ยท BYOK ยท SSE]
        GR[Guardrails<br/>LLM Guard ยท Optional]
        PG[Playground API<br/>/api/playground/*]
    end

    subgraph Storage["๐Ÿ’พ SQLite ยท WAL Mode"]
        DB[(flights ยท vessels ยท satellites<br/>ports ยท aircraft_meta ยท geocode_cache<br/>R*Tree indexes)]
    end

    subgraph Frontend["๐ŸŒ Unified Web UI ยท Vanilla JS"]
        GLOBE[CesiumJS Globe<br/>Flights + Vessels + Satellites]
        DETAIL[Detail Panels<br/>Aircraft ยท Vessel ยท Satellite]
        CHAT[Chat Panel<br/>Cross-domain ยท BYOK ยท SSE]
        DASH[Playground Dashboard<br/>Air + Sea + Space Metrics]
    end

    subgraph Clients["๐Ÿ”Œ External Clients"]
        CLI[CLI<br/>voyageintel ask/flights/vessels/iss]
        CD[Claude Desktop<br/>stdio]
        CC[Claude Code<br/>Streamable HTTP]
        VS[VS Code / Cursor<br/>Streamable HTTP]
    end

    ADSB -->|Poll 60s + on-demand| FP
    AIS -->|WebSocket stream| WS
    CT -->|TLE hourly| SP
    HEX -->|Cached lookups| SVC
    WPI -->|Static load| DB
    OM --> SVC
    ON --> SVC
    GM -->|Cached lookups| GEO

    FP --> FC --> DB
    WS --> VC --> DB
    SP --> PROP --> DB

    DB --> API
    DB --> SVC
    ADSB -->|On-demand queries| SVC
    SVC --> MCP
    SVC --> GW
    SVC --> CLI
    SVC --> PG
    GW --> GR
    GW -->|OTEL| LF
    LF -->|REST reads| PG

    API --> GLOBE
    API --> DETAIL
    GW --> CHAT
    PG --> DASH

    MCP --> CD
    MCP --> CC
    MCP --> VS

VoyageIntel is a Python/Starlette backend with a vanilla JS + CesiumJS frontend and no build step. Three background data ingestion processes run concurrently: an HTTP flight poller (ADSB.lol, 60s interval), a persistent WebSocket connection (aisstream.io, real-time AIS stream with batched writes), and an HTTP satellite poller (Celestrak, 1hr interval). All data flows into a single SQLite database with WAL mode โ€” flights are appended and pruned, vessels are upserted by MMSI, and satellite TLEs are refreshed hourly. R*Tree spatial indexes accelerate radius queries for vessels and ports. A unified service layer (service.py) provides cross-domain query logic consumed by four surfaces: the REST API (globe rendering), the MCP server (25+ tools for Claude Desktop / VS Code / Cursor), the LLM gateway (BYOK AI chat with SSE streaming), and the CLI. The LLM gateway (gateway.py) implements a provider-agnostic tool-calling loop via LiteLLM, supporting Claude, OpenAI, and Gemini through a single BYOK interface โ€” with SSE streaming for real-time token delivery. The /playground dashboard provides unified observability across all domains โ€” flight counts, vessel counts by type, satellite cache stats, WebSocket health, polling status, guardrail monitoring, and LangFuse analytics. All flight classification (military, private, commercial) is performed through pattern-based heuristics in the classifier module, vessel classification maps AIS type codes to categories with MMSI-based flag state detection, and satellite positions are computed locally via SGP4 propagation using Skyfield.


MCP Client Setup

VoyageIntel exposes 25+ MCP tools via two transports:

Transport How it works Used by
Streamable HTTP (/mcp) Client connects to a running VoyageIntel server Claude Code, VS Code, Cursor
stdio MCP client spawns voyageintel as a child process Claude Desktop

Claude Desktop โœ… Tested

Claude Desktop uses stdio transport โ€” it spawns voyageintel as a child process.

Edit ~/Library/Application Support/Claude/claude_desktop_config.json (macOS) or %APPDATA%\Claude\claude_desktop_config.json (Windows):

If installed via pipx (recommended):

{
  "mcpServers": {
    "voyageintel": {
      "command": "voyageintel",
      "args": ["serve", "--stdio"]
    }
  }
}

If installed via pip in a virtual environment:

{
  "mcpServers": {
    "voyageintel": {
      "command": "/full/path/to/.venv/bin/voyageintel",
      "args": ["serve", "--stdio"]
    }
  }
}

Find your full path with which voyageintel (macOS/Linux) or where voyageintel (Windows).

After saving, restart Claude Desktop completely (quit and reopen). Look for the ๐Ÿ”Œ tools icon โ€” voyageintel should appear with 25+ tools.

Troubleshooting:

  • Check logs: cat ~/Library/Logs/Claude/mcp-server-voyageintel.log
  • "No such file or directory" โ†’ use full path or install via pipx
  • "Could not attach" โ†’ ensure no other voyageintel serve is running on the same port

Claude Code โœ… Tested

Claude Code uses streamable HTTP transport โ€” it connects to a running VoyageIntel server.

First, start the server:

voyageintel serve

Then register the MCP server:

claude mcp add voyageintel --transport http http://localhost:9097/mcp

Verify:

claude mcp list

Try asking: "What military vessels and aircraft are near the Strait of Hormuz?"


VS Code + GitHub Copilot โœ… Tested

VS Code uses streamable HTTP transport via .vscode/mcp.json.

First, start the server:

voyageintel serve

Then create .vscode/mcp.json in your workspace:

{
  "servers": {
    "voyageintel": {
      "url": "http://localhost:9097/mcp"
    }
  }
}

Verify via Command Palette (Cmd+Shift+P): MCP: List Servers โ€” voyageintel should appear. Use Agent mode in Copilot Chat to access MCP tools.

Try asking: "What cargo vessels are near Singapore right now?"


Cursor โœ… Compatible

Cursor uses the same streamable HTTP transport as VS Code.

Start the server:

voyageintel serve

Add to .cursor/mcp.json:

{
  "servers": {
    "voyageintel": {
      "url": "http://localhost:9097/mcp"
    }
  }
}

Google Maps MCP Companion (Optional)

For directions, places, distance matrix, and elevation โ€” connect Google's official MCP server alongside VoyageIntel:

Claude Desktop:

{
  "mcpServers": {
    "voyageintel": {
      "command": "voyageintel",
      "args": ["serve", "--stdio"]
    },
    "google-maps": {
      "command": "npx",
      "args": ["-y", "@googlemaps/maps-mcp-server"],
      "env": {
        "GOOGLE_MAPS_API_KEY": "your-key"
      }
    }
  }
}

VS Code:

{
  "servers": {
    "voyageintel": {
      "url": "http://localhost:9097/mcp"
    },
    "google-maps": {
      "type": "stdio",
      "command": "npx",
      "args": ["-y", "@googlemaps/maps-mcp-server"],
      "env": {
        "GOOGLE_MAPS_API_KEY": "your-key"
      }
    }
  }
}

Remote / Cloud Deployment

If VoyageIntel is deployed on a cloud platform (e.g. Railway), remote MCP clients can connect directly:

VS Code / Cursor:

{
  "servers": {
    "voyageintel": {
      "url": "https://voyageintel.dev/mcp"
    }
  }
}

Claude Code:

claude mcp add voyageintel --transport http https://voyageintel.dev/mcp

Gemini CLI ๐Ÿ”œ Pending

Configuration pending โ€” will be added once Gemini CLI MCP support is verified.

OpenAI Codex ๐Ÿ”œ Pending

Configuration pending โ€” will be added once Codex MCP support is verified.


CLI Helper

Generate MCP config snippets directly:

voyageintel mcp-config              # Claude Desktop (stdio)
voyageintel mcp-config --stdio      # Claude Desktop (stdio, explicit)
voyageintel mcp-config --vscode     # VS Code / Cursor (HTTP)

Available MCP Tools

Air Domain (12 tools)

Tool Description
flights_near Live flights near a geographic point
search_flight Search by callsign or ICAO24 hex
military_flights All airborne military aircraft worldwide
flights_to Flights heading to a destination airport
flights_from Flights departed from an origin airport
aircraft_info Aircraft metadata by ICAO24 hex
get_satellites Satellite positions by category
get_weather Current weather at any location
get_status System health and diagnostics
iss_position Real-time ISS position
iss_crew Current ISS crew members
iss_passes ISS pass predictions for a location

Sea Domain (10 tools)

Tool Description
vessels_near Live vessels near a geographic point
search_vessel Search by name, MMSI, or IMO
military_vessels All tracked military/naval vessels
vessels_by_type Filter by vessel type (cargo, tanker, etc.)
vessels_to Vessels heading to a destination port
vessels_from Vessels near/departing a port
vessel_info Vessel metadata by MMSI
port_info Port details by UN/LOCODE
ports_near Find ports near a location
sea_weather Marine weather โ€” waves, swell, sea temp

Cross-Domain (4 tools)

Tool Description
activity_near All activity near a point โ€” flights + vessels
military_activity All military assets โ€” aircraft + naval vessels
geocode Resolve place name to coordinates (Google Maps, cached)
playground_system Unified system health โ€” air + sea + space metrics

Architectural Decisions

Decision Choice Why
Single globe, multiple domains Flights + vessels + satellites on one CesiumJS viewer Core value prop โ€” unified situational awareness. Toggle chips let users show/hide each domain
WebSocket for AIS, HTTP polling for flights Persistent WebSocket to aisstream.io, 60s HTTP polling for ADSB.lol AIS is a real-time stream (~300 msg/sec). ADSB.lol doesn't offer WebSocket โ€” polling at 60s balances freshness with API courtesy
Upsert for vessels, append for flights Different storage strategies per domain Vessels send frequent position updates on same MMSI โ€” upsert keeps DB lean. Flights are snapshot-based โ€” append + prune
Batched AIS writes Buffer + flush every 1โ€“2s Individual INSERTs at ~300 msg/sec would bottleneck SQLite. Batching amortizes write cost into one transaction per flush
R*Tree spatial indexes SQLite R*Tree for vessels + ports B-tree on (lat, lon) is poor for radius queries. R*Tree is built-in and optimized for bounding-box/radius lookups
Dual-source data architecture Globe reads from SQLite (polled), Chat/MCP queries ADSB.lol live Isolates polling from on-demand queries โ€” avoids API rate limit contention, ensures globe rendering never competes with user queries
BillboardCollection over Entity API CesiumJS BillboardCollection + LabelCollection Entity API crashes at 25k+ objects. BillboardCollection handles 10k+ aircraft smoothly with canvas-based icon caching
SQLite with WAL mode Single-file DB at ~/.voyageintel/voyageintel.db Zero-config, no external dependencies, WAL enables concurrent reads during writes from 3 ingestion sources
SGP4 propagation over external APIs Skyfield + sgp4 for satellite/ISS positions Eliminates external API dependency for position data. TLEs refresh hourly, positions computed locally with sub-km accuracy
Geocoding baked in, other Maps APIs external Google Maps Geocoding in service layer, other APIs via companion MCP Geocoding directly improves AI query quality โ€” "ships near Singapore" just works. Directions/Places stay external to keep scope tight
Static port database Bundle World Port Index as JSON (~400 ports) Eliminates external dependency. Rarely changes. Load into SQLite on first boot
Tool-calling loop with result capping Default 50 results per tool, total_count always returned Prevents context window blowout while giving the LLM accurate counts for reporting
BYOK security model API keys in browser localStorage only Keys never touch the server โ€” sent per-request via POST body, never logged, never persisted server-side
Cesium token masking Server-side injection via HTML template replacement Token never exposed in any API response. Injected at serve time via %%CESIUM_TOKEN%% placeholder
Vanilla JS, no build step Pure JS + CesiumJS CDN Zero frontend toolchain complexity. No npm, no webpack, no transpilation
FastMCP dual transport Streamable HTTP (/mcp) + stdio mode HTTP for remote/web clients, stdio for local desktop clients
LiteLLM as LLM gateway Unified API for Claude, OpenAI, Gemini Single tool-calling implementation supports all major providers via provider prefixes
SSE streaming (simple approach) Full tool-calling loop runs server-side, only the final LLM response is streamed Avoids complex partial-stream/tool-call interleaving. Tool status messages sent during processing, final reply streamed token-by-token

Guardrails Strategy

VoyageIntel uses a layered defense approach for chat safety:

Layer Mechanism Cost Branch
System prompt LLM instructed to only answer air/sea/space topics Zero โ€” part of every request All branches
LLM Guard (lightweight) BanTopics, Toxicity, InvisibleText scanners ~500MB model download on first chat railway-guardrails only

The heavy PromptInjection scanner (~738MB) and NoRefusal scanner (~827MB) were excluded in favour of system prompt hardening โ€” a deliberate cost/security tradeoff for cloud deployments where memory is billed per GB/hour.

Classification

Aircraft โ€” Detected via ICAO hex ranges, callsign prefixes, squawk codes, and the ADSB.lol /v2/mil feed. Private jets detected via known ICAO type codes. See src/voyageintel/flights/classifier.py.

Vessels โ€” Classified by AIS ship type codes (0-99) mapped to categories (cargo, tanker, passenger, military, fishing, recreational, special, high_speed). Military vessels additionally detected by name patterns (USS, HMS, HMAS, etc.). Flag state derived from MMSI Maritime Identification Digits. See src/voyageintel/vessels/classifier.py.


Data Sources

Source Used For Auth Transport Notes
ADSB.lol Global flight data, military feed, on-demand queries None HTTP REST (polling + on-demand) Crowdsourced โ€” coverage depends on volunteer feeder density
aisstream.io Real-time AIS vessel positions + static data API key (free, GitHub login) WebSocket (persistent stream) ~300 msg/sec globally. Batched writes to SQLite
Celestrak Satellite TLE orbital data (6 categories) None HTTP REST (hourly poll)
hexdb.io Aircraft metadata + route lookup None HTTP REST (cached 30d/7d) Can go down intermittently. Errors handled gracefully
World Port Index Port names, coordinates, codes (~400 ports) None Static dataset (bundled JSON) Loaded into SQLite on first boot
Open-Meteo Land/aviation weather None HTTP REST (on-demand) Free, no API key required
Open-Meteo Marine Sea conditions โ€” waves, swell, wind, sea temp None HTTP REST (on-demand) Separate API endpoint from land weather
Open Notify ISS crew information None HTTP REST (on-demand)
Google Maps Place name โ†’ lat/lon resolution for AI queries API key (BYOK) HTTP REST (on-demand, cached 30d) Optional โ€” LLM falls back to built-in geography
LangFuse LLM observability + playground analytics BYOK keys OTEL callbacks + REST reads Free tier available

โ„น๏ธ Dual data architecture: The globe reads from SQLite (polled data), while chat/MCP queries APIs live. This separation isolates polling from on-demand queries โ€” avoids API rate limit contention and ensures globe rendering never competes with user queries.


Playground Dashboard

The /playground route provides an AI engineering observability surface โ€” a single pane of glass for system health, guardrail monitoring, and LangFuse analytics.

System Metrics

  • Flights tracked โ€” total with commercial/military/private breakdown (from live poll data)
  • Vessels tracked โ€” total with type breakdown (cargo/tanker/passenger/military/fishing/etc.)
  • AIS WebSocket โ€” connection status, messages/sec, flush throughput
  • Satellites cached โ€” count and categories
  • Polling & uptime โ€” poll cycle count, uptime, poll intervals
  • Database โ€” SQLite file size, retention policy, path
  • Data source health โ€” live status for ADSB.lol, aisstream.io, Celestrak, hexdb.io, Open-Meteo
  • LLM configuration โ€” provider, model, API key status, LangFuse status

Guardrails Monitor

  • Scan counts โ€” input and output scans performed
  • Block rate โ€” blocked count and percentage
  • Scanner status โ€” loaded / lazy / unavailable for each scanner
  • Recent blocked queries โ€” last 20 blocked inputs (anonymised)
  • Gracefully degrades to "available on railway-guardrails branch" when LLM Guard is not installed

LangFuse Analytics

  • Chat sessions โ€” total trace count from LangFuse
  • Tool call frequency โ€” heatmap of MCP tool usage (in-memory tracking for accuracy)
  • Open LangFuse Dashboard โ€” one-click link to the full LangFuse UI
  • Gracefully hidden when LangFuse keys are not configured

Auto-refreshes every 15 seconds. Dark theme, card-based grid, fully responsive.


Web UI Guide

  • Globe โ€” Rotate, zoom, and pan the 3D globe. Flights, vessels, and satellites render in real-time.
  • Toggle chips โ€” Enable/disable flight types (Commercial, Military, Private), vessel types (Cargo, Tanker, Passenger, Naval, Fishing, Recreational), and satellite categories.
  • Click to inspect โ€” Click any flight, vessel, or satellite for a detail panel with metadata, weather, and route info.
  • Track ISS โ€” Click the ๐Ÿ›ฐ Track ISS button in the status bar to rotate the globe to the ISS.
  • Layers โ€” Switch between Dark, Satellite, Streets, and Terrain (terrain requires free Cesium Ion token).
  • Share โ€” Snapshot your current view and share via URL or Web Share API.
  • Chat โ€” Click the ๐Ÿ’ฌ floating button to open the AI chat. Set your API key in โš™ Settings first. Responses stream in real-time via SSE.
  • Playground โ€” Navigate to /playground for system health, guardrail stats, and LangFuse analytics.

๐Ÿ’ก Tip: Clear chat history regularly for best performance on complex queries.


CLI Reference

Command Description
voyageintel --version Show installed version
voyageintel serve Start server (MCP + REST + Web UI)
voyageintel serve --stdio MCP stdio mode for Claude Desktop
voyageintel status Show config and system status
voyageintel init Initialise database
voyageintel config Show current config as JSON
voyageintel ask "question" Ask the AI a question (uses .env credentials)
voyageintel flights --military List military flights
voyageintel flights --search RYR123 Search by callsign/hex
voyageintel flights --lat 51 --lon -0.5 Flights near a point
voyageintel vessels --military Naval vessels
voyageintel vessels --near 51 --lon -0.5 Vessels near a point
voyageintel vessels --type tanker Filter by type
voyageintel vessels --search "Ever Given" Search vessel
voyageintel ports --lat 51 --lon -0.5 Nearby ports
voyageintel ports --code SGSIN Port details by code
voyageintel satellites --category iss List satellites by category
voyageintel iss ISS position + crew
voyageintel iss --passes --lat 51 --lon -0.5 ISS pass predictions
voyageintel mcp-config Print MCP config for Claude Desktop
voyageintel mcp-config --vscode Print MCP config for VS Code

API Reference

Method Path Description
GET / Web UI (unified globe)
GET /playground Playground dashboard
GET /api/status System status + config
GET /api/flights?lat_min&lat_max&lon_min&lon_max Cached flights (bbox)
GET /api/aircraft/{icao24} Aircraft metadata
GET /api/route/{callsign} Flight route
GET /api/satellites?category= Satellite positions
GET /api/weather?lat=&lon= Current weather
GET /api/sea-weather?lat=&lon= Marine weather โ€” waves, swell, sea temp
GET /api/iss ISS position + crew
GET /api/iss/passes?lat=&lon= ISS pass predictions
GET /api/vessels?lat_min&lat_max&lon_min&lon_max Vessels (bbox)
GET /api/vessel/{mmsi} Vessel detail by MMSI
GET /api/vessels/stats Vessel count by type
GET /api/ports?lat=&lon=&radius_km= Nearby ports
GET /api/port/{code} Port detail by UN/LOCODE
POST /api/chat BYOK chat
POST /api/chat/stream BYOK chat with SSE streaming
GET /api/playground/system System health metrics
GET /api/playground/guardrails Guardrail scan/block stats
GET /api/playground/langfuse LangFuse analytics
POST /mcp MCP streamable HTTP endpoint

Context Management & Rate Limits

VoyageIntel uses a tool-calling architecture where the LLM makes multiple API calls per query. We've implemented several strategies to manage token usage:

  • Chat history windowing โ€” Only the last 6 messages are sent to the LLM per request, reducing input tokens while preserving context.
  • Result capping โ€” Tool results default to 50 items with total_count always returned, preventing context window blowout.
  • Retry with backoff โ€” Rate limit errors trigger automatic retries (up to 3 attempts, 30s/60s waits).
  • Dual system prompts โ€” Web chat uses HTML formatting, CLI uses markdown, keeping responses lean per surface.
  • SSE streaming โ€” Final LLM response streamed token-by-token via Server-Sent Events for perceived responsiveness.

๐Ÿ’ก Tip: Clear chat history before complex queries for best results. Users on free-tier LLM plans should consider lighter models (e.g. claude-haiku-4-20250514, gpt-4o-mini).


Roadmap

Feature Status
Real-time flight tracking (ADSB.lol) โœ… Done
Military aircraft monitoring โœ… Done
Satellite tracking (6 categories) โœ… Done
ISS tracking + pass predictions โœ… Done
CesiumJS 3D globe โœ… Done
MCP server (25+ tools) โœ… Done
BYOK AI chat with SSE streaming โœ… Done
/playground dashboard โœ… Done
AIS vessel tracking via aisstream.io โœ… Done
Port database (World Port Index) โœ… Done
Marine weather (waves, swell, sea temp) โœ… Done
Google Maps geocoding with cache โœ… Done
Cross-domain queries (air + sea) โœ… Done
Claude Desktop MCP integration โœ… Tested
Claude Code MCP integration โœ… Tested
VS Code + GitHub Copilot MCP integration โœ… Tested
Unified globe โ€” vessels on 3D globe ๐Ÿ”œ Phase 4
Vessel detail panel (click-to-inspect) ๐Ÿ”œ Phase 4
Navbar dropdowns + status bar redesign ๐Ÿ”œ Phase 4
Playground โ€” maritime metrics ๐Ÿ”œ Phase 5
PyPI publication (pip install voyageintel) ๐Ÿ”œ Phase 5
Railway deployment (voyageintel.dev) ๐Ÿ”œ Phase 5
Guardrails branch ๐Ÿ”œ Planned
Vessel trails (last 30 min track) ๐Ÿ”œ Planned
Port activity monitor (arrivals/departures) ๐Ÿ”œ Planned
Cross-domain correlation alerts ๐Ÿ”œ Planned
Historical replay / time slider ๐Ÿ”ฎ Future
Sub-sea intelligence layer ๐Ÿ”ฎ Future
Anomaly detection (unusual routes, AIS gaps) ๐Ÿ”ฎ Future
Sanctions vessel list integration ๐Ÿ”ฎ Future

Relationship to SkyIntel

VoyageIntel is forked from SkyIntel (pip install skyintel, skyintel.dev) โ€” an air + space tracking platform. VoyageIntel is the superset: everything SkyIntel does, plus maritime (AIS vessel tracking, ports, marine weather) and future sub-sea intelligence.

Aspect SkyIntel VoyageIntel
Scope Air + Space Air + Sea + Space (+ future sub-sea)
Package pip install skyintel pip install voyageintel
Domain skyintel.dev voyageintel.dev
Port 9096 9097
Config prefix SKYINTEL_ VI_
MCP tools 15 (air + space) 25+ (air + sea + space + cross-domain)
Data ingestion HTTP polling only HTTP polling + WebSocket (batched)
Spatial indexing None R*Tree for vessels + ports

Both projects coexist independently and can run simultaneously.


Contributing

VoyageIntel is open source under the Apache 2.0 license. We welcome contributions:

  • ๐Ÿ› Bug reports โ€” Open an issue with reproduction steps
  • ๐Ÿ’ก Feature requests โ€” Suggest ideas via GitHub Issues
  • ๐Ÿ”ง Pull requests โ€” Especially welcome in:
    • Maritime data enrichment (vessel photos, classification improvements)
    • Aircraft classifier improvements (see src/voyageintel/flights/classifier.py)
    • Vessel classifier improvements (see src/voyageintel/vessels/classifier.py)
    • Globe rendering performance
    • Additional data sources
    • Test coverage
    • Documentation

Development Setup

git clone https://github.com/0xchamin/skyintel.git
cd skyintel
git checkout voyageintel
python -m venv .venv && source .venv/bin/activate
pip install -e ".[dev]"
cp .env.example .env  # Add your API keys
voyageintel serve

Support the Project

If you find VoyageIntel useful, consider supporting its development:

Buy Me A Coffee

โญ Star this repo if you find it useful โ€” it helps others discover the project.


Enterprise

Need a managed deployment, custom integrations, SLA support, or additional data sources?

๐Ÿ“ง Let's talk โ€” reach out via GitHub Issues or Buy Me a Coffee to start a conversation.


Disclaimer

VoyageIntel is an educational project and technical demonstration showcasing real-time multi-domain data integration, Model Context Protocol (MCP) tool-calling patterns, and AI-powered geospatial intelligence.

All data is sourced from publicly available open APIs โ€” no classified, proprietary, or restricted data is used. Flight positions come from ADSB.lol, vessel positions from aisstream.io, satellite TLEs from Celestrak, ISS data from Open Notify, and weather from Open-Meteo.

  • Flight, vessel, and satellite data is provided as-is from third-party sources. Accuracy, completeness, and availability are not guaranteed.
  • Military aircraft data is sourced from publicly available ADS-B signals. Not all military aircraft broadcast ADS-B.
  • Military vessel detection is based on AIS type codes and name patterns. Many military vessels disable or limit AIS transmission.
  • Aircraft classification (military/private/commercial) and vessel classification are based on known patterns and heuristics โ€” for educational purposes only.
  • ADSB.lol coverage depends on volunteer ADS-B feeder density โ€” some regions have limited coverage.
  • AIS coverage depends on aisstream.io's receiver network and the willingness of vessels to broadcast.
  • LLM-generated reports and analyses are AI-assisted and should not be used as sole sources for operational, safety, or security decisions.
  • BYOK API keys are stored in browser localStorage only โ€” never persisted server-side.

This project is not affiliated with any government, military, or intelligence agency. Aircraft, vessel, and satellite positions shown are approximate and should not be used for navigation, safety-critical decisions, or operational purposes.


License

Apache 2.0 โ€” see LICENSE for details.


Built with โค๏ธ by 0xchamin

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

voyageintel-1.0.0.tar.gz (119.9 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

voyageintel-1.0.0-py3-none-any.whl (136.3 kB view details)

Uploaded Python 3

File details

Details for the file voyageintel-1.0.0.tar.gz.

File metadata

  • Download URL: voyageintel-1.0.0.tar.gz
  • Upload date:
  • Size: 119.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.9

File hashes

Hashes for voyageintel-1.0.0.tar.gz
Algorithm Hash digest
SHA256 58fd6b831bd9d57aa2c00c113988a9b8eed0ed4d1013b3a7493be57b8a67a439
MD5 de1393bafe88998d1e1730bc05024e0e
BLAKE2b-256 19fd4ac50f72dcb44efa9b40d92c1fd79c4006b8084e300917a364884bf41f95

See more details on using hashes here.

File details

Details for the file voyageintel-1.0.0-py3-none-any.whl.

File metadata

  • Download URL: voyageintel-1.0.0-py3-none-any.whl
  • Upload date:
  • Size: 136.3 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.9

File hashes

Hashes for voyageintel-1.0.0-py3-none-any.whl
Algorithm Hash digest
SHA256 85c1460e487de820e94a907fc7b15064ce9e27e548080330e18c595ee9cab72a
MD5 e20b77d5c3ecbd377906528f7d894d5d
BLAKE2b-256 abb88a42300a9fe20087c29b9cd830f14c61645207c4f1ae8654aafa8315e436

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page