Skip to main content
Glama

🧭 Компас — ロシア旅行のための交渉型トラベルエージェント

エカテリンブルクの家族が一言で書き込むエージェント:

「海に行きたい、3人で45,000、子供連れ、長時間の乗り継ぎなし」

— そしてエージェント自身が予算と乗り継ぎの矛盾を見つけ、タイムライン上に分岐点を直接表示し、 何を犠牲にするかを尋ね、回答を覚えていて、ルートの脆い各リンクに対してプランBを 用意している。

Туту MCP AIハッカソン(2026年8月18日〜21日)のプロジェクト。Tutu MCP 上で動作する (飛行機、列車、電車、バス、ホテル)。

分岐点:予算 vs 「列車なし」 — エージェントが何を犠牲にするか尋ねる

スタート画面:近隣都市までの料金が表示された地図

都市をクリック:LLMトークンを一切使わずに最寄りの便と料金を表示

リンクの障害:「変更前 → 変更後」、プランBが即座に適用される

同じエージェントをMCP Appとして:Claudeのチャット内のインタラクティブウィジェット

左から右へ:探索用スタートマップ(都市のクリックはトークンを消費しない — Tutu MCPのみ); 都市の便と±日のプレート;障害後のプランBへの切り替え;MCPウィジェット(SEP-1865)。

これは「もう一つのチケット検索」とどう違うのか

通常の検索

Компас

10個のフィールドがあるフォーム

自然言語の一言

「何も見つかりませんでした」

「予算と1時間未満の乗り継ぎを同時に満たすことはできません — 何を犠牲にしますか?」

公式による最適な選択肢

正直なトレードオフとあなたの選択を記憶する分岐点

チケットが売り切れた — 最初からやり直し

プランBは事前に計算済み、切り替えは即座

Related MCP server: GemmaJnana

クイックスタート

git clone https://github.com/svyatrunov/tutu-compass.git && cd tutu-compass
npm install
cp deploy/.env.example apps/server/.env

apps/server/.env の OPENROUTER_API_KEY を入力して、次を実行します:

npm run dev

フロントは http://localhost:5173、APIは http://localhost:8787(Viteが /api をプロキシ)。

インターネットもキーも不要なデモ — 記録済みフィクスチャを使用:

DEMO_MODE=replay npm run dev

本番はすべてDockerで:

cd deploy && cp .env.example .env && docker compose up -d --build

MCPサーバーとしてのКомпас

同じエージェントはMCPツール plan_trip として利用可能 — 手動オーケストレーションの代わりに1回の呼び出しで済む Тутуの16の生ツール。エンドポイント:npm run dev 実行後は http://localhost:8787/mcp (Streamable HTTP;自前サーバーでは https://<домен>/mcp)。MCPホストなしでウィジェットをすぐ確認するには: http://localhost:8787/api/dev/widget-preview。MCP Apps(Claude、Claude Desktop、VS Code Copilot、Goose)を サポートするホストでは、結果がチャット内にインタラクティブなタイムラインとしてレンダリングされる(SEP-1865); それ以外のMCPクライアントはテキスト+構造化JSONを受け取る。 ダイアログの記憶は sessionId を通じてツールの引数で行う。 ウェブ版が主要チャネルであり、MCPチャネルからは独立している: 両者は同じ agent/* コアの上で同じプロセス内に存在する。

チャネルの確認:起動中のサーバーに対して npm run smoke:mcpapp を実行。

便利なコマンド

コマンド

説明

npm run mcp:discover

Тутуツールの実際の仕様を取得 → docs/MCP-NOTES.md

npm run fixtures:record

リプレイ用にMCPの応答を fixtures/recorded に記録する

npm test

コンフリクトとプランBのユニットテスト+MCPスキーマのコントラクトテスト

npm run smoke

起動したサーバーに対するデモシナリオのE2E実行

npm run lint / npm run typecheck

ESLint / TypeScript strict

ドキュメント

ドキュメント

目的

docs/AGENT-BRIEF.md

ここから始めてください。 評価のための自己完結型リファレンス:フロー、スタック、ベンチマーク、ハッカソントラックごとの自己評価

docs/SYSTEM-MAP.md

システムマップ:Тутуの16ツール → 当社モジュール → チャネル+審査員の質問へのクイック回答

docs/ROADMAP.md

コードフリーズまでの作業計画、「1時間あたりのポイント」でランク付け

docs/MCP-FEEDBACK.md

Tutu MCP仕様への構造化された12の提案 — 再現可能な発見事項付き

docs/ARCHITECTURE.md

図、エージェントのループ、コンフリクト検出

docs/ASSUMPTIONS.md

正直なリスト:MCPから実際に得られるもの、模擬であるもの

docs/MCP-NOTES.md

Tutu MCPの実際の(公称ではない)仕様

docs/EVALS.md

モデル戦略とベンチマークの発見ログ

docs/PITCH.md

ピッチの要点とタイミング

ハッカソンの評価基準ごとのコードの参照先

基準

参照先

機能の深さ

agent/orchestrator.ts — エージェントのループ

革新性

agent/conflicts.ts — コンフリクトを証明可能な事実として扱う、LLM呼び出しを一切使わない

UX/UI

components/Timeline — コンフリクトノードとプランBの点線

安定性

mcp/client.ts — キャッシュ、リトライ、フィクスチャのリプレイ

アーキテクチャ

docs/ARCHITECTURE.md

正直さ

docs/ASSUMPTIONS.md — MCPから実際に得られるものと模擬であるもの

コード品質

tsconfig.base.json(strict + noUncheckedIndexedAccess)、ESLint、CI

リポジトリのルール

  • シークレットはenv経由のみ。.env は .gitignore に、.env.example はリポジトリに含める。

  • LLMはルートデータを決して生成しない:価格、便、リンクはMCPからのみ取得され、モデルはそれらの中から id によって選択するだけ。これは実データに対する幻覚(ハルシネーション)の防止策である。

ライセンス

MIT — LICENSE を参照。

Related MCP Connectors

Related MCP Servers