LetsFG

Flight and hotel search with real bookings charged to a connected card, via LetsFG

Official · LetsFG TypeScript Remote (hosted) · Streamable HTTPLocal · stdio Maps and travel

55 popularity score ★ 2.2k ↓ 204/wk

Connect your client

Remote (hosted)

Add in one click

Opens the app, which asks before it adds the server.

Or add it by command or config

Claude Codeterminal
claude mcp add --transport http letsfg https://letsfg.co/developers/api/mcp
Claude (desktop and web)Settings → Connectors → Add custom connector
https://letsfg.co/developers/api/mcp
ChatGPTSettings → Apps → Advanced → Developer mode, then Create app
https://letsfg.co/developers/api/mcp
Cursor.cursor/mcp.json in the project root
{
  "mcpServers": {
    "letsfg": { "url": "https://letsfg.co/developers/api/mcp" }
  }
}
windsurf~/.codeium/windsurf/mcp_config.json
{
  "mcpServers": {
    "letsfg": { "serverUrl": "https://letsfg.co/developers/api/mcp" }
  }
}
Local (npm)

Add in one click

Opens the app, which asks before it adds the server. Then replace each <NAME> in its settings with your value.

Or add it by command or config

It needs LETSFG_BEARER_TOKEN. Replace each <NAME> with your value.

Claude CodeTerminal
claude mcp add letsfg -e LETSFG_BEARER_TOKEN=<LETSFG_BEARER_TOKEN> -- npx -y letsfg-mcp
Claude Desktopclaude_desktop_config.json
{
  "mcpServers": {
    "letsfg": {
      "command": "npx",
      "args": [
        "-y",
        "letsfg-mcp"
      ],
      "env": {
        "LETSFG_BEARER_TOKEN": "<LETSFG_BEARER_TOKEN>"
      }
    }
  }
}
Cursor~/.cursor/mcp.json
{
  "mcpServers": {
    "letsfg": {
      "command": "npx",
      "args": [
        "-y",
        "letsfg-mcp"
      ],
      "env": {
        "LETSFG_BEARER_TOKEN": "<LETSFG_BEARER_TOKEN>"
      }
    }
  }
}
VS Code.vscode/mcp.json
{
  "servers": {
    "letsfg": {
      "type": "stdio",
      "command": "npx",
      "args": [
        "-y",
        "letsfg-mcp"
      ],
      "env": {
        "LETSFG_BEARER_TOKEN": "<LETSFG_BEARER_TOKEN>"
      }
    }
  }
}
Codex~/.codex/config.toml
[mcp_servers.letsfg]
command = "npx"
args = ["-y", "letsfg-mcp"]

[mcp_servers.letsfg.env]
LETSFG_BEARER_TOKEN = "<LETSFG_BEARER_TOKEN>"
Gemini CLITerminal
gemini mcp add --scope user -e LETSFG_BEARER_TOKEN=<LETSFG_BEARER_TOKEN> letsfg npx -- -y letsfg-mcp

Settings 5

LETSFG_BEARER_TOKEN Required: Card-backed token from the connect flow at letsfg.co/connect (or `letsfg auth`). LETSFG_API_KEY, a paid Developer API key, can be used instead.
LETSFG_API_KEY Optional: Developer API key (letsfg_...); needed for resolve_location, get_agent_profile and connect_payment.
LETSFG_USER_AGENT Optional: Overrides the User-Agent sent to letsfg.co, for anti-bot 403s from VPS hosts.
LETSFG_WAIT_FOR_SPLIT Optional: Set to 0 to skip waiting up to 90 s for late split-ticket offers.
LETSFG_BASE_URL Optional: API base address; https://letsfg.co by default.

What it does

LetsFG is a travel search and booking service. Its MCP server lets an assistant search flights across many airlines and booking sites, look up bookable hotel rates, and then actually book: a flight booking holds the fare on the user's card, a LetsFG booking agent buys the ticket, and the hold is captured only once an airline PNR exists. Hotel bookings work the same way, captured once the hotel confirms. Searching runs on LetsFG's own servers; the local package is a thin stdio client that forwards every call to letsfg.co over HTTPS.

There are two ways to use it. The hosted endpoint signs in with OAuth through a one-tap approval page at letsfg.co/connect, and a card is requested at the first booking (a zero-amount setup through Revolut). The npm package letsfg-mcp runs on your machine and needs that same card-backed token in LETSFG_BEARER_TOKEN, which the Python CLI's `letsfg auth` command can obtain, or a key for LetsFG's separate paid Developer API in LETSFG_API_KEY.

The npm build 2026.5.78 registers 14 tools, more than the README tables show: besides flight and hotel search and booking it has `answer_booking_question`, for when a booking agent pauses mid-checkout at a seat map, a priced extra or a moved fare and waits for the traveller's choice, plus `authenticate` and `load_resources` helpers. Flight search returns 10 offers by default (`max_results`), priced in EUR unless `currency` is set; hotel search returns up to 40 hotels in USD by default. Long-haul searches may also return split-ticket itineraries: two separate tickets with an unprotected self-transfer, flagged on the offer.

What it needs

To run it yourselfNode.js 18+

Node.js 18 or later for the npm package (npx). A LetsFG token from the connect flow at letsfg.co/connect in LETSFG_BEARER_TOKEN (obtainable with `letsfg auth` from the Python package letsfg, installed with pip), or a paid Developer API key in LETSFG_API_KEY. A card, Revolut Pay or Google Pay saved through the connect page before booking, and before any hotel call, including hotel search. The hosted endpoint needs only the OAuth approval.

Limits

With the bearer token, the stdio package's `resolve_location`, `get_agent_profile` and `connect_payment` return an error; they need a Developer API key, so pass IATA codes directly. `book_flight` takes one traveller per call and refuses more. A flight booking takes about 4 to 11 minutes to reach a PNR. Hotel search is free for 1,000 calls since the last hotel booking, then $5 per 1,000 from a prepaid balance. Hotel booking needs letsfg-mcp 2026.5.77 or later. `cancel_hotel_booking` refuses cancellations that cost money. From VPS addresses letsfg.co can return an anti-bot 403 (LETSFG_USER_AGENT overrides the User-Agent). Split-ticket offers have no protected connection.

Who it suits

Suits someone who wants an assistant to find and actually book flights or hotels and is fine with a card saved with LetsFG, because bookings place real holds and charges. The hosted endpoint is the easier choice for Claude, ChatGPT, Cursor or Windsurf: OAuth, nothing to install. The npm package is for clients without remote MCP support, and needs a token copied into its config. Not a fit for price lookups with no card at all: hotel calls refuse without a payment method. High-volume commercial integrations are pointed by its makers to the separate paid Developer API instead.

Tools 14

search_flights
Searches flights for a route and date and returns priced offers, including split-ticket ones.
resolve_location
Turns a city name into IATA codes; needs a Developer API key.
book_flight
Starts a real booking for one traveller, holding the fare on the connected card.
get_flight_booking
Checks a started flight booking until it completes with a PNR, fails, or needs attention.
answer_booking_question
Sends the traveller's choice when a paused booking waits on seats, extras or a changed fare.
resolve_hotel_city
Turns a place name into the supplier's city id for hotel search.
search_hotels
Searches bookable hotel rates in a city for given dates and guests.
book_hotel
Starts a hotel booking that holds the price and returns a job id.
get_hotel_booking
Fetches the outcome of a hotel booking job.
cancel_hotel_booking
Cancels this account's hotel booking when it costs nothing, refunding the guest.
authenticate
Returns the current instructions and link for connecting a card and getting a token.
connect_payment
Makes a link for saving a payment method on a Developer API account.
get_agent_profile
Shows a Developer API account's balance and usage.
load_resources
Returns LetsFG's workflow guide for clients without MCP resource support.

Similar servers