TripWays

Find, price, and book tours, day trips, and activities worldwide, with live dates and prices.

Should I use this

Quality & Safety

A
Description quality
100%
Schema completeness
87%
Naming quality
100%
Poisoning risk
100%
Permission match
100%
Protocol compliance
100%

Based on automated analysis of tool definitions and protocol compliance.

Context Cost

~3,401Tokens (tool definitions)
~5.2 KBTypical response size
Significant attention impact (2.66% of 128k context)

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-http

What it can do

Tool inventory

Tools (6)

🟢 Read-only🟡 Write🔴 Delete⚪ Unknown
🟢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

Rate this Server

Evidence

Recent observations

verifiedversion not recorded6 tools