Skip to main content
Glama

FrugalFinder

最高の価値を見つけるお買い物代行サービス。 欲しいもの + 理由 + 予算を送信すると、FrugalBot エージェントが定期的にスキャンして、最高の 価値 のある機会を返します。最安値でも、最も派手なものでもありません。

アーキテクチャ (MVP)

[Web UI / Telegram bot / MCP client agents] 
        ↓ POST
   Vercel serverless API  ──→  Vercel KV store (wishlists + scans)
        ↓                        ↑
   FrugalBot analyzer            │ scheduled re-scan
   (OpenRouter LLM)      ────────┘  (Vercel Cron, hourly tick)

Related MCP server: ecommerce-mcp-server

エンドポイント

ルート

メソッド

目的

/

GET

Web UI: ウィッシュリストの送信、分析の表示

/api/wishlists

POST

ウィッシュリストを作成 → 最初の FrugalBot 分析を実行

/api/wishlists?id=

GET/PATCH

1つのウィッシュリストを取得または更新

/api/scan?id=

GET/POST

最新スキャンのポーリング / 今すぐスキャンをトリガー

/api/scan-all

POST

Cron ターゲット — 期限が来たすべてのウィッシュリストをスキャン

/api/telegram

POST

Telegram ウェブフックの取り込み

/api/mcp

POST

外部 AI エージェント向け MCP Streamable HTTP エンドポイント

/api/reservations

POST

キャンプ場予約ウォッチャーを作成 (Recreation.gov)

/api/reservations?id=

GET/PATCH

予約ウォッチャーの一覧/取得/更新

/api/reservations/scan?id=

POST

今すぐ予約スキャンをトリガー

/api/compare

POST/GET

3モデル LLM 比較スキャン / パフォーマンスサマリー

/admin.html

GET

管理ダッシュボード: LLM 品質対コストモニター

キャンプ場予約ウォッチャー

複数の Recreation.gov キャンプ場を、指定した日付範囲内の空き状況について監視します。 site_preference: "lakefront" は、キャンセルで空きが出たときに湖畔サイトを高く評価します。 スコアリング: 空き状況 + 希望条件の一致 + 設備 (日陰、ペット可、舗装された車道) − 価格。

curl -X POST https://YOUR-DOMAIN.vercel.app/api/reservations \
  -H 'Content-Type: application/json' \
  -d '{"campground_ids":["233117","232665"],"date_window":"2026-10-09 to 2026-10-12","site_preference":"lakefront","cadence":"daily"}'

既知の制限: Recreation.gov の日付ベースの空き状況エンドポイントは現在、匿名の呼び出し元に 404 を返します (API が変更されました)。スキャナーは公開のサイトメタデータ検索を使用します (動作確認済み: ループ、属性、ステータス、価格)。日付レベルの空き状況が再公開されたら、getCampgroundSites() に配線してください — 下流の処理はすべてすでに対応済みです。ReserveAmerica (ノースカロライナ州立公園) は匿名 API 呼び出しをブロックします。必要になったら、クッキー/セッションを使用してプロバイダーとして追加してください。

マルチ LLM 比較 ("品質対コスト管理")

POST /api/compare は、同じ frugal-bot プロンプトで3つのモデルティアを競わせます:

ティア

デフォルトモデル

目的

pareto

openrouter/auto

OpenRouter 自身の最適モデルルーティング

budget_web

openai/gpt-4.1-nano (+web plugin)

最も安価な Web 対応モデル

mid_web

perplexity/sonar

中級の Web 対応モデル

ジャッジ (anthropic/claude-opus-4.1) が、3つすべてをブラインドで (順序をシャッフルして) ランク付けし、1〜10 でスコアリングします。 各実行はトークン/コスト/スコア/勝利数をパフォーマンスストアに記録します。GET /api/compare がそれらを集計し、/admin.html が可視化します。すべてのスラッグはコード変更なしで毎週環境変数で上書き可能です: PARETO_MODEL、BUDGET_WEB_MODEL、MID_WEB_MODEL、JUDGE_MODEL。

検証済みの実運用実行: mid_web (Sonar) は 9、pareto (ルーティングされた DeepSeek v4 flash) は 8、budget (GPT-4.1-nano) は 4〜7 で、合計コストは約 $0.05/比較。

環境変数 (Vercel ダッシュボード → Settings → Environment Variables で設定)

  • OPENROUTER_API_KEY (必須) — LLM プロバイダー

  • FRUGAL_MODEL (オプション、デフォルト stealth/ox-alpha) — 任意の OpenRouter モデルスラッグ

  • KV_REST_API_URL、KV_REST_API_TOKEN (本番永続化に必須) — Vercel → Storage で接続された Vercel KV (Upstash) データベースから

  • WISHLIST_TOKEN (オプション) — /api/wishlists 用の共有シークレット

  • CRON_SECRET (オプションだが推奨) — /api/scan-all を保護

  • TELEGRAM_BOT_TOKEN、TELEGRAM_WEBHOOK_SECRET (オプション) — Telegram 取り込み

  • MCP_TOKEN (オプション) — /api/mcp 用の共有シークレット

  • PARETO_MODEL、BUDGET_WEB_MODEL、MID_WEB_MODEL、JUDGE_MODEL (オプション) — LLM 比較ティアの上書き

共有パス

ウィッシュリストに追加 (ブックマークレット)

Add to Wishlist という名前のブラウザブックマークを、次の URL で作成してください:

javascript:(function(){var u=location.href;var t=document.title;prompt('Send to FrugalFinder? Add budget/use hints:',t+'\n'+u)&&fetch('https://frugalfinder.vercel.app/api/wishlists',{method:'POST',headers:{'Content-Type':'application/json'},body:JSON.stringify({item:t,source_url:u,budget:'see notes',use_case:'shared from '+u,cadence:'daily'})}).then(r=>r.json()).then(d=>alert('Added! id='+d.id))})()

任意の商品ページでクリックすると、そのリスティングをウィッシュリストエントリとして送信します。

メール (MVP ノート)

まだ配線されていません — MVP は Web UI + Telegram + ブックマークレットを使用します。メール取り込みは、インバウンドメールウェブフック (例: Resend/Postmark → /api/wishlists) による自然な v2 追加です。

価格ティア (推奨)

ティア

頻度

価格の根拠

無料

毎日

無料ステルスモデルでの限界コスト $0 で、アイテムあたり月約30回の LLM 呼び出し ≈ インフラはほぼ無視できる

Power

毎時

$0.01/スキャン × 月約720スキャン = アイテムあたり月 $7.20 — 月額 $5 の定額で価格設定、利益は複数のウィッシュリストを1時間ごとの cron ティックにバッチ処理することで生まれる

Pro (将来)

毎時 + 優先キュー + メールダイジェスト

$12/月

ユニットエコノミクスが成立するのは、アナライザーが期限の来たすべてのウィッシュリストを単一の cron パス (/api/scan-all) にバッチ処理し、コールドスタートのオーバーヘッドを償却するからです。

認証ロードマップ (ポスト MVP)

  1. 現在の MVP: 認証なし、シングルユーザー、オプションの共有シークレットで保護。

  2. v1.1: マジックリンクメールログイン (Auth.js または Clerk 無料ティア) → ユーザー ID でキー付けされたユーザーごとのウィッシュリスト。

  3. v2: Power/Pro ティア向け Stripe チェックアウト。使用量メータリング = 請求期間ごとのスキャン数。

ローカル開発

npm install
vercel dev   # needs `vercel link` once
npm test    # node:test unit tests

MCP の使用法 (ChatGPT/Claude/Codex などの外部エージェント向け)

MCP 対応クライアントを次に接続:

https://YOUR-DOMAIN.vercel.app/api/mcp

ヘッダー: x-mcp-token: <MCP_TOKEN> (設定されている場合)。

公開ツール:

  • submit_wishlist(item, use_case, budget, flexibility?, cadence?, source_url?) → 保存 + 即時分析

  • get_wishlist(id) → 最新の分析とスキャン履歴を含む完全なレコード

  • list_wishlists() → すべてのアクティブなウィッシュリストのサマリー

  • trigger_scan(id) → 帯域外の frugal-bot スキャンを強制

  • submit_reservation_watch(campground_ids, date_window?, site_preference?, min_features?, max_price?, cadence?, notes?) → キャンプ場ウォッチャー + 最初のスキャン (湖畔の希望条件に対応)

  • list_reservations() → 最後の結果を含むすべての予約ウォッチャー

  • trigger_reservation_scan(id) → 予約を今すぐ再スキャン

  • run_model_comparison(item, use_case, budget, flexibility?) → 3ティア LLM レース + ジャッジ判定

  • get_model_performance() → ティアごとの品質/コスト統計の集計

呼び出し側エージェントはこれを 送信 + ポーリング として扱う必要があります: 一度送信し、その後は自分に合った頻度で get_wishlist を呼び出します (または独自のスケジューラーを待ちます)。MCP 仕様には任意の更新のためのプッシュチャネルがないため、定期的なポーリングが標準的なパターンです。

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    D
    maintenance
    Enables AI assistants to save product URLs to a user's Wishfinity wishlist. When recommending products, the AI can generate a clickable link that saves items for later purchase or gifting.
    63 npm
    1
    MIT
  • F
    license
    A
    quality
    D
    maintenance
    Enables AI assistants to manage shopping lists and items (create, edit, delete, mark as purchased) via integration with a backend API.
    8
    -
  • A
    license
    Not graded
    quality
    D
    maintenance
    Implements the iwant.fyi demand-side protocol, enabling AI agents to express structured purchase intent, receive matched supply from multiple sources, and report outcomes.
    Apache 2.0