Thailand Fun Experiences
RemoteAbout Thailand Fun Experiences
Thailand Fun Experiences is a Phuket activity discovery MCP server for assistants planning outings for specific travel parties. It combines suitability checks with weather, sea conditions, transfer times, diverse recommendations, and tracked booking links.
Key features
- 01Search activities by party and constraints
- 02Rank a diverse set of recommendations
- 03Include live weather and sea context
- 04Assess age, mobility, and motion suitability
- 05Return availability-linked booking URLs
- 06Retrieve full details by experience ID
Use cases
- 01Plan a Phuket outing around forecast conditions
- 02Filter activities for a family or group
- 03Compare options by travel time and suitability
MCP support
Provides `search_experiences` and `get_experience` tools to MCP clients over a streamable HTTP endpoint.
Configuration
Remote servers need no local install. Pick your client, then copy the config or install in one click.
https://thailandfunexperiences.com/mcpclaude mcp add --transport http com-thailandfunexperiences-thailand-fun-experiences https://thailandfunexperiences.com/mcp{"mcpServers":{"com-thailandfunexperiences-thailand-fun-experiences":{"type":"http","url":"https://thailandfunexperiences.com/mcp"}}}Open in Cursor{"servers":{"com-thailandfunexperiences-thailand-fun-experiences":{"type":"http","url":"https://thailandfunexperiences.com/mcp"}}}Open in VS Code{"mcpServers":{"com-thailandfunexperiences-thailand-fun-experiences":{"type":"http","url":"https://thailandfunexperiences.com/mcp"}}}{"mcpServers":{"com-thailandfunexperiences-thailand-fun-experiences":{"serverUrl":"https://thailandfunexperiences.com/mcp"}}}Run commands in a terminal; paste JSON into the client’s MCP config and restart. Servers that need sign-in will prompt on first connect.
Tools
Details
From the project READMEThailand 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.
{
"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.
{"experience_id": "exp_27613P9"}
Stack
- Runtime: Node 22, TypeScript (strict), ESM
- Monorepo: pnpm workspaces
- DB: Postgres 16 + PostGIS, Drizzle ORM
- MCP:
@modelcontextprotocol/sdkstreamable 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 overrides
2. operator_terms — verified T&C from specific operators
3. 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
Comments
New to MCP?
From what the protocol is to installing your first server, these answers cover most first questions.
An open protocol that defines how AI applications connect to external tools and data in a uniform way. Clients talk to the model; MCP servers provide tools, resources and prompt templates. They exchange standard messages, so one server can be reused by many clients.