mcpField
S
SearXNG MCP server

SearXNG MCP server

ローカル
github.com/nik-sharky検索1424 週間前に更新

SearXNG MCP server について

SearXNG MCP server は MCP クライアントを SearXNG インスタンスに接続し、複数エンジンを集約したウェブ検索を提供します。利用可能な検索カテゴリやエンジンをプログラムから確認する機能も備えています。

主な機能

  1. 01複数のウェブ検索エンジンを集約
  2. 02カテゴリ、エンジン、言語で絞り込み
  3. 03ページ、期間、セーフサーチの指定
  4. 04有効なカテゴリとエンジンの確認
  5. 05環境変数またはコマンドラインで設定

活用シーン

  1. 01設定済みのエンジンを横断したウェブ検索
  2. 02ニュース、画像、動画、論文の検索
  3. 03インスタンスで有効な検索エンジンの確認

MCP 対応

stdio、HTTP、SSE 経由で、ウェブ検索と検索設定の確認機能を MCP クライアントに公開します。検索結果は設定された SearXNG インスタンスから取得します。

設定

ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。

インストール方法は未掲載です

このサーバーのパッケージやリモートエンドポイントはまだ取得できていません。プロジェクトの README の手順に従ってください。

リポジトリ

ツール

ツール一覧はまだ取得されていません

ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。

詳細

SearXNG MCP サーバー

SearXNG インスタンスと連携し、ウェブ検索機能を提供する Model Context Protocol(MCP)サーバーです。

特長

  • ウェブ検索:複数のエンジンを横断して、強力な統合検索を実行します。
  • 探索:利用可能なカテゴリやエンジンをプログラムから取得します。
  • ステートレス HTTP:標準的な JSON-RPC クライアントと互換性があります。
  • 柔軟な設定:環境変数とコマンドライン引数に対応しています。

MCP サーバーと SearXNG を実行する compose.yml の例

services:
  searxng:
    image: searxng/searxng:latest
    ports:
      - "${SEARXNG_PORT:-8080}:8080"
    volumes:
      - "${SEARXNG_VOL_CONFIG:-searxng-config}:/etc/searxng/"
      - "${SEARXNG_VOL_DATA:-searxng-data}:/var/cache/searxng/"
    restart: always

  searxng-mcp:
    image: ghcr.io/aicrafted/searxng-mcp:latest
    restart: unless-stopped
    depends_on:
      # Ensure SearXNG starts before the MCP server
      - searxng
    environment:
      SEARXNG_URL: "${SEARXNG_URL:-http://searxng:8080}"
      MCP_HOST: "${MCP_HOST:-127.0.0.1}"
      MCP_PORT: "${MCP_PORT:-32123}"
      MCP_TRANSPORT: "${MCP_TRANSPORT:-http}"
      MCP_ALLOWED_HOSTS: "${MCP_ALLOWED_HOSTS:-localhost:*,127.0.0.1:*}"
      MCP_ALLOWED_ORIGINS: "${MCP_ALLOWED_ORIGINS:-http://localhost:*,http://127.0.0.1:*}"
      MCP_DISABLE_DNS_REBINDING_PROTECTION: "${MCP_DISABLE_DNS_REBINDING_PROTECTION:-false}"
    ports:
      - "${MCP_PORT:-32123}:${MCP_PORT:-32123}"

volumes:
  searxng-config:
  searxng-data:

重要: MCP サーバーが検索結果を読み取れるよう、SearXNG の settings.yml で JSON レスポンスを有効にしてください。

search:
  formats:
    - html
    - json
.env の例
# SearXNG url should be visible by the MCP server inside docker, so use internal service port here
SEARXNG_URL=http://searxng:8080
# Public SearXNG port
SEARXNG_PORT=8080
# Searxng config and data volumes, start with "./" if You want to bind dir instead using volume
SEARXNG_VOL_CONFIG=searxng-config
SEARXNG_VOL_DATA=searxng-data

# MCP server host, port and transport ("stdio", "sse", "http")
MCP_HOST=127.0.0.1
MCP_PORT=32123
MCP_TRANSPORT=http

# MCP DNS rebinding protection (see https://github.com/modelcontextprotocol/python-sdk/issues/1798 for details)
MCP_ALLOWED_HOSTS=localhost:*,127.0.0.1:*
MCP_ALLOWED_ORIGINS=http://localhost:*,http://127.0.0.1:*
# MCP_DISABLE_DNS_REBINDING_PROTECTION=true

MCP クライアントの設定

HTTP トランスポート(推奨)
{
  "mcpServers": {
    "searxng": {
      "type": "http",
      "url": "http://localhost:32123/mcp"
    }
  }
}
SSE トランスポート
{
  "mcpServers": {
    "searxng": {
      "type": "sse",
      "url": "http://localhost:32123/sse"
    }
  }
}

注: SSE トランスポートでは /mcp ではなく /sse エンドポイントを使用します。HTTP トランスポートでは /mcp を使用します。

ソースから実行するための前提条件

  • Python 3.10+
  • 起動中の SearXNG インスタンス。

インストール

  1. リポジトリをクローンし、ディレクトリに移動します。
  2. 依存関係をインストールします。
    pip install -r requirements.txt
    
  3. .env ファイルを設定します(任意)。

設定

サーバーは、コマンドライン引数と環境変数から設定を読み込みます。コマンドライン引数は、起動時に使用される対応するデフォルト値より優先されます。

変数デフォルト説明
SEARXNG_URLhttp://localhost:8080SearXNG インスタンスの URL。
SEARXNG_PORT8080compose の例で SearXNG コンテナに割り当てる、公開ホストポート。
SEARXNG_VOL_CONFIGsearxng-configcompose の例で /etc/searxng/ にマウントする Docker ボリュームまたはホストパス。
SEARXNG_VOL_DATAsearxng-datacompose の例で /var/cache/searxng/ にマウントする Docker ボリュームまたはホストパス。
MCP_HOST127.0.0.1HTTP/SSE トランスポートでバインドするホスト。Docker でポートを公開する場合は 0.0.0.0 を使用します。
MCP_PORT8000HTTP/SSE トランスポートでバインドするポート。
MCP_TRANSPORTstdioトランスポートモード:stdio、http、または sse。
MCP_ALLOWED_HOSTSlocalhost 用の SDK のデフォルト値DNS リバインディング保護のために許可する Host ヘッダーをカンマ区切りで指定します。
MCP_ALLOWED_ORIGINSlocalhost 用の SDK のデフォルト値DNS リバインディング保護のために許可する Origin ヘッダーをカンマ区切りで指定します。
MCP_DISABLE_DNS_REBINDING_PROTECTIONfalseSDK の DNS リバインディング保護を無効にするには true に設定します。

使用方法

uv または標準の Python を使用してサーバーを実行します。

python searxng_mcp.py --transport http --port 32123 --searxng http://searx.lan
Docker で実行する
  1. イメージをビルドする:

    docker build -t searxng-mcp .
    
  2. コンテナを実行する:

    docker run -d \
      -p 32123:32123 \
      --env-file .env \
      --name searxng-mcp \
      searxng-mcp
    
トランスポートのオプション
  • stdio:標準入力/出力(一部の MCP クライアントのデフォルト)。
  • http:ステートレス HTTP(streamable-http)。
  • sse:Server-Sent Events。
DNS リバインディング保護

最近のバージョンの MCP Python SDK では、DNS リバインディング攻撃からローカルサーバーを保護するため、HTTP/SSE トランスポートの Host ヘッダーと Origin ヘッダーを検証します。Docker、リバースプロキシ、またはカスタムドメイン経由でサーバーを公開し、421 Invalid Host Header が表示される場合は、許可リストを明示的に設定してください。

MCP_ALLOWED_HOSTS=localhost:*,127.0.0.1:*,mcp.example.com:*
MCP_ALLOWED_ORIGINS=http://localhost:*,http://127.0.0.1:*,https://mcp.example.com

信頼できるローカル開発環境で使用する場合や、この検証を別のインフラストラクチャ層で処理する場合は、SDK の保護を無効にできます。

MCP_DISABLE_DNS_REBINDING_PROTECTION=true

無効化は必要最小限にとどめてください。MCP_ALLOWED_HOSTS と MCP_ALLOWED_ORIGINS を設定する方法を推奨します。


検索機能ガイド

SearXNG は、さまざまなソースからの検索結果を統合します。このガイドでは、web_search ツールで利用できる機能について説明します。

検索カテゴリ

カテゴリを使うと、コンテンツの種類で検索結果を絞り込めます。categories パラメーターに指定します(カンマ区切り)。

カテゴリ説明
generalデフォルトのウェブ検索(Google、Brave、DuckDuckGo など)
images画像の検索結果
videosYouTube、Vimeo などの動画コンテンツ
news最近のニュース記事
map地理情報と地図情報
itIT 関連の検索(StackOverflow、GitHub など)
science科学論文と記事(ArXiv、Google Scholar)
filesトレントとファイルの検索
social_mediaソーシャルプラットフォームの投稿とプロフィール

サポートされているエンジン

SearXNG は 130 を超えるエンジンにクエリを送信できます。通常、設定されているエンジンには以下が含まれます。

  • ウェブ: Google、Brave、DuckDuckGo、Qwant、Startpage
  • ナレッジ: Wikipedia、Wikidata
  • 開発: GitHub、StackOverflow、PyPI
  • ソーシャル: Reddit、Twitter/X

高度な検索パラメーター

  • categories: 特定の種類で絞り込みます(例:news,it)。
  • engines: 特定のエンジンを指定します(例:google,wikipedia)。
  • language: 検索言語を指定します(例:en、es、fr)。
  • pageno: 複数ページにわたる検索結果を移動します。
  • time_range: 日付で絞り込みます(day、month、year)。
  • safesearch: コンテンツのフィルタリングを制御します(0=なし、1=中程度、2=厳格)。

プログラムによる検出

web_search_info ツールを使うと、インスタンスで有効になっているカテゴリとエンジンの一覧を動的に取得できます。

Windows のトラブルシューティング

Docker コンテナーの実行中に localhost に接続できない

症状: http://localhost:<port>/ が接続拒否を返すか、別のサービスに接続しますが、 コンテナー内からの curl は正常に動作します。

根本原因:WSL2 のポートリレーの残留

WSL2 は wslrelay.exe を使って、Linux VM から Windows ホストへポートを自動的に転送します。 WSL 内のプロセスがポートをリッスンすると、WSL は Windows 側の [::1]:<port> (IPv6 ループバック)にバインドされたリレーを作成します。

その WSL プロセスが停止しても、wslrelay.exe は多くの場合、ポートを解放しません。リレーの エントリはゾンビリスナーとして [::1]:<port> に残ります。

その後、Docker が同じホストポートにコンテナーを割り当てると、0.0.0.0:<port> には 正常にバインドされますが、[::1]:<port> は古いリレーにすでに占有されています。

Windows では、localhost はまず ::1(IPv6)に解決されます。そのため、ブラウザーや curl からの localhost:<port> へのリクエストは、Docker コンテナーではなく停止した wslrelay.exe のエントリに到達し、 接続エラーまたは予期しない応答が発生します。

IPv4 アドレスを明示的に指定した 127.0.0.1:<port> で接続すると、リレーを迂回して Docker に正常に到達します。

診断方法:

# Check what is listening on the port
netstat -ano | findstr :<port>

# Identify the processes
Get-Process -Id <pid1>,<pid2> | Select-Object Id,Name

同じポートに対するエントリが 2 つ表示され、一方が com.docker.backend、もう一方が wslrelay によって所有されている場合、これが問題です。

回避策:

オプションコマンド備考
IPv4 を直接使用するhttp://127.0.0.1:<port>/すぐに使用でき、再起動は不要です
WSL を再起動するwsl --shutdown古いリレーをすべて終了します。次回の使用時に WSL が再起動します
Docker のポートを変更するdocker run -p または docker-compose.yml のホストポートを変更します競合を完全に回避します

恒久的な解決策:

wsl --shutdown の実行後、Docker コンテナーを再起動します。リレーが存在しなくなるため、 同じポートが再び WSL 内で使用されるまで、localhost:<port> は正常に動作します。

予防策:

WSL と Docker の両方で同じポート上のサービスを定期的に実行する場合は、次のいずれかを推奨します。

  • そのサービスには常に Docker を使い、WSL から直接実行しない
  • WSL の開発環境と Docker の本番環境で異なるポートを使う
  • docker-compose.yml に 127.0.0.1:<port>:<port> の明示的なバインドを追加し、IPv4 を強制する

関連情報

コメント

MCP は初めてですか?

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

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