travel_mcp
# Comprehensive Travel & Hospitality MCP Server (`hotel_search`)
A unified **FastMCP** server providing parallel hotel accommodations, gourmet dining and cafe searches (Tabelog Japan), multi-modal transit & routing, and verified traveler/diner reviews across global and regional platforms.
## Key Capabilities
### π¨ Accommodations & Hotels
- π **Parallel Multi-Provider Search**: Query Agoda, Booking.com, and Hotels.com simultaneously with `search_hotels(..., provider="all")`.
- π **Silent Chrome Authentication**: Seamlessly loads user sessions for Agoda (VIP tier), Booking.com (Genius tier), and Hotels.com (OneKey rewards).
- βοΈ **Cross-Platform Price Comparison**: Compare live rates across all three platforms in parallel using `compare_hotel_prices(...)` to find the cheapest provider.
- ποΈ **Room Grid & Rate Packages**: Inspect bed configurations, room sizes, breakfast inclusions, cancellation policies, and rates.
### π½οΈ Dining, Restaurants & Cafes (Tabelog Japan)
- π£ **Gourmet Search & Ranking**: Search restaurants with Bayesian score curves (`>=3.50` top 3%, `>=4.00` legendary/Michelin tier) via `search_restaurants(...)` / `search_tabelog(...)`.
- π **Award Winner Highlights**: Filter and highlight *The Tabelog Award* winners (Gold, Silver, Bronze) and *Tabelog 100 Famous Stores* (*Hyakumeiten*).
- π± **Budget & Amenities**: Separate lunch vs. dinner budgets, multilingual menus, private dining rooms, and barrier-free access.
- π
**Live Vacancy Calendar**: Check open reservation dates via `check_restaurant_reservation(...)`.
### π§ Multi-Modal Transit & Navigation
- πΆππ **Directions & Fares**: Calculate walking routes, public transit (subway/bus line names and transfers), and taxi fares via `get_transit_and_directions(...)`.
### β Verified Place Reviews
- π¬ **Cross-Platform Reviews**: Retrieve review scores, star distributions, and traveler feedback from Google Reviews, Kakao Maps, and Tabelog via `get_place_reviews(...)`.
---
## Project Structure
```text
hotels-mcp/
βββ pyproject.toml # PEP 517/518 build config, dependencies & CLI entrypoints
βββ README.md # Documentation & usage guide
βββ AGENTS.md # Agent guidelines & GitNexus code intelligence
βββ CLAUDE.md # Claude developer instructions
βββ tests/
β βββ __init__.py
β βββ test_server.py # 17 live multi-provider integration test suites
βββ src/
βββ travel_mcp/
βββ __init__.py # Package root
βββ __main__.py # CLI entrypoint (`python -m travel_mcp`)
βββ server.py # FastMCP server instance, tools, prompts & resources
βββ models.py # Normalized Pydantic DTOs for travel, dining, and transit
βββ providers/
βββ __init__.py # Unified provider factory & registry
βββ accommodations/ # Hotel accommodation providers
β βββ __init__.py
β βββ base.py # HotelProvider ABC & session loader
β βββ agoda.py # Agoda accommodation provider
β βββ booking.py # Booking.com accommodation provider
β βββ hotels_com.py # Hotels.com accommodation provider
βββ dining/ # Restaurant & cafe providers
β βββ __init__.py # Dining provider factory
β βββ base.py # DiningProvider ABC
β βββ tabelog.py # Tabelog client & vacancy parser
βββ routes/ # Multi-modal routing providers
β βββ __init__.py # Route provider factory
β βββ base.py # RouteProvider ABC
β βββ kakao.py # Kakao Maps routing provider
βββ reviews/ # Unified place review providers
βββ __init__.py # Review provider registry
βββ base.py # ReviewProvider ABC
βββ agoda.py # Agoda reviews provider
βββ google.py # Google Reviews provider
βββ kakao.py # Kakao Place reviews provider
βββ tabelog.py # Tabelog reviews provider
```
---
## Installation & Setup
```bash
cd /Users/richardluo/Developer/hotels-mcp
uv sync
```
### Run Tests:
```bash
uv run python tests/test_server.py
```
### Run Server:
```bash
uv run travel-mcp
# or
uv run python -m travel_mcp
```
---
## Antigravity / MCP Configuration
Add to `~/.gemini/config/mcp_config.json` or your workspace `.agents/mcp_config.json`:
```json
{
"mcpServers": {
"travel_mcp": {
"command": "uv",
"args": [
"--directory",
"/Users/richardluo/Developer/hotels-mcp",
"run",
"python",
"-m",
"travel_mcp"
],
"env": {
"PYTHONUNBUFFERED": "1"
}
}
}
}
```
---
## Available Tools
### π½οΈ Dining, Restaurants & Cafes
| Tool | Parameters | Description |
|---|---|---|
| `search_restaurants` | `query, prefecture=None, area=None, genre=None, sort_by='rating', meal_type='all', provider='tabelog', page=1, limit=10` | Searches top-rated restaurants across Japan on Tabelog (tabelog.com). Includes Bayesian scores (3.5+ top 3%, 4.0+ legendary), Award winners (Gold/Silver/Bronze), Hyakumeiten (100 Famous Stores), lunch/dinner budgets, and booking status. |
| `get_restaurant_details` | `restaurant_id_or_url, provider='tabelog'` | Fetches complete restaurant profile, award history, exact address, GPS coordinates, phone, budget, amenities, and high-res food photos. |
| `suggest_dining` | `query, provider='tabelog', limit=5` | Autocompletes search keywords for restaurants, stations, areas, and food genres. |
| `check_restaurant_reservation` | `restaurant_id, provider='tabelog'` | Checks live upcoming online booking vacancy calendar and available reservation dates for a restaurant. |
| `search_tabelog` | *(same as search_restaurants)* | Direct shortcut to Tabelog restaurant search. |
| `get_tabelog_restaurant_details` | *(same as get_restaurant_details)* | Direct shortcut to Tabelog restaurant profile. |
| `suggest_tabelog` | *(same as suggest_dining)* | Direct shortcut to Tabelog autocomplete. |
| `check_tabelog_reservation` | *(same as check_restaurant_reservation)* | Direct shortcut to Tabelog vacancy calendar. |
### π§ Multi-Modal Transit & Routing
| Tool | Parameters | Description |
|---|---|---|
| `get_transit_and_directions` | `origin, destination, travel_mode='all', country='KR', provider=None` | Calculates walking steps, public transit (subway/bus lines, transfers, fares), and driving taxi fares between any two places (hotels, restaurants, cafes, stations, airports). |
| `get_hotel_distance_and_transit` | `origin, destination, travel_mode='all', country='KR', provider=None` | Alias for `get_transit_and_directions`. |
### β Place & Venue Reviews
| Tool | Parameters | Description |
|---|---|---|
| `get_place_reviews` | `place_or_hotel, provider='kakao', page=1, page_size=10` | Fetches verified user reviews, star distributions, and reviewer feedback from Kakao Maps, Google Reviews (`provider='google'`), or Tabelog (`provider='tabelog'`). |
### π¨ Accommodations & Hotels
| Tool | Parameters | Description |
|---|---|---|
| `search_hotels` | `query, check_in, check_out, adults=2, children=0, rooms=1, min_price=None, max_price=None, provider='all', logged_in=True, limit=10` | Searches Agoda, Booking.com, and/or Hotels.com in parallel with date, occupancy, and price filters. |
| `compare_hotel_prices` | `hotel_name, check_in, check_out, adults=2, rooms=1` | Runs a 3-way parallel price check across Agoda, Booking.com, and Hotels.com to find the cheapest rate. |
| `suggest_locations` | `query, provider='all', limit=5` | Autocompletes destination cities, districts, landmarks, and properties across Agoda, Booking.com, and Hotels.com. |
| `get_property_details` | `hotel_id, provider='agoda', check_in=None, check_out=None, adults=2, children=0, rooms=1, logged_in=True` | Fetches property overview, address, amenities, and policies. |
| `get_room_grid` | `hotel_id, provider='agoda', check_in="", check_out="", adults=2, children=0, rooms=1, logged_in=True` | Inspects room types, bed setups, breakfast inclusion, cancellation policies, and rates. |
| `get_hotel_reviews` | `hotel_id, provider='agoda', page=1, page_size=10` | Fetches verified traveler reviews and category scores. |
| `get_hotel_faq` | `hotel_id, provider='agoda'` | Retrieves official verified hotel FAQs. |
| `get_login_status` | `provider='all'` | Checks active authentication for Agoda (VIP), Booking.com (Genius), and Hotels.com (OneKey). |
| `interactive_login` | `provider='agoda'` | Opens Chrome to sign-in portal if session expired (supports `'agoda'`, `'booking.com'`, or `'hotels.com'`). |
---
## MCP Prompts & Resources (MCP 2.0)
### Prompts
- `plan_trip_itinerary(destination, check_in, check_out, adults, dining_preferences)`: End-to-end trip planning combining hotels, dining recommendations, and transit routes.
- `search_japan_dining(query, prefecture, genre, meal_type)`: Discover top-rated dining spots and award winners in Japan.
- `compare_hotel_deals(hotel_name, check_in, check_out, adults, rooms)`: 3-way price comparison and perk evaluation.
- `search_destination_hotels(destination, check_in, check_out, adults, rooms)`: Search and rank accommodations.
### Resources
- `travel://providers` (and `hotels://providers`): Registry of accommodation, dining, routing, and review providers.
- `travel://capabilities`: Full capability breakdown across all travel domains.
- `travel://status` (and `hotels://status`): Live session & cookie health across all providers.
TDQS
Scored across 20 tools
Several tools are direct aliases (e.g., search_restaurants vs search_tabelog, get_restaurant_details vs get_tabelog_restaurant_details, suggest_dining vs suggest_tabelog, check_restaurant_reservation vs check_tabelog_reservation, get_transit_and_directions vs get_hotel_distance_and_transit) that create redundancy and potential misselection. Though descriptions clarify they are equivalent, the presence of both forms is confusing.
Naming is inconsistent: most tools follow a verb_noun pattern (get_, search_, suggest_), but deviations like 'search_tabelog', 'get_tabelog_restaurant_details', and 'get_hotel_distance_and_transit' break the pattern. Tools with provider-specific shortcuts don't align with the general naming convention, making the set feel ad hoc.
At 20 tools, the server borders on heavy. The count is inflated by multiple alias/shortcut tools that duplicate existing functionality (e.g., search_restaurants vs search_tabelog). The effective unique tool count is lower, but the redundancy suggests the set could be streamlined.
The server covers discovery and research well: hotel search, price comparison, details, rooms, reviews, FAQs, restaurant search/details, reservation availability, transit, and place reviews. However, it lacks actual booking or reservation creation (only checks availability), and no itinerary management or broader travel lifecycle features, leaving notable gaps for end-to-end travel planning.