TripWays
Find, price, and book tours, day trips, and activities worldwide, with live dates and prices.
Should I use this
Quality & Safety
Based on automated analysis of tool definitions and protocol compliance.
Context Cost
This is the approximate number of tokens consumed each time the server's tools are loaded into a model's context. Higher counts reduce the attention available for other tasks.
Install
One-Click Install
Add this to your `claude_desktop_config.json` file:
{
"mcpServers": {
"tours": {
"url": "https://mcp.tripways.com/mcp"
}
}
}Remote endpoints
https://mcp.tripways.com/mcpstreamable-httpWhat it can do
Tool inventory
Tools (6)
🟢search_tours(query, destination, price_min, price_max, duration_hours_min, ...)
Search the TripWays catalog of bookable tours, day trips, and activities worldwide. Pass a natural-language query plus any filters you already know: destination, price range in USD, duration in hours, activity, theme, or cancellation policy. Returns ranked tours with bokun_id, title, from-price, duration, destinations, rating, cancellation policy, hero_image, the TripWays page (url), and checkout_url. For live dates, remaining seats, or a group total, use check_availability and get_price_quote.
Input Schema
{
"type": "object",
"properties": {
"query": {
"type": "string",
"minLength": 2,
"maxLength": 500,
"description": "Natural-language search, e.g. 'family food tour in Rome under $100'."
},
"destination": {
"type": "string",
"maxLength": 120,
"description": "Place name (city, region, country, or well-known area/landmark). Resolved against TripWays destinations; a landmark that is not a destination is added to the search text."
},
"price_min": {
"type": "number",
"minimum": 0
},
"price_max": {
"type": "number",
"minimum": 0
},
"duration_hours_min": {
"type": "number",
"minimum": 0
},
"duration_hours_max": {
"type": "number",
"minimum": 0
},
"activity": {
"type": "string",
"maxLength": 60,
"description": "Activity facet, e.g. food, hiking, snorkeling."
},
"theme": {
"type": "string",
"maxLength": 60
},
"cancellation": {
"type": "string",
"enum": [
"free",
"flexible",
"partial",
"non_refundable"
]
},
"limit": {
"type": "integer",
"minimum": 1,
"maximum": 20,
"default": 8
}
},
"required": [
"query"
],
"additionalProperties": false
}Output Schema
{
"type": "object",
"properties": {
"ok": {
"type": "boolean"
},
"tours": {
"type": "array",
"description": "Ranked tours; empty when nothing matched (see note).",
"items": {
"type": "object",
"properties": {
"bokun_id": {
"type": "string",
"description": "Tour id; the number in tripways.com/t/{id}."
},
"title": {
"type": "string"
},
"url": {
"type": "string",
"description": "The tour's TripWays page."
},
"checkout_url": {
"type": "string",
"description": "TripWays checkout for this tour."
},
"hero_image": {
"type": "string",
"description": "Main photo URL."
},
"from_price": {
"type": "object",
"description": "Lowest adult price.",
"properties": {
"amount": {
"type": "number",
"minimum": 0
},
"currency": {
"type": "string"
}
}
},
"duration_text": {
"type": "string"
},
"duration_hours": {
"type": "number"
},
"destinations": {
"type": "array",
"items": {
"type": "string"
}
},
"themes": {
"type": "array",
"items": {
"type": "string"
}
},
"activities": {
"type": "array",
"items": {
"type": "string"
}
},
"cancellation": {
"type": "string",
"description": "free, flexible, partial, or non_refundable."
},
"rating": {
"type": "object",
"properties": {
"value": {
"type": [
"number",
"null"
]
},
"count": {
"type": "integer"
},
"low_confidence": {
"type": "boolean",
"description": "True when there are fewer than 10 reviews."
}
}
},
"hotel_pickup": {
"type": "boolean"
},
"bookable_natively": {
"type": "boolean",
"description": "True when checkout_url opens TripWays checkout; false when it opens the operator calendar."
},
"reason": {
"type": [
"string",
"null"
],
"description": "Why checkout works the way it does, e.g. pickup_required."
},
"gttd_eligible": {
"type": "boolean",
"description": "Listed on Google Things to Do."
}
}
}
},
"note": {
"type": "string",
"description": "Why the list is empty or how the destination was read."
},
"destination_resolved": {
"type": "object",
"properties": {
"name": {
"type": "string"
},
"display_name": {
"type": "string"
},
"level": {
"type": "string",
"description": "country, region, city, or district."
},
"country_code": {
"type": "string"
},
"hierarchy": {
"type": "array",
"items": {
"type": "string"
}
},
"url": {
"type": "string",
"description": "The destination's TripWays page."
},
"tour_count": {
"type": "integer"
},
"browseable": {
"type": "boolean"
},
"resolved_via": {
"type": "string",
"description": "area_alias when a landmark maps to its parent destination."
},
"alias": {
"type": "string"
}
}
},
"guidance": {
"type": "string"
}
},
"required": [
"ok"
]
}🟢get_tour_details(bokun_id)
Get the full details of one TripWays tour by bokun_id (the number in tripways.com/t/{id}): summary, itinerary stops, inclusions and exclusions, languages, cancellation policy, meeting point or pickup, from-price, rating, hero_image, url, and checkout_url. Live dates and group totals come from check_availability and get_price_quote.
Input Schema
{
"type": "object",
"properties": {
"bokun_id": {
"type": "string",
"pattern": "^[0-9]+$"
}
},
"required": [
"bokun_id"
],
"additionalProperties": false
}Output Schema
{
"type": "object",
"properties": {
"ok": {
"type": "boolean"
},
"bokun_id": {
"type": "string",
"description": "Tour id; the number in tripways.com/t/{id}."
},
"title": {
"type": "string"
},
"url": {
"type": "string",
"description": "The tour's TripWays page."
},
"checkout_url": {
"type": "string",
"description": "TripWays checkout for this tour."
},
"hero_image": {
"type": "string",
"description": "Main photo URL."
},
"from_price": {
"type": "object",
"description": "Lowest adult price.",
"properties": {
"amount": {
"type": "number",
"minimum": 0
},
"currency": {
"type": "string"
}
}
},
"duration_text": {
"type": "string"
},
"duration_hours": {
"type": "number"
},
"destinations": {
"type": "array",
"items": {
"type": "string"
}
},
"themes": {
"type": "array",
"items": {
"type": "string"
}
},
"activities": {
"type": "array",
"items": {
"type": "string"
}
},
"cancellation": {
"type": "string",
"description": "free, flexible, partial, or non_refundable."
},
"rating": {
"type": "object",
"properties": {
"value": {
"type": [
"number",
"null"
]
},
"count": {
"type": "integer"
},
"low_confidence": {
"type": "boolean",
"description": "True when there are fewer than 10 reviews."
}
}
},
"hotel_pickup": {
"type": "boolean"
},
"bookable_natively": {
"type": "boolean",
"description": "True when checkout_url opens TripWays checkout; false when it opens the operator calendar."
},
"reason": {
"type": [
"string",
"null"
],
"description": "Why checkout works the way it does, e.g. pickup_required."
},
"gttd_eligible": {
"type": "boolean",
"description": "Listed on Google Things to Do."
},
"summary": {
"type": "string"
},
"inclusions": {
"type": "array",
"items": {
"type": "string"
}
},
"exclusions": {
"type": "array",
"items": {
"type": "string"
}
},
"languages": {
"type": "array",
"items": {
"type": "string"
}
},
"meeting_pickup_label": {
"type": "string"
},
"itinerary": {
"type": "array",
"items": {
"type": "object",
"properties": {
"stop_index": {
"type": "integer"
},
"title": {
"type": "string"
},
"body": {
"type": "string"
},
"poi_name": {
"type": "string"
}
}
}
},
"guidance": {
"type": "string"
}
},
"required": [
"ok"
]
}🟢get_destination_info(query, country_code)
Resolve a place name (a city, region, country, or well-known area such as Khao Sok) to a TripWays destination with bookable tours. Useful before search_tours when a name could mean more than one place. An ambiguous name returns destination_ambiguous with a did_you_mean list; pass country_code (ISO 3166-1 alpha-2, e.g. FR) to choose one. Area names resolve to their parent destination and include resolved_via=area_alias.
Input Schema
{
"type": "object",
"properties": {
"query": {
"type": "string",
"minLength": 1,
"maxLength": 120
},
"country_code": {
"type": "string",
"pattern": "^[A-Za-z]{2}$",
"description": "Optional ISO2 pin, e.g. FR."
}
},
"required": [
"query"
],
"additionalProperties": false
}Output Schema
{
"type": "object",
"properties": {
"ok": {
"type": "boolean"
},
"destination": {
"type": "object",
"properties": {
"name": {
"type": "string"
},
"display_name": {
"type": "string"
},
"level": {
"type": "string",
"description": "country, region, city, or district."
},
"country_code": {
"type": "string"
},
"hierarchy": {
"type": "array",
"items": {
"type": "string"
}
},
"url": {
"type": "string",
"description": "The destination's TripWays page."
},
"tour_count": {
"type": "integer"
},
"browseable": {
"type": "boolean"
},
"resolved_via": {
"type": "string",
"description": "area_alias when a landmark maps to its parent destination."
},
"alias": {
"type": "string"
}
}
}
},
"required": [
"ok"
]
}🟢check_availability(bokun_id, date, date_end, party_size, travelers)
Check live start times and remaining seats for a TripWays tour on one date or a range of up to 31 days. Pass party_size (seats needed) or a travelers object; slots that cannot fit the group are left out, and party_size wins if both are given. The status field is ok, no_schedule, no_fit, or calendar_gone. Use get_price_quote with the same date, start time, and travelers for the total.
Input Schema
{
"type": "object",
"properties": {
"bokun_id": {
"type": "string",
"pattern": "^[0-9]+$"
},
"date": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$"
},
"date_end": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$",
"description": "Inclusive end; default = date. Max 31 days."
},
"party_size": {
"type": "integer",
"minimum": 1,
"maximum": 50,
"description": "Occupied seats to keep (not ticket count). Slots with availabilityCount < party_size are omitted unless unlimited. Wins over travelers when both are set."
},
"travelers": {
"type": "object",
"description": "Simple ages; mapped to occupied seats (infants excluded unless the tour has an infant category). Used only when party_size is omitted.",
"properties": {
"adults": {
"type": "integer",
"minimum": 0,
"default": 1
},
"seniors": {
"type": "integer",
"minimum": 0
},
"youth": {
"type": "integer",
"minimum": 0
},
"children": {
"type": "integer",
"minimum": 0
},
"infants": {
"type": "integer",
"minimum": 0
}
},
"additionalProperties": false
}
},
"required": [
"bokun_id",
"date"
],
"additionalProperties": false
}Output Schema
{
"type": "object",
"properties": {
"ok": {
"type": "boolean"
},
"bokun_id": {
"type": "string"
},
"status": {
"type": "string",
"description": "ok, no_schedule, no_fit, or calendar_gone."
},
"note": {
"type": "string"
},
"slots": {
"type": "array",
"description": "Open start times that fit the party.",
"items": {
"type": "object",
"properties": {
"date": {
"type": "string",
"description": "YYYY-MM-DD."
},
"start_time": {
"type": "string",
"description": "HH:MM."
},
"start_time_id": {
"type": "integer",
"description": "Pass to get_price_quote / get_booking_link."
},
"label": {
"type": "string"
},
"spots_left": {
"type": [
"integer",
"null"
],
"description": "Null when unlimited."
},
"unlimited": {
"type": "boolean"
},
"sold_out": {
"type": "boolean"
},
"min_participants": {
"type": "integer"
},
"rate_ids": {
"type": "array"
}
}
}
},
"bookable_natively": {
"type": "boolean"
},
"reason": {
"type": [
"string",
"null"
]
},
"checkout_url": {
"type": "string"
}
},
"required": [
"ok"
]
}🟢get_price_quote(bokun_id, date, start_time_id, start_time, travelers)
Get the live total for a TripWays tour on one date and start time for a traveler mix, priced from the operator's booking calendar. A quote does not hold seats or charge anything. Optional extras and promo codes are not included. When the tour's rates cannot price that mix, the result is unpriced.
Input Schema
{
"type": "object",
"properties": {
"bokun_id": {
"type": "string",
"pattern": "^[0-9]+$"
},
"date": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$"
},
"start_time_id": {
"type": "integer",
"minimum": 1
},
"start_time": {
"type": "string",
"pattern": "^\\d{2}:\\d{2}$",
"description": "HH:MM if start_time_id unknown."
},
"travelers": {
"type": "object",
"description": "Simple ages; mapped to Bokun pricing categories.",
"properties": {
"adults": {
"type": "integer",
"minimum": 0,
"default": 1
},
"seniors": {
"type": "integer",
"minimum": 0
},
"youth": {
"type": "integer",
"minimum": 0
},
"children": {
"type": "integer",
"minimum": 0
},
"infants": {
"type": "integer",
"minimum": 0
}
},
"additionalProperties": false
}
},
"required": [
"bokun_id",
"date"
],
"additionalProperties": false
}Output Schema
{
"type": "object",
"properties": {
"ok": {
"type": "boolean"
},
"bokun_id": {
"type": "string"
},
"quote_kind": {
"type": "string"
},
"currency": {
"type": "string"
},
"package_total": {
"type": "number",
"minimum": 0,
"description": "Total for the whole group, before optional extras and promo codes."
},
"from_price": {
"type": "number",
"minimum": 0
},
"rate_title": {
"type": "string"
},
"date": {
"type": "string"
},
"start_time": {
"type": "string"
},
"travelers_priced": {
"type": "object",
"description": "Traveler counts the total covers.",
"additionalProperties": {
"type": "integer"
}
},
"min_participants": {
"type": "integer"
},
"includes_required_extras": {
"type": "boolean"
},
"optional_extras_excluded": {
"type": "boolean"
},
"promo_applied": {
"type": "boolean"
},
"bookable_natively": {
"type": "boolean"
},
"reason": {
"type": [
"string",
"null"
]
},
"checkout_url": {
"type": "string",
"description": "Checkout preset to this date, time, and travelers."
}
},
"required": [
"ok"
]
}🟢get_booking_link(bokun_id, date, start_time_id, start_time, rate_id, ...)
Get the TripWays checkout link for a tour, optionally preset to a date, start time, rate, and traveler mix. The traveler pays on tripways.com; this tool does not hold seats or take payment. bookable_natively and reason say whether the link opens TripWays checkout or the operator's calendar, and whether a hotel pickup must be chosen at checkout.
Input Schema
{
"type": "object",
"properties": {
"bokun_id": {
"type": "string",
"pattern": "^[0-9]+$"
},
"date": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$"
},
"start_time_id": {
"type": "integer",
"minimum": 1
},
"start_time": {
"type": "string",
"pattern": "^\\d{2}:\\d{2}$",
"description": "HH:MM if start_time_id unknown."
},
"rate_id": {
"type": "integer",
"minimum": 1
},
"travelers": {
"type": "object",
"description": "Simple ages; mapped to Bokun pricing categories.",
"properties": {
"adults": {
"type": "integer",
"minimum": 0,
"default": 1
},
"seniors": {
"type": "integer",
"minimum": 0
},
"youth": {
"type": "integer",
"minimum": 0
},
"children": {
"type": "integer",
"minimum": 0
},
"infants": {
"type": "integer",
"minimum": 0
}
},
"additionalProperties": false
}
},
"required": [
"bokun_id"
],
"additionalProperties": false
}Output Schema
{
"type": "object",
"properties": {
"ok": {
"type": "boolean"
},
"bokun_id": {
"type": "string"
},
"checkout_url": {
"type": "string",
"description": "Open in the browser to pay on tripways.com."
},
"bookable_natively": {
"type": "boolean"
},
"reason": {
"type": [
"string",
"null"
]
},
"start_time": {
"type": "string"
},
"spots_left": {
"type": [
"integer",
"null"
]
},
"min_participants": {
"type": "integer"
}
},
"required": [
"ok"
]
}Community
Evidence