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更便宜时使用——例如'is Booking or Agoda cheaper for Tokyo'、'find me a hotel in...
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
推荐酒店客房并端到端完成真实预订——通过支付链接(银行二维码、银行卡或PayPal)预订OpenTravel直连酒店,查看支付状态,重新发送已过期的链接,或取消预订。对于仅支持OTA的酒店,回退到Booking.com/Agoda/Traveloka直接链接。在预订或预约酒店、获取客房推荐、支付住宿费用、查看确认码或取消预订时使用。