Skip to main content
Glama

flighty-mcp

A read-only MCP server that exposes your personal Flighty app flight data as geo-ready legs with departure and arrival coordinates. Query your flight history by date, year, or flight number; browse aggregate stats (distance, unique airports/airlines, top routes).

Credit: inspired by LukasHaas/flighty-mcp for the original idea.

Tools

list_my_flights

List your own flights as geo-ready legs (departure/arrival airports with coordinates).

Arguments:

  • year (optional): Filter to a calendar year (e.g. 2025).

  • after (optional): Only flights departing on/after this ISO date (YYYY-MM-DD).

  • before (optional): Only flights departing before this ISO date (YYYY-MM-DD).

  • upcoming_only (optional): Return non-archived flights, soonest first. Full history is newest first.

  • limit (optional): Maximum number of legs to return (default 200).

Returns: List of leg objects with this structure:

{
  "date": "2025-06-23",
  "flight_no": "UA194",
  "airline": {
    "iata": "UA",
    "name": "United Airlines"
  },
  "from": {
    "iata": "SFO",
    "city": "San Francisco",
    "country": "United States",
    "lat": 37.6213,
    "lon": -122.379
  },
  "to": {
    "iata": "JFK",
    "city": "New York",
    "country": "United States",
    "lat": 40.6413,
    "lon": -73.7781
  },
  "departure": "2025-06-23T10:30:00",
  "arrival": "2025-06-24T01:15:00Z"
}

get_flight

Get your most recent flight leg matching a flight number (e.g. "UA194").

Arguments:

  • flight_no: The flight number (case- and space-insensitive).

Returns: A single leg object (or null if no match found).

flight_stats

Aggregate stats over your flights: counts, distance, unique airports/airlines, and top routes.

Arguments:

  • year (optional): Filter stats to a calendar year. Omit for all-time.

Returns: Stats object with this structure:

{
  "flights": 42,
  "distance_km": 18500.5,
  "unique_airports": 15,
  "unique_airlines": 5,
  "top_routes": [
    { "route": "SFO -> JFK", "count": 8 },
    { "route": "JFK -> SFO", "count": 7 }
  ],
  "top_airlines": [
    { "iata": "UA", "name": "United Airlines", "count": 12 }
  ],
  "year": "all_time"
}

animate_trip

Build a flight-animator route link for your trip to a place.

Resolves the connected flights from your home (or origin) to destination and returns shareable links: url (one-way trip) and round_trip_url (there and back). May instead return a resolution prompt with status ambiguous_destination, confirm_home, or no_match.

Arguments:

  • destination: Where the trip goes — IATA code, city, or country (e.g. "Japan", "NRT").

  • origin (optional): Starting location — IATA code, city, or country. Defaults to your inferred home (most common departure airport).

  • after (optional): ISO date (YYYY-MM-DD); only trips departing on/after it.

  • before (optional): ISO date (YYYY-MM-DD); only trips departing before it.

Example: "animate my flight to Japan"

Returns: If successful, a dict with keys status (always "ok"), url, round_trip_url (if a return is found), home, destination, stops (summary), start_date, end_date, leg_count, and home_confidence. On ambiguity or mismatch, returns status with one of: no_match (no flights match criteria), ambiguous_destination (multiple cities match the destination), or confirm_home (inferred home confidence is low—returns top alternatives for confirmation).

Route link format: the ?d= value is base64url of {"v":1,"stops":[…]} (the versioned envelope shared with flight-animator's decoder). Each stop carries code, lat, lon, label, and optional arrive/depart (ISO 8601). We always embed lat/lon so the animator needs no airport-table lookup and so points outside its bundled dataset still render — consumers should prefer the embedded coordinates over resolving the code.

Related MCP server: flightaware-mcp

Installation

Install uv, clone this repository, and replace /absolute/path/to/flighty-mcp below with the clone's absolute path.

Codex

codex mcp add flighty -- uv --directory /absolute/path/to/flighty-mcp run flighty-mcp

Restart Codex after adding the server. The ChatGPT desktop app, Codex CLI, and Codex IDE extension share this configuration.

Claude Code

claude mcp add --scope user flighty -- uv --directory /absolute/path/to/flighty-mcp run flighty-mcp

Claude Desktop and Cursor

Add this entry to Claude Desktop's claude_desktop_config.json or Cursor's ~/.cursor/mcp.json:

{
  "mcpServers": {
    "flighty": {
      "command": "uv",
      "args": ["--directory", "/absolute/path/to/flighty-mcp", "run", "flighty-mcp"]
    }
  }
}

Restart the client after saving the file.

VS Code / GitHub Copilot

Add this to your user or workspace mcp.json:

{
  "servers": {
    "flighty": {
      "type": "stdio",
      "command": "uv",
      "args": ["--directory", "/absolute/path/to/flighty-mcp", "run", "flighty-mcp"]
    }
  }
}

You can open the user file with MCP: Open User Configuration from the Command Palette.

Other stdio MCP clients

Use the mcpServers JSON example above, or adapt its command and args values to your client's configuration format. This server uses standard MCP over stdio and has no client-specific runtime behavior.

Configuration

Variable

Default

Description

FLIGHTY_DB_PATH

$HOME/Library/Containers/com.flightyapp.flighty/Data/Documents/MainFlightyDatabase.db

Path to the Flighty app's SQLite database.

FLIGHTY_USER_ID

Auto-detected from UserProfile table

The Flighty user ID to query (normally auto-detected; set only if overriding).

FLIGHT_ANIMATOR_BASE_URL

https://flights.sailingnaturali.com

Base URL for animate_trip route links (consumed by the companion flight-animator app).

Full Disk Access Requirement

Important: The MCP server needs macOS Full Disk Access to read the Flighty database.

Symptom: If the server fails to connect or reads hang indefinitely, it's likely because Full Disk Access is missing.

Solution:

  1. Open System PreferencesPrivacy & SecurityFull Disk Access.

  2. Add the app that will launch this server:

    • For Codex, Claude Desktop, Cursor, or VS Code, add that application.

    • For Claude Code or another terminal-launched client, add Terminal (or your terminal app).

  3. Restart the app (or kill and relaunch it).

  4. Try again.

The database lives at ~/Library/Containers/com.flightyapp.flighty/Data/Documents/, which is in your user's private container — Full Disk Access is required for any application to read it.

Available Tools

3 tools
flight_statsA

Aggregate stats over your flights: counts, distance, unique airports/airlines, top routes.

Args: year: Filter stats to a calendar year. Omit for all-time. upcoming_only: If true, return only upcoming (non-archived) flights. Default false returns your full flight history.

ParametersJSON Schema
NameRequiredDescriptionDefault
yearNo
upcoming_onlyNo

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden. It describes the tool as returning aggregated stats (safe, read-only) without side effects, but does not disclose any rate limits or auth requirements. Given the simple nature, this is adequate but not exceptional.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise, with a front-loaded purpose sentence followed by parameter details. Every sentence adds value with no redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema exists, but the description lists the types of stats (counts, distance, unique airports/airlines, top routes). This is informative, though exact field names are not provided. The tool is relatively simple, so completeness is adequate.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, so the description must compensate. It explains 'year' filters to a calendar year, omit for all-time, and 'upcoming_only' returns only upcoming flights. This adds meaningful context beyond the raw schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states it provides aggregate stats over flights, listing specific metrics (counts, distance, unique airports/airlines, top routes). This distinguishes it from siblings get_flight (single flight) and list_my_flights (list of flights).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage for aggregated statistics but does not explicitly state when to use vs alternatives. It provides filtering options (year, upcoming_only) but no when-not or alternative recommendations.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_flightA

Get your most recent flight leg matching a flight number (e.g. "UA194").

Args: flight_no: The flight number (case- and space-insensitive).

ParametersJSON Schema
NameRequiredDescriptionDefault
flight_noYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.1/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Description states it's a retrieval operation ('Get'), implying no side effects. With no annotations, it carries full burden. It specifies 'most recent' but doesn't explain chronological ordering, error handling (e.g., no matching flight), or whether the tool requires authentication. Could add more detail on behavioral guarantees.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

One clear sentence plus concise parameter description. No fluff or repetition. Front-loaded with action and purpose.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple tool with one param and output schema, description covers what input is expected and what to get back ('most recent flight leg'). Minor gaps: doesn't specify whether 'most recent' is based on departure time or schedule, or if multiple legs exist per flight.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema provides no description (0% coverage). The description adds meaning: flight_no is case- and space-insensitive. This is valuable extra info beyond schema type. Single parameter fully described.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ('Get'), resource ('most recent flight leg'), and criterion (matching flight number). Example 'UA194' clarifies format. Distinguishes from siblings 'flight_stats' and 'list_my_flights' by implying a single recent leg lookup.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage for retrieving the most recent leg of a specific flight, but lacks explicit guidance on when to use this tool versus alternatives like 'list_my_flights' (for listing all flights) or 'flight_stats' (for statistics). No exclusions or prerequisites stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_my_flightsA

List your own flights as geo-ready legs (departure/arrival airports with coordinates).

Args: year: Filter to a calendar year (e.g. 2025). after: Only flights departing on/after this ISO date (YYYY-MM-DD). before: Only flights departing before this ISO date (YYYY-MM-DD). upcoming_only: If true, return only upcoming (non-archived) flights. Default false returns your full flight history. limit: Maximum number of legs to return (default 200, newest first).

ParametersJSON Schema
NameRequiredDescriptionDefault
yearNo
afterNo
beforeNo
upcoming_onlyNo
limitNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations provided, so description carries transparency burden. It discloses filtering options and that output includes geo coordinates, but does not mention ordering beyond 'newest first' in limit param, pagination, error handling, or authentication needs.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Description is front-loaded with purpose, then parameter details. Slightly verbose with 'Args:' label, but overall efficient and clear. Could be trimmed but still good.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Covers input parameters well. Mentions output includes geo-coordinates for departure/arrival. With output schema present, not fully describing output is acceptable. Slight gap: doesn't explicitly state output is a list of flight legs.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, so description compensates fully. Each of the 5 parameters (year, after, before, upcoming_only, limit) is explained with clear semantics and usage context, e.g., 'after: Only flights departing on/after this ISO date (YYYY-MM-DD).'

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description clearly states it lists the user's own flights as geo-ready legs with departure/arrival airports and coordinates. Distinguishes from siblings 'get_flight' and 'flight_stats' by focusing on list of flights with geo data.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Description implies use when needing a list of own flights with geo coordinates, but does not explicitly state when to use this versus siblings 'get_flight' or 'flight_stats'. No when-not or alternative guidance provided.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

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

  1. 3 tool updatesv0.1.0
    • First observedflight_stats
    • First observedget_flight
    • First observedlist_my_flights

TDQS

A4/5.0

Scored across 3 tools

Disambiguation5/5

Each tool has a clear, distinct purpose: aggregate stats, get a specific flight by number, and list flights with filters. No overlap or ambiguity.

Naming Consistency5/5

All tool names follow a consistent verb_noun pattern in snake_case (flight_stats, get_flight, list_my_flights), making them predictable and readable.

Tool Count4/5

With only 3 tools, the server feels slightly undersized for a flight tracking domain, but each tool serves a core read operation. The count is reasonable for a minimal API.

Completeness2/5

The server is read-only, missing any create, update, or delete operations for flights. Users cannot add or modify flight data, which is a significant gap for a personal flight tracker.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    D
    maintenance
    A Model Context Protocol (MCP) server that provides access to a trip tracking SQLite database. This server enables AI assistants to query and manage flight trip information including users, airports, and flight details.
    Apache 2.0
  • A
    license
    Not graded
    quality
    B
    maintenance
    MCP server that exposes SQLite datasets as queryable tools and resources via Streamable HTTP, enabling read-only exploration and SQL queries.
    Apache 2.0
  • A
    license
    Not graded
    quality
    C
    maintenance
    Read-only MCP server that exposes Garmin Connect health data from a local SQLite database to AI assistants, enabling queries for recent days, sleep, weekly trends, and a guarded SQL query surface.
    MIT