zaezd
ザエズド
旅の理由から始まる旅行エンジン。ユーザーはどこへ行くかではなく、なぜ行くかを知っている。 自分のテーマに関するカンファレンスに行きたい。ザエズドは最寄りのオフラインイベントを見つけ、往復の交通手段、会場近くのホテル、参加費の全額を計算し、最大3つの説明可能なパッケージを1つの画面に表示する。
最初の垂直統合はITカンファレンス。イベントカタログはconfcal MCP、交通・宿泊はTutu MCPが提供し、すべてをモデルではなく決定論的コンポーザーが組み立てる。
場所
内容 | 場所 |
旅行画面 | ザエズドを起動したアドレスの |
リンク経由の旅行 |
|
MCPエンドポイント |
|
ヘルスチェック |
|
ユーザーガイド | |
2分間のデモ | docs/demo.mp4、サーバー、画面、エージェント |
Related MCP server: Travel Planner MCP Server
エンドツーエンドのシナリオ
ルートを開く。画面には空のフォームではなく、すでに組み立てられた旅行が表示される。 上部にイベント、日付、都市、会場、最寄りのホテルからそこまでの徒歩時間。その下に最大3枚のカード:電車の便名またはフライト番号付きの行きの交通手段、宿泊費と会場までの距離を含むホテル、帰りの交通手段、合計金額が1つの数字で表示され、その下に計算式が表示され、すべてが一致する。さらに、会場とホテルが表示された都市地図、旅行日数の天気、テーマに関連する他のイベント、含まれなかったものとその理由のリスト。
「支払いリンクを収集」をクリックすると、Tutuのリンクが2〜3件のチェックリストが表示される。各ラベルはTutuが実際に返したものから取得される。カートが開く場所には「カートを開く」、カートがない場所には「選択ページを開く」と表示される。
エージェントも同様:find_event_tripsはテーマと出発都市を指定すると同じ旅行を構造体として返し、get_trip_detailsはパッケージを展開し、create_trip_checkoutはチェックリストを組み立てる。描画できるホストは、MCPアプリとして同じ画面を受け取る。
ソースからの起動
npm install
ZAEZD_MODE=replay npm run devhttp://localhost:8080 が開く。replayモードでは、製品はfixtures/からの記録された応答で動作し、ネットワークにアクセスしない。インターネットもキーもなしで使用でき、基準日は記録日となる。ライブモードはZAEZD_MODE=live。
完全なチェック:
npm run verifyこれは、ルールの同期、文書化されたコマンドの照合、型チェック、リンター、ブラウザツリーのビルド、Gherkinの実行可能シナリオ、単体テストである。すべてオフライン。
ブラウザツリーがシナリオの前にビルドされるのは、見た目のためではない。1つのシナリオがサーバーにboot.jsを要求するが、これはホストに送信されるもので、クリーンなクローンにはまだこのファイルがない。
コンテナでの起動
イメージはリポジトリからビルドされ、コードとフィクスチャの両方を内部に含むため、replayモードではコンテナにインターネットもシークレットも不要。
cp .env.example .env # и отредактируйте
docker compose up -d --build画面はhttp://127.0.0.1:8080で起動する。.envファイルがないとcomposeは起動しない。これは意図的で、誰も他人のデフォルト値で製品を起動できないようにするため。
composeなしでも同じことを1つのコマンドで:
docker build -t zaezd .
docker run -d --name zaezd -p 127.0.0.1:8080:8080 --env-file .env zaezd環境ファイルなしで、ちょっと見るだけの一度きり:
docker run --rm -p 127.0.0.1:8080:8080 \
-e ZAEZD_MODE=replay -e ZAEZD_PUBLIC_URL=http://localhost:8080 zaezd環境変数
コメント付きの完全なリストは.env.exampleにある。簡単に:
変数 | 目的 | デフォルト |
|
|
|
| コンテナ内のポート |
|
| 製品が外部から見えるアドレス。旅行リンクとウィジェットのCSPがここから構築される |
|
|
|
|
| イベントカタログのMCP | パブリックなconfcal |
| Tutu MCP |
|
キーやトークンは1つもない。両方のソースが公開されている。ZAEZD_PUBLIC_URLの値は正直に設定することが重要だ。このアドレスが画面へのリンクとしてエージェントに送信され、ウィジェットのCSPに入る。実際のものと一致しない場合、ホスト内のボードは空のままになる。
コンテナは/healthzでHEALTHCHECKを実行するため、docker psはアプリケーションが実際に応答している場合にのみhealthyを表示する。
リバースプロキシの背後
docker-compose.yaml自体はプロキシ、ドメイン、ネットワークについて何も知らない。これらは製品ではなくサイトのプロパティである。これらはすべてdocker-compose.override.yamlに配置され、これは.gitignoreにあり、サービスをデプロイするマシンにのみ存在する。Traefikの例:
services:
zaezd:
ports: !reset [] # наружу светит прокси, а не контейнер
environment:
ZAEZD_PUBLIC_URL: https://zaezd.example.com
labels:
traefik.enable: 'true'
traefik.http.routers.zaezd.rule: Host(`zaezd.example.com`)
traefik.http.routers.zaezd.entrypoints: https
traefik.http.routers.zaezd.tls: 'true'
traefik.http.routers.zaezd.tls.certresolver: letsencrypt
traefik.http.services.zaezd.loadbalancer.server.port: '8080'
networks: [proxy]
networks:
proxy:
external: trueエントリポイント、証明書リゾルバ、ネットワークの名前は人それぞれ異なるため、例ではダミーになっている。nginxやCaddyの場合、オーバーライドは異なるが、製品は変わらない。PORTをリッスンし、/healthzを返す。
エージェントへの接続
エンドポイント<アドレス>/mcpはストリーミングHTTPで動作し、キーは不要。ローカルではhttp://localhost:8080/mcp、デプロイされたサービスではZAEZD_PUBLIC_URLのアドレス。
Claude Desktopはclaude_desktop_config.jsonでリモートサーバーを直接受け付けない。そこにはstdioコマンドのみが存在する。そのため、設定、コネクタ、カスタムコネクタの追加からザエズドを追加するか、プロキシ起動を指定する:
{
"mcpServers": {
"zaezd": { "command": "npx", "args": ["-y", "mcp-remote", "http://localhost:8080/mcp"] }
}
}Claude CodeとCodex CLI:
claude mcp add --transport http zaezd http://localhost:8080/mcp
codex mcp add zaezd --url http://localhost:8080/mcpQwen Code:
qwen mcp add --transport http zaezd http://localhost:8080/mcpウィジェットを描画できるホストは、ui://zaezd/trip-boardリソースを介して同じ画面を受け取る。ウィジェットのないホストは、同じ応答をテキストで受け取る。
アーキテクチャ
依存関係は下方向にのみ向かう。
レイヤー | 場所 | 機能 |
L0 |
| 純粋なルール:日付、実現可能性、価格、パッケージの選択。I/Oなし、クロックなし |
L1 |
| confcalとTutuのクライアント、正規化、キャッシュ、リプレイモード |
L2 |
| ジオコーディング、プロダクションカレンダー、天気。それぞれタイムアウトと代替応答付き |
L3 |
| 旅行の組み立て、予算、ライブ支払いリンク、リンク内のリクエスト |
L4 |
| 画面と3つのツール。ビジネスロジックはここにはない |
スキーマと2つのシーケンスはdocs/architecture.mdに、根拠のある決定事項はdocs/decisions.mdにある。
重要なこと:日付、価格、実現可能性はモデルではなくコードが計算する。モデルを3回同じライブ実行すると、3つの異なる宿泊日数と1.5倍の価格差が生じた。そのため、アルゴリズムはsrc/composer/dates.tsにあり、シナリオのテーブルでカバーされている。
制限事項
このリストは正直なもので、製品の一部として読んでほしい。
オンラインイベントは旅行を構築せず、同じ都市のイベントも同様。どちらの場合も、ザエズドは空の画面を表示するのではなく、その旨を直接伝える。
ライブのconfcalカタログは21都市を知っており、ライブのオフラインイベントがあるのはそのうちの約15都市。空の都市は隠されず、カウンターが画面に表示される。
1リクエストで計算される旅行は1つ。テーマに関連するイベントがさらに最大5つリスト表示されるが、計算はされない。5つのビルドのファンアウトは、製品ではなくスピナーである。
天気予報は16日先までしか利用できない。それを過ぎると、天気ブロックは単に消える。
会場の住所はカタログから取得され、推測されることはない。カタログが提供しなかった場合、画面はその旨を伝え、地図にマーカーを置かず、エージェントの応答は、公開ソースで住所を検索し、住所がカタログからのものではないことをユーザーに伝えるよう求める。
Tutuのマルチモーダル交通は大人をカウントし、旅行には子供用・割引運賃はない。
コールドブラウザの航空券リンクは、カートではなく検索を開く。カートはTutuのライブセッションがあるブラウザでのみ作成される。そのため、そのようなボタンのラベルはその旨を伝えている。
車両の座席図はない。
イベント参加費は、カタログが数値で記述した場合にのみ合計に加算される。「学生無料」のようなテキスト価格は、ザエズドはそのまま表示し、合計には含めない。
replayモードでは、支払いリンクは記録から収集されるため、おそらく期限切れ。画面とエージェントへの応答はその旨を警告する。カタログからは一度に8つのイベントが要求される。それ以上要求すると、応答の途中でストリーミングが停止する。測定と根拠は意思決定ログに記載。
測定結果
メトリクス | 値 |
Tutu MCPのツール数 | 16 |
Tutu MCPマニフェスト | 102,143文字、約25,500トークン |
ザエズドゲートウェイのツール数 | 3 |
ザエズドゲートウェイのマニフェスト | 10,181文字、約2,500トークン |
ライブ旅行ビルド、コールド | 12.1秒 |
ライブ旅行ビルド、繰り返し | 0.2秒 |
記録からの旅行ビルド | 36ミリ秒 |
外部ソース | 6 |
実行可能シナリオ | 217 |
単体テスト | 336 |
エージェントでテスト済み | Claude Code、Qwen Code |
リポジトリマップ
specs/ спецификация продукта, она же источник правды
features/ исполняемые сценарии на Gherkin и шаги к ним
tests/ юнит-тесты чистого слоя
src/ код продукта по слоям
fixtures/ записанные ответы источников
scripts/ record.ts и вспомогательные утилиты
docs/ руководство пользователя, архитектура, журнал решенийライセンス
MIT、LICENSEを参照。
This server cannot be installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Servers
- AlicenseAqualityFmaintenanceEnables LLMs to perform travel-related tasks by interacting with Google Maps and travel planning services including location search, place details, and travel time calculations.53999MIT
- FlicenseNot gradedqualityNot gradedmaintenanceEnables AI-assisted travel planning with real-time weather forecasts, place discovery, customized itinerary generation based on interests and budget, and travel distance calculations between cities.
- AlicenseAqualityBmaintenanceEnables AI agents to plan trips by searching flights, accommodations, and activities, and managing itineraries collaboratively with role-based permissions.2031MIT
- FlicenseNot gradedqualityDmaintenanceEnables travel planning through natural language, providing weather forecasts, attraction search, itinerary generation, and distance calculations using free APIs.
Related MCP Connectors
TravelMind: 8 MCP tools for travel (12306 trains, flights, hotels, geocode, planning, policy).
whentofly: flexible-date economy/business flight search + price-level context for AI agents
Flight search & booking for AI agents. 400+ airlines, $20-50 cheaper than OTAs.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/EvilFreelancer/zaezd'
If you have feedback or need assistance with the MCP directory API, please join our Discord server