Home - MikkoParkkola/trvl GitHub Wiki
trvl
Tell your AI: "I've got €300 and a free weekend, surprise me." Get back a real trip.
trvl is a travel agent that lives inside your AI assistant. Ask in plain English and it searches flight and hotel sources, 22 European train/bus/ferry providers, airport transfers, and optional rental cars. Then it normalizes currencies, includes known bag costs and loyalty benefits, and compares the usable options. For stays, it starts from the requested room/apartment need and keeps unverified lead-in prices out of final recommendations.
One Go binary. No personal API keys for default search. Works with Claude, Cursor, Windsurf, Codex, and other MCP clients.
You: I've got €300 and a free weekend. Surprise me.
trvl: Dubrovnik. Ryanair HEL->DBV Fri 14:25, nonstop, €167 round trip.
Old Town Studios, 4.6 stars, €42/night x 2 = €84.
26°C and sunny. Total €251, which is €49 under budget.
(Flew you out Friday instead of Saturday: -€48. Split the
airlines, Ryanair out and easyJet back: -€31.)
That is an illustrative response shape. Prices and availability are examples; a live search supplies the evidence used for a real recommendation.
Why people keep it installed
- It sees combinations one-site agents can't. Ryanair, easyJet, Wizz, Lufthansa, your award program, and hotel points searched in parallel, with the winning combination surfaced instead of the first result that loads.
- It tells the truth about price. A "€39" fare means nothing until you add the €35 checked bag. For accommodation, a property-level lead-in price is only a candidate until a room-level offer matches the requested occupancy, amenities, refundability, and currency.
- It refuses to make things up. A provider that times out is reported as "timed out," never as a silent "no flights found." There is a render guard built specifically to stop that lie.
- It runs where you want. Local stdio for privacy, or a secure remote mode with OAuth 2.1 read/write scopes when you want to host it.
At a glance
| Flight integrations | 10: Google Flights, Kiwi, and Skiplagged in the default merge; AFKLM plus Ryanair, Wizz Air, Transavia, easyJet, Vueling, and Norwegian as solo or opt-in paths |
| Hotel sources | 6 (Google Hotels, Booking.com, Airbnb, Trivago, Hostelworld, HomeToGo) |
| Transport providers | 22 train/bus/ferry providers, plus airport-transfer estimates and optional Skyscanner Car Hire: 24 overall |
| Travel-hack detectors | 36 (hidden city, throwaway ticketing, positioning, split ticketing, error fares, and more) |
| Interface | 1 smart MCP tool (+ 66 compatibility aliases) and a 57-command CLI |
| API keys | no personal keys required for default search; optional integrations document their credentials |
| Protocol / License | MCP 2026-07-28 and 2025-11-25 · PolyForm Noncommercial 1.0 |
Current release: v1.27.0
v1.27.0 was published on 2026-10-10.
- Partial results say so. When some providers fail, flight results,
trvl find, the flight table and the cabin comparison name each failed provider and why, and say "Cheapest found" rather than implying the whole market was searched. - Prices stay in their own currency when a rate is missing. Trip plans no longer label an unconverted price with your currency; a total that would mix currencies is withheld and marked incomplete.
- Security. Go 1.26.9 and patched network libraries; the npm installer verifies the binary's checksum before installing it.
- Google refusals start a short cooldown shared by every trvl process instead of being retried.
Earlier releases are summarised in the changelog.
Privacy controls
Two settings keep trvl away from your browsers:
export TRVL_NO_BROWSER_COOKIES=1 # do not read or open your installed browsers
export TRVL_NO_TIER2_CDP=1 # do not start trvl's own headless browser
Protected hotel and rail sources rely on browser sessions, so disabling cookie access can materially reduce results. The headless fallback starts an installed Chrome, Brave, or Edge with an empty profile only when a challenge needs fresh cookies; it does not read your existing sessions, show a window, or take focus. Its visible-browser alternative is separate, provider-specific, and opt-in.
Upgrading from a release before v1.21: price watches move to transactional ~/.trvl/watch.db storage on first run. If you lowered TRVL_WATCH_MAX_POINTS_PER_WATCH, migration removes history above that limit. Run trvl watch migrate --dry-run before upgrading if you keep long watch histories.
Try it without installing anything
Want to feel it before you wire it up? Run trvl live in your browser and type a real trip.
When you're ready to put it in your own assistant:
brew install MikkoParkkola/tap/trvl
trvl mcp install # auto-detects Claude, Cursor, Windsurf, Codex, and more
Then ask your assistant anything about a trip. That's the whole setup.
Dig deeper
- Providers — every flight, hotel, ground, and car source, with live status
- Commands — the full 57-command CLI reference
- MCP Integration — wiring it into your assistant, plus secure remote mode
- GitHub repository — source, releases, issues