Skip to main content
Glama
ZDOSt
by ZDOSt

プライベート検索ゲートウェイ

このプロジェクトは、AIフロントエンド向けの決定論的でセルフホスト型の検索およびページ取得バックエンドです。SearXNG互換の検索エンドポイントを公開し、少数の検索エンジンでソースを発見し、最も有力なページを開き、実際のコンテンツを抽出し、限られた数の関連する同一サイトリンクを辿り、ローカルでエビデンスを再ランク付けし、引用元のURLとページから抽出されたテキストを返します。

有料の検索APIや内部言語モデルは呼び出しません。フロントエンドのモデルが取得したエビデンスを受け取り、回答を記述します。これにより、サービスはプライベートで予測可能に保たれ、カスタムのSearXNGまたはJSON検索プロバイダーを受け入れる任意のフロントエンドで使用できます。

実行されるもの

  • search-gateway: 唯一のクライアント向けサービス、内部ポート 8080

  • searxng: ウェブ、技術、ニュース、画像、研究の発見

  • reranker: ローカルの BAAI/bge-reranker-base 関連性ランキング

  • crawl4ai: JavaScript対応のクローリング、困難なページ用

  • web-runner: 分離されたCrawl4AIおよびPlaywright制御(Unixソケット経由)

  • pdf-runner: ネットワーク分離されたPDF抽出

  • safe-egress: ブラウザのプライベートネットワークおよびメタデータ送信先をブロック

  • redis: レスポンスキャッシュと古い結果のフォールバック

スタックはホストポートを公開しません。フロントエンドは共有Dockerネットワークを介して次に到達します:

http://search-gateway:8080/search

その共有ネットワークに接続されたすべてのコンテナがゲートウェイを呼び出すことができます。他の無関係なコンテナにアクセスさせたくない場合は、専用の共有ネットワークを使用してください。

Related MCP server: bathys

要件

  • 64ビットLinux VPS

  • Docker EngineおよびDocker Compose v2.24.4以降

  • イメージ、Chromium、およびリランカーモデル用に約10 GBの空きディスク容量

  • 完全なスタックには16 GBのRAMを推奨

提供される上限は、共有メモリと通常のDockerオーバーヘッドを除き、合計で約10.5 GBです。これらは予約ではなく制限ですが、16 GBのホストでは十分な余裕があります。最初のビルドは、Chromium、Crawl4AIイメージ、リランカーモデルをダウンロードするため遅くなります。

クリーンインストール

Dockerネットワークがまだ存在しない場合は、一度作成します:

docker network inspect docker-stacks_app-network >/dev/null 2>&1 || \
  docker network create docker-stacks_app-network

プロジェクトをクローンして設定します:

git clone https://github.com/ZDOSt/Research-MCP.git
cd Research-MCP
cp .env.example .env
chmod 600 .env

2つの異なるシークレットを生成します:

openssl rand -hex 32
openssl rand -hex 32

.env を編集し、SEARXNG_SECRET と CRAWL4AI_API_TOKEN をそれらの値に置き換えます。CLIENT_DOCKER_NETWORK は、フロントエンドが異なる外部Dockerネットワークを使用する場合にのみ変更します。

完全なスタックを検証して起動します:

docker compose config --quiet
docker compose up -d --build --wait
docker compose ps

ports: エントリは必要ありません。ゲートウェイをDockerの外部に意図的に公開しない限り、追加しないでください。

検証

ゲートウェイコンテナからヘルスチェックを実行します:

docker compose exec -T search-gateway python -c \
  "import urllib.request; print(urllib.request.urlopen('http://127.0.0.1:8080/healthz').read().decode())"

共有ネットワーク上の任意のコンテナから実際の検索を実行します。your-frontend-container を anythingllm、librechat、または別のコンテナ名に置き換えます:

docker exec your-frontend-container sh -lc \
  "wget -qO- 'http://search-gateway:8080/search?q=how+to+install+docker+compose&format=json' | head -c 1000"

レスポンスには results、ソースURL、抽出された content、診断情報が含まれている必要があります。検索スニペットは、サイトが抽出をブロックした場合やリクエスト期限に達した場合にのみ、明確にラベル付けされたフォールバックとして使用されます。

フロントエンドのセットアップ

フロントエンドがSearXNG URLを要求する場所では、次のベースURLを使用します:

http://search-gateway:8080

完全な検索パスを要求する場合は、次を使用します:

http://search-gateway:8080/search

AnythingLLMは、そのフィールドが SearXNG API Base URL とラベル付けされていても、完全な検索パスを必要とします。次のように設定します:

http://search-gateway:8080/search

標準リクエストは次のとおりです:

GET /search?q=your+question&format=json

サポートされるクエリパラメータは次のとおりです:

  • language=auto

  • time_range=day|week|month|year

  • categories=general,it,news,science,images

  • max_results=1..8

  • mode=auto|quick|balanced|deep

カテゴリが指定されていない場合、ゲートウェイはリクエストから有用なSearXNGカテゴリを推測します。auto は単純な検索にはクイックモード、技術的な質問や推奨事項にはバランスモードを使用します。

直接統合用に、よりリッチなJSONエンドポイントも利用可能です:

POST /v1/research
Content-Type: application/json

{
  "query": "What are the recommended settings for an AW3426DW?",
  "mode": "balanced",
  "max_results": 5,
  "language": "auto",
  "categories": []
}

更新

VPS上のリポジトリディレクトリから:

git pull --ff-only
docker compose config --quiet
docker compose up -d --build --remove-orphans --wait
docker compose ps

通常の更新では docker compose down を実行する必要はありません。既存のRedisキャッシュとリランカーのダウンロードは名前付きボリュームに保持されます。

運用

便利なコマンド:

docker compose ps
docker compose logs --tail=200 search-gateway searxng reranker
docker compose logs --tail=200 crawl4ai web-runner safe-egress pdf-runner
docker compose restart search-gateway
docker compose down
docker compose up -d --wait

docker compose down は名前付きボリュームを保持します。docker compose down -v はキャッシュとダウンロードされたリランカーモデルを削除するため、意図的な完全リセットにのみ使用してください。

制限事項

これは、ドキュメント、トラブルシューティング、製品設定、ゲーム、最新情報、一般的な調査においてホスティング型検索ツールに近づくことができますが、商用プロバイダーと同じカバレッジを保証することはできません。キーレスエンジンはデータセンターIPをレート制限する場合があり、一部のサイトはすべての自動ブラウザをブロックし、また、単一のVPSがGoogle、Brave、または有料の回答エンジンが使用する独自の検索インデックスを持つことはありません。ゲートウェイは、複数のディスカバリープロバイダー、同時抽出、ローカル再ランク付け、制限付きブラウザフォールバック、キャッシング、そして回答を捏造するのではなく正直な部分的な結果を返すことで補償します。

Maintenance

ActivitySlowing
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    A
    maintenance
    Provides local-first web intelligence over MCP with tools for search, fetch, crawl, extract, cache, find-similar, research, and autonomous agent loops, requiring no API keys.
    10
    875 npm
    5,455
    AGPL 3.0
  • A
    license
    A
    quality
    A
    maintenance
    Enables AI agents to run local deep-research workflows via a single MCP stdio server, combining web search, page extraction, query-aware distillation, and caching without cloud quotas. It exposes tools for deep research, search, and single or batch URL reading.
    6
    79 PyPI
    MIT
  • A
    license
    A
    quality
    C
    maintenance
    Gives MCP-capable agents live web access: search the web, scrape pages into Markdown (including JavaScript-heavy and bot-protected sites), and extract named fields as JSON, with job polling, token-aware content offloading, and built-in research guidance. Ships as a self-hostable stdio or HTTP service with spend caps and per-request key support.
    7
    MIT
  • F
    license
    B
    quality
    B
    maintenance
    Exposes web research tools to MCP agents so they can search the web, open and read pages, grep fetched content, manage a local SQLite corpus, and generate citations. Includes a containerized fetcher for headless browsing and PDF extraction.
    7
    -