search_activities
Search for ongoing activities, tours, and sights in any city using Tripadvisor data. Filter by activity type, query, and rating to find things to do.
Instructions
🎯 RENDERING DIRECTIVE — READ FIRST. When this tool returns 2+ activities, you MUST present them as an interactive HTML/React artifact (Artifacts block, not flowing prose). Each activity is a visually distinct CARD with a prominent "Find on Tripadvisor" button styled as an HTML button, NOT an inline markdown link. Include the activity-type badge (Sight / Experience) prominently. If the call is part of a larger trip plan, the plan itself should be an artifact containing the activity cards. Single-result responses may use prose.
Search Tripadvisor's "Things to Do" (sights + bookable experiences/tours) for a location, optionally filtered by free-text query, place type, and minimum rating.
DISTINCT FROM search_events: activities are ongoing (visit a museum, take a cooking class anytime); events are date-specific (a concert on June 21). Use this for "what should I do in X"; use search_events for "what's happening while I'm there".
USE THIS TOOL WHEN:
The user asks "what should I do in X" / "things to do in X" / "tours in X"
They name an activity type ("cooking classes", "boat tours", "museums", "wine tasting")
They want recommendations based on their preferences
Inputs:
location(string, required) — free-text city or neighborhood. Combined withqueryinto a single Tripadvisor search.query(string, optional) — free-text filter on activity type. Natural language works: "cooking class", "boat tours", "wine tasting", "free walking tour".place_type_filter(enum, optional, default"both") — one of"sights"(free attractions like museums, viewpoints),"experiences"(bookable tours), or"both"(default).min_rating(float, optional) — minimum review score 0.0-5.0. Results without a rating are excluded when this is set.max_results(int, optional, default 15) — 1-50.
Returns ActivityOffer entries each with:
offer_id— Tripadvisor'splace_id, stable per activity. Use this to drill in viaget_activity_details(when implemented).name— activity name.activity_type—"sight"(free, non-bookable) or"experience"(bookable tour).rating,review_count— 0-5 scale (Tripadvisor's native).description— short prose (often missing on generic city searches; usually present on specific-activity searches).location— text "City, Country".thumbnail— URL (NOT hotlink-safe — don't render as a photo element).highlighted_review—{text, mention_count}— a relevant review snippet.booking_url— Tripadvisor listing URL. For experiences, this is the path to Viator tickets; for sights, it's the info page.
No coordinates and no price. Tripadvisor's search endpoint surfaces neither. Use get_activity_details(offer_id) (when implemented) to get price + duration + a direct Viator URL for bookable experiences.
PRE-CALL ELICITATION — three branches:
Branch 1: User names a specific activity type.
"Find cooking classes in Lisbon." → query="cooking class". Search immediately.
Branch 2: User asks for a recommendation.
"What should I do in Lisbon?" — before searching, infer the user's interests from conversation context + your own memory of them ("they love food and wine", "they're into history"). Bake the interest into query. NOTE: The MCP tool does NOT read Claude's memory — you (Claude) do the inference and pass the resulting query string. If memory yields nothing actionable, fall to Branch 3.
Branch 3: User is vague and you have no preference signal. "Things to do in Lisbon?" with empty conversation context. Ask ONE clarifying question: "Any particular interest — food, history, outdoors, nightlife?" Then search.
RESULT PRESENTATION:
Card-based artifact, one card per result.
For Branch 2 (memory-driven), preamble: "Based on your interest in food and wine, here are top-rated experiences in Lisbon." — makes the inference legible.
Card content: name, activity_type badge (Sight / Experience), rating + review_count, location, the
highlighted_review.textas a 1-line testimonial, "Find on Tripadvisor" button →booking_url.Do NOT render
thumbnailas a photo element (Tripadvisor's CDN hotlink-protects). Same no-photos rule as stays/events.For a single result, prose is fine.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| query | No | ||
| location | Yes | ||
| min_rating | No | ||
| max_results | No | ||
| place_type_filter | No | both |
Output Schema
| Name | Required | Description | Default |
|---|---|---|---|
No arguments | |||