HotelHive is a conversational hotel search assistant powered by LangGraph, LangChain, and an MCP tool server. It grounds responses in your local Excel datasets and supports follow-up questions with conversational memory.
Features
- Conversational agent with memory (multi-turn chat)
- MCP tool
hotel_listbacked by your Excel data - Schema-free prompting: the assistant infers fields directly from the records
- Flexible queries by city/county/price/amenities/etc.
- Lists all matching hotels with optional pagination
Project Structure
client.py: Runs the chat client, connects to the MCP server via stdio, loads tools, and maintains conversation history.server/hotelinfo_server.py: FastMCP server exposing thehotel_listtool, reading data fromdata/hotels.xlsx.agent/hotel_finder.py: Prompt + LLM runnable used by the server tool to generate grounded answers.data/: Excel files (hotels.xlsx, etc.) used as the knowledge source.type/: Pydantic models (not required in current schema-free flow).requirements.txt: Python dependencies.
Prerequisites
- Python 3.12+
- A Google Generative AI API key (
API_KEY) and model name (MODEL, e.g.,gemini-2.0-flash).
Setup
- Create and activate a virtual environment:
python3 -m venv .venvsource .venv/bin/activate
- Install dependencies:
pip install -r requirements.txt
- Create a
.envfile in the project root with:API_KEY=your_google_genai_keyMODEL=gemini-2.0-flash
- Ensure your data file exists:
data/hotels.xlsx
Run
- From the project root, activate the venv and run:
python3 client.py
- Interact in the console (type
exitto quit). Examples:suggest hotels under 150 in chicagolist all hotels in miamishare details for hotel_85
Notes
- The assistant answers using only the provided Excel data; if a requested field doesn’t exist, it will say it’s not available.
- Large result sets will paginate (first 50 shown) and continue when you confirm.
Troubleshooting
- If you see import/module errors, ensure the client launches the server with
python -m server.hotelinfo_server(already configured inclient.py). - If responses seem off, confirm your
.envvariables and thatdata/hotels.xlsxcontains the expected columns and values.
License
- MIT