mcpField
F
faregrid

faregrid

Local
github.com/CloudCorpRecordsMaps & Travel0Updated 1w ago

About faregrid

faregrid is a local bridge to the hosted FlightPowers MCP server for searching live Google Flights fares. It returns flight details and historical price bands for comparison, but does not provide booking or payment functions.

Key features

  1. 01Search one-way and round-trip fares
  2. 02Search date ranges and multiple destinations
  3. 03Filter by airline, stops, and price
  4. 04Return flight details and booking links
  5. 05Assess fares against historical price bands

Use cases

  1. 01Compare fares across several dates
  2. 02Find flights matching stop or airline criteria
  3. 03Check a fare against its historical range

MCP support

faregrid exposes flight-search tools to MCP clients and forwards calls to the hosted FlightPowers MCP server. Results include vendor booking links, but there are no booking or payment tools.

Configuration

Local server config is the same for every client. Copy it into your client’s MCP config file.

mcp.json · Universal config
{
"mcpServers": {
"cloudcorprecords-faregrid": {
"command": "npx",
"args": [
"-y",
"@reneturcios/faregrid"
]
}
}
}
Run commandnpx -y @reneturcios/faregrid

Local servers need a runtime on your machine (e.g. Node.js 18+). Config file locations differ by client; see your client’s docs.

Packages
npm@reneturcios/faregrid0.1.0
ocighcr.io/cloudcorprecords/faregrid:0.1.0

Tools

2

Saved tool list · updated 1w ago

ParameterTypeRequiredDescription
limitintegerNoMaximum flights to return, after merging and sorting.
sort_bystringNo"best" (the default) and "price" both order by price, cheapest first; "duration" orders shortest first. Applied across all results.
verbosebooleanNoReturns every field the upstream sends on each fare, and every fare that was selected, with no row bound. Off by default: a result carries the best rows by the requested sort_by in a compact shape (dates, destination, airline, stops, duration, price, trip length and the booking link), because a wide search over a month and several destinations otherwise produces a megabyte of JSON that some hosts refuse to put in the conversation at all. When true, it adds the arrival times, the per-leg stop counts, the raw stop details and every row past results_returned; results_total always says how many there were.
currencystringNoISO currency code, default "usd".
max_priceanyNoOnly flights at or below this price are returned.
max_stopsanyNoMaximum stops per flight. 0 means non-stop only.
seat_typeanyNo1 economy, 2 premium economy, 3 business, 4 first.
passengersanyNoOne entry per traveller, not a count: 1 adult, 2 child (aged 2-11), 3 infant on lap, 4 infant in seat, e.g. [1, 1, 2] for two adults and a child. At least one adult, each infant on lap needs its own adult, at most 9. Left out, it means one adult. A counts list [adults, children, infants], e.g. [2, 1, 0], or a bare [2] for two adults, is recognised and converted to codes before the search; a list that is valid as codes is searched as codes.
to_airportanyYesDestination airport. One IATA code ("BCN"), several separated by commas ("BCN,LIS,ATH"), or a list (["BCN","LIS","ATH"]) -- every shape is accepted and the destinations are compared in the same search.
from_airportstringYesOrigin IATA code, e.g. "TLV". One origin per search; a second one is refused rather than searched.
max_searchesanyNoThe searches this call may make, up or down. Unset is the normal behaviour: with the caller's own key the cap covers the request when the request is reasonable (a whole month at three trip lengths is 93 combinations and a whole month x 3 nights x 3 destinations is 279; both run in full) and anything past it is sampled evenly across the range rather than cut short. A lower value spends fewer searches on a wide search; a higher one -- to a hard maximum of 300 -- covers a grid wider than that.
use_fallbackanyNoDefault: unset. Switches the search to a second, independent flight data source instead of the usual Google Flights page read. Unset already escalates to that source once, automatically, after a search's retries have failed. true forces it inline on every attempt -- much slower, and it can time out. false disables it entirely, that automatic retry included.
airline_codesanyNoRestricts the search to these airline codes, e.g. ["LY"].
departure_dateanyNoSingle departure date, "YYYY-MM-DD".
arrival_time_maxanyNoLatest arrival hour, 0-23.
arrival_time_minanyNoEarliest arrival hour, 0-23.
departure_date_toanyNoLast date of a departure range.
departure_time_maxanyNoLatest departure hour, 0-23.
departure_time_minanyNoEarliest departure hour, 0-23.
departure_date_fromanyNoFirst date of a departure range.
exclude_airline_codesanyNoAirline codes left out of the results.

Details

From the project README

faregrid

faregrid is a small local bridge to the hosted FlightPowers MCP server, which reads live flight prices from Google Flights. Give it an origin and a destination, plus either a single date or a whole date range, and it answers with fares, airlines, durations, stop counts, a bookable link for each flight, and the historical price band that shows whether a fare is unusually cheap or expensive for that route.

The bridge keeps no fare data of its own. It serves the upstream server's tool list locally, exactly as captured from the live endpoint, and forwards each tool call upstream, returning the result untouched. The captured surface is search only: results carry a buy_link to book on the vendor's own flow, and there is no booking, purchase, or payment tool in it.

Tools

  • search_oneway_flights — one-way fares. Required: from_airport and to_airport (IATA codes; the destination may be several codes as "BCN,LIS,ATH" or ["BCN","LIS","ATH"]). Optional: departure_date, or a range via departure_date_from / departure_date_to, max_stops, airline_codes, exclude_airline_codes, departure and arrival hour windows, currency (default "usd"), max_price, seat_type, passengers, sort_by (default "best"), limit (default 10), max_searches, use_fallback, and verbose. One call can search every date/destination combination in a range.
  • search_roundtrip_flights — round-trip fares, priced as paired legs rather than two separate one-ways. Required: from_airport and to_airport. Optional: the same departure date or range fields as the one-way tool, plus return_date or nights (a trip length, or a list like [5, 6, 7]), max_departure_stops, max_return_stops, departure_airline_codes, return_airline_codes, returns_per_outbound, and the shared currency, max_price, seat_type, passengers, sort_by, limit, max_searches, use_fallback, and verbose fields.

Fares go stale within minutes, so a current price always comes from a new search rather than an earlier result.

Configuration

  • FLIGHTPOWERS_MCP_URL (optional) — override the upstream endpoint. Defaults to https://flights.flightpowers.com/mcp. (The override hook is this rebuild's own labelled reconstruction.)
  • FLIGHTPOWERS_API_KEY (optional) — when set, every upstream request carries an x-rapidapi-key: <key> header, for the caller's own RapidAPI key for the Google Flights Live API. When it is not set, no key header is sent and the upstream applies its free sign-in allowance. No Authorization header is ever sent. (This forwarding is also a labelled reconstruction; the original surface was captured keyless.)
Forwarding mechanics

On the first tool call the client opens a streamable HTTP session with the upstream: a JSON-RPC initialize request (protocolVersion 2025-03-26, clientInfo name faregrid), then a notifications/initialized notification, then the tools/call request carrying the caller's arguments unchanged. When the upstream answers initialize with an Mcp-Session-Id header, that value rides on every later request of the session, which is reused for the life of the process. Replies may arrive as plain JSON or as server-sent events; both are read.

Successful upstream results pass through verbatim, including any isError flag the upstream sets. Failures — a JSON-RPC error, a non-2xx status, an unreadable response, or a request that cannot be completed — come back as an isError result whose text starts with faregrid error: (this rendering is this rebuild's own labelled reconstruction).

CLI

Each tool is also a subcommand taking one JSON argument string:

npx @reneturcios/faregrid search_oneway_flights '{"from_airport":"TLV","to_airport":"BCN","departure_date":"2026-11-10"}'
npx @reneturcios/faregrid search_roundtrip_flights '{"from_airport":"TLV","to_airport":"BCN,LIS","departure_date_from":"2026-11-01","departure_date_to":"2026-11-07","nights":[3,4]}'
npx @reneturcios/faregrid --version

Exit codes: 0 on success, 1 on an isError result, 2 on a usage error.

MCP server

npx -y @reneturcios/faregrid mcp

MCP client config:

{
  "mcpServers": {
    "faregrid": {
      "command": "npx",
      "args": ["-y", "@reneturcios/faregrid", "mcp"]
    }
  }
}

Docker

docker run -i ghcr.io/cloudcorprecords/faregrid
docker run --rm ghcr.io/cloudcorprecords/faregrid --version

The container's default command is mcp, so the first form is a stdio MCP server; any other arguments reach the CLI normally.

Development

npm install
npm run build
npm test
npm run dev

The test suite runs entirely against a stubbed JSON-RPC upstream — no live network calls.

License

MIT — see LICENSE.

Comments

Markdown supported

New to MCP?

From what the protocol is to installing your first server, these answers cover most first questions.

An open protocol that defines how AI applications connect to external tools and data in a uniform way. Clients talk to the model; MCP servers provide tools, resources and prompt templates. They exchange standard messages, so one server can be reused by many clients.