Thailand Fun Experiences について
Thailand Fun Experiencesは、Phuketでの外出を旅行グループに合わせて探すMCPサーバーです。参加適性の確認に天候・海況・移動時間、多様な候補、追跡可能な予約リンクを組み合わせます。
主な機能
- 01グループや条件に応じた体験検索
- 02多様な候補の提示
- 03最新の天候・海況情報
- 04年齢・移動能力・乗り物適性の確認
- 05空き状況付き予約リンク
- 06体験IDによる詳細取得
活用シーン
- 01天気予報に合わせたPhuketの予定作成
- 02家族やグループ向け体験の絞り込み
- 03移動時間と適性による候補比較
MCP 対応
streamable HTTPエンドポイントを通じて、MCPクライアントに`search_experiences`と`get_experience`ツールを提供します。
設定
リモートサーバーはインストール不要です。クライアントを選んで設定をコピーするか、ワンクリックで導入できます。
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"}}}Cursor で開く{"servers":{"com-thailandfunexperiences-thailand-fun-experiences":{"type":"http","url":"https://thailandfunexperiences.com/mcp"}}}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"}}}コマンドはターミナルで実行し、JSON は各クライアントの MCP 設定に貼り付けて再起動します。認可が必要なサーバーは初回接続時にログインを求めます。
ツール
詳細
Thailand Fun Experiences — MCP サーバー
プーケット向けのエージェント対応型体験レイヤーです。AI アシスタント(ChatGPT、Claude など)が、安全性を考慮した属性、リアルタイムの天候・海況情報、アフィリエイト予約リンクとともに、「ここで、今日、このメンバーで何をすればいいですか?」という質問に、1 回のツール呼び出しで答えられます。
公開中: thailandfunexperiences.com · MCP エンドポイント:https://thailandfunexperiences.com/mcp
できること
- 実在する Viator の体験 1,891 件を同期し、そのうち 352 件には、それぞれ 24 個の安全性・適性属性を付与しています
- ポートフォリオランキング — 上位から 4 件を返すのではなく、多様性のある候補を 4 件返します(会場の重複排除、アクティビティの種類の多様化、カテゴリーの分散を実施)
- リアルタイム情報 — 天気予報(時間帯を考慮した降雨区分)、海況(うねりの方向 × ゾーンの露出度)、移動マトリックス(ORS による経路計算、13 ゾーン)、季節
- 安全性による絞り込み — 年齢制限、移動能力(中心となる体験を楽しめるかを基準とする意味論)、妊娠、泳げない方、乗り物酔いのしやすさを、複数の情報源に基づくエビデンス階層で考慮します
- アフィリエイト予約 — すべての結果に、リアルタイムの空き状況を確認できる、追跡可能な予約リンク(
book_now_url)が含まれます
アーキテクチャ
詳細な仕様については、ARCHITECTURE.md を参照してください。
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
ツール
search_experiences
旅行メンバーに合わせて、プーケットのアクティビティを検索します。多様性のあるおすすめを約 4 件まとめて返します。
{
"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
}
レスポンスには、属性、予約リンク、理由コード、天候情報、海況、カタログの幅広さを示す統計、検索条件を調整するためのヒントを含む候補が含まれます。
get_experience
ID を指定して、特定の体験の詳細を取得します。
{"experience_id": "exp_27613P9"}
技術スタック
- ランタイム: Node 22、TypeScript(strict)、ESM
- モノレポ: pnpm workspaces
- データベース: Postgres 16 + PostGIS、Drizzle ORM
- MCP: Fastify の背後で動作する
@modelcontextprotocol/sdkのストリーミング可能な HTTP トランスポート - エンリッチメント: Anthropic Batch API(Claude Sonnet 4)、エビデンス検証付きの構造化抽出
- 天候・海洋情報: Open-Meteo(API キー不要)
- 移動マトリックス: OpenRouteService(13 ゾーンすべてを対象に、1 回のバッチマトリックス呼び出しを実施)
- デプロイ: VPS 上で systemd + Caddy リバースプロキシ
エビデンス階層
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)
主な設計上の決定事項
- 上位候補ではなくポートフォリオ — 異なる会場・アクティビティの種類から多様性のある候補を 4 件提示します
- 自由記述ではなく構造化された制約 — どのフィールドにも健康に関する表現を含めません(プライバシー・バイ・デザイン)
- 移動時間のペナルティを常に適用 — 移動時間と所要時間の比率が 1 以上の場合は、重大なペナルティを課します
- 未対応の目的地には丁寧に対応 — エラーを投げず、需要を記録します
- ディレクティブ 9(Viator 翌日テスト) — 提供するすべての機能は、単一のプロバイダーでは再現できない変換、裏付け、組み合わせ、またはコンテキストを加える必要があります
使用ツール
Claude Code(Claude Opus)を使い、約 1 週間、1 人で構築しました。開発の振り返りについては、meta/POSTMORTEM.md を参照してください。
ライセンス
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。