Faregrid

io.github.CloudCorpRecords由 GitHub 账号 CloudCorpRecords 发布v0.1.0更新于 Nov 7, 2026

Search one-way and round-trip flight fares across dates and destinations, with price verdicts.

概览

AI 生成的概览

本地桥接服务,让助手搜索 Google Flights 的实时单程与往返机票价格,并给出价格判断和预订链接。

可以做什么
  • 按出发地、目的地(一个或多个 IATA 代码)以及单个日期或日期区间搜索单程票价,可按经停次数、航司、时段、币种、价格上限、舱位和乘客数筛选
  • 搜索往返票价,按成对航段计价,可指定返程日期或行程天数,并分别设置去程与返程的经停和航司条件
  • 一次调用即可比较多个日期与目的地组合,返回价格、航司、时长、经停次数、可预订链接以及该航线的历史价格区间
适用场景
适合让助手在灵活日期或多个候选目的地之间比较机票价格,并判断某条航线的票价是否偏高或偏低。它只做搜索,适合调研和行程规划,不用于订票。
运行要求
以本地 stdio 进程运行,可通过 npx(需 Node.js)或 Docker 镜像启动。需要能访问上游 FlightPowers 端点的网络。可选设置 FLIGHTPOWERS_MCP_URL 覆盖端点,设置 FLIGHTPOWERS_API_KEY 发送自己的 RapidAPI 密钥;未设置密钥时使用上游的免费登录额度。
安装前请注意
工具调用会转发给第三方托管服务,因此搜索参数会离开本机。可选的 FLIGHTPOWERS_API_KEY 会作为请求头发送,应视为机密。结果包含指向供应商自身流程的预订链接;服务器本身没有订票或支付工具,且票价几分钟内就会过期。

安装

在 SourceWeft 中

  1. 打开 控制台中的 Faregrid,将其添加到工作区。
  2. 为需要使用其工具的对话启用该服务。

Desktop only,通过 STDIO。 STDIO 服务会启动本地进程,因此需要 SourceWeft 桌面宿主。

其他 MCP 客户端

参照 仓库 中的启动说明。

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:

bash
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

bash
npx -y @reneturcios/faregrid mcp

MCP client config:

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

Docker

bash
docker run -i ghcr.io/cloudcorprecords/faregriddocker 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

bash
npm installnpm run buildnpm testnpm run dev

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

License

MIT — see LICENSE.

来源:README.md,提交 7120f91

工具

2

search_oneway_flights

FlightPowers: search one-way flights

FlightPowers one-way fare search: live prices read from Google Flights. Input: origin and destination IATA codes -- the destination may be several codes, as "BCN,LIS,ATH" or ["BCN","LIS","ATH"] -- plus either one departure date or a date range. Returns each flight's price, airline, duration, stops, a bookable buy_link, and Google's historical price range (price_insights_low / price_insights_high), the band that shows whether a fare is actually a good deal. Suited to any one-way fare question, including open-ended ones. One call accepts a date range and several destinations and searches every combination: 'Cheapest flight to Sri Lanka anywhere in October' is one call, not thirty. That holds with the caller's own key. On the free sign-in allowance (10 searches a day, one per combination) a grid larger than what is left today is refused before anything runs; a grid within what is left runs, and a whole-month scan needs the caller's own key. Each date/destination combination is one search; the count comes back in `api_usage`. `by_destination` carries one entry per requested destination -- empty ones included, each with a `reason` that separates a destination with no flights from one that was not searched, whose search failed, or whose fares did not fit in `limit`. Fares go stale within minutes: a current price comes from a new search, not from an earlier result.

输入参数limitsort_byverbosecurrencymax_pricemax_stopsseat_typepassengersto_airport必填from_airport必填max_searchesuse_fallback另有 9 个

search_roundtrip_flights

FlightPowers: search round-trip flights

FlightPowers round-trip fare search: live prices read from Google Flights, priced as paired legs rather than two separate one-ways. Input: origin and destination IATA codes -- the destination may be several codes, as "BCN,LIS,ATH" or ["BCN","LIS","ATH"] -- a departure date or range, and either a return date or a trip length in nights. Returns the total price for both legs, per-leg airline, stops and duration, and a single bookable buy_link for the trip. Suited to any return-trip fare question. A flexible search is ONE call: departure_date_from / departure_date_to set the outbound range and `nights`, in place of return_date, compares trip lengths -- '5 to 7 nights in Rome sometime in May' is one call. A WHOLE MONTH is one call too. departure_date_from "2026-10-01", departure_date_to "2026-10-31" and nights [3, 4, 5] prices every departure day in October at three trip lengths and shows which combination is cheapest. That is 93 date/night combinations and the cap rises to cover them by itself, so the whole grid runs in that one call. That holds with the caller's own key. On the free sign-in allowance (10 searches a day, one per combination) a grid larger than what is left today is refused before anything runs; a grid within what is left runs, and a whole-month scan needs the caller's own key. Each date/night/destination combination is ONE search, so a month at three trip lengths is 93 of them and the same month across two destinations is 186. A search that fails with a server error is retried once, so with the caller's own key the figure the plan is charged is `api_usage.hub_requests_billed` (retries included), not the combination count. `by_destination` carries one entry per requested destination -- empty ones included, each with a `reason` that separates a destination with no flights from one that was not searched, whose search failed, or whose fares did not fit in `limit`. Fares go stale within minutes: a current price comes from a new search, not from an earli

输入参数limitnightssort_byverbosecurrencymax_priceseat_typepassengersto_airport必填return_datefrom_airport必填max_searches另有 9 个

版本历史

1
  1. v0.1.0最新Nov 4, 2026

评分

已满足适用检查项的 90%

该评分衡量此收录条目的完整程度,依据注册中心条目、端点与公开来源计算得出。它不是对服务器本身的评价,也不表示服务器安全或当前可用:可连通性是带日期的检查结果,评分也不包含安装量或用户评价。

  • 近 30 天内可连通25 分
  • 已声明认证方式10 分

    请在注册中心条目中声明凭据请求头,或保持端点能够响应探测,以便判定其认证方式。

  • 已列出工具必需15 分
  • 描述必需15 分
  • 图标10 分
  • 文档15 分
  • 许可证10 分