A minimal TypeScript MCP server for searching award availability through the seats.aero partner API.
You need a seats.aero Partner API key. Eligible seats.aero Pro users can generate one from their seats.aero settings; usage remains subject to the seats.aero terms and API limits.
Not every endpoint is available to every Partner API user:
live_searchcannot be used with a seats.aero Pro API key. It requires a commercial agreement with seats.aero.refresh_cached_datacannot currently be used by commercial users; the API documentation directs commercial users tolive_searchinstead.
The server cannot determine the type of API key locally, so these restrictions are advertised in its MCP instructions, tool descriptions, and tool metadata.
Requires Node.js 20 or newer.
pnpm install
pnpm build
pnpm startSet SEATS_API_KEY in your MCP client configuration:
{
"mcpServers": {
"seats": {
"command": "node",
"args": ["/absolute/path/to/seats-mcp/build/index.js"],
"env": {
"SEATS_API_KEY": "YOUR_SEATS_AERO_API_KEY"
}
}
}
}| Tool | seats.aero endpoint | Access | Purpose |
|---|---|---|---|
get_flights |
Cached Search | Partner API | Search cached availability across airports, dates, cabins, carriers, and mileage programs. |
get_bulk_avail |
Bulk Availability | Partner API | Retrieve many cached availability objects from one mileage program. |
get_routes |
Get Routes | Partner API | List routes tracked for one mileage program. |
get_destinations |
Get Destinations | Partner API | Find airports reachable nonstop from or to one airport and the cheapest raw price per cabin. |
get_trips |
Get Trips | Partner API | Retrieve flight-level details for an Availability object. |
refresh_cached_data |
Refresh Cached Data | Pro users; not commercial | Queue or poll refreshes for cached Availability objects. |
live_search |
Live Search | Commercial agreement only; not Pro | Search a specific route and date live for one mileage program. |
Cached search accepts comma-delimited airport lists (SFO,LAX), cabin lists (economy,business), carrier lists (DL,AA), and source lists (aeroplan,united). Dates use YYYY-MM-DD.
Live searches typically take 5-15 seconds. They can fail when an airline is
unavailable, so callers should limit retries and use exponential backoff. Prefer
get_flights when cached availability is sufficient.
This covers all seven active Partner-Authorization endpoints in the current
seats.aero API reference. OAuth consent, token, and user-info endpoints are not
exposed as tools because they are application authorization flows rather than
award-availability operations; this server authenticates with
SEATS_API_KEY.
pnpm testThe tests build the server and exercise request construction with a mocked seats.aero API.
Releases follow Semantic Versioning and are managed on GitHub by Release Please:
fix:commits produce a patch release.feat:commits produce a minor release.- commits with a
!after the type or aBREAKING CHANGE:footer produce a major release. docs:,test:,chore:, and other non-user-facing commits do not trigger a release by themselves.
After release-worthy commits land on main, GitHub Actions creates or updates
a release PR containing the next version and changelog. Merging that PR creates
the corresponding vX.Y.Z Git tag and published GitHub Release. See
CONTRIBUTING.md for the complete workflow.