Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions .mcp.json
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,10 @@
"type": "http",
"url": "https://mcp.ferryhopper.com/mcp"
},
"gondola": {
"type": "http",
"url": "https://mcp.gondola.ai/mcp"
},
"liteapi": {
"type": "http",
"url": "https://mcp.liteapi.travel/api/mcp",
Expand Down
6 changes: 3 additions & 3 deletions CLAUDE.md
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@ You are a travel hacking agent. You don't just answer questions. You proactively

**Show your math.** Every recommendation should include the cents-per-point value so the user can see if a redemption is good, mediocre, or exceptional.

**Degrade gracefully when API keys are missing.** Never ask the user "do you have this key set?" as a yes/no question before trying the tool. Just try it. If a tool errors with a missing-credentials message, catch it and fall through to whatever's available. The free MCPs (Skiplagged, Kiwi, Trivago, Ferryhopper, Airbnb) work without any keys at all. Cash flight search and basic hotel search are always possible. Award search needs Seats.aero. Auto-pulling balances needs AwardWallet. The user already knows what keys they did or didn't set; don't make them recite it.
**Degrade gracefully when API keys are missing.** Never ask the user "do you have this key set?" as a yes/no question before trying the tool. Just try it. If a tool errors with a missing-credentials message, catch it and fall through to whatever's available. The free MCPs (Skiplagged, Kiwi, Trivago, Ferryhopper, Gondola, Airbnb) work without any keys at all. Cash flight search and basic hotel search are always possible. Award search needs Seats.aero. Auto-pulling balances needs AwardWallet. The user already knows what keys they did or didn't set; don't make them recite it.

**After the answer, suggest one relevant upgrade if it would have helped.** At the bottom of your output, in a single line, mention the one missing key that would have meaningfully improved THIS specific search. Example: a cash flight search with no Duffel key still returns Skiplagged results, but Duffel would give cleaner per-fare-class GDS pricing — say so in one sentence at the end. Only mention keys that are relevant to the current request. Don't bring up Seats.aero on a hotel-only search. Don't list 5 missing keys. Don't suggest anything if the search worked great with what was available.

Expand All @@ -47,7 +47,7 @@ You are a travel hacking agent. You don't just answer questions. You proactively
This toolkit ships skills (in `skills/`) and MCP servers. Skill names and descriptions are auto-loaded so you can pick the right one for a task. The list below is orientation only.

### MCP Servers
- **Always available, no keys needed:** Skiplagged, Kiwi.com, Trivago, Ferryhopper, Airbnb. Cash flight + hotel + ferry + rental search work out of the box.
- **Always available, no keys needed:** Skiplagged, Kiwi.com, Trivago, Ferryhopper, Gondola, Airbnb. Cash flight + hotel + ferry + rental search work out of the box.
- **Requires `LITEAPI_API_KEY`:** LiteAPI for live hotel rates. Skip this MCP if the key isn't set; the others cover hotel discovery fine.

### Skills (load on demand)
Expand Down Expand Up @@ -173,7 +173,7 @@ If you change skills, CLAUDE.md, or MCP config, run `bash scripts/smoke-test.sh`
- Always search for 2+ seats when booking for multiple people. Award availability for 1 seat doesn't guarantee 2.
- RapidAPI free tier is 100 requests/month. Use sparingly. Prefer SerpAPI.
- Atlas Obscura and Airbnb scrape websites. Be respectful with request volume.
- Skiplagged, Kiwi.com, Trivago, and Ferryhopper need no setup. They just work.
- Skiplagged, Kiwi.com, Trivago, Ferryhopper, and Gondola need no setup. They just work.
- Ferryhopper focuses on European/Mediterranean routes. Great for Greek islands, Croatia, Scandinavia.
- For tool failure recovery, load the `fallback-and-resilience` skill.
- For institutional knowledge from past searches (Seats.aero workflow, Southwest specifics, Companion Pass math, source accuracy hierarchy, small-market caveats, Duffel limitations), load the `lessons-learned` skill.
Expand Down
7 changes: 4 additions & 3 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ Inside Claude Code, run:
/plugin install travel-hacker@borski
```

Done. 42 skills, 6 MCP servers (5 free + LiteAPI which needs a key), and the `travel-hacker` subagent are installed. Run `claude` from anywhere and ask it to plan a trip.
Done. 42 skills, 7 MCP servers (6 free + LiteAPI which needs a key), and the `travel-hacker` subagent are installed. Run `claude` from anywhere and ask it to plan a trip.

To verify the install, run `/travel-hacker:getting-started` inside Claude Code. It tells you which API keys are configured and points at the local setup script for the missing ones. Or in your shell: `claude plugin list | grep travel-hacker` should show the plugin.

Expand All @@ -45,7 +45,7 @@ Claude Desktop's chat UI doesn't support the plugin format yet, so use Cowork in

### Configure API keys

The 5 free MCP servers (Skiplagged, Kiwi, Trivago, Ferryhopper, Airbnb) work immediately with zero keys. Cash flight and hotel search work out of the box.
The 6 free MCP servers (Skiplagged, Kiwi, Trivago, Ferryhopper, Gondola, Airbnb) work immediately with zero keys. Cash flight and hotel search work out of the box.

To unlock award search and the rest of the toolkit, you need API keys set as environment variables in your shell. Run the local setup script:

Expand Down Expand Up @@ -148,6 +148,7 @@ source .env && codex
| [Kiwi.com](https://www.kiwi.com) | Flights with virtual interlining (creative cross-airline routing) | None (free) |
| [Trivago](https://mcp.trivago.com/docs) | Hotel metasearch across booking sites | None (free) |
| [Ferryhopper](https://ferryhopper.github.io/fh-mcp/) | Ferry routes across 33 countries, 190+ operators | None (free) |
| [Gondola](https://gondola.ai/mcp) | Hotels with side-by-side cash vs points pricing across Marriott, Hilton, Hyatt, IHG, Accor, Wyndham and more, plus rental cars, rate alerts, loyalty optimization, and direct booking that earns points and status nights. | None (free) |
| [Airbnb](https://github.com/openbnb-org/mcp-server-airbnb) | Search Airbnb listings, property details, pricing. Includes geocoding fix, property type filter, and DISABLE_GEOCODING opt-out. | None (free) |
| [LiteAPI](https://mcp.liteapi.travel) | Hotel search with live rates and booking | [LiteAPI](https://liteapi.travel) |

Expand Down Expand Up @@ -354,7 +355,7 @@ MCP (Model Context Protocol) servers give your AI real-time tools it can call di
- `.mcp.json` for Claude Code (auto-discovered from the repo root)
- `plugins/travel-hacking-toolkit/.mcp.json` for Codex plugin installs

Skiplagged, Kiwi.com, Trivago, Ferryhopper, and Airbnb need no setup at all. LiteAPI is also a remote server but needs an API key configured in your settings.
Skiplagged, Kiwi.com, Trivago, Ferryhopper, Gondola, and Airbnb need no setup at all. LiteAPI is also a remote server but needs an API key configured in your settings.

**Why Codex needs a plugin:** OpenCode and Claude Code both auto-discover MCP servers from a repo-local config file. Codex doesn't. It only loads MCP servers from `~/.codex/config.toml` or from an installed plugin. The toolkit ships a Codex plugin (under `plugins/travel-hacking-toolkit/`) that bundles the MCP config so Codex users get the same out-of-the-box experience as the other two tools. `setup.sh` wires this up automatically when you select the Codex option.

Expand Down
6 changes: 3 additions & 3 deletions agents/travel-hacker.md
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@ You are a travel hacking agent. You don't just answer questions. You proactively

**Show your math.** Every recommendation should include the cents-per-point value so the user can see if a redemption is good, mediocre, or exceptional.

**Degrade gracefully when API keys are missing.** Never ask the user "do you have this key set?" as a yes/no question before trying the tool. Just try it. If a tool errors with a missing-credentials message, catch it and fall through to whatever's available. The free MCPs (Skiplagged, Kiwi, Trivago, Ferryhopper, Airbnb) work without any keys at all. Cash flight search and basic hotel search are always possible. Award search needs Seats.aero. Auto-pulling balances needs AwardWallet. The user already knows what keys they did or didn't set; don't make them recite it.
**Degrade gracefully when API keys are missing.** Never ask the user "do you have this key set?" as a yes/no question before trying the tool. Just try it. If a tool errors with a missing-credentials message, catch it and fall through to whatever's available. The free MCPs (Skiplagged, Kiwi, Trivago, Ferryhopper, Gondola, Airbnb) work without any keys at all. Cash flight search and basic hotel search are always possible. Award search needs Seats.aero. Auto-pulling balances needs AwardWallet. The user already knows what keys they did or didn't set; don't make them recite it.

**After the answer, suggest one relevant upgrade if it would have helped.** At the bottom of your output, in a single line, mention the one missing key that would have meaningfully improved THIS specific search. Example: a cash flight search with no Duffel key still returns Skiplagged results, but Duffel would give cleaner per-fare-class GDS pricing — say so in one sentence at the end. Only mention keys that are relevant to the current request. Don't bring up Seats.aero on a hotel-only search. Don't list 5 missing keys. Don't suggest anything if the search worked great with what was available.

Expand All @@ -47,7 +47,7 @@ You are a travel hacking agent. You don't just answer questions. You proactively
This toolkit ships skills (in `skills/`) and MCP servers. Skill names and descriptions are auto-loaded so you can pick the right one for a task. The list below is orientation only.

### MCP Servers
- **Always available, no keys needed:** Skiplagged, Kiwi.com, Trivago, Ferryhopper, Airbnb. Cash flight + hotel + ferry + rental search work out of the box.
- **Always available, no keys needed:** Skiplagged, Kiwi.com, Trivago, Ferryhopper, Gondola, Airbnb. Cash flight + hotel + ferry + rental search work out of the box.
- **Requires `LITEAPI_API_KEY`:** LiteAPI for live hotel rates. Skip this MCP if the key isn't set; the others cover hotel discovery fine.

### Skills (load on demand)
Expand Down Expand Up @@ -173,7 +173,7 @@ If you change skills, CLAUDE.md, or MCP config, run `bash scripts/smoke-test.sh`
- Always search for 2+ seats when booking for multiple people. Award availability for 1 seat doesn't guarantee 2.
- RapidAPI free tier is 100 requests/month. Use sparingly. Prefer SerpAPI.
- Atlas Obscura and Airbnb scrape websites. Be respectful with request volume.
- Skiplagged, Kiwi.com, Trivago, and Ferryhopper need no setup. They just work.
- Skiplagged, Kiwi.com, Trivago, Ferryhopper, and Gondola need no setup. They just work.
- Ferryhopper focuses on European/Mediterranean routes. Great for Greek islands, Croatia, Scandinavia.
- For tool failure recovery, load the `fallback-and-resilience` skill.
- For institutional knowledge from past searches (Seats.aero workflow, Southwest specifics, Companion Pass math, source accuracy hierarchy, small-market caveats, Duffel limitations), load the `lessons-learned` skill.
Expand Down
5 changes: 5 additions & 0 deletions opencode.json
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,11 @@
"url": "https://mcp.ferryhopper.com/mcp",
"enabled": true
},
"gondola": {
"type": "remote",
"url": "https://mcp.gondola.ai/mcp",
"enabled": true
},
"liteapi": {
"type": "remote",
"url": "https://mcp.liteapi.travel/api/mcp",
Expand Down
4 changes: 4 additions & 0 deletions plugins/travel-hacking-toolkit/.mcp.json
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,10 @@
"type": "http",
"url": "https://mcp.ferryhopper.com/mcp"
},
"gondola": {
"type": "http",
"url": "https://mcp.gondola.ai/mcp"
},
"liteapi": {
"type": "http",
"url": "https://mcp.liteapi.travel/api/mcp",
Expand Down