flight-finder
Retrieves cash fare information via Google Flights, enabling searches for one-way and round-trip flights across multiple origins and dates.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@flight-finderfind me SEA→Tokyo in business under 120k points"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
flight-finder
Find the genuinely best flight — cash or points — by ranking every option against what a mile is actually worth to you.
Three ways to use this
🧠 Build your own with Claude Code →
GUIDE.md🛠 Run the code → below
🚀 Just use it → hosted version (coming soon)
What it does
Award availability and cash fares live in a dozen places and change by the hour. flight-finder pulls both — cash fares (via Google Flights) and award space (via the seats.aero Pro API) — then ranks every option using your per-program cents-per-mile valuations and travel preferences. It also enriches each option with seat-quality detail from AeroLOPA — cabin layout, seat counts, and the actual seat map for the specific aircraft (tail-number matched) — so you're comparing the seat you'll actually sit in, not just the price. "Is this a good deal?" becomes a number, not a vibe. And it runs as an MCP server, so you can plan trips conversationally in Claude Code: "find me SEA→Tokyo in business under 120k points."
Related MCP server: PointsYeah MCP Server
Quickstart
uv sync
cp .env.example .env # add SEATS_AERO_API_KEY (+ optional AEROLOPA_API_ID / AEROLOPA_API_SECRET for seat maps)
# edit config/profile.yaml + config/programs.yaml (home airports, point balances, cpm values)
uv run ff search --from SEA --to FCO --depart 2026-11-21 --cabin BUSINESS
uv run ff awards --from SEA --to FCO --start 2026-11-18 --end 2026-11-23 --cabin business
uv run ff plan trips/example-trip.yaml --out trips/example-shortlist.mdMCP (Claude Code)
claude mcp add flight-finder --scope user \
-- uv --directory /path/to/flight-finder run python -m flight_finder.mcp_serverTools: search_cash_one_way, search_cash_round_trip, search_awards, find_positioning_flights, get_seat_map, plan_trip.
How it works
src/flight_finder/
offer.py # normalized Offer (cash or award) + Segment
config.py # profile + programs + env
cash/ # Google Flights wrapper + multi-origin × date fan-out
awards/ # seats.aero Pro client
strategy/scorer.py # cpm-based cost + preference-aware ranking ← the core idea
seatmaps/ # AeroLOPA enrichment: cabin product + seat map per aircraft (tail-matched)
planner.py # combines it all behind a TripSpec
cli.py · mcp_server.pyThe interesting decision: a single normalized Offer for cash and award, so the scorer can compare them on one axis — your dollar value — instead of apples-to-oranges price vs. miles.
What I learned building this
The hard part wasn't the model — it was the valuation layer. The same award seat is a steal or a trap depending on which points you hold, what you value, and even which seat you'll actually sit in. Encoding that judgment is what turns a search into a recommendation. It's true of most useful AI products: the model is the commodity; the context and the scoring are the moat.
Built with Claude Code
Built nights and weekends, mostly by talking to Claude — scaffolded, iterated, and tested through Claude Code.
License
MIT
Available Tools
6 toolsfind_positioning_flightsA
Find positioning flights from from_city to return_hub near return_date.
Useful for the asymmetric-return trick: main award returns from a hub (e.g.
LHR); family needs to get there from Italy. Candidates must be verified as
refundable on the airline site before booking.
| Name | Required | Description | Default |
|---|---|---|---|
| from_city | Yes | ||
| return_hub | Yes | ||
| return_date | Yes | ||
| earliest_days_before | No | ||
| cabin | No | ECONOMY | |
| adults | No | ||
| children | No |
TDQS
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 states the tool finds flights and mentions a post-verification step, but does not disclose any behavioral traits like rate limits, authentication needs, or whether results are cached. It is adequate but could add more transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three sentences, each serving a clear purpose: state the function, explain the use case, and provide a cautionary note. It is front-loaded and wastes no words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With 7 parameters, 0% schema coverage, and no output schema, the description is incomplete. It does not explain return values, how to interpret results, or the meaning of parameters like `earliest_days_before` or `cabin`. An AI agent would need additional information to use this tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema description coverage is 0%, and the description only mentions `from_city`, `return_hub`, and `return_date` by name without explaining their formats or constraints. Parameters like `earliest_days_before`, `cabin`, `adults`, and `children` are left entirely to the schema, which is insufficient. The description should compensate by explaining these parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it finds positioning flights from `from_city` to `return_hub` near `return_date`. It explains the context (asymmetric-return trick) and distinguishes itself from sibling tools like `search_awards` or `search_cash_one_way` by focusing on positioning flights for a specific travel pattern.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains when to use this tool (for the asymmetric-return trick) and provides a critical guideline: candidates must be verified as refundable on the airline site before booking. It lacks explicit when-not-to-use instructions or alternatives, but the context is sufficient for an AI agent to understand its appropriate use.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_seat_mapA
AeroLOPA cabin product + seat map URL for a specific aircraft.
Provide either `slug` (e.g. "ba-351") to skip resolution, or both
`carrier` (IATA, e.g. "BA") and `aircraft` (IATA code or displayed name).
Returns the structured CabinProduct dict — aircraft type, per-cabin pitch /
width / recline / amenities, free-text seat notes, and the
direct-CDN-cached seat map SVG URL. All cabins are included; pick the one
matching your offer cabin via `cabins[].cabin_type_name`.
| Name | Required | Description | Default |
|---|---|---|---|
| carrier | No | ||
| aircraft | No | ||
| slug | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden. It discloses the return structure and that it's a read-only lookup, but doesn't mention errors, auth, or rate limits. Adequate but not exhaustive.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Description is well-structured with purpose first, then usage, then return details. Slightly long but every sentence adds value; no wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema, the description covers input, output structure, and usage patterns well. Missing edge cases like conflict between slug and carrier/aircraft, but overall complete for the tool's complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema has 0% description coverage, but the description compensates fully by explaining each parameter with examples and expected formats (IATA codes, displayed names, slug pattern). Adds significant value beyond schema types.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it retrieves cabin product and seat map URL for a specific aircraft, with a specific verb and resource. It distinguishes from sibling tools which are about flight search and trip planning.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Describes two parameter combinations (slug or carrier+aircraft) and when to use each, but doesn't explicitly state when NOT to use or mention alternative tools. Still clear enough for correct invocation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
plan_tripC
Run the full trip planner on a trips/*.yaml file.
| Name | Required | Description | Default |
|---|---|---|---|
| trip_yaml_path | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. Does not disclose whether tool modifies state, requires authentication, or produces output. Only mentions input file.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single sentence is appropriately brief and front-loaded. No unnecessary words, though could benefit from more detail.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Missing crucial details: what the planner does, required YAML structure, side effects, return values. Minimal for a tool with no output schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, but the description links 'trip_yaml_path' to a YAML file pattern. Adds basic meaning but lacks format, constraints, or examples.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states it runs a full trip planner on a YAML file, but the verb 'run' is vague and doesn't specify what the planner does. It distinguishes from sibling search tools only implicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives. Siblings are specific search tools, but no explicit when/when-not advice.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_awardsD
Award search via seats.aero Pro API.
| Name | Required | Description | Default |
|---|---|---|---|
| origin_airports | Yes | ||
| destination_airports | Yes | ||
| start_date | Yes | ||
| end_date | Yes | ||
| cabin | No | business | |
| sources | No | ||
| only_direct_flights | No | ||
| take | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description must disclose behavior. It fails to mention API authentication, rate limits, data freshness, pagination, or any side effects. The single sentence is insufficient.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Extremely concise but under-specified. Valuable space is used for a vague statement, missing critical details. Conciseness should not sacrifice completeness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With 8 parameters (4 required), no annotations, and no parameter descriptions, the description is completely inadequate. It does not mention output or behavior, leaving the agent blind.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, yet the description adds zero parameter meaning. Parameters like origin_airports, cabin, sources are not explained. The description compensates nothing.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description states 'Award search via seats.aero Pro API', which identifies the verb and resource but is vague. It does not differentiate from sibling tools like search_cash_one_way or search_cash_round_trip, leaving the agent unclear about when to use this specifically.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidelines on when to use vs alternatives. Sibling tools exist for cash searches and positioning flights, but the description offers no context for selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_cash_one_wayC
Cash-fare one-way search via fli (Google Flights).
| Name | Required | Description | Default |
|---|---|---|---|
| origin | Yes | ||
| destination | Yes | ||
| depart_date | Yes | ||
| cabin | No | BUSINESS | |
| stops | No | ANY | |
| adults | No | ||
| children | No | ||
| depart_hour_window_from | No | ||
| depart_hour_window_to | No | ||
| top_n | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are present, so the description must fully convey behavioral traits. It only mentions 'via fli (Google Flights)' which hints at the data source but omits details on authentication, rate limits, error handling, or what happens if parameters are invalid.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is very concise (one sentence) and front-loaded with the core purpose. It wastes no words. However, it could be slightly expanded to cover key missing aspects without becoming verbose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity (10 parameters, no schema descriptions, no annotations), the description is insufficient. It fails to explain how to effectively use parameters like cabin, stops, hour windows, or top_n. The presence of an output schema reduces the need to describe return values, but guidance on input is lacking.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, yet the description adds no meaning to any of the 10 parameters. Parameter names like 'origin' and 'destination' are self-explanatory, but the description does not clarify format, constraints (e.g., airport codes vs city names), or how 'depart_hour_window' works.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it's a 'cash-fare one-way search via fli (Google Flights)', specifying the verb (search), resource (cash-fare one-way), and data source. This distinguishes it from the sibling tool 'search_cash_round_trip' which is for round trips.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool vs alternatives. The description does not indicate scenarios, prerequisites, or when not to use it. Sibling tool names imply alternatives but no explicit direction is given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_cash_round_tripC
Cash-fare round-trip search via fli (Google Flights).
| Name | Required | Description | Default |
|---|---|---|---|
| origin | Yes | ||
| destination | Yes | ||
| depart_date | Yes | ||
| return_date | Yes | ||
| cabin | No | BUSINESS | |
| stops | No | ANY | |
| adults | No | ||
| children | No | ||
| top_n | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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 does not disclose any behavioral traits such as rate limits, caching, or whether the search is real-time. Output schema exists but the description adds no behavioral context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence, which is concise but under-specified. It does not earn its place because it fails to provide critical details about parameters or usage, making it insufficiently informative for the agent.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has 9 parameters (4 required) and 0% schema coverage, the description is severely incomplete. It lacks context on required inputs, optional parameters, or any edge cases. Output schema exists but is not referenced.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, yet the tool description mentions no parameter details (e.g., required fields origin, destination, dates). The agent gets no help understanding parameter meaning or format beyond the schema structure.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it is a cash-fare round-trip search using Google Flights (fli), and the name distinguishes it from sibling tools like search_awards and search_cash_one_way. However, 'Cash-fare' could be misinterpreted, and the description adds little beyond the name.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit guidance on when to use this tool versus alternatives. It does not mention that it is for paid flights rather than awards, or that it differs from one-way searches. Context from sibling names implies this, but the description lacks direct usage advice.
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. Dates show when Glama detected each change.
6 tool updates
v0.1.0- First observed
find_positioning_flights - First observed
get_seat_map - First observed
plan_trip - First observed
search_awards - First observed
search_cash_one_way - First observed
search_cash_round_trip
TDQS
Scored across 6 tools
Each tool targets a distinct aspect of flight finding: positioning flights, seat maps, trip planning, award search, and cash search (one-way and round trip). No overlaps.
All tool names follow a consistent verb_noun pattern with snake_case (e.g., find_positioning_flights, get_seat_map, search_awards).
Six tools cover the core functionality of a flight finder without excess. The scope is well-scoped and manageable.
The set covers major flight search types (award, cash) and trip planning, but lacks tools for flight status, booking management, or filtering by amenities. Minor gaps exist.
Maintenance
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
Search award flight availability and points pricing across 27 airlines and 23 loyalty programs.
Search award flights and cash fares, optimize points, and predict fares inside ChatGPT and Claude.
Personal AI travel agent. Points optimization, live flight/hotel/award search, trip planning.
Multi-city flight routing intelligence — plan RTW trips, validate alliances, get carrier picks.
Related MCP Servers
- FlicenseNot gradedqualityDmaintenanceOfficial Industry Standard MCP for Travel Awards, Points, and more. Search award flight availability across multiple airline loyalty programs, find sweet spots, check transfer partners, and get market stats all via MCP.1-
- FlicenseNot gradedqualityCmaintenanceEnables award flight search across 20+ airline programs using PointsYeah, with tools for comparing programs, estimating points value, and checking redemption deals.-
- FlicenseNot gradedqualityBmaintenanceEnables tracking flights and grouping them into trips, with tools to create, list, and manage trips and flight bookings.-
- AlicenseAqualityBmaintenanceTravel award search: compare cash vs points on hotels, flights & cars, cents-per-point, and book6348MIT
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/nstevens/flight-finder'
If you have feedback or need assistance with the MCP directory API, please join our Discord server