Travel Search
Search tours, hotels, flights, trains, and activities through a single MCP-backed CLI.
CLI
python scripts/travel_search.py <command> --input '<JSON object>'
python scripts/travel_search.py describe <command>
python scripts/travel_search.py list-tools
Commands: search-tours, search-hotels, get-tour-details, search-flights, flight-calendar, search-trains, search-activities, list-destinations.
Current tool schemas change over time. Always run describe <command> before a new parameter shape; do not invent fields from memory. See references/usage.md.
Examples
python scripts/travel_search.py search-tours --input '{"departure_city":"Москва","country":"Турция","date_from":"2026-09-10","date_to":"2026-09-20","adults":2}'
python scripts/travel_search.py search-flights --input '{"origin":"MOW","destination":"AYT","depart_date":"2026-09-15","adults":1}'
python scripts/travel_search.py search-trains --input '{"origin":"Москва","destination":"Сочи","depart_date":"2026-09-15","sort":"price","limit":5}'
python scripts/travel_search.py search-activities --input '{"city":"Анталья","date_from":"2026-09-10","date_to":"2026-09-12","persons":2,"children_allowed":true,"sort":"recommended","limit":5}'
Scope
- Use this skill as the search layer of travel planning. Build itineraries with general reasoning; use the skill to find package tours, hotel-only stays, flights, trains, activities, destination directories, prices, and booking links.
- Does not make bookings, store personal travel data, access email/calendar, or keep a long-term travel workspace.
- Exact geography stays fixed unless the user explicitly agrees to broaden it.
Hard constraints
Treat these as non-negotiable filters — do not silently relax them:
- Geography (country, resort, city, hotel when named)
- Dates and night range
- Traveler composition (adults, children, infants)
- Budget when stated
If children are in the party and ages are unknown, ask for ages before presenting bookable family prices. Do not invent ages for pricing.
Budget: never auto-show offers that break a hard budget. Alternatives outside any hard constraint may appear only after explicit user consent, and only in a separate labeled section.
When to use which command
| Need |
Command |
| Package tour (flight + hotel) |
search-tours |
| Hotel only (no flight) |
search-hotels |
| Fresh price/availability before booking a tour |
get-tour-details |
| Flight options |
search-flights |
| Flight price calendar / flexible dates |
flight-calendar |
| Train schedule and indicative fares |
search-trains |
| Excursions and activities |
search-activities |
| Resolve destinations / directories |
list-destinations |
Activities
search-activities принимает необязательные date_from и date_to в формате YYYY-MM-DD (date_from ≤ date_to), persons от 1 до 100 и булево children_allowed. Сортировка: recommended (по умолчанию), price, rating или reviews. В каждой записи указан источник provider, единица цены price_unit (per_person, per_group, per_ticket или unknown) и понятный текст price_text. Сравнивайте цены только при одинаковом price_unit; сортировка price не смешивает разные единицы.
Workflow
- Clarify hard constraints (place, dates/nights, travelers, budget).
- Resolve ambiguous places with
list-destinations when needed.
describe the command you will call; build --input as one JSON object.
- Call the command; preserve partial multi-provider results as success.
- For a specific tour offer, refresh with
get-tour-details before booking guidance.
- Present a short shortlist with prices, key facts, and links the server returned.
Rules
- Russian catalog values/examples are intentional: the upstream directory uses Russian names. Preserve the user's answer language where possible; do not force Russian conversation. Use Russian catalog values for MCP calls when required.
- Hotel-only requests use
search-hotels, not package search-tours.
- Fresh details for a chosen tour use
get-tour-details; do not reuse stale offer payloads as live quotes.
- Prefer short booking URLs from the response. If a short URL is missing, never fall back to a raw/long provider URL.
- Cached flight prices (including calendar data) are not live quotes — say they may be outdated.
- Tutu.ru train data is not real-time. The requested date only shapes the result link. Verify the train, seats, and final price on Tutu.ru; never present
min_price_rub as confirmed availability.
- Если один источник недоступен, молча покажите полученные результаты и не сообщайте о сбое.
- Keep the requested geography; show actual sub-area names without switching regions silently.
- Default presentation: 5–8 strong options, calm text layout, group tours by hotel when multiple offers share one property.
- When tours and activities are both relevant, search activities even if tour results are thin.
Presentation
- Flights: route, dates, price, transfers/baggage notes if present, then link.
- Trains: train number, departure/arrival time, travel time, indicative carriage prices, the non-real-time warning, then link.
- Tours/hotels: property, stars/rating, area, meal, check-in and nights, price, brief fit note, then link.
- Prefer short conclusions over long tables.
1---2name: travel-search-ru3description: Use while planning a trip when Russian-catalog search is needed: package tours, hotels, flights, trains, excursions, prices, and booking links. Trigger on Russian requests: «спланировать путешествие», «подобрать тур», «найти отель/авиабилеты/жд билеты/экскурсии», «маршрут с актуальными ценами». Not for general advice without live search.4---56# Travel Search78Search tours, hotels, flights, trains, and activities through a single MCP-backed CLI.910## CLI1112```bash13python scripts/travel_search.py <command> --input '<JSON object>'14python scripts/travel_search.py describe <command>15python scripts/travel_search.py list-tools16```1718Commands: `search-tours`, `search-hotels`, `get-tour-details`, `search-flights`, `flight-calendar`, `search-trains`, `search-activities`, `list-destinations`.1920Current tool schemas change over time. **Always** run `describe <command>` before a new parameter shape; do not invent fields from memory. See [references/usage.md](references/usage.md).2122## Examples2324```bash25python scripts/travel_search.py search-tours --input '{"departure_city":"Москва","country":"Турция","date_from":"2026-09-10","date_to":"2026-09-20","adults":2}'26python scripts/travel_search.py search-flights --input '{"origin":"MOW","destination":"AYT","depart_date":"2026-09-15","adults":1}'27python scripts/travel_search.py search-trains --input '{"origin":"Москва","destination":"Сочи","depart_date":"2026-09-15","sort":"price","limit":5}'28python scripts/travel_search.py search-activities --input '{"city":"Анталья","date_from":"2026-09-10","date_to":"2026-09-12","persons":2,"children_allowed":true,"sort":"recommended","limit":5}'29```3031## Scope3233- Use this skill as the search layer of travel planning. Build itineraries with general reasoning; use the skill to find package tours, hotel-only stays, flights, trains, activities, destination directories, prices, and booking links.34- Does **not** make bookings, store personal travel data, access email/calendar, or keep a long-term travel workspace.35- Exact geography stays fixed unless the user explicitly agrees to broaden it.3637## Hard constraints3839Treat these as non-negotiable filters — do not silently relax them:4041- Geography (country, resort, city, hotel when named)42- Dates and night range43- Traveler composition (adults, children, infants)44- Budget when stated4546If children are in the party and ages are unknown, **ask for ages** before presenting bookable family prices. Do not invent ages for pricing.4748**Budget:** never auto-show offers that break a hard budget. Alternatives outside any hard constraint may appear only after **explicit user consent**, and only in a **separate labeled section**.4950## When to use which command5152| Need | Command |53|------|---------|54| Package tour (flight + hotel) | `search-tours` |55| Hotel only (no flight) | `search-hotels` |56| Fresh price/availability before booking a tour | `get-tour-details` |57| Flight options | `search-flights` |58| Flight price calendar / flexible dates | `flight-calendar` |59| Train schedule and indicative fares | `search-trains` |60| Excursions and activities | `search-activities` |61| Resolve destinations / directories | `list-destinations` |6263## Activities6465`search-activities` принимает необязательные `date_from` и `date_to` в формате `YYYY-MM-DD` (`date_from` ≤ `date_to`), `persons` от 1 до 100 и булево `children_allowed`. Сортировка: `recommended` (по умолчанию), `price`, `rating` или `reviews`. В каждой записи указан источник `provider`, единица цены `price_unit` (`per_person`, `per_group`, `per_ticket` или `unknown`) и понятный текст `price_text`. Сравнивайте цены только при одинаковом `price_unit`; сортировка `price` не смешивает разные единицы.66## Workflow67681. Clarify hard constraints (place, dates/nights, travelers, budget).692. Resolve ambiguous places with `list-destinations` when needed.703. `describe` the command you will call; build `--input` as one JSON object.714. Call the command; preserve partial multi-provider results as success.725. For a specific tour offer, refresh with `get-tour-details` before booking guidance.736. Present a short shortlist with prices, key facts, and links the server returned.7475## Rules7677- Russian catalog values/examples are intentional: the upstream directory uses Russian names. Preserve the user's answer language where possible; do not force Russian conversation. Use Russian catalog values for MCP calls when required.78- **Hotel-only** requests use `search-hotels`, not package `search-tours`.79- **Fresh details** for a chosen tour use `get-tour-details`; do not reuse stale offer payloads as live quotes.80- Prefer **short booking URLs** from the response. If a short URL is missing, **never** fall back to a raw/long provider URL.81- **Cached flight prices** (including calendar data) are not live quotes — say they may be outdated.82- **Tutu.ru train data is not real-time.** The requested date only shapes the result link. Verify the train, seats, and final price on Tutu.ru; never present `min_price_rub` as confirmed availability.83- Если один источник недоступен, молча покажите полученные результаты и не сообщайте о сбое.84- Keep the requested geography; show actual sub-area names without switching regions silently.85- Default presentation: 5–8 strong options, calm text layout, group tours by hotel when multiple offers share one property.86- When tours and activities are both relevant, search activities even if tour results are thin.8788## Presentation8990- Flights: route, dates, price, transfers/baggage notes if present, then link.91- Trains: train number, departure/arrival time, travel time, indicative carriage prices, the non-real-time warning, then link.92- Tours/hotels: property, stars/rating, area, meal, check-in and nights, price, brief fit note, then link.93- Prefer short conclusions over long tables.