LetsFG
Agent-native flight and hotel search and booking.
Что умеет
- Search Flights: Search for flights between any two cities/airports worldwide. Searches hundreds of airlines plus the major booking sites in parallel, server-side. Returns offers with prices, airlines,
- Search Hotels: Search real, bookable hotel rates in a city. Only free-cancellation, pay-later rates are returned, so everything you see can be booked — there is no separate wholesale figure to misquot
- Resolve Hotel City: Resolve a place name to the hotel-search city ids search_hotels understands. Use this when a place name is ambiguous (e.g. more than one 'Warsaw' or 'Springfield') and you need to
Какие данные видит
Нужен ли аккаунт
Не нужен: сервер работает без входа
Agent-native flight and hotel search and booking. One tool call searches hundreds of airlines plus the major booking sites — Google Flights, Skyscanner, Kiwi, Kayak, Momondo — and returns merged, deduplicated, ranked results with per-flight reliability history.
Your agent doesn't need to build a travel integration. It doesn't need to scrape. Add this MCP server and it can search and book flights and hotels.
Free, on one credential
Run letsfg auth once — a zero-amount Stripe card setup, nothing charged, no authorization hold — and you get a 90-day token that reaches both flights and hotels. No Developer API account, no prepaid credits, no separate login for hotels. The same card authorises both products.
Why?
Flight websites inflate prices with demand tracking, cookie-based pricing, and surge markup. LetsFG returns the raw price with no demand-based inflation and no cookie tracking — the same search returns the same prices however often you run it.
For hotels, you don't pay for the room upfront. A small charge holds the booking, and the balance goes straight to the hotel through a pay link, any time up to their own cancellation deadline. Only free-cancellation rates are sold, so every rate you see can actually be booked on those terms.
How it works
Search runs server-side at letsfg.co — no browsers, no scrapers on your machine. search_flights fans out across airline connectors and the major booking sites in parallel; search_hotels opens a real session at the supplier and returns live, bookable rates.
Tools
Flights
| Tool | What it does | Cost |
|---|---|---|
search_flights |
Search hundreds of airlines and booking sites | Free |
resolve_location |
City/airport → IATA code | Free |
book_flight |
Book with real PNR + e-ticket | Ticket price only — no LetsFG fee |
unlock_flight_offer |
Confirm live price and reserve. Legacy, Developer API only — not part of the agent flow; call book_flight directly |
— |
Hotels — need a card on file, because a hotel search opens a real session at the supplier. letsfg auth already puts one there.
| Tool | What it does | Cost |
|---|---|---|
resolve_hotel_city |
Place name → supplier city id. Call this first | Free |
search_hotels |
Live, bookable, free-cancellation pay-later rates | Free |
book_hotel |
Book a rate. Returns a job id — poll, don't retry | 5% now, non-refundable; balance to the hotel later |
get_hotel_booking |
Poll the booking job until it succeeds or fails | Free |
cancel_hotel_booking |
Release a reservation | Free |
Account
| Tool | What it does | Cost |
|---|---|---|
authenticate |
Zero-amount card setup → 90-day token | Free, nothing charged |
setup_payment |
Attach a Stripe payment method | Free |
get_agent_profile |
Your usage & profile | Free |
load_resources |
Load the in-server usage guide | Free |
Auth
Either credential reaches both flights and hotels:
LETSFG_BEARER_TOKEN— the free token fromletsfg auth. Recommended.LETSFG_API_KEY— a Developer API key (prepaid credits) from letsfg.co/developers, for high-volume commercial integrations.
If both are set, the token is used.
Pricing
- Flights — search is free and unlimited. Booking charges the airline ticket price only, with no LetsFG fee.
- Hotels — booking charges 5% of the price immediately as a non-refundable reservation fee. The balance is paid directly to the hotel through the pay link we return, by their own cancellation deadline. Cancel before that deadline and the balance was never charged.
Links
- GitHub: github.com/LetsFG/LetsFG — full docs, open-source ranking engine, architecture guide, agent integration tutorials
- API Docs: letsfg.co/developers/api/docs
- PyPI: pypi.org/project/letsfg
- npm: npmjs.com/package/letsfg-mcp
Список инструментов сервера (11)
Технические названия из tools/list. Нужны только разработчикам.
| search_flights | Search for flights between any two cities/airports worldwide. Searches hundreds of airlines plus the major booking sites in parallel, server-side. Returns offers with prices, airlines, times, conditions. IMPORTANT: Response includes `passenger_ids` — save them for booking. |
| search_hotels | Search real, bookable hotel rates in a city. Only free-cancellation, pay-later rates are returned, so everything you see can be booked — there is no separate wholesale figure to misquote. `price` is what the guest pays (hotel cost + a flat 5% reservation fee) — that fee is already inside `price`, so nothing extra is added at checkout, unlike a typical ~3% OTA booking fee. Search is free up to 1,000 searches since your last hotel booking. Past that allowance, searches are sold in blocks of 1,000 for $5.00, debited from your prepaid developer balance the moment you cross the current allowance — book a hotel to reset the free allowance back to 1,000. A payment method on file is required for every search regardless — the same card that authorises flight booking (see setup_payment). Each offer carries a `booking_handle` object — pass it VERBATIM to book_hotel when the guest picks a room. Do not construct or edit it yourself. Logical filters, e.g. 'hotel with spa and parking, under €400, near the Eiffel Tower, with breakfast': set `amenities`, `max_total_price`, `max_distance_km`+`near`, and adults/children/child_ages directly — these are applied for you, not something you need to search broadly and filter yourself. `room_flexible=true` also tries the party split across multiple rooms when there are children, for 'any number of rooms is fine' requests. `dietary_hint` (e.g. 'vegan') is BEST-EFFORT only — say so to the guest, never claim it as verified. |
| resolve_hotel_city | Resolve a place name to the hotel-search city ids search_hotels understands. Use this when a place name is ambiguous (e.g. more than one 'Warsaw' or 'Springfield') and you need to show the guest a choice before searching — search_hotels already resolves unambiguous names on its own, so this is optional in the common case. |
| book_hotel | Book one hotel room from a search_hotels result and charge the 5% reservation fee. Returns immediately with a `booking_job_id` — this is NOT the finished booking. A real hotel booking takes several minutes (the rate is re-blocked, the card charged, the room committed at the supplier), so you MUST poll get_hotel_booking every ~20 seconds until `status` is 'succeeded' or 'failed'. Do NOT call book_hotel again for the same offer while a job is still in progress — that books the room twice and charges two reservation fees. Money: booking immediately charges 5% of the price to the connected account's card on file, as a non-refundable reservation fee. On success, the result carries a `pay_link` — the guest pays the remaining bare hotel cost directly to the supplier through that link, by `balance_due_by` (the supplier's real auto-cancellation date, not advisory). A declined card costs nothing: no reservation exists yet when the charge is attempted. |
| get_hotel_booking | Poll the result of a booking started with book_hotel. Call every ~20 seconds using the `booking_job_id` from book_hotel's response until `status` is 'succeeded' or 'failed' — it usually settles within 5 minutes. On success the result includes `confirmation`, `reservation_fee_charged`, `pay_link`, `balance_due`, `balance_due_by`, and the cancellation `terms`. |
| cancel_hotel_booking | Release a confirmed hotel reservation at the supplier. Free until `balance_due_by`; after that the hotel's own cancellation ladder applies and can reach 100% (see `terms.ladder` from the booking result). The 5% reservation fee is never refunded, cancellation or not. This can take a couple of minutes. If no response arrives before your own client gives up, that does NOT mean the cancellation failed — it may still be completing at the supplier. Wait a minute and check with support using the confirmation code rather than assuming failure or retrying immediately. |
| resolve_location | Convert a city or airport name to IATA codes for use in flight search. Use when the user says 'London' instead of 'LON'. |
| unlock_flight_offer | Confirm live price and reserve a flight offer for 30 minutes. After unlocking, call book_flight to complete the booking. |
| book_flight | Book an unlocked flight. Creates a real airline PNR with e-ticket. REQUIREMENTS: 1. Offer must be unlocked first (call unlock_flight_offer) 2. Use passenger_id from search results 3. Use REAL passenger details — airline sends e-ticket to the email provided |
| setup_payment | Attach a payment card. Required before booking. For testing: {"token": "tok_visa"} For production: {"payment_method_id": "pm_xxx"} from Stripe.js One-time setup — all future charges are automatic. |
| get_agent_profile | View your agent profile — payment status and usage stats. |