travel-mcp-server
An AI-powered travel planner MCP server enabling flight and hotel search, weather forecasts, point-of-interest discovery, itinerary generation, and budget management.
README
Travel MCP Server
An AI-powered travel planner built as a Model Context Protocol (MCP) server. Connect it to Claude and get a full travel assistant — search flights, hotels, weather, and points of interest, generate day-by-day itineraries, and track your trip budget.
A Next.js web UI is included for exploring the tools directly in a browser without a Claude client.
Tools
| Tool | Description |
|---|---|
search_flights |
Search flights between two cities by name or IATA code |
search_hotels |
Search hotels with optional price filter |
get_weather |
Day-by-day weather forecast for a destination |
search_poi |
Points of interest by category (restaurants, attractions, activities, nightlife, shopping, transport) |
plan_trip |
Generate a complete itinerary with weather, POI, flight & hotel options, and optional budget allocation |
create_trip_budget |
Create a budget tracker for a trip |
add_expense |
Record an expense against a budget category |
get_budget_summary |
Total spent, remaining balance, and per-category breakdown |
Supported destinations (mock data)
Flights: New York ↔ Tokyo / Paris / London / Barcelona / Sydney / Bali · London ↔ Paris / Barcelona / Bali · Sydney ↔ Bali · Paris ↔ Rome
Hotels, weather & POI: Tokyo, Paris, London, Barcelona, Bali, Sydney, Rome, Amsterdam, Dubai
Quickstart
Prerequisites
- Python 3.10+, uv —
brew install uv - Node.js 18+ and pnpm (for the web UI) —
brew install pnpm
Run locally (stdio — for Claude Desktop / Claude Code)
git clone <repo-url> travel-mcp-server
cd travel-mcp-server
uv sync
uv run python -m travel_mcp
Run with the web UI
# Terminal 1 — MCP server in SSE mode
MCP_TRANSPORT=sse uv run python -m travel_mcp
# Terminal 2 — Next.js UI
cd ui && pnpm install && pnpm dev
Open http://localhost:3000 to use the browser playground.
Inspect tools interactively
npx @modelcontextprotocol/inspector uv run python -m travel_mcp
Connect to Claude Desktop
Add to ~/Library/Application Support/Claude/claude_desktop_config.json:
{
"mcpServers": {
"travel-planner": {
"command": "uv",
"args": ["run", "--directory", "/absolute/path/to/travel-mcp-server", "python", "-m", "travel_mcp"]
}
}
}
Restart Claude Desktop. The 8 travel tools will appear automatically.
Docker
# Build
docker build -t travel-mcp-server .
# Run (SSE transport on port 8000)
docker compose up
The server listens on http://localhost:8000 in SSE mode when running via Docker.
The web UI can be pointed at a remote server by setting MCP_SERVER_URL before starting it:
MCP_SERVER_URL=http://your-server:8000 pnpm --prefix ui dev
Web UI
Kubernetes
# Deploy
kubectl apply -f k8s/
# Verify
kubectl rollout status deployment/travel-mcp-server -n travel-mcp
# Test locally via port-forward
kubectl port-forward svc/travel-mcp-server 8000:80 -n travel-mcp
# Tear down
kubectl delete -f k8s/
Note: The Deployment runs a single replica because budget state is held in memory. Scale to multiple replicas only after adding external storage (Redis, Postgres, etc.).
Web UI
A Next.js 16 app in ui/ that provides a browser-based playground for all 8 tools. It requires the MCP server to be running in SSE mode (MCP_TRANSPORT=sse).
ui/
├── app/
│ ├── page.tsx # Tabbed playground (Flights, Hotels, Weather, Places, Itinerary, Budget)
│ └── api/tools/[tool]/ # Next.js API route — proxies to MCP server REST endpoints
├── components/ # One component per tool tab + shared UI primitives
└── lib/mcp.ts # Thin fetch wrapper for /api/tools/*
The MCP server exposes REST endpoints at /api/tools/<tool_name> (POST, JSON body) alongside the standard SSE transport, so the UI does not need to implement the MCP protocol.
Environment variables
| Variable | Default | Description |
|---|---|---|
MCP_TRANSPORT |
stdio |
Transport mode: stdio (local) or sse (HTTP) |
HOST |
0.0.0.0 |
Bind address (SSE mode only) |
PORT |
8000 |
Port (SSE mode only) |
MCP_SERVER_URL |
http://localhost:8000 |
URL the Next.js UI uses to reach the MCP server |
Project structure
travel-mcp-server/
├── src/travel_mcp/
│ ├── server.py # FastMCP instance, tool registrations, REST API routes
│ ├── tools/ # Business logic (one file per domain)
│ │ ├── flights.py
│ │ ├── hotels.py
│ │ ├── weather.py
│ │ ├── poi.py
│ │ ├── itinerary.py # Composes other tools into a full itinerary
│ │ └── budget.py # In-memory budget tracker
│ └── mock_data/ # Static fixtures — replace query_* functions to wire real APIs
│ ├── flights.py
│ ├── hotels.py
│ ├── weather.py
│ └── poi.py
├── ui/ # Next.js web UI
│ ├── app/ # App Router pages and API routes
│ ├── components/ # Tool tab components
│ └── lib/mcp.ts # MCP server fetch client
├── k8s/ # Kubernetes manifests
├── Dockerfile
└── docker-compose.yml
Swapping in real APIs
Each mock_data/ file exposes a single query_* function. Replace just that function with an HTTP call to a real provider and everything else stays the same.
| Mock file | Suggested real API |
|---|---|
mock_data/flights.py |
Amadeus Flight Offers |
mock_data/hotels.py |
Amadeus Hotel Search |
mock_data/weather.py |
OpenWeatherMap |
mock_data/poi.py |
Google Places API |
Example prompts
- "Plan a 7-day trip to Tokyo from New York in October with a $4,000 budget."
- "Find me flights from London to Barcelona for next Friday, 2 passengers."
- "What's the weather like in Bali in July?"
- "Show me the top attractions in Rome."
- "I spent $850 on flights for my Tokyo trip — log it and show my remaining budget."
License
MIT
Recommended Servers
playwright-mcp
A Model Context Protocol server that enables LLMs to interact with web pages through structured accessibility snapshots without requiring vision models or screenshots.
Magic Component Platform (MCP)
An AI-powered tool that generates modern UI components from natural language descriptions, integrating with popular IDEs to streamline UI development workflow.
Audiense Insights MCP Server
Enables interaction with Audiense Insights accounts via the Model Context Protocol, facilitating the extraction and analysis of marketing insights and audience data including demographics, behavior, and influencer engagement.
VeyraX MCP
Single MCP tool to connect all your favorite tools: Gmail, Calendar and 40 more.
graphlit-mcp-server
The Model Context Protocol (MCP) Server enables integration between MCP clients and the Graphlit service. Ingest anything from Slack to Gmail to podcast feeds, in addition to web crawling, into a Graphlit project - and then retrieve relevant contents from the MCP client.
Kagi MCP Server
An MCP server that integrates Kagi search capabilities with Claude AI, enabling Claude to perform real-time web searches when answering questions that require up-to-date information.
E2B
Using MCP to run code via e2b.
Neon Database
MCP server for interacting with Neon Management API and databases
Exa Search
A Model Context Protocol (MCP) server lets AI assistants like Claude use the Exa AI Search API for web searches. This setup allows AI models to get real-time web information in a safe and controlled way.
Qdrant Server
This repository is an example of how to create a MCP server for Qdrant, a vector search engine.