letsfg-mcp
v2026.5.54
Published
LetsFG MCP Server — 200+ airline connectors run locally. Flight search for Claude, Cursor, Windsurf, and any MCP agent. Free search, direct booking URLs via letsfg.co or Developer API.
Readme
letsfg-mcp — Your AI agent just learned to book flights.
200 airlines. Real prices. One tool call. The largest open flight-search MCP server. 200 ready-to-run airline connectors fire in parallel on your machine — Ryanair, EasyJet, Wizz Air, Southwest, AirAsia, Qantas, and 194 more — plus enterprise GDS/NDC providers (Amadeus, Duffel, Sabre) through the LetsFG backend.
Your agent doesn't need to build a flight integration. Just add this MCP server.
What This Is
LetsFG is not a scraper wrapper. It's a production-grade agent-to-airline connector layer:
- 200 airline connectors run locally on your machine via Python + Playwright — no API key needed for search
- Enterprise GDS/NDC feeds (Amadeus, Duffel, Sabre, Travelport, Kiwi) run through the LetsFG backend — these are contract-only data sources that require enterprise agreements, made available to everyone through our API
- Virtual interlining — the combo engine mixes one-way fares across airlines (e.g., Ryanair outbound + Wizz Air return) to find deals no single airline offers
- City-wide airport expansion — search
LONand it auto-searches LHR, LGW, STN, LTN, SEN, LCY. Works for 25+ major cities worldwide - Zero price bias — no cookie tracking, no demand-based inflation, no surge pricing. Same raw airline price every time
Why agents should use this instead of building their own:
- Saves thousands of tokens vs. browser automation or scraping
- 180 connectors fire in parallel — scans airlines across Europe, Asia, Americas, Middle East, Africa, and Oceania simultaneously
- Finds deals on carriers your agent wouldn't think to check (Lucky Air, 9 Air, Jazeera Airways, FlySafair...)
- Enterprise-contracted GDS deals that require contracts worth $50k+/year — available for free on search
Quick Start
npx letsfg-mcpThat's it. The MCP server starts on stdio, ready for any MCP-compatible client.
Prerequisites for local search:
pip install letsfg
playwright install chromiumTip: For faster searches, use the mode: "fast" parameter in search_flights — fires only ~25 OTAs + key airlines (20-40s instead of 6+ min).
Client Configuration
Claude Desktop
Add to ~/Library/Application Support/Claude/claude_desktop_config.json (macOS) or %APPDATA%\Claude\claude_desktop_config.json (Windows):
{
"mcpServers": {
"letsfg": {
"command": "npx",
"args": ["-y", "letsfg-mcp"],
"env": {
"LETSFG_API_KEY": "trav_your_api_key"
}
}
}
}Note: Add
"LETSFG_MAX_BROWSERS": "4"toenvto limit browser concurrency on constrained machines.
Cursor
Add to .cursor/mcp.json in your project root:
{
"mcpServers": {
"letsfg": {
"command": "npx",
"args": ["-y", "letsfg-mcp"],
"env": {
"LETSFG_API_KEY": "trav_your_api_key"
}
}
}
}Windsurf
Add to ~/.codeium/windsurf/mcp_config.json:
{
"mcpServers": {
"letsfg": {
"command": "npx",
"args": ["-y", "letsfg-mcp"],
"env": {
"LETSFG_API_KEY": "trav_your_api_key"
}
}
}
}Continue
Add to ~/.continue/config.yaml:
mcpServers:
- name: letsfg
command: npx
args: ["-y", "letsfg-mcp"]
env:
LETSFG_API_KEY: trav_your_api_keyAny MCP-Compatible Agent
Point it at the MCP server:
npx letsfg-mcpOr connect via remote MCP (no install):
https://letsfg.co/developers/api/mcpWindows — npx ENOENT Fix
If you get spawn npx ENOENT on Windows, use the full path to npx:
{
"mcpServers": {
"letsfg": {
"command": "C:\\Program Files\\nodejs\\npx.cmd",
"args": ["-y", "letsfg-mcp"],
"env": {
"LETSFG_API_KEY": "trav_your_api_key"
}
}
}
}Or use node directly:
{
"mcpServers": {
"letsfg": {
"command": "node",
"args": ["C:\\Users\\YOU\\AppData\\Roaming\\npm\\node_modules\\letsfg-mcp\\dist\\index.js"],
"env": {
"LETSFG_API_KEY": "trav_your_api_key"
}
}
}
}Pin a Specific Version
To avoid unexpected updates:
{
"command": "npx",
"args": ["-y", "[email protected]"]
}Available Tools
| Tool | Description | Cost | Side Effects |
|------|-------------|------|--------------|
| search_flights | Search 400+ airlines worldwide | FREE | None (read-only) |
| search_hotels | Search 300,000+ hotels worldwide | FREE | None (read-only) |
| resolve_location | City name → IATA code | FREE | None (read-only) |
| link_github | Link your GitHub account | FREE | Updates profile |
| unlock_flight_offer | Confirm live price, reserve 30 min | — | Confirms price |
| book_flight | Create real airline reservation (PNR) | Ticket price | Creates booking |
| setup_payment | Attach payment card (required for booking) | FREE | Updates payment |
| get_agent_profile | Usage stats & payment status | FREE | None (read-only) |
| start_checkout | Automate LCC checkout to payment page | — | Browser automation |
| system_info | System resources & concurrency tier | FREE | None (read-only) |
Booking Flow
Local connectors (Path 1 — default, free):
search_flights → [concierge unlock] → booking_url
(free) POST /checkout + pay direct airline link
1% fee (min $3)Local search results include offer_ref and payment_token on each offer. Booking links are masked by default. To get the direct airline URL:
- Call
POST https://letsfg.co/api/developers/checkoutwithoffer_id,offer_ref,payment_token,currency, andprice(no API key needed) — returns a Stripecheckout_url. - Present
checkout_urlto the user. Fee = max(price × 1%, $3.00). - Poll
GET https://letsfg.co/api/developers/payment-verify?token={payment_token}untilverified: true. The response containsbooking_url— the direct airline link.
Developer API (Path 3 — prepaid credits, no per-booking fee):
Search via the Developer API returns direct airline booking URLs on every result — no concierge flow, no per-booking checkout step. Use this path when you want raw offers at volume without per-booking fees.
Full MCP flow with local connectors:
search_flights → unlock_flight_offer → setup_payment (once) → book_flight
(free) (quote) (attach card) (ticket price, creates PNR)search_flights("LON", "BCN", "2026-06-15")— returns offers with prices from 200+ airlinesunlock_flight_offer("off_xxx")— confirms live price with airline, reserves for 30 minsetup_payment(token)— attach a payment card once (required before booking)book_flight("off_xxx", passengers, email)— creates real booking, airline sends e-ticket
The search_flights tool accepts an optional max_browsers parameter (1–32) to limit concurrent browser instances. Omit it to auto-detect based on system RAM.
The system_info tool returns your system profile (RAM, CPU, tier, recommended max browsers) — useful for agents to decide concurrency before searching.
The agent has native tools — no API docs needed, no URL building, no token-burning browser automation.
Response Mode (Remote MCP only)
search_flights and search_hotels accept an optional response_mode parameter:
| Mode | Default | What's returned | Best for |
|------|---------|----------------|----------|
| "summary" | ✅ | Price, airlines, route, departure, stops | Chat, quick comparisons |
| "full" | | Everything: segments, durations, conditions, bags, booking URLs | Deep analysis, programmatic use |
Summary mode saves tokens by stripping per-segment details, baggage policies, and booking conditions. It includes a hint field telling the agent to call unlock_flight_offer for full details on a specific offer.
// summary response (search_flights)
{
"total_offers": 42,
"offers": [
{ "id": "off_abc", "price": "€29", "airlines": ["FR"], "route": "STN→BCN", "departure": "06:15", "stops": 0 }
],
"hint": "Use unlock_flight_offer with the offer id for full pricing and booking."
}Get an API Key
Register for a free API key at letsfg.co/developers or via CLI:
pip install letsfg
letsfg register --name my-agent --email [email protected]Or directly via the API:
curl -X POST https://letsfg.co/developers/api/v1/agents/register \
-H "Content-Type: application/json" \
-d '{"agent_name": "my-agent", "email": "[email protected]"}'Optionally, link your GitHub account with link_github to connect your profile.
Architecture & Data Flow
┌──────────────────────────────────────────────────────────────┐
│ MCP Client (Claude Desktop / Cursor / Windsurf / etc.) │
│ ↕ stdio (JSON-RPC, local only) │
├──────────────────────────────────────────────────────────────┤
│ letsfg-mcp (this package, runs on YOUR machine) │
│ │ │
│ ├─→ Python subprocess (local connectors) │
│ │ 200 airline connectors via Playwright + httpx │
│ │ Data goes: your machine → airline website → back │
│ │ │
│ └─→ HTTPS to letsfg.co/developers/api (public API) │
│ unlock, book, payment, enterprise GDS search │
└──────────────────────────────────────────────────────────────┘What data goes where
| Operation | Where data flows | What is sent |
|-----------|-----------------|--------------|
| search_flights (local) | Your machine → airline websites | Route, date, passenger count |
| search_flights (GDS) | Your machine → letsfg.co/developers/api → GDS providers | Route, date, passenger count, API key |
| resolve_location | Your machine → letsfg.co/developers/api | City/airport name |
| unlock_flight_offer | Your machine → letsfg.co/developers/api → airline | Offer ID, payment token |
| book_flight | Your machine → letsfg.co/developers/api → airline | Passenger name, DOB, email, phone |
| setup_payment | Your machine → letsfg.co/developers/api → Stripe | Payment token (card handled by Stripe) |
Security & Privacy
- TLS everywhere — all backend communication uses HTTPS. Local connectors connect to airline websites over HTTPS.
- No card storage — payment cards are tokenized by Stripe. LetsFG never sees or stores raw card numbers.
- API key scoping —
LETSFG_API_KEYgrants access only to your agent's account. Keys are prefixedtrav_for easy identification and revocation. - PII handling — passenger names, emails, and DOBs are sent to the airline for booking (required by airlines). LetsFG does not store passenger PII after forwarding to the airline.
- No tracking — no cookies, no session-based pricing, no fingerprinting. Every search returns the same raw airline price.
- Local search is fully local — when searching without an API key, zero data leaves your machine except direct HTTPS requests to airline websites. The MCP server and Python connectors run entirely on your hardware.
- Open source — all connector code is MIT-licensed and auditable at github.com/LetsFG/LetsFG.
Sandbox / Test Mode
Use Stripe's test token for payment setup without real charges:
setup_payment with token: "tok_visa"This attaches a test Visa card. Unlock calls will use Stripe test mode — no real money is charged. Useful for agent development and testing the full search → unlock → book flow.
FAQ
spawn npx ENOENT on Windows
Windows can't find npx in PATH. Use the full path:
"command": "C:\\Program Files\\nodejs\\npx.cmd"Or install globally and use node directly (see Windows config above).
Search returns 0 results
- Check IATA codes are correct — use
resolve_locationfirst - Try a date 2+ weeks in the future (airlines don't sell last-minute on all routes)
- Ensure
pip install letsfg && playwright install chromiumcompleted successfully - Check Python is available: the MCP server spawns a Python subprocess for local search
How do I search without an API key?
Just omit LETSFG_API_KEY from your config. Local search (200 airline connectors) works without any key. You'll only miss the enterprise GDS/NDC sources (Amadeus, Duffel, etc.).
Can I use this for commercial projects?
Yes. MIT license. The local connectors and SDK are fully open source.
MCP server hangs on start
Ensure Node.js 18+ is installed. The server communicates via stdio (stdin/stdout JSON-RPC) — it doesn't open a port or print a "ready" message. MCP clients handle the lifecycle automatically.
| Region | Airlines | |--------|----------| | Europe | Ryanair, Wizz Air, EasyJet, Norwegian, Vueling, Eurowings, Transavia, Pegasus, Turkish Airlines, Condor, SunExpress, Volotea, Smartwings, Jet2, LOT Polish Airlines, Finnair, SAS, Aegean, Aer Lingus, ITA Airways, TAP Portugal, Icelandair, PLAY | | Middle East & Africa | Emirates, Etihad, Qatar Airways, flydubai, Air Arabia, flynas, Salam Air, Air Peace, FlySafair, EgyptAir, Ethiopian Airlines, Kenya Airways, Royal Air Maroc, South African Airways | | Asia-Pacific | AirAsia, IndiGo, SpiceJet, Akasa Air, Air India, Air India Express, VietJet, Cebu Pacific, Scoot, Jetstar, Peach, Spring Airlines, Lucky Air, 9 Air, Nok Air, Batik Air, Jeju Air, T'way Air, ZIPAIR, Singapore Airlines, Cathay Pacific, Malaysian Airlines, Thai Airways, Korean Air, ANA, JAL, Qantas, Virgin Australia, Bangkok Airways, Air New Zealand, Garuda Indonesia, Philippine Airlines, US-Bangla, Biman Bangladesh | | Americas | American Airlines, Delta, United, Southwest, JetBlue, Alaska Airlines, Hawaiian Airlines, Sun Country, Frontier, Volaris, VivaAerobus, Allegiant, Avelo, Breeze, Flair, GOL, Azul, JetSmart, Flybondi, Porter, WestJet, LATAM, Copa, Avianca, Air Canada, Arajet, Wingo, Sky Airline | | Aggregator | Kiwi.com (virtual interlining + LCC fallback) |
Also Available As
- JavaScript/TypeScript SDK + CLI:
npm install letsfg— npm - Python SDK + CLI:
pip install letsfg— PyPI - Try without installing: Message us on Messenger
- GitHub: LetsFG/LetsFG
⭐ Star the repo — we appreciate the support.
License
MIT
