JTR Holidays MCP Server
Connect any AI assistant — Claude, ChatGPT, Gemini, or your own agent — to JTR Holidays' live catalog of attraction tickets, tours, and multi-day holiday packages via the Model Context Protocol.
Real-time inventory
Live activity catalog with up-to-date pricing, availability, and booking links — no stale caches.
No API key needed
All five search and browse tools are publicly accessible — no sign-up, no credentials, no waiting. Rate-limited at 100 requests/minute per IP.
MCP 2024-11-05
Fully compliant with the Model Context Protocol specification. Supports tools/call and tools/list.
How to connect
One endpoint handles all tool calls. Public browse tools require no authentication — just send Content-Type: application/json and you're ready.
# MCP JSON-RPC endpoint
POST https://api.jtrholidays.com/mcp/v1
# Auto-discovery (no auth)
GET https://api.jtrholidays.com/.well-known/mcp.json
Public tools (no auth needed)
Content-Type: application/json
search, details, availability, destinations, packages
Write tools (future)
X-MCP-Secret: <your-secret-key>
create_booking, update_inventory, etc.
All five current tools (search_activities, get_activity_details, check_availability, get_destinations, get_holiday_packages) are publicly accessible. No secret key required.
Available tools
All tools are called via the standard tools/call method. The tools/list method returns the full machine-readable manifest.
search_activitiesSearch JTR Holidays' activity and tour catalog by destination, category, and budget.
| Parameter | Type | Required | Description |
|---|---|---|---|
destination | string | optional | City or country name (e.g. "Dubai", "Singapore") |
category | string | optional | Activity category (e.g. "Desert Safari", "Sightseeing") |
budget_max | number | optional | Maximum price per person in the activity's local currency |
limit | integer | optional | Max results (default: 20, max: 50) |
get_activity_detailsGet full details for a single activity including inclusions, exclusions, cancellation policy, and reviews.
| Parameter | Type | Required | Description |
|---|---|---|---|
activity_id | string | required | Activity UUID from search_activities results |
check_availabilityCheck if an activity is available on a specific date and return pricing options.
| Parameter | Type | Required | Description |
|---|---|---|---|
activity_id | string | required | Activity UUID |
date | string | required | Date to check in Y-m-d format (e.g. "2025-12-25") |
pax | integer | optional | Number of people (default: 1) |
get_destinationsList all destinations (countries) where JTR Holidays offers tours, with activity counts and popular picks.
arguments object. get_holiday_packagesBrowse multi-day holiday packages with itineraries, departure dates, and pricing.
| Parameter | Type | Required | Description |
|---|---|---|---|
destination | string | optional | Filter by country or region |
duration_days | integer | optional | Filter by exact number of days |
limit | integer | optional | Max results (default: 20, max: 50) |
Example requests & responses
The examples below use verified test data from the live server.
No authentication header required for any of these examples. Just Content-Type: application/json.
Search activities in Dubai
search_activities{
"jsonrpc": "2.0",
"method": "tools/call",
"id": 1,
"params": {
"name": "search_activities",
"arguments": {
"destination": "Dubai",
"category": "Desert Safari",
"budget_max": 200,
"limit": 3
}
}
}Check availability for an activity
check_availability{
"jsonrpc": "2.0",
"method": "tools/call",
"id": 2,
"params": {
"name": "check_availability",
"arguments": {
"activity_id": "a1b2c3d4-0001-0001-0001-000000000001",
"date": "2025-12-25",
"pax": 2
}
}
}List all destinations
get_destinations{
"jsonrpc": "2.0",
"method": "tools/call",
"id": 3,
"params": {
"name": "get_destinations",
"arguments": {}
}
}Request format
Every call follows the JSON-RPC 2.0 envelope with MCP's tools/call method:
{
"jsonrpc": "2.0",
"method": "tools/call",
"id": 1,
"params": {
"name": "<tool_name>",
"arguments": {
/* tool-specific arguments */
}
}
}Special methods
initializeMCP handshake — returns server capabilities and protocol version.tools/listReturns the full machine-readable tool manifest (inputSchema included).
Error codes
-32600Invalid request (HTTP 400)-32601Method not found (HTTP 404)-32602Invalid params / not found (HTTP 422)-32603Internal error (HTTP 500)
Rate limiting
Limits apply per IP address, per minute. If you exceed the limit you'll receive an HTTP 429 Too Many Requests response.
Public (no auth)
All five current tools
100 req / min
Sufficient for AI assistant workflows. Exceeding returns 429 with a Retry-After header.
Authenticated (X-MCP-Secret)
Partners and integration partners
1,000 req / min
Higher limit for partners with a valid secret key. Contact us to request authenticated access.
Security model
The MCP server uses a two-tier model that keeps read-only travel data open while protecting any future write operations.
Tier 1 — Public (no authentication)
Exposes the same data available on jtrholidays.com. Any AI assistant can call these tools without credentials.
search_activitiesget_activity_detailscheck_availabilityget_destinationsget_holiday_packagesResponse sanitisation
All public responses are automatically stripped of internal pricing fields (supplier_cost, margin), admin notes, supplier credentials, and any customer personal data — regardless of what the database contains.
Tier 2 — Protected (X-MCP-Secret required)
Reserved for future write and mutation tools. These will require a valid X-MCP-Secret header matched against a Cloudflare-injected secret.
create_bookingupdate_inventory... and future toolsNeed help connecting?
Public tools work out of the box — no sign-up needed. For integration support, custom use cases, or to request authenticated (higher rate-limit) access, reach out and we'll get you set up.