Flighty MCP
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| FLIGHTY_HOST | No | HTTP bind address; Docker binds 0.0.0.0. | 127.0.0.1 |
| FLIGHTY_PATH | No | HTTP endpoint. | /mcp |
| FLIGHTY_PORT | No | HTTP bind port. | 8000 |
| FLIGHTY_TOKEN | No | Account credential for stdio; choose one of FLIGHTY_TOKEN or FLIGHTY_TOKEN_FILE. | |
| FLIGHTY_TIMEOUT | No | Upstream request timeout in seconds. | 60 |
| FLIGHTY_CACHE_TTL | No | Account cache lifetime in seconds. | 120 |
| FLIGHTY_MAX_PAGES | No | Maximum pages per account sync. | 100 |
| FLIGHTY_TRANSPORT | No | stdio or streamable-http. | stdio |
| FLIGHTY_TOKEN_FILE | No | Path to a file containing the account credential for stdio; choose one of FLIGHTY_TOKEN or FLIGHTY_TOKEN_FILE. | |
| FLIGHTY_ALLOW_WRITES | No | Set to false for read-only access. | true |
| FLIGHTY_ALLOW_ACCOUNT_DELETION | No | Separate account-deletion permission. | false |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": false
} |
| prompts | {
"listChanged": false
} |
| resources | {
"subscribe": false,
"listChanged": false
} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| get_schemaA | Inspect supported protobuf fields, numbers, types, enum values and oneof groups. Empty/partial name lists matching definitions. Full names, for example SyncChangeRequestProto.TicketInfoAction, show the complete field contract. Advanced tool payloads use ProtoJSON: RFC3339 timestamps, enum names, base64 bytes, and exactly one populated member per oneof group. This tool performs no network requests. |
| get_endpoint_catalogA | List every supported HTTP operation, request/response schema and read/write classification. Includes the app-only TripIt browser flow and websocket protocol metadata. Core flight edits have been live-tested; see docs/testing.md for coverage. |
| list_flightsA | List this account's current flights, including archived history and manual flights. Excludes server deletion markers and other owners' flight records. mine_only keeps flights marked My Flights; false also includes flights this account tracks. Date filters are YYYY-MM-DD in the departure airport's local timezone. Airport filters accept IATA, name or ID text. Sorted by departure time, earliest first. Pagination is local after a complete, cached, bodyless account sync. limit 1..200. details=true also includes the full decoded user-flight record. |
| sync_accountA | Download all account pages without submitting changes, returning counts and cache metadata. Uses POST /v1/sync/full with NO body on every page. Not the apply_changes tool. Repeated read refreshes within 60 seconds reuse the last complete snapshot. get_account_records exposes individual record categories after the download. |
| get_account_recordsA | Read a sync category: tickets, notes, subscriptions, profile, friends, favorites, settings, etc. Discover category names with get_schema('SyncResponseData'). Excludes deletion markers; flight categories are restricted to this account. Token/secret/receipt fields are redacted. limit 1..200. No outgoing account changes are sent. |
| search_airportsA | Search airports by IATA/ICAO code, name, city or country. Returns IDs needed by route searches, airport status and manual-flight edits. Uses cached reference data from a read-only sync. limit 1..100. |
| search_airlinesA | Search airlines by IATA/ICAO code or name. Returns the airlineId required for flight-number searches. Uses cached read-only account reference data. limit 1..100. |
| search_aircraft_typesA | Search aircraft type reference data by IATA/ICAO code or model name. Returns equipment IDs for manual flights. limit 1..100. |
| search_metro_areasA | Search metro-area reference data for multi-airport route searches. limit 1..100. |
| search_flightsA | Search available flights by airline+number OR by origin+destination on YYYY-MM-DD. Search alone does not add/subscribe to a flight. Discover IDs using the airport/airline/metro lookup tools first. Pass a numeric flight_number without airline prefix. Route search endpoints can be airport or metro IDs. |
| get_flightA | Fetch a flight by UUID using the app's GET /v1/flight/{id} sharing/details response. Does not add the flight. Returns allFlights, traveler profiles, manualFlights and airport-status data when supplied by the server; account tokens are redacted. |
| poll_flightA | Poll changing flight content, optionally using If-None-Match. Does not subscribe/add a flight. Uses the app's bodyless content-sync POST and X-Sync-Priority 0 or 10. A 304 result has not_modified=true. Prefer cached list_flights for routine reads. |
| subscribe_flightA | Add/track a known flight UUID, normally discovered by search_flights. Mutating, requires writes enabled. is_passenger=true marks it as your flight; false tracks someone else's flight. Sends the app's is_passenger query string. |
| subscribe_random_flightA | Add a random flight to the account. This changes tracked flights; writes must be enabled. |
| apply_changesA | Advanced sync editor supporting all 43 supported actions, with strict protobuf validation. Each object has exactly one action, plus an optional RFC3339 timestamp (generated if omitted). Inspect get_schema('SyncChangeRequestProto') and the action's schema first. Requires writes enabled. Delete/remove/revoke/bulk actions additionally require confirm_destructive=true. No automatic retries or implicit empty changes. Omitted fields may clear values; provide a complete action when semantics are unclear. |
| delete_flightA | Remove a flight from this account. Requires writes enabled and confirmation equal to flight_id. This is not archive. manual=true selects deleteManualFlightAction. Uses the authenticated account as implicit owner, omitting ownerUserId for own flights. |
| set_flight_archivedA | Archive/unarchive a tracked flight, preserving it in account history. Requires writes enabled. |
| set_flight_mineB | Mark/unmark a tracked flight as My Flight. Requires writes enabled. |
| update_ticketA | Update booking reference/seat/cabin/reason while preserving known existing ticket fields. fields accepts pnr, seatNumber, seatPosition, cabinClass, flightReason. Inspect RemoteTicket enums with get_schema. Reads fresh ticket data before merging the provided fields; does not claim server patch semantics. Requires writes enabled. |
| set_flight_noteA | Set a flight note; an empty note explicitly clears it. Requires writes enabled. |
| upsert_manual_flightA | Create/edit a manual flight using a complete ManualFlightChangeAction payload. Requires writes enabled. Required local identifiers: flightId, departureAirportId, arrivalScheduledAirportId, arrivalActualAirportId. Inspect get_schema for all time/equipment/airline fields. gateOriginal/Actual and runwayOriginal/Actual are timestamps, not gate/runway names. Omitted fields may clear existing values. |
| delete_accountA | Permanently delete this Flighty account. This is separate from removing a flight. Requires both FLIGHTY_ALLOW_WRITES=true and FLIGHTY_ALLOW_ACCOUNT_DELETION=true, plus confirmation_user_id exactly matching the authenticated token's subject. Never use for cleanup or testing. Live behavior has deliberately not been tested. |
| accept_friend_inviteA | accept_friend_invite: POST /v1/connected-friends/invite-links/{invite_id}/accept. Mutating; requires FLIGHTY_ALLOW_WRITES=true. Not live-validated. payload must match get_schema('ConnectedFriendsInviteLinkAcceptRequestProto'). path keys: invite_id. Mutation behavior has not been live-tested. |
| create_friend_inviteB | create_friend_invite: POST /v1/connected-friends/invite-links. Mutating; requires FLIGHTY_ALLOW_WRITES=true. Not live-validated. payload must match get_schema('ConnectedFriendsInviteLinkAcceptRequestProto'). No path parameters. Mutation behavior has not been live-tested. |
| create_share_linkC | create_share_link: POST /v1/share. Mutating; requires FLIGHTY_ALLOW_WRITES=true. Not live-validated. payload is the JSON object documented in docs/api.md. No path parameters. Mutation behavior has not been live-tested. |
| get_airport_boardC | get_airport_board: GET /v1/airport-board/{airport_id}/{direction}. Read-only lookup. path keys: airport_id, direction. Mutation behavior has not been live-tested. |
| get_airport_mini_statusC | get_airport_mini_status: GET /v1/airport-status/{airport_id}/mini. Read-only lookup. path keys: airport_id. Mutation behavior has not been live-tested. |
| get_airport_statusC | get_airport_status: GET /v1/airport-status/{airport_id}. Read-only lookup. path keys: airport_id. Mutation behavior has not been live-tested. |
| get_airports_homeC | get_airports_home: POST /v1/airport-status. Read-only lookup. payload must match get_schema('AirportsHomeRequestProto'). No path parameters. Mutation behavior has not been live-tested. |
| get_airports_mapC | get_airports_map: POST /v1/airport-status/map. Read-only lookup. payload must match get_schema('AirportsHomeMapRequestProto'). No path parameters. Mutation behavior has not been live-tested. |
| get_avatarC | get_avatar: GET /v1/user/{user_id}/avatar. Read-only lookup. path keys: user_id. Mutation behavior has not been live-tested. |
| get_friend_inviteB | get_friend_invite: GET /v1/connected-friends/invite-links/{invite_id}. Read-only lookup. path keys: invite_id. Mutation behavior has not been live-tested. |
| get_radar_layersC | get_radar_layers: GET /v1/radar/layers. Read-only lookup. No path parameters. Mutation behavior has not been live-tested. |
| get_static_assetsC | get_static_assets: GET /v1/static_assets. Read-only lookup. No path parameters. Mutation behavior has not been live-tested. |
| import_calendarC | import_calendar: POST /v1/sync/calendar. Mutating; requires FLIGHTY_ALLOW_WRITES=true. Not live-validated. payload must match get_schema('CalendarImportRequestProto'). No path parameters. Mutation behavior has not been live-tested. |
| link_accountA | link_account: POST /v1/user/link. Mutating; requires FLIGHTY_ALLOW_WRITES=true. Not live-validated. payload must match get_schema('UserLinkRequestProto'). No path parameters. Approving account authenticates; body token is the incoming approval token. Initiator token issuance/merge semantics remain unverified. |
| lookup_aircraftC | lookup_aircraft: POST /v1/autocomplete/aircraftTypeFromTail. Read-only lookup. payload must match get_schema('AutocompleteAircraftTypeRequestProto'). No path parameters. Mutation behavior has not been live-tested. |
| mark_year_in_review_viewedC | mark_year_in_review_viewed: POST /v1/user/settings/viewedYearInReview. Mutating; requires FLIGHTY_ALLOW_WRITES=true. Not live-validated. payload is the JSON object documented in docs/api.md. No path parameters. Mutation behavior has not been live-tested. |
| redeem_promo_codeA | redeem_promo_code: POST /v1/user/promocode/{code}/redeem. Mutating; requires FLIGHTY_ALLOW_WRITES=true. Not live-validated. path keys: code. Mutation behavior has not been live-tested. |
| register_anonymous_userB | register_anonymous_user: POST /v1/user. Mutating; requires FLIGHTY_ALLOW_WRITES=true. Not live-validated. payload must match get_schema('CreateUserRequestProto'). No path parameters. Mutation behavior has not been live-tested. |
| register_deviceA | register_device: POST /v1/device. Mutating; requires FLIGHTY_ALLOW_WRITES=true. Not live-validated. payload must match get_schema('CreateDeviceRequestProto'). No path parameters. Mutation behavior has not been live-tested. |
| request_bulk_importB | request_bulk_import: POST /v1/user/triggerBulkImport. Mutating; requires FLIGHTY_ALLOW_WRITES=true. Not live-validated. payload must match get_schema('TriggerBulkImportRequestProto'). No path parameters. Mutation behavior has not been live-tested. |
| request_exportA | request_export: POST /v1/user/export. Mutating; requires FLIGHTY_ALLOW_WRITES=true. Not live-validated. payload must match get_schema('TriggerExportRequestProto'). No path parameters. Mutation behavior has not been live-tested. |
| start_live_activityB | start_live_activity: POST /v1/flight/{flight_id}/liveActivity. Mutating; requires FLIGHTY_ALLOW_WRITES=true. Not live-validated. payload must match get_schema('StartLiveActivityRequest'). path keys: flight_id. Mutation behavior has not been live-tested. |
| submit_attributionC | submit_attribution: POST /v1/user/attribute. Mutating; requires FLIGHTY_ALLOW_WRITES=true. Not live-validated. payload is the JSON object documented in docs/api.md. No path parameters. Mutation behavior has not been live-tested. |
| subscribe_shared_flightsC | subscribe_shared_flights: POST /v1/flight/sharing/{share_id}/subscribe. Mutating; requires FLIGHTY_ALLOW_WRITES=true. Not live-validated. path keys: share_id. Mutation behavior has not been live-tested. |
| upload_receiptB | upload_receipt: POST /v1/receipt. Mutating; requires FLIGHTY_ALLOW_WRITES=true. Not live-validated. payload must match get_schema('ReceiptRequestProto'). No path parameters. Mutation behavior has not been live-tested. |
| wait_for_syncA | Wait once for a websocket requestSync notification; does not change account data. Registers the bearer with Flighty's websocket session, waits 1..30 seconds, and invalidates the local account cache if an update arrives. Does not return the bearer or subscribe/add any flight. Avoid loops; rate limits are unknown. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
TDQS
Scored across 48 tools
Several clusters overlap heavily: apply_changes claims to support all 43 actions already exposed by dedicated tools (update_ticket, set_flight_note, set_flight_archived, delete_flight), so an agent cannot easily tell when to use the generic editor versus the specific mutator. Airport status has five near-siblings (get_airport_status, get_airport_mini_status, get_airport_board, get_airports_home, get_airports_map), and the read/sync path is split across list_flights, sync_account, get_account_records, poll_flight, and wait_for_sync. Descriptions help somewhat but boundaries remain fuzzy.
Almost everything follows a snake_case verb_noun convention (get_*, search_*, set_*, subscribe_*, request_*), with resource-first lookup tools still using a consistent get_ prefix. Minor deviations like apply_changes and wait_for_sync are still readable verb phrases, and the mixed get_/lookup_ pair (get_airport_status vs lookup_aircraft) is a small blemish.
48 tools is far more than a coherent MCP surface needs; the set mirrors nearly every app endpoint, including marginal ones such as mark_year_in_review_viewed, submit_attribution, redeem_promo_code, and register_anonymous_user. Many tools earn no place for typical agent workflows and dilute the surface.
Coverage of the Flighty domain is broad: flight search/discovery, subscribe/archive/note/ticket edits, manual flights, account sync and record categories, reference lookups, airport boards, friends/invites, sharing, and schema introspection. Only minor gaps exist (e.g. reading an existing share link or invite list appears absent), which an agent can work around.