SearXNG MCP Server について
SearXNG MCP Server は、メタ検索エンジン SearXNG を MCP に接続する SSE ベースの MCP サーバーで、エージェントがプライバシーに配慮した Web 検索を実行できるようにします。独自の MCP サーバーを作成する際のテンプレートとしても利用でき、検索機能を必要とする開発者を想定しています。
主な機能
- 01SSE または stdio 経由の検索ツール
- 02セルフホストした SearXNG インスタンスへの問い合わせ
- 03カテゴリ、エンジン、言語、期間による絞り込み
- 04Docker または uv によるデプロイ
- 05カスタム MCP サーバー用のテンプレート
活用シーン
- 01AI エージェントへの Web 検索機能の追加
- 02ローカルまたはプライベート環境での検索バックエンドの運用
- 03テンプレートを使った新しい MCP サーバーの開発
MCP 対応
本プロジェクトは MCP サーバーとして、SearXNG を利用する search ツールを MCP クライアントに提供します。クライアントは SSE エンドポイントまたは stdio で接続します。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
ツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
SearXNG MCP サーバー
Model Context Protocol (MCP) サーバーの MCP SSE 実装であり、SearXNG と統合して、AI エージェントに強力でプライバシーに配慮した検索機能を提供します。
概要
このプロジェクトは、AI エージェントが SearXNG インスタンスを使用して Web 検索を実行できるようにする MCP サーバーを構築する方法を示します。SearXNG をバックエンドとして使用し、独自の MCP サーバーを作成するための実用的なテンプレートとして機能します。
この実装は、MCP サーバーを構築するために Anthropic が提唱するベストプラクティスに従っており、MCP 互換のあらゆるクライアントとシームレスに統合できます。
前提条件
- Python 3.9 以上
- 実行中の SearXNG インスタンスへのアクセス (ローカルまたはリモート)
- Docker (オプション、コンテナ化されたデプロイ用)
- uv (オプション、高速な Python 依存関係管理用)
- Smithery (オプション、MCP サーバー管理用)
SearXNG サーバー (必須)
実行中でアクセス可能な SearXNG サーバーが必要です。推奨される方法は Docker を使用する方法です:
docker run -d --name=searxng -p 32768:8080 -v "/root/searxng:/etc/searxng" \
-e "BASE_URL=http://0.0.0.0:32768/" \
-e "INSTANCE_NAME=home" \
--restart always searxng/searxng
- これにより SearXNG がポート 32768 で実行され、設定は
/root/searxngに永続化されます。 - MCP サーバーは、デフォルトで SearXNG が
http://172.17.0.1:32768で利用可能であることを想定しています (.envを参照)。
インストール
uv を使用する場合
uv がインストールされていない場合はインストールします:
pip install uv
このリポジトリをクローンします:
git clone https://github.com/The-AI-Workshops/searxng-mcp-server.git
cd searxng-mcp-server/dev/searXNG-mcp
依存関係をインストールします:
uv pip install -r requirements.txt
提供されているサンプルを基に .env ファイルを作成します:
nano .env
# Edit .env as needed
.env ファイルで環境変数を設定します (設定セクションを参照)。
Docker を使用する場合 (推奨)
Docker イメージをビルドします:
docker build -t mcp/searxng-mcp .
.env ファイルを作成し、環境変数を設定します。
Docker イメージを実行します:
docker run -d --env-file ./.env -p 32769:32769 mcp/searxng-mcp
Smithery を使用する場合
Smithery は、AI エージェントツールと MCP サーバーを管理するためのコマンドラインツールです。
Smithery がインストールされていない場合はインストールします (さまざまなインストール方法については Smithery のドキュメントを参照してください。たとえば pipx を使用します):
pipx install smithery
Smithery を使用して SearXNG MCP サーバーをインストールします:
smithery install @The-AI-Workshops/searxng-mcp-server
これにより、サーバーとその依存関係が Smithery が管理する専用の環境にインストールされます。
インストール後、Smithery はインストールされたサーバーへのパスを提示します。設定を行うには、このディレクトリに移動する必要があります。たとえば、Smithery がツールを ~/.smithery/tools/ にインストールする場合、パスは ~/.smithery/tools/The-AI-Workshops/searxng-mcp-server になる可能性があります。
サンプルをコピーして、サーバーのディレクトリに .env ファイルを作成します:
# Example:
# cd ~/.smithery/tools/The-AI-Workshops/searxng-mcp-server
cp .env.example .env
nano .env
# Edit .env as needed
.env ファイルで環境変数を設定します (設定セクションを参照)。
設定
以下の環境変数を .env ファイルで設定できます:
| 変数 | 説明 | 例 |
|---|---|---|
| SEARXNG_BASE_URL | SearXNG インスタンスのベース URL | http://172.17.0.1:32768 |
| HOST | SSE トランスポート使用時にバインドするホスト | 0.0.0.0 |
| PORT | SSE トランスポート使用時にリッスンするポート | 32769 |
| TRANSPORT | トランスポートプロトコル (sse または stdio) | sse |
サーバーの実行
uv を使用する場合
SSE トランスポート
.env で TRANSPORT=sse を設定してから、次を実行します:
uv run dev/searXNG-mcp/server.py
Stdio トランスポート
stdio の場合、MCP クライアント自体が MCP サーバーを起動できるため、この時点で実行する必要はありません。
Docker の使用
SSE トランスポート
docker build -t mcp/searxng-mcp .
docker run --rm -it -p 32769:32769 --env-file dev/searXNG-mcp/.env -v $(pwd)/dev/searXNG-mcp:/app mcp/searxng-mcp
-v $(pwd)/dev/searXNG-mcp:/appマウントにより、ホスト上のコードと .env ファイルをライブ編集し、変更を実行中のコンテナに反映させることができます。- サーバーは
http://localhost:32769/sseで利用可能になります。
stdio トランスポート
stdio の場合、MCP クライアント自体が MCP サーバーのコンテナを起動できるため、この時点で実行する必要はありません。
Smithery での実行
SSE トランスポート
Smithery でインストールされたサーバーディレクトリの .env に TRANSPORT=sse を設定します。
その後、通常は Smithery がツール用に作成した仮想環境の Python インタープリターを使用してサーバーを実行できます:
# Navigate to the server directory, e.g.,
# cd ~/.smithery/tools/The-AI-Workshops/searxng-mcp-server
~/.smithery/venvs/The-AI-Workshops_searxng-mcp-server/bin/python server.py
または、Smithery がインストールされたツール用の直接実行コマンドを提供している場合は、そちらを使用できます(Smithery のドキュメントを確認してください):
smithery run @The-AI-Workshops/searxng-mcp-server
サーバーは .env の HOST と PORT の設定に基づいて利用可能になります(例: http://localhost:32769/sse)。
stdio トランスポート
stdio の場合、MCP クライアント自体がサーバーを起動します。クライアントの設定では、Smithery が管理するディレクトリ内の server.py スクリプトを指定する必要があり、smithery exec またはツールの仮想環境内の Python インタープリターへの直接パスを使用する場合があります。例については「MCP クライアントとの統合」セクションを参照してください。
MCP クライアントとの統合
SSE 設定
SSE トランスポートでサーバーを実行したら、次の設定を使用して接続できます:
{
"mcpServers": {
"searxng": {
"transport": "sse",
"url": "http://localhost:32769/sse"
}
}
}
Windsurf ユーザーへの注意: 設定では url の代わりに serverUrl を使用してください:
{
"mcpServers": {
"searxng": {
"transport": "sse",
"serverUrl": "http://localhost:32769/sse"
}
}
}
n8n ユーザーへの注意: n8n は自身のコンテナの外部からホストマシンに到達する必要があるため、localhost の代わりに host.docker.internal を使用してください:
したがって、MCP ノードの完全な URL は次のようになります: http://host.docker.internal:32769/sse
デフォルトの 32769 以外の値を使用している場合は、ポートを更新してください。
Python と stdio の設定
Claude Desktop、Windsurf、またはその他の MCP クライアントの MCP 設定にこのサーバーを追加します:
{
"mcpServers": {
"searxng": {
"command": "python",
"args": ["dev/searXNG-mcp/server.py"],
"env": {
"TRANSPORT": "stdio",
"SEARXNG_BASE_URL": "http://localhost:32768",
"HOST": "0.0.0.0",
"PORT": "32769"
}
}
}
}
Docker と stdio の設定
{
"mcpServers": {
"searxng": {
"command": "docker",
"args": ["run", "--rm", "-i",
"-e", "TRANSPORT",
"-e", "SEARXNG_BASE_URL",
"-e", "HOST",
"-e", "PORT",
"mcp/searxng-mcp"],
"env": {
"TRANSPORT": "stdio",
"SEARXNG_BASE_URL": "http://localhost:32768",
"HOST": "0.0.0.0",
"PORT": "32769"
}
}
}
}
Smithery と stdio の設定
Smithery を使用してサーバーをインストールした場合、MCP クライアントを設定して stdio 経由で実行できます。Smithery は、ツールの環境内から実行可能ファイルを実行するための exec コマンドを提供しています。
{
"mcpServers": {
"searxng": {
"command": "smithery",
"args": ["exec", "@The-AI-Workshops/searxng-mcp-server", "--", "python", "server.py"],
// "cwd" (current working directory) might be automatically handled by Smithery.
// If server.py is in a subdirectory, adjust the python script path e.g., "python", "path/to/server.py"
"env": {
"TRANSPORT": "stdio",
"SEARXNG_BASE_URL": "http://localhost:32768", // Adjust as needed
"HOST": "0.0.0.0", // Typically not used by stdio server itself but good to set
"PORT": "32769" // Typically not used by stdio server itself
}
}
}
}
または、Smithery が作成した仮想環境内の Python インタープリターへのパス(例: ~/.smithery/venvs/The-AI-Workshops_searxng-mcp-server/bin/python)と、server.py へのパス(例: ~/.smithery/tools/The-AI-Workshops/searxng-mcp-server/server.py)を確認し、それらを直接使用できます:
{
"mcpServers": {
"searxng": {
"command": "~/.smithery/venvs/The-AI-Workshops_searxng-mcp-server/bin/python",
"args": ["~/.smithery/tools/The-AI-Workshops/searxng-mcp-server/server.py"],
// "cwd" should be the directory containing server.py if not using absolute paths for args,
// or if server.py relies on relative paths for other files (like .env).
// Example: "cwd": "~/.smithery/tools/The-AI-Workshops/searxng-mcp-server",
"env": {
"TRANSPORT": "stdio",
"SEARXNG_BASE_URL": "http://localhost:32768"
// Other necessary env vars from .env can be duplicated here
}
}
}
}
パスが Smithery のインストール環境に対して正しいこと、および .env ファイルが server.py から検出可能であることを確認してください(通常は cwd をサーバーのルートディレクトリに設定するか、Smithery が絶対パスを設定している場合は server.py が絶対パスから読み込むようにします)。
独自のサーバーの構築
このテンプレートは、より複雑な MCP サーバーを構築するための基盤を提供します。独自のサーバーを構築するには:
@mcp.tool()デコレーターを使用してメソッドを作成し、独自のツールを追加します- 独自の依存関係(クライアント、データベース接続など)を追加するために、独自のライフスパン関数を作成します
@mcp.resource()と@mcp.prompt()を使用して、プロンプトとリソースも追加します
SearXNG 検索ツールのパラメータ
search ツールは以下のパラメータをサポートしています(q を除き、すべて任意です):
q(必須):検索クエリ文字列。categories:有効な検索カテゴリのカンマ区切りリスト。engines:有効な検索エンジンのカンマ区切りリスト。language:言語のコード。page:検索ページ番号(デフォルト:1)。time_range:[day, month, year]format:[json, csv, rss](デフォルト:json)results_on_new_tab:[0, 1]image_proxy:[true, false]autocomplete:[google, dbpedia, duckduckgo, mwmbl, startpage, wikipedia, stract, swisscows, qwant]safesearch:[0, 1, 2]theme:[simple]enabled_plugins:有効なプラグインのリスト。disabled_plugins:無効なプラグインのリスト。enabled_engines:有効なエンジンのリスト。disabled_engines:無効なエンジンのリスト。
詳細については、SearXNG ドキュメント を参照してください。
ライセンス
MIT License
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。