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.
Live activity catalog with up-to-date pricing, availability, and booking links — no stale caches.
All five search and browse tools are publicly accessible — no sign-up, no credentials, no waiting. Rate-limited at 100 requests/minute per IP.
Fully compliant with the Model Context Protocol specification. Supports tools/call and tools/list.
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.
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) |
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{
"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{
"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
}
}
}get_destinations{
"jsonrpc": "2.0",
"method": "tools/call",
"id": 3,
"params": {
"name": "get_destinations",
"arguments": {}
}
}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
-32600 Invalid request (HTTP 400)-32601 Method not found (HTTP 404)-32602 Invalid params / not found (HTTP 422)-32603 Internal error (HTTP 500)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.
The MCP server uses a two-tier model that keeps read-only travel data open while protecting any future write operations.
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.
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 toolsPublic 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.