Sparkflights
Server Details
Search verified flight fares by city, month, cabin and price, with a link to book each one.
- Status
- Healthy
- Last Tested
- Transport
- Streamable HTTP · MCP 2025-06-18
- URL
- Repository
- Sparkflights-com/sparkflights-mcp
- GitHub Stars
- 0
- Server Listing
- Sparkflights MCP Server
TDQS
Scored across 2 tools
The two tools have clearly distinct roles: search_deals finds fares, while get_deal retrieves a single fare by id from search_deals. The descriptions explicitly cross-reference each other, making misselection unlikely.
Both names follow a consistent snake_case verb_noun pattern (search_deals, get_deal). The convention is predictable and readable.
Two tools is on the thin side for a flight-fare service, even a read-only one. However, the search-and-retrieve pair is logically scoped and each tool earns its place.
The surface covers the core read-only workflow: finding verified fares and retrieving fare details. Route-level browsing and price history are exposed via URLs rather than dedicated tools, which is a minor gap but workable.
Available Tools
2 toolsget_dealARead-onlyIdempotentInspect
One Sparkflights fare by the numeric id from search_deals: its itinerary, the price text of its fare page, its outbound and return flights, the date pairs its fare page lists with their prices, and its url, route_url and feed_url. A fare that is no longer live returns an error naming its route page.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Deal ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and non-destructive behavior, so the safety profile is covered. The description adds meaningful behavior beyond that: it enumerates the returned data and specifies the error behavior for a stale fare ('returns an error naming its route page').
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 front-loaded with the core purpose and then lists the returned fields compactly. It is a single dense sentence but every clause (source of id, returned fields, error case) earns its place.
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 no output schema, the description carries the burden of explaining returns, and it does so by enumerating itinerary, price text, flights, date pairs, and URLs. The error case for stale fares is also covered, leaving nothing essential for an agent to call this 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?
Schema coverage is 100% and the single parameter is documented as 'Deal ID'. The description adds value by clarifying that the id is numeric and originates from search_deals, which the schema does not state.
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?
States a specific verb-and-resource ('One Sparkflights fare by the numeric id') and explicitly distinguishes it from the sibling search_deals by describing retrieval by id rather than search. An agent can select between the two tools without opening either schema.
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 makes clear the id must come from search_deals, which implies the lookup-after-search workflow, and explains what happens when the fare is no longer live. It lacks an explicit 'use this instead of search_deals when...' statement, but the context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_dealsARead-onlyIdempotentInspect
Search flight fares Sparkflights has already found and verified, ranked by cost per mile against each market's limit. Not a live fare search: an empty result means no current verified fare matches. Each result has the price text of its Sparkflights fare page; url, the fare page; route_url, the route page, which lists the route's live fares and price history; and feed_url, the route's JSON feed of new fares.
| Name | Required | Description | Default |
|---|---|---|---|
| sort | No | Sort order: cpm (default; cost per mile against its market's CPM ceiling, lowest first) or recent (newest first) | |
| cabin | No | Cabin class, or a comma-separated list: economy, premium_economy, business, first | |
| limit | No | Max results, 1-25. Default 10. | |
| origin | No | Where the trip starts: an IATA airport code (JFK) for that airport, or a city (New York, new-york-city) for every airport the city's route pages cover | |
| low_cost | No | true returns only budget/low-cost carrier deals; overrides include_budget | |
| max_price | No | US dollars: only deals listed at or under this price | |
| destination | No | Where the trip goes: an IATA airport code (NRT) for that airport, or a city (Tokyo, london) for every airport the city's route pages cover | |
| depart_month | No | YYYY-MM: only deals whose first departure date is in that month | |
| origin_region | No | Departure region, or a comma-separated list, same values as destination_region. Default: the regions the deal board lists | |
| include_budget | No | Add budget/low-cost carrier deals (Spirit, Frontier, etc.) to the others. Default false — budget deals are on /flights/budget. | |
| destination_region | No | Destination region, or a comma-separated list: north_america, europe, asia, africa, oceania, south_america |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, non-destructive and closed-world, so the safety profile is covered. The description adds behavior the annotations cannot: that results come from a pre-verified index, what an empty result means semantically, and what each returned field (price text, url, route_url, feed_url) represents. It could go slightly further on ordering details or how stale the index may be, but it covers the main behavioral gaps.
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 lead sentence is front-loaded with the core distinction, and the return-field enumeration is dense but earns its place since there is no output schema. The final sentence is a long clause-chained list, which is slightly harder to scan than the rest, but there is no filler.
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 11 optional parameters, no output schema, and no required fields, the description carries exactly the missing load: it explains what is searched, what the results contain, and what an empty result signifies. Combined with a fully described schema and read-only annotations, an agent has everything needed to call it 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?
Schema description coverage is 100%, and each of the 11 parameters already documents its format and defaults, including the cpm/recent sort options, the comma-separated cabin and region lists, and the low_cost override of include_budget. The description adds no parameter-level semantics beyond that, so the baseline of 3 is correct.
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 pairs a specific verb and resource ('Search flight fares Sparkflights has already found and verified') with an explicit definitional boundary: it is a search over an existing verified index, not a live fare search. That boundary, plus the note that results are ranked by cost per mile, lets an agent distinguish it from a live-search or a single-deal fetch without opening any schema.
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?
It gives a clear use context ('Not a live fare search') and an important success-criterion: an empty result means no current verified fare matches, rather than a failure. It stops short of naming the sibling get_deal or stating when to prefer that tool over this one, so it is strong but not fully routing-level guidance.
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.
2 tool updates
- First observed
get_deal - First observed
search_deals
Related MCP Connectors
Search flights by flexible dates and broad destinations, with live prices and booking links.
Free, no-login flight search with real-time pricing from multiple airlines.
Read-only public itinerary previews, observed round-trip fares, and flight savings verified today.
Search and book flights and hotels: hundreds of airlines, plus bookable hotel rates.
Related MCP Servers
- AlicenseAqualityBmaintenanceEnables real-time flight fare searches across date ranges and multiple destinations, with historical price insights and booking links. Provides one-way and round-trip search tools through MCP.41MIT
- AlicenseAqualityDmaintenanceSearch Google Flights for one-way, round-trip and multi-city fares, with offline airport lookup and nearby-airport resolution.61MIT
- AlicenseNot gradedqualityAmaintenanceEnables flight search and fare calendar exploration by interacting with Google Flights' API, supporting detailed filters for origin, destination, dates, cabin class, airlines, and more.6,108 PyPI3,431MIT
- AlicenseAqualityBmaintenanceEnables MCP clients to search flight prices, stops, durations, cheapest dates within a range, compare nearby airports, and retrieve booking deep links.41MIT
Glama MCP Gateway
Add one secure layer between your agents and this server.