mcpField
Q
qsearch

qsearch

リモート
qsearch.pro検索38 週間前に更新
リポジトリ公式サイト

qsearch について

qsearchは、AIエージェント向けのオープンソース検索レイヤーです。ページ全文を取得し、検索エンジンごとの出典情報とURL単位の信頼情報を蓄積します。セルフホストとローカルコーパスに対応し、出典を追跡する調査ワークフローに適しています。

主な機能

  1. 01ウェブ検索と全文抽出
  2. 02検索エンジンごとの出典表示
  3. 03URL単位でローカルコーパスを蓄積
  4. 04信頼情報による再ランキング
  5. 05学術論文の検索
  6. 06引用が主張を裏付けるか検証

活用シーン

  1. 01テーマ別の一括調査検索
  2. 02複数エンジンの一致に基づくページ選別
  3. 03arXiv・PubMed・Semantic Scholarの論文検索
  4. 04引用元が主張を裏付けるか確認

MCP 対応

リポジトリにはStreamable HTTPで動作するMCPサーバーが含まれ、ウェブ検索、一括検索、学術検索、引用検証、インデックス作成などのツールを提供します。対応するMCPクライアントからローカルサービスに接続できます。

設定

リモートサーバーはインストール不要です。クライアントを選んで設定をコピーするか、ワンクリックで導入できます。

エンドポイントhttps://qsearch.pro/mcp
インストールコマンドをコピー
Claude CodeTerminal
Cursor.cursor/mcp.json
VS Code.vscode/mcp.json
Claude Desktopclaude_desktop_config.json
Windsurf~/.codeium/windsurf/mcp_config.json

コマンドはターミナルで実行し、JSON は各クライアントの MCP 設定に貼り付けて再起動します。認可が必要なサーバーは初回接続時にログインを求めます。

ツール

詳細

qsearch

これは、私自身が日々のリサーチに使うために作りました。100 回以上のリサーチスプリントを実行したところ、エージェントは 200 文字のスニペットを読んでいたため、何度もハルシネーションを起こしていました。qsearch は、複数の検索エンジンの出典情報とともに完全なコンテンツを提供します。ローカルで動作し、所有権は私にあります。

ライセンス:Apache-2.0 CI ステータス:v0.4.0 公開中 デモ:qsearch.pro MCP MCP レジストリ

AI エージェントは、ページ全体ではなく 200 文字のスニペットを読むため、事実の17~33%をハルシネーションによって失います(Stanford 2024)。既存の検索 API では、ある結果にどの検索エンジンが同意したかが分かりません。既存のナレッジグラフは、企業向けの価格設定か、ベンダーロックインが必要です。

qsearch は、複数の検索エンジンの出典情報とともに完全なコンテンツをエージェントに提供するオープンソースの検索レイヤーです。お使いのマシン上で動作し、所有権はお客様にあり、すぐに MCP で利用できます。

✅ v0.4.0 は qsearch.pro で公開中です。 複数の検索エンジンの帰属情報、URL ごとの出典情報を含む信頼コーパス(engines[]、sweep_count、trust_score)、/ui のコーパスビューアー、Claude Code および仕様準拠のあらゆるクライアント向け MCP-over-HTTP に対応しています。 📖 アーキテクチャ: ARCHITECTURE.md · ビジョン: docs/VISION.md · 技術仕様: docs/TRUST_MESH.md · フェデレーションの詳細: docs/FEDERATION_ARCHITECTURE.md

デモ

qsearch のターミナルデモ — クイックスタート、複数検索エンジンでの検索、引用の検証

60 秒の紹介:/health(稼働中、ローカル)→ /sweep(複数検索エンジンの engines[] 帰属情報)→ /verify(引用された情報源は実際に主張を裏付けているか?)。npm start の実行後、bash scripts/record-demo.sh でローカルに再現できます。docs/launch/README-demo-embed.md を参照してください。

クイックスタート

無料枠、API キー不要で 5 分で実行できます:

git clone https://github.com/theYahia/qsearch.git && cd qsearch
cp .env.example .env.local       # works as-is on the $0 SearXNG tier
docker compose up -d             # Meilisearch + Qdrant + SearXNG
npm install && npm start         # → qsearch on http://localhost:8080

# multi-engine attribution in one call
curl -X POST http://localhost:8080/sweep \
  -H "Content-Type: text/plain" \
  --data-binary $'t1|self-hosted search engine\n'
# → parsed_snippets.md with "Engines: google, duckduckgo, brave (count=3)"

broad スイープティアはセルフホストの SearXNG 上で動作し、費用はかかりません。focused/critical ティアを利用したい場合にのみ、Brave キーを追加してください。完全なセットアップ(Brave キー、Ollama、MCP サーバー)については以下をご覧ください。

完全なセットアップ — Brave BYOK + ローカル LLM + MCP サーバー
# 1. Clone
git clone https://github.com/theYahia/qsearch.git
cd qsearch

# 2. Get a Brave Search API key (BYOK, $5/mo for ~1000 queries)
#    → https://brave.com/search/api/ → sign up → copy key

# 3. Configure
cp .env.example .env.local
# Set BRAVE_API_KEY=your_key
# Set SEARXNG_URL=http://localhost:8888 (for multi-engine attribution)

# 4. Start infrastructure (Meilisearch + Qdrant + SearXNG)
docker compose up -d

# 5. (Optional) Pull Ollama models for local LLM cleaning + embedding rerank
#    Without them, search still works — just no cleaned_markdown and no rerank.
ollama pull qwen2.5:7b-instruct   # ~5GB, cleaner (used by /sweep_context)
ollama pull nomic-embed-text      # 274MB, embedding rerank (Phase B)

# 6. Install & run
npm install
npm start            # → qsearch v0.4.0 on http://localhost:8080

# 7. (Optional) MCP server for Claude Code / Workbench / OpenClaw
npm run start:mcp    # → http://0.0.0.0:8081

# 8. Test multi-engine attribution
curl -X POST http://localhost:8080/sweep \
  -H "Content-Type: text/plain" \
  --data-binary $'t1|self-hosted search engine\n'
# → parsed_snippets.md with "Engines: google, duckduckgo, brave (count=3)"

BYOK の設計: Brave キー、SearXNG、Ollama はすべてお使いのマシン上にとどまります。データが外部に流出することはありません。


日々の使い方

リサーチスプリントのたびに、デュアルスイープを実行します。

# Brave sweep (primary, authoritative)
python research/scripts/brave_sweep.py queries.txt _raw_data/topic_2026-04-28/brave/

# qsearch sweep (secondary, auto-indexes into corpus)
curl -X POST http://localhost:8080/sweep?topic=my_topic \
  -H "Content-Type: text/plain" --data-binary @queries.txt

同じドメインで 10 回以上のスプリントを行うと、/corpus/top?min_engines=3 に、複数のセッションにわたって複数の独立した検索エンジンを通過した URL が表示されます。これらが、私が実際に信頼している URL です。


qsearch が存在する理由

現在、どの AI エージェントも同じ壊れたループに陥っています。

Agent → Tavily/Exa/Serper API → 200-char snippets → hallucinated answer

3 つの問題があります。

  1. スニペットだけでは不十分です。 Stanford による 2024 年の本番 RAG 監査では、「ハルシネーションなし」とうたわれているにもかかわらず、Lexis+ AI と Westlaw で 17~33%のハルシネーションが測定されました。Wikipedia の QA では、全文コンテンツはスニペット RAG を 7.3 ポイント上回ります(arxiv 2501.01880)。

  2. 信頼性を示すシグナルがありません。 検索 API は、どのエンジンが一致したかを示さずにランキング結果を返します。3 位の SEO スパムは、4 位の信頼できる情報源と同じように見えます。

  3. 記憶がありません。 検索は毎回ゼロから始まります。同じ質の低い情報がまた表示され、同じ権威ある情報源が認識されないままです。

qsearch はこの 3 つすべてに対応します。

  • スニペットだけでなく、コンテンツ全体を取得してクリーニングします。
  • 結果ごとの engines[] フィールド — Google、DDG、Brave、Qwant、Startpage の帰属情報を公開します(SearXNG による集約経由)。
  • ローカルコーパスが蓄積され、検索を重ねるごとにすべての URL の信頼プロファイルが成長します。

仕組み

flowchart LR
    A[Your agent] -->|query| Q[qsearch]
    Q -->|fan out| B[Brave Search API]
    Q -->|fan out| S["SearXNG\n(Google, DDG, Brave, Qwant, …)"]
    B -->|results| Q
    S -->|results + engines[]| Q
    Q -->|index by URL| C["Local corpus\n(Meilisearch + Qdrant)"]
    C -->|trust score| Q
    Q -->|re-ranked + full content + provenance| A

    style C fill:#fde68a,stroke:#d97706,color:#000
    style Q fill:#93c5fd,stroke:#2563eb,color:#000
    style S fill:#86efac,stroke:#16a34a,color:#000

黄色のノードはプライベートコーパスです。5 つのエンジン、3 回の検索、4 つのトピックで見つかった URL には、自然に信頼スコアが付与されます。人間によるランキングも、中央集権的な権威も、クラウドへの往復通信もありません。

qsearch の比較

TavilyExaSerperBrave APISearXNGqsearch
コアがオープンソース❌❌❌❌✅✅
全文コンテンツ(スニペットではない)一部対応一部対応❌❌❌✅
複数エンジンの帰属情報❌❌❌❌一部対応✅(engines[])
永続的なローカルコーパス❌❌❌❌❌✅
URL ごとの信頼スコア❌❌❌❌❌✅
セルフホスト可能❌❌❌❌✅✅
MCP ネイティブ一部対応✅❌✅❌✅
上流で BYOK❌❌❌該当なし✅✅

API — v0.4.0

検索エンドポイント
エンドポイント説明バックエンド
POST /searchウェブ検索とコーパス検索を実行し、信頼度で重み付けして再ランク付けしますBrave または SearXNG
POST /sweep優先度とドメインに基づいてルーティングする一括検索(下記参照)SearXNG / Brave / Academic
POST /cached_sweep/sweep と同じですが、SQLite メモリーキャッシュ層を使用しますSearXNG / Brave / Academic
POST /academic_searcharxiv + PubMed + Semantic Scholar を通じた査読済み論文の検索Academic(無料、認証不要)
POST /sweep_contextローカル LLM によるページ抽出(Brave LLM Context に相当)Ollama qwen2.5
POST /newsニュース検索Brave(キーが必要)
POST /context詳細なページ抽出Brave(キーが必要)
POST /verify引用の正確性を確認します。引用された URL が主張を実際に裏付けているかを検証します。Supported/Partial/Unsupported/Fabricated/Error と、原文の抜粋を返しますLLM による判定(ローカル Ollama qwen2.5 または DeepSeek)
POST /indexURL をクロールするか、ローカルの .md glob をインデックス化しますCrawl4AI
GET /trust/:urlコーパス内の任意の URL の信頼スコアと出典情報—
GET /corpus/top信頼度順に並べた上位 URL(?limit=20&min_engines=3)—
GET /corpus/statsコーパスのサイズと件数—
GET /economy_reportバックエンド別のスプリントコストの内訳と、すべてを Brave にした場合との比較による節約額—
GET /uiコーパスブラウザー。検索、信頼スコア、出典情報のモーダルを利用できます—
GET /healthサービスの状態—

/search が受け付けるパラメーター:query、n_results(1~20)、freshness(pd/pw/pm/py)、search_lang、country、corpus_first(デフォルトは true)、corpus_only(デフォルトは false)。

/sweep は、1 行につき 1 件のクエリを含む、次の形式の text/plain リクエスト本文を受け付けます:label|query[|priority][|domain]

  • priority ∈ broad(デフォルト、SearXNG、$0)/focused(Brave、約 $0.005)/critical(Brave + LLM Context、約 $0.01)
  • domain ∈ general(デフォルト)/scholarly(arxiv+PubMed+S2、$0)/ru(language=ru-RU によるバイアスを適用した SearXNG、$0)
# Examples
bench_a|qdrant production latency benchmarks|focused
sch_a|crispr cas9 off target effects|broad|scholarly
ru_a|tadviser сро рейтинг 2025|broad|ru
crit_a|self-hosted vector DB choice 2026|critical
gen|simple search|broad        # 2-field still works — defaults broad/general

結果は、フィルター可能な engines[] と engine_count を付けて Meilisearch に自動でインデックス化されます。

/academic_search は JSON を受け付けます:{ query, n_results (1-20), sources?: ["arxiv","pubmed","semanticscholar"] }。3 つのソースに並列で検索を実行し、DOI/タイトルで重複を除去して、上位 N 件を交互に並べて返します。

複数エンジンによる帰属の例
curl -X POST http://localhost:8080/sweep \
  -H "Content-Type: text/plain" \
  --data-binary $'t1|self-hosted search engine 2026\n'

出力の抜粋(parsed_snippets.md):

**1. GitHub - searxng/searxng**
- URL: https://github.com/searxng/searxng
- Engines: google, duckduckgo, brave, qwant (count=4)
  > A privacy-respecting, hackable metasearch engine...

**2. random-blog.io/seo-spam-2026**
- URL: https://random-blog.io/seo-spam-2026
- Engines: google (count=1)
  > Best self-hosted search engines you must try...

URL #1 の engine_count=4 は、4 つの独立したエンジンで見つかったことを示します。URL #2 の engine_count=1 は、1 つのエンジンでしか見つからなかったことを示します。信頼度のシグナルは後付けではなく、データに組み込まれています。

Meilisearch で信頼度によるフィルター処理
curl -H "Authorization: Bearer masterKey" \
  "http://localhost:7700/indexes/qsearch_corpus/documents?filter=engine_count%20%3E%3D%203"

3 つ以上のエンジンで見つかった URL のみを返します。信頼度の高いサブセットを取得できます。

MCP 統合

MCP サーバーはこのリポジトリに含まれており、npm パッケージはありません。ソースから実行してください:

git clone https://github.com/theYahia/qsearch.git && cd qsearch
npm install
npm start            # REST API on :8080 — must be running first
npm run start:mcp    # MCP server (Streamable HTTP) on :8081
Claude Code

~/.claude/settings.json に追加します:

{
  "mcpServers": {
    "qsearch": {
      "type": "http",
      "url": "http://localhost:8081"
    }
  }
}

利用可能なツール:

  • mcp__qsearch__web_search — Brave または SearXNG によるウェブ検索
  • mcp__qsearch__sweep — 複数エンジンによる帰属情報付きの一括調査
  • mcp__qsearch__academic_search — arxiv + PubMed + Semantic Scholar を通じた査読済み論文の検索
  • mcp__qsearch__sweep_context — フェーズ 3 のローカル LLM によるページ抽出(無料、Ollama)
  • mcp__qsearch__verify_citation — 引用された URL が主張を実際に裏付けているかを検証します(Supported/Partial/Unsupported/Fabricated)
  • mcp__qsearch__economy_report — すべてを Brave にした場合の基準とのコスト内訳の比較
  • mcp__qsearch__index_research — glob を使用してローカルの .md ファイルをインデックス化
  • mcp__qsearch__news_search — ニュース検索(Brave キーが必要)
  • mcp__qsearch__context_search — 詳細なページコンテンツ(Brave キーが必要)
その他の MCP over HTTP クライアント

qsearch は、ポート :8081 の / で Streamable HTTP トランスポートを公開します。Claude Desktop(HTTP モード)、OpenClaw、および仕様に準拠するすべての MCP クライアントと互換性があります。

スタック

コンポーネント技術
ランタイムNode.js ≥20
ウェブ検索Brave Search API(BYOK)
メタ検索SearXNG(セルフホスト、任意)
学術検索arxiv + PubMed E-utilities + Semantic Scholar API(無料、認証不要)
全文コーパスMeilisearch v1.7
ベクトルコーパスQdrant v1.17.1
クローラーCrawl4AI 0.8.6(Python サブプロセス)
埋め込みモデル(任意)Ollama nomic-embed-text(デフォルト)または llama.cpp /v1/embeddings
LLM クリーナー(任意)Ollama qwen2.5:7b-instruct(デフォルト。OLLAMA_CLEAN_MODEL で設定可能)
MCP@modelcontextprotocol/sdk
ライセンスApache-2.0

ロードマップ

バージョン機能状況
v0.3.1複数エンジンの engines[] 帰属 + デュアルスイープ + コーパス + MCPリリース済み
v0.4.0信頼レイヤー:/trust/:url、/corpus/top、/ui ビューアー、信頼度重み付けによる再ランキング、並べ替え/ページネーション、コーパスの upsert 時マージ、スニペットのサニタイズリリース済み
v0.4.1フェーズ A — 学術検索バックエンド(arxiv + PubMed + S2)、4 フィールドクエリ(label|q|priority|domain)、/academic_search JSON + MCP ツールリリース済み
v0.4.2フェーズ B — 埋め込みによる再ランキング(Ollama nomic-embed-text、QSEARCH_RERANK_ENABLED で制御);フェーズ C — SearXNG language=ru-RU によるロシア語対応リリース済み
v0.4.3QVAC SDK を削除し、すべてのローカル LLM を Ollama に移行(qwen2.5:7b-instruct + nomic-embed-text)リリース済み
v0.5ローンチ:awesome リストへの PR、MCP Registry への公開、Show HN、ニュースレターでの配信進行中
v0.6フェーズ B ステージ 2 — 重要なクエリ向けの LLM スコアリング再ランキング、Yandex 直接バックエンド、レイヤー 8 品質ゲート(拒否しきい値)次
v0.7+任意のフェデレーション(研究方針 — v0.5 の検証が完了するまでは時期未定)未着手

全体像と、過剰な約束をせずに提供できるようになるまでフェデレーションを研究方針にとどめる理由については、docs/VISION.md をご覧ください。

正直なトレードオフ

  • コールドスタート。 最初のスイープには 5~10 秒かかります(エンジンへのファンアウト + コーパスのインデックス作成)。長時間稼働するデーモンとして実行するのが最適です。
  • ベクトル検索は Windows では利用できません。 Qdrant はベアランタイムを必要とするため、すべてのプラットフォームに対応しているわけではありません。全文検索の Meilisearch はどこでも動作します。
  • SearXNG のレート制限。 セルフホストが必要です。パブリックインスタンスは Google にブロックされます。この問題には docker-compose で対応しています。
  • engines[] には SearXNG が必要です。 Brave のみのモードでも動作しますが、複数エンジンのシグナルは失われます。
  • 全文コンテンツにはレイテンシのコストがあります。 素朴なスニペット取得の約 3 秒に対し、約 31 秒かかります(双方向 RAG の研究)。qsearch では /context エンドポイントからオプトインで利用できます。

フォローする

ライセンス

Apache-2.0 — LICENSE をご覧ください。独立運営。BYOK。セルフホスト可能。ベンダーロックインなし。


WWmcp の一部 · Telegram:@vhodvai

コメント

MCP は初めてですか?

プロトコルの概要から最初のサーバーの導入まで、よくある疑問にまとめて答えます。

AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。