TravelGenie
README.md
# TravelGenie
Trip planner that coordinates flights, hotels, events, weather, currency, and traffic data through one request instead of ten browser tabs.




## What it does
Give it a prompt like:
> "Plan a trip to Banff, Alberta from Reston, Virginia, June 7-14, 2025. Budget $5000. We like hiking, museums, and dining."
Claude coordinates seven specialized servers to:
- Find flights and hotels within budget
- Pull weather forecasts for the trip dates
- Find local events matching the stated interests
- Convert currencies
- Check traffic and crowd patterns
- Build a day-by-day itinerary with a budget breakdown
## Architecture
Each server is a standalone [MCP](https://modelcontextprotocol.io/) server. Claude calls them in sequence, passing output from one into the next (geocode a location, then search flights/hotels near it, then check weather for those dates, etc.).
| Server | Job |
|--------|-----|
| Flight | Search and compare flights |
| Hotel | Search accommodations |
| Event | Find local events and activities |
| Geocoder | Address ↔ coordinates |
| Weather | Forecasts, current conditions |
| Finance | Currency conversion, market data |
| Traffic & Crowd | Real-time location analysis |
## Setup
```bash
git clone https://github.com/AjaykumarBalakannan/TravelGenie.git
cd TravelGenie
pip install -r requirements.txt
cp .env.example .env
# add your API keys to .env
```
You'll need:
- **SerpAPI** — flights, hotels, events. Free tier at [serpapi.com](https://serpapi.com/)
- **Anthropic** — Claude API key from [console.anthropic.com](https://console.anthropic.com/)
- **Slack** (optional) — only needed for the Slack bot
- Open-Meteo and OpenStreetMap require no key
## Running it
```bash
# Web UI
streamlit run streamlit_app.py
# Slack bot
python slack_bot.py
```
The web UI runs at `http://localhost:8501`.
### Calling it directly
```python
from claude_orchestrator import execute_tool
flights = execute_tool("search_flights",
departure_id="IAD",
arrival_id="YYC",
outbound_date="2025-06-07",
return_date="2025-06-14",
adults=2
)
weather = execute_tool("get_weather_forecast",
location="Banff, Alberta",
forecast_days=7
)
```
### Claude Desktop (MCP mode)
Add to `claude_desktop_config.json`:
```json
{
"mcpServers": {
"flight-search": {
"command": "uv",
"args": ["--directory", "/path/to/TravelGenie/servers/flight_server",
"run", "python", "flight_server.py"],
"env": {"SERPAPI_KEY": "your_key"}
}
}
}
```
Config location — macOS: `~/Library/Application Support/Claude/claude_desktop_config.json`, Windows: `%APPDATA%\Claude\claude_desktop_config.json`.
## Deployment
**Docker:**
```bash
docker build -t travelgenie .
docker run -d -p 8501:8501 --env-file .env travelgenie
```
**AWS (ECS Fargate + DynamoDB + Secrets Manager + CloudWatch):**
```bash
cd aws/cloudformation
aws cloudformation create-stack \
--stack-name travelgenie \
--template-body file://infrastructure.yaml \
--parameters file://parameters.json \
--capabilities CAPABILITY_NAMED_IAM
```
See `aws/Run.md` for the full setup. The `mock_application/` directory has load-test tooling comparing EC2 vs. ECS Fargate under concurrent load — see `documents/Travel_Genie_Report.pdf` for the writeup and results.
## Troubleshooting
- **Servers not responding** — check API keys in `.env`, confirm Python 3.12.1+
- **Import errors** — `pip install -r requirements.txt --upgrade`
- **Slack bot not connecting** — verify tokens, confirm Socket Mode is enabled, check bot has `chat:write` and `app_mentions:read` scopes
- **No search results** — try airport codes instead of city names; check SerpAPI quota; confirm dates are in the future
## Testing
```bash
python slack_bot.py --test
streamlit run streamlit_app.py
```
## License
MIT — see `LICENSE`.
## Author
Ajaykumar Balakannan — [github.com/AjaykumarBalakannan](https://github.com/AjaykumarBalakannan)
This server cannot be deployed
Maintenance
ActivityStale
ResponsivenessNo issues