Vox Pop について
Vox Pop は公開ディスカッションを検索し、人々の意見やその変化を提示します。MCP サーバーはプラットフォーム検索、スレッドの確認、自動または呼び出し元指定のルーティングを備え、利用状況はプラットフォームごとに異なります。
主な機能
- 01公開ディスカッションの検索
- 02関連コミュニティへのクエリ振り分け
- 03過去と最近の意見の比較
- 04スレッド内の意見を確認
- 05プラットフォームの利用状況確認
- 06API キー不要のローカルなセマンティックルーティング
活用シーン
- 01製品選択に関するコミュニティの意見を比較
- 02話題に対する意見の変化を追跡
- 03具体的な質問への議論や回答を検索
- 04プラットフォームが現在利用可能か確認
MCP 対応
意見検索、時期ごとの見解比較、スレッド内の意見確認、利用可能なプラットフォームの一覧取得ツールを提供します。呼び出し元の LLM がルーティングヒントを指定するか、サーバーがクエリを自動で振り分けます。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
ツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
LLMは教科書に書かれていることを知っています。
これは、人々が実際にどう考えているかを伝えます。
9つのプラットフォーム • セマンティックルーティング • LLMインテリジェンスレイヤー • APIキーなしで動作
インストール • クイックスタート • プラットフォーム • ルーティングの仕組み • MCPサーバー • Claude Codeプラグイン • ロードマップ
なぜ?
|
vox-popなし
|
vox-popあり
|
インストール
pip install vox-pop
以上です。9つのプラットフォームすべてが、APIキーなしで利用できます。オプションのLLMキーを使うと、よりスマートなルーティングを利用できます(ルーティングの仕組みを参照)。
クイックスタート
CLI — 1つのコマンドで9つのプラットフォームすべてを検索します:
vox-pop search "should I learn Rust or Go"
視点モード — 意見が時間とともにどのように変化したかを確認します:
vox-pop search "rust vs go" --perspective --platforms hackernews,reddit
## hackernews — Then vs Now
Historical (1+ year ago):
> "Rust vs. Go"
— hackernews | +481 points | 580 replies | 2017-01-18
Recent (last 6 months):
> "Rust vs. Go: Memory Management"
— hackernews | +2 points | 2025-11-15
## reddit — Then vs Now
Historical:
> "Experienced developer but total beginner in Rust..."
— reddit | +124 points | 34 replies | 2025-03-14
Recent:
> "I rebuilt the same API in Java, Go, Kotlin, and Rust — here are the numbers"
— reddit | +174 points | 59 replies | 2026-03-19
この変化が物語っています:2017年は炎上合戦でした。2026年は分野に特化した実用主義です。
標準検索 — すべてのプラットフォームの結果をフラットに表示します:
vox-pop search "should I learn Rust or Go" --limit 3
### hackernews (45 found)
> "I am a full stack TypeScript dev looking to broaden my skill set..."
— hackernews | +78 points | 42 replies | by throwaway_dev
Source: https://news.ycombinator.com/item?id=41907717
### 4chan /g/ (12 found)
> "Rust is a mass psychosis. Go is boring but you'll actually ship..."
— 4chan /g/ | 129 replies | by Anonymous
### reddit (8 found)
> "After 2 years with both: Rust for systems, Go for services..."
— reddit | +234 points | 87 replies | by senior_dev_42
Python — 独自のツールに組み込めます:
import asyncio
from vox_pop.core import search_multiple, format_context, get_default_providers
async def main():
results = await search_multiple(
"best laptop for programming",
providers=get_default_providers(),
)
print(format_context(results))
asyncio.run(main())
## プラットフォーム
トークンも OAuth も、レート制限のわずらわしさもありません。ステータスは希望的観測ではなく、実際に計測されています —
vox-pop platforms --check を実行すると、ライブエンドポイントに対して再チェックします。
Reddit と Lobsters は現在ブロックされています。 どちらも Anubis の プルーフ・オブ・ワークのインタースティシャルの背後にあり、コンテンツの代わりに チャレンジページを表示します。これは設定の問題ではなく、ヘッダーを変更しても回避できません。Reddit の サポートは公式 OAuth API に移行中です。Lobsters は空の結果を返すのではなく、 ブロックされたことを明示的に報告するようになりました。
| プラットフォーム | ステータス | ソース | 時間フィルター | スレッド | |
|---|---|---|---|---|---|
| HackerNews | 動作中 | Algolia Search API | あり | あり | |
| ブロック中 | Pullpush + Arctic Shift + Redlib のフォールバック | あり | — | ||
| 4chan | 動作中 | 公式 JSON API(2012 年以降) | — | あり | |
| Stack Exchange | 動作中 | 公式 API — 180 以上のコミュニティ | あり | あり | |
| Telegram | 最近の投稿のみ | 公開チャンネルのウェブプレビュー(t.me/s/) | — | — | |
| Lobsters | ブロック中 | lobste.rs の JSON API + 検索スクレイピング | あり | — | |
| Lemmy | 動作中 | 公開 REST API — フェデレーションされたインスタンス | あり | あり | |
| LessWrong | 動作中 | GraphQL API | あり | あり | |
| XenForo Forums | 不安定 | HTML スクレイピング(Head-Fi、AnandTech など) | — | — |
ルーティングの仕組み
クエリは一語でも、段落でも、D&D のルールに関するエッセイほど長い質問でもかまいません。vox-pop は4 段階のルーティングシステムですべてに対応します。
User query: "i was looking into a solid laptop for linux
something from hp, what would a savvy person pick"
│
┌───────────────────────────────▼──────────────────────────────┐
│ Tier 1: MCP Hints │
│ Calling LLM provides routing_hints directly │
│ (skips all other tiers) │
├──────────────────────────────────────────────────────────────┤
│ Tier 2: LLM Query Rewrite ← like Perplexity │
│ Cheap LLM call rewrites query to search-optimized form │
│ "hp laptop linux compatibility" + routes to communities │
│ Supports: Anthropic, OpenAI, Ollama (local/free) │
├──────────────────────────────────────────────────────────────┤
│ Tier 3: Semantic Embeddings ← free, no API key │
│ FastEmbed (33MB model) understands meaning, not keywords │
│ Dynamic catalog: 77 4chan boards + 180 SE sites + static │
│ "contradictory spell behaviour" → SE:rpg, r/DnD, /tg/ │
├──────────────────────────────────────────────────────────────┤
│ Tier 4: Broad Defaults │
│ Search popular destinations everywhere │
└──────────────────────────────────────────────────────────────┘
│
▼
Routes to: r/buildapc, r/linux, r/hardware │ /g/
SE:hardwarerecs, SE:askubuntu │ lemmy:[email protected]
Tier 2 は Perplexity/ChatGPT Search のように動作します — LLM が会話形式のクエリを明確な検索文字列に書き換え、適切なコミュニティを選びます。有効にするには、以下の環境変数のいずれかを設定します。
ANTHROPIC_API_KEY=... # Uses Claude Haiku (~$0.0003/query)
OPENAI_API_KEY=... # Uses GPT-4o Mini
OLLAMA_HOST=... # Uses local Ollama (free)
Tier 3 は API キーなしで完全にローカル実行されます。33MB の埋め込みモデルが、「生き物に対する矛盾した呪文の挙動」がテーブルトップ RPG のルールを意味すると理解します — 共通のキーワードは一切必要ありません。初回実行時に、4chan のすべてのボードと Stack Exchange のサイトを動的に取得して、すべてを埋め込み、ディスクにキャッシュします。
| コールドスタート | ウォームスタート | 単一クエリ | |
|---|---|---|---|
| Tier 3 の所要時間 | 約 7 秒 | 約 1.3 秒 | 即時 |
設定は不要です。 LLM キーが設定されていれば Tier 2 が使われます。設定されていない場合は Tier 3 が処理します。fastembed がインストールされていない場合も、Tier 4(広範検索)は引き続き利用できます。
ルーティングの例
| クエリ | ルーティング先 |
|---|---|
| "best hp laptop for linux" | r/buildapc、r/linux、r/hardware、/g/、SE:hardwarerecs、SE:askubuntu |
| "contradictory spell effects on a creature" | r/dndnext、r/DnD、/tg/、SE:rpg |
| "best mechanical keyboard for programming" | r/MechanicalKeyboards、/g/、SE:hardwarerecs |
| "what are the risks of yield farming" | r/CryptoCurrency、SE:tezos、telegram:ethereum |
| "how to make authentic kimchi jjigae" | r/Cooking、/ck/ |
## MCP サーバー
Claude Code、Cursor、Windsurf、および MCP 互換のすべてのクライアントで動作します。
{
"mcpServers": {
"vox-pop": {
"command": "python",
"args": ["-m", "vox_pop.server"]
}
}
}
LLM は 4 つのツールを利用できます。
| ツール | 機能 |
|---|---|
search_opinions | あらゆるプラットフォームを対象に、トピックについての意見を検索します |
search_opinions_perspective | 当時と現在 — 過去と最近の意見を並べて表示します |
get_thread_opinions | 特定のスレッドのコメントを詳しく調べます |
list_available_platforms | 利用可能なプラットフォームと稼働状況を確認します |
routing_hints パラメーターを使うと、呼び出し元の LLM が検索対象を正確に指定できます。
routing_hints: "reddit:MechanicalKeyboards,4chan:g,stackexchange:hardwarerecs"
ヒントが指定されていない場合は、ルーティングシステムが自動で処理します。
Claude Code プラグイン
claude plugin add /path/to/vox-pop
実際の意見が役立つ質問をすると、このスキルが自動的に起動します。自然な言葉で質問するだけです。
> "What do people think about living in Berlin?" → activates
> "Should I use Next.js or Remix?" → activates
> "Best gym routine for beginners?" → activates
> "What's the capital of France?" → does not activate
手動で検索する場合:/vox-search "your query"
アーキテクチャ
┌──────────────────────────────────────────────────────────┐
│ Layer 3: Claude Code / MCP Client │
│ Auto-triggering skill + /vox-search │
├──────────────────────────────────────────────────────────┤
│ Layer 2: MCP Server │
│ search_opinions · perspectives · threads · list │
├──────────────────────────────────────────────────────────┤
│ Layer 1: Python Library │
│ ┌────────────────────────────────────────────────────┐ │
│ │ Smart Router (4-tier) │ │
│ │ MCP hints → LLM rewrite → FastEmbed → broad │ │
│ └────────────────────────────────────────────────────┘ │
│ ┌────────────────────────────────────────────────────┐ │
│ │ 9 Providers with fallback chains │ │
│ │ HN · Reddit · 4chan · SE · Telegram │ │
│ │ Lobsters · Lemmy · LessWrong · XenForo Forums │ │
│ └────────────────────────────────────────────────────┘ │
│ ┌────────────────────────────────────────────────────┐ │
│ │ Dynamic Catalog │ │
│ │ 77 4chan boards + 180 SE sites fetched from APIs │ │
│ │ + 120 static destinations · cached to disk │ │
│ └────────────────────────────────────────────────────┘ │
└──────────────────────────────────────────────────────────┘
各プロバイダーは自動フォールバックを実装しています。1 つのソースがダウンした場合、次のソースが試されます。Reddit には、3 つのフォールバックソースがあります(Pullpush → Arctic Shift → Redlib)。
ロードマップ
| バージョン | ステータス | 内容 |
|---|---|---|
| v0.1 | リリース済み | 5 つのプロバイダー(HN、Reddit、4chan、SE、Telegram)、MCP サーバー、Claude Code プラグイン |
| v0.2 | 現在 | 9 つのプロバイダー、4 層のスマートルーティング、LLM クエリ書き換え、FastEmbed セマンティックルーティング、動的カタログ |
| v0.3 | 進行中 | 公式 OAuth API 経由の Reddit — ブロックされた Redlib 経由の経路を置き換えます |
| v0.4 | 未着手 | 地域対応 — DC Inside(韓国)、Naver、5ch(日本) |
コントリビューション
New provider? → Subclass Provider in src/vox_pop/providers/base.py
New routing destination → Add to DESTINATIONS in router.py (one line)
Dynamic catalog source → Add a _fetch_*_destinations() function in router.py
Better LLM prompt? → Improve _LLM_SYSTEM in router.py
Multilingual support? → Swap FastEmbed model to bge-m3 in SemanticRouter
Dead instance? → Open an issue with the instance URL
Regional platform? → DC Inside, Naver, 5ch, VK, Bilibili — all welcome
セキュリティ
| データアクセス | 公開データのみ — 公式 API と公開ウェブエンドポイントを使用します。ログインが必要なページのスクレイピングは行いません。 |
| 認証情報 | 保存されません。任意の LLM キーは実行時に環境変数経由で渡され、ディスクに書き込まれることはありません。 |
| LLM ルーティング | ANTHROPIC_API_KEY または OPENAI_API_KEY が設定されている場合、ルーティングのみを目的として、クエリテキスト(最大 4000 文字)が該当する LLM API に送信されます。明示的な API キーなしでクエリが外部に送信されることはありません。キーがない場合、ルーティングは FastEmbed を使ってすべてローカルで実行されます。 |
| レート制限 | プラットフォームごとの制限を遵守します。組み込みの同時実行ガードがあります。 |
| ユーザーエージェント | 透過的です。すべてのリクエストで vox-pop/0.2 を使用します。 |
| キャッシュ | API レスポンス(7 日間)と埋め込みは ~/.cache/vox-pop/ にローカル保存されます。サードパーティにデータが送信されることはありません。埋め込みは JSON 形式で保存され、シリアライズの依存関係はありません。 |
| 個人を特定できる情報(PII) | 公開投稿の投稿者名は、帰属表示のみに使用されます。レスポンスの後に保存されることはありません。 |
vox populi, vox dei
民の声は神の声
MIT ライセンス
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。