We're LetsFG — a community of travelers.
MCP serverSearchSearch and book flights and hotels: hundreds of airlines, plus bookable hotel rates.
Available today. Use it from your connected AI after setup.
Needs your own Letsfg Bearer account. Credentials stay encrypted.
Connect ahel once, and every AI you use reads what you have installed.
Then ask your AI: use We're LetsFG — a community of travelers.
From the project's README
As published by LetsFG/LetsFG in README.md.
Finding a flight or hotel shouldn't mean checking 47 tabs. Or 3 hours of searching. Or having that feeling you could've got a better deal if you'd just waited a little longer.
So we built something about it. No markup. No tracking. No price that goes up because you looked twice.
Join the community. Help others find cheaper flights. Spread the word.⭐ Star the repo. Share with a friend ✈️
Flights and hotels. Both live.
Hundreds of airlines. Real prices. One function call.
LetsFG gives your AI agent flight and hotel search and booking superpowers. Our server-side engine scans the entire world for the cheapest price. Search is free. Booking is real: the fare is held on your card, a LetsFG booking agent buys the ticket, and you get the airline's PNR.
The same flight costs $20–$50 less because you skip OTA inflation, cookie tracking, and surge pricing.
Agents: add https://letsfg.co/developers/api/mcp as an MCP server. Approving the connection opens letsfg.co/connect, where you add a card in a 0.00 Revolut setup (nothing is charged, no Revolut account needed). That token searches for free and books. Scripts: send the same token as Authorization: Bearer to the PFS endpoints. Developer API: a separate paid product for high-volume commercial use; most agents do not need it. → Get started
Supporters
Real prices: LetsFG vs Google Flights
We searched 5 routes on Google Flights and LetsFG on the same day (2026-08-05), for flights departing 2026-09-16. Same airline, same number of stops — LetsFG was cheaper every time:
| Route | Airline | Google Flights | LetsFG | You Save |
|---|---|---|---|---|
| LAX → Paris (CDG) | JetBlue, 1 stop | $363 | $334 | $29 |
| SFO → London (LHR) | JetBlue, 1 stop | $349 | $333 | $16 |
| LA → New York (JFK) | JetBlue, nonstop | $174 | $157 | $17 |
| London → Singapore (SIN) | Shenzhen Airlines, 1 stop | $395 | $380 | $15 |
| Chicago → Dubai (DXB) | Air Canada + Emirates, 2 stops | $517 | $461 | $56 |
$133 cheaper across 5 routes in a verified comparison (2026-08-05). Google Flights inflates on repeat searches; LetsFG returns the same prices however often you run the search, because it reads airlines and the major booking sites directly rather than tracking you.
Why the difference? Google Flights only searches its own limited set of airline partners. LetsFG searches everywhere — Skyscanner, Kiwi, Kayak, Momondo, plus direct airline websites (Ryanair, United, Southwest, EasyJet, Spirit, Norwegian, AirAsia, and hundreds more). More sources = better prices. No demand-based inflation and no cookie tracking: the same search returns the same prices however often you run it.
Real hotel prices: LetsFG vs Booking.com
Same hotel, same room type, same 2-night stay, same free-cancellation policy — checked on the same day (2026-08-05) for a 2026-09-16 check-in:
| Hotel | Booking.com | LetsFG | You Save |
|---|---|---|---|
| Hotel Boss, Warsaw | $206 | $169 | $37 |
| ibis Styles Paris Gare de l'Est | $663 | $525 | $138 |
| Copthorne Tara Hotel, London Kensington | $379 | $347 | $32 |
$207 cheaper across 3 hotels in a verified comparison (2026-08-05), matching each property's own free-cancellation rate against Booking.com's free-cancellation rate for the identical dates and room type. Prices quoted in PLN at booking, converted to USD at that day's rate.
Why the difference? LetsFG sells at the supplier's wholesale cost plus a fixed margin — no markup for demand, no loyalty-program cross-subsidy. At booking the price is held on your card, not taken, and it is charged only once the hotel confirms. The comparison above uses free-cancellation rates on both sides; LetsFG also sells non-refundable rates, and every offer says which it is.
Try it right now — no install needed
Human users: Use letsfg.co and search flights instantly in your browser:
🌐 Search on letsfg.co
Search any route, compare live results, and book the flights you want — no installation needed.
Agents / scripts (free server-side): Get a Bearer token by putting a payment method on file (nothing is charged) → use POST /api/search and POST /api/agent-book. This is PFS — Programmatic Flight Search powered by the letsfg.co engine. Search is free; the token is short-lived and refreshes itself. See letsfg.co/for-agents for the full guide.
When you're ready to integrate it into your own agent, keep reading.
Three ways to use LetsFG
| Path 1 — MCP / CLI / SDK | Path 2 — PFS (Programmatic Flight Search via letsfg.co) | Path 3 — Developer API | |
|---|---|---|---|
| Best for | AI agents (Claude, ChatGPT, Cursor, Windsurf), personal use — easiest way in | Scripts/agents calling the API directly with a Bearer token | High-volume commercial integrations that want prepaid billing. Most agents should not use this |
| Speed | 8–10 s to first results | 8–10 s to first results | 2–5 s (discover) · 8–10 s to first results (full search) |
| Search cost | Free (card connected once, nothing charged) | Free (card connected once, nothing charged) | Look-to-book: 200 free after every booking, then $0.01 |
| Booking | book_flight — fare held on your card, agent buys the ticket, real PNR | POST /api/agent-book — same flow | POST /flights/book — same flow, no booking fee |
| Setup | Add https://letsfg.co/developers/api/mcp as an MCP server, approve, add a card | Same token, sent as Authorization: Bearer — see below | letsfg.co/developers |
| Runs where | Our servers (ranking local in the SDK) | Our servers | Our servers |
-
MCP / CLI / SDK (Path 1): add
https://letsfg.co/developers/api/mcpas an MCP server in Claude, ChatGPT, Cursor or Windsurf and approve the connection. The consent step opens letsfg.co/connect, where the person adds a card (any card, or Revolut Pay / Google Pay) in a 0.00 Revolut setup: nothing is charged, no Revolut account is needed, and card details go to Revolut, never to LetsFG. The token you get back is card-backed: it searches for free and it can book. The Python and JS SDKs read that token fromLETSFG_BEARER_TOKENor~/.letsfg/config.jsonand apply the open-source ranking algorithm locally. (letsfg authruns this same connect flow from the terminal: it registers itself as an OAuth client, opens the card screen in a browser for a person to approve, and stores the token.) -
PFS — Programmatic Flight Search (Path 2): For scripts and agents that call the API directly. letsfg.co is human-only by default (Cloudflare Turnstile + bot protection), so the card-backed token from the connect flow is the only programmatic way in. Send it on every request:
- Search:
POST https://letsfg.co/api/searchwithAuthorization: Bearer <token>→{ search_id } - Poll:
GET https://letsfg.co/api/results/<search_id>(never counts against the rate limit) - Book:
POST https://letsfg.co/api/agent-book→{ booking_ref }within seconds - Wait:
POST https://letsfg.co/api/agent-book/statuswith{ booking_ref }every 20–30 s untilcompleted(PNR),failed(hold released, nothing charged) orneeds_attention
POST /api/agent-access/requeststill answers402withadd_card_urland these steps as JSON, so an agent that starts from the endpoint lands in the same place. The MPP lane (a wallet, no card) is unchanged: answer theWWW-Authenticate: Paymentchallenge ($0.01 once) and verify withAuthorization: Payment. The Stripesetup_url/ SetupIntent lanes were retired on 2026-09-02 and every token they issued was revoked; reconnect at letsfg.co/connect. Full guide and response schema: letsfg.co/for-agents. - Search:
-
Developer API (Path 3): Server-side search and booking at letsfg.co/developers. Look-to-book search (200 free after every booking, then $0.01), real booking through
POST /flights/bookon a connected Revolut method, full NL query parsing, a/discoverendpoint that checks 20 destinations in one call (2–5 s), hotels, and a free sandbox at/sandbox/flights/*. Full docs: letsfg.co/developers/api/docs.
Free server-side search: Use Path 1 or PFS — connect a card once at letsfg.co/connect (nothing charged) and searches run free on our servers. No Playwright, no local install beyond the SDK. Booking from your own product: Use the Developer API (Path 3) — look-to-book search,
POST /flights/book, and no booking or transaction fee. Hotels work on both the card-backed token and a Developer API key.
Pricing
| How you use it | Search | Flight booking | Hotel booking | Runs where? |
|---|---|---|---|---|
| MCP Server | ✅ Free (card connected once at letsfg.co/connect) | Fare + markup held, captured on a real PNR. No separate fee | Price held, captured once the hotel confirms. No reservation fee | Our servers |
| CLI / Python SDK / npm | ✅ Free (same token) | Same | Same | Our servers |
| PFS (raw API via letsfg.co) | ✅ Free (same token, or $0.01 once via MPP) | Same | Price held, captured once the hotel confirms. No reservation fee | Our servers |
| Developer API | 200 free per booking, then $0.01 | Fare + markup held, captured on a real PNR. No booking fee, no transaction fee | Price held, captured once the hotel confirms. No reservation fee | Our servers |
MCP / CLI / SDK / PFS = free search, real booking, no separate fee. Connect a card once (a 0.00 Revolut setup, nothing is charged) and searching is free. No credits, no unlock step. Booking works exactly like the website checkout: book_flight / POST /api/agent-book holds the fare plus LetsFG's markup on your card, a LetsFG booking agent buys the ticket from the seller, and the hold is captured only once a real airline PNR exists. If the booking fails the hold is released and nothing is charged. The price you see is the price you pay; the markup is inside it, nothing is added at booking.
Hotels = the price on the offer, held then captured, on every path. Booking holds the full price on your card, LetsFG books and pays the hotel, and the hold is captured only once the hotel confirms; a failed booking releases it. There is no reservation fee, no deposit and no pay link. Every rate type is sold, and each offer says whether it is refundable and until when. See Hotels below.
Developer API = business use, look-to-book. letsfg.co/developers books flights itself — POST /flights/book holds the fare on your connected Revolut method and a LetsFG booking agent buys the ticket, exactly like the other paths. Search is not priced per call: you get 200 free searches after every booking you make, and booking resets the counter. Past that, blocks of 500 for $5.00 ($0.01 each). No booking fee, no transaction fee — the margin is inside the price the search returned, so the amount shown is the amount charged. Minimum top-up: $5.
The monthly per-search tiers ($0.50 / $0.20 / $0.10) were retired on 2026-09-08 along with Stripe. Payments are Revolut:
POST /agents/connect-paymentreturns a one-time link that saves a card, and nothing is charged to connect.
💡 Know someone who travels? The more people discover LetsFG, the more airlines we cover — and the better it gets for everyone. ⭐ Star · Share with a friend
Why developers star this repo
| Google Flights / Expedia | LetsFG | |
|---|---|---|
| Price | Inflated (tracking, cookies, surge) | Stable across repeat searches. $133 cheaper across 5 routes, verified 2026-08-05. |
| Coverage | Misses budget airlines | Hundreds of airlines — OTAs, budget carriers, full-service |
| Speed | 30 s+ (page loads, ads, redirects) | CLI/PFS: 8–10 s to first results · API discover: 2–5 s |
| Repeat search raises price? | Yes | Never |
| Works in AI agents? | No API | MCP · CLI · PFS (card connected once, free) · Developer API (prepaid) |
| Booking | Redirects to OTA checkout | Real airline PNR, e-ticket to inbox |
| Cabin class filter | No | Economy, premium, business, first |
| Cost to you | Hidden markup | CLI/PFS: free search; no booking fee and no transaction fee. Developer API: 200 free searches after every booking, then $0.01/search; no booking fee, no transaction fee. |
Get started
Everything runs on our servers. One card connection covers the MCP, the SDKs and the raw API.
🔌 MCP — connect once, search and book
Add the remote server and approve the connection. The consent step opens letsfg.co/connect: add a card (or pay 0.00 with Revolut Pay / Google Pay), nothing is charged, and you are in.
# Claude Code
claude mcp add --transport http letsfg https://letsfg.co/developers/api/mcp
// Cursor (~/.cursor/mcp.json) — Windsurf uses "serverUrl" instead of "url"
{ "mcpServers": { "letsfg": { "url": "https://letsfg.co/developers/api/mcp" } } }
claude.ai and ChatGPT: add a custom connector with the same URL.
Then, in the chat: "find me the cheapest flight from London to Barcelona on June 15 and book it". search_flights returns offers; book_flight holds the fare on your card and starts a LetsFG booking agent; get_flight_booking reports the PNR when it lands (4–11 minutes).
🖥️ CLI / SDK — same token, ranking runs locally
pip install letsfg
export LETSFG_BEARER_TOKEN=<token from the connect flow>
letsfg search LHR BCN 2026-06-15
letsfg search LHR JFK 2026-06-15 --cabin C # cabin class: M economy, W premium, C business, F first
The SDKs read the token from LETSFG_BEARER_TOKEN or ~/.letsfg/config.json. letsfg auth performs that connect flow itself: it registers as an OAuth client, opens https://letsfg.co/connect for a person to approve, and writes the token to ~/.letsfg/config.json. Add --no-browser to print the URL instead of opening one.
🔌 PFS — Programmatic Flight Search (free, server-side)
Run LetsFG's full search on our servers from any script. Access requires a card connected to a LetsFG account: letsfg.co is human-only (Cloudflare Turnstile), so the card-backed token from the connect flow is the only programmatic way in. Nothing is charged to connect it.
# 1. Search with the token
curl -X POST https://letsfg.co/api/search \
-H "Authorization: Bearer <token>" \
-H "Content-Type: application/json" \
-d '{"origin":"LHR","destination":"BCN","date_from":"2026-06-15"}'
# → {"search_id":"ws_abc123","status":"searching"}
# 2. Poll until done (keep going while split_ticket_pending is true)
curl https://letsfg.co/api/results/ws_abc123 -H "Authorization: Bearer <token>"
# 3. Book — the fare is HELD on the card, a LetsFG agent buys the ticket
curl -X POST https://letsfg.co/api/agent-book \
-H "Authorization: Bearer <token>" -H "Content-Type: application/json" \
-d '{"search_id":"ws_abc123","offer_id":"wo_abc123","contact_email":"ada@example.com",
"passenger":{"given_name":"Ada","family_name":"Lovelace","born_on":"1990-04-01","gender":"f",
"nationality":"GB","phone_number":"+447700900000","phone_country":"GB",
"address_line1":"1 Analytical Way","address_city":"London","address_postal":"N1 9GU","address_country":"GB"}}'
# → {"booking_ref":"eyJ..."} within seconds
# 4. Wait for the PNR (every 20–30 s; a booking takes 4–11 minutes)
curl -X POST https://letsfg.co/api/agent-book/status \
-H "Authorization: Bearer <token>" -H "Content-Type: application/json" \
-d '{"booking_ref":"eyJ..."}'
# → {"state":"completed","pnr":"ABC123","charged_amount":93,"currency":"EUR"}
failed means the hold was released and nothing was charged; needs_attention means a human at LetsFG is checking it, do not book again. A missing passenger detail returns missing_fields and charges nothing. Without a card the endpoint answers payment_method_required with add_card_url. Full guide and response schema: letsfg.co/for-agents.
⚡ Developer API — server-side search, booking and hotels
A separate product for high-volume commercial integrations; most agents should not use it. Look-to-book search, results in seconds, and real booking through POST /flights/book — plus /discover (20 destinations in one call), async polling, NL query parsing, hotels, and a free sandbox.
# Register, then search with your API key
curl -X POST https://letsfg.co/developers/api/v1/agents/register \
-H "Content-Type: application/json" \
-d '{"agent_name":"my-agent","email":"you@example.com"}'
curl -X POST https://letsfg.co/developers/api/v1/flights/search \
-H "X-API-Key: letsfg_..." \
-H "Content-Type: application/json" \
-d '{"origin":"LHR","destination":"BCN","date_from":"2026-06-15"}'
Pricing: 200 searches free after every booking, then blocks of 500 for $5.00 ($0.01 each). No booking fee, no transaction fee. Minimum top-up $5. Test for free in the sandbox first. Full docs: letsfg.co/developers/api/docs.
search_flights LON → BCN, 2026-04-01, return 2026-04-08
get_flight_results (while more offers are still landing)
book_flight search_id + offer_id + one traveller's real details + contact_email
→ booking_ref in seconds; fare + markup HELD on the connected card
get_flight_booking every 20–30 s → completed (PNR, charged_amount) | failed (hold released) | needs_attention
Over raw HTTP the same four steps are POST /api/search, GET /api/results/<id>, POST /api/agent-book, POST /api/agent-book/status.
letsfg unlock was retired on 2026-09-08 and its route answers 410 Gone.
There is no unlock step on either lane: booking holds the fare and captures only
against a real PNR, which is what unlock existed to protect against. See
CLI Commands.
💡 Like what you see? Support us — ⭐ Star · Share with a friend
Works everywhere your agent runs
MCP Server (Claude / ChatGPT / Cursor / Windsurf / OpenClaw)
Use the hosted server. It carries your card-backed token for you, and book_flight books for real.
{
"mcpServers": {
"letsfg": {
"url": "https://letsfg.co/developers/api/mcp"
}
}
}
Approve the connection when your client asks; the consent step opens letsfg.co/connect, where a card is added in a 0.00 setup (nothing is charged). Tools: search_flights, get_flight_results, book_flight, get_flight_booking, plus the hotel tools.
The stdio package (npx -y letsfg-mcp) works too if you give it a token in LETSFG_BEARER_TOKEN; its authenticate tool returns the current connect instructions.
{
"mcpServers": {
"letsfg": {
"command": "npx",
"args": ["-y", "letsfg-mcp"],
"env": {
"LETSFG_API_KEY": "letsfg_your_api_key"
}
}
}
}
This is a separate paid product for high-volume commercial use — most agents should stick with the free connect flow above and skip this. A human setting this up deliberately gets a key at letsfg.co/developers.
5-minute quickstarts: Claude Desktop · Cursor · Windsurf
Python SDK
from letsfg import LetsFG
Shortened here. Read the whole README on GitHub.
Advanced
- Delivery
- letsfg MCP server → your ahel gateway (mcp.ahel.ai) → every connected AI client.
- Catalog kind
- mcp-server
- Gateway key
io-github-letsfg-letsfg- Source
- github.com/LetsFG/LetsFG
- Hosted endpoint
https://letsfg.co/developers/api/mcp