TravelGenie
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 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
git clone https://github.com/AjaykumarBalakannan/TravelGenie.git
cd TravelGenie
pip install -r requirements.txt
cp .env.example .env
# add your API keys to .envYou'll need:
SerpAPI — flights, hotels, events. Free tier at serpapi.com
Anthropic — Claude API key from console.anthropic.com
Slack (optional) — only needed for the Slack bot
Open-Meteo and OpenStreetMap require no key
Running it
# Web UI
streamlit run streamlit_app.py
# Slack bot
python slack_bot.pyThe web UI runs at http://localhost:8501.
Calling it directly
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:
{
"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:
docker build -t travelgenie .
docker run -d -p 8501:8501 --env-file .env travelgenieAWS (ECS Fargate + DynamoDB + Secrets Manager + CloudWatch):
cd aws/cloudformation
aws cloudformation create-stack \
--stack-name travelgenie \
--template-body file://infrastructure.yaml \
--parameters file://parameters.json \
--capabilities CAPABILITY_NAMED_IAMSee 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 --upgradeSlack bot not connecting — verify tokens, confirm Socket Mode is enabled, check bot has
chat:writeandapp_mentions:readscopesNo search results — try airport codes instead of city names; check SerpAPI quota; confirm dates are in the future
Testing
python slack_bot.py --test
streamlit run streamlit_app.pyLicense
MIT — see LICENSE.
Author
Ajaykumar Balakannan — github.com/AjaykumarBalakannan
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/AjaykumarBalakannan/TravelGenie'
If you have feedback or need assistance with the MCP directory API, please join our Discord server