Aviation MCP demo

Ask questions about US commercial aviation — airports, fleets, operators — and get a chart back inside your chat. The demo pairs a public Parquet dataset (BTS T-100 + FAA Registry + OpenFlights) with an MCP server that hands the LLM a schema-scoped SQL surface and returns an interactive ECharts iframe.

The same server speaks two hosts: this blog's AI chat and Claude Desktop. Architecture walkthrough in the companion blog post (link below).

Add to Claude Desktop

Preconditions
Requires Claude Desktop with MCP support (any recent build). The wrapped variant additionally needs Node.js 18+ on your PATH — npx installs mcp-remote on first run.
Option A — npx mcp-remote (recommended)
Broadest compatibility. Bridges Claude Desktop's stdio transport to our Streamable HTTP endpoint.
{
  "mcpServers": {
    "aviation": {
      "command": "npx",
      "args": ["-y", "mcp-remote", "https://chris.towles.dev/mcp/aviation"]
    }
  }
}

Paste into ~/Library/Application Support/Claude/claude_desktop_config.json (macOS) or %APPDATA%\Claude\claude_desktop_config.json (Windows), then restart Claude Desktop.

Option B — native Streamable HTTP (newer Claude Desktop)
Skips the Node bridge. Verify your Claude Desktop build supports the streamable-http transport before using this shape.
{
  "mcpServers": {
    "aviation": {
      "transport": {
        "type": "streamable-http",
        "url": "https://chris.towles.dev/mcp/aviation"
      }
    }
  }
}

How it looks

Screenshots to be captured post-deploy (tracked in the Unit 7 report).

Chart iframe rendering inside Claude DesktopChart iframe rendering inside the blog chatFollow-up chip click appends a new chart

Architecture

Companion blog post walkthrough: link TBD (Unit 8). The MCP server lives at https://chris.towles.dev/mcp/aviation and speaks JSON-RPC over Streamable HTTP. DuckDB reads Parquet from a public GCS bucket; chart options are generated by Claude Sonnet with defense-in-depth SQL safety (AST allowlist + row cap + query timeout).