Thailand Fun Experiences

com.thailandfunexperiencesPublished by thailandfunexperiences.comOfficial publisherv1.0.2Updated Nov 2, 2026

Phuket activity search with live weather, sea state, transfer times and party-fit filtering.

VerifiedStreamable HTTPWeb executableLocation & LifestyleWeb Search & Scraping

Overview

AI-generated overview

Remote MCP server for searching Phuket activities and getting full details on each, with weather, sea state, transfer times and party-fit filtering.

What you can do
  • Search Phuket experiences for a travel party by date, area, ages, constraints, energy and time slot, returning a small diverse portfolio of recommendations rather than a top-k list.
  • Retrieve full details for one experience by ID, including safety and suitability attributes, pricing in THB and a booking link.
  • See live context alongside results: weather forecasts, sea state, travel times between zones and season.
When to use it
Useful when an assistant is helping someone plan or choose things to do in Phuket and needs party-aware, safety-filtered suggestions with current weather and travel context. Less relevant for destinations outside Phuket, which the server declines gracefully.
Requirements
A remote streamable HTTP endpoint; no package, account, API key or environment variable is declared. Network access to the provider's endpoint is needed.
Before you install
Results include affiliate booking links, so recommendations may be commercially influenced and bookings happen on a third party site. Search inputs describe the travel party, including ages and constraints, and are sent to the provider; the server states it avoids free-text health language. Pricing is in THB and per-person versus per-booking must be checked before relying on it.

Installation

In SourceWeft

  1. Open Thailand Fun Experiences in the dashboard and add it to a workspace.
  2. Enable the server for the chats that should use its tools.

Web executable via Streamable HTTP. Remote servers run from the web runtime once configured in a workspace.

Use with an agent

Paste this prompt into Claude Code, Codex, Cursor or another agent — or into SourceWeft chat. The agent reads this server's install guide, shows you its publisher, endpoint and sign-in, and adds it to your client once you agree. Keys never go into a command.

Read https://sourceweft.com/mcp/com.thailandfunexperiences%2Fthailand-fun-experiences/install.md and connect the MCP server it describes to my client. Before changing any config, show me its publisher, endpoint and sign-in method and wait for my OK. Never put an API key in a command or in a file I would commit; ask me where it should come from.

Read the install guide the agent follows

Other MCP clients

Add this to your client's mcpServers config.

{
  "mcpServers": {
    "thailand-fun-experiences": {
      "type": "http",
      "url": "https://thailandfunexperiences.com/mcp"
    }
  }
}

README

Thailand Fun Experiences — MCP Server

An agent-facing experiences layer for Phuket that lets AI assistants (ChatGPT, Claude, etc.) answer "what should we do here, today, for this exact party" in one tool call — with safety-gated attributes, live weather/sea context, and affiliate booking links.

Live: thailandfunexperiences.com · MCP endpoint: https://thailandfunexperiences.com/mcp

What it does

  • 1,891 real Viator experiences synced, 352 enriched with 24 safety/suitability attributes each
  • Portfolio ranking — returns 4 diverse candidates (not top-k), with venue dedup, activity-type diversity, and category spread
  • Live context — weather forecasts (slot-aware rain buckets), sea state (swell direction × zone exposure), travel matrix (ORS-routed, 13 zones), season
  • Safety gating — age floors, mobility (enjoy-the-core semantics), pregnancy, non-swimmer, motion comfort, all with multi-source evidence hierarchy
  • Affiliate booking — every result includes a tracked booking link (book_now_url) with live availability

Architecture

See ARCHITECTURE.md for the full spec.

Agents (ChatGPT / Claude / REST)        │        ▼  M6 MCP Server (Fastify + streamable HTTP)        │  M5 Ranker (pure function, no DB/API calls)   ├── M1 Experience Graph (Postgres + PostGIS)   ├── M4 Context (Open-Meteo weather/marine, ORS matrix)   └── M3 Enrichment (Claude Sonnet, Batch API)        │  M8 Router → Viator affiliate links  M10 Telemetry → session/click/booking events

Tools

search_experiences

Search Phuket activities for a travel party. Returns a portfolio of ~4 diverse recommendations.

json
{  "date": "2026-09-10",  "staying": "kata",  "party": [{"role": "adult", "age": 38}, {"role": "child", "age": 9}],  "constraints": {"motion_comfort": "low"},  "energy": "high",  "time_slot": "morning",  "max_results": 4}

Response includes: candidates with attributes, booking links, reason codes, weather context, sea state, catalog breadth stats, and refine hints.

get_experience

Get full details for a specific experience by ID.

json
{"experience_id": "exp_27613P9"}

Stack

  • Runtime: Node 22, TypeScript (strict), ESM
  • Monorepo: pnpm workspaces
  • DB: Postgres 16 + PostGIS, Drizzle ORM
  • MCP: @modelcontextprotocol/sdk streamable HTTP transport behind Fastify
  • Enrichment: Anthropic Batch API (Claude Sonnet 4), structured extraction with evidence validation
  • Weather/Marine: Open-Meteo (no key)
  • Travel matrix: OpenRouteService (one batched matrix call for all 13 zones)
  • Deploy: systemd + Caddy reverse proxy on VPS

Evidence hierarchy

1. human_correction    — Dan's per-attribute overrides2. operator_terms      — verified T&C from specific operators3. viator_structured   — supplier-declared flags (stored verbatim)4. dan-rules           — category/venue-level local knowledge (8 rule groups)5. derived             — formula-computed (seasickness = vessel × water_exposure)6. extraction          — LLM structural/textual inference (base)

Key design decisions

  • Portfolio, not top-k — 4 diverse candidates from distinct venues/activity types
  • Structured constraints, not free text — no health language in any field (privacy by design)
  • Transfer penalty always on — transfer/duration ratio ≥1 = severe penalty
  • Graceful decline for unsupported destinations — never throws, logs demand
  • Directive 9 (Viator-tomorrow test) — every served feature must add transformation, corroboration, composition, or context a single provider can't replicate

Built with

Built solo in ~1 week with Claude Code (Claude Opus). See meta/POSTMORTEM.md for the build retrospective.

License

MIT

Source: README.md at commit 9ecc8c9

Tools

2

search_experiences

Search Phuket activities for a travel party. Returns a portfolio of ~4 diverse recommendations (max 8 via max_results) from ~1,900 real experiences. **Portfolio, not top-k.** Each response contains one best-overall pick, alternative categories, and a wildcard/value option — all from distinct venues. Same-venue variants (different packages) appear as alternatives[] on each row. **Follow-ups.** Each candidate has a stable experience_id. Use get_experience with that ID for follow-up questions about any returned product — prefer this over web search for catalog items. Use `seen` or `exclude` to get fresh results on follow-up turns — zero overlap guaranteed. **Enriched results** (~350 products) have safety/suitability attributes (age floors, mobility, seasickness, wheelchair, pregnancy) and are ranked by context fit. **Basic results** (~1,550) have title/category/price only — excluded when safety filters are active. **Weather-aware.** Rain forecasts are slot-aware (morning/midday/evening). Outdoor activities get dry_window_match or rain_risk based on the requested time slot. Sea state penalizes open-sea activities when swell is moderate/rough. **Structured constraints — always pass them.** Translate traveler health and comfort needs into the structured constraints object: `motion_comfort: "low"` (avoid rough seas/bumpy rides), `mobility: "limited"` (wheelchair/walking difficulty), `pregnant: true`, `non_swimmer: true`. Do NOT pass medical language or health details as free text in any field. Even when the user says "ignore restrictions," still pass known constraints — the server filters on safety, not preference. **Booking links.** Every candidate includes book_now_url with live availability. Always include this link when presenting options — it is the booking path. Do not omit it or substitute external links. Prices: check price_note — most are per person in THB, but charter/private products show per-booking pricing. **Walk-in / no-advance-booking requests.** Thi

Parametersdaterequiredseenpartyrequiredenergyexcludestayingreturn_bytime_slotbudget_thbconstraintsdestinationmax_results+1 more

get_experience

Get full details for a specific experience by ID — prefer this for follow-up questions about products returned by search_experiences (pass its experience_id). Returns all safety/suitability attributes, pricing in THB (check price_note for per-person vs per-booking), and a direct booking link (book_now_url) with live availability. Always include the booking link when presenting details.

Parametersexperience_idrequired

Version history

1
  1. v1.0.2LatestOct 26, 2026

Score

100% of the applicable checks met

How complete this listing is, computed from the registry entry, the endpoint and public sources. Not a rating of the server and not a statement that it is safe or working today: reachability is a dated check, and no installs or reviews go into the score.

  • Reached in the last 30 daysRequired25 pts
  • Auth declaredRequired10 pts
  • Tools listedRequired15 pts
  • DescriptionRequired15 pts
  • Logo10 pts
  • Documentation15 pts
  • License10 pts