Skip to main content
Glama
swiftyspiffy

Flighty MCP

by swiftyspiffy

Server Configuration

Describes the environment variables required to run the server.

NameRequiredDescriptionDefault
FLIGHTY_HOSTNoHTTP bind address; Docker binds 0.0.0.0.127.0.0.1
FLIGHTY_PATHNoHTTP endpoint./mcp
FLIGHTY_PORTNoHTTP bind port.8000
FLIGHTY_TOKENNoAccount credential for stdio; choose one of FLIGHTY_TOKEN or FLIGHTY_TOKEN_FILE.
FLIGHTY_TIMEOUTNoUpstream request timeout in seconds.60
FLIGHTY_CACHE_TTLNoAccount cache lifetime in seconds.120
FLIGHTY_MAX_PAGESNoMaximum pages per account sync.100
FLIGHTY_TRANSPORTNostdio or streamable-http.stdio
FLIGHTY_TOKEN_FILENoPath to a file containing the account credential for stdio; choose one of FLIGHTY_TOKEN or FLIGHTY_TOKEN_FILE.
FLIGHTY_ALLOW_WRITESNoSet to false for read-only access.true
FLIGHTY_ALLOW_ACCOUNT_DELETIONNoSeparate 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

CapabilityDetails
tools
{
  "listChanged": false
}
prompts
{
  "listChanged": false
}
resources
{
  "subscribe": false,
  "listChanged": false
}

Tools

Functions exposed to the LLM to take actions

NameDescription
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

NameDescription

No prompts

Resources

Contextual data attached and managed by the client

NameDescription

No resources

TDQS

C2.9/5.0

Scored across 48 tools

Disambiguation2/5

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.

Naming Consistency4/5

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.

Tool Count2/5

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.

Completeness4/5

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.

Maintenance

ActivityMaintained
ResponsivenessNo issues