Skip to main content
Glama

Frontline Copilot

小売店舗マネージャーのためのAIレビュー仕分けツール。

あらゆるソースから顧客レビューを取り込み、Claude がカテゴリと深刻度で分類し、対応が必要なものを店舗マネージャーの Airtable タスクリストにルーティングする常時稼働システムです。重大な問題(食品衛生、スタッフの行為、健康リスク)については、リアルタイムの Slack アラートも送信します。

MCP サーバーとしても提供されており、店舗マネージャーは Claude Desktop から会話形式でクエリやトリアージを行うことができます。

店舗運営のための AI コパイロットという新興カテゴリにインスパイアされています。


問題

多店舗展開の小売チェーンの店舗マネージャーは、顧客レビューからのシグナルに埋もれています。そのほとんどはノイズ(賞賛や小さな不満)です。ごく一部は緊急を要します(食品衛生、差別、けがのリスク)。ほとんどのツールは、マネージャーが重要事項を見つけるためにすべてを読むことを要求しますが、これは規模が大きくなると勝ち目のない戦いです。

Frontline Copilot はこれを逆転させます。Claude がすべてを読み、マネージャーはアクションが必要なものだけを見ます。


Related MCP server: ServiceTitan MCP Server

仕組み

┌────────────┐   ┌──────────────┐   ┌────────────┐   ┌────────────┐
│  Reviews   │──▶│ Classifier   │──▶│  Airtable  │──▶│   Slack    │
│  (JSON /   │   │ (Claude API, │   │  (task     │   │  (critical │
│   Google)  │   │  tool use)   │   │  tracker)  │   │   alerts)  │
└────────────┘   └──────────────┘   └────────────┘   └────────────┘
                        │
                        ▼
                 ┌──────────────┐
                 │  MCP server  │◀── Claude Desktop, Cursor, ...
                 │  (3 tools)   │
                 └──────────────┘

各レビューは、1(ポジティブ)から5(クリティカル)までの深刻度を持つ9つのカテゴリのいずれかに分類されます。深刻度が3以上のレビューは Airtable タスクになり、深刻度が4以上のレビューはさらに Slack アラートを発火します。


スクリーンショット

エンドツーエンドのパイプライン実行

21件のレビューを約60秒で処理。7件のタスクを作成し、4件のリアルタイムのクリティカルアラートを発火。

Terminal

Airtable — タスクボード

深刻度でソートされ、カテゴリで色分けされたタスク。これが店舗マネージャーの見る画面です。

Airtable board

Airtable — カンバンビュー

同じデータをカテゴリでグループ化。問題の分布を一目で確認できます。

Airtable Kanban

Slack — リアルタイムのクリティカルアラート

アクション優先のレイアウトと Airtable タスクへの直接リンクを備えた Block Kit カード。

Slack alerts


技術スタック

  • Python 3.10+ — dataclasses、str | None ユニオン型、pathlib

  • Anthropic Claude API — ツール使用による分類(claude-haiku-4-5)

  • Airtable REST API — タストラッカー、生の requests で呼び出し

  • Slack Incoming Webhooks — リッチなアラートカード用の Block Kit

  • MCP (Model Context Protocol) — FastMCP による会話型インターフェース

  • レビューソース用のアダプターパターン(Mock が同梱、Google Places はスタブ)

サードパーティ依存は anthropic、requests、mcp の3つのみ。それ以外はすべて標準ライブラリです。


クイックスタート

# 1. Clone and install
git clone https://github.com/miguelpomarm/frontline-copilot
cd frontline-copilot
python -m venv .venv && source .venv/bin/activate
pip install -r requirements.txt

# 2. Configure secrets
cp .env.example .env
# ... edit .env with your keys (see setup section below)

# 3. Run the pipeline
python triage.py

# 4. Launch as an MCP server (optional)
python mcp_server.py

セットアップ(初回のみ、約10分)

1. Anthropic API キー

https://console.anthropic.com/ で取得します。無料枠でデモ実行には十分です。21件のレビューで約 $0.03 です。

2. Airtable ベース

Tasks という名前のテーブルを持つ新しいベースを作成し、以下のフィールドを追加します(正確な名前):

フィールド

タイプ

Review ID

単一行テキスト(プライマリフィールド)

Store

単一行テキスト

Category

単一選択 — 9つのタクソノミー値で設定

Severity

数値(整数)

Summary

長いテキスト

Review Text

長いテキスト

Author

単一行テキスト

Date

日付

Status

単一選択 — Open、In Progress、Resolved

次に、https://airtable.com/create/tokens で個人アクセストークンを生成し、ベースに対して data.records:read と data.records:write のスコープを付与します。トークンとベース ID(app... で始まり、ベースの URL にあります)をコピーします。

3. Slack Incoming Webhook

https://api.slack.com/apps で Slack アプリを作成します。Incoming Webhooks を有効にし、クリティカルアラートを受信するチャンネルを指す新しいウェブフックを追加し、ウェブフック URL をコピーします。

4. .env を記入

ANTHROPIC_API_KEY=sk-ant-...
AIRTABLE_API_KEY=pat...
AIRTABLE_BASE_ID=app...
AIRTABLE_TABLE_NAME=Tasks
SLACK_WEBHOOK_URL=https://hooks.slack.com/services/...

5. 初回実行

python triage.py --limit 3 --dry-run   # sanity check, no side effects
python triage.py --limit 3             # small live run
python triage.py                       # full 21 reviews

MCP インテグレーション (Claude Desktop)

これを ~/Library/Application Support/Claude/claude_desktop_config.json (macOS) に追加し、Claude Desktop を再起動します:

{
  "mcpServers": {
    "frontline-copilot": {
      "command": "python",
      "args": ["/absolute/path/to/frontline-copilot/mcp_server.py"]
    }
  }
}

その後、Claude Desktop 内で:

"How is Aurora Times Square doing right now?"

Claude は get_store_health("times_square") を呼び出し、Airtable にアクセスし、現在のスナップショット(オープンタスク、クリティカル数、トップカテゴリ)を返します。


設計上の決定

レビューアに指摘する価値のある意図的な選択:

閉じたタクソノミー + Other バケット カテゴリは固定の列挙型であり、自由形式ではありません。これにより、一貫したルーティングとメトリクスが保証されます。Other は逃げ道であり、事前の推測ではなく実際のデータに基づいてタクソノミーを拡張するために定期的にレビューされます。

プロンプトエンジニアリングよりもツール使用 Claude は、列挙型の強制を備えたツールスキーマを介して構造化出力を返します。これにより、パースのバグが排除され、LLM がタクソノミー外のカテゴリを幻覚することが防止されます。

デフォルトモデルとしての Haiku 4.5 明確にスコープされた分類タスクでは、Haiku は高速(サブ秒)、低コスト(レビューあたり約 $0.001)、十分な精度です。本番環境では、この決定だけで中程度のボリュームで月に数千ドルを節約できます。

レビューソースのためのアダプターパターン ReviewSource は抽象インターフェースです。MockSource と、ドキュメント化された GooglePlacesSource スタブが同梱されています。Yelp、TrustPilot、または独自のフィードに切り替えるには、新しいサブクラスを作成するだけです。パイプラインの残りは変更されません。

レビュー ID による冪等性 同じレビューを再処理しても、重複タスクは作成されません。Airtable は、各作成の前にチェックされます。

深刻度しきい値は調整可能な定数 ACTION_THRESHOLD と ALERT_THRESHOLD はモジュールレベルです。許容度が異なる顧客は、コードではなく2つの数値を変更します。

MVP では同期が非同期よりも優先 21件のレビューを順次約40秒で処理します。非同期バリアントは、約15行で交換できます(AsyncAnthropic + レート制限用のセマフォを備えた asyncio.gather)。このボリュームでは、速度よりも読みやすさが優先されます。

星ではなくテキスト プロンプトは、Claude に星評価よりもレビューテキストを重視するよう明示的に指示します。食品衛生に言及した4つ星のレビューは、深刻度2ではなく5です。


ロードマップ(未実装)

  • FastAPI ウェブフックエンドポイント (POST /webhook/review) — バッチ実行ではなくリアルタイムの取り込み用。

  • GooglePlacesSource — アダプターインターフェースは完成済み。ライブ実装は、API 統合とリトライロジックに約1時間。

  • レート制限対応の非同期バッチ処理 — 高ボリュームの本番環境向け。

  • エンドツーエンドテスト (Playwright / pytest と記録された API インタラクション) — Airtable/Slack の副作用を検証。

  • config.yaml による顧客ごとの設定可能なしきい値。


ライセンス

MIT — LICENSE を参照。


Miguel Pomar Martínez によるテクニカルポートフォリオ作品として構築されました。

Maintenance

ActivitySlowing
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers