pricewin-flight-search

作者: price-win

搜尋 Agoda、Trip.com 和 Traveloka 上特定航線與日期的即時航班票價——單程或來回、任何艙等,包含航空公司、時間、停靠站、飛行時長及直接預訂連結。當使用者想要查詢兩個城市之間的機票價格、機票、便宜機票或票價、比較不同航空公司的旅行日期,或規劃旅程的飛行段時使用。

npx skills add https://github.com/price-win/pricewin-skills-hub --skill pricewin-flight-search

Requires the pricewin MCP server. This skill issues no network calls of its own.

Setup (once per machine)

Without the MCP server registered this skill is inert — it tells you to call search_flights_live and no such tool exists. skills add only copies files, so run:

bash install.sh          # add --dry-run first to see what it would change

It registers the hosted server (https://mcp.price.win/mcp, Streamable HTTP, no credentials) with every agent it finds — Claude Code, Cursor, Windsurf, Gemini CLI, VS Code, Codex — writing a .bak before touching any file and skipping configs it cannot parse. Re-running it changes nothing. Restart the agent afterwards.

Flight Search (Live)

MCP server: pricewin. Tool search_flights_live starts an async crawl across Agoda, Trip.com and Traveloka; poll_flight_results returns the merged, cheapest-per-flight fares.

CRITICAL: IATA codes only

Both airports MUST be 3-letter IATA codes. There is no airport-lookup tool on this server — resolve the city yourself: Sài Gòn / TP.HCM → SGN, Hà Nội → HAN, Đà Nẵng → DAD, Bangkok → BKK (main international), Tokyo → NRT or HND, Seoul → ICN.

When a city has several airports and the user did not say which, ask one short question — never pick silently. Never invent a code.

CRITICAL: Polling pattern (differs from hotel search)

search_flights_live returns IMMEDIATELY with a sessionId and zero flights.

  1. Call search_flights_live with origin, destination, departureDate (YYYY-MM-DD), and returnDate only for a round trip. Add adults, cabin, language="vi" as needed.
  2. Call poll_flight_results(sessionId). This tool blocks internally up to ~30s and returns as soon as the first fares land — do NOT sleep before calling it.
  3. status is pending | searching | completed | failed. If it comes back searching with few or no flights, call again — up to 4 more times.
  4. Present results as soon as flights arrive; keep polling only if the user wants more.

The session expires 15 minutes after the last poll. After that, start a new search — the old sessionId is dead.

poll_flight_results is registered app-visible for the flight widget. If your host does not expose it to the model, let the widget do the polling and do not fabricate fares.

CRITICAL: price is the party total, in USD

price is the total for all adults — not per-person, and not the two legs combined. Divide by adults yourself for a per-person figure.

currency is "USD". Do not convert it. It falls back to "VND" only when the live FX rate was unavailable — so read currency and label the figure with it rather than assuming either one.

Response format (MUST follow exactly)

Present the TOP 5-7 flights per leg ONLY. For EACH flight:

✈️ *<airline> <flightNumber>*  ← bold via markdown
🕐 <dep.time> <origin> → <arr.time> <destination> · <Xh Ym> · <bay thẳng | N điểm dừng>
💰 $<price> tổng cho <adults> khách (~$<price/adults>/khách)
🔗 <bookingUrl>

Line break between flights, no bullet markers. Cheapest flight gets 🏆. duration is in minutes — format it as 2h 10m. Flag an overnight arrival when arrival.date differs from departure.date.

Round trips

outboundFlights and returnFlights are two independent one-way searches. List them under separate headings. You may state a combined estimate as cheapest outbound + cheapest return, but label it as two separate one-way tickets — it is not a quoted round-trip fare and the two legs are booked separately.

Booking URLs — use verbatim

bookingUrl is the deep link of the cheapest agent, with dates and passengers already baked in. Never append, rewrite, or construct params (unlike the hotel skill). A bookingUrl of exactly https://www.price.win/ means no agent deep link was captured — say the fare must be re-checked on the provider's site instead of presenting it as a click-to-book link.

Attribute the source only from the URL host (agoda.com, trip.com, traveloka.com) — the result carries no explicit source field, so do not guess one.

Fields that look useful but are not

  • stopCities — always empty; describe stops by count only
  • departure.city / arrival.city — repeat the IATA code, not a real city name
  • legs — usually absent on list results; don't promise a segment breakdown

Ranking

Sort by price. Cheapest first, but surface a non-stop or much shorter option when it costs only marginally more — say so in one line rather than reordering silently.

Security & data handling

No runtime code and no network calls of its own; the only executable is install.sh, which adds one MCP entry (pricewinhttps://mcp.price.win/mcp) to agent configs the user already has, backing each file up first and skipping any it cannot parse. It downloads and executes nothing. The only data sent is the route query (IATA codes, dates, passengers, cabin) — no passenger names, no PII, no credentials. Comparison only: this skill cannot book or pay. Full disclosure in SECURITY.md.

來自 price-win 的更多技能

pricewin-deal-finder
price-win
根據指定的旅行日期和旅客人數,比較Booking、Agoda、Google Hotels和OpenTravel上的飯店價格與優惠。適用於查詢飯店價格、優惠或比較OTA費率。
pricewin-hotel-deal-finder
price-win
透過比較Booking.com、Agoda、Google Hotels和OpenTravel的即時價格,為全球任何城市和任何旅行日期尋找最便宜的酒店優惠——一條指令即可返回排名最佳性價比、最便宜和品質之選,並附直接預訂連結,全部以美元標準化。每當有人詢問酒店價格、酒店優惠、最便宜的房間或房價、最佳酒店房價、酒店價格比較,或哪個OTA更便宜時使用——例如「東京的Booking或Agoda哪個更便宜」、「幫我找一間...的酒店」
pricewin-hotel-search
price-win
即時搜尋Agoda、Booking.com、Traveloka與OpenTravel上的飯店,並提供特定日期的即時價格。當使用者需要旅遊日期的飯店價格、比較OTA或尋找房間時使用。
researchweb-scrapingapi
pricewin-price-comparison
price-win
比較 Booking.com、Agoda、Traveloka 和 OpenTravel 上特定日期的即時酒店房價——同一物業哪個 OTA 最便宜、每房價格,以及免費取消條款。適用於比較酒店價格、查詢指定酒店的房價、詢問哪個網站更便宜,或為指定的入住/退房日期尋找最佳房價時使用。
pricewin-booking-assistant
price-win
推薦飯店房間並完成真實的端到端預訂——透過付款連結(銀行 QR code、信用卡或 PayPal)預訂 OpenTravel 直營住宿,查看付款狀態、重新發送已過期的連結,或取消預訂。對於僅限 OTA 的飯店,則會退回至 Booking.com/Agoda/Traveloka 的直連連結。適用於預訂或預約飯店、取得房間推薦、支付住宿費用、查詢確認碼,或取消預訂時使用。