{"apiVersion":"v1","directorySlug":"heytripp-mcp-daf0dfab0f","title":"Tripp · Travel made easy","description":"Tripp is the AI travel agent that plans the trip, books it, and shows its work. Whole trips, booked by text.","pageUrl":"https://www.mcpbundles.com/skills/heytripp-mcp-daf0dfab0f","connectPath":"importable","connectAction":"import_server","catalogListing":false,"bundleSlug":null,"listingKind":"remote_mcp","kind":"provider","transportUrl":"https://mcp.heytripp.com/mcp","hostedMcpUrl":null,"toolCount":45,"toolInventoryStatus":"observed","refreshedAt":"2026-11-03T13:26:00.516172+00:00","registryName":"com.heytripp/heytripp-mcp-daf0dfab0f","registryVersion":"2026.11.3","registryEligible":true,"tools":[{"name":"heytripp_hello","description":"Greet a traveler as HeyTripp and show the HeyTripp card in the conversation. Use this when someone asks HeyTripp to say hello or to check that HeyTripp is connected. It does not search or book anything.","inputSchema":{"type":"object","properties":{"name":{"type":"string","default":""}}},"title":"Say hello from HeyTripp","annotations":{"readOnlyHint":true,"untrustedContentHint":true},"logicalName":"heytripp_hello","displayName":"Say hello from HeyTripp"},{"name":"search_flights","description":"Search real, bookable flights and show the HeyTripp results card. DO NOT ASK FOR A BUDGET before searching: most people do not know the average cost until they see fares. Search straight away. If the traveler VOLUNTEERS a ceiling, pass it as budget_max — the card then measures what it finds against that number and offers a price watch when the fare misses it — and reuse it for later searches in this conversation. Never invent a budget and never infer one from the fares you see. Prices are the TO","inputSchema":{"type":"object","required":["origin","destination","depart_date","passengers"],"properties":{"cabin":{"type":"string","default":""},"origin":{"type":"string"},"infants":{"type":"integer","default":0},"max_stops":{"type":"integer","default":-1},"budget_max":{"anyOf":[{"type":"number"},{"type":"null"}],"default":null},"fly_anyway":{"type":"boolean","default":false},"passengers":{"type":"integer"},"depart_date":{"type":"string"},"destination":{"type":"string"},"max_results":{"type":"integer","default":0},"return_date":{"type":"string","default":""},"depart_after":{"type":"string","default":""},"arrive_before":{"type":"string","default":""},"children_ages":{"type":"string","default":""},"depart_before":{"type":"string","default":""},"refundable_only":{"type":"boolean","default":false},"exclude_airlines":{"type":"string","default":""},"include_airlines":{"type":"string","default":""},"max_layover_minutes":{"type":"integer","default":0},"return_depart_after":{"type":"string","default":""},"checked_bag_included":{"type":"boolean","default":false},"max_duration_minutes":{"type":"integer","default":0},"return_arrive_before":{"type":"string","default":""},"return_depart_before":{"type":"string","default":""},"airline_pass_mentioned":{"type":"string","default":""},"avoid_connection_airports":{"type":"string","default":""}}},"title":"Search flights","annotations":{"readOnlyHint":true,"untrustedContentHint":true},"logicalName":"search_flights","displayName":"Search flights"},{"name":"search_hotels","description":"Search real, bookable hotels and show the HeyTripp stays card. DO NOT ASK FOR A BUDGET before searching: most people do not know the average cost until they see fares. Search straight away. If the traveler VOLUNTEERS a ceiling, pass it as budget_max — the card then measures what it finds against that number and offers a price watch when the fare misses it — and reuse it for later searches in this conversation. Never invent a budget and never infer one from the fares you see. Prices are the ALL-I","inputSchema":{"type":"object","required":["destination","check_in","check_out","adults"],"properties":{"area":{"type":"string","default":""},"sort":{"type":"string","default":"cheapest"},"adults":{"type":"integer"},"check_in":{"type":"string"},"check_out":{"type":"string"},"min_stars":{"type":"integer","default":0},"budget_max":{"anyOf":[{"type":"number"},{"type":"null"}],"default":null},"hotel_name":{"type":"string","default":""},"min_rating":{"type":"number","default":0},"destination":{"type":"string"},"max_results":{"type":"integer","default":0},"flight_total":{"type":"number","default":0},"children_ages":{"type":"string","default":""},"guest_priority":{"type":"string","default":""}}},"title":"Search hotels","annotations":{"readOnlyHint":true,"untrustedContentHint":true},"logicalName":"search_hotels","displayName":"Search hotels"},{"name":"find_cheapest_week","description":"Scan a season and report which week is cheapest to STAY. Use this whenever someone asks when to go rather than what a fixed date costs, for example \"when is Vegas cheapest this autumn\". Prices are LODGING ONLY and do not include airfare. Give the window as real dates in YYYY-MM-DD; never guess them, and never guess the number of adults.","inputSchema":{"type":"object","required":["destination","earliest","latest","nights","adults"],"properties":{"adults":{"type":"integer"},"latest":{"type":"string"},"nights":{"type":"integer"},"earliest":{"type":"string"},"destination":{"type":"string"}}},"title":"Find the cheapest week to go","annotations":{"readOnlyHint":true,"untrustedContentHint":true},"logicalName":"find_cheapest_week","displayName":"Find the cheapest week to go"},{"name":"compare_nearby_airports","description":"Compare every airport in the departure city's metro area on the cheapest fare AND on what it costs all-in (fare plus getting to the airport), the way heytripp.com does. Use it when someone flies from a multi-airport city and might save by using a sibling. It recommends an airport ONLY once it knows how the traveler gets to the airport: pass access_mode as one of rideshare, transit, dropoff or drive when they have said so, in their words. NEVER assume one. When the result says access_needed, ask","inputSchema":{"type":"object","required":["origin","destination","depart_date","passengers"],"properties":{"origin":{"type":"string"},"passengers":{"type":"integer"},"access_mode":{"type":"string","default":""},"depart_date":{"type":"string"},"destination":{"type":"string"},"return_date":{"type":"string","default":""},"leaving_from":{"type":"string","default":""}}},"title":"Compare airports in the same metro","annotations":{"readOnlyHint":true,"untrustedContentHint":true},"logicalName":"compare_nearby_airports","displayName":"Compare airports in the same metro"},{"name":"watch_flight_price","description":"Watch a flight route and email the traveler when the whole-party total drops to their number. It is free and it NEVER books anything. OFFER THIS ONLY WHEN THE FARE MISSES THE BUDGET THEY GAVE. A search result says over_budget when it does; do not offer a watch on a fare that already fits, and do not offer one to a traveler who never stated a budget. target_price is the TOTAL for the whole party, the same basis the card prices on, and it is normally the budget they already stated. Never invent it","inputSchema":{"type":"object","required":["origin","destination","depart_date","target_price"],"properties":{"origin":{"type":"string"},"expires_on":{"type":"string","default":""},"passengers":{"type":"integer","default":1},"depart_date":{"type":"string"},"destination":{"type":"string"},"return_date":{"type":"string","default":""},"target_price":{"type":"number"},"current_total_price":{"type":"number","default":0}}},"title":"Watch a fare and email when it drops","logicalName":"watch_flight_price","displayName":"Watch a fare and email when it drops","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"watch_stay_price","description":"Watch ONE property from a stays card and email the traveler when the whole-stay total drops to their number. Free, and it NEVER books anything. OFFER THIS ONLY WHEN THE STAY MISSES THE BUDGET THEY GAVE, the same rule the card uses. stay_ref IS NOT SOMETHING YOU CAN WRITE. It comes from the card the traveler is looking at, it is meaningless to you, and there is no way to guess or reconstruct one -- if you do not have it, ask them to press Watch on the card instead of calling this. target_price is","inputSchema":{"type":"object","required":["stay_ref","target_price"],"properties":{"stay_ref":{"type":"string"},"expires_on":{"type":"string","default":""},"target_price":{"type":"number"},"current_total_price":{"type":"number","default":0}}},"title":"Watch a stay and email when it drops","logicalName":"watch_stay_price","displayName":"Watch a stay and email when it drops","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"watch_trip_price","description":"Watch a flight route AND one stay as ONE trip, and email the traveler when the two together drop to their number. Free, and it NEVER books anything. CALL THIS ONLY AFTER THE TRAVELER SAYS TO WATCH IT: a stays result whose `trip.over_together` is true is the moment to SUGGEST it (the flight and the stay each fit the budget, together they do not); the call waits for their yes. stay_ref is the `ref` of the stay on the card they are looking at, copied exactly -- it cannot be written or guessed; if y","inputSchema":{"type":"object","required":["stay_ref","origin","destination","depart_date","target_price"],"properties":{"origin":{"type":"string"},"stay_ref":{"type":"string"},"expires_on":{"type":"string","default":""},"passengers":{"type":"integer","default":1},"depart_date":{"type":"string"},"destination":{"type":"string"},"return_date":{"type":"string","default":""},"target_price":{"type":"number"},"current_total_price":{"type":"number","default":0}}},"title":"Watch a flight and a stay together","logicalName":"watch_trip_price","displayName":"Watch a flight and a stay together","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"list_price_watches","description":"List the fares and stays HeyTripp is watching for this traveler. Use it when they ask what is being watched, or before stopping one so you can name it. last_total is the price at last_checked and NOT today's price: quote the two together or neither.","inputSchema":{"type":"object","properties":{}},"title":"What am I watching","annotations":{"readOnlyHint":true,"untrustedContentHint":true},"logicalName":"list_price_watches","displayName":"What am I watching"},{"name":"list_trips","description":"The traveler's own booked trips: what is held, what it cost, its confirmation numbers, and anything the booking monitor has found since -- a schedule change, an airline cancellation, a price drop still inside a free-cancellation window. Use it for \"what did I book\", \"what is my trip\", \"any updates on my flight\", or before answering anything about a trip they already have. READ-ONLY. Every amount is what was PAID at booking, never a live price, so never quote one as what something costs today. Th","inputSchema":{"type":"object","properties":{}},"title":"What have I booked","annotations":{"readOnlyHint":true,"untrustedContentHint":true},"logicalName":"list_trips","displayName":"What have I booked"},{"name":"get_booking_status","description":"How the account's bookings stand, from our ledger — CANCELLED ones included, with when and why, plus any monitor alerts about them (airline changes, time moves). No reference lists every booking; a confirmation number or TRP- reference narrows to the booking it names — list first and never guess a number. Status is refreshed by our background monitor, not a live supplier call this second: present it that way. READ-ONLY: changing or cancelling anything happens on heytripp.com — offer manage_url,","inputSchema":{"type":"object","properties":{"reference":{"type":"string","default":""}}},"title":"How a booking stands","annotations":{"readOnlyHint":true,"untrustedContentHint":true},"logicalName":"get_booking_status","displayName":"How a booking stands"},{"name":"get_receipt","description":"What was PAID for a booking — the total, its split (base, taxes, what the desk collects), the card (brand and last four), and a savings line when we hold one. Takes a confirmation number or TRP- reference; without one it lists what can be named — read one back, never guess. Every amount is historic and settled at booking, NOT a live price: never quote one as current. READ-ONLY: amending or cancelling happens on heytripp.com — offer manage_url, never claim to have done it.","inputSchema":{"type":"object","properties":{"reference":{"type":"string","default":""}}},"title":"The receipt for a booking","annotations":{"readOnlyHint":true,"untrustedContentHint":true},"logicalName":"get_receipt","displayName":"The receipt for a booking"},{"name":"get_trip_details","description":"ONE trip in full: every booking on it — flights, stay, the lot — with what each cost, when each runs, its confirmation number, the trip's TRP- reference, and any monitor alerts about it. CANCELLED segments are included and must be said plainly. Use it for \"tell me about my Seattle trip\", \"what's on my trip\", or any question about a trip as a whole rather than one booking. No reference lists the trips to name; a TRP- code or any confirmation number on the trip opens it — never guess one. Every am","inputSchema":{"type":"object","properties":{"reference":{"type":"string","default":""}}},"title":"One trip in full","annotations":{"readOnlyHint":true,"untrustedContentHint":true},"logicalName":"get_trip_details","displayName":"One trip in full"},{"name":"why_we_booked","description":"WHY a booking was made, read from the trip's sealed proof trail: what the traveler authorized, what our watch saw, what we chose and over what, and what we then did. Use it for \"why did you book this\", \"why this hotel\", \"how did you pick this flight\". Takes a confirmation number or TRP- reference; without one it lists what can be named — read one back, never guess. THIS IS EVIDENCE, NOT REASONING: relay the steps in the words they carry and add no rationale of your own. When a booking has no ste","inputSchema":{"type":"object","properties":{"reference":{"type":"string","default":""}}},"title":"Why we booked this","annotations":{"readOnlyHint":true,"untrustedContentHint":true},"logicalName":"why_we_booked","displayName":"Why we booked this"},{"name":"stop_price_watch","description":"Stop one price watch. The id looks like TRP-W-XXXXXX. Call list_price_watches first when the traveler did not name one, and never guess an id.","inputSchema":{"type":"object","required":["watch_id"],"properties":{"watch_id":{"type":"string"}}},"title":"Stop watching a price","logicalName":"stop_price_watch","displayName":"Stop watching a price","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"find_activities","description":"Things to do near a named area — attractions, parks, museums — drawn as the HeyTripp card: photograph, TripAdvisor rating with its real vote count, distance, and hours when listed. Ranked by rating weighted by review volume, so a 5.0 from three reviewers does not outrank a landmark. area is a PLACE -- a neighborhood, a landmark, a city -- never an event, a show or a street: \"a Broadway show\" is a plan item, not an area. Pass the user's own words for the place, and ALWAYS pass city when you know","inputSchema":{"type":"object","required":["area"],"properties":{"area":{"type":"string"},"city":{"type":"string","default":""},"when":{"type":"string","default":""},"party":{"type":"integer","default":2},"children":{"type":"integer","default":0},"interest":{"type":"string","default":""}}},"title":"Find things to do","annotations":{"readOnlyHint":true,"untrustedContentHint":true},"logicalName":"find_activities","displayName":"Find things to do"},{"name":"find_restaurants","description":"Restaurants near a named area, drawn as the same HeyTripp card — photograph, TripAdvisor rating with its real vote count, distance, price band, and one map with every pick pinned. CALL THIS for any places-to-eat, restaurants or where-to-eat ask in a HeyTripp conversation, never a web search or a built-in map: the card is the answer. Pass the user's dietary need VERBATIM when they stated one: picks are then ranked by real evidence for it (what TripAdvisor lists, what recent reviews say), each pic","inputSchema":{"type":"object","required":["area"],"properties":{"area":{"type":"string"},"city":{"type":"string","default":""},"when":{"type":"string","default":""},"party":{"type":"integer","default":2},"cuisine":{"type":"string","default":""},"dietary":{"type":"string","default":""},"children":{"type":"integer","default":0}}},"title":"Find places to eat","annotations":{"readOnlyHint":true,"untrustedContentHint":true},"logicalName":"find_restaurants","displayName":"Find places to eat"},{"name":"get_forecast","description":"Weather for a location on one date (YYYY-MM-DD). Within about 14 days this is a real forecast. Beyond that, `source` reads \"historical_proxy\" and the numbers are the SAME DATE LAST YEAR — you MUST present that as a climatological estimate, never as a forecast. For a date that has ALREADY PASSED, `source` reads \"historical\" and the numbers are what was RECORDED on that very date — say what the weather WAS, plainly, neither as a forecast nor hedged as last year's estimate. Answer in a sentence, in","inputSchema":{"type":"object","required":["location","date"],"properties":{"date":{"type":"string"},"location":{"type":"string"}}},"title":"What the weather will be","annotations":{"readOnlyHint":true,"untrustedContentHint":true},"logicalName":"get_forecast","displayName":"What the weather will be"},{"name":"drive_vs_fly","description":"Is a trip drivable, and roughly what the drive would cost. Use it when origin and destination look regional (think under ~500 miles) or the traveler mentions driving. Returns ESTIMATES for two variants — their own car (fuel only, regular and premium both) and a rental road trip — to weigh against real fares. Never assume they own a car: ask. Present the numbers rounded and as estimates, never quotes. status \"too_far\" means say the drive is impractical and move on; \"no_data\" means skip the compar","inputSchema":{"type":"object","required":["origin","destination"],"properties":{"days":{"type":"integer","default":3},"origin":{"type":"string"},"travelers":{"type":"integer","default":1},"destination":{"type":"string"}}},"title":"Could you just drive it","annotations":{"readOnlyHint":true,"untrustedContentHint":true},"logicalName":"drive_vs_fly","displayName":"Could you just drive it"},{"name":"ground_transport_advice","description":"Rideshare or rental at a destination, and roughly what each runs, from curated destination facts (parking rates, whether rideshare is thin, whether a car is a burden downtown). Returns a verdict — rent, rent for part of the trip, or skip the car — with rough dollar bands to present as estimates. status \"no_data\" means the destination is not in the table: advise qualitatively and do NOT invent dollar figures. This app cannot rent the car; it only advises.","inputSchema":{"type":"object","required":["destination"],"properties":{"days":{"type":"integer","default":3},"nights":{"type":"integer","default":0},"party_size":{"type":"integer","default":1},"destination":{"type":"string"}}},"title":"How to get around there","annotations":{"readOnlyHint":true,"untrustedContentHint":true},"logicalName":"ground_transport_advice","displayName":"How to get around there"},{"name":"get_directions","description":"Real distance and travel time between two NAMED places — the hotel to the venue, the airport to downtown — by car, and by public transit when Google knows a route (with the fare when Google states one). Use it for the last-mile question between two specific places; for whether to rent a car at all use ground_transport_advice, and for whole-trip drive-vs-fly use drive_vs_fly. Present times as estimates (\"about 25 minutes\"), never as schedules. status \"no_data\" means say you couldn't get a route a","inputSchema":{"type":"object","required":["from_place","to_place"],"properties":{"to_place":{"type":"string"},"from_place":{"type":"string"}}},"title":"How to get from A to B","annotations":{"readOnlyHint":true,"untrustedContentHint":true},"logicalName":"get_directions","displayName":"How to get from A to B"},{"name":"compare_date_prices","description":"Weekday vs weekend hotel prices at a destination, sampled from TWO REAL SEARCHES of one upcoming week — a Tuesday block and a Friday block. Use it ONLY when the traveler named a destination but has NOT pinned dates, as a gentle nudge before asking for them. It is a seven-day sample, not a season scan: present it as one, in a sentence, and never as a promise about their actual dates. status \"no_data\" or cheaper \"similar\" means no nudge — just ask for dates. For \"when is it cheapest this season\",","inputSchema":{"type":"object","required":["destination"],"properties":{"adults":{"type":"integer","default":1},"nights":{"type":"integer","default":2},"destination":{"type":"string"}}},"title":"Would moving the dates save money","annotations":{"readOnlyHint":true,"untrustedContentHint":true},"logicalName":"compare_date_prices","displayName":"Would moving the dates save money"},{"name":"find_cheapest_flight_dates","description":"Which dates in an OPEN window are cheapest to FLY, and whether midweek or weekend departures come in cheaper. This is the airfare counterpart to find_cheapest_week, which is lodging only. Use it when the traveler has a destination and a rough window but NO fixed dates — \"somewhere in November\", \"a long weekend this autumn\", \"is it cheaper midweek\". EVERY PROBE IS A REAL FARE SEARCH, so this samples up to 8 departure dates across the window rather than walking it: present the result as a steer to","inputSchema":{"type":"object","required":["origin","destination","earliest","latest","passengers"],"properties":{"latest":{"type":"string"},"origin":{"type":"string"},"earliest":{"type":"string"},"passengers":{"type":"integer"},"destination":{"type":"string"},"trip_nights":{"type":"integer","default":0}}},"title":"When is it cheapest to fly","annotations":{"readOnlyHint":true,"untrustedContentHint":true},"logicalName":"find_cheapest_flight_dates","displayName":"When is it cheapest to fly"},{"name":"get_hotel_facts","description":"Check-in window, checkout time and what the desk asks for (photo ID, deposit, age rules), for ONE stay from a hotel search. stay_ref is the `ref` field on the option the traveler is asking about, passed VERBATIM; it is NOT something you can write or reconstruct — if you do not have one, run the stay search again first. These are the hotel's PUBLISHED rules, not a confirmation for this specific stay: say so. For any other question about the property (parking and its cost, pool, pets, breakfast ho","inputSchema":{"type":"object","required":["stay_ref"],"properties":{"question":{"type":"string","default":""},"stay_ref":{"type":"string"}}},"title":"The hotel's own check-in rules","annotations":{"readOnlyHint":true,"untrustedContentHint":true},"logicalName":"get_hotel_facts","displayName":"The hotel's own check-in rules"},{"name":"save_trip_plan","description":"Save the trip plan you and the traveler built into their HeyTripp account as a Planning trip — it appears on the site's Planning tab and on the trips card. Call it ONLY when the traveler asks to save. THE PLAN HOLDS ONLY WHAT THE CARDS ACTUALLY SHOWED: flight items only for fares search_flights returned (with the searched times, never an idealized schedule), stays only from search_hotels, activities and restaurants only from find_activities / find_restaurants — never places or fares from memory.","inputSchema":{"type":"object","$defs":{"PlanItemIn":{"type":"object","required":["kind","title"],"properties":{"day":{"anyOf":[{"type":"integer"},{"type":"null"}],"default":null},"kind":{"type":"string"},"image":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null},"place":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null},"price":{"anyOf":[{"type":"number"},{"type":"null"}],"default":null},"end_dt":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null},"category":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null},"currency":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null},"start_dt":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null},"fare_note":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null},"airline_code":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null},"destination_index":{"anyOf":[{"type":"integer"},{"type":"null"}],"default":null}}},"PlanDestinationIn":{"type":"object","required":["city","arrive_date","depart_date"],"properties":{"city":{"type":"string"},"arrive_date":{"type":"string"},"depart_date":{"type":"string"}}}},"required":["title","origin","destinations","start_date","end_date","travelers","items"],"properties":{"items":{"type":"array","items":{"$ref":"#/$defs/PlanItemIn"}},"origin":{"type":"string"},"plan_id":{"type":"string","default":""},"end_date":{"type":"string"},"travelers":{"type":"integer"},"start_date":{"type":"string"},"destinations":{"type":"array","items":{"$ref":"#/$defs/PlanDestinationIn"}}}},"title":"Save the plan to your account","logicalName":"save_trip_plan","displayName":"Save the plan to your account","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"get_hotel_reviews","description":"Recent guest reviews and subratings (cleanliness, location, service…) for ONE stay from a hotel search — the same Tripadvisor guest block the site shows. stay_ref is the `ref` field on the option the traveler is asking about, passed VERBATIM; it is NOT something you can write or reconstruct — if you do not have one, run the stay search again first. Summarize the scores in your own words, quote AT MOST a line or two from an excerpt with credit to Tripadvisor, and never present an excerpt as the w","inputSchema":{"type":"object","required":["stay_ref"],"properties":{"stay_ref":{"type":"string"}}},"title":"What guests say about this stay","annotations":{"readOnlyHint":true,"untrustedContentHint":true},"logicalName":"get_hotel_reviews","displayName":"What guests say about this stay"},{"name":"get_bag_fees","description":"The carrier's published bag rates — carry-on and first/second checked — from the same curated table the site's total-cost ranking uses. Rates are PER BAG, PER DIRECTION, at booking-time midpoints: a round trip pays each fee twice, and airport/gate rates run higher, so present figures as \"about\" and never as quotes. Pass fare_brand when you know it (Basic Economy strips differ from standard). status \"no_data\" means the carrier is not in the table: point at the airline's own site and do NOT invent","inputSchema":{"type":"object","required":["airline_code"],"properties":{"fare_brand":{"type":"string","default":""},"airline_code":{"type":"string"}}},"title":"What bags cost on this airline","annotations":{"readOnlyHint":true,"untrustedContentHint":true},"logicalName":"get_bag_fees","displayName":"What bags cost on this airline"},{"name":"get_room_details","description":"The hotel's own room list with its photos, for ONE stay from a hotel search — drawn as a card, with the room the offer is for leading it. stay_ref is the `ref` field on the option, passed VERBATIM; you cannot write or reconstruct one. The photos render on the card, so describe rather than re-list, and never promise a specific room: assignment is the hotel's at check-in.","inputSchema":{"type":"object","required":["stay_ref"],"properties":{"stay_ref":{"type":"string"}}},"title":"See the hotel's rooms","annotations":{"readOnlyHint":true,"untrustedContentHint":true},"logicalName":"get_room_details","displayName":"See the hotel's rooms"},{"name":"get_status_perks","description":"What a traveler's airline elite status is worth on a given carrier — free bags, priority boarding, seat choice, upgrade eligibility, lounge access — plus which alliance the carrier belongs to (call with just airline_code for alliance-only). Pass the program and tier AS THE TRAVELER NAMES THEM. The figures are the conservative floor of published allowances; an upgrade is a CHANCE, never a promise, and lounge access is alliance-tier and international-only — pass origin/destination so that scoping","inputSchema":{"type":"object","required":["airline_code"],"properties":{"origin":{"type":"string","default":""},"status":{"type":"string","default":""},"program":{"type":"string","default":""},"destination":{"type":"string","default":""},"airline_code":{"type":"string"}}},"title":"What elite status is worth here","annotations":{"readOnlyHint":true,"untrustedContentHint":true},"logicalName":"get_status_perks","displayName":"What elite status is worth here"},{"name":"show_trip_plan","description":"Draw one of the traveler's saved plans day by day — chat-saved and site-built alike, READ-ONLY. Call with no plan_id to list the account's plans first; never guess an id. To change a plan, call save_trip_plan again with its plan_id (chat-saved plans only; site-built plans are edited on the site).","inputSchema":{"type":"object","properties":{"plan_id":{"type":"string","default":""}}},"title":"Show a saved plan","annotations":{"readOnlyHint":true,"untrustedContentHint":true},"logicalName":"show_trip_plan","displayName":"Show a saved plan"},{"name":"share_plan","description":"Mint a VIEW-ONLY link to one of the traveler's saved plans, so they can send it to someone. Call with no plan_id to list the plans first — NEVER guess an id here: guessing wrong does not draw the wrong card, it publishes the wrong trip. Anyone holding the link can read the plan without signing in, so say that plainly when you offer it. The link shows the trip and its dates and never the traveler's name, bookings or payment details. YOU CANNOT SEE THE LINK — it goes to the card, not to you, so ne","inputSchema":{"type":"object","properties":{"plan_id":{"type":"string","default":""}}},"title":"Make a link to a plan","logicalName":"share_plan","displayName":"Make a link to a plan","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"stop_sharing","description":"Withdraw EVERY share link for one plan at once, including links the traveler already sent. Takes the plan_id. Use it whenever they say to stop sharing, unshare, or take a link down. This is the only way to undo a share, because a link that has been sent cannot be unsent — so never tell a traveler a link is private when what you mean is that it is revocable.","inputSchema":{"type":"object","properties":{"plan_id":{"type":"string","default":""}}},"title":"Stop sharing a plan","logicalName":"stop_sharing","displayName":"Stop sharing a plan","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"get_stay_details","description":"Everything the stays card's detail drawer shows, in one call: check-in rules, the Tripadvisor guest block, and the offer's own room photos. The CARD calls this itself when the traveler opens its Details drawer — you rarely need to. If you do, stay_ref is the option's `ref` field, passed VERBATIM; sections can be null when nothing is published, and a null section is said, never filled from memory.","inputSchema":{"type":"object","required":["stay_ref"],"properties":{"stay_ref":{"type":"string"}}},"title":"Open the stay's detail drawer","annotations":{"readOnlyHint":true,"untrustedContentHint":true},"logicalName":"get_stay_details","displayName":"Open the stay's detail drawer"},{"name":"ask_heytripp_support","description":"HeyTripp's own help notes: how HeyTripp works, fees and who charges the card, cancellations and refunds, confirmations and receipts, price watches and autopay, text alerts, accounts and sign-in, sharing trips, privacy, and how to reach a person. Call this BEFORE answering ANY question about HeyTripp itself or its policies, and answer ONLY from what comes back, in your own words -- never from memory. If nothing fits, say you are not sure and offer to pass them to a person (talk_to_a_person). Neve","inputSchema":{"type":"object","required":["question"],"properties":{"question":{"type":"string"}}},"title":"Ask HeyTripp's help notes","annotations":{"readOnlyHint":true,"untrustedContentHint":true},"logicalName":"ask_heytripp_support","displayName":"Ask HeyTripp's help notes"},{"name":"what_did_you_send_me","description":"What HeyTripp has actually SENT this traveler -- confirmation and receipt emails, price alerts, texts -- with the provider's delivery result (delivered, bounced, complained) when known. Call this when they say a confirmation, receipt, or alert never arrived, BEFORE suggesting a spam folder: if nothing was sent, say that; if it bounced, the address on file is wrong; if it was delivered, the spam folder is the honest next place. Reads the connected account's own messages only. Takes no arguments.","inputSchema":{"type":"object","properties":{}},"title":"What HeyTripp sent you","annotations":{"readOnlyHint":true,"untrustedContentHint":true},"logicalName":"what_did_you_send_me","displayName":"What HeyTripp sent you"},{"name":"talk_to_a_person","description":"Pass this conversation to a PERSON on the HeyTripp team, by email to the team's inbox. The traveler is told the team replies by email to the address on their account, usually within a day, with a reference. When they first ask for a person, find out what is wrong and try to sort it with the tools before calling this. Call it once it is something only a person can do: a charge, refund, or double-billing dispute; a booking that looks failed, stuck, or unknown; the help notes (ask_heytripp_support)","inputSchema":{"type":"object","required":["summary"],"properties":{"summary":{"type":"string"},"category":{"type":"string","default":"other"}}},"title":"Pass this to the HeyTripp team","logicalName":"talk_to_a_person","displayName":"Pass this to the HeyTripp team","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"get_my_preferences","description":"The traveler's OWN saved usual, from their HeyTripp account: home airport and city, cabin, nonstop-or-cheapest, hotel star floor and budget band, how they get around, how they get to the airport, standing preferences in their own words, and airline status tiers (never numbers). Call it once, BEFORE the first search in a conversation, and pre-fill a search only from what it returns -- these are answers the traveler gave earlier, which is the one kind of default allowed. Say what you are using (\"y","inputSchema":{"type":"object","properties":{}},"title":"What the traveler usually does","annotations":{"readOnlyHint":true,"untrustedContentHint":true},"logicalName":"get_my_preferences","displayName":"What the traveler usually does"},{"name":"set_my_preferences","description":"Remember a LASTING preference the traveler stated in their own words -- \"I always fly business\", \"four stars is my floor\", \"I'm based in Denver\", \"I never rent cars\". Call it ONLY for a standing preference said as one, never from a single search choice or a one-off answer: picking business on this trip is not a preference, and neither is a budget for this trip. Pass only the fields they stated; every field left blank stays exactly as it was. cabin: economy, premium, business or first. priority:","inputSchema":{"type":"object","properties":{"name":{"type":"string","default":""},"note":{"type":"string","default":""},"cabin":{"type":"string","default":""},"priority":{"type":"string","default":""},"home_city":{"type":"string","default":""},"min_stars":{"type":"integer","default":0},"budget_band":{"type":"string","default":""},"preferences":{"type":"string","default":""},"home_airport":{"type":"string","default":""},"ground_transport":{"type":"string","default":""}}},"title":"Remember a lasting preference","logicalName":"set_my_preferences","displayName":"Remember a lasting preference","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"update_price_watch","description":"Move a running price watch's target and/or the date it stops, in place -- the same edit the traveler could make on heytripp.com/watches. Give target_price, expires_on, or both; the one you leave out stays as it is. The id looks like TRP-W-XXXXXX: call list_price_watches first when the traveler did not name one, and never guess an id. target_price is on the watch's own basis -- the whole-party total for a flight, the whole-stay total for a stay, both together for a trip -- and it is the traveler'","inputSchema":{"type":"object","required":["watch_id"],"properties":{"watch_id":{"type":"string"},"expires_on":{"type":"string","default":""},"target_price":{"type":"number","default":0}}},"title":"Change a watch's target or end date","logicalName":"update_price_watch","displayName":"Change a watch's target or end date","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"mute_price_watch","description":"Turn off the emails for one price watch (muted=true, the default) or turn them back on (muted=false). The watch keeps watching either way and alerts stay in the app on heytripp.com; only email moves. Use it when the traveler says the emails are too many, not when they want the watch stopped -- that is stop_price_watch. The id looks like TRP-W-XXXXXX; call list_price_watches first when they did not name one.","inputSchema":{"type":"object","required":["watch_id"],"properties":{"muted":{"type":"boolean","default":true},"watch_id":{"type":"string"}}},"title":"Mute or unmute a watch's emails","logicalName":"mute_price_watch","displayName":"Mute or unmute a watch's emails","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"is_this_a_normal_price","description":"Whether a flight price is normal for its route right now: the typical band public fares run in, today's public low against it, and the last ~60 days of public fares for the route. CALL THIS, never a web search, whenever a traveler asks if a price is normal, fair, cheap, high, a good deal, or worth waiting on (\"is $120 normal for SFO to LAX?\"), OFFER IT when they ask whether to book now or wait, and call it BEFORE setting a watch target, so the number is chosen rather than guessed. Every figure i","inputSchema":{"type":"object","required":["origin","destination","depart_date"],"properties":{"origin":{"type":"string"},"passengers":{"type":"integer","default":1},"depart_date":{"type":"string"},"destination":{"type":"string"},"return_date":{"type":"string","default":""},"current_total_price":{"type":"number","default":0}}},"title":"Is today's price normal for this route","annotations":{"readOnlyHint":true,"untrustedContentHint":true},"logicalName":"is_this_a_normal_price","displayName":"Is today's price normal for this route"},{"name":"text_me_alerts","description":"Turn on HeyTripp text alerts for the signed-in traveler by texting a six-digit code to their mobile number to verify it. CALL THIS ONLY WHEN THE TRAVELER ASKS FOR TEXTS. Never ask for a number 'just in case', and never pass one they did not give you in this conversation. US and Canadian mobiles only. The number is used only for HeyTripp alerts -- a price watch hitting, trip check-ins, flight status, booking confirmations, refunds -- and their replies land in their HeyTripp chat. timezone is the","inputSchema":{"type":"object","required":["phone"],"properties":{"phone":{"type":"string"},"timezone":{"type":"string","default":""}}},"title":"Turn on HeyTripp text alerts","logicalName":"text_me_alerts","displayName":"Turn on HeyTripp text alerts","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"confirm_text_code","description":"Finish turning on HeyTripp text alerts by checking the six-digit code the traveler just received by text. Pass the digits exactly as they typed them; never repeat them back, store them, or guess them. On verified, tell them texts are on and relay the message's own list of what HeyTripp texts about -- do not add to it. wrong_code means ask them to check the text and try again. too_many_tries or no_code_pending means call text_me_alerts again for a fresh code.","inputSchema":{"type":"object","required":["code"],"properties":{"code":{"type":"string"}}},"title":"Confirm the text code","logicalName":"confirm_text_code","displayName":"Confirm the text code","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"text_alert_status","description":"Whether HeyTripp text alerts are on for the signed-in traveler: the number masked to its last four digits (never the full number), whether it is verified, on or off, or a code is still waiting. Read-only. Call it when they ask about texts, or before offering to set them up.","inputSchema":{"type":"object","properties":{}},"title":"Are HeyTripp texts on","annotations":{"readOnlyHint":true,"untrustedContentHint":true},"logicalName":"text_alert_status","displayName":"Are HeyTripp texts on"},{"name":"stop_text_alerts","description":"Remove the traveler's mobile number from HeyTripp and turn text alerts off -- the same as Remove in Settings on heytripp.com. Call it only when the traveler asks to stop texts or remove their number. Their price watches keep alerting in app and by email.","inputSchema":{"type":"object","properties":{}},"title":"Stop HeyTripp texts","logicalName":"stop_text_alerts","displayName":"Stop HeyTripp texts","annotations":{"untrustedContentHint":true,"readOnlyHint":true}}],"toolSource":"directory_preview","agentAction":"both","installLinks":[{"id":"cursor","label":"Cursor","href":"cursor://anysphere.cursor-deeplink/mcp/install?name=Tripp-Travel-made-easy&config=eyJ1cmwiOiAiaHR0cHM6Ly9tY3AuaGV5dHJpcHAuY29tL21jcCJ9"},{"id":"vscode","label":"VS Code","href":"vscode:mcp/install?%7B%22name%22%3A%22Tripp-Travel-made-easy%22%2C%22type%22%3A%22http%22%2C%22url%22%3A%22https%3A%2F%2Fmcp.heytripp.com%2Fmcp%22%7D"},{"id":"vscode-insiders","label":"VS Code Insiders","href":"vscode-insiders:mcp/install?%7B%22name%22%3A%22Tripp-Travel-made-easy%22%2C%22type%22%3A%22http%22%2C%22url%22%3A%22https%3A%2F%2Fmcp.heytripp.com%2Fmcp%22%7D"},{"id":"claude-web","label":"Claude.ai","href":"https://claude.ai/customize/connectors?modal=add-custom-connector&connectorName=Tripp+%C2%B7+Travel+made+easy&connectorUrl=https%3A%2F%2Fmcp.heytripp.com%2Fmcp"},{"id":"codex","label":"Codex","copyText":"codex mcp add \"Tripp-Travel-made-easy\" --url \"https://mcp.heytripp.com/mcp\""},{"id":"chatgpt","label":"ChatGPT","href":"https://www.mcpbundles.com/docs/integrations/chatgpt"}],"catalogUrl":"https://www.mcpbundles.com/api/directory/v1/servers/heytripp-mcp-daf0dfab0f","callUrl":"https://www.mcpbundles.com/api/directory/v1/servers/heytripp-mcp-daf0dfab0f/tools/{tool}","mcpServerUrl":"https://mcp.heytripp.com/mcp","liveCatalogUrl":"https://www.mcpbundles.com/api/directory/v1/servers/heytripp-mcp-daf0dfab0f?live=1"}