Travel MCP Server
Enables travel package management, booking, and itinerary planning through MCP-compliant endpoints with 26 tools for searching, comparing, and booking travel packages.
README
Travel MCP Server
Travel MCP Server provides travel package management, booking functionality, and itinerary planning through Model Context Protocol (MCP) compliant endpoints.
Installation
npm install
Running
npm start
Server runs on http://localhost:3002
Available Tools
The server provides 26 tools organized into four categories:
Package Management (12 tools):
- list_packages
- get_package
- search_packages
- check_availability
- compare_packages
- get_package_itinerary
- get_packages_by_destination
- get_packages_by_price_range
- get_packages_by_duration
- get_packages_by_continent
- filter_packages_by_budget
- get_package_inclusions
Booking Management (9 tools):
- create_booking
- get_booking
- list_bookings
- cancel_booking
- update_booking
- get_booking_status
- get_bookings_by_email
- get_bookings_by_date
- get_booking_summary
Price Calculations (4 tools):
- calculate_booking_price
- calculate_total_price
- calculate_discount
- compare_package_prices
Validation (1 tool):
- validate_booking_data
Protocol Endpoints
POST /
Main MCP JSON-RPC endpoint that handles protocol initialization, tool discovery, and tool execution.
Headers:
mcp-protocol-version: Protocol version (optional, defaults to '2024-11-05')mcp-session-id: Session identifier (required after initialization)
Methods:
initialize
Initializes MCP session and returns server capabilities.
Request:
{
"jsonrpc": "2.0",
"method": "initialize",
"params": {
"protocolVersion": "2024-11-05",
"capabilities": {},
"clientInfo": {
"name": "client-name",
"version": "1.0.0"
}
},
"id": 1
}
Response:
{
"jsonrpc": "2.0",
"id": 1,
"result": {
"protocolVersion": "2024-11-05",
"capabilities": {
"tools": {}
},
"serverInfo": {
"name": "Travel MCP Server Enhanced",
"version": "2.0.0"
}
}
}
tools/list
Returns list of all available tools.
Request:
{
"jsonrpc": "2.0",
"method": "tools/list",
"params": {},
"id": 2
}
Response:
{
"jsonrpc": "2.0",
"id": 2,
"result": {
"tools": [...]
}
}
tools/call
Executes a specific tool with provided arguments.
Request:
{
"jsonrpc": "2.0",
"method": "tools/call",
"params": {
"name": "tool-name",
"arguments": {...}
},
"id": 3
}
Response:
{
"jsonrpc": "2.0",
"id": 3,
"result": {
"content": [
{
"type": "text",
"text": "..."
}
]
}
}
Available Tools
Package Management
list_packages
Retrieves comprehensive list of all available travel packages with basic information.
Parameters: None
Returns: List of packages with id, name, destination, duration, price, currency, and availability status
get_package
Retrieves complete detailed information about a specific travel package.
Parameters:
packageId(string, required): Unique package identifier
Returns: Complete package details including itinerary, inclusions, and full description
search_packages
Searches and filters travel packages by multiple criteria.
Parameters:
destination(string, optional): Destination city or country nameminDuration(number, optional): Minimum trip duration in daysmaxDuration(number, optional): Maximum trip duration in daysmaxPrice(number, optional): Maximum price per person in USD
Returns: Matching packages sorted by relevance
check_availability
Checks if a specific travel package is currently available for booking.
Parameters:
packageId(string, required): Package identifier
Returns: Availability status boolean
compare_packages
Compares multiple travel packages side by side.
Parameters:
packageIds(array, required): Array of 2-5 package IDs
Returns: Detailed comparison of packages
get_package_itinerary
Retrieves complete day-by-day itinerary for a travel package.
Parameters:
packageId(string, required): Package identifier
Returns: Detailed itinerary with activities and scheduled times
get_packages_by_destination
Retrieves all travel packages for a specific destination.
Parameters:
destination(string, required): Destination city or country name
Returns: All packages matching destination
get_packages_by_price_range
Retrieves packages within a specified price range.
Parameters:
minPrice(number, required): Minimum price per person in USDmaxPrice(number, required): Maximum price per person in USD
Returns: Packages sorted by price
get_packages_by_duration
Retrieves packages matching a specific duration range.
Parameters:
minDays(number, required): Minimum trip duration in daysmaxDays(number, required): Maximum trip duration in days
Returns: Packages sorted by duration
get_packages_by_continent
Retrieves all packages for destinations in a specific continent.
Parameters:
continent(string, required): Continent name (Europe, Asia, North America, South America, Africa, Oceania, Australia)
Returns: Packages for specified continent
filter_packages_by_budget
Filters packages by maximum budget amount.
Parameters:
maxBudget(number, required): Maximum budget per person in USD
Returns: Packages priced at or below budget, sorted by price
get_package_inclusions
Retrieves list of inclusions and amenities for a package.
Parameters:
packageId(string, required): Package identifier
Returns: List of inclusions
Booking Management
create_booking
Creates a new confirmed booking for a travel package.
Parameters:
packageId(string, required): Package identifiertravelerName(string, required): Full name of primary travelertravelerEmail(string, required): Email addresstravelDate(string, required): Travel start date in YYYY-MM-DD formatnumberOfTravelers(number, required): Number of travelers
Returns: Complete booking details with booking ID
get_booking
Retrieves complete details of a specific booking.
Parameters:
bookingId(string, required): Booking identifier
Returns: Complete booking information
list_bookings
Retrieves list of all bookings with optional filtering.
Parameters:
email(string, optional): Filter by traveler email
Returns: List of bookings with complete details
cancel_booking
Cancels an existing confirmed booking.
Parameters:
bookingId(string, required): Booking identifier
Returns: Updated booking with cancelled status
update_booking
Updates existing booking details.
Parameters:
bookingId(string, required): Booking identifiertravelDate(string, optional): New travel start date in YYYY-MM-DD formatnumberOfTravelers(number, optional): New number of travelers
Returns: Updated booking with new details
get_booking_status
Retrieves current status of a booking.
Parameters:
bookingId(string, required): Booking identifier
Returns: Booking status and timestamps
get_bookings_by_email
Retrieves all bookings for a specific traveler email.
Parameters:
email(string, required): Email address
Returns: All bookings associated with email
get_bookings_by_date
Retrieves bookings matching specific date or date range.
Parameters:
travelDate(string, optional): Specific travel date in YYYY-MM-DD formatstartDate(string, optional): Start date of range in YYYY-MM-DD formatendDate(string, optional): End date of range in YYYY-MM-DD format
Returns: Bookings filtered by date criteria
get_booking_summary
Retrieves concise summary of a booking.
Parameters:
bookingId(string, required): Booking identifier
Returns: Essential booking information in compact format
Price Calculations
calculate_booking_price
Calculates total price for a potential booking without creating it.
Parameters:
packageId(string, required): Package identifiernumberOfTravelers(number, required): Number of travelers
Returns: Calculated total price, price per person, and currency
calculate_total_price
Calculates total price based on package price and number of travelers.
Parameters:
packagePrice(number, required): Price per person in USDnumberOfTravelers(number, required): Number of travelers
Returns: Price breakdown with total amount
calculate_discount
Calculates discount amount and discounted price.
Parameters:
originalPrice(number, required): Original price in USDdiscountPercentage(number, required): Discount percentage (0-100)
Returns: Original price, discount amount, and discounted price
compare_package_prices
Compares prices of multiple packages and identifies cheapest and most expensive.
Parameters:
packageIds(array, required): Array of at least 2 package IDs
Returns: Price comparison with rankings
Validation
validate_booking_data
Validates booking data before creating a booking.
Parameters:
packageId(string, required): Package identifiertravelerEmail(string, required): Email address to validatetravelDate(string, required): Travel date in YYYY-MM-DD formatnumberOfTravelers(number, required): Number of travelers
Returns: Validation results with any errors found
Data Formats
Package Structure
{
"id": "pkg-001",
"name": "Package Name",
"destination": "City, Country",
"duration": 5,
"price": 2999,
"currency": "USD",
"description": "Package description",
"itinerary": [
{
"day": 1,
"activity": "Activity name",
"time": "14:00"
}
],
"includes": ["Hotel", "Breakfast", "Transfers"],
"available": true
}
Booking Structure
{
"bookingId": "BK-000001",
"packageId": "pkg-001",
"packageName": "Package Name",
"destination": "City, Country",
"travelerName": "John Doe",
"travelerEmail": "john@example.com",
"travelDate": "2024-06-15",
"numberOfTravelers": 2,
"totalPrice": 5998,
"currency": "USD",
"status": "confirmed",
"createdAt": "2024-01-01T00:00:00.000Z",
"cancelledAt": null
}
Response Format
All responses use Server-Sent Events (SSE) format:
event: message
data: {"jsonrpc":"2.0","id":1,"result":{...}}
Error Handling
Errors follow JSON-RPC 2.0 error format:
{
"jsonrpc": "2.0",
"id": 1,
"error": {
"code": -32603,
"message": "Error description"
}
}
Common error codes:
- -32601: Method not found
- -32603: Internal error
- -32000: Invalid or missing session ID
Security
This endpoint should not be exposed directly to AI agents. Route all requests through ArmorIQ proxy layer for authentication, authorization, rate limiting, and audit logging.
Supported Destinations
The server includes 15 predefined travel packages covering destinations in Europe, Asia, North America, Oceania, and Africa including Paris, Tokyo, Bali, New York, Santorini, London, Dubai, Rome, Barcelona, Iceland, Singapore, Sydney, Thailand, Switzerland, and Morocco.
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
Qdrant Server
This repository is an example of how to create a MCP server for Qdrant, a vector search engine.
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.